mirror of
https://github.com/anomalyco/opencode.git
synced 2026-04-24 06:45:22 +00:00
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
const defaults: Record<string, string> = {
|
|
ask: "var(--icon-agent-ask-base)",
|
|
build: "var(--icon-agent-build-base)",
|
|
docs: "var(--icon-agent-docs-base)",
|
|
plan: "var(--icon-agent-plan-base)",
|
|
}
|
|
|
|
const palette = [
|
|
"var(--icon-agent-ask-base)",
|
|
"var(--icon-agent-build-base)",
|
|
"var(--icon-agent-docs-base)",
|
|
"var(--icon-agent-plan-base)",
|
|
"var(--syntax-info)",
|
|
"var(--syntax-success)",
|
|
"var(--syntax-warning)",
|
|
"var(--syntax-property)",
|
|
"var(--syntax-constant)",
|
|
"var(--text-diff-add-base)",
|
|
"var(--text-diff-delete-base)",
|
|
"var(--icon-warning-base)",
|
|
]
|
|
|
|
function tone(name: string) {
|
|
let hash = 0
|
|
for (const char of name) hash = (hash * 31 + char.charCodeAt(0)) >>> 0
|
|
return palette[hash % palette.length]
|
|
}
|
|
|
|
export function agentColor(name: string, custom?: string) {
|
|
if (custom) return custom
|
|
return defaults[name] ?? defaults[name.toLowerCase()] ?? tone(name.toLowerCase())
|
|
}
|
|
|
|
export function messageAgentColor(
|
|
list: readonly { role: string; agent?: string }[] | undefined,
|
|
agents: readonly { name: string; color?: string }[],
|
|
) {
|
|
if (!list) return undefined
|
|
for (let i = list.length - 1; i >= 0; i--) {
|
|
const item = list[i]
|
|
if (item.role !== "user" || !item.agent) continue
|
|
return agentColor(item.agent, agents.find((agent) => agent.name === item.agent)?.color)
|
|
}
|
|
}
|