aemeathcli 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{App-P4MYD4QY.js → App-APN34QBQ.js} +89 -20
- package/dist/App-APN34QBQ.js.map +1 -0
- package/dist/cli.js +48 -6
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
- package/dist/App-P4MYD4QY.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/components/ToolOutput.tsx","../src/ui/components/MessageView.tsx","../src/ui/components/AutocompletePopup.tsx","../src/ui/autocomplete-data.ts","../src/ui/components/InputBar.tsx","../src/ui/components/StatusBar.tsx","../src/ui/components/Spinner.tsx","../src/ui/layouts/SinglePane.tsx","../src/ui/components/SplitPanel.tsx","../src/ui/layouts/SplitPane.tsx","../src/ui/hooks/useModel.ts","../src/ui/hooks/useStream.ts","../src/ui/hooks/useCost.ts","../src/ui/hooks/usePanel.ts","../src/ui/utils.ts","../src/ui/components/ModelSelector.tsx","../src/ui/components/ThinkingSelector.tsx","../src/ui/components/LoginSelector.tsx","../src/ui/App.tsx"],"names":["jsx","Box","jsxs","Text","useState","shortModelName","Fragment","shortModelLabel","useInput","useMemo","useCallback","useRef","useEffect","script","agentLines"],"mappings":"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","file":"App-APN34QBQ.js","sourcesContent":["/**\n * Tool execution output display per PRD section 6.2\n */\n\nimport React from \"react\";\nimport { Box, Text } from \"ink\";\n\ninterface IToolOutputProps {\n readonly toolName: string;\n readonly content: string;\n readonly isError: boolean;\n}\n\nexport function ToolOutput({\n toolName,\n content,\n isError,\n}: IToolOutputProps): React.ReactElement {\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={isError ? \"red\" : \"gray\"}\n paddingX={1}\n marginY={1}\n >\n <Text color={isError ? \"red\" : \"magenta\"} bold>\n {isError ? \"Error\" : \"Tool\"}: {toolName}\n </Text>\n <Box marginLeft={2}>\n <Text wrap=\"wrap\" {...(isError ? { color: \"red\" as const } : {})}>\n {content.length > 2000 ? content.slice(0, 2000) + \"\\n... (truncated)\" : content}\n </Text>\n </Box>\n </Box>\n );\n}\n","/**\n * Message display component per PRD section 6.2\n * Renders conversation messages with model attribution, tool output, and visual polish\n */\n\nimport React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { ToolOutput } from \"./ToolOutput.js\";\nimport type { IChatMessage, MessageRole } from \"../../types/index.js\";\n\ninterface IMessageViewProps {\n readonly messages: readonly IChatMessage[];\n}\n\nfunction getRoleColor(role: MessageRole): string {\n switch (role) {\n case \"user\":\n return \"green\";\n case \"assistant\":\n return \"cyan\";\n case \"system\":\n return \"yellow\";\n case \"tool\":\n return \"magenta\";\n }\n}\n\nfunction getRoleIcon(role: MessageRole): string {\n switch (role) {\n case \"user\":\n return \"\\u276F\"; // ❯\n case \"assistant\":\n return \"\\u2726\"; // ✦\n case \"system\":\n return \"\\u2022\"; // •\n case \"tool\":\n return \"\\u2699\"; // ⚙\n }\n}\n\nfunction getRoleLabel(role: MessageRole, model?: string): string {\n switch (role) {\n case \"user\":\n return \"You\";\n case \"assistant\":\n return model ?? \"Assistant\";\n case \"system\":\n return \"System\";\n case \"tool\":\n return \"Tool\";\n }\n}\n\n/** Shorten model ID for display: \"claude-sonnet-4-6\" → \"Sonnet 4.6\" */\nfunction shortModelName(model: string): string {\n if (model.includes(\"opus\")) return \"Opus 4.6\";\n if (model.includes(\"sonnet\")) return \"Sonnet 4.6\";\n if (model.includes(\"haiku\")) return \"Haiku 4.5\";\n if (model.includes(\"gpt-5.2-mini\")) return \"GPT-5.2 mini\";\n if (model.includes(\"gpt-5.2\")) return \"GPT-5.2\";\n if (model.includes(\"o3\")) return \"o3\";\n if (model.includes(\"gemini\") && model.includes(\"pro\")) return \"Gemini Pro\";\n if (model.includes(\"gemini\") && model.includes(\"flash\")) return \"Gemini Flash\";\n if (model.includes(\"kimi\") || model.includes(\"k2\")) return \"Kimi K2.5\";\n return model;\n}\n\ninterface IMessageItemProps {\n readonly message: IChatMessage;\n}\n\nfunction MessageItem({ message }: IMessageItemProps): React.ReactElement {\n const color = getRoleColor(message.role);\n const icon = getRoleIcon(message.role);\n const label = getRoleLabel(message.role, message.model ? shortModelName(message.model) : undefined);\n\n // System messages get a compact, dimmed style\n if (message.role === \"system\") {\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box>\n <Text color=\"yellow\" dimColor>{icon} </Text>\n <Text color=\"yellow\" dimColor wrap=\"wrap\">{message.content}</Text>\n </Box>\n </Box>\n );\n }\n\n // Tool result messages use the dedicated ToolOutput component\n if (message.role === \"tool\" && message.toolCalls && message.toolCalls.length > 0) {\n const firstCall = message.toolCalls[0];\n if (firstCall) {\n return (\n <ToolOutput\n toolName={firstCall.name}\n content={message.content}\n isError={message.content.startsWith(\"Error:\")}\n />\n );\n }\n }\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n {/* Role header with icon */}\n <Box>\n <Text color={color} bold>{icon} {label}</Text>\n {message.tokenUsage ? (\n <Text color=\"gray\" dimColor> ({message.tokenUsage.totalTokens} tokens)</Text>\n ) : null}\n </Box>\n {/* Message content */}\n <Box marginLeft={2} flexDirection=\"column\">\n <ContentRenderer content={message.content} />\n </Box>\n {/* Tool calls (assistant messages that invoked tools) */}\n {message.toolCalls && message.toolCalls.length > 0 ? (\n <Box marginLeft={2} flexDirection=\"column\" marginTop={0}>\n {message.toolCalls.map((call) => {\n const argSummary = formatToolArgs(call.name, call.arguments);\n return (\n <Box key={call.id}>\n <Text color=\"magenta\">{\"\\u2699\"} </Text>\n <Text color=\"magenta\" bold>{call.name}</Text>\n <Text color=\"gray\"> {argSummary}</Text>\n </Box>\n );\n })}\n </Box>\n ) : null}\n </Box>\n );\n}\n\n/** Format tool call arguments as a readable one-liner */\nfunction formatToolArgs(name: string, args: Record<string, unknown>): string {\n switch (name) {\n case \"read\":\n case \"write\":\n case \"edit\":\n return typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\n case \"glob\":\n return typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\n case \"grep\": {\n const pat = typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\n const dir = typeof args[\"path\"] === \"string\" ? ` in ${args[\"path\"]}` : \"\";\n return `\"${pat}\"${dir}`;\n }\n case \"bash\": {\n const cmd = typeof args[\"command\"] === \"string\" ? args[\"command\"] : \"\";\n return cmd.length > 60 ? cmd.slice(0, 60) + \"...\" : cmd;\n }\n default:\n return JSON.stringify(args).slice(0, 80);\n }\n}\n\n// ── Markdown-aware content rendering ──────────────────────────────────────\n\ninterface IContentPart {\n readonly type: \"text\" | \"code\";\n readonly content: string;\n readonly lang: string;\n}\n\n/** Split content into alternating text and fenced code block segments. */\nfunction splitCodeBlocks(content: string): IContentPart[] {\n const parts: IContentPart[] = [];\n const regex = /```(\\w*)\\n?([\\s\\S]*?)```/g;\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n while ((match = regex.exec(content)) !== null) {\n if (match.index > lastIndex) {\n parts.push({ type: \"text\", content: content.slice(lastIndex, match.index), lang: \"\" });\n }\n parts.push({ type: \"code\", content: match[2] ?? \"\", lang: match[1] ?? \"\" });\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < content.length) {\n parts.push({ type: \"text\", content: content.slice(lastIndex), lang: \"\" });\n }\n\n return parts.length > 0 ? parts : [{ type: \"text\", content, lang: \"\" }];\n}\n\n/**\n * Render message content with fenced code block support.\n * Code blocks are displayed in bordered boxes with optional\n * language labels, similar to Claude Code and Codex terminal output.\n */\nfunction ContentRenderer({ content }: { readonly content: string }): React.ReactElement {\n const parts = splitCodeBlocks(content);\n\n // Fast path: plain text with no code blocks\n if (parts.length === 1 && parts[0]!.type === \"text\") {\n return <Text wrap=\"wrap\">{content}</Text>;\n }\n\n return (\n <Box flexDirection=\"column\">\n {parts.map((part, index) => {\n if (part.type === \"code\") {\n return (\n <Box key={index} flexDirection=\"column\" borderStyle=\"round\" borderColor=\"gray\" paddingX={1}>\n {part.lang.length > 0 ? <Text color=\"gray\" dimColor>{part.lang}</Text> : null}\n <Text>{part.content}</Text>\n </Box>\n );\n }\n return <Text key={index} wrap=\"wrap\">{part.content}</Text>;\n })}\n </Box>\n );\n}\n\nconst MAX_VISIBLE_MESSAGES = 50;\n\nexport function MessageView({ messages }: IMessageViewProps): React.ReactElement {\n const visibleMessages = messages.length > MAX_VISIBLE_MESSAGES\n ? messages.slice(-MAX_VISIBLE_MESSAGES)\n : messages;\n\n return (\n <Box flexDirection=\"column\" flexGrow={1} paddingX={1}>\n {messages.length > MAX_VISIBLE_MESSAGES ? (\n <Text color=\"gray\" dimColor> ({messages.length - MAX_VISIBLE_MESSAGES} earlier messages hidden)</Text>\n ) : null}\n {visibleMessages.map((msg) => (\n <MessageItem key={msg.id} message={msg} />\n ))}\n </Box>\n );\n}\n","/**\n * Autocomplete popup overlay for InputBar\n * Displays filtered suggestions with arrow-key navigation and scrolling\n */\n\nimport React from \"react\";\nimport { Box, Text } from \"ink\";\nimport type { IAutocompleteItem } from \"../autocomplete-data.js\";\n\nconst MAX_VISIBLE_ITEMS = 8;\n\ninterface IAutocompletePopupProps {\n readonly items: readonly IAutocompleteItem[];\n readonly selectedIndex: number;\n}\n\nexport function AutocompletePopup({ items, selectedIndex }: IAutocompletePopupProps): React.ReactElement | null {\n if (items.length === 0) {\n return null;\n }\n\n // Calculate scrolling window that follows the selected item\n const totalItems = items.length;\n const windowSize = Math.min(MAX_VISIBLE_ITEMS, totalItems);\n\n let scrollOffset = 0;\n if (selectedIndex >= windowSize) {\n scrollOffset = selectedIndex - windowSize + 1;\n }\n // Clamp scroll offset to valid range\n scrollOffset = Math.max(0, Math.min(scrollOffset, totalItems - windowSize));\n\n const visibleItems = items.slice(scrollOffset, scrollOffset + windowSize);\n const hasMore = scrollOffset + windowSize < totalItems;\n const hasLess = scrollOffset > 0;\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor=\"cyan\"\n paddingX={1}\n marginBottom={0}\n >\n {hasLess ? (\n <Text color=\"gray\" dimColor>\n {\" \"}... {scrollOffset} above\n </Text>\n ) : null}\n {visibleItems.map((item, visibleIndex) => {\n const actualIndex = scrollOffset + visibleIndex;\n const isSelected = actualIndex === selectedIndex;\n return (\n <Box key={`${item.label}-${actualIndex}`}>\n <Text color={isSelected ? \"cyan\" : \"white\"} bold={isSelected}>\n {isSelected ? \"> \" : \" \"}\n {item.label}\n </Text>\n <Text color=\"gray\" dimColor>\n {\" \"}\n {item.description}\n </Text>\n </Box>\n );\n })}\n {hasMore ? (\n <Text color=\"gray\" dimColor>\n {\" \"}... {totalItems - scrollOffset - windowSize} more\n </Text>\n ) : null}\n </Box>\n );\n}\n","/**\n * Autocomplete data definitions for InputBar triggers\n * Shared by InputBar autocomplete popup and /help command\n */\n\n// ── Slash Commands ──────────────────────────────────────────────────────────\n\nexport interface IAutocompleteItem {\n readonly label: string;\n readonly description: string;\n}\n\nexport interface ISlashCommand {\n readonly command: string;\n readonly description: string;\n}\n\nexport const SLASH_COMMANDS: readonly ISlashCommand[] = [\n { command: \"/login\", description: \"Log in to a provider (interactive)\" },\n { command: \"/help\", description: \"Show available commands\" },\n { command: \"/model\", description: \"Select a model with provider-specific thinking options\" },\n { command: \"/role\", description: \"Switch role (planning, coding, review, testing, bugfix)\" },\n { command: \"/cost\", description: \"Show session cost breakdown\" },\n { command: \"/clear\", description: \"Clear conversation\" },\n { command: \"/compact\", description: \"Compress context\" },\n { command: \"/team list\", description: \"List active teams\" },\n { command: \"/team stop\", description: \"Deactivate team and return to single-pane\" },\n { command: \"/mcp list\", description: \"List connected MCP servers\" },\n { command: \"/mcp add\", description: \"Add an MCP server\" },\n { command: \"/skill list\", description: \"List available skills\" },\n { command: \"/panel\", description: \"Change split-panel layout\" },\n { command: \"/login status\", description: \"Show login status for all providers\" },\n { command: \"/login logout\", description: \"Log out of a provider\" },\n { command: \"/config get\", description: \"Get a configuration value\" },\n { command: \"/config set\", description: \"Set a configuration value\" },\n { command: \"/quit\", description: \"Exit\" },\n { command: \"/exit\", description: \"Exit\" },\n];\n\n// ── Context References (@) ──────────────────────────────────────────────────\n\nexport const CONTEXT_REFS: readonly IAutocompleteItem[] = [\n { label: \"@file\", description: \"Reference a file in the project\" },\n { label: \"@codebase\", description: \"Reference the entire codebase\" },\n { label: \"@anthropic\", description: \"Anthropic/Claude provider context\" },\n { label: \"@openai\", description: \"OpenAI/Codex provider context\" },\n { label: \"@google\", description: \"Google/Gemini provider context\" },\n { label: \"@kimi\", description: \"Kimi/Moonshot provider context\" },\n { label: \"@web\", description: \"Web search context\" },\n { label: \"@git\", description: \"Git repository context\" },\n { label: \"@docs\", description: \"Project documentation context\" },\n { label: \"@errors\", description: \"Recent error context\" },\n];\n\n// ── Code References (`) ─────────────────────────────────────────────────────\n\nexport const CODE_REFS: readonly IAutocompleteItem[] = [\n { label: \"`src/\", description: \"Source directory\" },\n { label: \"`src/ui/\", description: \"UI components\" },\n { label: \"`src/auth/\", description: \"Authentication modules\" },\n { label: \"`src/providers/\", description: \"LLM provider adapters\" },\n { label: \"`src/teams/\", description: \"Team management\" },\n { label: \"`src/core/\", description: \"Core engine\" },\n { label: \"`src/tools/\", description: \"Tool implementations\" },\n { label: \"`src/types/\", description: \"Type definitions\" },\n { label: \"`src/storage/\", description: \"Storage layer\" },\n { label: \"`src/utils/\", description: \"Utility functions\" },\n];\n\n// ── Skill Invocation ($) ────────────────────────────────────────────────────\n\nexport const SKILL_REFS: readonly IAutocompleteItem[] = [\n { label: \"$review\", description: \"Comprehensive code review\" },\n { label: \"$commit\", description: \"Smart git commit with message generation\" },\n { label: \"$plan\", description: \"Create implementation plan from requirements\" },\n { label: \"$debug\", description: \"Systematic debugging workflow\" },\n { label: \"$test\", description: \"Generate tests for code\" },\n { label: \"$refactor\", description: \"Refactoring with safety checks\" },\n];\n\n// ── Trigger Detection ───────────────────────────────────────────────────────\n\nexport type AutocompleteTrigger = \"/\" | \"@\" | \"`\" | \"$\";\n\nexport function getAutocompleteItems(trigger: AutocompleteTrigger, query: string): readonly IAutocompleteItem[] {\n const normalizedQuery = query.toLowerCase();\n\n switch (trigger) {\n case \"/\": {\n const filtered = SLASH_COMMANDS.filter((cmd) => cmd.command.toLowerCase().includes(normalizedQuery));\n return filtered.map((cmd) => ({ label: cmd.command, description: cmd.description }));\n }\n case \"@\": {\n return CONTEXT_REFS.filter((ref) => ref.label.toLowerCase().includes(normalizedQuery));\n }\n case \"`\": {\n return CODE_REFS.filter((ref) => ref.label.toLowerCase().includes(normalizedQuery));\n }\n case \"$\": {\n return SKILL_REFS.filter((ref) => ref.label.toLowerCase().includes(normalizedQuery));\n }\n }\n}\n","/**\n * User input component with autocomplete per PRD section 6.2\n * Triggers: / (slash commands), @ (context refs), ` (code refs)\n * Shows first 5 matches, arrow keys to navigate, Enter to select\n * Supports input history (up/down arrows) and Escape to cancel streaming\n */\n\nimport React, { useState, useMemo } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { AutocompletePopup } from \"./AutocompletePopup.js\";\nimport {\n getAutocompleteItems,\n type AutocompleteTrigger,\n type IAutocompleteItem,\n} from \"../autocomplete-data.js\";\n\ninterface IInputBarProps {\n readonly onSubmit: (input: string) => void;\n readonly isProcessing: boolean;\n readonly placeholder?: string;\n readonly onCancel?: (() => void) | undefined;\n}\n\nconst TRIGGER_CHARS = new Set<string>([\"/\", \"@\", \"`\", \"$\"]);\n\n/**\n * Detect if the input has an active autocomplete trigger.\n * A trigger is active when:\n * - The first character is a trigger (for / at start of input)\n * - A trigger character appears after a space (for @ and ` mid-input)\n *\n * Returns the trigger char and the query text after it, or null.\n */\nfunction detectTrigger(input: string): { trigger: AutocompleteTrigger; query: string } | null {\n if (input.length === 0) {\n return null;\n }\n\n // Check for / at start of input (slash commands)\n if (input[0] === \"/\") {\n return { trigger: \"/\", query: input };\n }\n\n // Check for $ at start of input (skill invocation)\n if (input[0] === \"$\") {\n return { trigger: \"$\", query: input };\n }\n\n // Check for @ or ` — find the last trigger character\n for (let i = input.length - 1; i >= 0; i--) {\n const ch = input[i];\n if (ch === undefined) continue;\n\n if (TRIGGER_CHARS.has(ch) && ch !== \"/\" && ch !== \"$\") {\n // Trigger must be at start or preceded by a space\n if (i === 0 || input[i - 1] === \" \") {\n return {\n trigger: ch as AutocompleteTrigger,\n query: input.slice(i),\n };\n }\n }\n\n // Stop searching if we hit a space before finding a trigger\n if (ch === \" \") {\n break;\n }\n }\n\n return null;\n}\n\nconst MAX_HISTORY = 100;\n\nexport function InputBar({ onSubmit, isProcessing, placeholder, onCancel }: IInputBarProps): React.ReactElement {\n const [input, setInput] = useState(\"\");\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [history, setHistory] = useState<string[]>([]);\n const [historyIndex, setHistoryIndex] = useState(-1);\n const [savedInput, setSavedInput] = useState(\"\");\n\n // Compute autocomplete state from current input\n const triggerState = useMemo(() => detectTrigger(input), [input]);\n\n const autocompleteItems: readonly IAutocompleteItem[] = useMemo(() => {\n if (triggerState === null) return [];\n return getAutocompleteItems(triggerState.trigger, triggerState.query);\n }, [triggerState]);\n\n const isAutocompleteActive = autocompleteItems.length > 0;\n\n useInput((inputChar, key) => {\n // During processing, only allow Escape to cancel\n if (isProcessing) {\n if (key.escape && onCancel) {\n onCancel();\n }\n return;\n }\n\n // ── Autocomplete Navigation ─────────────────────────────────────\n if (isAutocompleteActive) {\n if (key.upArrow) {\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : autocompleteItems.length - 1));\n return;\n }\n\n if (key.downArrow) {\n setSelectedIndex((prev) => (prev < autocompleteItems.length - 1 ? prev + 1 : 0));\n return;\n }\n\n // Tab to accept the selected completion\n if (key.tab) {\n const selected = autocompleteItems[selectedIndex];\n if (selected && triggerState) {\n const beforeTrigger = input.slice(0, input.length - triggerState.query.length);\n const newInput = beforeTrigger + selected.label + \" \";\n setInput(newInput);\n setSelectedIndex(0);\n }\n return;\n }\n\n // Escape to dismiss autocomplete\n if (key.escape) {\n setInput((prev) => prev + \" \");\n setSelectedIndex(0);\n return;\n }\n }\n\n // ── Input History Navigation ────────────────────────────────────\n if (key.upArrow) {\n if (history.length === 0) return;\n if (historyIndex === -1) {\n setSavedInput(input);\n }\n const newIndex = historyIndex === -1 ? history.length - 1 : Math.max(0, historyIndex - 1);\n setHistoryIndex(newIndex);\n setInput(history[newIndex] ?? \"\");\n return;\n }\n\n if (key.downArrow) {\n if (historyIndex === -1) return;\n const newIndex = historyIndex + 1;\n if (newIndex >= history.length) {\n setHistoryIndex(-1);\n setInput(savedInput);\n } else {\n setHistoryIndex(newIndex);\n setInput(history[newIndex] ?? \"\");\n }\n return;\n }\n\n // ── Standard Input Handling ─────────────────────────────────────\n if (key.return) {\n if (isAutocompleteActive && triggerState?.trigger === \"/\") {\n const selected = autocompleteItems[selectedIndex];\n if (selected) {\n setHistory((prev) => [...prev.slice(-(MAX_HISTORY - 1)), selected.label.trim()]);\n onSubmit(selected.label.trim());\n setInput(\"\");\n setSelectedIndex(0);\n setHistoryIndex(-1);\n return;\n }\n }\n\n if (input.trim().length > 0) {\n setHistory((prev) => [...prev.slice(-(MAX_HISTORY - 1)), input.trim()]);\n onSubmit(input.trim());\n setInput(\"\");\n setSelectedIndex(0);\n setHistoryIndex(-1);\n }\n return;\n }\n\n if (key.backspace || key.delete) {\n setInput((prev) => prev.slice(0, -1));\n setSelectedIndex(0);\n setHistoryIndex(-1);\n return;\n }\n\n if (key.ctrl && inputChar === \"c\") {\n process.exit(0);\n return;\n }\n\n if (key.ctrl && inputChar === \"l\") {\n return;\n }\n\n if (!key.ctrl && !key.meta && inputChar) {\n setInput((prev) => prev + inputChar);\n setSelectedIndex(0);\n setHistoryIndex(-1);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n {isAutocompleteActive ? <AutocompletePopup items={autocompleteItems} selectedIndex={selectedIndex} /> : null}\n <Box borderStyle=\"single\" borderColor={isProcessing ? \"gray\" : \"green\"} paddingX={1}>\n <Text color=\"green\" bold>\n {\">\"}{\" \"}\n </Text>\n {isProcessing ? (\n <Text color=\"gray\">{onCancel ? \"Esc to cancel\" : \"Processing...\"}</Text>\n ) : input.length > 0 ? (\n <Text>{input}</Text>\n ) : (\n <Text color=\"gray\">{placeholder ?? \"Type a message...\"}</Text>\n )}\n {!isProcessing ? <Text color=\"green\">_</Text> : null}\n </Box>\n </Box>\n );\n}\n","/**\n * Status bar component per PRD section 18.4\n * Shows: tool name, active model, role, token count, cost, git branch\n */\n\nimport React from \"react\";\nimport { Box, Text } from \"ink\";\n\ninterface IStatusBarProps {\n readonly model: string;\n readonly role?: string | undefined;\n readonly tokenCount: string;\n readonly cost: string;\n readonly gitBranch?: string | undefined;\n readonly gitChanges?: number | undefined;\n}\n\n/** Shorten model ID for the status bar: \"claude-sonnet-4-6\" → \"Sonnet 4.6\" */\nfunction shortModelLabel(model: string): string {\n if (model.includes(\"opus\")) return \"Opus 4.6\";\n if (model.includes(\"sonnet\")) return \"Sonnet 4.6\";\n if (model.includes(\"haiku\")) return \"Haiku 4.5\";\n if (model.includes(\"gpt-5.2-mini\")) return \"GPT-5.2m\";\n if (model.includes(\"gpt-5.2\")) return \"GPT-5.2\";\n if (model.includes(\"o3\")) return \"o3\";\n if (model.includes(\"gemini\") && model.includes(\"pro\")) return \"Gem Pro\";\n if (model.includes(\"gemini\") && model.includes(\"flash\")) return \"Gem Flash\";\n if (model.includes(\"kimi\") || model.includes(\"k2\")) return \"Kimi\";\n return model;\n}\n\nexport function StatusBar({\n model,\n role,\n tokenCount,\n cost,\n gitBranch,\n gitChanges,\n}: IStatusBarProps): React.ReactElement {\n return (\n <Box borderStyle=\"round\" borderColor=\"gray\" paddingX={1}>\n <Text color=\"cyan\" bold>\n {\"\\u2726\"} aemeathcli\n </Text>\n <Text color=\"gray\"> {\"\\u2502\"} </Text>\n <Text color=\"yellow\" bold>{shortModelLabel(model)}</Text>\n {role ? (\n <>\n <Text color=\"gray\"> {\"\\u2502\"} </Text>\n <Text color=\"magenta\">{role}</Text>\n </>\n ) : null}\n <Text color=\"gray\"> {\"\\u2502\"} </Text>\n <Text>{tokenCount} tok</Text>\n <Text color=\"gray\"> {\"\\u2502\"} </Text>\n <Text color=\"green\">{cost}</Text>\n {gitBranch ? (\n <>\n <Text color=\"gray\"> {\"\\u2502\"} </Text>\n <Text color=\"blue\">\n {\"\\u2387\"} {gitBranch}\n {gitChanges !== undefined && gitChanges > 0 ? ` \\u00B1${gitChanges}` : \"\"}\n </Text>\n </>\n ) : null}\n </Box>\n );\n}\n","/**\n * Loading indicator component per PRD section 6.2\n *\n * Uses a slow-cycling static indicator instead of rapid-frame animation\n * to prevent terminal flashing/flickering in split-pane layouts.\n */\n\nimport React, { useState, useEffect } from \"react\";\nimport { Text } from \"ink\";\n\ninterface ISpinnerProps {\n readonly label?: string;\n}\n\nconst SPINNER_FRAMES = [\"\\u25CB\", \"\\u25D4\", \"\\u25D1\", \"\\u25D5\", \"\\u25CF\", \"\\u25D5\", \"\\u25D1\", \"\\u25D4\"];\nconst SPINNER_INTERVAL_MS = 300;\n\nexport function Spinner({ label }: ISpinnerProps): React.ReactElement {\n const [frame, setFrame] = useState(0);\n\n useEffect(() => {\n const timer = setInterval(() => {\n setFrame((prev) => (prev + 1) % SPINNER_FRAMES.length);\n }, SPINNER_INTERVAL_MS);\n return () => clearInterval(timer);\n }, []);\n\n return (\n <Text>\n <Text color=\"cyan\">{SPINNER_FRAMES[frame]}</Text>\n {label ? <Text> {label}</Text> : null}\n </Text>\n );\n}\n","/**\n * Default single-pane layout per PRD section 6.2\n */\n\nimport React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { MessageView } from \"../components/MessageView.js\";\nimport { InputBar } from \"../components/InputBar.js\";\nimport { StatusBar } from \"../components/StatusBar.js\";\nimport { Spinner } from \"../components/Spinner.js\";\nimport type { IChatMessage } from \"../../types/index.js\";\n\ninterface ISinglePaneProps {\n readonly messages: readonly IChatMessage[];\n readonly isProcessing: boolean;\n readonly onSubmit: (input: string) => void;\n readonly onCancel?: (() => void) | undefined;\n readonly model: string;\n readonly role?: string | undefined;\n readonly tokenCount: string;\n readonly cost: string;\n readonly gitBranch?: string | undefined;\n readonly gitChanges?: number | undefined;\n readonly streamingContent?: string | undefined;\n /** Current tool activity label (e.g. \"Reading src/foo.ts\"). */\n readonly activity?: string | undefined;\n}\n\n/** Shorten model ID for display: \"claude-sonnet-4-6\" → \"Sonnet 4.6\" */\nfunction shortModelName(model: string): string {\n if (model.includes(\"opus\")) return \"Opus 4.6\";\n if (model.includes(\"sonnet\")) return \"Sonnet 4.6\";\n if (model.includes(\"haiku\")) return \"Haiku 4.5\";\n if (model.includes(\"gpt-5.2-mini\")) return \"GPT-5.2m\";\n if (model.includes(\"gpt-5.2\")) return \"GPT-5.2\";\n if (model.includes(\"o3\")) return \"o3\";\n if (model.includes(\"gemini\") && model.includes(\"pro\")) return \"Gem Pro\";\n if (model.includes(\"gemini\") && model.includes(\"flash\")) return \"Gem Flash\";\n if (model.includes(\"kimi\") || model.includes(\"k2\")) return \"Kimi\";\n return model;\n}\n\n/** Truncate text to last N lines for bounded display */\nfunction tailLines(text: string, maxLines: number): string {\n const lines = text.split(\"\\n\");\n if (lines.length <= maxLines) return text;\n return lines.slice(-maxLines).join(\"\\n\");\n}\n\nexport function SinglePane({\n messages,\n isProcessing,\n onSubmit,\n onCancel,\n model,\n role,\n tokenCount,\n cost,\n gitBranch,\n gitChanges,\n streamingContent,\n activity,\n}: ISinglePaneProps): React.ReactElement {\n return (\n <Box flexDirection=\"column\" height=\"100%\">\n <StatusBar\n model={model}\n role={role}\n tokenCount={tokenCount}\n cost={cost}\n gitBranch={gitBranch}\n gitChanges={gitChanges}\n />\n {messages.length === 0 && !isProcessing ? (\n <Box flexDirection=\"column\" flexGrow={1} paddingX={2} justifyContent=\"center\">\n <Text color=\"cyan\" bold>{\"\\u2726\"} AemeathCLI</Text>\n <Text color=\"gray\">Multi-model AI coding assistant</Text>\n <Text>{\" \"}</Text>\n <Text color=\"gray\">Type a message to start, or use /help for commands.</Text>\n <Text color=\"gray\">Press Tab for autocomplete on /commands, @context, and $skills.</Text>\n </Box>\n ) : (\n <>\n <MessageView messages={messages} />\n {isProcessing ? (\n <Box flexDirection=\"column\" marginLeft={1} marginBottom={1}>\n <Box>\n <Text color=\"cyan\" bold>\n {\"\\u2726\"} {shortModelName(model)}\n </Text>\n </Box>\n <Box marginLeft={2} marginBottom={1}>\n <Text wrap=\"wrap\">{streamingContent && streamingContent.length > 0 ? tailLines(streamingContent, 12) : \"\"}</Text>\n </Box>\n <Box marginLeft={1}>\n <Spinner\n label={\n activity\n ? activity\n : streamingContent && streamingContent.length > 0\n ? \"Streaming response...\"\n : \"Thinking...\"\n }\n />\n </Box>\n </Box>\n ) : null}\n </>\n )}\n <InputBar onSubmit={onSubmit} isProcessing={isProcessing} onCancel={onCancel} />\n </Box>\n );\n}\n","/**\n * Multi-model split panel layout for team mode per PRD section 9.5 (fallback)\n * When tmux is not available, this provides tab-based agent switching\n * with color-coded streaming output, tool call highlighting, and activity status\n */\n\nimport React from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { Spinner } from \"./Spinner.js\";\nimport type { IAgentState } from \"../../types/index.js\";\n\ninterface ISplitPanelProps {\n readonly agents: readonly IAgentState[];\n readonly activeAgentIndex: number;\n readonly onSelectAgent: (index: number) => void;\n readonly agentOutputs: ReadonlyMap<string, string>;\n}\n\nfunction getStatusColor(status: string): string {\n switch (status) {\n case \"active\":\n return \"green\";\n case \"idle\":\n return \"yellow\";\n case \"error\":\n return \"red\";\n case \"shutdown\":\n return \"gray\";\n default:\n return \"white\";\n }\n}\n\n/** Short model label for the tab bar (e.g. \"claude-opus-4-6\" → \"Opus\") */\nfunction shortModelLabel(model: string): string {\n if (model.includes(\"opus\")) return \"Opus\";\n if (model.includes(\"sonnet\")) return \"Sonnet\";\n if (model.includes(\"haiku\")) return \"Haiku\";\n if (model.includes(\"gpt-5\")) return \"GPT-5\";\n if (model.includes(\"gemini\") && model.includes(\"pro\")) return \"Gem-Pro\";\n if (model.includes(\"gemini\") && model.includes(\"flash\")) return \"Gem-Flash\";\n if (model.includes(\"kimi\") || model.includes(\"k2\")) return \"Kimi\";\n // Fallback: last segment\n const parts = model.split(\"-\");\n return parts[parts.length - 1] ?? model.slice(0, 8);\n}\n\n/** Status indicator character */\nfunction statusIndicator(status: string): string {\n switch (status) {\n case \"active\": return \"\\u25CF\"; // ●\n case \"idle\": return \"\\u25CB\"; // ○\n case \"error\": return \"\\u2716\"; // ✖\n default: return \"\\u2500\"; // ─\n }\n}\n\nconst MAX_OUTPUT_LINES = 40;\n\n/** Classify a line of agent output for color coding. */\nfunction classifyLine(line: string): \"tool\" | \"result\" | \"error\" | \"text\" | \"empty\" {\n if (line.length === 0) return \"empty\";\n if (line.startsWith(\"\\u2699\") || line.startsWith(\"⚙\")) return \"tool\";\n if (line.startsWith(\" \\u2192\") || line.startsWith(\" →\")) return \"result\";\n if (line.startsWith(\"Error:\") || line.startsWith(\"Stream error:\")) return \"error\";\n return \"text\";\n}\n\n/** Extract the last meaningful activity line from output (for status display). */\nfunction extractLastActivity(output: string): string | undefined {\n const lines = output.split(\"\\n\");\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]!.trim();\n if (line.length === 0) continue;\n const type = classifyLine(line);\n if (type === \"tool\") return line;\n if (type === \"result\") return line;\n }\n return undefined;\n}\n\n/** Render agent output with color-coded lines and line truncation. */\nfunction AgentOutput({\n output,\n isActive,\n}: {\n readonly output: string;\n readonly isActive: boolean;\n}): React.ReactElement {\n const lines = output.split(\"\\n\");\n const truncated = lines.length > MAX_OUTPUT_LINES;\n const visible = truncated ? lines.slice(-MAX_OUTPUT_LINES) : lines;\n\n return (\n <Box flexDirection=\"column\">\n {truncated ? (\n <Text color=\"gray\" dimColor> ({lines.length - MAX_OUTPUT_LINES} lines hidden)</Text>\n ) : null}\n {visible.map((line, i) => {\n const type = classifyLine(line);\n switch (type) {\n case \"tool\":\n return <Text key={i} color=\"magenta\">{line}</Text>;\n case \"result\":\n return <Text key={i} color=\"gray\">{line}</Text>;\n case \"error\":\n return <Text key={i} color=\"red\" bold>{line}</Text>;\n case \"empty\":\n return <Text key={i}>{\" \"}</Text>;\n default:\n return <Text key={i} wrap=\"wrap\">{line}</Text>;\n }\n })}\n {isActive ? (\n <Box marginTop={0}>\n <Spinner label=\"Working...\" />\n </Box>\n ) : null}\n </Box>\n );\n}\n\nexport function SplitPanel({\n agents,\n activeAgentIndex,\n onSelectAgent,\n agentOutputs,\n}: ISplitPanelProps): React.ReactElement {\n useInput((input, key) => {\n // Tab to switch between agents\n if (key.tab) {\n const nextIndex = (activeAgentIndex + 1) % agents.length;\n onSelectAgent(nextIndex);\n }\n // Number keys 1-9 to select agent directly\n const numKey = parseInt(input, 10);\n if (!isNaN(numKey) && numKey >= 1 && numKey <= agents.length && key.ctrl) {\n onSelectAgent(numKey - 1);\n }\n });\n\n const activeAgent = agents[activeAgentIndex];\n const activeOutput = activeAgent\n ? agentOutputs.get(activeAgent.config.agentId) ?? \"\"\n : \"\";\n const lastActivity = activeOutput.length > 0 ? extractLastActivity(activeOutput) : undefined;\n\n return (\n <Box flexDirection=\"column\" flexGrow={1}>\n {/* Tab bar */}\n <Box>\n {agents.map((agent, index) => {\n const isActive = index === activeAgentIndex;\n const sColor = getStatusColor(agent.status);\n const indicator = statusIndicator(agent.status);\n const modelShort = shortModelLabel(agent.config.model);\n // Capitalize agentType for tab label\n const typeLabel = agent.config.agentType.charAt(0).toUpperCase() + agent.config.agentType.slice(1);\n return (\n <Box\n key={agent.config.agentId}\n borderStyle={isActive ? \"bold\" : \"single\"}\n borderColor={isActive ? \"cyan\" : \"gray\"}\n paddingX={1}\n >\n <Text color={sColor}>{indicator} </Text>\n <Text bold={isActive}>{typeLabel}</Text>\n <Text color=\"gray\" dimColor> {modelShort}</Text>\n </Box>\n );\n })}\n </Box>\n\n {/* Hint line */}\n <Box>\n <Text color=\"gray\" dimColor> Tab: switch agent | Ctrl+1-{agents.length}: jump | /team stop: exit</Text>\n </Box>\n\n {/* Active agent output */}\n <Box flexDirection=\"column\" flexGrow={1} paddingX={1} marginTop={1} borderStyle=\"round\" borderColor=\"gray\">\n {activeAgent ? (\n <>\n {/* Agent header with name, role, status, and last activity */}\n <Box>\n <Text color=\"cyan\" bold>\n {\"\\u2726\"} {activeAgent.config.name}\n </Text>\n <Text color=\"gray\"> {\"\\u2014\"} {activeAgent.config.role} </Text>\n <Text color={getStatusColor(activeAgent.status)}>\n [{activeAgent.status}]\n </Text>\n </Box>\n {lastActivity ? (\n <Box>\n <Text color=\"gray\" dimColor> {lastActivity.length > 80 ? lastActivity.slice(0, 80) + \"...\" : lastActivity}</Text>\n </Box>\n ) : null}\n <Box borderStyle=\"single\" borderColor=\"gray\" borderTop borderBottom={false} borderLeft={false} borderRight={false} marginY={0} />\n\n {/* Output area with color-coded lines and spinner */}\n {activeOutput.length > 0 ? (\n <Box flexDirection=\"column\" marginTop={0}>\n <AgentOutput output={activeOutput} isActive={activeAgent.status === \"active\"} />\n </Box>\n ) : activeAgent.status === \"active\" ? (\n <Box marginTop={1}>\n <Spinner label=\"Initializing agent...\" />\n </Box>\n ) : (\n <Text color=\"yellow\">\n {\"\\u231B\"} Waiting for task...\n </Text>\n )}\n </>\n ) : (\n <Text color=\"gray\">No agents active</Text>\n )}\n </Box>\n </Box>\n );\n}\n","/**\n * Split-pane team layout per PRD section 9.5 (in-process fallback)\n */\n\nimport React from \"react\";\nimport { Box } from \"ink\";\nimport { SplitPanel } from \"../components/SplitPanel.js\";\nimport { InputBar } from \"../components/InputBar.js\";\nimport { StatusBar } from \"../components/StatusBar.js\";\nimport type { IAgentState } from \"../../types/index.js\";\n\ninterface ISplitPaneProps {\n readonly agents: readonly IAgentState[];\n readonly activeAgentIndex: number;\n readonly onSelectAgent: (index: number) => void;\n readonly agentOutputs: ReadonlyMap<string, string>;\n readonly isProcessing: boolean;\n readonly onSubmit: (input: string) => void;\n readonly onCancel?: (() => void) | undefined;\n readonly model: string;\n readonly role?: string | undefined;\n readonly tokenCount: string;\n readonly cost: string;\n readonly gitBranch?: string | undefined;\n}\n\nexport function SplitPane({\n agents,\n activeAgentIndex,\n onSelectAgent,\n agentOutputs,\n isProcessing,\n onSubmit,\n onCancel,\n model,\n role,\n tokenCount,\n cost,\n gitBranch,\n}: ISplitPaneProps): React.ReactElement {\n return (\n <Box flexDirection=\"column\" height=\"100%\">\n <StatusBar model={model} role={role} tokenCount={tokenCount} cost={cost} gitBranch={gitBranch} />\n <SplitPanel\n agents={agents}\n activeAgentIndex={activeAgentIndex}\n onSelectAgent={onSelectAgent}\n agentOutputs={agentOutputs}\n />\n <InputBar onSubmit={onSubmit} isProcessing={isProcessing} onCancel={onCancel} />\n </Box>\n );\n}\n","/**\n * Model interaction hook per PRD section 6.2\n * Manages the active model resolution and provider access\n */\n\nimport { useState, useCallback, useMemo } from \"react\";\nimport type { ModelRole, IModelResolution, IGlobalConfig } from \"../../types/index.js\";\nimport { createModelRouter } from \"../../core/index.js\";\nimport type { ModelRouter } from \"../../core/index.js\";\n\ninterface IUseModelReturn {\n readonly resolution: IModelResolution;\n readonly modelId: string;\n readonly switchModel: (modelId: string) => void;\n readonly switchRole: (role: ModelRole) => void;\n readonly router: ModelRouter;\n}\n\nexport function useModel(\n config: IGlobalConfig,\n initialModel?: string,\n initialRole?: ModelRole,\n): IUseModelReturn {\n const router = useMemo(() => createModelRouter(config), [config]);\n\n const [userOverride, setUserOverride] = useState<string | undefined>(initialModel);\n const [currentRole, setCurrentRole] = useState<ModelRole | undefined>(initialRole);\n\n const resolution = useMemo(\n () => {\n router.setUserOverride(userOverride);\n return router.resolve(currentRole);\n },\n [router, currentRole, userOverride],\n );\n\n const switchModel = useCallback((modelId: string) => {\n setUserOverride(modelId);\n }, []);\n\n const switchRole = useCallback(\n (role: ModelRole) => {\n router.setUserOverride(undefined);\n setCurrentRole(role);\n setUserOverride(undefined);\n },\n [router],\n );\n\n return {\n resolution,\n modelId: resolution.modelId,\n switchModel,\n switchRole,\n router,\n };\n}\n","/**\n * Streaming response hook per PRD section 6.2\n * Handles real-time token-by-token output from AI models\n */\n\nimport { useState, useCallback, useRef } from \"react\";\nimport type { IStreamChunk, ITokenUsage } from \"../../types/index.js\";\n\ninterface IStreamState {\n readonly isStreaming: boolean;\n readonly content: string;\n readonly usage: ITokenUsage | undefined;\n readonly error: string | undefined;\n /** Human-readable label for the current activity (e.g. \"Reading src/foo.ts\"). */\n readonly activity: string | undefined;\n}\n\ninterface IUseStreamReturn {\n readonly state: IStreamState;\n readonly startStream: (stream: AsyncIterable<IStreamChunk>) => Promise<void>;\n readonly cancelStream: () => void;\n readonly reset: () => void;\n}\n\n/** Format a tool call into a short human-readable activity label. */\nfunction formatToolActivity(toolCall: { name: string; arguments: Record<string, unknown> }): string {\n const args = toolCall.arguments;\n switch (toolCall.name) {\n case \"read\": {\n const fp = typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\n const short = fp.split(\"/\").slice(-2).join(\"/\");\n return `Reading ${short || \"file\"}`;\n }\n case \"write\": {\n const fp = typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\n const short = fp.split(\"/\").slice(-2).join(\"/\");\n return `Writing ${short || \"file\"}`;\n }\n case \"edit\": {\n const fp = typeof args[\"file_path\"] === \"string\" ? args[\"file_path\"] : \"\";\n const short = fp.split(\"/\").slice(-2).join(\"/\");\n return `Editing ${short || \"file\"}`;\n }\n case \"glob\": {\n const pat = typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\n return `Searching files ${pat}`;\n }\n case \"grep\": {\n const pat = typeof args[\"pattern\"] === \"string\" ? args[\"pattern\"] : \"\";\n return `Searching for \"${pat.length > 30 ? pat.slice(0, 30) + \"...\" : pat}\"`;\n }\n case \"bash\": {\n const cmd = typeof args[\"command\"] === \"string\" ? args[\"command\"] : \"\";\n const short = cmd.length > 40 ? cmd.slice(0, 40) + \"...\" : cmd;\n return `Running ${short}`;\n }\n case \"web_search\":\n case \"webSearch\":\n return \"Searching the web\";\n case \"web_fetch\":\n case \"webFetch\":\n return \"Fetching URL\";\n default:\n return `Calling ${toolCall.name}`;\n }\n}\n\nexport function useStream(): IUseStreamReturn {\n const [state, setState] = useState<IStreamState>({\n isStreaming: false,\n content: \"\",\n usage: undefined,\n error: undefined,\n activity: undefined,\n });\n\n const cancelRef = useRef(false);\n\n const startStream = useCallback(async (stream: AsyncIterable<IStreamChunk>) => {\n cancelRef.current = false;\n setState({\n isStreaming: true,\n content: \"\",\n usage: undefined,\n error: undefined,\n activity: undefined,\n });\n\n try {\n for await (const chunk of stream) {\n if (cancelRef.current) {\n break;\n }\n\n switch (chunk.type) {\n case \"text\":\n if (chunk.content) {\n setState((prev) => ({\n ...prev,\n content: prev.content + chunk.content,\n // Clear activity once we get text back (model is responding)\n activity: undefined,\n }));\n }\n break;\n\n case \"tool_call\":\n if (chunk.toolCall) {\n setState((prev) => ({\n ...prev,\n activity: formatToolActivity(chunk.toolCall!),\n }));\n }\n break;\n\n case \"usage\":\n if (chunk.usage) {\n setState((prev) => ({\n ...prev,\n usage: chunk.usage,\n }));\n }\n break;\n\n case \"error\":\n setState((prev) => ({\n ...prev,\n error: chunk.error,\n isStreaming: false,\n activity: undefined,\n }));\n return;\n\n case \"done\":\n setState((prev) => ({\n ...prev,\n isStreaming: false,\n usage: chunk.usage ?? prev.usage,\n activity: undefined,\n }));\n return;\n }\n }\n\n setState((prev) => ({ ...prev, isStreaming: false, activity: undefined }));\n } catch (error: unknown) {\n setState((prev) => ({\n ...prev,\n isStreaming: false,\n error: error instanceof Error ? error.message : String(error),\n activity: undefined,\n }));\n }\n }, []);\n\n const cancelStream = useCallback(() => {\n cancelRef.current = true;\n setState((prev) => ({ ...prev, isStreaming: false }));\n }, []);\n\n const reset = useCallback(() => {\n cancelRef.current = true;\n setState({\n isStreaming: false,\n content: \"\",\n usage: undefined,\n error: undefined,\n activity: undefined,\n });\n }, []);\n\n return { state, startStream, cancelStream, reset };\n}\n","/**\n * Cost tracking hook per PRD section 7.5\n */\n\nimport { useState, useEffect, useCallback, useRef } from \"react\";\nimport type { ICostConfig, ProviderName, ModelRole } from \"../../types/index.js\";\nimport { CostTracker, getEventBus } from \"../../core/index.js\";\nimport { formatCost, formatTokenCount } from \"../../utils/index.js\";\n\ninterface IUseCostReturn {\n readonly totalCost: string;\n readonly totalTokens: string;\n readonly isBudgetExceeded: boolean;\n readonly record: (\n provider: ProviderName,\n model: string,\n inputTokens: number,\n outputTokens: number,\n role?: ModelRole,\n ) => void;\n readonly tracker: CostTracker;\n}\n\nexport function useCost(config: ICostConfig): IUseCostReturn {\n const trackerRef = useRef(new CostTracker(config));\n const [totalCost, setTotalCost] = useState(\"$0.00\");\n const [totalTokens, setTotalTokens] = useState(\"0\");\n const [isBudgetExceeded, setIsBudgetExceeded] = useState(false);\n\n useEffect(() => {\n const eventBus = getEventBus();\n\n const unsubCost = eventBus.on(\"cost:updated\", ({ total }) => {\n setTotalCost(formatCost(total));\n const tokens = trackerRef.current.getSessionTokens();\n setTotalTokens(formatTokenCount(tokens.total));\n });\n\n const unsubExceeded = eventBus.on(\"cost:exceeded\", () => {\n setIsBudgetExceeded(true);\n });\n\n return () => {\n unsubCost();\n unsubExceeded();\n };\n }, []);\n\n const record = useCallback(\n (\n provider: ProviderName,\n model: string,\n inputTokens: number,\n outputTokens: number,\n role?: ModelRole,\n ) => {\n trackerRef.current.record(provider, model, inputTokens, outputTokens, role);\n },\n [],\n );\n\n return {\n totalCost,\n totalTokens,\n isBudgetExceeded,\n record,\n tracker: trackerRef.current,\n };\n}\n","/**\n * Panel management hook per PRD section 9\n */\n\nimport { useState, useCallback, useMemo } from \"react\";\nimport type { IAgentState, AgentStatus } from \"../../types/index.js\";\n\ninterface IUsePanelReturn {\n readonly agents: readonly IAgentState[];\n readonly activeAgentIndex: number;\n readonly agentOutputs: ReadonlyMap<string, string>;\n readonly isSplitPanelActive: boolean;\n readonly selectAgent: (index: number) => void;\n readonly appendOutput: (agentId: string, content: string) => void;\n readonly updateAgentStatus: (agentId: string, status: AgentStatus) => void;\n readonly setAgents: (agents: readonly IAgentState[]) => void;\n readonly activate: () => void;\n readonly deactivate: () => void;\n}\n\nexport function usePanel(): IUsePanelReturn {\n const [agents, setAgentsState] = useState<readonly IAgentState[]>([]);\n const [activeAgentIndex, setActiveAgentIndex] = useState(0);\n const [agentOutputs, setAgentOutputs] = useState<Map<string, string>>(new Map());\n const [isSplitPanelActive, setIsSplitPanelActive] = useState(false);\n\n const selectAgent = useCallback((index: number) => {\n setActiveAgentIndex(index);\n }, []);\n\n const appendOutput = useCallback((agentId: string, content: string) => {\n setAgentOutputs((prev) => {\n const next = new Map(prev);\n const existing = next.get(agentId) ?? \"\";\n next.set(agentId, existing + content);\n return next;\n });\n }, []);\n\n const updateAgentStatus = useCallback((agentId: string, status: AgentStatus) => {\n setAgentsState((prev) =>\n prev.map((agent) =>\n agent.config.agentId === agentId\n ? { ...agent, status }\n : agent,\n ),\n );\n }, []);\n\n const setAgents = useCallback((newAgents: readonly IAgentState[]) => {\n setAgentsState(newAgents);\n }, []);\n\n const activate = useCallback(() => {\n setIsSplitPanelActive(true);\n }, []);\n\n const deactivate = useCallback(() => {\n setIsSplitPanelActive(false);\n setAgentsState([]);\n setAgentOutputs(new Map());\n setActiveAgentIndex(0);\n }, []);\n\n return useMemo(() => ({\n agents,\n activeAgentIndex,\n agentOutputs,\n isSplitPanelActive,\n selectAgent,\n appendOutput,\n updateAgentStatus,\n setAgents,\n activate,\n deactivate,\n }), [agents, activeAgentIndex, agentOutputs, isSplitPanelActive, selectAgent, appendOutput, updateAgentStatus, setAgents, activate, deactivate]);\n}\n","/**\n * UI utility functions\n */\n\nimport { randomUUID } from \"node:crypto\";\n\n/**\n * Generate a unique ID for messages and other UI elements.\n */\nexport function v4Id(): string {\n return randomUUID();\n}\n","/**\n * Interactive model selector with up/down arrow key navigation.\n * Groups models by provider, highlights current selection.\n * Page 1 of the /model selection flow.\n */\n\nimport React, { useState, useMemo } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { PROVIDER_MODEL_ORDER } from \"../../types/model.js\";\n\ninterface IModelSelectorProps {\n readonly currentModelId: string;\n readonly onSelect: (modelId: string) => void;\n readonly onCancel: () => void;\n}\n\ninterface ISelectorRow {\n readonly type: \"header\" | \"model\";\n readonly label: string;\n readonly description?: string;\n readonly modelId?: string;\n readonly isCurrent?: boolean;\n}\n\nconst PROVIDER_LABELS: Readonly<Record<string, string>> = {\n anthropic: \"Claude (Anthropic)\",\n openai: \"Codex (OpenAI)\",\n google: \"Gemini (Google)\",\n kimi: \"Kimi (Moonshot)\",\n};\n\nexport function ModelSelector({ currentModelId, onSelect, onCancel }: IModelSelectorProps): React.ReactElement {\n const rows = useMemo<readonly ISelectorRow[]>(() => {\n const result: ISelectorRow[] = [];\n for (const [providerKey, entries] of Object.entries(PROVIDER_MODEL_ORDER)) {\n result.push({ type: \"header\", label: PROVIDER_LABELS[providerKey] ?? providerKey });\n for (const entry of entries) {\n result.push({\n type: \"model\",\n label: entry.label,\n description: entry.description,\n modelId: entry.id,\n isCurrent: entry.id === currentModelId,\n });\n }\n }\n return result;\n }, [currentModelId]);\n\n const selectableIndices = useMemo(() => {\n const indices: number[] = [];\n for (let i = 0; i < rows.length; i++) {\n if (rows[i]?.type === \"model\") indices.push(i);\n }\n return indices;\n }, [rows]);\n\n const initialIndex = useMemo(() => {\n const rowIdx = rows.findIndex((r) => r.type === \"model\" && r.modelId === currentModelId);\n const selectIdx = selectableIndices.indexOf(rowIdx);\n return selectIdx >= 0 ? selectIdx : 0;\n }, [rows, selectableIndices, currentModelId]);\n\n const [cursor, setCursor] = useState(initialIndex);\n\n useInput((_input, key) => {\n if (key.upArrow) {\n setCursor((prev) => (prev > 0 ? prev - 1 : selectableIndices.length - 1));\n } else if (key.downArrow) {\n setCursor((prev) => (prev < selectableIndices.length - 1 ? prev + 1 : 0));\n } else if (key.return) {\n const rowIdx = selectableIndices[cursor];\n const row = rowIdx !== undefined ? rows[rowIdx] : undefined;\n if (row?.modelId) onSelect(row.modelId);\n } else if (key.escape) {\n onCancel();\n }\n });\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">Select Model</Text>\n <Text color=\"gray\"> (up/down navigate, Enter select, Esc cancel)</Text>\n </Box>\n {rows.map((row, idx) => {\n if (row.type === \"header\") {\n return (\n <Box key={`header-${idx}`} marginTop={idx > 0 ? 1 : 0}>\n <Text bold color=\"yellow\"> [{row.label}]</Text>\n </Box>\n );\n }\n const isHighlighted = selectableIndices[cursor] === idx;\n const currentTag = row.isCurrent ? \" (current)\" : \"\";\n return (\n <Box key={row.modelId ?? `row-${idx}`}>\n <Text {...(isHighlighted ? { color: \"green\" } : {})} bold={isHighlighted}>\n {isHighlighted ? \"> \" : \" \"}{(row.label ?? \"\").padEnd(30)}\n </Text>\n <Text color=\"gray\"> {row.description}{currentTag}</Text>\n </Box>\n );\n })}\n <Box marginTop={1}>\n <Text color=\"gray\"> Current: {currentModelId}</Text>\n </Box>\n </Box>\n );\n}\n","/**\n * Interactive thinking-level selector with up/down arrow key navigation.\n * Shows provider-specific thinking options for the selected model.\n * Page 2 of the /model selection flow.\n */\n\nimport React, { useState, useMemo } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { getThinkingConfigForModel } from \"../../types/model.js\";\n\ninterface IThinkingSelectorProps {\n readonly modelId: string;\n readonly modelName: string;\n readonly currentValue: string;\n readonly onSelect: (value: string) => void;\n readonly onBack: () => void;\n}\n\nfunction formatMethod(method: string): string {\n switch (method) {\n case \"extended_thinking\": return \"Extended Thinking\";\n case \"reasoning_effort\": return \"Reasoning Effort\";\n case \"thinking_budget\": return \"Thinking Budget\";\n case \"thinking_level\": return \"Thinking Level\";\n case \"thinking_mode\": return \"Thinking Mode\";\n default: return \"Thinking\";\n }\n}\n\nexport function ThinkingSelector({\n modelId,\n modelName,\n currentValue,\n onSelect,\n onBack,\n}: IThinkingSelectorProps): React.ReactElement {\n const config = useMemo(() => getThinkingConfigForModel(modelId), [modelId]);\n\n const initialIdx = useMemo(() => {\n if (!config) return 0;\n const idx = config.options.findIndex((o) => o.value === currentValue);\n if (idx >= 0) return idx;\n const defaultIdx = config.options.findIndex((o) => o.value === config.defaultValue);\n return Math.max(0, defaultIdx);\n }, [config, currentValue]);\n\n const [cursor, setCursor] = useState(initialIdx);\n\n useInput((_input, key) => {\n if (!config) {\n if (key.return || key.escape) onBack();\n return;\n }\n if (key.upArrow) {\n setCursor((prev) => (prev > 0 ? prev - 1 : config.options.length - 1));\n } else if (key.downArrow) {\n setCursor((prev) => (prev < config.options.length - 1 ? prev + 1 : 0));\n } else if (key.return) {\n const option = config.options[cursor];\n if (option) onSelect(option.value);\n } else if (key.escape) {\n onBack();\n }\n });\n\n if (!config) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color=\"yellow\">No thinking options available for {modelName}.</Text>\n <Text color=\"gray\">Press Enter or Esc to continue.</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1} flexDirection=\"column\">\n <Text bold color=\"cyan\">{formatMethod(config.method)}</Text>\n <Text color=\"gray\"> Model: {modelName} (up/down navigate, Enter select, Esc back)</Text>\n </Box>\n {config.options.map((option, idx) => {\n const isHighlighted = cursor === idx;\n const isCurrent = option.value === currentValue;\n const currentTag = isCurrent ? \" (current)\" : \"\";\n return (\n <Box key={option.value}>\n <Text {...(isHighlighted ? { color: \"green\" } : {})} bold={isHighlighted}>\n {isHighlighted ? \"> \" : \" \"}{option.label.padEnd(22)}\n </Text>\n <Text color=\"gray\"> {option.description}{currentTag}</Text>\n </Box>\n );\n })}\n </Box>\n );\n}\n","/**\n * Interactive provider login selector with up/down arrow key navigation.\n * Shows available providers, user selects one, then browser login is triggered.\n */\n\nimport React, { useState } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\n\ninterface ILoginSelectorProps {\n readonly onSelect: (provider: string) => void;\n readonly onCancel: () => void;\n}\n\ninterface IProviderChoice {\n readonly label: string;\n readonly value: string;\n readonly description: string;\n}\n\nconst PROVIDERS: readonly IProviderChoice[] = [\n { label: \"Claude\", value: \"claude\", description: \"Anthropic — Claude models\" },\n { label: \"Codex\", value: \"codex\", description: \"OpenAI — GPT / Codex models\" },\n { label: \"Gemini\", value: \"gemini\", description: \"Google — Gemini models\" },\n { label: \"Kimi\", value: \"kimi\", description: \"Moonshot — Kimi models\" },\n];\n\nexport function LoginSelector({ onSelect, onCancel }: ILoginSelectorProps): React.ReactElement {\n const [cursor, setCursor] = useState(0);\n\n useInput((_input, key) => {\n if (key.upArrow) {\n setCursor((prev) => (prev > 0 ? prev - 1 : PROVIDERS.length - 1));\n } else if (key.downArrow) {\n setCursor((prev) => (prev < PROVIDERS.length - 1 ? prev + 1 : 0));\n } else if (key.return) {\n const selected = PROVIDERS[cursor];\n if (selected) onSelect(selected.value);\n } else if (key.escape) {\n onCancel();\n }\n });\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">Select a provider to log in to</Text>\n <Text color=\"gray\"> (up/down navigate, Enter select, Esc cancel)</Text>\n </Box>\n {PROVIDERS.map((provider, idx) => {\n const isHighlighted = cursor === idx;\n return (\n <Box key={provider.value}>\n <Text {...(isHighlighted ? { color: \"green\" } : {})} bold={isHighlighted}>\n {isHighlighted ? \"> \" : \" \"}{provider.label.padEnd(12)}\n </Text>\n <Text color=\"gray\"> {provider.description}</Text>\n </Box>\n );\n })}\n <Box marginTop={1}>\n <Text color=\"gray\"> Login will open your browser for authentication.</Text>\n </Box>\n </Box>\n );\n}\n","/**\n * Root TUI application component per PRD section 6.2\n * Orchestrates the entire interactive chat experience\n */\n\nimport React, { useState, useCallback, useEffect, useRef } from \"react\";\nimport { render } from \"ink\";\nimport { SinglePane } from \"./layouts/SinglePane.js\";\nimport { SplitPane } from \"./layouts/SplitPane.js\";\nimport { useModel } from \"./hooks/useModel.js\";\nimport { useStream } from \"./hooks/useStream.js\";\nimport { useCost } from \"./hooks/useCost.js\";\nimport { usePanel } from \"./hooks/usePanel.js\";\nimport type {\n IChatMessage,\n ModelRole,\n IGlobalConfig,\n IStreamChunk,\n IAgentState,\n AgentStatus,\n ProviderName,\n IModelResolution,\n IPaneConfig,\n ILayoutConfig,\n PaneLayout,\n} from \"../types/index.js\";\nimport {\n DEFAULT_CONFIG,\n SUPPORTED_MODELS,\n PROVIDER_MODEL_ORDER,\n getThinkingConfigForModel,\n} from \"../types/index.js\";\nimport type { ProviderRegistry } from \"../providers/registry.js\";\nimport type { TeamManager } from \"../teams/team-manager.js\";\nimport { v4Id } from \"./utils.js\";\nimport { SLASH_COMMANDS } from \"./autocomplete-data.js\";\nimport { ModelSelector } from \"./components/ModelSelector.js\";\nimport { ThinkingSelector } from \"./components/ThinkingSelector.js\";\nimport { LoginSelector } from \"./components/LoginSelector.js\";\n\ninterface IChatSessionOptions {\n readonly initialMessage?: string | undefined;\n readonly model?: string | undefined;\n readonly role?: string | undefined;\n readonly systemPrompt?: string | undefined;\n readonly streaming?: boolean | undefined;\n readonly isAgentPane?: boolean | undefined;\n}\n\ninterface IAppProps {\n readonly config: IGlobalConfig;\n readonly options: IChatSessionOptions;\n}\n\nfunction getCandidateModels(\n config: IGlobalConfig,\n resolution: IModelResolution,\n activeModelId: string,\n): readonly string[] {\n const candidates: string[] = [activeModelId];\n\n if (resolution.source !== \"user_override\" && resolution.role) {\n const roleConfig = config.roles[resolution.role];\n if (roleConfig) {\n candidates.push(roleConfig.primary, ...roleConfig.fallback);\n }\n }\n\n const seen = new Set<string>();\n const unique: string[] = [];\n for (const modelId of candidates) {\n if (!seen.has(modelId)) {\n seen.add(modelId);\n unique.push(modelId);\n }\n }\n\n return unique;\n}\n\ntype SelectionMode =\n | { readonly type: \"none\" }\n | { readonly type: \"model\" }\n | { readonly type: \"thinking\"; readonly modelId: string }\n | { readonly type: \"login\" };\n\nfunction App({ config, options }: IAppProps): React.ReactElement {\n const { resolution, modelId, switchModel, switchRole } = useModel(\n config,\n options.model,\n options.role as ModelRole | undefined,\n );\n const { state: streamState, startStream, cancelStream, reset: resetStream } = useStream();\n const { totalCost, totalTokens, record } = useCost(config.cost);\n\n // Refs for stable cost/token access inside closures (avoids stale values)\n const totalCostRef = useRef(totalCost);\n totalCostRef.current = totalCost;\n const totalTokensRef = useRef(totalTokens);\n totalTokensRef.current = totalTokens;\n const panel = usePanel();\n\n const [messages, setMessages] = useState<IChatMessage[]>([]);\n const [isProcessing, setIsProcessing] = useState(false);\n\n // Ref for stable message access inside async callbacks (avoids stale closure)\n const messagesRef = useRef<IChatMessage[]>([]);\n messagesRef.current = messages;\n const [gitBranch, setGitBranch] = useState<string | undefined>();\n const [thinkingValue, setThinkingValue] = useState<string>(\"medium\");\n const [selectionMode, setSelectionMode] = useState<SelectionMode>({ type: \"none\" });\n\n // Cached provider registry — initialized lazily on first use\n const registryRef = useRef<ProviderRegistry | undefined>(undefined);\n\n const getRegistry = useCallback(async (): Promise<ProviderRegistry> => {\n if (registryRef.current !== undefined) return registryRef.current;\n const { createDefaultRegistry } = await import(\"../providers/registry.js\");\n registryRef.current = await createDefaultRegistry();\n return registryRef.current;\n }, []);\n\n // Detect git branch on mount using safe execFile\n useEffect(() => {\n import(\"node:child_process\")\n .then(({ execFile }) => {\n execFile(\"git\", [\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], { timeout: 2000 }, (error, stdout) => {\n if (!error && stdout) {\n setGitBranch(stdout.trim());\n }\n });\n })\n .catch(() => {\n // Not in a git repo or git not available\n });\n }, []);\n\n // Handle initial message\n useEffect(() => {\n if (options.initialMessage) {\n void handleSubmit(options.initialMessage);\n }\n }, []);\n\n const handleSubmit = useCallback(\n async (input: string) => {\n // Handle internal commands\n if (input.startsWith(\"/\")) {\n await handleInternalCommand(input, switchModel, switchRole, {\n totalCost: totalCostRef.current,\n totalTokens: totalTokensRef.current,\n setMessages,\n modelId,\n thinkingValue,\n setThinkingValue,\n setSelectionMode,\n resolution,\n panel: {\n setAgents: panel.setAgents,\n activate: panel.activate,\n deactivate: panel.deactivate,\n appendOutput: panel.appendOutput,\n },\n getRegistry,\n });\n return;\n }\n\n // Handle $ skill invocation (PRD 12.2)\n if (input.startsWith(\"$\")) {\n await handleSkillInvocation(input, setMessages);\n return;\n }\n\n // Detect prompt-based team creation intent from natural language.\n // Skip when launched as an agent pane, when a split panel is active,\n // or when a team is already running — prevents recursive team creation\n // (the leader's auto-submitted task contains \"team\"/\"agent\" keywords).\n if (!options.isAgentPane && !panel.isSplitPanelActive && !activeTeamName && detectTeamCreationIntent(input)) {\n const leaderTask = await handlePromptBasedTeamCreation(input, setMessages, panel, getRegistry, modelId);\n if (leaderTask) {\n // Auto-submit the leader's coordination task so the left pane\n // actively works (matching Claude Code's agent team model where\n // the leader pane is never idle).\n setTimeout(() => void handleSubmit(leaderTask), 1500);\n }\n return;\n }\n\n const userMessage: IChatMessage = {\n id: v4Id(),\n role: \"user\",\n content: input,\n createdAt: new Date(),\n };\n\n setMessages((prev) => [...prev, userMessage]);\n setIsProcessing(true);\n resetStream();\n\n try {\n const registry = await getRegistry();\n const allMessages = [...messagesRef.current, userMessage].filter((m) => m.role !== \"system\");\n const candidateModels = getCandidateModels(config, resolution, modelId);\n\n let responseModel = modelId;\n let responseProvider: ProviderName = resolution.provider;\n let fullContent = \"\";\n let completed = false;\n let lastError: unknown;\n\n for (const candidateModel of candidateModels) {\n const provider = registry.hasModel(candidateModel)\n ? registry.getForModel(candidateModel)\n : undefined;\n\n if (!provider) {\n lastError = new Error(`No provider available for model \"${candidateModel}\"`);\n continue;\n }\n\n const candidateProvider = provider;\n\n let candidateContent = \"\";\n let caughtError: unknown;\n\n const stream = candidateProvider.stream({\n model: candidateModel,\n messages: allMessages,\n system: options.systemPrompt,\n maxTokens: 16_000,\n });\n\n async function* instrumentedStream(\n source: AsyncIterable<IStreamChunk>,\n ): AsyncGenerator<IStreamChunk> {\n try {\n for await (const chunk of source) {\n if (chunk.type === \"text\" && chunk.content) {\n candidateContent += chunk.content;\n }\n if (chunk.type === \"usage\" && chunk.usage) {\n record(\n candidateProvider.name as ProviderName,\n candidateModel,\n chunk.usage.inputTokens,\n chunk.usage.outputTokens,\n resolution.role,\n );\n }\n if (chunk.type === \"error\") {\n caughtError = new Error(\n chunk.error ?? `Model \"${candidateModel}\" stream failed`,\n );\n }\n yield chunk;\n }\n } catch (err: unknown) {\n caughtError = err;\n throw err;\n }\n }\n\n resetStream();\n await startStream(instrumentedStream(stream));\n\n if (caughtError !== undefined) {\n lastError = caughtError;\n continue;\n }\n\n responseModel = candidateModel;\n responseProvider = candidateProvider.name as ProviderName;\n fullContent = candidateContent;\n completed = true;\n break;\n }\n\n if (!completed) {\n if (lastError instanceof Error) {\n throw lastError;\n }\n throw new Error(\n typeof lastError === \"string\"\n ? lastError\n : \"No model could produce a response\",\n );\n }\n\n if (fullContent.length > 0) {\n const assistantMessage: IChatMessage = {\n id: v4Id(),\n role: \"assistant\",\n content: fullContent,\n model: responseModel,\n provider: responseProvider,\n createdAt: new Date(),\n };\n\n setMessages((prev) => {\n const output: IChatMessage[] = [...prev];\n if (responseModel !== modelId) {\n output.push({\n id: v4Id(),\n role: \"system\",\n content: `Primary model \"${modelId}\" failed. Switched to fallback \"${responseModel}\".`,\n createdAt: new Date(),\n });\n }\n output.push(assistantMessage);\n return output;\n });\n }\n } catch (error: unknown) {\n const errorContent = error instanceof Error ? error.message : String(error);\n const errorMessage: IChatMessage = {\n id: v4Id(),\n role: \"assistant\",\n content: `Error: ${errorContent}`,\n model: modelId,\n createdAt: new Date(),\n };\n setMessages((prev) => [...prev, errorMessage]);\n } finally {\n setIsProcessing(false);\n }\n },\n [\n config,\n modelId,\n resolution,\n options.systemPrompt,\n record,\n switchModel,\n switchRole,\n startStream,\n resetStream,\n getRegistry,\n panel,\n thinkingValue,\n ],\n );\n\n const handleSubmitSync = useCallback((input: string): void => {\n void handleSubmit(input);\n }, [handleSubmit]);\n\n const handleCancel = useCallback(() => {\n cancelStream();\n setIsProcessing(false);\n }, [cancelStream]);\n\n const handleModelSelected = useCallback((selectedModelId: string) => {\n const thinkingCfg = getThinkingConfigForModel(selectedModelId);\n if (thinkingCfg) {\n setSelectionMode({ type: \"thinking\", modelId: selectedModelId });\n } else {\n switchModel(selectedModelId);\n setSelectionMode({ type: \"none\" });\n const info = SUPPORTED_MODELS[selectedModelId];\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: `Switched to model: ${info?.name ?? selectedModelId}`, createdAt: new Date() },\n ]);\n }\n }, [switchModel]);\n\n const handleThinkingSelected = useCallback((value: string) => {\n if (selectionMode.type !== \"thinking\") return;\n const { modelId: selectedModelId } = selectionMode;\n switchModel(selectedModelId);\n setThinkingValue(value);\n setSelectionMode({ type: \"none\" });\n const info = SUPPORTED_MODELS[selectedModelId];\n const cfg = getThinkingConfigForModel(selectedModelId);\n const methodLabel = cfg ? formatThinkingMethod(cfg.method) : \"Thinking\";\n const optionLabel = cfg?.options.find((o) => o.value === value)?.label ?? value;\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: `Switched to model: ${info?.name ?? selectedModelId}\\n${methodLabel}: ${optionLabel}`, createdAt: new Date() },\n ]);\n }, [selectionMode, switchModel]);\n\n const handleSelectionCancel = useCallback(() => {\n setSelectionMode({ type: \"none\" });\n }, []);\n\n const handleLoginSelected = useCallback(async (provider: string) => {\n setSelectionMode({ type: \"none\" });\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: `Logging in to ${provider}...`, createdAt: new Date() },\n ]);\n\n try {\n const loginModule = await loadLoginModuleForSlash(provider as \"claude\" | \"codex\" | \"gemini\" | \"kimi\");\n await loginModule.login();\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: `Successfully logged in to ${provider}`, createdAt: new Date() },\n ]);\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: `Login failed: ${msg}`, createdAt: new Date() },\n ]);\n }\n }, []);\n\n // ── Selection mode renders take priority over normal views ──────────────\n\n if (selectionMode.type === \"login\") {\n return (\n <LoginSelector\n onSelect={(provider) => void handleLoginSelected(provider)}\n onCancel={handleSelectionCancel}\n />\n );\n }\n\n if (selectionMode.type === \"model\") {\n return (\n <ModelSelector\n currentModelId={modelId}\n onSelect={handleModelSelected}\n onCancel={handleSelectionCancel}\n />\n );\n }\n\n if (selectionMode.type === \"thinking\") {\n const selectedInfo = SUPPORTED_MODELS[selectionMode.modelId];\n return (\n <ThinkingSelector\n modelId={selectionMode.modelId}\n modelName={selectedInfo?.name ?? selectionMode.modelId}\n currentValue={thinkingValue}\n onSelect={handleThinkingSelected}\n onBack={handleSelectionCancel}\n />\n );\n }\n\n if (panel.isSplitPanelActive) {\n return (\n <SplitPane\n agents={panel.agents}\n activeAgentIndex={panel.activeAgentIndex}\n onSelectAgent={panel.selectAgent}\n agentOutputs={panel.agentOutputs}\n isProcessing={isProcessing}\n onSubmit={handleSubmitSync}\n onCancel={handleCancel}\n model={modelId}\n role={resolution.role}\n tokenCount={totalTokens}\n cost={totalCost}\n gitBranch={gitBranch}\n />\n );\n }\n\n return (\n <SinglePane\n messages={messages}\n isProcessing={isProcessing}\n onSubmit={handleSubmitSync}\n onCancel={handleCancel}\n model={modelId}\n role={resolution.role}\n tokenCount={totalTokens}\n cost={totalCost}\n gitBranch={gitBranch}\n streamingContent={streamState.content}\n activity={streamState.activity}\n />\n );\n}\n\n// ── Helper to add system messages to Ink-managed state ────────────────────\n\ninterface IPanelControls {\n readonly setAgents: (agents: readonly IAgentState[]) => void;\n readonly activate: () => void;\n readonly deactivate: () => void;\n readonly appendOutput: (agentId: string, content: string) => void;\n}\n\ninterface ICommandContext {\n readonly totalCost: string;\n readonly totalTokens: string;\n readonly setMessages: React.Dispatch<React.SetStateAction<IChatMessage[]>>;\n readonly modelId: string;\n readonly thinkingValue: string;\n readonly setThinkingValue: (value: string) => void;\n readonly setSelectionMode: (mode: SelectionMode) => void;\n readonly resolution: { readonly provider: string; readonly role?: string | undefined };\n readonly panel: IPanelControls;\n readonly getRegistry: () => Promise<ProviderRegistry>;\n}\n\nfunction addSystemMessage(ctx: ICommandContext, content: string): void {\n ctx.setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content,\n createdAt: new Date(),\n },\n ]);\n}\n\n/**\n * Resolve a model selection input — either a model ID or a global index number\n * from the /model display list.\n */\nfunction resolveModelSelection(input: string): string | undefined {\n // Direct model ID match\n if (SUPPORTED_MODELS[input]) {\n return input;\n }\n\n // Numeric index into the global ordered list\n if (/^\\d+$/.test(input)) {\n const index = Number(input);\n let globalIndex = 1;\n\n for (const entries of Object.values(PROVIDER_MODEL_ORDER)) {\n for (const entry of entries) {\n if (globalIndex === index) {\n return entry.id;\n }\n globalIndex++;\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Human-readable label for a provider's thinking method.\n */\nfunction formatThinkingMethod(method: string): string {\n switch (method) {\n case \"extended_thinking\":\n return \"Extended Thinking\";\n case \"reasoning_effort\":\n return \"Reasoning Effort\";\n case \"thinking_budget\":\n return \"Thinking Budget\";\n case \"thinking_level\":\n return \"Thinking Level\";\n case \"thinking_mode\":\n return \"Thinking Mode\";\n default:\n return \"Thinking\";\n }\n}\n\nasync function handleInternalCommand(\n input: string,\n switchModel: (model: string) => void,\n switchRole: (role: ModelRole) => void,\n ctx: ICommandContext,\n): Promise<void> {\n const parts = input.trim().split(/\\s+/);\n const command = parts[0];\n const args = parts.slice(1);\n const arg = args[0];\n\n switch (command) {\n case \"/help\": {\n const helpLines = SLASH_COMMANDS.map((cmd) => ` ${cmd.command.padEnd(17)}${cmd.description}`).join(\"\\n\");\n addSystemMessage(ctx, helpLines);\n break;\n }\n\n case \"/model\": {\n if (arg) {\n // Direct model switch: /model <id-or-number>\n const resolvedId = resolveModelSelection(arg);\n if (!resolvedId) {\n addSystemMessage(ctx, `Unknown model: ${arg}`);\n break;\n }\n const info = SUPPORTED_MODELS[resolvedId];\n if (!info) {\n addSystemMessage(ctx, `Unknown model: ${arg}`);\n break;\n }\n switchModel(resolvedId);\n // Reset thinking to provider default if current value is invalid\n const thinkingCfg = getThinkingConfigForModel(resolvedId);\n if (thinkingCfg) {\n const isValid = thinkingCfg.options.some((o) => o.value === ctx.thinkingValue);\n if (!isValid) ctx.setThinkingValue(thinkingCfg.defaultValue);\n }\n addSystemMessage(ctx, `Switched to model: ${info.name}`);\n } else {\n // Open interactive model selector (up/down arrow key navigation)\n ctx.setSelectionMode({ type: \"model\" });\n }\n break;\n }\n\n case \"/role\": {\n if (arg) {\n const validRoles = [\"planning\", \"coding\", \"review\", \"testing\", \"bugfix\", \"documentation\"];\n if (validRoles.includes(arg)) {\n switchRole(arg as ModelRole);\n addSystemMessage(ctx, `Switched to role: ${arg}`);\n } else {\n addSystemMessage(ctx, `Unknown role: ${arg}\\nValid roles: ${validRoles.join(\", \")}`);\n }\n } else {\n addSystemMessage(ctx, `Current role: ${ctx.resolution.role ?? \"default\"}`);\n }\n break;\n }\n\n case \"/cost\":\n addSystemMessage(ctx, `Session cost: ${ctx.totalCost} | Tokens: ${ctx.totalTokens}`);\n break;\n\n case \"/clear\":\n ctx.setMessages([]);\n break;\n\n case \"/compact\":\n addSystemMessage(ctx, \"Context compacted.\");\n break;\n\n case \"/team\":\n await handleTeamCommand(args, ctx);\n break;\n\n case \"/mcp\":\n await handleMcpCommand(args, ctx);\n break;\n\n case \"/skill\":\n await handleSkillCommand(args, ctx);\n break;\n\n case \"/panel\": {\n const layout = arg;\n if (!layout) {\n addSystemMessage(ctx, \"Usage: /panel <layout>\\nLayouts: auto, horizontal, vertical, grid\");\n } else {\n addSystemMessage(ctx, `Panel layout set to: ${layout}`);\n }\n break;\n }\n\n case \"/login\":\n await handleLoginSlashCommand(args, ctx);\n break;\n\n case \"/config\":\n await handleConfigSlashCommand(args, ctx);\n break;\n\n case \"/quit\":\n case \"/exit\":\n process.exit(0);\n break;\n\n default:\n addSystemMessage(ctx, `Unknown command: ${command}. Type /help for available commands.`);\n }\n}\n\n// ── LLM-Driven Dynamic Team Design ───────────────────────────────────────\n\n/**\n * System prompt for the LLM to design an agent team from natural language.\n * The LLM analyzes the user's request and outputs a JSON array of agent specs.\n * Teams are NEVER predefined — every team is dynamically designed by the LLM\n * based on the user's prompt, following the Claude Code agent-team pattern.\n */\nconst TEAM_DESIGN_SYSTEM_PROMPT =\n \"You are an expert team architect for an AI-powered CLI coding tool. \" +\n \"Your job is to analyze a user's request and design an optimal agent team to accomplish it.\\n\\n\" +\n \"You MUST respond with ONLY a JSON array (no markdown, no explanation, no code fences). \" +\n \"Each element represents one agent with these exact fields:\\n\" +\n '- \"name\": string — PascalCase name describing the agent\\'s function (e.g. \"ProjectManager\", \"TypeScriptDeveloper\", \"SecurityAuditor\")\\n' +\n '- \"agentType\": string — short role type (e.g. \"lead\", \"developer\", \"reviewer\", \"researcher\", \"designer\", \"architect\", \"auditor\", \"tester\")\\n' +\n '- \"model\": string — one of the available models (provided in the user message)\\n' +\n '- \"role\": string — one of: \"planning\", \"coding\", \"review\", \"testing\", \"bugfix\", \"documentation\"\\n' +\n '- \"taskPrompt\": string — detailed, specific instructions for this agent. Include: what to focus on, what files/areas to examine, what deliverables are expected, and what tools to use. This must be tailored to the user\\'s actual request, NOT generic.\\n\\n' +\n \"Guidelines for team design:\\n\" +\n \"- Use the MINIMUM number of agents needed to accomplish the task (typically 2-5, max 8)\\n\" +\n \"- Assign the most capable models (opus, gpt-5.2, gemini pro) to critical roles like planning and review\\n\" +\n \"- Assign efficient models (sonnet, haiku, flash) to implementation, testing, and documentation\\n\" +\n \"- Every team MUST have at least one agent with role \\\"coding\\\" to do actual implementation\\n\" +\n \"- For complex tasks, include a planner/lead agent and a reviewer agent\\n\" +\n \"- If only one provider's models are available, use those models for all agents\\n\" +\n \"- Each agent's taskPrompt must be highly specific to the user's request — never use generic instructions\\n\" +\n \"- Agent names should reflect their specific responsibility in this task\\n\";\n\n/** Parsed agent specification from the LLM's team design response. */\ninterface ILLMAgentSpec {\n readonly name: string;\n readonly agentType: string;\n readonly model: string;\n readonly role: ModelRole;\n readonly taskPrompt: string;\n}\n\nconst VALID_ROLES: ReadonlySet<string> = new Set([\n \"planning\", \"coding\", \"review\", \"testing\", \"bugfix\", \"documentation\",\n]);\n\n/**\n * Parse the LLM's team design response into validated agent specs.\n * Extracts JSON from the response, validates each agent, and falls back\n * to safe defaults for any invalid fields.\n */\nfunction parseLLMTeamDesign(\n response: string,\n availableModels: readonly string[],\n fallbackModel: string,\n): ILLMAgentSpec[] {\n let jsonStr = response.trim();\n\n // Strip markdown code fences if present\n const fenceMatch = /```(?:json)?\\s*\\n?([\\s\\S]*?)\\n?```/.exec(jsonStr);\n if (fenceMatch?.[1] !== undefined) {\n jsonStr = fenceMatch[1].trim();\n }\n\n // Find the outermost JSON array\n const arrayStart = jsonStr.indexOf(\"[\");\n const arrayEnd = jsonStr.lastIndexOf(\"]\");\n if (arrayStart === -1 || arrayEnd === -1 || arrayEnd <= arrayStart) {\n throw new Error(\"LLM response does not contain a valid JSON array for team design\");\n }\n jsonStr = jsonStr.slice(arrayStart, arrayEnd + 1);\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonStr);\n } catch {\n throw new Error(\"Failed to parse LLM team design as JSON\");\n }\n\n if (!Array.isArray(parsed) || parsed.length === 0) {\n throw new Error(\"LLM team design must be a non-empty array\");\n }\n\n const availableSet = new Set(availableModels);\n const specs: ILLMAgentSpec[] = [];\n\n for (const item of parsed) {\n if (typeof item !== \"object\" || item === null) continue;\n const record = item as Record<string, unknown>;\n\n const name = typeof record[\"name\"] === \"string\" && record[\"name\"].length > 0\n ? record[\"name\"]\n : `Agent${specs.length + 1}`;\n const agentType = typeof record[\"agentType\"] === \"string\" && record[\"agentType\"].length > 0\n ? record[\"agentType\"]\n : \"developer\";\n const rawModel = typeof record[\"model\"] === \"string\" ? record[\"model\"] : \"\";\n const rawRole = typeof record[\"role\"] === \"string\" ? record[\"role\"] : \"coding\";\n const taskPrompt = typeof record[\"taskPrompt\"] === \"string\" ? record[\"taskPrompt\"] : \"\";\n\n const model = availableSet.has(rawModel) ? rawModel : fallbackModel;\n const role = VALID_ROLES.has(rawRole) ? (rawRole as ModelRole) : \"coding\";\n\n specs.push({ name, agentType, model, role, taskPrompt });\n }\n\n if (specs.length === 0) {\n throw new Error(\"LLM team design produced no valid agent specifications\");\n }\n\n return specs.slice(0, 8);\n}\n\n/**\n * Build the user prompt sent to the LLM for team design.\n * Includes the available models list and the user's original request.\n */\nfunction buildTeamDesignUserPrompt(\n userRequest: string,\n availableModels: readonly string[],\n): string {\n const modelList = availableModels.map((id) => {\n const info = SUPPORTED_MODELS[id];\n if (!info) return `- ${id}`;\n return `- ${id} (${info.provider}, ${info.name})`;\n }).join(\"\\n\");\n\n return (\n `Available models:\\n${modelList}\\n\\n` +\n `User request:\\n${userRequest}\\n\\n` +\n \"Design the agent team. Respond with ONLY a JSON array.\"\n );\n}\n\n// ── Prompt-based Team Creation ────────────────────────────────────────────\n\nconst TEAM_CREATION_PATTERNS: readonly RegExp[] = [\n /\\bcreate\\s+(?:a\\s+)?team\\b/i,\n /\\bstart\\s+(?:a\\s+)?team\\b/i,\n /\\bspawn\\s+(?:a\\s+)?(?:team|agents?)\\b/i,\n /\\buse\\s+(?:a\\s+)?team\\b/i,\n /\\bassemble\\s+(?:a\\s+)?team\\b/i,\n /\\blaunch\\s+(?:a\\s+)?team\\b/i,\n /\\bneed\\s+(?:a\\s+)?team\\b/i,\n /\\bwork\\s+(?:as|with)\\s+(?:a\\s+)?team\\b/i,\n /\\bmulti[- ]?agent\\b/i,\n /\\bagent\\s+team\\b/i,\n];\n\nfunction detectTeamCreationIntent(input: string): boolean {\n return TEAM_CREATION_PATTERNS.some((pattern) => pattern.test(input));\n}\n\n// ── Module-level active team tracking (for /team stop shutdown) ────────────\n\nlet activeTeamManager: TeamManager | undefined;\nlet activeTeamName: string | undefined;\nlet activeTmuxCleanup: (() => Promise<void>) | undefined;\n\n// ── Native CLI pane commands ─────────────────────────────────────────────\n// Maps provider → native CLI binary for interactive-mode pane sessions.\n// Each agent pane runs the native CLI directly (NOT a single-shot adapter)\n// so agents have full interactive tool use (read files, write code, etc.)\n// — just like Claude Code agent teams.\n\nconst PROVIDER_CLI_MAP: Record<string, { bin: string; modelFlag: boolean; extraArgs: readonly string[] }> = {\n anthropic: { bin: \"claude\", modelFlag: true, extraArgs: [\"--dangerously-skip-permissions\"] },\n openai: { bin: \"codex\", modelFlag: true, extraArgs: [\"--sandbox\", \"danger-full-access\", \"--ask-for-approval\", \"never\"] },\n google: { bin: \"gemini\", modelFlag: true, extraArgs: [\"--yolo\"] },\n kimi: { bin: \"kimi\", modelFlag: false, extraArgs: [\"--yolo\"] },\n};\n\n/**\n * Build a launcher shell script for an agent pane.\n * The script `cd`s into the project root, then runs the native CLI in\n * interactive mode with the agent's prompt passed as the initial message.\n * Using a script (vs inline command) ensures `pkill -f` can match by tempDir path.\n */\nfunction writeAgentLauncherScript(\n provider: string,\n model: string,\n promptFile: string,\n launcherFile: string,\n projectRoot: string,\n shellEscapeFn: (s: string) => string,\n writeFileSyncFn: (path: string, data: string, opts?: { mode?: number }) => void,\n): string {\n const cliInfo = PROVIDER_CLI_MAP[provider];\n\n if (cliInfo) {\n const modelArg = cliInfo.modelFlag ? ` --model ${model}` : \"\";\n const extraArgs = cliInfo.extraArgs.length > 0 ? ` ${cliInfo.extraArgs.join(\" \")}` : \"\";\n // Do NOT use `exec` — bash must remain as parent so `pkill -f` can match\n // the launcher script path in tempDir for /team stop cleanup.\n const script = [\n \"#!/bin/bash\",\n `cd '${shellEscapeFn(projectRoot)}' || exit 1`,\n `${cliInfo.bin}${extraArgs}${modelArg} \"$(cat '${shellEscapeFn(promptFile)}')\"`,\n ].join(\"\\n\");\n writeFileSyncFn(launcherFile, script, { mode: 0o755 });\n return `bash '${shellEscapeFn(launcherFile)}'`;\n }\n\n // Fallback: run AemeathCLI wrapper (for ollama or unknown providers)\n const script = [\n \"#!/bin/bash\",\n `cd '${shellEscapeFn(projectRoot)}' || exit 1`,\n `export AEMEATHCLI_PROMPT_FILE='${shellEscapeFn(promptFile)}'`,\n `'${shellEscapeFn(process.execPath)}' '${shellEscapeFn(process.argv[1] ?? \"aemeathcli\")}' --model ${model}`,\n ].join(\"\\n\");\n writeFileSyncFn(launcherFile, script, { mode: 0o755 });\n return `bash '${shellEscapeFn(launcherFile)}'`;\n}\n\nasync function handlePromptBasedTeamCreation(\n input: string,\n setMessages: React.Dispatch<React.SetStateAction<IChatMessage[]>>,\n panel: {\n readonly isSplitPanelActive: boolean;\n readonly setAgents: (agents: readonly IAgentState[]) => void;\n readonly activate: () => void;\n readonly appendOutput: (agentId: string, content: string) => void;\n readonly updateAgentStatus: (agentId: string, status: AgentStatus) => void;\n },\n getRegistry: () => Promise<ProviderRegistry>,\n currentModelId: string,\n): Promise<string | undefined> {\n const teamName = `team-${Date.now()}`;\n\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"user\" as const, content: input, createdAt: new Date() },\n {\n id: v4Id(),\n role: \"system\" as const,\n content: \"Analyzing your request to design the agent team...\",\n createdAt: new Date(),\n },\n ]);\n\n try {\n // 1. Get provider registry and determine available models\n const registry = await getRegistry();\n const availableModels = Object.keys(SUPPORTED_MODELS).filter((id) =>\n registry.hasModel(id),\n );\n\n if (availableModels.length === 0) {\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content:\n \"No models available. Please authenticate with at least one provider using 'aemeathcli auth login'.\",\n createdAt: new Date(),\n },\n ]);\n return;\n }\n\n // 2. Use the current model to design the team via LLM\n const designModel = registry.hasModel(currentModelId)\n ? currentModelId\n : availableModels[0]!;\n const designProvider = registry.getForModel(designModel);\n const userPrompt = buildTeamDesignUserPrompt(input, availableModels);\n\n const designStream = designProvider.stream({\n model: designModel,\n messages: [\n {\n id: v4Id(),\n role: \"user\" as const,\n content: userPrompt,\n createdAt: new Date(),\n },\n ],\n system: TEAM_DESIGN_SYSTEM_PROMPT,\n maxTokens: 4000,\n });\n\n let designResponse = \"\";\n for await (const chunk of designStream) {\n if (chunk.type === \"text\" && chunk.content) {\n designResponse += chunk.content;\n }\n }\n\n // 3. Parse the LLM's team design\n const agentSpecs = parseLLMTeamDesign(\n designResponse,\n availableModels,\n designModel,\n );\n\n // 4. Map parsed specs to IAgentDefinition for TeamManager\n const agentDefinitions = agentSpecs.map((spec) => {\n const modelInfo = SUPPORTED_MODELS[spec.model];\n const provider: ProviderName = modelInfo?.provider ?? \"anthropic\";\n return {\n name: spec.name,\n agentType: spec.agentType,\n model: spec.model,\n provider,\n role: spec.role,\n };\n });\n\n // 5. Prepare shared resources for split-panel mode (hub-and-spoke coordination)\n // Board directory is inside the project so native CLIs (claude, codex, gemini)\n // can read/write to it — they scope file access to the current working directory.\n const { writeFileSync, mkdirSync, mkdtempSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { tmpdir } = await import(\"node:os\");\n const { execa: execaPane } = await import(\"execa\");\n\n const boardDir = join(process.cwd(), \".aemeathcli\", \"team-board\");\n mkdirSync(boardDir, { recursive: true });\n // Temp dir for prompt files and manifest (not accessed by native CLIs)\n const tempDir = mkdtempSync(join(tmpdir(), \"aemeathcli-team-\"));\n\n const shellEscape = (s: string): string => s.replace(/'/gu, \"'\\\\''\");\n\n // Identify the lead agent (first agent with \"lead\" type, or first \"planning\" role)\n const leadSpec = agentSpecs.find((s) => s.agentType === \"lead\")\n ?? agentSpecs.find((s) => s.role === \"planning\")\n ?? agentSpecs[0]!;\n\n // Write team manifest to shared workspace (readable by all agents)\n const teamManifest = {\n teamName,\n task: input,\n boardDir,\n leadAgent: leadSpec.name,\n agents: agentSpecs.map((s) => ({\n name: s.name,\n agentType: s.agentType,\n model: s.model,\n role: s.role,\n outputFile: join(boardDir, `${s.name}.md`),\n })),\n createdAt: new Date().toISOString(),\n };\n writeFileSync(\n join(boardDir, \"team-manifest.json\"),\n JSON.stringify(teamManifest, null, 2),\n \"utf-8\",\n );\n\n // Build team roster string for inclusion in every agent's prompt\n const teamRoster = agentSpecs\n .map((s) => ` - ${s.name} (${s.agentType}, ${s.model}) — role: ${s.role}`)\n .join(\"\\n\");\n\n // Separate the lead agent from worker agents.\n // Worker agents get their own split panes running native CLIs in interactive mode.\n // The lead agent's task is auto-submitted in the current AemeathCLI pane so the\n // left pane actively coordinates (matching Claude Code's agent team model).\n const workerSpecs = agentSpecs.filter((s) => s.name !== leadSpec.name);\n const projectRoot = process.cwd();\n\n // Write prompt files with full team context and coordination protocol\n const agentCommands: Array<{ name: string; command: string }> = [];\n for (const spec of [...workerSpecs]) {\n const outputFile = join(boardDir, `${spec.name}.md`);\n const promptFile = join(tempDir, `${spec.name}.txt`);\n\n const prompt = [\n `# Team Role: ${spec.name}`,\n `Type: ${spec.agentType} | Model: ${spec.model} | Role: ${spec.role}`,\n \"\",\n \"## Your Task\",\n spec.taskPrompt,\n \"\",\n \"## Team Context\",\n `You are part of a ${agentSpecs.length}-agent team working collaboratively.`,\n `Each agent has a specific domain. Do NOT overlap with other agents' responsibilities.`,\n \"\",\n \"### Team Members:\",\n teamRoster,\n \"\",\n \"## Shared Workspace\",\n `Team board directory: ${boardDir}`,\n `Your output file: ${outputFile}`,\n `Team manifest: ${join(boardDir, \"team-manifest.json\")}`,\n \"\",\n \"## Coordination Protocol\",\n `1. Write ALL your findings, analysis, and deliverables to your output file: ${outputFile}`,\n `2. You can read other agents' output files in ${boardDir}/ to check their progress and avoid duplication.`,\n `3. Focus on YOUR specific domain. Reference other agents' work when relevant to your analysis.`,\n `4. Read and analyze source files in the project directory to complete your task.`,\n `5. Be thorough and specific. Include file paths, line numbers, and code snippets in your findings.`,\n \"\",\n \"## Coordination with Lead\",\n `The team lead is ${leadSpec.name}. Check their coordination plan at: ${join(boardDir, \"coordinator.md\")}`,\n `After completing your work, the lead agent will read your output and synthesize findings.`,\n \"\",\n \"## User's Original Request\",\n input,\n ].join(\"\\n\");\n\n writeFileSync(promptFile, prompt, \"utf-8\");\n\n // Each agent pane runs the native CLI directly in interactive mode\n // (claude, codex, gemini, kimi) instead of wrapping through AemeathCLI's\n // single-shot adapter. This gives agents full tool use for reading files,\n // writing code, running commands, etc. — matching Claude Code agent teams.\n const modelInfo = SUPPORTED_MODELS[spec.model];\n const provider = modelInfo?.provider ?? \"anthropic\";\n const launcherFile = join(tempDir, `${spec.name}-launch.sh`);\n const cmd = writeAgentLauncherScript(\n provider, spec.model, promptFile, launcherFile,\n projectRoot, shellEscape, writeFileSync,\n );\n agentCommands.push({ name: spec.name, command: cmd });\n }\n\n // Build the lead agent's coordination task for auto-submission in the left pane.\n // The leader actively works (not idle) — it coordinates, analyzes, and synthesizes.\n const leadOutputFile = join(boardDir, `${leadSpec.name}.md`);\n const leadCoordinationTask = [\n `I am the team coordinator (${leadSpec.name}, ${leadSpec.model}).`,\n \"\",\n leadSpec.taskPrompt,\n \"\",\n `## My Responsibilities`,\n `1. Break down the user's request into clear subtasks for each team member.`,\n `2. Write my coordination plan and task assignments to: ${join(boardDir, \"coordinator.md\")}`,\n `3. After completing my own analysis, read other agents' output files in ${boardDir}/ to check progress.`,\n `4. Synthesize findings from all agents into a final team summary at: ${join(boardDir, \"SUMMARY.md\")}`,\n `5. Flag any conflicts, gaps, or overlaps between agents' work.`,\n \"\",\n `## Team Members Working in Parallel Panes`,\n ...workerSpecs.map((s) => `- ${s.name} (${s.model}): writing to ${join(boardDir, s.name + \".md\")}`),\n \"\",\n `## My Output File: ${leadOutputFile}`,\n \"\",\n `## User's Original Request`,\n input,\n \"\",\n `Start by reading the codebase and writing my coordination plan to ${join(boardDir, \"coordinator.md\")}.`,\n ].join(\"\\n\");\n\n // 6. iTerm2 native pane support (macOS — preferred when in iTerm2)\n const isITerm2 =\n process.platform === \"darwin\" &&\n process.env[\"TERM_PROGRAM\"] === \"iTerm.app\";\n\n if (isITerm2) {\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content: `Designed ${agentSpecs.length}-agent team. Creating iTerm2 split panes...`,\n createdAt: new Date(),\n },\n ]);\n\n // Build AppleScript: leader stays in current pane (left side),\n // agents are created via vertical then horizontal splits (right side).\n // Layout: leader (left) | agents stacked vertically (right)\n const asEscape = (s: string): string =>\n s.replace(/\\\\/gu, \"\\\\\\\\\").replace(/\"/gu, '\\\\\"');\n\n const scriptLines: string[] = [];\n scriptLines.push('tell application \"iTerm2\"');\n scriptLines.push(\" tell current window\");\n scriptLines.push(\" set leaderSession to current session of current tab\");\n\n for (let i = 0; i < agentCommands.length; i++) {\n const agent = agentCommands[i]!;\n const prevVar = i === 0 ? \"leaderSession\" : `agent${i - 1}`;\n const curVar = `agent${i}`;\n // First agent: split leader vertically (creates right column)\n // Subsequent agents: split previous agent horizontally (stacks on right)\n const splitDir = i === 0 ? \"vertically\" : \"horizontally\";\n const splitTarget = prevVar;\n\n const escapedName = asEscape(agent.name);\n const escapedCmd = asEscape(agent.command);\n\n scriptLines.push(` tell ${splitTarget}`);\n scriptLines.push(` set ${curVar} to (split ${splitDir} with default profile)`);\n scriptLines.push(\" end tell\");\n scriptLines.push(` tell ${curVar}`);\n scriptLines.push(` set name to \"${escapedName}\"`);\n scriptLines.push(` write text \"${escapedCmd}\"`);\n scriptLines.push(\" end tell\");\n }\n\n scriptLines.push(\" select leaderSession\");\n scriptLines.push(\" end tell\");\n scriptLines.push(\"end tell\");\n\n const script = scriptLines.join(\"\\n\");\n const scriptFile = join(tempDir, \"create-panes.applescript\");\n writeFileSync(scriptFile, script, \"utf-8\");\n\n try {\n await execaPane(\"osascript\", [scriptFile]);\n } catch (scriptErr: unknown) {\n const errMsg = scriptErr instanceof Error ? scriptErr.message : String(scriptErr);\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content: `Failed to create iTerm2 panes: ${errMsg.slice(0, 200)}`,\n createdAt: new Date(),\n },\n ]);\n return;\n }\n\n // Store cleanup for /team stop\n activeTeamName = teamName;\n activeTeamManager = undefined;\n activeTmuxCleanup = async () => {\n // Kill agent processes identified by temp dir in their arguments\n try {\n const { execSync } = await import(\"node:child_process\");\n execSync(`pkill -f '${shellEscape(tempDir)}'`, { stdio: \"ignore\" });\n } catch { /* no matching processes */ }\n // Clean up temp files and board directory\n try {\n const { rmSync } = await import(\"node:fs\");\n rmSync(tempDir, { recursive: true, force: true });\n rmSync(boardDir, { recursive: true, force: true });\n } catch { /* non-critical */ }\n };\n\n const agentLines = agentSpecs.map(\n (spec) =>\n spec.name === leadSpec.name\n ? ` ${spec.name} (${spec.model}) — ${spec.role} [LEAD — this pane]`\n : ` ${spec.name} (${spec.model}) — ${spec.role}`,\n );\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content:\n `Team \"${teamName}\" — ${agentSpecs.length} agents active.\\n` +\n `${workerSpecs.length} worker panes in iTerm2 + lead coordinating here.\\n` +\n `${agentLines.join(\"\\n\")}\\n` +\n \"/team stop to shut down all agents.\",\n createdAt: new Date(),\n },\n ]);\n return leadCoordinationTask;\n }\n\n // 7. tmux-based split-panel mode (fallback when not in iTerm2)\n const { TmuxManager } = await import(\"../panes/tmux-manager.js\");\n const tmux = new TmuxManager();\n const tmuxAvailable = await tmux.isAvailable();\n\n if (tmuxAvailable) {\n const insideTmux =\n typeof process.env[\"TMUX\"] === \"string\" &&\n process.env[\"TMUX\"].length > 0;\n\n if (insideTmux) {\n // ── Already inside tmux — split current window directly ──\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content: `Designed ${agentSpecs.length}-agent team. Creating tmux split panes...`,\n createdAt: new Date(),\n },\n ]);\n\n const currentResult = await execaPane(\"tmux\", [\n \"display-message\", \"-p\", \"#{pane_id}\",\n ]);\n const leaderPaneId = currentResult.stdout.trim();\n const agentPaneIds: string[] = [];\n\n for (let i = 0; i < agentCommands.length; i++) {\n const agent = agentCommands[i]!;\n const splitResult = await execaPane(\"tmux\", [\n \"split-window\",\n i % 2 === 0 ? \"-h\" : \"-v\",\n \"-P\", \"-F\", \"#{pane_id}\",\n ]);\n const newPaneId = splitResult.stdout.trim();\n agentPaneIds.push(newPaneId);\n await execaPane(\"tmux\", [\"send-keys\", \"-t\", newPaneId, agent.command, \"Enter\"]);\n }\n\n try {\n await execaPane(\"tmux\", [\"select-layout\", \"tiled\"]);\n } catch { /* non-fatal */ }\n try {\n await execaPane(\"tmux\", [\"select-pane\", \"-t\", leaderPaneId]);\n } catch { /* non-fatal */ }\n\n activeTeamName = teamName;\n activeTeamManager = undefined;\n activeTmuxCleanup = async () => {\n const { execa: ex } = await import(\"execa\");\n for (const pid of agentPaneIds) {\n try { await ex(\"tmux\", [\"kill-pane\", \"-t\", pid]); } catch { /* pane may be gone */ }\n }\n try {\n const { rmSync } = await import(\"node:fs\");\n rmSync(tempDir, { recursive: true, force: true });\n rmSync(boardDir, { recursive: true, force: true });\n } catch { /* non-critical */ }\n };\n\n const agentLines = agentSpecs.map(\n (spec) =>\n spec.name === leadSpec.name\n ? ` ${spec.name} (${spec.model}) — ${spec.role} [LEAD — this pane]`\n : ` ${spec.name} (${spec.model}) — ${spec.role}`,\n );\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content:\n `Team \"${teamName}\" — ${agentSpecs.length} agents active.\\n` +\n `${workerSpecs.length} worker panes in tmux + lead coordinating here.\\n` +\n `${agentLines.join(\"\\n\")}\\n` +\n \"/team stop to shut down all agents.\",\n createdAt: new Date(),\n },\n ]);\n return leadCoordinationTask;\n }\n\n // ── Not inside tmux — create session, populate, and auto-attach ──\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content: `Designed ${agentSpecs.length}-agent team. Opening tmux split-panel view...`,\n createdAt: new Date(),\n },\n ]);\n\n const sessionName = await tmux.createSession(teamName);\n\n const paneConfigs: IPaneConfig[] = agentSpecs.map((spec, i) => ({\n paneId: `pane-${i}`,\n agentName: spec.name,\n model: spec.model,\n role: spec.role as ModelRole,\n title: `${spec.name} (${spec.model})`,\n }));\n\n const layoutConfig: ILayoutConfig = {\n layout: \"auto\" as PaneLayout,\n panes: paneConfigs,\n maxPanes: paneConfigs.length,\n };\n\n await tmux.createPanes(layoutConfig);\n\n for (let i = 0; i < agentCommands.length; i++) {\n const agent = agentCommands[i]!;\n const paneId = `pane-${i}`;\n await tmux.sendCommand(paneId, agent.command);\n }\n\n activeTeamName = teamName;\n activeTeamManager = undefined;\n activeTmuxCleanup = async () => {\n await tmux.destroy();\n try {\n const { rmSync } = await import(\"node:fs\");\n rmSync(tempDir, { recursive: true, force: true });\n rmSync(boardDir, { recursive: true, force: true });\n } catch { /* non-critical */ }\n };\n\n // Auto-attach: temporarily release terminal from Ink, hand it to tmux.\n const { execFileSync } = await import(\"node:child_process\");\n\n if (process.stdin.isTTY && typeof process.stdin.setRawMode === \"function\") {\n process.stdin.setRawMode(false);\n }\n process.stdin.pause();\n\n try {\n execFileSync(\"tmux\", [\"attach-session\", \"-t\", sessionName], {\n stdio: \"inherit\",\n });\n } catch {\n // User detached from tmux or attach failed\n }\n\n if (process.stdin.isTTY && typeof process.stdin.setRawMode === \"function\") {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n\n const agentLines = agentSpecs.map(\n (spec) =>\n spec.name === leadSpec.name\n ? ` ${spec.name} (${spec.model}) — ${spec.role} [LEAD]`\n : ` ${spec.name} (${spec.model}) — ${spec.role}`,\n );\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content:\n `Detached from tmux. Agents may still be running.\\n` +\n `${agentLines.join(\"\\n\")}\\n` +\n `Re-attach: tmux attach -t ${sessionName}\\n` +\n \"/team stop to shut down all agents.\",\n createdAt: new Date(),\n },\n ]);\n return leadCoordinationTask;\n }\n\n // ── Fallback: in-process split-panel mode (when tmux unavailable) ──\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content: `Designed ${agentSpecs.length}-agent team. Starting agents (in-process mode)...`,\n createdAt: new Date(),\n },\n ]);\n\n const { TeamManager: TM } = await import(\"../teams/team-manager.js\");\n const manager = new TM();\n activeTeamManager = manager;\n activeTeamName = teamName;\n activeTmuxCleanup = undefined;\n\n const teamConfig = await manager.createTeam(teamName, {\n description: `Agent team for: ${input.slice(0, 120)}`,\n agents: agentDefinitions,\n });\n\n // Initialize split-panel UI\n const agentStates: IAgentState[] = teamConfig.members.map((member) => ({\n config: member,\n status: \"idle\" as const,\n }));\n\n panel.setAgents(agentStates);\n panel.activate();\n\n for (const member of teamConfig.members) {\n panel.appendOutput(\n member.agentId,\n `[${member.name}] Starting (${member.model})...\\n`,\n );\n }\n\n // Wire agent IPC output to the panel UI BEFORE starting agents\n manager.onAgentMessages(teamName, (_agentName, method, params) => {\n if (method === \"agent.streamChunk\") {\n const agentId =\n typeof params[\"agentId\"] === \"string\" ? params[\"agentId\"] : \"\";\n const content =\n typeof params[\"content\"] === \"string\" ? params[\"content\"] : \"\";\n if (agentId && content) {\n panel.appendOutput(agentId, content);\n }\n }\n if (method === \"agent.taskUpdate\") {\n const agentId =\n typeof params[\"agentId\"] === \"string\" ? params[\"agentId\"] : \"\";\n const rawStatus =\n typeof params[\"status\"] === \"string\" ? params[\"status\"] : \"\";\n if (agentId && rawStatus) {\n const statusMap: Record<string, AgentStatus> = {\n in_progress: \"active\",\n completed: \"idle\",\n };\n const mapped = statusMap[rawStatus];\n if (mapped) {\n panel.updateAgentStatus(agentId, mapped);\n }\n }\n }\n });\n\n await manager.startAgents(teamName);\n\n // Assign tasks — use LLM-generated taskPrompt for each agent\n for (let i = 0; i < teamConfig.members.length; i++) {\n const member = teamConfig.members[i]!;\n const spec = agentSpecs[i];\n const taskId = v4Id();\n const prompt = spec\n ? `You are ${spec.name} (${spec.agentType}).\\n\\n${spec.taskPrompt}\\n\\nUser request:\\n${input}`\n : `Work on the following task:\\n\\n${input}`;\n manager.assignTask(\n teamName,\n member.name,\n taskId,\n `${member.role}: ${input.slice(0, 80)}`,\n prompt,\n );\n }\n\n // Show success message\n const agentLines = agentSpecs.map(\n (spec) => ` ${spec.name} (${spec.model}) — ${spec.role}`,\n );\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content:\n `Team \"${teamName}\" created with ${teamConfig.members.length} agents — split-panel active.\\n` +\n `${agentLines.join(\"\\n\")}\\n` +\n \"Use Tab to switch agents. /team stop to return to single-pane.\",\n createdAt: new Date(),\n },\n ]);\n return undefined;\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n setMessages((prev) => [\n ...prev,\n {\n id: v4Id(),\n role: \"system\" as const,\n content: `Failed to create team: ${msg}`,\n createdAt: new Date(),\n },\n ]);\n return undefined;\n }\n}\n\nasync function handleTeamCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\n const subcommand = args[0];\n\n if (subcommand === \"stop\") {\n // Gracefully shut down tmux session if active\n if (activeTmuxCleanup) {\n try {\n await activeTmuxCleanup();\n } catch {\n // Best-effort cleanup — tmux session may already be gone\n }\n activeTmuxCleanup = undefined;\n }\n\n // Gracefully shut down all in-process agent processes\n if (activeTeamManager && activeTeamName) {\n try {\n await activeTeamManager.deleteTeam(activeTeamName);\n } catch {\n // Best-effort cleanup — processes may already be gone\n }\n activeTeamManager = undefined;\n }\n\n activeTeamName = undefined;\n ctx.panel.deactivate();\n addSystemMessage(ctx, \"Team shut down. All agents stopped. Returned to single-pane mode.\");\n return;\n }\n\n if (subcommand === \"list\") {\n try {\n const { TeamManager } = await import(\"../teams/team-manager.js\");\n const manager = new TeamManager();\n const teams = manager.listTeams();\n if (teams.length === 0) {\n addSystemMessage(ctx, \"No active teams.\");\n } else {\n const lines = teams.map((t) => ` ${t.teamName} — ${t.members.length} agents (${t.status})`);\n addSystemMessage(ctx, lines.join(\"\\n\"));\n }\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n addSystemMessage(ctx, `Failed to list teams: ${msg}`);\n }\n return;\n }\n\n addSystemMessage(\n ctx,\n \"Usage: /team list | /team stop\\n\" +\n \"Teams are created automatically from natural language.\\n\" +\n \"Examples: \\\"Create a team to refactor the auth module\\\"\\n\" +\n \" \\\"I need agents to review this PR from different angles\\\"\",\n );\n}\n\n// ── MCP Command Handler ───────────────────────────────────────────────────\n\nasync function handleMcpCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\n const subcommand = args[0];\n\n if (subcommand === \"list\") {\n try {\n const { MCPServerManager } = await import(\"../mcp/server-manager.js\");\n const manager = new MCPServerManager();\n const connected = manager.getConnectedServers();\n if (connected.length === 0) {\n addSystemMessage(ctx, \"No MCP servers connected.\\nConfigure servers in ~/.aemeathcli/mcp.json\");\n } else {\n const lines = connected.map((name) => {\n const status = manager.getServerStatus(name) ?? \"unknown\";\n return ` ${name} — ${status}`;\n });\n addSystemMessage(ctx, `MCP Servers:\\n${lines.join(\"\\n\")}`);\n }\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n addSystemMessage(ctx, `Failed to list MCP servers: ${msg}`);\n }\n return;\n }\n\n if (subcommand === \"add\") {\n const name = args[1];\n if (!name) {\n addSystemMessage(ctx, \"Usage: /mcp add <server-name>\");\n return;\n }\n addSystemMessage(ctx, `To add MCP server \"${name}\", edit ~/.aemeathcli/mcp.json with the server configuration.`);\n return;\n }\n\n addSystemMessage(ctx, \"Usage: /mcp list | /mcp add <name>\");\n}\n\n// ── Skill Command Handler ────────────────────────────────────────────────\n\nasync function handleSkillCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\n const subcommand = args[0];\n\n if (subcommand === \"list\") {\n try {\n const { SkillRegistry } = await import(\"../skills/registry.js\");\n const registry = new SkillRegistry();\n await registry.initialize();\n const skills = registry.listAll();\n if (skills.length === 0) {\n addSystemMessage(ctx, \"No skills found.\\nAdd skills in ~/.aemeathcli/skills/ or .aemeathcli/skills/\");\n } else {\n const lines = skills.map((s) => ` $${s.name.padEnd(16)} ${s.description}`);\n addSystemMessage(ctx, `Available Skills:\\n${lines.join(\"\\n\")}`);\n }\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n addSystemMessage(ctx, `Failed to list skills: ${msg}`);\n }\n return;\n }\n\n addSystemMessage(ctx, \"Usage: /skill list\\nInvoke a skill with $skill-name (e.g., $review, $commit, $plan)\");\n}\n\n// ── Login Slash Command Handler ──────────────────────────────────────────\n\nasync function handleLoginSlashCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\n const subcommand = args[0];\n\n if (subcommand === \"status\") {\n try {\n const providers = [\"claude\", \"codex\", \"gemini\", \"kimi\"] as const;\n const lines: string[] = [];\n for (const provider of providers) {\n try {\n const loginMod = await loadLoginModuleForSlash(provider);\n const status = await loginMod.getStatus();\n if (status.loggedIn) {\n lines.push(` \\u2713 ${provider} — Logged in as ${status.email ?? \"unknown\"} (${status.plan ?? \"unknown plan\"})`);\n } else {\n lines.push(` \\u2717 ${provider} — Not logged in`);\n }\n } catch {\n lines.push(` \\u2717 ${provider} — Not configured`);\n }\n }\n addSystemMessage(ctx, lines.join(\"\\n\"));\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n addSystemMessage(ctx, `Failed to get auth status: ${msg}`);\n }\n return;\n }\n\n if (subcommand === \"logout\") {\n const provider = args[1];\n if (!provider) {\n addSystemMessage(ctx, \"Usage: /login logout <provider>\\nProviders: claude, codex, gemini, kimi\");\n return;\n }\n try {\n const loginMod = await loadLoginModuleForSlash(provider as \"claude\" | \"codex\" | \"gemini\" | \"kimi\");\n await loginMod.logout();\n addSystemMessage(ctx, `Logged out of ${provider}`);\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n addSystemMessage(ctx, `Logout failed: ${msg}`);\n }\n return;\n }\n\n // No subcommand → open interactive provider selector\n ctx.setSelectionMode({ type: \"login\" });\n}\n\ninterface ISlashLoginModule {\n login(): Promise<unknown>;\n logout(): Promise<void>;\n getStatus(): Promise<{ loggedIn: boolean; email?: string | undefined; plan?: string | undefined }>;\n}\n\nasync function loadLoginModuleForSlash(provider: string): Promise<ISlashLoginModule> {\n switch (provider) {\n case \"claude\": {\n const mod = await import(\"../auth/providers/claude-login.js\");\n return new mod.ClaudeLogin();\n }\n case \"codex\": {\n const mod = await import(\"../auth/providers/codex-login.js\");\n return new mod.CodexLogin();\n }\n case \"gemini\": {\n const mod = await import(\"../auth/providers/gemini-login.js\");\n return new mod.GeminiLogin();\n }\n case \"kimi\": {\n const mod = await import(\"../auth/providers/kimi-login.js\");\n return new mod.KimiLogin();\n }\n default:\n throw new Error(`Unknown provider: ${provider}`);\n }\n}\n\n// ── Config Slash Command Handler ─────────────────────────────────────────\n\nasync function handleConfigSlashCommand(args: readonly string[], ctx: ICommandContext): Promise<void> {\n const subcommand = args[0];\n\n if (subcommand === \"get\") {\n const key = args[1];\n try {\n const { ConfigStore } = await import(\"../storage/config-store.js\");\n const store = new ConfigStore();\n const cfg = store.loadGlobal();\n if (!key) {\n addSystemMessage(ctx, JSON.stringify(cfg, null, 2));\n } else {\n const value = getNestedConfigValue(cfg, key);\n if (value === undefined) {\n addSystemMessage(ctx, `Key not found: ${key}`);\n } else {\n addSystemMessage(ctx, `${key} = ${JSON.stringify(value, null, 2)}`);\n }\n }\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n addSystemMessage(ctx, `Failed to read config: ${msg}`);\n }\n return;\n }\n\n if (subcommand === \"set\") {\n const key = args[1];\n const value = args.slice(2).join(\" \");\n if (!key || !value) {\n addSystemMessage(ctx, \"Usage: /config set <key> <value>\");\n return;\n }\n try {\n const { ConfigStore } = await import(\"../storage/config-store.js\");\n const store = new ConfigStore();\n const cfg = store.loadGlobal();\n let parsedValue: unknown;\n try { parsedValue = JSON.parse(value); } catch { parsedValue = value; }\n setNestedConfigValue(cfg as unknown as Record<string, unknown>, key, parsedValue);\n store.saveGlobal(cfg);\n addSystemMessage(ctx, `Set ${key} = ${JSON.stringify(parsedValue)}`);\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n addSystemMessage(ctx, `Failed to set config: ${msg}`);\n }\n return;\n }\n\n addSystemMessage(ctx, \"Usage: /config get [key] | /config set <key> <value>\");\n}\n\nfunction getNestedConfigValue(obj: unknown, path: string): unknown {\n const keys = path.split(\".\");\n let current: unknown = obj;\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[key];\n }\n return current;\n}\n\nfunction setNestedConfigValue(obj: Record<string, unknown>, path: string, value: unknown): void {\n const keys = path.split(\".\");\n let current: Record<string, unknown> = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!key) continue;\n if (typeof current[key] !== \"object\" || current[key] === null) current[key] = {};\n current = current[key] as Record<string, unknown>;\n }\n const lastKey = keys[keys.length - 1];\n if (lastKey) current[lastKey] = value;\n}\n\n// ── Skill Invocation Handler ($) ─────────────────────────────────────────\n\nasync function handleSkillInvocation(\n input: string,\n setMessages: React.Dispatch<React.SetStateAction<IChatMessage[]>>,\n): Promise<void> {\n const parts = input.trim().split(/\\s+/);\n const trigger = parts[0] ?? \"\";\n const skillName = trigger.replace(/^\\$/, \"\");\n\n if (!skillName) {\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: \"Usage: $skill-name [args]\\nType /skill list to see available skills.\", createdAt: new Date() },\n ]);\n return;\n }\n\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"user\" as const, content: input, createdAt: new Date() },\n ]);\n\n try {\n const { SkillRegistry } = await import(\"../skills/registry.js\");\n const { SkillExecutor } = await import(\"../skills/executor.js\");\n const registry = new SkillRegistry();\n await registry.initialize();\n\n const executor = new SkillExecutor(registry);\n const result = await executor.activateByTrigger(trigger);\n\n if (!result.success) {\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: result.errorMessage ?? `Skill not found: \"${skillName}\"\\nType /skill list to see available skills.`, createdAt: new Date() },\n ]);\n return;\n }\n\n const content = executor.getActiveSkillContent();\n const warningText = result.warnings && result.warnings.length > 0\n ? `\\nWarnings: ${result.warnings.join(\", \")}`\n : \"\";\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: `Skill \"$${skillName}\" activated.${warningText}\\n${content ? content.slice(0, 500) : \"\"}`, createdAt: new Date() },\n ]);\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n setMessages((prev) => [\n ...prev,\n { id: v4Id(), role: \"system\" as const, content: `Skill error: ${msg}`, createdAt: new Date() },\n ]);\n }\n}\n\n// ── Public API ────────────────────────────────────────────────────────────\n\nexport async function startChatSession(options: IChatSessionOptions): Promise<void> {\n let config: IGlobalConfig;\n\n try {\n const { ConfigStore } = await import(\"../storage/config-store.js\");\n const store = new ConfigStore();\n config = store.loadGlobal();\n } catch {\n config = DEFAULT_CONFIG;\n }\n\n const { waitUntilExit } = render(<App config={config} options={options} />);\n await waitUntilExit();\n}\n\ntype FirstRunProvider = \"claude\" | \"codex\" | \"gemini\" | \"kimi\";\n\ninterface IFirstRunLogin {\n login(): Promise<unknown>;\n}\n\nasync function createFirstRunLogin(provider: FirstRunProvider): Promise<IFirstRunLogin> {\n switch (provider) {\n case \"claude\": {\n const { ClaudeLogin } = await import(\"../auth/providers/claude-login.js\");\n return new ClaudeLogin();\n }\n case \"codex\": {\n const { CodexLogin } = await import(\"../auth/providers/codex-login.js\");\n return new CodexLogin();\n }\n case \"gemini\": {\n const { GeminiLogin } = await import(\"../auth/providers/gemini-login.js\");\n return new GeminiLogin();\n }\n case \"kimi\": {\n const { KimiLogin } = await import(\"../auth/providers/kimi-login.js\");\n return new KimiLogin();\n }\n }\n}\n\nexport async function runFirstRunSetup(): Promise<void> {\n const { confirm } = await import(\"@inquirer/prompts\");\n const pc = await import(\"picocolors\");\n\n process.stdout.write(\n [\n \"\",\n pc.default.cyan(\" ╔══════════════════════════════════════════════╗\"),\n pc.default.cyan(\" ║ Welcome to AemeathCLI ║\"),\n pc.default.cyan(\" ║ Multi-Model CLI Coding Tool v1.0.0 ║\"),\n pc.default.cyan(\" ╚══════════════════════════════════════════════╝\"),\n \"\",\n \" Let's get you set up:\",\n \"\",\n ].join(\"\\n\"),\n );\n\n const providers: readonly FirstRunProvider[] = [\"claude\", \"codex\", \"gemini\", \"kimi\"];\n\n for (const provider of providers) {\n const shouldLogin = await confirm({\n message: `Log in to ${provider}?`,\n default: provider !== \"kimi\",\n });\n\n if (shouldLogin) {\n process.stdout.write(pc.default.cyan(` Logging in to ${provider}...\\n`));\n try {\n const login = await createFirstRunLogin(provider);\n await login.login();\n process.stdout.write(pc.default.green(` ✓ ${provider} - Logged in successfully\\n`));\n } catch {\n process.stdout.write(pc.default.red(` ✗ ${provider} - Login failed (you can retry later)\\n`));\n }\n }\n }\n\n process.stdout.write(pc.default.green(\"\\n ✓ Configuration saved. Ready!\\n\\n\"));\n}\n"]}
|