import figures from 'figures' import * as React from 'react' import type { KeyboardEvent } from '../../ink/events/keyboard-event.js' import { Box, Text } from '../../ink.js' import { useKeybinding } from '../../keybindings/useKeybinding.js' import type { Tools } from '../../Tool.js' import { getAgentColor } from '../../tools/AgentTool/agentColorManager.js' import { getMemoryScopeDisplay } from '../../tools/AgentTool/agentMemory.js' import { resolveAgentTools } from '../../tools/AgentTool/agentToolUtils.js' import { type AgentDefinition, isBuiltInAgent, } from '../../tools/AgentTool/loadAgentsDir.js' import { getAgentModelDisplay } from '../../utils/model/agent.js' import { Markdown } from '../Markdown.js' import { getActualRelativeAgentFilePath } from './agentFileUtils.js' type Props = { agent: AgentDefinition tools: Tools allAgents?: AgentDefinition[] onBack: () => void } export function AgentDetail({ agent, tools, onBack }: Props): React.ReactNode { const resolvedTools = resolveAgentTools(agent, tools, false) const filePath = getActualRelativeAgentFilePath(agent) const backgroundColor = getAgentColor(agent.agentType) // Handle Esc to go back useKeybinding('confirm:no', onBack, { context: 'Confirmation' }) // Handle Enter to go back const handleKeyDown = (e: KeyboardEvent) => { if (e.key === 'return') { e.preventDefault() onBack() } } function renderToolsList(): React.ReactNode { if (resolvedTools.hasWildcard) { return All tools } if (!agent.tools || agent.tools.length === 0) { return None } return ( <> {resolvedTools.validTools.length > 0 && ( {resolvedTools.validTools.join(', ')} )} {resolvedTools.invalidTools.length > 0 && ( {figures.warning} Unrecognized:{' '} {resolvedTools.invalidTools.join(', ')} )} ) } return ( {filePath} Description (tells Claude when to use this agent): {agent.whenToUse} Tools:{' '} {renderToolsList()} Model: {getAgentModelDisplay(agent.model)} {agent.permissionMode && ( Permission mode: {agent.permissionMode} )} {agent.memory && ( Memory: {getMemoryScopeDisplay(agent.memory)} )} {agent.hooks && Object.keys(agent.hooks).length > 0 && ( Hooks: {Object.keys(agent.hooks).join(', ')} )} {agent.skills && agent.skills.length > 0 && ( Skills:{' '} {agent.skills.length > 10 ? `${agent.skills.length} skills` : agent.skills.join(', ')} )} {backgroundColor && ( Color:{' '} {' '} {agent.agentType}{' '} )} {!isBuiltInAgent(agent) && ( <> System prompt: {agent.getSystemPrompt()} )} ) }