| import type { UUID } from 'crypto' |
| import { getSessionId } from '../../bootstrap/state.js' |
| import type { ToolUseContext } from '../../Tool.js' |
| import { |
| AGENT_COLORS, |
| type AgentColorName, |
| } from '../../tools/AgentTool/agentColorManager.js' |
| import type { |
| LocalJSXCommandContext, |
| LocalJSXCommandOnDone, |
| } from '../../types/command.js' |
| import { |
| getTranscriptPath, |
| saveAgentColor, |
| } from '../../utils/sessionStorage.js' |
| import { isTeammate } from '../../utils/teammate.js' |
|
|
| const RESET_ALIASES = ['default', 'reset', 'none', 'gray', 'grey'] as const |
|
|
| export async function call( |
| onDone: LocalJSXCommandOnDone, |
| context: ToolUseContext & LocalJSXCommandContext, |
| args: string, |
| ): Promise<null> { |
| |
| if (isTeammate()) { |
| onDone( |
| 'Cannot set color: This session is a swarm teammate. Teammate colors are assigned by the team leader.', |
| { display: 'system' }, |
| ) |
| return null |
| } |
|
|
| if (!args || args.trim() === '') { |
| const colorList = AGENT_COLORS.join(', ') |
| onDone(`Please provide a color. Available colors: ${colorList}, default`, { |
| display: 'system', |
| }) |
| return null |
| } |
|
|
| const colorArg = args.trim().toLowerCase() |
|
|
| |
| if (RESET_ALIASES.includes(colorArg as (typeof RESET_ALIASES)[number])) { |
| const sessionId = getSessionId() as UUID |
| const fullPath = getTranscriptPath() |
|
|
| |
| |
| await saveAgentColor(sessionId, 'default', fullPath) |
|
|
| context.setAppState(prev => ({ |
| ...prev, |
| standaloneAgentContext: { |
| ...prev.standaloneAgentContext, |
| name: prev.standaloneAgentContext?.name ?? '', |
| color: undefined, |
| }, |
| })) |
|
|
| onDone('Session color reset to default', { display: 'system' }) |
| return null |
| } |
|
|
| if (!AGENT_COLORS.includes(colorArg as AgentColorName)) { |
| const colorList = AGENT_COLORS.join(', ') |
| onDone( |
| `Invalid color "${colorArg}". Available colors: ${colorList}, default`, |
| { display: 'system' }, |
| ) |
| return null |
| } |
|
|
| const sessionId = getSessionId() as UUID |
| const fullPath = getTranscriptPath() |
|
|
| |
| await saveAgentColor(sessionId, colorArg, fullPath) |
|
|
| |
| context.setAppState(prev => ({ |
| ...prev, |
| standaloneAgentContext: { |
| ...prev.standaloneAgentContext, |
| name: prev.standaloneAgentContext?.name ?? '', |
| color: colorArg as AgentColorName, |
| }, |
| })) |
|
|
| onDone(`Session color set to: ${colorArg}`, { display: 'system' }) |
| return null |
| } |
|
|