Files
tutti/packages/agent/gui/shared/agentTargetPresentation.ts
agent-radar 2ed3415fb7
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
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

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
};
}