Files
tutti/packages/agent/gui/providerIconAssets.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

130 lines
4.0 KiB
TypeScript

import claudeCodeFlatFilledIconUrl from "./app/renderer/assets/icons/agents/claudecode-flat-filled.svg";
import codexFlatFilledIconUrl from "./app/renderer/assets/icons/agents/codex-flat-filled.svg";
import cursorFlatFilledIconUrl from "./app/renderer/assets/icons/agents/cursor-flat-filled.svg";
import opencodeFlatFilledIconUrl from "./app/renderer/assets/icons/agents/opencode-flat-filled.svg";
import tuttiFlatFilledIconUrl from "./app/renderer/assets/icons/agents/tutti-flat-filled.svg";
import {
claudeRoundedUrl,
codexRoundedUrl,
cursorColorfulUrl,
cursorRoundedUrl,
manageAgentClaudeCodeUrl,
manageAgentCodexUrl,
manageAgentCursorUrl,
manageAgentOpenCodeUrl,
manageAgentOpenclawUrl,
manageAgentTuttiUrl,
opencodeRoundedUrl,
openclawRoundedUrl,
providerRailClaudeCodeColorfulUrl,
providerRailCodexColorfulUrl,
providerRailOpenCodeColorfulUrl,
providerRailTuttiUrl,
tuttiAgentRoundedUrl,
tuttiDocRoundedUrl
} from "./managedAgentIconAssets.ts";
import type { ProviderIconAssetVariant } from "./providerIconTypes.ts";
export {
PROVIDER_ICON_ASSET_VARIANTS,
type ProviderIconAssetVariant
} from "./providerIconTypes.ts";
export type ProviderIconAssetSet = Partial<
Record<ProviderIconAssetVariant, string>
>;
/** Provider descriptors reference these assets only through Identity.IconKey. */
export const PROVIDER_ICON_ASSETS_BY_ICON_KEY: Readonly<
Record<string, ProviderIconAssetSet>
> = {
"claude-code": {
manage: manageAgentClaudeCodeUrl,
providerRail: providerRailClaudeCodeColorfulUrl,
rounded: claudeRoundedUrl,
sessionColorful: claudeRoundedUrl,
sessionFlat: claudeCodeFlatFilledIconUrl,
dock: claudeRoundedUrl
},
codex: {
manage: manageAgentCodexUrl,
providerRail: providerRailCodexColorfulUrl,
rounded: codexRoundedUrl,
sessionColorful: codexRoundedUrl,
sessionFlat: codexFlatFilledIconUrl,
dock: codexRoundedUrl
},
cursor: {
manage: manageAgentCursorUrl,
providerRail: cursorColorfulUrl,
rounded: cursorColorfulUrl,
sessionColorful: cursorColorfulUrl,
sessionFlat: cursorFlatFilledIconUrl,
dock: cursorRoundedUrl
},
openclaw: {
manage: manageAgentOpenclawUrl,
providerRail: openclawRoundedUrl,
rounded: openclawRoundedUrl,
sessionColorful: openclawRoundedUrl,
sessionFlat: openclawRoundedUrl,
dock: openclawRoundedUrl
},
opencode: {
manage: manageAgentOpenCodeUrl,
providerRail: providerRailOpenCodeColorfulUrl,
rounded: opencodeRoundedUrl,
sessionColorful: opencodeRoundedUrl,
sessionFlat: opencodeFlatFilledIconUrl,
dock: opencodeRoundedUrl
},
tutti: {
manage: manageAgentTuttiUrl,
providerRail: providerRailTuttiUrl,
rounded: tuttiDocRoundedUrl,
sessionColorful: manageAgentTuttiUrl,
sessionFlat: tuttiFlatFilledIconUrl,
dock: tuttiAgentRoundedUrl
}
};
export function resolveProviderIconAsset(
iconKey: string | null | undefined,
variant: ProviderIconAssetVariant
): string | null {
const normalizedIconKey = iconKey?.trim().toLowerCase() ?? "";
return PROVIDER_ICON_ASSETS_BY_ICON_KEY[normalizedIconKey]?.[variant] ?? null;
}
export function createProviderIconUrlMap(
variant: ProviderIconAssetVariant,
presentationIconAliases: Readonly<Record<string, string>>,
migratedProviderIdentities: readonly {
providerId: string;
iconKey: string;
}[]
): Record<string, string> {
const result: Record<string, string> = {};
for (const [providerId, iconKey] of Object.entries(presentationIconAliases)) {
const iconUrl = resolveProviderIconAsset(iconKey, variant);
if (iconUrl) {
result[providerId] = iconUrl;
}
}
for (const identity of migratedProviderIdentities) {
const iconUrl = resolveProviderIconAsset(identity.iconKey, variant);
if (iconUrl) {
result[identity.providerId] = iconUrl;
}
}
return result;
}
export {
claudeCodeFlatFilledIconUrl,
codexFlatFilledIconUrl,
cursorFlatFilledIconUrl,
opencodeFlatFilledIconUrl,
tuttiFlatFilledIconUrl
};