Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import { managedAgentRoundedIconUrl } from "./managedAgentIcons";
|
|
|
|
export interface AgentMessageMarkdownAgentTarget {
|
|
agentTargetId: string;
|
|
iconUrl?: string | null;
|
|
maskIconUrl?: string | null;
|
|
name?: string | null;
|
|
provider?: string | null;
|
|
workspaceId?: string | null;
|
|
}
|
|
|
|
export interface ResolvedAgentMentionTargetPresentation {
|
|
iconUrl: string | undefined;
|
|
name: string | undefined;
|
|
provider: string | undefined;
|
|
target: AgentMessageMarkdownAgentTarget | null;
|
|
}
|
|
|
|
export function resolveAgentTargetPresentation(input: {
|
|
agentTargetId: string;
|
|
agentTargets: readonly AgentMessageMarkdownAgentTarget[];
|
|
workspaceId?: string | null;
|
|
}): AgentMessageMarkdownAgentTarget | null {
|
|
const agentTargetId = input.agentTargetId.trim();
|
|
if (!agentTargetId) {
|
|
return null;
|
|
}
|
|
const workspaceId = input.workspaceId?.trim() ?? "";
|
|
return (
|
|
input.agentTargets.find(
|
|
(target) =>
|
|
target.agentTargetId.trim() === agentTargetId &&
|
|
(target.workspaceId?.trim() ?? "") === workspaceId
|
|
) ??
|
|
input.agentTargets.find(
|
|
(target) => target.agentTargetId.trim() === agentTargetId
|
|
) ??
|
|
null
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Resolves every Agent mention surface from the same target directory.
|
|
* Serialized mention metadata is only a fallback because it can outlive the
|
|
* Agent directory entry that owns the current name, provider, and icon.
|
|
*/
|
|
export function resolveAgentMentionTargetPresentation(input: {
|
|
agentTargetId?: string | null;
|
|
agentTargets: readonly AgentMessageMarkdownAgentTarget[];
|
|
fallbackIconUrl?: string | null;
|
|
fallbackName?: string | null;
|
|
fallbackProvider?: string | null;
|
|
workspaceId?: string | null;
|
|
}): ResolvedAgentMentionTargetPresentation {
|
|
const agentTargetId = input.agentTargetId?.trim() ?? "";
|
|
const target = resolveAgentTargetPresentation({
|
|
agentTargetId,
|
|
agentTargets: input.agentTargets,
|
|
workspaceId: input.workspaceId
|
|
});
|
|
const provider =
|
|
target?.provider?.trim() || input.fallbackProvider?.trim() || undefined;
|
|
return {
|
|
iconUrl:
|
|
target?.iconUrl?.trim() ||
|
|
input.fallbackIconUrl?.trim() ||
|
|
(provider ? managedAgentRoundedIconUrl(provider) : undefined),
|
|
name: target?.name?.trim() || input.fallbackName?.trim() || undefined,
|
|
provider,
|
|
target
|
|
};
|
|
}
|