source dump of claude code
at main 70 lines 2.1 kB view raw
1/** 2 * Agents subcommand handler — prints the list of configured agents. 3 * Dynamically imported only when `claude agents` runs. 4 */ 5 6import { 7 AGENT_SOURCE_GROUPS, 8 compareAgentsByName, 9 getOverrideSourceLabel, 10 type ResolvedAgent, 11 resolveAgentModelDisplay, 12 resolveAgentOverrides, 13} from '../../tools/AgentTool/agentDisplay.js' 14import { 15 getActiveAgentsFromList, 16 getAgentDefinitionsWithOverrides, 17} from '../../tools/AgentTool/loadAgentsDir.js' 18import { getCwd } from '../../utils/cwd.js' 19 20function formatAgent(agent: ResolvedAgent): string { 21 const model = resolveAgentModelDisplay(agent) 22 const parts = [agent.agentType] 23 if (model) { 24 parts.push(model) 25 } 26 if (agent.memory) { 27 parts.push(`${agent.memory} memory`) 28 } 29 return parts.join(' · ') 30} 31 32export async function agentsHandler(): Promise<void> { 33 const cwd = getCwd() 34 const { allAgents } = await getAgentDefinitionsWithOverrides(cwd) 35 const activeAgents = getActiveAgentsFromList(allAgents) 36 const resolvedAgents = resolveAgentOverrides(allAgents, activeAgents) 37 38 const lines: string[] = [] 39 let totalActive = 0 40 41 for (const { label, source } of AGENT_SOURCE_GROUPS) { 42 const groupAgents = resolvedAgents 43 .filter(a => a.source === source) 44 .sort(compareAgentsByName) 45 46 if (groupAgents.length === 0) continue 47 48 lines.push(`${label}:`) 49 for (const agent of groupAgents) { 50 if (agent.overriddenBy) { 51 const winnerSource = getOverrideSourceLabel(agent.overriddenBy) 52 lines.push(` (shadowed by ${winnerSource}) ${formatAgent(agent)}`) 53 } else { 54 lines.push(` ${formatAgent(agent)}`) 55 totalActive++ 56 } 57 } 58 lines.push('') 59 } 60 61 if (lines.length === 0) { 62 // biome-ignore lint/suspicious/noConsole:: intentional console output 63 console.log('No agents found.') 64 } else { 65 // biome-ignore lint/suspicious/noConsole:: intentional console output 66 console.log(`${totalActive} active agents\n`) 67 // biome-ignore lint/suspicious/noConsole:: intentional console output 68 console.log(lines.join('\n').trimEnd()) 69 } 70}