{"version":3,"file":"agents-command.mjs","names":[],"sources":["../../../src/commands/agents-command.ts"],"sourcesContent":["/**\n * Agents command — manage sub-agent definitions.\n *\n * /agents            — List all sub-agents\n * /agents info <name> — Show details for a sub-agent\n * /agents enable <name>  — Enable a sub-agent\n * /agents disable <name> — Disable a sub-agent\n * /agents delete <name>  — Delete a custom sub-agent (presets cannot be deleted)\n */\n\nimport { getAgentPool, type SubAgentDef } from '../services/agent-pool.js';\nimport { detectProvider, getApiKey } from '../services/agent-orchestrator.js';\n\nfunction formatAgentSummary(agent: SubAgentDef): string {\n  const status = agent.enabled ? 'enabled' : 'disabled';\n  const tag = agent.isPreset ? ' (preset)' : '';\n  return `  **${agent.name}**${tag} (${status}) — ${agent.description.slice(0, 60)}${agent.description.length > 60 ? '...' : ''}\\n    Model: ${agent.model} | Tools: ${agent.allowedTools.length} | Uses: ${agent.usageCount}`;\n}\n\nfunction formatAgentDetail(agent: SubAgentDef): string {\n  const lines: string[] = [];\n  lines.push(`**${agent.label}** (\\`${agent.name}\\`)${agent.isPreset ? ' — preset' : ''}`);\n  lines.push(`  Status: ${agent.enabled ? 'enabled' : 'disabled'}`);\n  lines.push(`  Description: ${agent.description}`);\n  lines.push(`  Model: ${agent.model}`);\n  lines.push(`  Max tokens: ${agent.maxTokens} | Temperature: ${agent.temperature}`);\n  lines.push(`  Max tool calls: ${agent.maxToolCalls} | Timeout: ${agent.timeoutMs / 1000}s`);\n  lines.push(`  Uses: ${agent.usageCount}`);\n  if (agent.allowedTools.length > 0) {\n    lines.push(`  Allowed tools: ${agent.allowedTools.join(', ')}`);\n  } else {\n    lines.push(`  Allowed tools: none (reasoning only)`);\n  }\n  lines.push(`  System prompt (first 200 chars):\\n    ${agent.systemPrompt.slice(0, 200).replace(/\\n/g, '\\n    ')}${agent.systemPrompt.length > 200 ? '...' : ''}`);\n  lines.push(`  Created by: ${agent.createdBy}`);\n  return lines.join('\\n');\n}\n\nexport const agentsCommand = {\n  name: 'agents',\n  description: 'Manage sub-agents: list, info, enable, disable, delete',\n  acceptsArgs: true,\n  requireAuth: true,\n  handler: async (ctx?: any) => {\n    const rawArgs = (ctx?.args ?? '').trim();\n    const parts = rawArgs.split(/\\s+/);\n    const subcommand = parts[0] || 'list';\n    const arg = parts.slice(1).join(' ');\n\n    const pool = getAgentPool();\n\n    switch (subcommand) {\n      case 'list': {\n        const agents = pool.list();\n        const provider = detectProvider();\n        const hasKey = !!getApiKey(provider);\n\n        const sections: string[] = [];\n        sections.push(`**Sub-Agents** (${agents.length} total, provider: ${provider}, key: ${hasKey ? 'configured' : 'missing'})`);\n\n        const presets = agents.filter(a => a.isPreset);\n        const custom = agents.filter(a => !a.isPreset);\n\n        if (presets.length > 0) {\n          sections.push(`\\n**Presets:**\\n${presets.map(formatAgentSummary).join('\\n')}`);\n        }\n        if (custom.length > 0) {\n          sections.push(`\\n**Custom:**\\n${custom.map(formatAgentSummary).join('\\n')}`);\n        }\n\n        if (!hasKey) {\n          sections.push(`\\n**Note:** No API key for \"${provider}\". Set ANTHROPIC_API_KEY, OPENROUTER_API_KEY, OPENAI_API_KEY, or BANKR_LLM_KEY to enable sub-agents.`);\n        }\n\n        sections.push('\\nUse `/agents info <name>` for details. Delegate tasks via the `agent_delegate` tool.');\n        return { text: sections.join('\\n') };\n      }\n\n      case 'info': {\n        if (!arg) return { text: 'Usage: `/agents info <agent_name>`' };\n        const agent = pool.getByName(arg);\n        if (!agent) return { text: `No sub-agent named \"${arg}\" found.` };\n        return { text: formatAgentDetail(agent) };\n      }\n\n      case 'enable': {\n        if (!arg) return { text: 'Usage: `/agents enable <agent_name>`' };\n        const agent = pool.getByName(arg);\n        if (!agent) return { text: `No sub-agent named \"${arg}\" found.` };\n        if (agent.enabled) return { text: `Agent \"${arg}\" is already enabled.` };\n        pool.update(agent.id, { enabled: true });\n        return { text: `Agent \"${arg}\" has been enabled.` };\n      }\n\n      case 'disable': {\n        if (!arg) return { text: 'Usage: `/agents disable <agent_name>`' };\n        const agent = pool.getByName(arg);\n        if (!agent) return { text: `No sub-agent named \"${arg}\" found.` };\n        if (!agent.enabled) return { text: `Agent \"${arg}\" is already disabled.` };\n        pool.update(agent.id, { enabled: false });\n        return { text: `Agent \"${arg}\" has been disabled.` };\n      }\n\n      case 'delete': {\n        if (!arg) return { text: 'Usage: `/agents delete <agent_name>`' };\n        const agent = pool.getByName(arg);\n        if (!agent) return { text: `No sub-agent named \"${arg}\" found.` };\n        if (agent.isPreset) return { text: `Cannot delete preset agent \"${arg}\". Use \\`/agents disable ${arg}\\` instead.` };\n        pool.delete(agent.id);\n        return { text: `Agent \"${arg}\" has been permanently deleted.` };\n      }\n\n      default:\n        return {\n          text: `Unknown subcommand: \"${subcommand}\".\\n\\nAvailable: \\`list\\`, \\`info <name>\\`, \\`enable <name>\\`, \\`disable <name>\\`, \\`delete <name>\\``,\n        };\n    }\n  },\n};\n"],"mappings":"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"}