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()}
>
)}
)
}