@wrongstack/tui 0.9.19 → 0.9.20
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/index.js +336 -58
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/confirm-prompt.tsx","../src/components/checkpoint-timeline.tsx","../src/components/file-picker.tsx","../src/components/fleet-panel.tsx","../src/components/status-bar.tsx","../src/components/fleet-monitor.tsx","../src/components/agents-monitor.tsx","../src/components/phase-monitor.tsx","../src/components/phase-panel.tsx","../src/components/worktree-panel.tsx","../src/components/worktree-monitor.tsx","../src/markdown-table.ts","../src/components/history.tsx","../src/components/input.tsx","../src/components/live-activity-strip.tsx","../src/components/autonomy-picker.tsx","../src/components/model-picker.tsx","../src/components/slash-menu.tsx","../src/file-search.ts","../src/paste-accumulator.ts","../src/git-info.ts","../src/queue-slash.ts","../src/kill-slash.ts","../src/ps-slash.ts","../src/app.tsx","../src/terminal-title.ts","../src/run-tui.ts"],"names":["s","React","input","useInput","jsxs","Box","jsx","Text","path","cache","STATUS","fmtTokens","oneLine","fmtElapsed","Fragment","st","sep","fmtTok","snippet","useEffect","fmtBytes","fs","parts","USAGE","renderList","getProcessRegistry","useState","maxContext","killed","next","blocks"],"mappings":"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","file":"index.js","sourcesContent":["import { Box, Text, useInput } from 'ink';\nimport React from 'react';\n\nexport interface ConfirmPromptProps {\n toolName: string;\n input: unknown;\n suggestedPattern: string;\n onDecision: (decision: 'yes' | 'no' | 'always' | 'deny') => void;\n}\n\nfunction stringifyInput(input: unknown): string {\n if (!input || typeof input !== 'object') return '';\n const obj = input as Record<string, unknown>;\n return Object.entries(obj)\n .filter(([k]) => k !== 'content' && k !== 'new_string')\n .map(([k, v]) => `${k}: ${truncate(JSON.stringify(v), 80)}`)\n .join(' ');\n}\n\nfunction truncate(s: string, max: number): string {\n return s.length <= max ? s : `${s.slice(0, max - 1)}…`;\n}\n\nfunction hasDiff(input: unknown): boolean {\n return Boolean(\n input && typeof input === 'object' && 'diff' in (input as Record<string, unknown>),\n );\n}\n\nfunction renderDiffLine(line: string): React.ReactElement {\n const prefix = line.startsWith('+')\n ? 'green'\n : line.startsWith('-')\n ? 'red'\n : line.startsWith('@@')\n ? 'cyan'\n : undefined;\n return (\n <Text key={line} color={prefix}>\n {line}\n {'\\n'}\n </Text>\n );\n}\n\nfunction renderDiff(diff: string): React.ReactElement {\n const lines = diff\n .split('\\n')\n .filter((l) => l.length > 0)\n .slice(0, 20);\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n {lines.map((l) => renderDiffLine(l))}\n </Box>\n );\n}\n\nexport function ConfirmPrompt({\n toolName,\n input,\n suggestedPattern,\n onDecision,\n}: ConfirmPromptProps): React.ReactElement {\n // Terminal bell on mount — alerts the user that action is required,\n // especially important when the agent has been running autonomously\n // and the user may not be staring at the terminal.\n React.useEffect(() => {\n process.stdout.write('\\x07');\n }, []);\n\n useInput((input, key) => {\n // Ignore empty input and CRLF/LF artifacts (Enter produces \\r on Windows, \\n on Unix)\n if (!input || input === '\\r' || input === '\\n') return;\n const ch = input.toLowerCase();\n if (ch === 'y') {\n onDecision('yes');\n } else if (ch === 'n') {\n onDecision('no');\n } else if (ch === 'a') {\n onDecision('always');\n } else if (ch === 'd') {\n onDecision('deny');\n }\n });\n\n const inputSummary = stringifyInput(input);\n const showDiff = hasDiff(input);\n const inp = input as { diff?: unknown };\n const diff = typeof inp?.diff === 'string' ? inp.diff : '';\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor=\"yellow\"\n paddingX={1}\n marginY={1}\n >\n <Box flexDirection=\"row\">\n <Text bold color=\"yellow\">\n ⚠ APPROVAL REQUIRED\n </Text>\n <Text> </Text>\n <Text bold color=\"white\">\n {toolName}\n </Text>\n </Box>\n {inputSummary ? <Text dimColor>{inputSummary}</Text> : null}\n {showDiff && diff ? (\n <Box flexDirection=\"column\" marginY={1}>\n {renderDiff(diff)}\n </Box>\n ) : null}\n <Text dimColor>─────────────────</Text>\n <Box flexDirection=\"row\">\n <Text>\n <Text bold color=\"green\">\n [y]\n </Text>\n <Text dimColor>es </Text>\n <Text bold color=\"red\">\n [n]\n </Text>\n <Text dimColor>o </Text>\n <Text bold color=\"cyan\">\n [a]\n </Text>\n <Text dimColor>lways ({suggestedPattern}) </Text>\n <Text bold color=\"red\">\n [d]\n </Text>\n <Text dimColor>eny</Text>\n </Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text, useInput } from 'ink';\nimport type React from 'react';\n\nexport interface CheckpointTimelineProps {\n checkpoints: Array<{\n promptIndex: number;\n promptPreview: string;\n ts: string;\n fileCount: number;\n }>;\n selected: number;\n onSelect: (index: number) => void;\n onConfirm: (index: number) => void;\n onClose: () => void;\n}\n\n/**\n * Full-screen checkpoint timeline overlay for the /rewind command.\n * Arrow keys to navigate, Enter to rewind to selected, Esc to close.\n */\nexport function CheckpointTimeline({\n checkpoints,\n selected,\n onSelect,\n onConfirm,\n onClose,\n}: CheckpointTimelineProps): React.ReactElement {\n useInput((_, key) => {\n if (key.escape) {\n onClose();\n } else if (key.upArrow) {\n onSelect(Math.max(0, selected - 1));\n } else if (key.downArrow) {\n onSelect(Math.min(checkpoints.length - 1, selected + 1));\n } else if (key.return) {\n onConfirm(selected);\n }\n });\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n ⟲ Session Rewind\n </Text>\n <Text dimColor> — ↑/↓ navigate · Enter rewind · Esc cancel</Text>\n </Box>\n {checkpoints.length === 0 ? (\n <Text dimColor>No checkpoints in this session.</Text>\n ) : (\n checkpoints.map((cp, i) => {\n const isSelected = i === selected;\n const label = `[${cp.promptIndex}] ${cp.promptPreview}`;\n return (\n <Box key={cp.promptIndex}>\n <Text color={isSelected ? 'cyan' : undefined} bold={isSelected}>\n {isSelected ? '▸ ' : ' '}\n </Text>\n <Text color={isSelected ? 'cyan' : undefined} bold={isSelected}>\n {label}\n </Text>\n <Text dimColor> {new Date(cp.ts).toLocaleTimeString()}</Text>\n {cp.fileCount > 0 && (\n <Text dimColor> · {cp.fileCount} file{cp.fileCount !== 1 ? 's' : ''}</Text>\n )}\n </Box>\n );\n })\n )}\n </Box>\n );\n}","import { Box, Text } from 'ink';\nimport type React from 'react';\n\nexport interface FilePickerProps {\n query: string;\n matches: string[];\n selected: number;\n}\n\nexport function FilePicker({ query, matches, selected }: FilePickerProps): React.ReactElement {\n if (matches.length === 0) {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text dimColor>@{query} — no matches</Text>\n </Box>\n );\n }\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text dimColor>@{query || '…'} — ↑/↓ select, Enter attach, Esc cancel</Text>\n {matches.map((m, i) => (\n <Text key={m} color={i === selected ? 'cyan' : undefined} inverse={i === selected}>\n {i === selected ? '› ' : ' '}\n {highlight(m, query)}\n </Text>\n ))}\n </Box>\n );\n}\n\nfunction highlight(path: string, query: string): string {\n // Visual highlight is omitted for terseness; ink Text styling at char level\n // requires splitting into segments. Keep the path verbatim for now.\n return path;\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { FleetEntry } from '../app.js';\n\nexport interface FleetPanelProps {\n /** Per-subagent state, keyed by subagentId. */\n entries: Record<string, FleetEntry>;\n /** Fleet-wide accumulated cost (from FleetUsageAggregator). */\n totalCost: number;\n /** Optional roster for resolving role ids to display names. */\n roster?: Record<string, { name: string }>;\n}\n\n/**\n * Compact fleet summary rendered below the status bar when director mode is\n * active. Max 4 lines: fleet summary + up to 3 running agents with only\n * name and current tool. Idle/finished agents are excluded.\n */\nexport function FleetPanel({ entries, totalCost, roster }: FleetPanelProps): React.ReactElement | null {\n const list = Object.values(entries);\n if (list.length === 0) return null;\n\n // Only running agents - idle and finished agents are not shown\n const running = list.filter((e) => e.status === 'running');\n const runningCount = running.length;\n\n // Fleet summary line\n const costLabel = totalCost > 0 ? ` · $${totalCost.toFixed(3)}` : '';\n const summaryLine =\n runningCount > 0\n ? `${runningCount} running${costLabel}`\n : `idle${costLabel}`;\n\n // Show up to 3 running agents\n const shown = running.slice(0, 3);\n const overflow = running.length > 3 ? running.length - 3 : 0;\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n {/* Fleet summary */}\n <Box flexDirection=\"row\" gap={1}>\n <Text dimColor>⚡ Fleet</Text>\n <Text dimColor>│</Text>\n <Text>{summaryLine}</Text>\n </Box>\n\n {/* Running agents: name + current tool only */}\n {shown.map((entry) => {\n const name = roster?.[entry.id]?.name ?? entry.name;\n const tool = entry.currentTool?.name ?? '—';\n return (\n <Box key={entry.id} flexDirection=\"row\" gap={1}>\n <Text color=\"green\">●</Text>\n <Text>{name.slice(0, 12).padEnd(12)}</Text>\n <Text dimColor>→</Text>\n <Text color=\"cyan\">{tool}</Text>\n </Box>\n );\n })}\n\n {/* Overflow indicator */}\n {overflow > 0 ? (\n <Text dimColor> +{overflow} more running</Text>\n ) : null}\n </Box>\n );\n}\n","import type { TokenCounter } from '@wrongstack/core';\nimport { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { GitInfo } from '../git-info.js';\n\nexport interface TodoCounts {\n pending: number;\n inProgress: number;\n completed: number;\n}\n\nexport interface PlanCounts {\n open: number;\n inProgress: number;\n done: number;\n}\n\n/**\n * Fleet activity breakdown surfaced on the work-in-flight line. Derived\n * from `director.status()` in the host app and refreshed alongside the\n * other dynamic chips. Kept optional (and the chip is only rendered\n * when any field is non-zero) so single-agent sessions stay quiet.\n */\nexport interface FleetCounts {\n /** Subagents currently mid-task. */\n running: number;\n /** Subagents spawned but idle (no current task). */\n idle: number;\n /** Tasks queued but not yet picked up by a worker. */\n pending: number;\n /** Tasks resolved (success/failure/timeout/stopped). */\n completed: number;\n}\n\n/**\n * Per-agent detail surfaced on the optional 4th line — one chip per\n * currently-running subagent so the user can see at a glance which\n * agent is doing what, for how long, and how many tools it has called.\n * Truncated to the top N by the host (typically 3-4) to keep the bar\n * from wrapping.\n */\nexport interface FleetAgentDetail {\n /** Stable label used by the streaming history (e.g. \"AGENT#1 bug-hunter\"). */\n label: string;\n /** Ink color name — same palette as the per-agent history prefix. */\n color: string;\n /** Ms since the subagent's first iteration. */\n elapsedMs: number;\n /** Tool calls observed via tool.executed. */\n toolCalls: number;\n /** True when the subagent is actively iterating. */\n running: boolean;\n /** Current/last tool the subagent invoked, shown as its live action. */\n tool?: string;\n /** Cumulative budget auto-extensions granted — rendered as \"⚡×N\". */\n extensions?: number;\n}\n\nexport interface ContextWindow {\n /** Input tokens of the most recent provider request — the de-facto live context size. */\n used: number;\n /** Provider's declared maxContext capability. */\n max: number;\n}\n\nexport interface StatusBarProps {\n model: string;\n /**\n * App version string (e.g. \"0.7.0\"). When set, renders a compact\n * `WS v0.7.0` chip at the head of line 1 so the running build is always\n * visible, not just in the startup banner.\n */\n version?: string;\n state: 'idle' | 'running' | 'streaming' | 'aborting';\n tokenCounter?: TokenCounter;\n hint?: string;\n queueCount?: number;\n yolo?: boolean;\n /** Session elapsed in milliseconds. Renders as `mm:ss` (< 1h) or `h:mm:ss`. */\n elapsedMs?: number;\n todos?: TodoCounts;\n /**\n * Plan board counts surfaced as a chip on line 2. Distinct from\n * `todos` — plans are higher-level and persist across resume; the\n * chip uses a different glyph (📋) so the user can tell them apart\n * at a glance.\n */\n plan?: PlanCounts;\n /**\n * Per-status fleet breakdown. When provided, takes precedence over\n * `subagentCount` for chip rendering. `subagentCount` is kept for\n * backwards compatibility when callers haven't wired the richer\n * breakdown yet.\n */\n fleet?: FleetCounts;\n /**\n * Optional per-agent detail row (up to ~4 agents). Renders below the\n * aggregate fleet chip on a dedicated 4th line so the user can see\n * which specific agent is burning time/tools right now without\n * scrolling history.\n */\n fleetAgents?: FleetAgentDetail[];\n git?: GitInfo | null;\n subagentCount?: number;\n /** Renders the \"ctx ████░░ 42%\" chip on line 1 when present. */\n context?: ContextWindow;\n /**\n * Project / working-folder name. Rendered on line 2 just before the git\n * branch so users running multiple WrongStack windows can tell at a\n * glance which repo each one is pinned to. Usually the basename of\n * `agent.ctx.projectRoot`.\n */\n projectName?: string;\n /** Autonomy mode chip: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel'. */\n autonomy?: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';\n /** Number of tracked bash/exec processes from the process registry. */\n processCount?: number;\n /** Items to hide from the status bar. */\n hiddenItems?: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\n /**\n * Live iteration stage from the eternal engine. When set, renders a\n * chip like `⏸ decide` or `▶ execute(todo:fix-auth)` next to the\n * autonomy chip on line 2.\n */\n eternalStage?: {\n phase: 'idle';\n } | {\n phase: 'decide';\n reason: string;\n } | {\n phase: 'execute';\n task: string;\n } | {\n phase: 'reflect';\n status: 'success' | 'failure' | 'aborted' | 'skipped';\n note?: string;\n } | {\n phase: 'sleep';\n ms: number;\n } | {\n phase: 'paused';\n } | {\n phase: 'stopped';\n } | {\n phase: 'error';\n message: string;\n } | null;\n /** Active goal summary for startup banner display. */\n goalSummary?: {\n goal: string;\n goalState: 'active' | 'paused' | 'completed' | 'abandoned';\n iterations: number;\n lastTask?: string;\n lastStatus?: string;\n } | null;\n /**\n * Seconds remaining in the auto-proceed countdown. null = not counting.\n * Rendered as a chip on line 2 when non-null.\n */\n autoProceedCountdown?: number | null;\n}\n\n/**\n * Two-line status bar. The first line stays compact and shows the\n * runtime essentials (state · model · tokens · cost · queue · running\n * tool). The second line opts in only when there's actually something\n * to show — git branch, elapsed time, todo counts, YOLO marker — so a\n * vanilla session keeps the original single-line footprint.\n */\nexport function StatusBar({\n model,\n version,\n state,\n tokenCounter,\n hint,\n queueCount = 0,\n yolo = false,\n autonomy,\n elapsedMs,\n todos,\n plan,\n fleet,\n fleetAgents,\n git,\n subagentCount = 0,\n context,\n projectName,\n processCount,\n hiddenItems,\n eternalStage,\n goalSummary,\n autoProceedCountdown,\n}: StatusBarProps): React.ReactElement {\n const hiddenSet = new Set(hiddenItems);\n const usage = tokenCounter?.total();\n const cost = tokenCounter?.estimateCost();\n const cache = tokenCounter?.cacheStats();\n const { label: stateLabel, color: stateColor } = stateChip(state, fleet?.running ?? 0);\n\n // Line 2 is *session context* — slow-moving facts about where you\n // are: the project, the branch, the elapsed clock, YOLO chip. These\n // change at most once per session.\n const hasSecondLine =\n yolo ||\n (autonomy && autonomy !== 'off') ||\n elapsedMs !== undefined ||\n (git !== null && git !== undefined) ||\n (projectName !== undefined && projectName.length > 0) ||\n (goalSummary !== null && goalSummary !== undefined);\n\n // Line 3 is *active work* — the dynamic chips that mutate as the\n // agent / subagents make progress. Hidden when nothing is in flight\n // so a fresh session keeps the two-line baseline.\n const fleetHasActivity =\n (fleet &&\n (fleet.running > 0 || fleet.idle > 0 || fleet.pending > 0 || fleet.completed > 0)) ||\n subagentCount > 0;\n const hasThirdLine =\n (todos && (todos.pending > 0 || todos.inProgress > 0 || todos.completed > 0)) ||\n (plan && (plan.open > 0 || plan.inProgress > 0 || plan.done > 0)) ||\n fleetHasActivity;\n\n return (\n <Box\n flexDirection=\"column\"\n paddingX={1}\n borderStyle=\"single\"\n borderTop={true}\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n >\n <Box flexDirection=\"row\" gap={2}>\n {version ? (\n <>\n <Text>\n <Text color=\"blue\" bold>WS</Text>\n <Text dimColor> v{version}</Text>\n </Text>\n <Text dimColor>│</Text>\n </>\n ) : null}\n <Text color={stateColor}>● {stateLabel}</Text>\n <Text dimColor>│</Text>\n <Text color=\"magenta\">{model}</Text>\n {context && context.max > 0 ? (\n <>\n <Text dimColor>│</Text>\n <ContextChip ctx={context} />\n </>\n ) : null}\n {usage ? (\n <>\n <Text dimColor>│</Text>\n <Text>\n ↑{' '}\n <Text color=\"cyan\">\n {fmtTok(usage.input + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0))}\n </Text>{' '}\n ↓ <Text color=\"cyan\">{fmtTok(usage.output)}</Text>\n </Text>\n </>\n ) : null}\n {cache && cache.hitRatio > 0 ? (\n <>\n <Text dimColor>│</Text>\n <Text dimColor>cache {(cache.hitRatio * 100).toFixed(0)}%</Text>\n </>\n ) : null}\n {cost && cost.total > 0 ? (\n <>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">${cost.total.toFixed(4)}</Text>\n </>\n ) : null}\n {queueCount > 0 ? (\n <>\n <Text dimColor>│</Text>\n <Text color=\"cyan\">⌛ queued: {queueCount}</Text>\n </>\n ) : null}\n {typeof processCount === 'number' && processCount > 0 ? (\n <>\n <Text dimColor>│</Text>\n <Text color=\"red\">⚡ {processCount} process{processCount === 1 ? '' : 'es'}</Text>\n </>\n ) : null}\n {hint ? (\n <>\n <Text dimColor>│</Text>\n <Text dimColor>{hint}</Text>\n </>\n ) : null}\n </Box>\n\n {hasSecondLine ? (\n <Box flexDirection=\"row\" gap={2}>\n {yolo ? (\n <Text color=\"red\" bold>\n ⚠ YOLO\n </Text>\n ) : null}\n {autonomy && autonomy !== 'off' ? (\n <>\n {yolo ? <Text dimColor>│</Text> : null}\n <Text\n color={\n autonomy === 'eternal' ? 'red' : autonomy === 'auto' ? 'yellow' : 'cyan'\n }\n bold\n >\n ∞ {autonomy.toUpperCase()}\n </Text>\n </>\n ) : null}\n {eternalStage ? (\n <>\n {yolo || (autonomy && autonomy !== 'off') ? <Text dimColor>│</Text> : null}\n <EternalStageChip stage={eternalStage} />\n </>\n ) : null}\n {elapsedMs !== undefined && !hiddenSet.has('elapsed') ? (\n <>\n {yolo || (autonomy && autonomy !== 'off') || eternalStage ? <Text dimColor>│</Text> : null}\n <Text dimColor>⏱ {fmtElapsed(elapsedMs)}</Text>\n </>\n ) : null}\n {projectName ? (\n <>\n {yolo || elapsedMs !== undefined ? <Text dimColor>│</Text> : null}\n <Text color=\"blue\">📁 {projectName}</Text>\n </>\n ) : null}\n {goalSummary ? (\n <>\n {yolo || elapsedMs !== undefined || projectName ? <Text dimColor>│</Text> : null}\n <Text color={goalSummary.goalState === 'active' ? 'green' : goalSummary.goalState === 'paused' ? 'yellow' : goalSummary.goalState === 'completed' ? 'green' : 'dim'}>\n 🎯 {goalSummary.goal.length > 40 ? `${goalSummary.goal.slice(0, 37)}…` : goalSummary.goal} [{goalSummary.goalState}] (iter {goalSummary.iterations})\n </Text>\n </>\n ) : null}\n {git ? (\n <>\n {yolo || elapsedMs !== undefined || projectName ? <Text dimColor>│</Text> : null}\n <Text>\n <Text color=\"magenta\">⎇ {git.branch}</Text>\n {git.added > 0 ? <Text color=\"green\"> +{git.added}</Text> : null}\n {git.deleted > 0 ? <Text color=\"red\"> -{git.deleted}</Text> : null}\n {git.untracked > 0 ? <Text dimColor> ?{git.untracked}</Text> : null}\n </Text>\n </>\n ) : null}\n </Box>\n ) : null}\n\n {hasThirdLine ? (\n <Box flexDirection=\"row\" gap={2}>\n {todos && (todos.pending > 0 || todos.inProgress > 0 || todos.completed > 0) ? (\n <Text>\n <Text dimColor>todos </Text>\n {todos.inProgress > 0 ? <Text color=\"yellow\">⌛{todos.inProgress}</Text> : null}\n {todos.inProgress > 0 && (todos.pending > 0 || todos.completed > 0) ? ' ' : ''}\n {todos.pending > 0 ? <Text dimColor>☐{todos.pending}</Text> : null}\n {todos.pending > 0 && todos.completed > 0 ? ' ' : ''}\n {todos.completed > 0 ? <Text color=\"green\">✓{todos.completed}</Text> : null}\n </Text>\n ) : null}\n {plan && (plan.open > 0 || plan.inProgress > 0 || plan.done > 0) ? (\n <>\n {todos && (todos.pending > 0 || todos.inProgress > 0 || todos.completed > 0) ? (\n <Text dimColor>│</Text>\n ) : null}\n <Text>\n <Text color=\"cyan\">📋 </Text>\n {plan.inProgress > 0 ? <Text color=\"yellow\">⌛{plan.inProgress}</Text> : null}\n {plan.inProgress > 0 && (plan.open > 0 || plan.done > 0) ? ' ' : ''}\n {plan.open > 0 ? <Text dimColor>☐{plan.open}</Text> : null}\n {plan.open > 0 && plan.done > 0 ? ' ' : ''}\n {plan.done > 0 ? <Text color=\"green\">✓{plan.done}</Text> : null}\n </Text>\n </>\n ) : null}\n {fleetHasActivity ? (\n <>\n {((todos && (todos.pending > 0 || todos.inProgress > 0 || todos.completed > 0)) ||\n (plan && (plan.open > 0 || plan.inProgress > 0 || plan.done > 0))) ? (\n <Text dimColor>│</Text>\n ) : null}\n {fleet ? (\n <Text>\n <Text color=\"blue\">🌐 </Text>\n {fleet.running > 0 ? <Text color=\"yellow\">▶{fleet.running}</Text> : null}\n {fleet.running > 0 && (fleet.pending > 0 || fleet.idle > 0 || fleet.completed > 0)\n ? ' '\n : ''}\n {fleet.pending > 0 ? <Text dimColor>☐{fleet.pending}</Text> : null}\n {fleet.pending > 0 && (fleet.idle > 0 || fleet.completed > 0) ? ' ' : ''}\n {fleet.idle > 0 ? <Text dimColor>·{fleet.idle}idle</Text> : null}\n {fleet.idle > 0 && fleet.completed > 0 ? ' ' : ''}\n {fleet.completed > 0 ? <Text color=\"green\">✓{fleet.completed}</Text> : null}\n </Text>\n ) : (\n <Text color=\"blue\">\n 🌐 {subagentCount} agent{subagentCount === 1 ? '' : 's'}\n </Text>\n )}\n </>\n ) : null}\n </Box>\n ) : null}\n\n {fleetAgents && fleetAgents.length > 0 ? (\n <Box flexDirection=\"row\" gap={2}>\n {fleetAgents.map((a, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: agent list is stable per render\n <Text key={i}>\n <Text color={a.color} bold>\n {a.label}\n </Text>\n <Text dimColor>{' '}</Text>\n <Text color={a.running ? 'yellow' : undefined} dimColor={!a.running}>\n {a.running ? '▶' : '·'}\n </Text>\n <Text dimColor>{' '}</Text>\n <Text dimColor>{fmtElapsed(a.elapsedMs)}</Text>\n <Text dimColor>{' · '}</Text>\n <Text dimColor>{a.toolCalls}t</Text>\n {a.tool ? (\n <>\n <Text dimColor>{' · '}</Text>\n <Text color=\"cyan\">{a.tool}</Text>\n </>\n ) : null}\n {a.extensions && a.extensions > 0 ? (\n <>\n <Text dimColor>{' · '}</Text>\n <Text color=\"yellow\">⚡×{a.extensions}</Text>\n </>\n ) : null}\n </Text>\n ))}\n </Box>\n ) : null}\n </Box>\n );\n}\n\nfunction EternalStageChip({\n stage,\n}: {\n stage: NonNullable<StatusBarProps['eternalStage']>;\n}): React.ReactElement {\n switch (stage.phase) {\n case 'idle':\n return <Text dimColor>⬜ idle</Text>;\n case 'decide':\n return <Text color=\"cyan\">⬇ decide: {stage.reason}</Text>;\n case 'execute':\n return (\n <Text color=\"green\">\n ▶ <Text bold>execute</Text>\n {stage.task ? `(${stage.task})` : ''}\n </Text>\n );\n case 'reflect':\n return (\n <Text color={stage.status === 'success' ? 'green' : stage.status === 'failure' ? 'red' : 'yellow'}>\n ↩ reflect: {stage.status}\n </Text>\n );\n case 'sleep':\n return <Text dimColor>💤 sleep {Math.round(stage.ms / 1000)}s</Text>;\n case 'paused':\n return <Text color=\"yellow\">⏸ paused</Text>;\n case 'stopped':\n return <Text dimColor>■ stopped</Text>;\n case 'error':\n return <Text color=\"red\">⚠ error: {stage.message}</Text>;\n }\n}\n\nfunction ContextChip({ ctx }: { ctx: ContextWindow }): React.ReactElement {\n const ratio = Math.max(0, Math.min(1, ctx.used / ctx.max));\n const pct = Math.round(ratio * 100);\n const color = ratio >= 0.85 ? 'red' : ratio >= 0.65 ? 'yellow' : 'cyan';\n return (\n <Text>\n <Text dimColor>ctx </Text>\n <Text color={color}>{renderProgress(ratio, 10)}</Text>\n <Text color={color}> {pct}%</Text>\n <Text dimColor>\n {' '}\n ({fmtTok(ctx.used)}/{fmtTok(ctx.max)})\n </Text>\n </Text>\n );\n}\n\n/**\n * Compute the leading state chip (label + Ink color) for the status bar.\n *\n * The foreground loop reports 'idle' between turns, but background subagents\n * can still be running — e.g. between eternal/parallel autonomy iterations,\n * or a fleet spawned outside a foreground run. Showing plain \"idle\" then is\n * misleading, so when `fleetRunning > 0` and the foreground is idle we surface\n * the live agent count (`agents ▶N`) in a distinct color instead.\n */\nexport function stateChip(\n state: 'idle' | 'running' | 'streaming' | 'aborting',\n fleetRunning: number,\n): { label: string; color: string } {\n if (state === 'idle' && fleetRunning > 0) {\n return { label: `agents ▶${fleetRunning}`, color: 'magenta' };\n }\n if (state === 'idle') return { label: 'idle', color: 'cyan' };\n if (state === 'aborting') return { label: 'aborting…', color: 'yellow' };\n return { label: 'thinking…', color: 'green' };\n}\n\nconst FILLED = '█';\nconst EMPTY = '░';\n\nexport function renderProgress(ratio: number, width: number): string {\n const clamped = Math.max(0, Math.min(1, ratio));\n const filled = clamped === 0 ? 0 : Math.max(1, Math.round(clamped * width));\n const capped = Math.min(width, filled);\n return FILLED.repeat(capped) + EMPTY.repeat(width - capped);\n}\n\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\nexport function fmtElapsed(ms: number): string {\n const totalSec = Math.floor(ms / 1000);\n const h = Math.floor(totalSec / 3600);\n const m = Math.floor((totalSec % 3600) / 60);\n const s = totalSec % 60;\n if (h > 0) {\n return `${h}:${pad2(m)}:${pad2(s)}`;\n }\n return `${pad2(m)}:${pad2(s)}`;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { FleetEntry } from '../app.js';\nimport { fmtElapsed, renderProgress } from './status-bar.js';\n\nexport interface FleetMonitorProps {\n entries: Record<string, FleetEntry>;\n /** Fleet-wide accumulated cost. */\n totalCost: number;\n /** Fleet-wide token totals, when available. */\n totalTokens?: { input: number; output: number };\n /** Concurrency ceiling for the gauge. */\n maxConcurrent?: number;\n /** 1s clock tick so elapsed times + sparklines stay live. */\n nowTick: number;\n}\n\nconst STATUS: Record<FleetEntry['status'], { icon: string; color: string }> = {\n idle: { icon: '○', color: 'gray' },\n running: { icon: '▶', color: 'yellow' },\n success: { icon: '✓', color: 'green' },\n failed: { icon: '✗', color: 'red' },\n timeout: { icon: '⏱', color: 'yellow' },\n stopped: { icon: '⊘', color: 'gray' },\n};\n\nconst SPARK = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'];\n\n/**\n * Bucket recent tool executions into a fixed number of time bins ending at\n * `now`, returning a per-bin count. Drives the per-agent activity sparkline\n * in the Agents (live) monitor; exported here because it was historically\n * defined alongside the fleet monitor.\n */\nexport function bucketActivity(\n recentTools: ReadonlyArray<{ at: number }>,\n now: number,\n bins = 12,\n binMs = 2000,\n): number[] {\n const out = new Array<number>(bins).fill(0);\n const windowStart = now - bins * binMs;\n for (const t of recentTools) {\n if (t.at < windowStart || t.at > now) continue;\n let idx = Math.floor((t.at - windowStart) / binMs);\n if (idx < 0) idx = 0;\n if (idx >= bins) idx = bins - 1;\n out[idx]!++;\n }\n return out;\n}\n\n/** Render a numeric series as a unicode sparkline. */\nexport function sparkline(values: number[]): string {\n if (values.length === 0) return '';\n const max = Math.max(1, ...values);\n return values\n .map((v) => {\n if (v <= 0) return SPARK[0];\n const idx = Math.min(SPARK.length - 1, Math.ceil((v / max) * (SPARK.length - 1)));\n return SPARK[idx];\n })\n .join('');\n}\n\nfunction fmtTokens(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(1)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\nfunction fmtCost(n: number): string {\n if (n === 0) return '—';\n return `$${n.toFixed(3)}`;\n}\n\n/**\n * Fleet orchestration dashboard (Ctrl+F). Concurrency gauge, fleet totals,\n * a compact one-line-per-agent table, and a recent-events timeline. Live\n * per-agent context (current tool / streaming tail) lives in the Agents\n * monitor (Ctrl+G) — this view is for \"how the fleet is doing overall\".\n */\nexport function FleetMonitor({\n entries,\n totalCost,\n totalTokens,\n maxConcurrent = 4,\n nowTick,\n}: FleetMonitorProps): React.ReactElement {\n const all = Object.values(entries);\n const running = all.filter((e) => e.status === 'running');\n const idle = all.filter((e) => e.status === 'idle').length;\n const done = all.filter((e) => e.status === 'success').length;\n const failed = all.filter((e) => e.status === 'failed' || e.status === 'timeout').length;\n\n const concurrencyRatio = maxConcurrent > 0 ? running.length / maxConcurrent : 0;\n\n // Sort: running → idle → recently-finished (newest first).\n const ordered = [...all].sort((a, b) => {\n const ra = a.status === 'running' ? 0 : a.status === 'idle' ? 1 : 2;\n const rb = b.status === 'running' ? 0 : b.status === 'idle' ? 1 : 2;\n if (ra !== rb) return ra - rb;\n if (ra === 2) return b.lastEventAt - a.lastEventAt;\n return a.startedAt - b.startedAt;\n });\n const shown = ordered.slice(0, 12);\n const overflow = all.length - shown.length;\n\n // Timeline: spawn + terminal-status events across all agents, newest first.\n const events: Array<{ at: number; icon: string; color: string; text: string }> = [];\n for (const e of all) {\n events.push({ at: e.startedAt, icon: '●', color: 'cyan', text: `${e.name} spawned` });\n if (e.status !== 'running' && e.status !== 'idle') {\n const s = STATUS[e.status];\n events.push({\n at: e.lastEventAt,\n icon: s.icon,\n color: s.color,\n text: `${e.name} ${e.status} (${e.toolCalls}t)`,\n });\n }\n if (e.budgetWarning) {\n events.push({\n at: e.budgetWarning.at,\n icon: '⚡',\n color: 'yellow',\n text: `${e.name} ${e.budgetWarning.kind} ${e.budgetWarning.used}/${e.budgetWarning.limit} — extending`,\n });\n }\n }\n events.sort((a, b) => b.at - a.at);\n const timeline = events.slice(0, 8);\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"cyan\" paddingX={1}>\n {/* Header — orchestration identity, distinct from AGENTS · LIVE */}\n <Box flexDirection=\"row\" gap={1}>\n <Text bold color=\"cyan\">\n FLEET · ORCHESTRATION\n </Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{running.length}</Text>\n <Text dimColor>○{idle}</Text>\n <Text color=\"green\">✓{done}</Text>\n {failed > 0 ? <Text color=\"red\">✗{failed}</Text> : null}\n <Text dimColor>· Ctrl+F to close</Text>\n </Box>\n\n {/* Concurrency + totals gauge */}\n <Box flexDirection=\"row\" gap={1}>\n <Text dimColor>concurrency</Text>\n <Text color=\"cyan\">[{renderProgress(concurrencyRatio, 12)}]</Text>\n <Text dimColor>\n {running.length}/{maxConcurrent}\n </Text>\n {totalTokens ? (\n <Text dimColor>\n {' '}\n {fmtTokens(totalTokens.input)}↑ {fmtTokens(totalTokens.output)}↓\n </Text>\n ) : null}\n <Text color=\"green\">{` $${totalCost.toFixed(3)}`}</Text>\n </Box>\n\n {shown.length === 0 ? (\n <Text dimColor>No subagents yet — spawn with /fleet spawn or /fleet dispatch.</Text>\n ) : null}\n\n {/* Compact one-line-per-agent table */}\n {shown.length > 0 ? (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\" gap={1}>\n <Text dimColor>{' '}</Text>\n <Text dimColor>{'name'.padEnd(16)}</Text>\n <Text dimColor>{'status'.padEnd(10)}</Text>\n <Text dimColor>{'L/t'.padEnd(8)}</Text>\n <Text dimColor>{'elapsed'.padEnd(8)}</Text>\n <Text dimColor>cost</Text>\n </Box>\n {shown.map((e) => {\n const s = STATUS[e.status];\n const elapsed =\n e.status === 'running'\n ? fmtElapsed(Math.max(0, nowTick - e.startedAt))\n : fmtElapsed(Math.max(0, nowTick - e.lastEventAt)) + ' ago';\n return (\n <Box key={e.id} flexDirection=\"row\" gap={1}>\n <Text color={s.color}>{s.icon}</Text>\n <Text>{e.name.padEnd(16).slice(0, 16)}</Text>\n <Text color={s.color}>{e.status.padEnd(10)}</Text>\n <Text dimColor>{`L${e.iterations} ${e.toolCalls}t`.padEnd(8)}</Text>\n <Text dimColor>{elapsed.padEnd(8).slice(0, 8)}</Text>\n <Text color=\"yellow\">{fmtCost(e.cost)}</Text>\n {e.extensions && e.extensions > 0 ? (\n <Text color=\"yellow\"> ⚡×{e.extensions}</Text>\n ) : null}\n </Box>\n );\n })}\n {overflow > 0 ? <Text dimColor>{` … +${overflow} more`}</Text> : null}\n </Box>\n ) : null}\n\n {/* Timeline */}\n {timeline.length > 0 ? (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text dimColor>timeline</Text>\n {timeline.map((ev, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: timeline is rebuilt per render\n <Box key={i} flexDirection=\"row\" gap={1}>\n <Text dimColor>{`${fmtElapsed(Math.max(0, nowTick - ev.at))} ago`.padEnd(10)}</Text>\n <Text color={ev.color}>{ev.icon}</Text>\n <Text dimColor>{ev.text}</Text>\n </Box>\n ))}\n </Box>\n ) : null}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { FleetEntry } from '../app.js';\nimport { bucketActivity, sparkline } from './fleet-monitor.js';\nimport { fmtElapsed } from './status-bar.js';\n\nexport interface AgentsMonitorProps {\n entries: Record<string, FleetEntry>;\n /** Fleet-wide accumulated cost. */\n totalCost: number;\n /** Fleet-wide token totals, when available. */\n totalTokens?: { input: number; output: number };\n /** 1s clock tick so elapsed times + sparklines stay live. */\n nowTick: number;\n}\n\nconst STATUS: Record<FleetEntry['status'], { icon: string; color: string }> = {\n idle: { icon: '○', color: 'gray' },\n running: { icon: '▶', color: 'yellow' },\n success: { icon: '✓', color: 'green' },\n failed: { icon: '✗', color: 'red' },\n timeout: { icon: '⏱', color: 'yellow' },\n stopped: { icon: '⊘', color: 'gray' },\n};\n\nfunction isTerminal(status: FleetEntry['status']): boolean {\n return (\n status === 'success' || status === 'failed' || status === 'timeout' || status === 'stopped'\n );\n}\n\n/**\n * An idle agent that hasn't produced any event for this long is considered\n * stale and dropped from the live view — a running agent is never hidden.\n * `lastEventAt` is bumped on every tool / message / stream event.\n */\nexport const IDLE_HIDE_MS = 60_000;\n\n/**\n * Select the agents the live monitor should render: never-terminal agents,\n * with idle agents pruned once they've been silent longer than `idleHideMs`.\n * Running agents come first (oldest first), then surviving idle agents\n * (most-recently-active first). Pure + exported for unit testing.\n */\nexport function selectLiveAgents(\n all: FleetEntry[],\n now: number,\n idleHideMs: number = IDLE_HIDE_MS,\n): FleetEntry[] {\n const visible = all.filter((e) => {\n if (isTerminal(e.status)) return false;\n if (e.status === 'running') return true;\n // idle: keep only while it's been recently active\n return now - e.lastEventAt < idleHideMs;\n });\n return visible.sort((a, b) => {\n if (a.status === 'running' && b.status !== 'running') return -1;\n if (a.status !== 'running' && b.status === 'running') return 1;\n if (a.status === 'running') return a.startedAt - b.startedAt; // oldest run first\n return b.lastEventAt - a.lastEventAt; // freshest idle first\n });\n}\n\nfunction fmtTokens(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(1)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\nfunction snippet(s: string, max = 72): string {\n const oneLine = s.replace(/\\s+/g, ' ').trim();\n if (oneLine.length <= max) return oneLine;\n return `${oneLine.slice(0, max - 1)}…`;\n}\n\n/**\n * Live per-agent context view (Ctrl+G). Each active agent gets a card with\n * its current tool, the last tool result, the most recent streaming /\n * message text, an activity sparkline, and budget pressure. Terminal\n * agents are excluded so the monitor reflects only what's actually live.\n */\nexport function AgentsMonitor({\n entries,\n totalCost,\n totalTokens,\n nowTick,\n}: AgentsMonitorProps): React.ReactElement {\n const all = Object.values(entries);\n\n // Terminal agents are excluded, and idle agents that have been silent for\n // longer than IDLE_HIDE_MS are pruned — the FleetPanel + history still hold\n // the full record; this view shows only what's actually live right now.\n const live = selectLiveAgents(all, nowTick);\n\n const running = live.filter((e) => e.status === 'running').length;\n const totalDone = all.filter((e) => e.status === 'success').length;\n const totalFailed = all.filter((e) => e.status === 'failed' || e.status === 'timeout').length;\n // Idle agents pruned for being stale (live but not in the visible set).\n const hiddenIdle = all.filter(\n (e) => e.status === 'idle' && nowTick - e.lastEventAt >= IDLE_HIDE_MS,\n ).length;\n\n const ordered = live;\n const shown = ordered.slice(0, 8);\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"magenta\" paddingX={1}>\n {/* Header — live identity, distinct from FLEET MONITOR */}\n <Box flexDirection=\"row\" gap={1}>\n <Text bold color=\"magenta\">\n AGENTS · LIVE\n </Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{running}</Text>\n <Text dimColor>─────────────────</Text>\n <Text dimColor>done</Text>\n <Text color=\"green\">✓{totalDone}</Text>\n <Text dimColor>·</Text>\n <Text dimColor>failed</Text>\n {totalFailed > 0 ? <Text color=\"red\">✗{totalFailed}</Text> : null}\n <Text dimColor>· Ctrl+G to close</Text>\n </Box>\n\n {/* Token + cost row */}\n <Box flexDirection=\"row\" gap={1}>\n <Text dimColor>shown</Text>\n <Text color=\"magenta\">{live.length}</Text>\n {totalTokens ? (\n <Text dimColor>\n {' '}\n {fmtTokens(totalTokens.input)}↑ {fmtTokens(totalTokens.output)}↓\n </Text>\n ) : null}\n <Text color=\"green\">${totalCost.toFixed(3)}</Text>\n {hiddenIdle > 0 ? <Text dimColor>· {hiddenIdle} idle hidden</Text> : null}\n </Box>\n\n {shown.length === 0 ? (\n <Text dimColor>No live agents — spawn with /spawn or /fleet dispatch.</Text>\n ) : null}\n\n {/* Per-agent live cards */}\n {shown.map((e) => {\n const s = STATUS[e.status];\n const elapsed =\n e.status === 'running' ? fmtElapsed(Math.max(0, nowTick - e.startedAt)) : e.status;\n const spark = sparkline(bucketActivity(e.recentTools, nowTick));\n const lastTool = e.recentTools[e.recentTools.length - 1];\n const lastMessage = e.recentMessages[e.recentMessages.length - 1];\n const streamTail = e.streamingText ? snippet(e.streamingText.slice(-160)) : '';\n const toolElapsed = e.currentTool ? Math.max(0, nowTick - e.currentTool.startedAt) : 0;\n\n return (\n <Box key={e.id} flexDirection=\"column\" marginTop={1}>\n {/* Identity line: icon · name · elapsed · iter/tools · extensions */}\n <Box flexDirection=\"row\" gap={1}>\n <Text color={s.color} bold>\n {s.icon}\n </Text>\n <Text bold>{e.name}</Text>\n <Text dimColor>·</Text>\n <Text dimColor>{elapsed}</Text>\n <Text dimColor>·</Text>\n <Text dimColor>\n L{e.iterations} {e.toolCalls}t\n </Text>\n {e.extensions && e.extensions > 0 ? (\n <Text color=\"yellow\">⚡×{e.extensions}</Text>\n ) : null}\n </Box>\n\n {/* Current tool (live, ms-precision) — only while inside a tool */}\n {e.status === 'running' && e.currentTool ? (\n <Box flexDirection=\"row\" gap={1} paddingLeft={2}>\n <Text color=\"cyan\">→ {e.currentTool.name}</Text>\n <Text dimColor>({toolElapsed}ms)</Text>\n </Box>\n ) : null}\n\n {/* Activity sparkline + last completed tool summary */}\n {spark || lastTool ? (\n <Box flexDirection=\"row\" gap={1} paddingLeft={2}>\n <Text color=\"green\">{spark || ''}</Text>\n {lastTool ? (\n <Text dimColor>\n last: {lastTool.name}\n {typeof lastTool.durationMs === 'number' ? ` ${lastTool.durationMs}ms` : ''}\n {lastTool.ok === false ? ' ✗' : ''}\n </Text>\n ) : null}\n </Box>\n ) : null}\n\n {/* Live streaming tail (for running agents) */}\n {e.status === 'running' && streamTail ? (\n <Box paddingLeft={2}>\n <Text dimColor>\n {'>'} {streamTail}\n </Text>\n </Box>\n ) : null}\n\n {/* Latest finished-message snippet (when nothing streaming) */}\n {(e.status !== 'running' || !streamTail) && lastMessage ? (\n <Box paddingLeft={2}>\n <Text dimColor>msg: {snippet(lastMessage.text)}</Text>\n </Box>\n ) : null}\n\n {/* Budget pressure */}\n {e.budgetWarning ? (\n <Box paddingLeft={2}>\n <Text color=\"yellow\">\n ⚡ {e.budgetWarning.kind} {e.budgetWarning.used}/{e.budgetWarning.limit} —\n extending\n </Text>\n </Box>\n ) : null}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import { Box, Text, useInput } from 'ink';\nimport type React from 'react';\n\nconst fmtElapsed = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const h = Math.floor(m / 60);\n if (h > 0) return `${h}:${String(m % 60).padStart(2, '0')}:${String(s % 60).padStart(2, '0')}`;\n if (m > 0) return `${m}:${String(s % 60).padStart(2, '0')}`;\n return `${s}s`;\n};\n\nexport interface PhaseMonitorProps {\n /** Per-phase state from the App reducer. */\n phases: Record<string, {\n name: string;\n status: string;\n completedTasks: number;\n totalTasks: number;\n startedAt?: number;\n }>;\n /** IDs of currently running phases. */\n runningPhaseIds: string[];\n /** Session-level elapsed ms. */\n elapsedMs: number;\n /** nowTick for elapsed time calculation. */\n nowTick: number;\n onClose: () => void;\n}\n\nconst PHASE_STATUS: Record<string, { icon: string; color: string; label: string }> = {\n pending: { icon: '⏳', color: 'gray', label: 'pending' },\n ready: { icon: '🔜', color: 'cyan', label: 'ready' },\n running: { icon: '▶', color: 'yellow', label: 'running' },\n paused: { icon: '⏸', color: 'magenta', label: 'paused' },\n completed: { icon: '✓', color: 'green', label: 'done' },\n failed: { icon: '✗', color: 'red', label: 'failed' },\n skipped: { icon: '⏭', color: 'gray', label: 'skipped' },\n};\n\nfunction fmtPhase(s: string): { icon: string; color: string; label: string } {\n return PHASE_STATUS[s] ?? { icon: '?', color: 'white', label: s };\n}\n\n/**\n * Full-screen PhaseMonitor overlay (Ctrl+P in TUI).\n *\n * Layout:\n * Header: project title + elapsed time + Ctrl+P to close\n * Per-phase rows:\n * · icon · name · status · (task progress) · started/elapsed\n * Bottom: keyboard hint\n */\nexport function PhaseMonitor({\n phases,\n runningPhaseIds,\n elapsedMs,\n nowTick,\n onClose,\n}: PhaseMonitorProps): React.ReactElement {\n useInput((_, key) => {\n if (key.escape) onClose();\n });\n\n const phaseList = Object.values(phases);\n const running = phaseList.filter((p) => runningPhaseIds.includes(Object.keys(phases).find((k) => phases[k] === p) ?? ''));\n const done = phaseList.filter((p) => p.status === 'completed' || p.status === 'skipped');\n const failed = phaseList.filter((p) => p.status === 'failed');\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"cyan\" paddingX={1}>\n {/* Header */}\n <Box flexDirection=\"row\" gap={1} marginBottom={1}>\n <Text bold color=\"cyan\">PHASE MONITOR</Text>\n <Text dimColor>│</Text>\n <Text dimColor>⏱ {fmtElapsed(elapsedMs)}</Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{running.length}</Text>\n <Text dimColor>·</Text>\n <Text color=\"green\">✓{done.length}</Text>\n {failed.length > 0 ? (\n <>\n <Text dimColor>·</Text>\n <Text color=\"red\">✗{failed.length}</Text>\n </>\n ) : null}\n <Text dimColor>│ Ctrl+P / Esc to close</Text>\n </Box>\n\n {phaseList.length === 0 ? (\n <Text dimColor>No phases active. Use /autophase start [title] to begin.</Text>\n ) : (\n phaseList.map((phase, i) => {\n const s = fmtPhase(phase.status);\n const phaseKey = Object.keys(phases).find((k) => phases[k] === phase) ?? String(i);\n const isRunning = runningPhaseIds.includes(phaseKey);\n const elapsed = phase.startedAt ? fmtElapsed(nowTick - phase.startedAt) : '—';\n const progress = phase.totalTasks > 0\n ? `${phase.completedTasks}/${phase.totalTasks}`\n : '—';\n\n return (\n <Box key={phaseKey} flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\" gap={1}>\n <Text color={s.color} bold>{s.icon}</Text>\n <Text bold>{phase.name}</Text>\n <Text dimColor>·</Text>\n <Text color={s.color}>{s.label}</Text>\n {isRunning ? (\n <>\n <Text dimColor>·</Text>\n <Text dimColor>elapsed {elapsed}</Text>\n </>\n ) : null}\n {phase.totalTasks > 0 && (\n <>\n <Text dimColor>·</Text>\n <Text dimColor>tasks {progress}</Text>\n </>\n )}\n </Box>\n </Box>\n );\n })\n )}\n\n {/* Keyboard hints */}\n <Box marginTop={1}>\n <Text dimColor>↑/↓ navigate phases · Esc close</Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\n\nconst fmtElapsed = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const h = Math.floor(m / 60);\n if (h > 0) return `${h}:${String(m % 60).padStart(2, '0')}:${String(s % 60).padStart(2, '0')}`;\n if (m > 0) return `${m}:${String(s % 60).padStart(2, '0')}`;\n return `${s}s`;\n};\n\nexport interface PhasePanelProps {\n /** Per-phase state from the App reducer. */\n phases: Record<string, {\n name: string;\n status: string;\n completedTasks: number;\n totalTasks: number;\n startedAt?: number;\n }>;\n /** Active running phase IDs. */\n runningPhaseIds: string[];\n /** nowTick for elapsed time display. */\n nowTick: number;\n}\n\nconst STATUS: Record<string, { icon: string; color: string }> = {\n pending: { icon: '○', color: 'gray' },\n ready: { icon: '◐', color: 'cyan' },\n running: { icon: '●', color: 'yellow' },\n paused: { icon: '⏸', color: 'magenta' },\n completed: { icon: '✓', color: 'green' },\n failed: { icon: '✗', color: 'red' },\n skipped: { icon: '⊘', color: 'gray' },\n};\n\nfunction s(entry: string) {\n return STATUS[entry] ?? { icon: '?', color: 'white' };\n}\n\n /**\n * AutoPhase sidebar panel — shown below fleet panel when AutoPhase is active.\n * Compact 2-line-per-phase view optimized for the TUI layout.\n * Unlike PhaseMonitor (an overlay), PhasePanel is always visible while active.\n */\nexport function PhasePanel({ phases, runningPhaseIds, nowTick }: PhasePanelProps): React.ReactElement | null {\n const list = Object.values(phases);\n if (list.length === 0) return null;\n\n const done = list.filter((p) => p.status === 'completed' || p.status === 'skipped').length;\n const running = list.filter((p) => p.status === 'running').length;\n const failed = list.filter((p) => p.status === 'failed').length;\n\n return (\n <Box\n flexDirection=\"column\"\n paddingX={1}\n borderStyle=\"single\"\n borderTop={false}\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n >\n {/* Header */}\n <Box flexDirection=\"row\" gap={2}>\n <Text dimColor>Phases</Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{running}</Text>\n <Text dimColor>✓{done}</Text>\n {failed > 0 ? <Text color=\"red\">✗{failed}</Text> : null}\n <Text dimColor>· {list.length} total</Text>\n <Text dimColor>· Ctrl+P for details</Text>\n </Box>\n\n {/* Per-phase compact rows */}\n {list.map((phase, i) => {\n const phaseKey = Object.keys(phases).find((k) => phases[k] === phase) ?? String(i);\n const st = s(phase.status);\n const progress = phase.totalTasks > 0\n ? `${phase.completedTasks}/${phase.totalTasks}`\n : '';\n const elapsed = phase.startedAt\n ? fmtElapsed(nowTick - phase.startedAt)\n : '';\n\n return (\n <Box key={phaseKey} flexDirection=\"row\" gap={1}>\n <Text color={st.color}>{st.icon}</Text>\n <Text>{phase.name.slice(0, 14).padEnd(14)}</Text>\n <Text color={st.color} dimColor>{st.icon === '●' ? phase.status : ''}</Text>\n {progress ? (\n <Text dimColor> {progress}</Text>\n ) : null}\n {elapsed && st.icon === '●' ? (\n <Text dimColor> {elapsed}</Text>\n ) : null}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\n\nconst fmtElapsed = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const h = Math.floor(m / 60);\n if (h > 0) return `${h}:${String(m % 60).padStart(2, '0')}:${String(s % 60).padStart(2, '0')}`;\n if (m > 0) return `${m}:${String(s % 60).padStart(2, '0')}`;\n return `${s}s`;\n};\n\nexport interface WorktreeRow {\n branch: string;\n ownerLabel: string;\n status: string;\n insertions: number;\n deletions: number;\n files: number;\n allocatedAt: number;\n conflictFiles?: string[];\n}\n\nconst STATUS: Record<string, { icon: string; color: string }> = {\n allocating: { icon: '○', color: 'gray' },\n active: { icon: '●', color: 'yellow' },\n committing: { icon: '◐', color: 'cyan' },\n merging: { icon: '⇡', color: 'blue' },\n merged: { icon: '✓', color: 'green' },\n 'needs-review':{ icon: '⚠', color: 'magenta' },\n failed: { icon: '✗', color: 'red' },\n};\n\nfunction st(status: string) {\n return STATUS[status] ?? { icon: '?', color: 'white' };\n}\n\n/**\n * Worktree sidebar panel — shown beside the AutoPhase PhasePanel when git\n * worktree isolation is active. One compact row per worktree (branch, owner\n * phase, diff stats, status). Always visible while live; details on Ctrl+T.\n */\nexport function WorktreePanel({\n worktrees,\n nowTick,\n}: {\n worktrees: Record<string, WorktreeRow>;\n nowTick: number;\n}): React.ReactElement | null {\n const list = Object.values(worktrees);\n if (list.length === 0) return null;\n\n const active = list.filter((w) => w.status === 'active' || w.status === 'committing' || w.status === 'merging').length;\n const merged = list.filter((w) => w.status === 'merged').length;\n const failed = list.filter((w) => w.status === 'failed' || w.status === 'needs-review').length;\n\n return (\n <Box\n flexDirection=\"column\"\n paddingX={1}\n borderStyle=\"single\"\n borderTop={false}\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n >\n <Box flexDirection=\"row\" gap={2}>\n <Text dimColor>Worktrees</Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{active}</Text>\n <Text color=\"green\">✓{merged}</Text>\n {failed > 0 ? <Text color=\"red\">✗{failed}</Text> : null}\n <Text dimColor>· {list.length} total · Ctrl+T for details</Text>\n </Box>\n\n {list.map((w) => {\n const s = st(w.status);\n const conflict = w.status === 'needs-review';\n const elapsed = w.allocatedAt ? fmtElapsed(nowTick - w.allocatedAt) : '';\n return (\n <Box key={w.branch} flexDirection=\"row\" gap={1}>\n <Text color={s.color}>{s.icon}</Text>\n <Text>{w.branch.replace(/^wstack\\/ap\\//, '').slice(0, 18).padEnd(18)}</Text>\n <Text dimColor>{w.ownerLabel.slice(0, 12)}</Text>\n {conflict ? (\n <Text color=\"magenta\"> CONFLICT</Text>\n ) : (\n <Text dimColor> +{w.insertions}/-{w.deletions} {w.files}f</Text>\n )}\n {elapsed && (w.status === 'active' || w.status === 'committing') ? (\n <Text dimColor> {elapsed}</Text>\n ) : null}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import { Box, Text, useInput } from 'ink';\nimport type React from 'react';\nimport type { WorktreeRow } from './worktree-panel.js';\n\nconst fmtElapsed = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const h = Math.floor(m / 60);\n if (h > 0) return `${h}:${String(m % 60).padStart(2, '0')}:${String(s % 60).padStart(2, '0')}`;\n if (m > 0) return `${m}:${String(s % 60).padStart(2, '0')}`;\n return `${s}s`;\n};\n\nconst WT_STATUS: Record<string, { icon: string; color: string; label: string }> = {\n allocating: { icon: '○', color: 'gray', label: 'allocating' },\n active: { icon: '●', color: 'yellow', label: 'active' },\n committing: { icon: '◐', color: 'cyan', label: 'committing' },\n merging: { icon: '⇡', color: 'blue', label: 'merging' },\n merged: { icon: '✓', color: 'green', label: 'merged' },\n 'needs-review':{ icon: '⚠', color: 'magenta', label: 'needs-review' },\n failed: { icon: '✗', color: 'red', label: 'failed' },\n};\n\nfunction fmt(s: string) {\n return WT_STATUS[s] ?? { icon: '?', color: 'white', label: s };\n}\n\n/**\n * Full-screen Worktree monitor overlay (Ctrl+T to open, Ctrl+T/Esc to close).\n * Shows each AutoPhase worktree: branch, base→branch, owner phase, diff stats,\n * and conflict files for any worktree left in needs-review.\n */\nexport function WorktreeMonitor({\n worktrees,\n baseBranch,\n nowTick,\n onClose,\n}: {\n worktrees: Record<string, WorktreeRow & { baseBranch?: string }>;\n baseBranch?: string;\n nowTick: number;\n onClose: () => void;\n}): React.ReactElement {\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'w')) onClose();\n });\n\n const list = Object.values(worktrees);\n const active = list.filter((w) => ['active', 'committing', 'merging'].includes(w.status)).length;\n const merged = list.filter((w) => w.status === 'merged').length;\n const failed = list.filter((w) => w.status === 'failed' || w.status === 'needs-review').length;\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"green\" paddingX={1}>\n <Box flexDirection=\"row\" gap={1} marginBottom={1}>\n <Text bold color=\"green\">WORKTREE MONITOR</Text>\n <Text dimColor>│</Text>\n {baseBranch ? <Text dimColor>base {baseBranch}</Text> : null}\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{active}</Text>\n <Text dimColor>·</Text>\n <Text color=\"green\">✓{merged}</Text>\n {failed > 0 ? (\n <>\n <Text dimColor>·</Text>\n <Text color=\"red\">✗{failed}</Text>\n </>\n ) : null}\n <Text dimColor>│ Ctrl+T / Esc to close</Text>\n </Box>\n\n {list.length === 0 ? (\n <Text dimColor>No worktrees. They appear when AutoPhase runs with isolation on.</Text>\n ) : (\n list.map((w) => {\n const s = fmt(w.status);\n const short = w.branch.replace(/^wstack\\/ap\\//, '');\n const elapsed = w.allocatedAt ? fmtElapsed(nowTick - w.allocatedAt) : '—';\n return (\n <Box key={w.branch} flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\" gap={1}>\n <Text color={s.color} bold>{s.icon}</Text>\n <Text bold>{short}</Text>\n <Text dimColor>·</Text>\n <Text color={s.color}>{s.label}</Text>\n <Text dimColor>· elapsed {elapsed}</Text>\n </Box>\n <Box flexDirection=\"row\" gap={1} marginLeft={2}>\n <Text dimColor>{w.baseBranch ?? baseBranch ?? 'base'} → {short}</Text>\n <Text dimColor>· owner: {w.ownerLabel}</Text>\n </Box>\n <Box flexDirection=\"row\" gap={1} marginLeft={2}>\n <Text color=\"green\">+{w.insertions}</Text>\n <Text color=\"red\">-{w.deletions}</Text>\n <Text dimColor>· {w.files} files</Text>\n </Box>\n {w.conflictFiles && w.conflictFiles.length > 0 ? (\n <Box marginLeft={2}>\n <Text color=\"magenta\">conflicts: {w.conflictFiles.join(', ')}</Text>\n </Box>\n ) : null}\n </Box>\n );\n })\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Esc close · merge conflicts with /worktree merge <branch></Text>\n </Box>\n </Box>\n );\n}\n","/**\n * Scan a body of prose for GitHub-flavoured markdown tables and replace\n * each one with a Unicode box-drawing rendering that fits the terminal\n * width. Cells that overflow their column wrap over multiple lines.\n *\n * Non-table prose passes through unchanged.\n *\n * Input shape (rest of the doc may surround it):\n * | Header A | Header B |\n * |----------|---------:|\n * | a 1 | 42 |\n * | a 2 | 7 |\n *\n * Output shape:\n * ┌──────────┬──────────┐\n * │ Header A │ Header B │\n * ├──────────┼──────────┤\n * │ a 1 │ 42 │\n * │ a 2 │ 7 │\n * └──────────┴──────────┘\n */\nexport function renderMarkdownTables(text: string, maxWidth: number): string {\n if (!text.includes('|')) return text; // fast path\n const lines = text.split('\\n');\n const out: string[] = [];\n let i = 0;\n while (i < lines.length) {\n const end = detectTable(lines, i);\n if (end > i) {\n out.push(renderTable(lines.slice(i, end), Math.max(20, maxWidth)));\n i = end;\n } else {\n out.push(lines[i] ?? '');\n i++;\n }\n }\n return out.join('\\n');\n}\n\ntype Align = 'left' | 'right' | 'center';\n\nconst ROW_RE = /^\\s*\\|.*\\|\\s*$/;\nconst SEP_RE = /^\\s*\\|[\\s\\-:|]+\\|\\s*$/;\n\nfunction detectTable(lines: string[], start: number): number {\n if (start + 1 >= lines.length) return start;\n if (!ROW_RE.test(lines[start] ?? '')) return start;\n const sep = lines[start + 1] ?? '';\n // Need at least one dash somewhere — distinguishes the separator from\n // a regular row that happens to contain colons/spaces only.\n if (!SEP_RE.test(sep) || !/-/.test(sep)) return start;\n let end = start + 2;\n while (end < lines.length && ROW_RE.test(lines[end] ?? '')) end++;\n return end;\n}\n\nfunction parseCells(line: string): string[] {\n // Strip the outer pipes, then split on remaining pipes. Pipes inside a\n // cell would need escaping with `\\|`; we honour that minimally.\n const inner = line.trim().replace(/^\\||\\|$/g, '');\n const parts: string[] = [];\n let buf = '';\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i];\n if (ch === '\\\\' && inner[i + 1] === '|') {\n buf += '|';\n i++;\n continue;\n }\n if (ch === '|') {\n parts.push(buf);\n buf = '';\n continue;\n }\n buf += ch;\n }\n parts.push(buf);\n return parts.map((c) => c.trim());\n}\n\nfunction parseAlign(sep: string): Align {\n const t = sep.trim();\n const left = t.startsWith(':');\n const right = t.endsWith(':');\n if (left && right) return 'center';\n if (right) return 'right';\n return 'left';\n}\n\nfunction renderTable(tableLines: string[], maxWidth: number): string {\n const header = parseCells(tableLines[0] ?? '');\n const sepCells = parseCells(tableLines[1] ?? '');\n const cols = header.length;\n const aligns: Align[] = [];\n for (let c = 0; c < cols; c++) {\n aligns.push(parseAlign(sepCells[c] ?? ''));\n }\n const dataRows = tableLines.slice(2).map(parseCells);\n // Normalise short rows by padding with empty cells; drop extras.\n for (const row of dataRows) {\n while (row.length < cols) row.push('');\n row.length = cols;\n }\n\n const widths = computeWidths([header, ...dataRows], cols, maxWidth);\n\n const lines: string[] = [];\n lines.push(border('┌', '┬', '┐', widths));\n lines.push(...renderRow(header, widths, aligns));\n lines.push(border('├', '┼', '┤', widths));\n for (const row of dataRows) {\n lines.push(...renderRow(row, widths, aligns));\n }\n lines.push(border('└', '┴', '┘', widths));\n return lines.join('\\n');\n}\n\nfunction computeWidths(allRows: string[][], cols: number, maxWidth: number): number[] {\n // Each column adds `│ … ` of overhead (2 padding + 1 separator); the\n // very first column also gets an opening `│`. Net overhead = 3*cols + 1.\n const overhead = 3 * cols + 1;\n const avail = Math.max(cols * MIN_COL_WIDTH, maxWidth - overhead);\n const natural = new Array<number>(cols).fill(0);\n for (const row of allRows) {\n for (let c = 0; c < cols; c++) {\n const cell = row[c] ?? '';\n const w = longestWord(cell); // floor: never wrap mid-word in the middle of a short label\n const total = cell.length;\n // Track both, prefer the natural width but ensure at least `w`.\n natural[c] = Math.max(natural[c]!, total);\n if (w > natural[c]!) natural[c] = Math.min(total + 1, w);\n }\n }\n const sumNatural = natural.reduce((s, n) => s + n, 0);\n if (sumNatural <= avail) return natural;\n // Need to shrink. Repeatedly steal a char from the widest column above\n // MIN_COL_WIDTH until we fit. Cheap; cols is small.\n const widths = natural.slice();\n let sum = sumNatural;\n while (sum > avail) {\n let maxIdx = -1;\n let maxVal = MIN_COL_WIDTH;\n for (let i = 0; i < cols; i++) {\n const w = widths[i]!;\n if (w > maxVal) {\n maxVal = w;\n maxIdx = i;\n }\n }\n if (maxIdx < 0) break; // every column is at MIN_COL_WIDTH; give up\n widths[maxIdx]!--;\n sum--;\n }\n return widths;\n}\n\nconst MIN_COL_WIDTH = 4;\n\nfunction longestWord(s: string): number {\n let max = 0;\n for (const w of s.split(/\\s+/)) if (w.length > max) max = w.length;\n return max;\n}\n\nfunction border(left: string, mid: string, right: string, widths: number[]): string {\n return left + widths.map((w) => '─'.repeat(w + 2)).join(mid) + right;\n}\n\nfunction renderRow(cells: string[], widths: number[], aligns: Align[]): string[] {\n const wrapped = cells.map((c, i) => wrapCell(c, widths[i] ?? MIN_COL_WIDTH));\n const height = Math.max(1, ...wrapped.map((w) => w.length));\n const out: string[] = [];\n for (let line = 0; line < height; line++) {\n const parts: string[] = [];\n for (let c = 0; c < widths.length; c++) {\n const w = widths[c] ?? MIN_COL_WIDTH;\n const text = wrapped[c]?.[line] ?? '';\n parts.push(padCell(text, w, aligns[c] ?? 'left'));\n }\n out.push('│ ' + parts.join(' │ ') + ' │');\n }\n return out;\n}\n\nfunction wrapCell(text: string, width: number): string[] {\n if (text.length <= width) return [text];\n const out: string[] = [];\n // Split on whitespace, keep grouping until we'd overflow.\n const words = text.split(/(\\s+)/);\n let cur = '';\n for (const word of words) {\n if (!word) continue;\n if (cur.length + word.length <= width) {\n cur += word;\n continue;\n }\n if (cur) {\n out.push(cur.trimEnd());\n cur = '';\n }\n if (word.length > width) {\n // Hard-break a word longer than the column.\n let rest = word;\n while (rest.length > width) {\n out.push(rest.slice(0, width));\n rest = rest.slice(width);\n }\n cur = rest;\n } else if (!/^\\s+$/.test(word)) {\n cur = word;\n }\n }\n if (cur) out.push(cur.trimEnd());\n return out.length === 0 ? [''] : out;\n}\n\nfunction padCell(text: string, width: number, align: Align): string {\n if (text.length >= width) return text.slice(0, width);\n const pad = width - text.length;\n if (align === 'right') return ' '.repeat(pad) + text;\n if (align === 'center') {\n const l = Math.floor(pad / 2);\n return ' '.repeat(l) + text + ' '.repeat(pad - l);\n }\n return text + ' '.repeat(pad);\n}\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Box, Static, Text, useStdout } from 'ink';\nimport { renderMarkdownTables } from '../markdown-table.js';\nimport { ConfirmPrompt } from './confirm-prompt.js';\n\nexport type HistoryEntry =\n | { id: number; kind: 'user'; text: string; queued?: boolean; pasteContent?: string }\n | { id: number; kind: 'assistant'; text: string }\n | {\n id: number;\n kind: 'tool';\n name: string;\n durationMs: number;\n ok: boolean;\n input?: unknown;\n output?: string;\n /** Full byte length of the result body the model actually received\n * (post-cap, post-scrub). Carried separately because `output` is a\n * ~400-char preview — `outputBytes` is what the model paid for. */\n outputBytes?: number;\n /** ~3.5 chars/token estimate over `outputBytes`. Cheap to render in\n * the chip; the authoritative count lives in provider.response.usage. */\n outputTokens?: number;\n /** Real line count for tools that have a meaningful one — read counts\n * numbered prefixes, shell/grep/logs count newlines. Undefined for\n * tools without a line notion (json, fetch, …). */\n outputLines?: number;\n }\n | { id: number; kind: 'info'; text: string }\n | { id: number; kind: 'warn'; text: string }\n | { id: number; kind: 'error'; text: string }\n | { id: number; kind: 'turn-summary'; text: string }\n | {\n id: number;\n kind: 'banner';\n version: string;\n provider: string;\n model: string;\n cwd: string;\n /** Wire family the provider is configured to speak (anthropic, openai, …). */\n family?: string;\n /** Last 3 chars of the active API key — quick visual confirmation that the right account is wired up. */\n keyTail?: string;\n }\n /** Tool confirmation shown while waiting for the user to approve/deny. */\n | { id: number; kind: 'confirm'; toolName: string; input: unknown; suggestedPattern: string }\n /**\n * Subagent activity surfaced into the leader's history. One entry per\n * tool call, assistant message, spawn, or completion — prefixed with a\n * stable `AGENT#N` label so users can follow each subagent across\n * interleaved output from multiple parallel runs.\n */\n | {\n id: number;\n kind: 'subagent';\n agentLabel: string;\n agentColor: string;\n icon: string;\n text: string;\n detail?: string;\n };\n\nexport interface HistoryProps {\n entries: HistoryEntry[];\n streamingText?: string;\n /**\n * Optional live tail of the currently streaming tool. Rendered below the\n * assistant tail so the user sees both at once: model thinking and tool\n * output. Cleared automatically when the tool's `tool.executed` event\n * fires and the final entry lands in `entries`.\n */\n toolStream?: { toolUseId: string; name: string; text: string; startedAt: number } | null;\n}\n\nexport function History({ entries, streamingText, toolStream }: HistoryProps): React.ReactElement {\n const { stdout } = useStdout();\n // Track terminal dimensions imperatively so that every resize triggers a\n // re-render. We snapshot into state rather than deriving directly from\n // useStdout because Static children receive `termWidth` as a prop — if\n // the parent doesn't re-render on resize, the stale value gets baked\n // into committed scrollback entries. This ensures Entry components in\n // both Static (committed) and live-streaming regions use the current\n // width for table wrapping etc.\n const [termSize, setTermSize] = useState({ columns: stdout?.columns ?? 80, rows: stdout?.rows ?? 24 });\n useEffect(() => {\n const handleResize = () => {\n setTermSize({ columns: stdout?.columns ?? 80, rows: stdout?.rows ?? 24 });\n };\n process.stdout.on('resize', handleResize);\n return () => { process.stdout.off('resize', handleResize); };\n }, [stdout]);\n const termWidth = termSize.columns;\n const tail = streamingText ? tailForDisplay(streamingText, MAX_STREAM_DISPLAY_CHARS) : '';\n const toolTail = toolStream?.text\n ? tailForDisplay(toolStream.text, MAX_STREAM_DISPLAY_CHARS)\n : '';\n\n // Finalized entries go through <Static>: Ink prints each one ONCE and\n // never re-renders them, which means they flow into the terminal's\n // native scrollback. The user scrolls with the terminal's own\n // mechanism (mouse wheel, Shift+PgUp in Windows Terminal/PowerShell,\n // etc.) — we don't need an in-app scrollbar or scroll keys. Trying\n // to manage scroll ourselves clipped older content under a fixed\n // height box and lost it to redraws.\n return (\n <>\n <Static items={entries}>\n {(entry) => (\n <Box key={entry.id} marginBottom={entry.kind === 'turn-summary' ? 1 : 0}>\n <Entry entry={entry} termWidth={termWidth} />\n </Box>\n )}\n </Static>\n {tail ? (\n <Box flexDirection=\"column\" marginY={1}>\n <Box flexDirection=\"row\">\n <Text bold color=\"cyan\">{'ASSISTANT: '}</Text>\n <Text dimColor>(streaming...)</Text>\n </Box>\n <Text color=\"white\">{tail}</Text>\n </Box>\n ) : null}\n {toolTail ? (\n <ToolStreamBox\n name={toolStream!.name}\n text={toolTail}\n startedAt={toolStream!.startedAt}\n termWidth={termWidth}\n />\n ) : null}\n </>\n );\n}\n\nconst MAX_STREAM_DISPLAY_CHARS = 480;\n\nconst MAX_STREAM_LINES = 8;\n\n/**\n * Rich streaming tool output — framed header with live elapsed time,\n * tail-N output so the screen doesn't flood, and a \"N more lines\n * above\" indicator when truncated.\n */\nfunction ToolStreamBox({\n name,\n text,\n startedAt,\n termWidth,\n}: {\n name: string;\n text: string;\n startedAt: number;\n termWidth: number;\n}): React.ReactElement {\n // Tick every 500ms while streaming to refresh the elapsed counter.\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const t = setInterval(() => setTick((n) => n + 1), 500);\n return () => clearInterval(t);\n }, []);\n void tick; // consumed in elapsed calc below\n\n const elapsedMs = Date.now() - startedAt;\n const lines = text.split('\\n');\n const totalLines = lines.length;\n const hidden = Math.max(0, totalLines - MAX_STREAM_LINES);\n const visible = hidden > 0 ? lines.slice(hidden) : lines;\n // Truncate long individual lines so borders don't break.\n const contentWidth = Math.max(20, Math.min(termWidth - 4, 100));\n\n return (\n <Box flexDirection=\"column\" marginTop={0}>\n {/* Header */}\n <Box flexDirection=\"row\">\n <Text color=\"yellow\">◆ </Text>\n <Text bold color=\"cyan\">\n {name}\n </Text>\n <Text dimColor>{` ⏱ ${fmtDuration(elapsedMs)}`}</Text>\n {hidden > 0 ? (\n <Text dimColor>{` (${totalLines} lines, showing last ${MAX_STREAM_LINES})`}</Text>\n ) : null}\n </Box>\n {/* Output lines */}\n <Box flexDirection=\"column\" marginLeft={2}>\n {hidden > 0 ? (\n <Text dimColor italic>{` … ${hidden} more line${hidden === 1 ? '' : 's'} above`}</Text>\n ) : null}\n {visible.map((line, i) => {\n const key = i;\n const trimmed = line.length > contentWidth ? `${line.slice(0, contentWidth - 1)}…` : line;\n return (\n <Text key={key} dimColor>\n {trimmed || ' '}\n </Text>\n );\n })}\n </Box>\n </Box>\n );\n}\n\nexport function tailForDisplay(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text;\n const cut = text.length - maxChars;\n // Prefer a newline boundary near the cut for a cleaner visual edge.\n const nl = text.indexOf('\\n', cut);\n if (nl !== -1 && nl < cut + 80) {\n return `… ${text.slice(nl + 1)}`;\n }\n return `… ${text.slice(cut)}`;\n}\n\nfunction DiffBlock({ rows, hidden }: { rows: DiffLineRow[]; hidden: number }): React.ReactElement {\n // Width of the line-number gutter: pick the widest line number across all\n // rows so the column stays aligned. Fall back to 1 when no row carries a\n // line number (e.g. a diff with only a meta/hunk row).\n let gutterWidth = 1;\n for (const r of rows) {\n const n = r.kind === 'del' ? r.oldLine : r.newLine;\n if (typeof n === 'number') {\n const w = String(n).length;\n if (w > gutterWidth) gutterWidth = w;\n }\n }\n const blank = ' '.repeat(gutterWidth);\n return (\n <Box flexDirection=\"column\" marginLeft={4} marginTop={0}>\n {rows.map((row, i) => {\n const key = i;\n if (row.kind === 'hunk') {\n return (\n <Text key={key} color=\"cyan\" dimColor>\n {row.text}\n </Text>\n );\n }\n if (row.kind === 'meta') {\n return (\n <Text key={key} dimColor>\n {`${blank} ${row.text}`}\n </Text>\n );\n }\n const lnNumber = row.kind === 'del' ? row.oldLine : row.newLine;\n const lnText =\n typeof lnNumber === 'number' ? String(lnNumber).padStart(gutterWidth, ' ') : blank;\n if (row.kind === 'ctx') {\n return (\n <Text key={key} dimColor>\n {`${lnText} ${row.text}`}\n </Text>\n );\n }\n // add / del — soft background block on the content only; line number\n // stays dim outside the block so the eye anchors on the change, not\n // a wall of colour. Bright variants render lighter than plain\n // green/red on most terminals.\n const bg = row.kind === 'add' ? 'greenBright' : 'redBright';\n return (\n <Text key={key}>\n <Text dimColor>{`${lnText} `}</Text>\n <Text backgroundColor={bg} color=\"black\">\n {row.text}\n </Text>\n </Text>\n );\n })}\n {hidden > 0 ? (\n <Text dimColor italic>\n {`${blank} … ${hidden} more line${hidden === 1 ? '' : 's'}`}\n </Text>\n ) : null}\n </Box>\n );\n}\n\nfunction Entry({\n entry,\n termWidth,\n}: { entry: HistoryEntry; termWidth: number }): React.ReactElement {\n switch (entry.kind) {\n case 'user':\n return (\n <Text>\n <Text bold color=\"yellow\">{'USER: '}</Text>\n <Text color=\"white\">{entry.text}</Text>\n {entry.queued ? <Text dimColor>{' (queued)'}</Text> : null}\n {entry.pasteContent ? (\n <>\n {entry.text ? '\\n' : null}\n <Text dimColor>\n {' ↳ '}\n {entry.pasteContent}\n </Text>\n </>\n ) : null}\n </Text>\n );\n case 'assistant':\n return (\n <Box flexDirection=\"column\" marginY={1}>\n <Box flexDirection=\"row\">\n <Text bold color=\"cyan\">{'ASSISTANT: '}</Text>\n </Box>\n <Text color=\"white\">{renderMarkdownTables(entry.text, termWidth)}</Text>\n </Box>\n );\n case 'tool': {\n const argSummary = formatToolArgs(entry.name, entry.input);\n const outLines = formatToolOutput(\n entry.name,\n entry.output,\n entry.ok,\n entry.outputBytes,\n entry.outputLines,\n );\n const diff = entry.ok ? extractDiffPreview(entry.name, entry.output) : undefined;\n // Right-aligned size chip: what the MODEL actually received, not the\n // 400-char event preview. Lines (when meaningful), real bytes, and a\n // ~3.5 chars/token estimate. Skipped entirely on errors and empty\n // bodies so the success line stays clean.\n const sizeChip = (() => {\n if (!entry.ok) return '';\n const parts: string[] = [];\n if (entry.outputLines !== undefined && entry.outputLines > 0) {\n parts.push(`${entry.outputLines} L`);\n }\n if (entry.outputBytes && entry.outputBytes > 0) {\n parts.push(fmtBytes(entry.outputBytes));\n }\n if (entry.outputTokens && entry.outputTokens > 0) {\n parts.push(`≈${fmtTok(entry.outputTokens)} tok`);\n }\n return parts.join(' · ');\n })();\n return (\n <Box flexDirection=\"column\">\n <Text>\n <Text color={entry.ok ? 'green' : 'red'}>{entry.ok ? '●' : '✗'}</Text>{' '}\n <Text bold color=\"cyan\">\n {entry.name}\n </Text>\n {argSummary ? (\n <>\n <Text>{' '}</Text>\n <Text dimColor>{argSummary}</Text>\n </>\n ) : null}\n <Text dimColor>{` · ${fmtDuration(entry.durationMs)}`}</Text>\n {sizeChip ? <Text dimColor>{` · ${sizeChip}`}</Text> : null}\n </Text>\n {outLines.map((line, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: tool output lines are static, index is stable\n <Text key={i}>\n <Text dimColor>{i === outLines.length - 1 && !diff ? ' └─ ' : ' ├─ '}</Text>\n <Text\n color={!entry.ok || line.startsWith('!') ? 'red' : undefined}\n dimColor={entry.ok && !line.startsWith('!')}\n >\n {line}\n </Text>\n </Text>\n ))}\n {diff ? <DiffBlock rows={diff.rows} hidden={diff.hidden} /> : null}\n </Box>\n );\n }\n case 'info':\n return <Text dimColor>{entry.text}</Text>;\n case 'warn':\n return <Text color=\"yellow\">{entry.text}</Text>;\n case 'error':\n return <Text color=\"red\">{entry.text}</Text>;\n case 'turn-summary':\n return <Text dimColor>{entry.text}</Text>;\n case 'confirm':\n // Confirmation is handled by ConfirmPrompt component, not here.\n // This placeholder is intentionally minimal to avoid duplicating the UI.\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"yellow\" paddingX={1} marginY={1}>\n <Text bold color=\"yellow\">⚠ Confirm: {entry.toolName}</Text>\n <Text dimColor>Waiting for y / n / a / d...</Text>\n </Box>\n );\n case 'banner':\n return <Banner entry={entry} />;\n case 'subagent': {\n // One-line summary for tools/spawn/done; multi-line wrap for\n // assistant messages. The label color is stable per subagent so\n // the eye can track interleaved output from multiple agents.\n const lines = entry.text.split('\\n');\n return (\n <Box flexDirection=\"column\">\n <Text>\n <Text color={entry.agentColor} bold>\n {`[${entry.agentLabel}]`}\n </Text>\n <Text>{' '}</Text>\n <Text color={entry.agentColor}>{entry.icon}</Text>\n <Text>{' '}</Text>\n <Text>{lines[0] ?? ''}</Text>\n {entry.detail ? (\n <>\n <Text dimColor>{' · '}</Text>\n <Text dimColor>{entry.detail}</Text>\n </>\n ) : null}\n </Text>\n {lines.slice(1).map((line, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: stable line index\n <Text key={i}>\n <Text dimColor>{' '}</Text>\n <Text>{line}</Text>\n </Text>\n ))}\n </Box>\n );\n }\n }\n}\n\n/**\n * Startup splash. Renders into the Static area on mount and never\n * re-renders, so it's safe to use rich layout without worrying about\n * Ink's redraw cursor math. Keeping it inside one Box (no nested\n * borders that pull in different widths per line) keeps the frame\n * intact at any terminal width ≥ 60 cols.\n */\nfunction Banner({\n entry,\n}: {\n entry: Extract<HistoryEntry, { kind: 'banner' }>;\n}): React.ReactElement {\n const cwdShort = shortenPath(entry.cwd, 48);\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"magenta\" paddingX={2} paddingY={0}>\n <Text>\n <Text color=\"magenta\" bold>\n {' ▟▛ '}\n </Text>\n <Text color=\"magenta\" bold>\n WrongStack\n </Text>\n <Text dimColor>{' v'}</Text>\n <Text>{entry.version}</Text>\n </Text>\n <Text dimColor italic>\n {' Built on the wrong stack. Shipped anyway.'}\n </Text>\n <Text>\n <Text color=\"cyan\">{' provider '}</Text>\n <Text>\n {entry.provider}/{entry.model}\n </Text>\n </Text>\n {entry.family ? (\n <Text>\n <Text color=\"cyan\">{' family '}</Text>\n <Text dimColor>{entry.family}</Text>\n </Text>\n ) : null}\n {entry.keyTail ? (\n <Text>\n <Text color=\"cyan\">{' key '}</Text>\n <Text dimColor>{'●●●…'}</Text>\n <Text>{entry.keyTail}</Text>\n </Text>\n ) : null}\n <Text>\n <Text color=\"cyan\">{' cwd '}</Text>\n <Text dimColor>{cwdShort}</Text>\n </Text>\n <Text>\n <Text color=\"cyan\">{' hints '}</Text>\n <Text dimColor>/help · /init · /memory · /queue · /exit</Text>\n </Text>\n </Box>\n );\n}\n\nexport function shortenPath(p: string, max: number): string {\n if (p.length <= max) return p;\n // Keep the tail (closest to where the user is working).\n return `…${p.slice(p.length - (max - 1))}`;\n}\n\nconst MAX_PREVIEW = 120;\n\nexport function previewArgs(input: unknown): string {\n let s: string;\n try {\n s = typeof input === 'string' ? input : JSON.stringify(input);\n } catch {\n s = String(input);\n }\n return collapse(s, MAX_PREVIEW);\n}\n\nexport function previewOutput(output: string): string {\n return collapse(output, MAX_PREVIEW);\n}\n\nfunction collapse(s: string, max: number): string {\n const oneLine = s.replace(/\\r?\\n/g, '↵').replace(/\\s+/g, ' ').trim();\n return oneLine.length <= max ? oneLine : `${oneLine.slice(0, max - 1)}…`;\n}\n\n/** Compact thousands formatter used by the tool-size chip. 4500 → \"4.5k\",\n * 12000 → \"12k\", 1_500_000 → \"1.5M\". Keeps the chip from blowing out the\n * status line when a tool dumps a megabyte of output. */\nexport function fmtTok(n: number): string {\n if (!Number.isFinite(n) || n <= 0) return '0';\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1000) return `${(n / 1000).toFixed(n >= 10_000 ? 0 : 1)}k`;\n return String(n);\n}\n\nexport function fmtDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n const totalSec = Math.floor(ms / 1000);\n return `${Math.floor(totalSec / 60)}m${totalSec % 60}s`;\n}\n\nconst ARG_BUDGET = 60;\nconst OUT_BUDGET = 80;\n\n/**\n * Render the most useful single-line description of a tool call's\n * arguments. Each tool has the field a human cares about (path for\n * read/edit, command for bash, pattern for grep) — pick that and skip\n * the noisy JSON shape entirely. Falls back to a compact JSON preview\n * for unrecognised tools.\n */\nexport function formatToolArgs(toolName: string, input: unknown): string {\n if (!input || typeof input !== 'object') return '';\n const obj = input as Record<string, unknown>;\n\n switch (toolName) {\n case 'read':\n case 'write':\n case 'edit':\n case 'patch':\n case 'document':\n case 'list_dir':\n case 'ls':\n case 'tree': {\n const p = stringOf(obj['path']) ?? stringOf(obj['file']);\n return p ? shortenPath(p, ARG_BUDGET) : '';\n }\n case 'grep':\n case 'search':\n case 'replace': {\n const pat = stringOf(obj['pattern']) ?? stringOf(obj['query']);\n const scope = stringOf(obj['path']) ?? stringOf(obj['glob']);\n const head = pat ? `\"${truncMid(pat, 36)}\"` : '';\n const tail = scope ? ` in ${shortenPath(scope, 28)}` : '';\n return `${head}${tail}` || (stringOf(obj['command']) ?? '');\n }\n case 'glob': {\n const pat = stringOf(obj['pattern']) ?? stringOf(obj['glob']);\n return pat ? `\"${truncMid(pat, ARG_BUDGET - 2)}\"` : '';\n }\n case 'bash':\n case 'shell':\n case 'exec':\n case 'install':\n case 'git': {\n const cmd = stringOf(obj['command']) ?? stringOf(obj['args']);\n return cmd ? truncMid(cmd, ARG_BUDGET) : '';\n }\n case 'diff': {\n const files = Array.isArray(obj['files']) ? (obj['files'] as unknown[]) : undefined;\n if (files && files.length > 0) {\n const head = stringOf(files[0]) ?? '';\n const rest = files.length > 1 ? ` (+${files.length - 1})` : '';\n return head ? `${shortenPath(head, 50)}${rest}` : '';\n }\n const mode = stringOf(obj['mode']);\n return mode ? `mode: ${mode}` : '';\n }\n case 'fetch':\n case 'webfetch':\n case 'web_fetch': {\n const u = stringOf(obj['url']);\n return u ? truncMid(u, ARG_BUDGET) : '';\n }\n case 'todo': {\n const list = obj['todos'];\n if (Array.isArray(list)) return `${list.length} item${list.length === 1 ? '' : 's'}`;\n return '';\n }\n case 'lint':\n case 'format':\n case 'typecheck':\n case 'test':\n case 'audit':\n case 'outdated': {\n const files = obj['files'];\n if (Array.isArray(files) && files.length > 0) {\n const first = stringOf(files[0]);\n const more = files.length > 1 ? ` (+${files.length - 1})` : '';\n return first ? `${shortenPath(first, 50)}${more}` : `${files.length} files`;\n }\n const filter = stringOf(obj['filter']) ?? stringOf(obj['pattern']);\n return filter ? `\"${truncMid(filter, ARG_BUDGET - 2)}\"` : '';\n }\n case 'json': {\n const file = stringOf(obj['file']);\n const q = stringOf(obj['query']);\n if (file) return q ? `${shortenPath(file, 40)} ${q}` : shortenPath(file, ARG_BUDGET);\n return q ? truncMid(q, ARG_BUDGET) : '';\n }\n case 'scaffold': {\n const tmpl = stringOf(obj['template']) ?? stringOf(obj['type']);\n const name = stringOf(obj['name']);\n if (tmpl && name) return `${tmpl} → ${truncMid(name, ARG_BUDGET - tmpl.length - 4)}`;\n return name ?? tmpl ?? '';\n }\n case 'remember':\n case 'forget':\n case 'memory': {\n const key = stringOf(obj['key']) ?? stringOf(obj['name']);\n return key ? truncMid(key, ARG_BUDGET) : '';\n }\n case 'mode': {\n const m = stringOf(obj['mode']) ?? stringOf(obj['name']);\n return m ? truncMid(m, ARG_BUDGET) : '';\n }\n case 'logs': {\n const target = stringOf(obj['target']) ?? stringOf(obj['service']) ?? stringOf(obj['path']);\n return target ? truncMid(target, ARG_BUDGET) : '';\n }\n }\n\n // Generic fallback: prefer the most \"identifying\" string field, else\n // a tight JSON preview.\n for (const key of ['path', 'file', 'url', 'name', 'query', 'pattern', 'command']) {\n const v = stringOf(obj[key]);\n if (v) return truncMid(v, ARG_BUDGET);\n }\n try {\n return truncMid(JSON.stringify(obj), ARG_BUDGET);\n } catch {\n return '';\n }\n}\n\n/**\n * Distil a tool's result text into 0–N digest lines the renderer can\n * stack under the tool header. Some tools say everything in one line\n * (todo: nothing to add beyond the args); others (bash with both\n * stdout and stderr, grep with a first matching path) deserve two or\n * three. The shape is per-tool — there is no fixed budget.\n */\nexport function formatToolOutput(\n toolName: string,\n output: string | undefined,\n ok: boolean,\n /** Real bytes the model received — passed in by the Entry component so\n * read-tool / shell-tool digests can quote the true size instead of the\n * 400-char preview that `output` is capped to. */\n _outputBytes?: number,\n /** Real line count from the agent — preferred over scanning the preview\n * when present, since the preview rarely contains every prefix. */\n outputLines?: number,\n): string[] {\n if (!output) return ok ? [] : ['failed'];\n const text = output.trim();\n if (!text) return ok ? [] : ['failed'];\n\n // Try to parse JSON-shaped tool outputs (grep, glob, etc.).\n const json = tryParseJson(text);\n\n if (toolName === 'write') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const bytes = numOf(o['bytes_written']) ?? numOf(o['bytes']);\n const created = o['created'] === true;\n const tag = created ? 'created' : 'updated';\n if (bytes !== undefined) return [`${tag} · ${fmtBytes(bytes)}`];\n return [tag];\n }\n }\n\n if (toolName === 'edit') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const reps = numOf(o['replacements']);\n if (reps !== undefined) return [`${reps} replacement${reps === 1 ? '' : 's'}`];\n }\n }\n\n if (toolName === 'patch') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const applied = numOf(o['applied']);\n const rejected = numOf(o['rejected']);\n const files = Array.isArray(o['files']) ? (o['files'] as unknown[]) : undefined;\n const lines: string[] = [];\n if (applied !== undefined || rejected !== undefined) {\n const parts = [];\n if (applied !== undefined) parts.push(`${applied} applied`);\n if (rejected !== undefined && rejected > 0) parts.push(`${rejected} rejected`);\n lines.push(parts.join(' · '));\n }\n if (files && files.length > 0) {\n const first = stringOf(files[0]) ?? '';\n const more = files.length > 1 ? ` (+${files.length - 1})` : '';\n lines.push(`${shortenPath(first, 60)}${more}`);\n }\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'replace') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const files = numOf(o['files_modified']);\n const reps = numOf(o['total_replacements']);\n if (files !== undefined && reps !== undefined) {\n return [\n `${reps} replacement${reps === 1 ? '' : 's'} in ${files} file${files === 1 ? '' : 's'}`,\n ];\n }\n }\n }\n\n if (toolName === 'diff') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const files = Array.isArray(o['files']) ? (o['files'] as unknown[]) : undefined;\n const truncated = o['truncated'] === true;\n const mode = stringOf(o['mode']);\n const diff = stringOf(o['diff']);\n if (!diff) return [files && files.length === 0 ? 'no changes' : 'empty diff'];\n const head: string[] = [];\n if (mode) head.push(mode);\n if (files && files.length > 0)\n head.push(`${files.length} file${files.length === 1 ? '' : 's'}`);\n if (truncated) head.push('truncated');\n return head.length > 0 ? [head.join(' · ')] : [];\n }\n }\n\n if (toolName === 'read') {\n // When the agent supplied a real line count (new path), the size chip\n // beside the tool header already shows lines/bytes/tokens for the FULL\n // body the model received — no need to repeat misleading numbers\n // derived from the 400-char preview.\n if (outputLines !== undefined) return [];\n // Legacy fallback: derive what we can from the preview text. The byte\n // count below is the preview length, NOT what the model received, so\n // mark it as such to avoid confusion.\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const bytes = numOf(o['bytes']);\n if (bytes !== undefined) return [`${fmtBytes(bytes)} read`];\n }\n const range = scanNumberedRange(text);\n if (range.count > 0 && range.first !== undefined && range.last !== undefined) {\n if (range.first === range.last) {\n return [`L${range.first} · ${fmtBytes(text.length)}`];\n }\n const contiguous = range.count === range.last - range.first + 1;\n const head = `L${range.first}–${range.last}`;\n const tail = contiguous\n ? `${range.count} line${range.count === 1 ? '' : 's'}`\n : `${range.count} lines (gaps)`;\n return [`${head} · ${tail} · ${fmtBytes(text.length)}`];\n }\n }\n\n if (toolName === 'grep' || toolName === 'glob') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const matches = Array.isArray(o['matches']) ? (o['matches'] as unknown[]) : undefined;\n const count = numOf(o['count']) ?? matches?.length;\n const truncated = o['truncated'] === true;\n if (count !== undefined) {\n if (count === 0) return ['no matches'];\n const lines: string[] = [\n `${count} match${count === 1 ? '' : 'es'}${truncated ? ' (truncated)' : ''}`,\n ];\n // Surface the first hit so the user knows *where* without\n // opening the tool result.\n const firstHit = matches && matches.length > 0 ? formatMatchHit(matches[0]) : undefined;\n if (firstHit) lines.push(firstHit);\n return lines;\n }\n }\n }\n\n if (toolName === 'bash' || toolName === 'shell') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const exit = numOf(o['exit_code']) ?? numOf(o['exitCode']);\n const stdout = stringOf(o['stdout']) ?? '';\n const stderr = stringOf(o['stderr']) ?? '';\n const stdoutLines = countLines(stdout);\n const stderrLines = countLines(stderr);\n const head: string[] = [];\n if (exit !== undefined) head.push(`exit ${exit}`);\n const lineParts: string[] = [];\n if (stdoutLines > 0) lineParts.push(`${stdoutLines} out`);\n if (stderrLines > 0) lineParts.push(`${stderrLines} err`);\n if (lineParts.length > 0) head.push(lineParts.join(' · '));\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n const stdoutPreview = firstNonEmpty(stdout);\n const stderrPreview = firstNonEmpty(stderr);\n if (stdoutPreview) lines.push(`\"${truncMid(stdoutPreview, 70)}\"`);\n if (stderrPreview && stderrPreview !== stdoutPreview) {\n lines.push(`! \"${truncMid(stderrPreview, 70)}\"`);\n }\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'todo') {\n // The arg summary already says \"N items\" — repeating \"updated\" is\n // noise, so emit nothing on success.\n return ok ? [] : [text.split('\\n')[0] ?? ''];\n }\n\n if (toolName === 'fetch' || toolName === 'webfetch' || toolName === 'web_fetch') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const status = numOf(o['status']);\n const ct = stringOf(o['content_type']);\n const url = stringOf(o['url']);\n const content = stringOf(o['content']);\n const head: string[] = [];\n if (status !== undefined) head.push(`HTTP ${status}`);\n if (ct) head.push(ct.split(';')[0] ?? ct);\n if (content) head.push(fmtBytes(Buffer.byteLength(content, 'utf8')));\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n if (url && status !== undefined && (status < 200 || status >= 400)) {\n lines.push(shortenPath(url, 70));\n }\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'git') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const exit = numOf(o['exitCode']) ?? numOf(o['exit_code']);\n const stdout = stringOf(o['stdout']) ?? '';\n const stderr = stringOf(o['stderr']) ?? '';\n const head: string[] = [];\n if (exit !== undefined) head.push(`exit ${exit}`);\n const stdoutLines = countLines(stdout);\n const stderrLines = countLines(stderr);\n const lparts: string[] = [];\n if (stdoutLines > 0) lparts.push(`${stdoutLines} out`);\n if (stderrLines > 0) lparts.push(`${stderrLines} err`);\n if (lparts.length > 0) head.push(lparts.join(' · '));\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n const preview = firstNonEmpty(stdout) ?? firstNonEmpty(stderr);\n if (preview) lines.push(`\"${truncMid(preview, 70)}\"`);\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'lint') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const linter = stringOf(o['linter']);\n const files = numOf(o['files_checked']);\n const errors = numOf(o['errors']) ?? 0;\n const warnings = numOf(o['warnings']) ?? 0;\n const fix = o['fix_applied'] === true;\n const head: string[] = [];\n if (linter && linter !== 'none') head.push(linter);\n head.push(`${errors} error${errors === 1 ? '' : 's'}`);\n head.push(`${warnings} warning${warnings === 1 ? '' : 's'}`);\n if (files !== undefined) head.push(`${files} file${files === 1 ? '' : 's'}`);\n if (fix) head.push('fixed');\n return [head.join(' · ')];\n }\n }\n\n if (toolName === 'format') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const fixer = stringOf(o['fixer']);\n const checked = numOf(o['files_checked']);\n const changed = numOf(o['files_changed']);\n const head: string[] = [];\n if (fixer && fixer !== 'none') head.push(fixer);\n if (changed !== undefined && checked !== undefined) {\n head.push(`${changed}/${checked} changed`);\n } else if (changed !== undefined) {\n head.push(`${changed} changed`);\n }\n return head.length > 0 ? [head.join(' · ')] : [];\n }\n }\n\n if (toolName === 'typecheck') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const exit = numOf(o['exit_code']) ?? numOf(o['exitCode']);\n const errors = numOf(o['errors']);\n const head: string[] = [];\n if (errors !== undefined) head.push(`${errors} error${errors === 1 ? '' : 's'}`);\n if (exit !== undefined) head.push(`exit ${exit}`);\n const stdout = stringOf(o['output']) ?? stringOf(o['stdout']) ?? '';\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n const preview = firstNonEmpty(stdout);\n if (preview && (!errors || errors > 0)) lines.push(`\"${truncMid(preview, 70)}\"`);\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'test') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const runner = stringOf(o['runner']);\n const total = numOf(o['tests_run']) ?? 0;\n const passed = numOf(o['passed']) ?? 0;\n const failed = numOf(o['failed']) ?? 0;\n const duration = numOf(o['duration_ms']);\n const head: string[] = [];\n if (runner && runner !== 'none') head.push(runner);\n head.push(`${passed}/${total} passed`);\n if (failed > 0) head.push(`${failed} failed`);\n if (duration !== undefined) head.push(fmtDuration(duration));\n return [head.join(' · ')];\n }\n }\n\n if (toolName === 'audit') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const total = numOf(o['total']) ?? 0;\n const summary = stringOf(o['summary']);\n if (total === 0) return ['no vulnerabilities'];\n const head = `${total} vulnerabilit${total === 1 ? 'y' : 'ies'}`;\n return summary && summary.toLowerCase() !== head.toLowerCase()\n ? [head, truncMid(summary, OUT_BUDGET)]\n : [head];\n }\n }\n\n if (toolName === 'outdated') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const total = numOf(o['total']) ?? 0;\n const pkgs = Array.isArray(o['packages']) ? (o['packages'] as unknown[]) : undefined;\n if (total === 0) return ['all up to date'];\n const lines: string[] = [`${total} outdated`];\n if (pkgs && pkgs.length > 0) {\n const first = pkgs[0];\n if (first && typeof first === 'object') {\n const p = first as Record<string, unknown>;\n const name = stringOf(p['name']) ?? stringOf(p['package']);\n const cur = stringOf(p['current']);\n const wanted = stringOf(p['wanted']) ?? stringOf(p['latest']);\n if (name && cur && wanted) lines.push(`${name}: ${cur} → ${wanted}`);\n else if (name) lines.push(name);\n }\n }\n return lines;\n }\n }\n\n if (toolName === 'tree') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const files = numOf(o['total_files']);\n const dirs = numOf(o['total_dirs']);\n const truncated = o['truncated'] === true;\n const parts: string[] = [];\n if (files !== undefined) parts.push(`${files} file${files === 1 ? '' : 's'}`);\n if (dirs !== undefined) parts.push(`${dirs} dir${dirs === 1 ? '' : 's'}`);\n if (truncated) parts.push('truncated');\n return parts.length > 0 ? [parts.join(' · ')] : [];\n }\n }\n\n if (toolName === 'json') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const err = stringOf(o['error']);\n if (err) return [truncMid(err, OUT_BUDGET)];\n const type = stringOf(o['type']);\n const keys = Array.isArray(o['keys']) ? (o['keys'] as unknown[]) : undefined;\n const parts: string[] = [];\n if (type) parts.push(type);\n if (keys) parts.push(`${keys.length} key${keys.length === 1 ? '' : 's'}`);\n return parts.length > 0 ? [parts.join(' · ')] : [];\n }\n }\n\n if (toolName === 'install') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const exit = numOf(o['exit_code']) ?? numOf(o['exitCode']);\n const added = numOf(o['added']);\n const removed = numOf(o['removed']);\n const head: string[] = [];\n if (exit !== undefined) head.push(`exit ${exit}`);\n if (added !== undefined) head.push(`+${added}`);\n if (removed !== undefined) head.push(`-${removed}`);\n const stdout = stringOf(o['stdout']) ?? stringOf(o['output']) ?? '';\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n const preview = firstNonEmpty(stdout);\n if (preview) lines.push(`\"${truncMid(preview, 70)}\"`);\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'scaffold') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const created = Array.isArray(o['created']) ? (o['created'] as unknown[]) : undefined;\n const skipped = Array.isArray(o['skipped']) ? (o['skipped'] as unknown[]) : undefined;\n const parts: string[] = [];\n if (created !== undefined) parts.push(`${created.length} created`);\n if (skipped !== undefined && skipped.length > 0) parts.push(`${skipped.length} skipped`);\n if (parts.length > 0) return [parts.join(' · ')];\n }\n }\n\n if (toolName === 'remember' || toolName === 'forget' || toolName === 'memory') {\n return ok ? [toolName === 'forget' ? 'removed' : 'saved'] : [text.split('\\n')[0] ?? ''];\n }\n\n if (toolName === 'mode') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const mode = stringOf(o['mode']) ?? stringOf(o['active']) ?? stringOf(o['name']);\n if (mode) return [`mode: ${mode}`];\n }\n }\n\n if (toolName === 'search') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const matches = Array.isArray(o['matches'])\n ? (o['matches'] as unknown[])\n : Array.isArray(o['results'])\n ? (o['results'] as unknown[])\n : undefined;\n const count = numOf(o['count']) ?? matches?.length;\n if (count !== undefined) {\n if (count === 0) return ['no results'];\n const lines: string[] = [`${count} result${count === 1 ? '' : 's'}`];\n const firstHit = matches && matches.length > 0 ? formatMatchHit(matches[0]) : undefined;\n if (firstHit) lines.push(firstHit);\n return lines;\n }\n }\n }\n\n if (toolName === 'logs') {\n const lines = text.split('\\n').filter((l) => l.trim());\n if (lines.length === 0) return [];\n const head = `${lines.length} line${lines.length === 1 ? '' : 's'}`;\n const lastLine = lines[lines.length - 1];\n return lastLine ? [head, `\"${truncMid(lastLine.trim(), 70)}\"`] : [head];\n }\n\n // Generic fallback.\n //\n // Earlier we just grabbed the first non-empty line. That broke\n // catastrophically for tools that return pretty-printed JSON (most\n // notably `delegate`): `JSON.stringify(obj, null, 2)` starts with a\n // bare `{` on line 1, so the preview rendered as `└─ {` and the\n // user couldn't see WHY the subagent finished — defeating the whole\n // point of the chip.\n //\n // New behavior:\n // 1. If the text parses as a JSON object, surface up to GENERIC_KV_KEYS\n // of its most informative keys inline (`ok=false · status=timeout\n // · iterations=12 · error=\"...\"`).\n // 2. Otherwise collapse ALL whitespace into single spaces (no more\n // \"first line only\" trap) and render up to GENERIC_BUDGET chars.\n if (json && typeof json === 'object' && !Array.isArray(json)) {\n const summary = summarizeJsonObject(json as Record<string, unknown>);\n if (summary) return [summary];\n }\n const collapsed = text.replace(/\\s+/g, ' ').trim();\n return [truncMid(collapsed, GENERIC_BUDGET)];\n}\n\nconst GENERIC_BUDGET = 240;\n\n/**\n * Build a one-line \"key=value · key=value …\" preview for a JSON-shaped\n * tool result. Prioritises fields the user cares about: status flags,\n * error/result fields, then everything else by appearance order. Stops\n * once the rendered preview hits the budget.\n */\nfunction summarizeJsonObject(obj: Record<string, unknown>): string | null {\n const keys = Object.keys(obj);\n if (keys.length === 0) return null;\n // Reorder: status-y keys first (so a failure/timeout reads obviously),\n // then narrative fields (result/error/message), then the rest.\n const priority = [\n 'ok',\n 'status',\n 'timedOut',\n 'stopReason',\n 'reason',\n 'error',\n 'message',\n 'result',\n 'summary',\n 'iterations',\n 'toolCalls',\n 'durationMs',\n 'subagentId',\n 'taskId',\n ];\n const ordered = [\n ...priority.filter((k) => keys.includes(k)),\n ...keys.filter((k) => !priority.includes(k)),\n ];\n const parts: string[] = [];\n let used = 0;\n for (const key of ordered) {\n const v = obj[key];\n if (v === undefined || v === null) continue;\n const rendered =\n typeof v === 'string'\n ? `${key}=\"${truncMid(v.replace(/\\s+/g, ' '), 80)}\"`\n : typeof v === 'number' || typeof v === 'boolean'\n ? `${key}=${v}`\n : Array.isArray(v)\n ? `${key}=[${v.length}]`\n : `${key}={…}`;\n if (used + rendered.length > GENERIC_BUDGET) {\n parts.push('…');\n break;\n }\n parts.push(rendered);\n used += rendered.length + 3; // \" · \" separator\n }\n return parts.length > 0 ? parts.join(' · ') : null;\n}\n\nfunction firstNonEmpty(text: string): string | undefined {\n if (!text) return undefined;\n const line = text.split('\\n').find((l) => l.trim());\n return line ? line.replace(/\\s+/g, ' ').trim() : undefined;\n}\n\nfunction formatMatchHit(hit: unknown): string | undefined {\n if (typeof hit === 'string') return truncMid(hit, 70);\n if (hit && typeof hit === 'object') {\n const o = hit as Record<string, unknown>;\n const file = stringOf(o['file']) ?? stringOf(o['path']);\n const line = numOf(o['line']) ?? numOf(o['lineNumber']);\n const snippet = stringOf(o['text']) ?? stringOf(o['match']) ?? stringOf(o['preview']);\n if (file) {\n const head = line !== undefined ? `${shortenPath(file, 40)}:${line}` : shortenPath(file, 50);\n return snippet ? `${head} ${truncMid(snippet.replace(/\\s+/g, ' '), 40)}` : head;\n }\n if (snippet) return truncMid(snippet, 70);\n }\n return undefined;\n}\n\nexport type DiffLineKind = 'add' | 'del' | 'hunk' | 'ctx' | 'meta';\n\nexport interface DiffLineRow {\n kind: DiffLineKind;\n text: string;\n oldLine?: number;\n newLine?: number;\n}\n\nconst DIFF_MAX_LINES = 8;\n\n/**\n * Pull a unified-diff string out of a tool's JSON output, then turn it\n * into a small, structured preview suitable for colour-coded rendering\n * in the TUI history. We cap at ~8 lines so a giant patch doesn't\n * dominate the chat scrollback; the renderer surfaces the hidden count.\n */\nexport function extractDiffPreview(\n toolName: string,\n output: string | undefined,\n): { rows: DiffLineRow[]; hidden: number } | undefined {\n if (!output) return undefined;\n const text = output.trim();\n if (!text) return undefined;\n\n let diff: string | undefined;\n if (toolName === 'edit' || toolName === 'diff') {\n const parsed = tryParseJson(text);\n if (parsed && typeof parsed === 'object') {\n diff = stringOf((parsed as Record<string, unknown>)['diff']);\n }\n } else if (toolName === 'patch') {\n const parsed = tryParseJson(text);\n if (parsed && typeof parsed === 'object') {\n diff =\n stringOf((parsed as Record<string, unknown>)['diff']) ??\n stringOf((parsed as Record<string, unknown>)['stdout']);\n } else if (text.includes('@@') || text.startsWith('---')) {\n diff = text;\n }\n }\n\n if (!diff || !diff.trim() || diff.startsWith('(no-op')) return undefined;\n return parseUnifiedDiff(diff, DIFF_MAX_LINES);\n}\n\nfunction parseUnifiedDiff(diff: string, maxLines: number): { rows: DiffLineRow[]; hidden: number } {\n const all: DiffLineRow[] = [];\n // Counters advance as we walk through a hunk so each row can carry its\n // line number in the source/target file. Reset whenever we see a new @@.\n let oldLn = 0;\n let newLn = 0;\n for (const raw of diff.split('\\n')) {\n const line = raw.replace(/\\r$/, '');\n if (line.startsWith('+++') || line.startsWith('---')) continue;\n if (line.startsWith('diff --git') || line.startsWith('index ')) continue;\n if (line.startsWith('@@')) {\n const m = line.match(/^@@\\s+-(\\d+)(?:,\\d+)?\\s+\\+(\\d+)(?:,\\d+)?\\s+@@/);\n if (m) {\n oldLn = Number.parseInt(m[1] ?? '0', 10) || 0;\n newLn = Number.parseInt(m[2] ?? '0', 10) || 0;\n }\n all.push({ kind: 'hunk', text: truncMid(line, 60) });\n continue;\n }\n if (line.startsWith('+')) {\n all.push({ kind: 'add', text: truncMid(line, 100), newLine: newLn });\n newLn++;\n continue;\n }\n if (line.startsWith('-')) {\n all.push({ kind: 'del', text: truncMid(line, 100), oldLine: oldLn });\n oldLn++;\n continue;\n }\n if (line.startsWith('\\\\ No newline')) {\n all.push({ kind: 'meta', text: line });\n continue;\n }\n if (line.length === 0) continue;\n all.push({ kind: 'ctx', text: truncMid(line, 100), oldLine: oldLn, newLine: newLn });\n oldLn++;\n newLn++;\n }\n if (all.length === 0) return { rows: [], hidden: 0 };\n if (all.length <= maxLines) return { rows: all, hidden: 0 };\n return { rows: all.slice(0, maxLines), hidden: all.length - maxLines };\n}\n\nfunction stringOf(v: unknown): string | undefined {\n return typeof v === 'string' && v.length > 0 ? v : undefined;\n}\n\nfunction numOf(v: unknown): number | undefined {\n return typeof v === 'number' && Number.isFinite(v) ? v : undefined;\n}\n\nfunction tryParseJson(s: string): unknown {\n const t = s.trimStart();\n if (!t.startsWith('{') && !t.startsWith('[')) return undefined;\n try {\n return JSON.parse(s);\n } catch {\n return undefined;\n }\n}\n\nfunction scanNumberedRange(text: string): { first?: number; last?: number; count: number } {\n let first: number | undefined;\n let last: number | undefined;\n let count = 0;\n for (const line of text.split('\\n')) {\n const m = line.match(/^\\s*(\\d+)→/);\n if (m?.[1]) {\n const n = Number.parseInt(m[1], 10);\n if (Number.isFinite(n)) {\n if (first === undefined) first = n;\n last = n;\n count++;\n }\n }\n }\n return { first, last, count };\n}\n\nfunction countLines(text: string): number {\n if (!text) return 0;\n return text.replace(/\\n$/, '').split('\\n').length;\n}\n\nfunction fmtBytes(n: number): string {\n if (n < 1024) return `${n}B`;\n if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)}KB`;\n return `${(n / (1024 * 1024)).toFixed(1)}MB`;\n}\n\nfunction truncMid(s: string, max: number): string {\n if (s.length <= max) return s;\n return `${s.slice(0, max - 1)}…`;\n}\n","import { Box, Text, useInput, useStdin } from 'ink';\nimport type React from 'react';\nimport { useEffect } from 'react';\nimport type { ReactNode } from 'react';\n\nexport interface InputProps {\n prompt?: string;\n value: string;\n cursor: number;\n placeholders: string[];\n disabled?: boolean;\n hint?: string;\n onKey: (input: string, key: KeyEvent) => void;\n}\n\nexport interface KeyEvent {\n upArrow: boolean;\n downArrow: boolean;\n leftArrow: boolean;\n rightArrow: boolean;\n return: boolean;\n escape: boolean;\n ctrl: boolean;\n meta: boolean;\n shift: boolean;\n tab: boolean;\n backspace: boolean;\n delete: boolean;\n pageUp: boolean;\n pageDown: boolean;\n home: boolean;\n end: boolean;\n}\n\n// Ink 5.x useInput does not expose home/end as boolean flags even though\n// parseKeypress recognizes them. We subscribe to raw stdin to catch these.\nfunction isHomeEnd(data: string): 'home' | 'end' | null {\n // Common terminal sequences for Home/End.\n // CSI H / CSI F are the most universal; the longer variants are fallbacks.\n if (\n data === '\\x1b[H' ||\n data === '\\x1b[1~' ||\n data === '\\x1bOH' ||\n data === '\\x1b[7~'\n )\n return 'home';\n if (\n data === '\\x1b[F' ||\n data === '\\x1b[4~' ||\n data === '\\x1bOF' ||\n data === '\\x1b[8~'\n )\n return 'end';\n return null;\n}\n\nconst EMPTY_KEY: KeyEvent = {\n upArrow: false,\n downArrow: false,\n leftArrow: false,\n rightArrow: false,\n return: false,\n escape: false,\n ctrl: false,\n meta: false,\n shift: false,\n tab: false,\n backspace: false,\n delete: false,\n pageUp: false,\n pageDown: false,\n home: false,\n end: false,\n};\n\nexport function Input({\n prompt = '› ',\n value,\n cursor,\n placeholders,\n disabled,\n hint,\n onKey,\n}: InputProps): React.ReactElement {\n useInput((input, key) => {\n if (disabled) return;\n onKey(input, key as KeyEvent);\n });\n\n // Catch Home/End that Ink's useInput doesn't surface.\n const { stdin } = useStdin();\n useEffect(() => {\n if (!stdin || disabled) return;\n const handleData = (data: Buffer) => {\n const kind = isHomeEnd(data.toString());\n if (kind === 'home') onKey('', { ...EMPTY_KEY, home: true });\n else if (kind === 'end') onKey('', { ...EMPTY_KEY, end: true });\n };\n stdin.on('data', handleData);\n return () => {\n stdin.off('data', handleData);\n };\n }, [stdin, disabled, onKey]);\n\n const before = value.slice(0, cursor);\n const at = value.slice(cursor, cursor + 1) || ' ';\n const after = value.slice(cursor + 1);\n\n // Disabled (aborting an iteration) is the only signal that needs a\n // hard visual cue — paint the prompt red. We avoid wrapping the input\n // in a border Box: Ink redraws the live area on every state change,\n // and in non-altScreen mode the previous frame's border is left in\n // the terminal's scrollback. A `> ` prompt + inverse cursor is enough\n // to indicate the input row.\n const promptColor = disabled ? 'red' : 'cyan';\n\n return (\n <Box flexDirection=\"column\">\n {placeholders.map((p, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: placeholders are append-only, index is stable\n <Text key={i} dimColor>\n {' ↳ '}\n {p}\n </Text>\n ))}\n {/* Single <Text> wrapper so prompt + buffer + cursor + tail all wrap\n as one continuous string. Splitting them across sibling Text\n elements would let each piece wrap independently and shift the\n cursor cell off the intended character. */}\n <Text>\n <Text color={promptColor}>{prompt}</Text>\n {before}\n <Text inverse>{at}</Text>\n {after}\n </Text>\n {hint ? <Text dimColor>{hint}</Text> : null}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { FleetEntry } from '../app.js';\n\nexport interface LiveActivityStripProps {\n /** Per-subagent state from the FleetEntry table. */\n entries: Record<string, FleetEntry>;\n /** Re-renders every tick so elapsed timers stay live; otherwise the\n * bar freezes between FleetEntry updates (which can be 30s+ apart\n * if a subagent is parked in one tool). */\n nowTick: number;\n /** Optional cap on rows so a 20-subagent fleet doesn't push the\n * input off-screen. Default 4 — matches the status bar's 4th line. */\n maxRows?: number;\n}\n\nfunction fmtElapsed(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n const m = Math.floor(ms / 60_000);\n const s = Math.floor((ms % 60_000) / 1000);\n return `${m}m${s.toString().padStart(2, '0')}s`;\n}\n\nfunction fmtBytes(n: number): string {\n if (n < 1024) return `${n}B`;\n return `${(n / 1024).toFixed(1)}KB`;\n}\n\nfunction fmtRecentTool(tool: FleetEntry['recentTools'][number]): string {\n const status = tool.ok === false ? 'fail' : 'ok';\n const name = tool.name.length > 18 ? `${tool.name.slice(0, 17)}...` : tool.name;\n const parts = [status, name];\n if (typeof tool.durationMs === 'number') parts.push(fmtElapsed(tool.durationMs));\n if (typeof tool.outputBytes === 'number' && tool.outputBytes > 0) parts.push(fmtBytes(tool.outputBytes));\n if (typeof tool.outputLines === 'number' && tool.outputLines > 0) parts.push(`${tool.outputLines}L`);\n return parts.join(' ');\n}\n\nfunction fmtRecentMessage(message: FleetEntry['recentMessages'][number]): string {\n const text = message.text.replace(/\\s+/g, ' ');\n return text.length > 48 ? `${text.slice(0, 47)}...` : text;\n}\n\n/**\n * Compact one-line-per-subagent strip that sits directly above the\n * input area. Shows only RUNNING subagents — completed/failed entries\n * already surfaced as history rows and don't need to crowd the\n * always-visible band.\n *\n * Each row carries: `→ <label> <currentTool?> (elapsed) · <iter>it\n * <tool>tc`. The currentTool segment updates on `tool.started` /\n * `tool.executed` so the user can tell at a glance \"AGENT#1 has been\n * inside `bash` for 12s now\" without grep-tailing the JSONL.\n *\n * Renders nothing when no subagents are running, so the input area\n * sits flush against history during idle / solo work.\n */\nexport function LiveActivityStrip({\n entries,\n nowTick,\n maxRows = 4,\n}: LiveActivityStripProps): React.ReactElement | null {\n const running = Object.values(entries)\n .filter((e) => e.status === 'running')\n // Stable order: oldest-started first, so the strip doesn't shuffle\n // every time a tool starts/ends on one of the rows.\n .sort((a, b) => a.startedAt - b.startedAt)\n .slice(0, maxRows);\n if (running.length === 0) return null;\n\n // Reference nowTick so React knows we depend on it — otherwise the\n // 1s ticker won't re-render the elapsed values.\n void nowTick;\n const now = Date.now();\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n {running.map((e) => {\n const toolElapsed = e.currentTool ? now - e.currentTool.startedAt : 0;\n const taskElapsed = now - e.startedAt;\n const toolSeg = e.currentTool\n ? `→ ${e.currentTool.name} (${fmtElapsed(toolElapsed)})`\n : 'idle between tools';\n const recentTools = (e.recentTools ?? []).slice(-2).map(fmtRecentTool).join(' | ');\n const messageText =\n e.streamingText.trim() || (e.recentMessages ?? []).slice(-1).map(fmtRecentMessage).join('');\n return (\n <Box key={e.id} flexDirection=\"row\" gap={1}>\n <Text color=\"cyan\">●</Text>\n <Text>{e.name.slice(0, 14).padEnd(14)}</Text>\n <Text dimColor>·</Text>\n <Text color={e.currentTool ? 'green' : 'yellow'}>{toolSeg}</Text>\n <Text dimColor>·</Text>\n <Text dimColor>\n {e.iterations}it {e.toolCalls}tc · {fmtElapsed(taskElapsed)}\n </Text>\n {recentTools ? (\n <>\n <Text dimColor>|</Text>\n <Text dimColor>last: {recentTools}</Text>\n </>\n ) : null}\n {messageText ? (\n <>\n <Text dimColor>|</Text>\n <Text dimColor>msg: {fmtRecentMessage({ text: messageText, at: Date.now() })}</Text>\n </>\n ) : null}\n </Box>\n );\n })}\n {Object.values(entries).filter((e) => e.status === 'running').length > maxRows ? (\n <Box paddingLeft={2}>\n <Text dimColor>\n …+{Object.values(entries).filter((e) => e.status === 'running').length - maxRows} more\n </Text>\n </Box>\n ) : null}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\r\nimport type React from 'react';\r\n\r\nexport interface AutonomyOption {\r\n mode: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';\r\n label: string;\r\n description: string;\r\n color: string;\r\n}\r\n\r\nexport interface AutonomyPickerProps {\r\n options: AutonomyOption[];\r\n selected: number;\r\n hint?: string;\r\n}\r\n\r\nexport const AUTONOMY_OPTIONS: AutonomyOption[] = [\r\n { mode: 'off', label: 'OFF', description: 'Agent stops after each turn (normal interactive mode)', color: 'green' },\r\n { mode: 'suggest', label: 'SUGGEST', description: 'Shows next-step suggestions after each turn', color: 'cyan' },\r\n { mode: 'auto', label: 'AUTO', description: 'Self-driving — agent picks next step and continues', color: 'yellow' },\r\n { mode: 'eternal', label: 'ETERNAL', description: 'Goal-driven loop — requires /goal set first', color: 'red' },\r\n { mode: 'eternal-parallel', label: 'PARALLEL', description: 'Fan-out 4–8 subagents per tick — requires /goal', color: 'magenta' },\r\n];\r\n\r\nexport function AutonomyPicker({ options, selected, hint }: AutonomyPickerProps): React.ReactElement {\r\n return (\r\n <Box flexDirection=\"column\" paddingX={1}>\r\n <Text color=\"cyan\" bold>\r\n ━━ Autonomy Mode ━━\r\n </Text>\r\n <Text dimColor>↑/↓ navigate · Enter select · Esc cancel · Ctrl+C exit</Text>\r\n {options.map((opt, i) => (\r\n <Text key={opt.mode} color={i === selected ? opt.color : undefined} inverse={i === selected}>\r\n {i === selected ? '› ' : ' '}\r\n <Text bold>{opt.label.padEnd(12)}</Text>\r\n <Text dimColor>{opt.description}</Text>\r\n </Text>\r\n ))}\r\n {hint ? <Text color=\"yellow\">{hint}</Text> : null}\r\n </Box>\r\n );\r\n}","import { Box, Text } from 'ink';\nimport type React from 'react';\n\nexport interface ProviderOption {\n id: string;\n family: string;\n /** Model ids the picker offers in step 2 for this provider. */\n models: string[];\n /** Optional dim hint shown next to the model list (e.g. \"from saved config\"). */\n modelsLabel?: string;\n}\n\nexport interface ModelPickerProps {\n step: 'provider' | 'model';\n providerOptions: ProviderOption[];\n modelOptions: string[];\n selected: number;\n pickedProviderId?: string;\n /** Status hint (e.g. error from a failed switch attempt) shown at the bottom. */\n hint?: string;\n}\n\n/**\n * Two-step Ink overlay for the TUI's `/model` command.\n * Step 1: pick a provider that has a key.\n * Step 2: pick a model bound to that provider.\n *\n * Driven entirely by props — App owns the cursor state and key events.\n * Render is intentionally compact; the host frames it in a single Box.\n */\nexport function ModelPicker({\n step,\n providerOptions,\n modelOptions,\n selected,\n pickedProviderId,\n hint,\n}: ModelPickerProps): React.ReactElement {\n if (step === 'provider') {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text color=\"cyan\" bold>\n ━━ Switch model — Step 1/2: Pick provider ━━\n </Text>\n <Text dimColor>↑/↓ navigate · Enter select · Esc cancel · Ctrl+C exit</Text>\n {providerOptions.length === 0 ? (\n <Text dimColor>(no providers with keys — add one via `wstack auth`)</Text>\n ) : (\n providerOptions.map((p, i) => (\n <Text key={p.id} color={i === selected ? 'cyan' : undefined} inverse={i === selected}>\n {i === selected ? '› ' : ' '}\n <Text bold>{p.id.padEnd(28)}</Text>\n <Text dimColor> [{p.family}]</Text>\n <Text dimColor>\n {' '}\n {p.models.length} model{p.models.length === 1 ? '' : 's'}\n </Text>\n </Text>\n ))\n )}\n {hint ? <Text color=\"yellow\">{hint}</Text> : null}\n </Box>\n );\n }\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text color=\"cyan\" bold>\n ━━ Switch model — Step 2/2: Pick model ({pickedProviderId}) ━━\n </Text>\n <Text dimColor>↑/↓ navigate · Enter select · Esc back · Ctrl+C exit</Text>\n {modelOptions.length === 0 ? (\n <Text dimColor>(no models known for this provider)</Text>\n ) : (\n modelOptions.map((id, i) => (\n <Text key={id} color={i === selected ? 'cyan' : undefined} inverse={i === selected}>\n {i === selected ? '› ' : ' '}\n {id}\n </Text>\n ))\n )}\n {hint ? <Text color=\"yellow\">{hint}</Text> : null}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { SlashCommandMatch } from '../app.js';\n\nexport interface SlashMenuProps {\n query: string;\n matches: SlashCommandMatch[];\n selected: number;\n}\n\nexport function SlashMenu({ query, matches, selected }: SlashMenuProps): React.ReactElement {\n const placeholder = query ? `/${query}` : '/';\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text dimColor>\n {placeholder || '/'} — ↑/↓ select, Enter dispatch, Tab autocomplete, Esc close\n </Text>\n {matches.map((m, i) => (\n <Text key={m.name} color={i === selected ? 'cyan' : undefined} inverse={i === selected}>\n {i === selected ? '› ' : ' '}\n <Text bold>{m.name}</Text>\n {m.argsHint ? <Text dimColor> {m.argsHint}</Text> : null}\n <Text dimColor> — {m.description}</Text>\n </Text>\n ))}\n {matches.length === 0 && <Text dimColor>No matching commands</Text>}\n </Box>\n );\n}\n","import type { Dirent } from 'node:fs';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\nconst IGNORED_DIRS = new Set([\n 'node_modules',\n '.git',\n 'dist',\n 'build',\n '.next',\n '.turbo',\n '.cache',\n 'coverage',\n '.idea',\n '.vscode',\n]);\n\nconst MAX_FILES_INDEXED = 5000;\nconst MAX_DEPTH = 8;\n\nlet cache: { root: string; files: string[]; loadedAt: number } | null = null;\nconst CACHE_TTL_MS = 30_000;\n\nasync function loadIndex(root: string): Promise<string[]> {\n const now = Date.now();\n if (cache && cache.root === root && now - cache.loadedAt < CACHE_TTL_MS) {\n return cache.files;\n }\n const files: string[] = [];\n await walk(root, '', 0, files);\n files.sort();\n cache = { root, files, loadedAt: now };\n return files;\n}\n\nasync function walk(root: string, rel: string, depth: number, out: string[]): Promise<void> {\n if (out.length >= MAX_FILES_INDEXED) return;\n if (depth > MAX_DEPTH) return;\n const dir = rel ? path.join(root, rel) : root;\n let entries: Dirent[];\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const e of entries) {\n if (out.length >= MAX_FILES_INDEXED) return;\n if (e.name.startsWith('.') && e.name !== '.env.example') continue;\n if (IGNORED_DIRS.has(e.name)) continue;\n const next = rel ? `${rel}/${e.name}` : e.name;\n if (e.isDirectory()) {\n await walk(root, next, depth + 1, out);\n } else if (e.isFile()) {\n out.push(next);\n }\n }\n}\n\n/**\n * Subsequence (fuzzy) match — each character of `query` must appear in `s`\n * in order. Lower scores rank earlier. Score combines:\n * - shorter match span (chars close together = better)\n * - earlier first-match offset\n * - shorter total path length\n */\nfunction score(s: string, query: string): number | null {\n if (!query) return s.length;\n const ql = query.toLowerCase();\n const sl = s.toLowerCase();\n let si = 0;\n let firstHit = -1;\n let lastHit = -1;\n for (let qi = 0; qi < ql.length; qi++) {\n const c = ql.charCodeAt(qi);\n while (si < sl.length && sl.charCodeAt(si) !== c) si++;\n if (si >= sl.length) return null;\n if (firstHit < 0) firstHit = si;\n lastHit = si;\n si++;\n }\n const span = lastHit - firstHit;\n return span * 100 + firstHit * 2 + s.length;\n}\n\nexport async function searchFiles(root: string, query: string, limit = 8): Promise<string[]> {\n const all = await loadIndex(root);\n if (!query) return all.slice(0, limit);\n const scored: { path: string; score: number }[] = [];\n for (const f of all) {\n const sc = score(f, query);\n if (sc !== null) scored.push({ path: f, score: sc });\n }\n scored.sort((a, b) => a.score - b.score);\n return scored.slice(0, limit).map((x) => x.path);\n}\n\nexport function invalidateFileCache(): void {\n cache = null;\n}\n","// Bracketed-paste accumulation, factored out of the TUI key handler so the\n// (fiddly) marker logic can be unit-tested in isolation.\n//\n// A terminal in bracketed-paste mode wraps pasted text as\n// `\\x1b[200~<content>\\x1b[201~`. The OS/terminal can split that across\n// several stdin reads, and Ink's keypress parser sometimes strips the ESC\n// byte — leaving a bare `[200~` / `[201~`. So we:\n// - detect both the ESC-prefixed and bare marker forms,\n// - buffer fragments across calls until the closing marker arrives,\n// - hand back the fully-assembled payload exactly once.\n\nconst BEGIN = '[200~';\nconst END = '[201~';\n// biome-ignore lint/suspicious/noControlCharactersInRegex: paste markers carry a literal ESC\nconst BEGIN_RE = /\\x1b?\\[200~/g;\n// biome-ignore lint/suspicious/noControlCharactersInRegex: paste markers carry a literal ESC\nconst END_RE = /\\x1b?\\[201~/g;\n\nexport interface PasteFeedResult {\n /** New accumulator state: a string while mid-paste, `null` when idle. */\n accum: string | null;\n /**\n * The fully-assembled paste payload when an end marker closed it, else\n * `null` (still buffering).\n */\n complete: string | null;\n}\n\n/**\n * Feed one keypress fragment into the paste accumulator.\n *\n * @param accum current accumulator (`null` when not inside a paste)\n * @param input the raw keypress string for this event\n * @returns `null` when `input` is not part of a paste (the caller should\n * handle it as normal input); otherwise the updated accumulation state.\n */\nexport function feedPaste(accum: string | null, input: string): PasteFeedResult | null {\n if (accum === null && !input.includes(BEGIN)) return null;\n const piece = input.replace(BEGIN_RE, '').replace(END_RE, '');\n const next = (accum ?? '') + piece;\n if (input.includes(END)) return { accum: null, complete: next };\n return { accum: next, complete: null };\n}\n","import { spawn } from 'node:child_process';\nimport { buildChildEnv } from '@wrongstack/core';\n\nexport interface GitInfo {\n branch: string;\n /** Total lines added in working tree vs HEAD (staged + unstaged). */\n added: number;\n /** Total lines deleted in working tree vs HEAD (staged + unstaged). */\n deleted: number;\n /** Count of untracked files in the working tree. */\n untracked: number;\n}\n\n/**\n * Read git branch + change summary for the given cwd. Returns `null`\n * when the directory isn't a git repository or git isn't installed —\n * the status bar just hides the git chip in that case.\n *\n * Spawns two short-lived `git` processes in parallel. Cheap enough to\n * call on a 3–5 second interval; the caller is responsible for the\n * cadence (this function is purely fire-and-result).\n */\nexport async function readGitInfo(cwd: string): Promise<GitInfo | null> {\n const [branchRes, numstatRes, statusRes] = await Promise.all([\n runGit(cwd, ['branch', '--show-current']),\n runGit(cwd, ['diff', 'HEAD', '--numstat']),\n runGit(cwd, ['status', '--porcelain']),\n ]);\n\n // If any of the three failed with a non-zero exit OR git wasn't\n // found, we're not in a repo (or git is missing) — bail entirely.\n if (!branchRes.ok || !numstatRes.ok || !statusRes.ok) return null;\n\n const branch = branchRes.stdout.trim();\n // Detached HEAD: `branch --show-current` returns empty. Render the\n // short SHA instead so the chip isn't blank.\n const branchLabel = branch || (await detachedShortSha(cwd)) || 'detached';\n\n let added = 0;\n let deleted = 0;\n for (const line of numstatRes.stdout.split('\\n')) {\n if (!line) continue;\n const [a, d] = line.split('\\t');\n // Binary files report '-' for both columns — skip them.\n if (a && a !== '-') added += Number.parseInt(a, 10) || 0;\n if (d && d !== '-') deleted += Number.parseInt(d, 10) || 0;\n }\n\n let untracked = 0;\n for (const line of statusRes.stdout.split('\\n')) {\n if (line.startsWith('?? ')) untracked++;\n }\n\n return { branch: branchLabel, added, deleted, untracked };\n}\n\nasync function detachedShortSha(cwd: string): Promise<string | null> {\n const res = await runGit(cwd, ['rev-parse', '--short', 'HEAD']);\n return res.ok ? res.stdout.trim() : null;\n}\n\ninterface GitResult {\n ok: boolean;\n stdout: string;\n}\n\nfunction runGit(cwd: string, args: string[]): Promise<GitResult> {\n return new Promise((resolve) => {\n let stdout = '';\n try {\n const child = spawn('git', args, {\n cwd,\n env: buildChildEnv(),\n // Inherit stderr (silent) — we don't care about git's noise.\n stdio: ['ignore', 'pipe', 'ignore'],\n // Don't let a slow git hang the TUI.\n timeout: 3000,\n windowsHide: true,\n });\n child.stdout.setEncoding('utf8');\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n });\n child.on('error', () => resolve({ ok: false, stdout: '' }));\n child.on('close', (code) => {\n resolve({ ok: code === 0, stdout });\n });\n } catch {\n resolve({ ok: false, stdout: '' });\n }\n });\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { QueueItem } from './app.js';\n\n/**\n * Dependencies the `/queue` command needs from the App. The TUI registers\n * the command at mount time with closures over `getQueue` (reads the latest\n * queue snapshot via a ref) and the three mutators. The command returns\n * its output as `{ message }` which the App pipes into history as `info`.\n */\nexport interface QueueSlashDeps {\n getQueue: () => QueueItem[];\n clear: () => void;\n deleteAt: (positions: number[]) => void;\n}\n\nconst USAGE =\n 'Usage:\\n' +\n ' /queue — list pending messages\\n' +\n ' /queue list — same as /queue\\n' +\n ' /queue clear — drop all pending messages\\n' +\n ' /queue delete N M… — drop messages at 1-based positions';\n\nexport function createQueueSlashCommand(deps: QueueSlashDeps): SlashCommand {\n return {\n name: 'queue',\n description: 'List, clear, or delete pending messages typed while the agent was running.',\n async run(args) {\n const out = handleQueueCommand(args, deps);\n return { message: out };\n },\n };\n}\n\n/**\n * Pure logic for the /queue command. Exported separately so tests can\n * drive it without spinning up Ink.\n */\nexport function handleQueueCommand(args: string, deps: QueueSlashDeps): string {\n const trimmed = args.trim();\n const [sub, ...rest] = trimmed.split(/\\s+/);\n const subcommand = sub?.toLowerCase() ?? '';\n\n if (subcommand === '' || subcommand === 'list') {\n return renderList(deps.getQueue());\n }\n\n if (subcommand === 'clear') {\n const before = deps.getQueue().length;\n if (before === 0) return 'Queue is already empty.';\n deps.clear();\n return `Cleared ${before} queued message${before === 1 ? '' : 's'}.`;\n }\n\n if (subcommand === 'delete' || subcommand === 'del' || subcommand === 'rm') {\n if (rest.length === 0) return 'Usage: /queue delete <position> [<position>…]';\n const queue = deps.getQueue();\n if (queue.length === 0) return 'Queue is empty — nothing to delete.';\n const parsed: number[] = [];\n const invalid: string[] = [];\n const outOfRange: number[] = [];\n for (const tok of rest) {\n if (!/^\\d+$/.test(tok)) {\n invalid.push(tok);\n continue;\n }\n const n = Number.parseInt(tok, 10);\n if (n < 1 || n > queue.length) {\n outOfRange.push(n);\n continue;\n }\n parsed.push(n);\n }\n const uniqueValid = [...new Set(parsed)];\n if (uniqueValid.length === 0) {\n const parts = ['No valid positions to delete.'];\n if (invalid.length > 0) parts.push(`Invalid: ${invalid.join(', ')}.`);\n if (outOfRange.length > 0)\n parts.push(`Out of range (queue has ${queue.length}): ${outOfRange.join(', ')}.`);\n return parts.join(' ');\n }\n deps.deleteAt(uniqueValid);\n const parts = [\n `Deleted ${uniqueValid.length} of ${queue.length} (positions ${uniqueValid.sort((a, b) => a - b).join(', ')}).`,\n ];\n if (invalid.length > 0) parts.push(`Ignored invalid: ${invalid.join(', ')}.`);\n if (outOfRange.length > 0) parts.push(`Ignored out of range: ${outOfRange.join(', ')}.`);\n return parts.join(' ');\n }\n\n return `Unknown subcommand \"${sub}\".\\n${USAGE}`;\n}\n\nfunction renderList(queue: QueueItem[]): string {\n if (queue.length === 0) return 'Queue is empty.';\n const lines = [`Queue (${queue.length}):`];\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n if (!item) continue;\n const preview = oneLine(item.displayText, 100);\n lines.push(` ${i + 1}. ${preview}`);\n }\n return lines.join('\\n');\n}\n\nfunction oneLine(s: string, max: number): string {\n const collapsed = s.replace(/\\s+/g, ' ').trim();\n return collapsed.length <= max ? collapsed : `${collapsed.slice(0, max - 1)}…`;\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport { getProcessRegistry } from '@wrongstack/tools';\n\nconst USAGE =\n 'Usage:\\n' +\n ' /kill — list active processes + breaker state\\n' +\n ' /kill list — same as /kill\\n' +\n ' /kill all — kill all tracked processes (SIGTERM → SIGKILL)\\n' +\n ' /kill force — kill all with SIGKILL immediately\\n' +\n ' /kill reset — reset the circuit breaker to closed\\n' +\n ' /kill <pid> — kill a specific process by PID';\n\nexport function createKillSlashCommand(): SlashCommand {\n return {\n name: 'kill',\n description: 'List or kill active bash/exec processes managed by the process registry.',\n async run(args) {\n const trimmed = args.trim();\n const parts = trimmed.split(/\\s+/);\n const sub = parts[0]?.toLowerCase() ?? '';\n\n if (sub === '' || sub === 'list') {\n return { message: renderList() };\n }\n\n if (sub === 'all') {\n const pids = getProcessRegistry().killAll();\n if (pids.length === 0) return { message: 'No processes to kill.' };\n return { message: `Killed ${pids.length} process${pids.length === 1 ? '' : 'es'}: ${pids.join(', ')}` };\n }\n\n if (sub === 'force') {\n getProcessRegistry().forceBreakerOpen();\n const pids = getProcessRegistry().killAll({ force: true });\n if (pids.length === 0) return { message: 'Circuit breaker forced open. No processes to kill.' };\n return { message: `Force-killed ${pids.length} process${pids.length === 1 ? '' : 'es'}: ${pids.join(', ')}` };\n }\n\n if (sub === 'reset') {\n getProcessRegistry().forceBreakerReset();\n return { message: 'Circuit breaker reset to closed. Bash/exec calls allowed.' };\n }\n\n const pid = Number.parseInt(sub, 10);\n if (!Number.isNaN(pid) && pid > 0) {\n const found = getProcessRegistry().kill(pid);\n if (found) return { message: `Killed process ${pid}.` };\n return { message: `Process ${pid} not found in registry.` };\n }\n\n return { message: `Unknown subcommand \"${sub}\".\\n${USAGE}` };\n },\n };\n}\n\nfunction renderList(): string {\n const registry = getProcessRegistry();\n const stats = registry.stats();\n const all = registry.list();\n\n const breaker = stats.breaker;\n const stateLabel =\n breaker.state === 'closed'\n ? '🟢 closed'\n : breaker.state === 'half-open'\n ? '🟡 half-open'\n : `🔴 open (cooldown ${breaker.cooldownRemainingMs !== null ? `${(breaker.cooldownRemainingMs / 1000).toFixed(0)}s` : '—'})`;\n\n const breakerLine = [\n ` Circuit breaker: ${stateLabel}`,\n ` consecutive failures: ${breaker.consecutiveFailures}/5`,\n ` slow calls in window: ${breaker.slowCallsInWindow}/3`,\n ` calls in window: ${breaker.callsInWindow}/30`,\n ].join('\\n');\n\n if (all.length === 0) {\n return `No active processes.\\n\\n${breakerLine}`;\n }\n\n const now = Date.now();\n const lines: string[] = [`Active processes (${all.length}):`];\n for (const p of all) {\n const age = ((now - p.startedAt) / 1000).toFixed(1);\n const killedTag = p.killed ? ' [killed]' : '';\n const cmd = p.command.length > 80 ? p.command.slice(0, 77) + '…' : p.command;\n lines.push(` ${p.pid} ${p.name} ${age}s ${cmd}${killedTag}`);\n }\n return [...lines, '', breakerLine].join('\\n');\n}","import type { SlashCommand } from '@wrongstack/core';\nimport { getProcessRegistry } from '@wrongstack/tools';\n\n/**\n * `/ps` — pure process list, no side effects.\n * `/kill` handles listing AND killing.\n */\nexport function createPsSlashCommand(): SlashCommand {\n return {\n name: 'ps',\n description: 'List all active bash/exec processes tracked by the process registry.',\n async run(_args) {\n return { message: renderList() };\n },\n };\n}\n\nfunction renderList(): string {\n const registry = getProcessRegistry();\n const stats = registry.stats();\n const all = registry.list();\n if (all.length === 0) return 'No active processes.';\n\n const breaker = stats.breaker;\n const stateLabel =\n breaker.state === 'closed'\n ? '🟢 closed'\n : breaker.state === 'half-open'\n ? '🟡 half-open'\n : `🔴 open`;\n\n const now = Date.now();\n const lines: string[] = [\n `Active processes (${all.length}) — breaker ${stateLabel}`,\n ` failure=${breaker.consecutiveFailures}/5 slow=${breaker.slowCallsInWindow}/3 rate=${breaker.callsInWindow}/30`,\n '',\n ];\n for (const p of all) {\n const age = ((now - p.startedAt) / 1000).toFixed(1);\n const killedTag = p.killed ? ' [killed]' : '';\n const cmd = p.command.length > 80 ? p.command.slice(0, 77) + '…' : p.command;\n lines.push(` ${p.pid} ${p.name} ${age}s ${cmd}${killedTag}`);\n }\n return lines.join('\\n');\n}","import * as fs from 'node:fs/promises';\r\nimport * as path from 'node:path';\r\nimport type {\r\n Agent,\r\n AttachmentStore,\r\n ContentBlock,\r\n Director,\r\n EventBus,\r\n FleetEvent,\r\n QueueStore,\r\n SlashCommandRegistry,\r\n TokenCounter,\r\n} from '@wrongstack/core';\r\nimport { DefaultSessionRewinder } from '@wrongstack/core';\r\nimport { InputBuilder, buildGoalPreamble, formatTodosList } from '@wrongstack/core';\r\nimport { type VisionAdapters, routeImagesForModel } from '@wrongstack/runtime/vision';\r\nimport { getProcessRegistry } from '@wrongstack/tools';\r\nimport { Box, useApp } from 'ink';\r\nimport React, { useEffect, useMemo, useReducer, useRef, useState } from 'react';\r\nimport { readClipboardImage } from './clipboard.js';\r\nimport { ConfirmPrompt } from './components/confirm-prompt.js';\r\nimport { CheckpointTimeline } from './components/checkpoint-timeline.js';\r\nimport { FilePicker } from './components/file-picker.js';\r\nimport { FleetPanel } from './components/fleet-panel.js';\r\nimport { FleetMonitor } from './components/fleet-monitor.js';\r\nimport { AgentsMonitor } from './components/agents-monitor.js';\r\nimport { PhaseMonitor } from './components/phase-monitor.js';\r\nimport { PhasePanel } from './components/phase-panel.js';\r\nimport { WorktreePanel, type WorktreeRow } from './components/worktree-panel.js';\r\nimport { WorktreeMonitor } from './components/worktree-monitor.js';\r\nimport { History, type HistoryEntry } from './components/history.js';\r\nimport { Input, type KeyEvent } from './components/input.js';\r\nimport { LiveActivityStrip } from './components/live-activity-strip.js';\r\nimport { AutonomyPicker, AUTONOMY_OPTIONS, type AutonomyOption } from './components/autonomy-picker.js';\r\nimport { ModelPicker, type ProviderOption } from './components/model-picker.js';\r\nimport { SlashMenu } from './components/slash-menu.js';\r\nimport { StatusBar } from './components/status-bar.js';\r\nimport { searchFiles } from './file-search.js';\r\nimport { feedPaste } from './paste-accumulator.js';\r\nimport { type GitInfo, readGitInfo } from './git-info.js';\r\nimport { createQueueSlashCommand } from './queue-slash.js';\r\nimport { createKillSlashCommand } from './kill-slash.js';\r\nimport { createPsSlashCommand } from './ps-slash.js';\r\n\r\nexport interface QueueItem {\r\n id: number;\r\n displayText: string;\r\n blocks: ContentBlock[];\r\n}\r\n\r\n/** Per-subagent state tracked live from the FleetBus. */\r\nexport interface FleetEntry {\r\n id: string;\r\n name: string;\r\n provider?: string;\r\n model?: string;\r\n status: 'idle' | 'running' | 'success' | 'failed' | 'timeout' | 'stopped';\r\n streamingText: string;\r\n iterations: number;\r\n toolCalls: number;\r\n recentTools: Array<{\r\n name: string;\r\n ok?: boolean;\r\n durationMs?: number;\r\n outputBytes?: number;\r\n outputLines?: number;\r\n at: number;\r\n }>;\r\n recentMessages: Array<{ text: string; at: number }>;\r\n cost: number;\r\n startedAt: number;\r\n lastEventAt: number;\r\n /**\r\n * Tool the subagent is currently inside, set on `tool.started` and\r\n * cleared on `tool.executed`. Lets the FleetPanel render \"running →\r\n * bash\" instead of an opaque \"running\". Undefined when no tool is\r\n * mid-flight (between iterations, before the first tool, or after\r\n * the last tool of a run).\r\n */\r\n currentTool?: { name: string; startedAt: number };\r\n /**\r\n * Absolute path to the per-subagent JSONL transcript on disk, when\r\n * one was created. Surfaced so the FleetPanel can render `path:`\r\n * dim under the entry — users grep / tail the file for full\r\n * visibility into the subagent's run.\r\n */\r\n transcriptPath?: string;\r\n /**\r\n * Most recent budget warning: subagent hit a soft limit and the\r\n * coordinator is auto-extending. Rendered in FleetPanel as:\r\n * \"⚡ hitting tool_calls limit (350/400) — extending\"\r\n * Cleared on the next fleetDone or fleetStart.\r\n */\r\n budgetWarning?: { kind: string; used: number; limit: number; at: number };\r\n /**\r\n * Cumulative auto-extension grants for this subagent. Surfaced as a\r\n * persistent \"⚡×N\" badge in the monitor and 4th status line so the user\r\n * can see how often never-die kept the agent alive. Survives across tasks\r\n * within the same subagent entry (unlike `budgetWarning`, which clears).\r\n */\r\n extensions?: number;\r\n}\r\n\r\n/** A registered slash command matched against the user's current / query. */\r\nexport interface SlashCommandMatch {\r\n name: string;\r\n description: string;\r\n argsHint?: string;\r\n isBuiltin: boolean;\r\n}\r\n\r\nexport function selectedSlashCommandLine(picker: {\r\n open: boolean;\r\n matches: SlashCommandMatch[];\r\n selected: number;\r\n}): string | null {\r\n if (!picker.open || picker.matches.length === 0) return null;\r\n const picked = picker.matches[picker.selected];\r\n return picked ? `/${picked.name}` : null;\r\n}\r\n\r\nexport interface AppProps {\r\n agent: Agent;\r\n slashRegistry: SlashCommandRegistry;\r\n attachments: AttachmentStore;\r\n events: EventBus;\r\n tokenCounter?: TokenCounter;\r\n visionAdapters?: VisionAdapters;\r\n /** Resolve current model vision support. Falls back to provider capability when omitted. */\r\n supportsVision?: () => boolean | Promise<boolean>;\r\n model: string;\r\n banner?: boolean;\r\n /** Persists the queue across crashes; rehydrated on mount, written on every mutation. */\r\n queueStore?: QueueStore;\r\n /** Reflects the policy's --yolo flag for the status bar's \"⚠ YOLO\" chip. */\r\n yolo?: boolean;\r\n /**\r\n * Query the live YOLO state from the permission policy. Called after\r\n * every slash-command dispatch so `/yolo off` (which mutates the\r\n * policy inside the CLI) is immediately reflected in the status bar.\r\n * Mirrors the `agent.ctx.model` → `setLiveModel` pattern used for\r\n * provider/model sync.\r\n */\r\n getYolo?: () => boolean;\r\n /** Query the live autonomy mode. */\r\n getAutonomy?: () => 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';\r\n /**\r\n * Access the eternal-autonomy engine. When autonomy mode goes to\r\n * 'eternal' the TUI drives `runOneIteration()` from a post-slash hook\r\n * so the engine and TUI never race for the shared Context.\r\n */\r\n getEternalEngine?: () => import('@wrongstack/core').EternalAutonomyEngine | null;\r\n /**\r\n * Access the parallel-eternal engine. When autonomy mode goes to\r\n * 'eternal-parallel' the TUI drives `runOneIteration()` from a post-slash\r\n * hook so the engine and TUI never race for the shared Context.\r\n */\r\n getParallelEngine?: () => import('@wrongstack/core').ParallelEternalEngine | null;\r\n /**\r\n * Subscribe to live per-iteration events from the eternal engine. The\r\n * TUI installs this on mount to render each iteration as a timeline\r\n * entry the moment it lands — strictly more responsive than reading\r\n * goal.json after the fact.\r\n */\r\n subscribeEternalIteration?: (\r\n fn: (entry: import('@wrongstack/core').JournalEntry) => void,\r\n ) => () => void;\r\n /**\r\n * Subscribe to per-iteration stage transitions from the eternal engine.\r\n * Drives `state.eternalStage` used by the status bar to show the\r\n * engine's current location (decide → execute → reflect → sleep/paused).\r\n */\r\n subscribeEternalStage?: (\r\n fn: (stage: {\r\n phase: 'idle';\r\n } | {\r\n phase: 'decide';\r\n reason: string;\r\n } | {\r\n phase: 'execute';\r\n task: string;\r\n } | {\r\n phase: 'reflect';\r\n status: 'success' | 'failure' | 'aborted' | 'skipped';\r\n note?: string;\r\n } | {\r\n phase: 'sleep';\r\n ms: number;\r\n } | {\r\n phase: 'paused';\r\n } | {\r\n phase: 'stopped';\r\n } | {\r\n phase: 'error';\r\n message: string;\r\n }) => void,\r\n ) => () => void;\r\n /**\r\n * Subscribe to AutoPhase phase/task events from the PhaseOrchestrator.\r\n * Drives `state.autoPhase` used by the PhaseMonitor component.\r\n * Handlers receive the event name and payload from PhaseEventMap.\r\n */\r\n subscribeAutoPhase?: (\r\n handler: (event: string, payload: unknown) => void,\r\n ) => () => void;\r\n /**\r\n * Read the persisted autonomy settings (defaultMode, autoProceedDelayMs).\r\n * Used by the SettingsPicker in the TUI on mount and after Ctrl+S toggle.\r\n */\r\n getSettings?: () => { mode: 'off' | 'suggest' | 'auto'; delayMs: number };\r\n /**\r\n * Persist autonomy settings changes. Returns null on success, or an\r\n * error string on failure (so the TUI can display it as a hint).\r\n */\r\n saveSettings?: (s: { mode: 'off' | 'suggest' | 'auto'; delayMs: number }) => string | null | Promise<string | null>;\r\n /**\r\n * SDD session context getter. When an SDD session is active, returns\r\n * the AI prompt context to inject into user messages so the model\r\n * knows it's in a spec-building conversation.\r\n */\r\n getSDDContext?: () => string | null;\r\n /**\r\n * Process AI output for SDD auto-detection (spec, tasks, plan).\r\n * Called after every agent.run() completes. Returns displayable\r\n * status messages (e.g. \"✓ Spec detected and saved!\").\r\n */\r\n onSDDOutput?: (output: string) => Promise<string[]>;\r\n /** Surfaced in the startup banner. Falls back to \"dev\" when omitted. */\r\n appVersion?: string;\r\n /** Provider id shown in the banner (\"openai\", \"anthropic\", …). Defaults to \"agent\". */\r\n provider?: string;\r\n /** Wire family for the configured provider — rendered under provider in the banner. */\r\n family?: string;\r\n /** Last 3 chars of the active API key, shown in the banner for \"did I pick the right key?\" verification. */\r\n keyTail?: string;\r\n /**\r\n * Snapshot the keyed providers (and their model lists) for the\r\n * `/model` picker. Called every time the picker opens, so the result\r\n * stays in sync with config edits / new aliases. Async because the\r\n * host may need to load the models.dev catalog.\r\n */\r\n getPickableProviders?: () => Promise<ProviderOption[]>;\r\n /**\r\n * Apply a (provider, model) pair after the picker confirms. Returns\r\n * an error message on failure; null on success. The host owns the\r\n * actual Provider construction + Context mutation.\r\n */\r\n switchProviderAndModel?: (providerId: string, modelId: string) => string | null;\r\n /**\r\n * Apply an autonomy mode after the picker confirms. Returns\r\n * an error string on failure; null on success.\r\n */\r\n switchAutonomy?: (mode: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel') => string | null;\r\n /**\r\n * Real max-context token budget for the *active model*, resolved by the\r\n * CLI via the ModelsRegistry. The provider object only knows its family\r\n * default (e.g. anthropic = 200k) which is wrong for variants like the\r\n * 1M-context Opus model. The status bar's context chip uses this when\r\n * provided and falls back to the provider baseline otherwise.\r\n */\r\n effectiveMaxContext?: number;\r\n /** Absolute project root for goal.json loading. */\r\n projectRoot?: string;\r\n onExit: (code: number) => void;\r\n /** Called when /clear is dispatched — the TUI should wipe its history entries (but keep the banner). */\r\n onClearHistory?: (\r\n dispatch: React.Dispatch<{ type: 'clearHistory' } | { type: 'resetContextChip' }>,\r\n ) => void;\r\n\r\n /**\r\n * Goal text passed from `--goal \"...\"` on the command line. When set,\r\n * the App mounts, renders the banner, then automatically dispatches\r\n * a synthetic `/goal <text>` so the user lands in goal mode without\r\n * having to type the slash command. Mutually advisory with `initialSteer`\r\n * — `initialGoal` wins if both are present.\r\n */\r\n initialGoal?: string;\r\n /**\r\n * Initial user message passed from `--ask \"...\"` on the command line.\r\n * Submitted verbatim as the first turn (no preamble) so users can\r\n * launch the TUI and pre-populate one turn from a shell alias / script.\r\n */\r\n initialAsk?: string;\r\n /** Directory for session JSONL files. Passed to App for /rewind. */\r\n sessionsDir?: string;\r\n\r\n // --- Fleet ---\r\n /** Live director for fleet panel rendering. Null when director mode is off. */\r\n director: Director | null;\r\n /** Optional roster for human-readable subagent names. */\r\n fleetRoster?: Record<string, { name: string }>;\r\n /**\r\n * Shared controller for the `/fleet stream on|off` slash command. The\r\n * App installs a dispatch-backed setter on mount so the slash command\r\n * can flip the reducer's `streamFleet` flag from the CLI surface.\r\n */\r\n fleetStreamController?: {\r\n enabled: boolean;\r\n setEnabled: (enabled: boolean) => void;\r\n };\r\n /**\r\n * Controller for status bar hidden items. App installs a dispatch-backed\r\n * setter on mount so the /statusline slash command can update the TUI's\r\n * visible bar without a round-trip. The initial value is loaded from\r\n * the config file before App mounts.\r\n */\r\n statuslineHiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\r\n setStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\r\n /**\r\n * Controller for the agents monitor overlay. App installs a dispatch-backed\r\n * setter on mount so the `/agents on|off` slash command can toggle the\r\n * overlay without a round-trip.\r\n */\r\n agentsMonitorController?: {\r\n visible: boolean;\r\n setVisible: (visible: boolean) => void;\r\n };\r\n}\r\n\r\ntype DraftEntry = HistoryEntry extends infer T\r\n ? T extends { id: number }\r\n ? Omit<T, 'id'>\r\n : never\r\n : never;\r\n\r\ntype GoalSummary = {\r\n goal: string;\r\n goalState: 'active' | 'paused' | 'completed' | 'abandoned';\r\n iterations: number;\r\n lastTask?: string;\r\n lastStatus?: string;\r\n} | null;\r\n\r\ntype State = {\r\n entries: HistoryEntry[];\r\n buffer: string;\r\n cursor: number;\r\n placeholders: string[];\r\n /** Parallel array to `placeholders` — stores the actual pasted content for history rendering. */\r\n placeholderContents: string[];\r\n streamingText: string;\r\n /**\r\n * Live tail of the currently streaming tool's stdout/progress text. Mirrors\r\n * the assistant `streamingText` pattern but is keyed by tool_use id so the\r\n * tail is cleared automatically when that tool finishes. Only one tool's\r\n * stream is shown at a time — multi-tool streaming is rare and stacking\r\n * tails fights for the same screen space.\r\n */\r\n toolStream: { toolUseId: string; name: string; text: string; startedAt: number } | null;\r\n status: 'idle' | 'running' | 'streaming' | 'aborting';\r\n interrupts: number;\r\n /**\r\n * Set when the user pressed Esc mid-iteration to interrupt the agent.\r\n * The NEXT submitted user message gets a STEERING prefix block prepended\r\n * so the model sees \"I interrupted you on purpose — focus on this\r\n * instead of resuming the prior task\". Cleared once that message\r\n * lands. Distinct from `interrupts` (which is the Ctrl+C exit ladder).\r\n */\r\n steeringPending: boolean;\r\n /**\r\n * Context snapshot captured at Esc time, replayed into the STEERING\r\n * preamble so the model sees exactly what it was mid-doing when the\r\n * user pulled the cord. Cleared together with `steeringPending`.\r\n * Without this the model has to guess from chat scrollback which\r\n * tools were live — and it can't see subagent state at all.\r\n */\r\n steerSnapshot: {\r\n runningTools: string[];\r\n subagents: Array<{ label: string; status: string; tool?: string }>;\r\n subagentsTerminated: number;\r\n partialAssistantText: string;\r\n } | null;\r\n hint: string;\r\n nextId: number;\r\n picker: { open: boolean; query: string; matches: string[]; selected: number };\r\n /** Slash command picker — open while typing a / command. */\r\n slashPicker: { open: boolean; query: string; matches: SlashCommandMatch[]; selected: number };\r\n /** Tool calls currently in-flight, by tool_use id. Surface in the status bar. */\r\n runningTools: Map<string, { name: string; startedAt: number }>;\r\n /** FIFO of user messages typed while the agent was running. Drained when idle. */\r\n queue: QueueItem[];\r\n nextQueueId: number;\r\n /** Previous input strings for up/down navigation. */\r\n inputHistory: string[];\r\n /** 0 = current buffer (not in history), 1 = most recent, n = nth most recent. */\r\n historyIndex: number;\r\n /** Two-step model picker (provider → model) — opened by `/model`. */\r\n modelPicker: {\r\n open: boolean;\r\n step: 'provider' | 'model';\r\n providerOptions: ProviderOption[];\r\n modelOptions: string[];\r\n selected: number;\r\n pickedProviderId?: string;\r\n hint?: string;\r\n };\r\n /** Single-step autonomy mode picker — opened by `/autonomy`. */\r\n autonomyPicker: {\r\n open: boolean;\r\n options: AutonomyOption[];\r\n selected: number;\r\n hint?: string;\r\n };\r\n /** Pending tool confirmations — queue to handle multiple tools requesting confirmation. */\r\n confirmQueue: {\r\n toolUseId: string;\r\n toolName: string;\r\n input: unknown;\r\n suggestedPattern: string;\r\n resolve: (decision: 'yes' | 'no' | 'always' | 'deny') => void;\r\n }[];\r\n /** Incremented on /clear so the context chip re-reads from agent.ctx tokens. */\r\n contextChipVersion: number;\r\n /** Live fleet state: per-subagent entries from FleetBus events. Keyed by subagentId. */\r\n fleet: Record<string, FleetEntry>;\r\n /**\r\n * Leader-loop activity, synthesized for the AgentsMonitor overlay so the\r\n * user can see leader iteration / tool counts alongside subagent rows.\r\n * Driven by EventBus `iteration.started`/`iteration.completed`/`tool.started`/`tool.executed`.\r\n * Always present; renders as AGENT#0 LEADER in the monitor regardless of\r\n * whether any subagents exist.\r\n */\r\n leader: {\r\n iterations: number;\r\n toolCalls: number;\r\n recentTools: Array<{ name: string; ok?: boolean; durationMs?: number; at: number }>;\r\n currentTool?: { name: string; startedAt: number };\r\n startedAt: number;\r\n lastEventAt: number;\r\n /** True while inside an iteration (between iteration.started and iteration.completed). */\r\n iterating: boolean;\r\n };\r\n /** Fleet-wide accumulated cost. */\r\n fleetCost: number;\r\n /** Fleet-wide token totals from the usage aggregator, for the monitor gauge. */\r\n fleetTokens: { input: number; output: number };\r\n /**\r\n * When true, subagent text activity is\r\n * streamed into the main history with an `AGENT#N` prefix. Toggled\r\n * with `/fleet stream on|off`. Tool calls stay in the live fleet\r\n * surfaces so chat history remains readable during multi-agent runs.\r\n */\r\n streamFleet: boolean;\r\n /** When true, the full graphical fleet monitor overlay is shown (Ctrl+F). */\r\n monitorOpen: boolean;\r\n /** When true, the agents monitor overlay is shown (Ctrl+G). */\r\n agentsMonitorOpen: boolean;\r\n /** Session checkpoints recorded by SessionWriter.writeCheckpoint() events. */\r\n checkpoints: Array<{\r\n promptIndex: number;\r\n promptPreview: string;\r\n ts: string;\r\n fileCount: number;\r\n }>;\r\n /** Checkpoint timeline overlay — null when closed. */\r\n rewindOverlay: { checkpoints: Array<{\r\n promptIndex: number;\r\n promptPreview: string;\r\n ts: string;\r\n fileCount: number;\r\n }>; selected: number } | null;\r\n /** Live iteration-stage of the eternal engine (decide/execute/reflect/sleep/paused/stopped). */\r\n eternalStage: {\r\n phase: 'idle';\r\n } | {\r\n phase: 'decide';\r\n reason: string;\r\n } | {\r\n phase: 'execute';\r\n task: string;\r\n } | {\r\n phase: 'reflect';\r\n status: 'success' | 'failure' | 'aborted' | 'skipped';\r\n note?: string;\r\n } | {\r\n phase: 'sleep';\r\n ms: number;\r\n } | {\r\n phase: 'paused';\r\n } | {\r\n phase: 'stopped';\r\n } | {\r\n phase: 'error';\r\n message: string;\r\n } | null;\r\n /** Loaded from .wrongstack/goal.json on mount for startup banner. */\r\n goalSummary: GoalSummary;\r\n /** AutoPhase orchestrator state — rendered by PhaseMonitor. */\r\n autoPhase: {\r\n /** AutoPhase graph title. */\r\n title: string;\r\n /** Per-phase task summary, keyed by phaseId. */\r\n phases: Record<string, {\r\n name: string;\r\n status: string;\r\n completedTasks: number;\r\n totalTasks: number;\r\n startedAt?: number;\r\n }>;\r\n /** Active phase IDs (running phases). */\r\n runningPhaseIds: string[];\r\n /** Elapsed ms since graph start — drives the elapsed counter. */\r\n elapsedMs: number;\r\n /** True while the monitor overlay is open (Ctrl+P). */\r\n monitorOpen: boolean;\r\n } | null;\r\n /** Git-worktree isolation state — rendered by WorktreePanel/WorktreeMonitor. */\r\n worktrees: Record<string, WorktreeRow & { baseBranch?: string }>;\r\n /** Base branch worktrees fork from (for the monitor header). */\r\n worktreeBase?: string;\r\n /** True while the worktree monitor overlay is open (Ctrl+T). */\r\n worktreeMonitorOpen: boolean;\r\n};\r\n\r\ntype Action =\r\n | { type: 'addEntry'; entry: DraftEntry }\r\n | { type: 'setBuffer'; buffer: string; cursor: number }\r\n | { type: 'addPlaceholder'; ph: string; content?: string }\r\n | { type: 'removeLastPlaceholder' }\r\n | { type: 'clearInput' }\r\n | { type: 'clearPlaceholdersOnly' }\r\n | { type: 'clearHistory' }\r\n | { type: 'streamDelta'; delta: string }\r\n | { type: 'streamReset' }\r\n | { type: 'status'; status: State['status'] }\r\n | { type: 'interrupt' }\r\n | { type: 'resetInterrupts' }\r\n /**\r\n * User pressed Esc mid-iteration — flag the next message for steering\r\n * AND stash a context snapshot so the preamble can tell the model\r\n * exactly what it was doing.\r\n */\r\n | { type: 'steerStart'; snapshot: State['steerSnapshot'] }\r\n /** Submit handler consumed the steering flag; reset. */\r\n | { type: 'steerConsume' }\r\n | { type: 'hint'; text: string }\r\n | { type: 'pickerOpen'; query: string }\r\n | { type: 'pickerClose' }\r\n | { type: 'pickerSetMatches'; query: string; matches: string[] }\r\n | { type: 'pickerMove'; delta: number }\r\n | { type: 'toolStarted'; id: string; name: string }\r\n | { type: 'toolEnded'; id?: string; name?: string }\r\n | { type: 'toolStreamAppend'; toolUseId: string; name: string; text: string; startedAt: number }\r\n | { type: 'toolStreamClear'; toolUseId?: string; name?: string }\r\n | { type: 'enqueue'; item: Omit<QueueItem, 'id'> }\r\n | { type: 'dequeueFirst' }\r\n | { type: 'queueClear' }\r\n | { type: 'queueDelete'; positions: number[] }\r\n | { type: 'slashPickerOpen'; query: string; matches: SlashCommandMatch[] }\r\n | { type: 'slashPickerClose' }\r\n | { type: 'slashPickerMove'; delta: number }\r\n | { type: 'modelPickerOpen'; providers: ProviderOption[] }\r\n | { type: 'modelPickerClose' }\r\n | { type: 'modelPickerMove'; delta: number }\r\n | { type: 'modelPickerPickProvider'; providerId: string; models: string[] }\r\n | { type: 'modelPickerBack' }\r\n | { type: 'modelPickerHint'; text?: string }\r\n | { type: 'autonomyPickerOpen'; options: AutonomyOption[] }\r\n | { type: 'autonomyPickerClose' }\r\n | { type: 'autonomyPickerMove'; delta: number }\r\n | { type: 'autonomyPickerHint'; text?: string }\r\n | { type: 'historyPush'; text: string }\r\n | { type: 'historyUp' }\r\n | { type: 'historyDown' }\r\n | { type: 'confirmOpen'; info: State['confirmQueue'][0] }\r\n | { type: 'confirmClose' }\r\n | { type: 'resetContextChip' }\r\n // Fleet actions\r\n | { type: 'fleetSeed'; entries: FleetEntry[]; cost: number }\r\n | {\r\n type: 'fleetSpawn';\r\n id: string;\r\n name?: string;\r\n provider?: string;\r\n model?: string;\r\n transcriptPath?: string;\r\n }\r\n | { type: 'fleetStart'; id: string; taskId?: string }\r\n | { type: 'fleetDelta'; id: string; text: string }\r\n | { type: 'fleetMessage'; id: string; text: string }\r\n | {\r\n type: 'fleetTool';\r\n id: string;\r\n name?: string;\r\n ok?: boolean;\r\n durationMs?: number;\r\n outputBytes?: number;\r\n outputLines?: number;\r\n }\r\n /** tool.started: pin the current tool name for status display. */\r\n | { type: 'fleetToolStart'; id: string; name: string }\r\n /** tool.executed: clear the current tool (paired with fleetTool). */\r\n | { type: 'fleetToolEnd'; id: string }\r\n | {\r\n type: 'fleetUsage';\r\n id: string;\r\n input: number;\r\n output: number;\r\n cacheRead: number;\r\n cacheWrite: number;\r\n }\r\n | {\r\n type: 'fleetDone';\r\n id: string;\r\n status: FleetEntry['status'];\r\n iterations: number;\r\n toolCalls: number;\r\n }\r\n | {\r\n type: 'fleetBudgetWarning';\r\n id: string;\r\n kind: string;\r\n used: number;\r\n limit: number;\r\n }\r\n | {\r\n type: 'fleetBudgetExtended';\r\n id: string;\r\n totalExtensions: number;\r\n }\r\n | { type: 'fleetCost'; cost: number; input?: number; output?: number }\r\n | { type: 'leaderIterStart' }\r\n | { type: 'leaderIterEnd' }\r\n | { type: 'leaderToolStart'; name: string }\r\n | { type: 'leaderToolEnd'; name: string; ok?: boolean; durationMs?: number }\r\n | { type: 'setStreamFleet'; enabled: boolean }\r\n | { type: 'toggleMonitor' }\r\n | { type: 'toggleAgentsMonitor' }\r\n | { type: 'checkpointReceived'; cp: State['checkpoints'][0] }\r\n | { type: 'rewindOverlayOpen' }\r\n | { type: 'rewindOverlayClose' }\r\n | { type: 'rewindOverlayMove'; delta: number }\r\n | { type: 'sessionRewound'; toPromptIndex: number }\r\n | { type: 'eternalStage'; stage: {\r\n phase: 'idle';\r\n } | {\r\n phase: 'decide';\r\n reason: string;\r\n } | {\r\n phase: 'execute';\r\n task: string;\r\n } | {\r\n phase: 'reflect';\r\n status: 'success' | 'failure' | 'aborted' | 'skipped';\r\n note?: string;\r\n } | {\r\n phase: 'sleep';\r\n ms: number;\r\n } | {\r\n phase: 'paused';\r\n } | {\r\n phase: 'stopped';\r\n } | {\r\n phase: 'error';\r\n message: string;\r\n }}\r\n | { type: 'goalSummary'; summary: GoalSummary }\r\n | { type: 'autoPhaseInit'; title: string }\r\n | { type: 'autoPhasePhaseUpdate'; phaseId: string; name: string; status: string; completedTasks: number; totalTasks: number; startedAt?: number }\r\n | { type: 'autoPhaseRunningPhases'; phaseIds: string[] }\r\n | { type: 'autoPhaseElapsed'; ms: number }\r\n | { type: 'autoPhaseMonitorToggle' }\r\n | { type: 'autoPhaseReset' }\r\n | { type: 'worktreeUpsert'; handleId: string; row: Partial<WorktreeRow & { baseBranch?: string }>; baseBranch?: string }\r\n | { type: 'worktreeRemove'; handleId: string }\r\n | { type: 'worktreeMonitorToggle' };\r\n\r\nexport function reducer(state: State, action: Action): State {\r\n switch (action.type) {\r\n case 'addEntry': {\r\n // Append-only. We render finalized entries via Ink's <Static>,\r\n // which forbids removals or reordering — old items live on in the\r\n // terminal's native scrollback. Memory growth is bounded by the\r\n // terminal's own scrollback limits in practice.\r\n const appended = [...state.entries, { ...action.entry, id: state.nextId } as HistoryEntry];\r\n return { ...state, entries: appended, nextId: state.nextId + 1 };\r\n }\r\n case 'setBuffer':\r\n return { ...state, buffer: action.buffer, cursor: action.cursor };\r\n case 'addPlaceholder':\r\n return {\r\n ...state,\r\n placeholders: [...state.placeholders, action.ph],\r\n placeholderContents: [...state.placeholderContents, action.content ?? ''],\r\n };\r\n case 'removeLastPlaceholder':\r\n if (state.placeholders.length === 0) return state;\r\n return {\r\n ...state,\r\n placeholders: state.placeholders.slice(0, -1),\r\n placeholderContents: state.placeholderContents.slice(0, -1),\r\n };\r\n case 'clearInput':\r\n return {\r\n ...state,\r\n buffer: '',\r\n cursor: 0,\r\n placeholders: [],\r\n placeholderContents: [],\r\n historyIndex: 0,\r\n picker: { open: false, query: '', matches: [], selected: 0 },\r\n slashPicker: { open: false, query: '', matches: [], selected: 0 },\r\n };\r\n case 'clearPlaceholdersOnly':\r\n return { ...state, placeholders: [], placeholderContents: [] };\r\n case 'clearHistory': {\r\n const last = state.entries[state.entries.length - 1];\r\n return {\r\n ...state,\r\n entries: last ? [last] : state.entries,\r\n queue: [],\r\n nextQueueId: 1,\r\n };\r\n }\r\n case 'streamDelta':\r\n return { ...state, streamingText: state.streamingText + action.delta };\r\n case 'streamReset':\r\n return { ...state, streamingText: '' };\r\n case 'status':\r\n return { ...state, status: action.status };\r\n case 'interrupt':\r\n return { ...state, interrupts: state.interrupts + 1 };\r\n case 'steerStart':\r\n return { ...state, steeringPending: true, steerSnapshot: action.snapshot };\r\n case 'steerConsume':\r\n return { ...state, steeringPending: false, steerSnapshot: null };\r\n case 'resetInterrupts':\r\n return { ...state, interrupts: 0 };\r\n case 'hint':\r\n return { ...state, hint: action.text };\r\n case 'pickerOpen':\r\n return {\r\n ...state,\r\n picker: { open: true, query: action.query, matches: state.picker.matches, selected: 0 },\r\n };\r\n case 'pickerClose':\r\n return {\r\n ...state,\r\n picker: { open: false, query: '', matches: [], selected: 0 },\r\n };\r\n case 'pickerSetMatches':\r\n // Guard against stale async results — only apply if query still matches.\r\n if (!state.picker.open || state.picker.query !== action.query) return state;\r\n return {\r\n ...state,\r\n picker: {\r\n ...state.picker,\r\n matches: action.matches,\r\n selected: Math.min(state.picker.selected, Math.max(0, action.matches.length - 1)),\r\n },\r\n };\r\n case 'pickerMove': {\r\n const n = state.picker.matches.length;\r\n if (n === 0) return state;\r\n const next = (state.picker.selected + action.delta + n) % n;\r\n return { ...state, picker: { ...state.picker, selected: next } };\r\n }\r\n case 'toolStarted': {\r\n const next = new Map(state.runningTools);\r\n next.set(action.id, { name: action.name, startedAt: Date.now() });\r\n return { ...state, runningTools: next };\r\n }\r\n case 'toolEnded': {\r\n const next = new Map(state.runningTools);\r\n if (action.id !== undefined && next.has(action.id)) {\r\n next.delete(action.id);\r\n return { ...state, runningTools: next };\r\n }\r\n if (action.name !== undefined) {\r\n // Fall back to clearing the oldest running entry with this name —\r\n // `tool.executed` doesn't carry the tool_use id, so we approximate.\r\n for (const [id, info] of next) {\r\n if (info.name === action.name) {\r\n next.delete(id);\r\n return { ...state, runningTools: next };\r\n }\r\n }\r\n }\r\n return state;\r\n }\r\n case 'toolStreamAppend': {\r\n // Only one tool's stream is shown at a time. If a different tool is\r\n // currently streaming, switch — last writer wins. Streams from\r\n // not-yet-acknowledged tools take over as soon as data arrives, which\r\n // matches user intuition (whatever just produced output is what's\r\n // visible).\r\n const cur = state.toolStream;\r\n if (cur && cur.toolUseId === action.toolUseId) {\r\n return {\r\n ...state,\r\n toolStream: { ...cur, text: cur.text + action.text },\r\n };\r\n }\r\n return {\r\n ...state,\r\n toolStream: {\r\n toolUseId: action.toolUseId,\r\n name: action.name,\r\n text: action.text,\r\n startedAt: action.startedAt,\r\n },\r\n };\r\n }\r\n case 'toolStreamClear': {\r\n if (state.toolStream === null) return state;\r\n // Clear only when the finishing tool matches the streaming one. A\r\n // stale `tool.executed` for a different tool must not blank the\r\n // currently-visible stream.\r\n const t = state.toolStream;\r\n if (action.toolUseId !== undefined && action.toolUseId !== t.toolUseId) return state;\r\n if (action.name !== undefined && action.toolUseId === undefined && action.name !== t.name)\r\n return state;\r\n return { ...state, toolStream: null };\r\n }\r\n case 'enqueue': {\r\n const item: QueueItem = { ...action.item, id: state.nextQueueId };\r\n return {\r\n ...state,\r\n queue: [...state.queue, item],\r\n nextQueueId: state.nextQueueId + 1,\r\n };\r\n }\r\n case 'dequeueFirst': {\r\n if (state.queue.length === 0) return state;\r\n return { ...state, queue: state.queue.slice(1) };\r\n }\r\n case 'queueClear': {\r\n if (state.queue.length === 0) return state;\r\n return { ...state, queue: [] };\r\n }\r\n case 'queueDelete': {\r\n if (state.queue.length === 0 || action.positions.length === 0) return state;\r\n // Positions are 1-based; convert to 0-based set for fast filtering.\r\n const drop = new Set(action.positions.map((p) => p - 1).filter((i) => i >= 0));\r\n const filtered = state.queue.filter((_, i) => !drop.has(i));\r\n if (filtered.length === state.queue.length) return state;\r\n return { ...state, queue: filtered };\r\n }\r\n case 'slashPickerOpen':\r\n return {\r\n ...state,\r\n slashPicker: { open: true, query: action.query, matches: action.matches, selected: 0 },\r\n };\r\n case 'slashPickerClose':\r\n return {\r\n ...state,\r\n slashPicker: { open: false, query: '', matches: [], selected: 0 },\r\n };\r\n case 'slashPickerMove': {\r\n const n = state.slashPicker.matches.length;\r\n if (n === 0) return state;\r\n const next = (state.slashPicker.selected + action.delta + n) % n;\r\n return { ...state, slashPicker: { ...state.slashPicker, selected: next } };\r\n }\r\n case 'historyPush': {\r\n if (action.text === '' || action.text === state.inputHistory[0]) return state;\r\n return { ...state, inputHistory: [action.text, ...state.inputHistory].slice(0, 100) };\r\n }\r\n case 'historyUp': {\r\n if (state.inputHistory.length === 0) return state;\r\n const next = Math.min(state.historyIndex + 1, state.inputHistory.length);\r\n const entry = state.inputHistory[next - 1] ?? '';\r\n return { ...state, historyIndex: next, buffer: entry, cursor: entry.length };\r\n }\r\n case 'historyDown': {\r\n if (state.historyIndex === 0) return state;\r\n const next = state.historyIndex - 1;\r\n const entry = next === 0 ? '' : (state.inputHistory[next - 1] ?? '');\r\n return { ...state, historyIndex: next, buffer: entry, cursor: entry.length };\r\n }\r\n case 'modelPickerOpen':\r\n return {\r\n ...state,\r\n modelPicker: {\r\n open: true,\r\n step: 'provider',\r\n providerOptions: action.providers,\r\n modelOptions: [],\r\n selected: 0,\r\n hint: undefined,\r\n },\r\n };\r\n case 'modelPickerClose':\r\n return {\r\n ...state,\r\n modelPicker: {\r\n open: false,\r\n step: 'provider',\r\n providerOptions: [],\r\n modelOptions: [],\r\n selected: 0,\r\n },\r\n };\r\n case 'modelPickerMove': {\r\n if (!state.modelPicker.open) return state;\r\n const len =\r\n state.modelPicker.step === 'provider'\r\n ? state.modelPicker.providerOptions.length\r\n : state.modelPicker.modelOptions.length;\r\n if (len === 0) return state;\r\n const next = (state.modelPicker.selected + action.delta + len) % len;\r\n return {\r\n ...state,\r\n modelPicker: { ...state.modelPicker, selected: next },\r\n };\r\n }\r\n case 'modelPickerPickProvider':\r\n return {\r\n ...state,\r\n modelPicker: {\r\n ...state.modelPicker,\r\n step: 'model',\r\n modelOptions: action.models,\r\n selected: 0,\r\n pickedProviderId: action.providerId,\r\n hint: undefined,\r\n },\r\n };\r\n case 'modelPickerBack':\r\n return {\r\n ...state,\r\n modelPicker: {\r\n ...state.modelPicker,\r\n step: 'provider',\r\n modelOptions: [],\r\n selected: 0,\r\n pickedProviderId: undefined,\r\n hint: undefined,\r\n },\r\n };\r\n case 'modelPickerHint':\r\n return {\r\n ...state,\r\n modelPicker: { ...state.modelPicker, hint: action.text },\r\n };\r\n case 'autonomyPickerOpen':\r\n return {\r\n ...state,\r\n autonomyPicker: { open: true, options: action.options, selected: 0, hint: undefined },\r\n };\r\n case 'autonomyPickerClose':\r\n return {\r\n ...state,\r\n autonomyPicker: { open: false, options: [], selected: 0 },\r\n };\r\n case 'autonomyPickerMove': {\r\n const n = state.autonomyPicker.options.length;\r\n if (n === 0) return state;\r\n const next = (state.autonomyPicker.selected + action.delta + n) % n;\r\n return {\r\n ...state,\r\n autonomyPicker: { ...state.autonomyPicker, selected: next },\r\n };\r\n }\r\n case 'autonomyPickerHint':\r\n return {\r\n ...state,\r\n autonomyPicker: { ...state.autonomyPicker, hint: action.text },\r\n };\r\n case 'confirmOpen':\r\n return { ...state, confirmQueue: [...state.confirmQueue, action.info] };\r\n case 'confirmClose':\r\n return { ...state, confirmQueue: state.confirmQueue.slice(1) };\r\n case 'resetContextChip':\r\n return { ...state, contextChipVersion: state.contextChipVersion + 1 };\r\n // --- Fleet ---\r\n case 'fleetSeed': {\r\n const seeded: Record<string, FleetEntry> = {};\r\n for (const e of action.entries) {\r\n seeded[e.id] = {\r\n ...e,\r\n recentTools: e.recentTools ?? [],\r\n recentMessages: e.recentMessages ?? [],\r\n };\r\n }\r\n return { ...state, fleet: seeded, fleetCost: action.cost };\r\n }\r\n case 'fleetSpawn': {\r\n if (state.fleet[action.id]) return state;\r\n const entry: FleetEntry = {\r\n id: action.id,\r\n name: action.name ?? action.id.slice(0, 8),\r\n provider: action.provider,\r\n model: action.model,\r\n status: 'idle',\r\n streamingText: '',\r\n iterations: 0,\r\n toolCalls: 0,\r\n recentTools: [],\r\n recentMessages: [],\r\n cost: 0,\r\n startedAt: Date.now(),\r\n lastEventAt: Date.now(),\r\n transcriptPath: action.transcriptPath,\r\n };\r\n return { ...state, fleet: { ...state.fleet, [action.id]: entry } };\r\n }\r\n case 'fleetToolStart': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n currentTool: { name: action.name, startedAt: Date.now() },\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetToolEnd': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: { ...cur, currentTool: undefined, lastEventAt: Date.now() },\r\n },\r\n };\r\n }\r\n case 'fleetStart': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n status: 'running' as const,\r\n streamingText: '',\r\n budgetWarning: undefined, // clear on restart\r\n startedAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetDelta': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n // Keep only the last ~200 chars for display\r\n const appended = (cur.streamingText + action.text).slice(-200);\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: { ...cur, streamingText: appended, lastEventAt: Date.now() },\r\n },\r\n };\r\n }\r\n case 'fleetMessage': {\r\n const cur = state.fleet[action.id];\r\n const text = action.text.trim().replace(/\\s+/g, ' ');\r\n if (!cur || !text) return state;\r\n const now = Date.now();\r\n const recentMessages = [...(cur.recentMessages ?? []), { text, at: now }].slice(-2);\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: { ...cur, recentMessages, lastEventAt: now },\r\n },\r\n };\r\n }\r\n case 'fleetTool': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n const now = Date.now();\r\n const recentTools =\r\n action.name !== undefined\r\n ? [\r\n ...(cur.recentTools ?? []),\r\n {\r\n name: action.name,\r\n ok: action.ok,\r\n durationMs: action.durationMs,\r\n outputBytes: action.outputBytes,\r\n outputLines: action.outputLines,\r\n at: now,\r\n },\r\n ].slice(-2)\r\n : (cur.recentTools ?? []);\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n toolCalls: cur.toolCalls + 1,\r\n recentTools,\r\n lastEventAt: now,\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetUsage': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: { ...state.fleet, [action.id]: { ...cur, lastEventAt: Date.now() } },\r\n };\r\n }\r\n case 'fleetDone': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n status: action.status,\r\n iterations: action.iterations,\r\n toolCalls: action.toolCalls,\r\n streamingText: '',\r\n currentTool: undefined,\r\n budgetWarning: undefined, // clear on done/restart\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetBudgetWarning': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n budgetWarning: { kind: action.kind, used: action.used, limit: action.limit, at: Date.now() },\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetBudgetExtended': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n // The director sends the authoritative cumulative count; trust it\r\n // over a local increment so a dropped event can't desync the badge.\r\n extensions: action.totalExtensions,\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetCost': {\r\n return {\r\n ...state,\r\n fleetCost: action.cost,\r\n fleetTokens:\r\n action.input !== undefined || action.output !== undefined\r\n ? { input: action.input ?? state.fleetTokens.input, output: action.output ?? state.fleetTokens.output }\r\n : state.fleetTokens,\r\n };\r\n }\r\n case 'leaderIterStart': {\r\n return {\r\n ...state,\r\n leader: {\r\n ...state.leader,\r\n iterations: state.leader.iterations + 1,\r\n iterating: true,\r\n lastEventAt: Date.now(),\r\n },\r\n };\r\n }\r\n case 'leaderIterEnd': {\r\n return {\r\n ...state,\r\n leader: { ...state.leader, iterating: false, lastEventAt: Date.now() },\r\n };\r\n }\r\n case 'leaderToolStart': {\r\n return {\r\n ...state,\r\n leader: {\r\n ...state.leader,\r\n currentTool: { name: action.name, startedAt: Date.now() },\r\n lastEventAt: Date.now(),\r\n },\r\n };\r\n }\r\n case 'leaderToolEnd': {\r\n const now = Date.now();\r\n const recentTools = [\r\n ...state.leader.recentTools,\r\n { name: action.name, ok: action.ok, durationMs: action.durationMs, at: now },\r\n ].slice(-8);\r\n return {\r\n ...state,\r\n leader: {\r\n ...state.leader,\r\n toolCalls: state.leader.toolCalls + 1,\r\n currentTool: undefined,\r\n recentTools,\r\n lastEventAt: now,\r\n },\r\n };\r\n }\r\n case 'setStreamFleet': {\r\n return { ...state, streamFleet: action.enabled };\r\n }\r\n case 'toggleMonitor': {\r\n return { ...state, monitorOpen: !state.monitorOpen };\r\n }\r\n case 'toggleAgentsMonitor': {\r\n return { ...state, agentsMonitorOpen: !state.agentsMonitorOpen };\r\n }\r\n case 'checkpointReceived': {\r\n const existing = state.checkpoints.find((c) => c.promptIndex === action.cp.promptIndex);\r\n if (existing) return state;\r\n return { ...state, checkpoints: [...state.checkpoints, action.cp] };\r\n }\r\n case 'rewindOverlayOpen': {\r\n return {\r\n ...state,\r\n rewindOverlay: { checkpoints: state.checkpoints, selected: state.checkpoints.length - 1 },\r\n };\r\n }\r\n case 'rewindOverlayClose': {\r\n return { ...state, rewindOverlay: null };\r\n }\r\n case 'rewindOverlayMove': {\r\n if (!state.rewindOverlay) return state;\r\n const len = state.rewindOverlay.checkpoints.length;\r\n if (len === 0) return { ...state, rewindOverlay: null };\r\n const selected = Math.max(0, Math.min(len - 1, state.rewindOverlay.selected + action.delta));\r\n return { ...state, rewindOverlay: { ...state.rewindOverlay, selected } };\r\n }\r\n case 'sessionRewound': {\r\n return {\r\n ...state,\r\n checkpoints: state.checkpoints.filter((c) => c.promptIndex <= action.toPromptIndex),\r\n rewindOverlay: null,\r\n };\r\n }\r\n case 'eternalStage': {\r\n return { ...state, eternalStage: action.stage };\r\n }\r\n case 'goalSummary': {\r\n return { ...state, goalSummary: action.summary };\r\n }\r\n case 'autoPhaseInit': {\r\n return {\r\n ...state,\r\n autoPhase: {\r\n title: action.title,\r\n phases: {},\r\n runningPhaseIds: [],\r\n elapsedMs: 0,\r\n monitorOpen: false,\r\n },\r\n };\r\n }\r\n case 'autoPhasePhaseUpdate': {\r\n // Lazily initialize autoPhase state on first phase event — the title\r\n // is not shown in the PhaseMonitor so a placeholder is fine here.\r\n const existing = state.autoPhase ?? {\r\n title: 'AutoPhase',\r\n phases: {},\r\n runningPhaseIds: [],\r\n elapsedMs: 0,\r\n monitorOpen: false,\r\n };\r\n return {\r\n ...state,\r\n autoPhase: {\r\n ...existing,\r\n phases: {\r\n ...existing.phases,\r\n [action.phaseId]: {\r\n name: action.name,\r\n status: action.status,\r\n completedTasks: action.completedTasks,\r\n totalTasks: action.totalTasks,\r\n startedAt: action.startedAt,\r\n },\r\n },\r\n },\r\n };\r\n }\r\n case 'autoPhaseRunningPhases': {\r\n if (!state.autoPhase) return state;\r\n return {\r\n ...state,\r\n autoPhase: { ...state.autoPhase, runningPhaseIds: action.phaseIds },\r\n };\r\n }\r\n case 'autoPhaseElapsed': {\r\n if (!state.autoPhase) return state;\r\n return { ...state, autoPhase: { ...state.autoPhase, elapsedMs: action.ms } };\r\n }\r\n case 'autoPhaseMonitorToggle': {\r\n if (!state.autoPhase) return state;\r\n return { ...state, autoPhase: { ...state.autoPhase, monitorOpen: !state.autoPhase.monitorOpen } };\r\n }\r\n case 'autoPhaseReset': {\r\n return { ...state, autoPhase: null };\r\n }\r\n case 'worktreeUpsert': {\r\n const prev = state.worktrees[action.handleId];\r\n const merged: WorktreeRow & { baseBranch?: string } = {\r\n branch: '',\r\n ownerLabel: '',\r\n status: 'active',\r\n insertions: 0,\r\n deletions: 0,\r\n files: 0,\r\n allocatedAt: Date.now(),\r\n ...prev,\r\n ...action.row,\r\n };\r\n return {\r\n ...state,\r\n worktrees: { ...state.worktrees, [action.handleId]: merged },\r\n worktreeBase: action.baseBranch ?? state.worktreeBase,\r\n };\r\n }\r\n case 'worktreeRemove': {\r\n if (!state.worktrees[action.handleId]) return state;\r\n const next = { ...state.worktrees };\r\n delete next[action.handleId];\r\n return { ...state, worktrees: next };\r\n }\r\n case 'worktreeMonitorToggle': {\r\n return { ...state, worktreeMonitorOpen: !state.worktreeMonitorOpen };\r\n }\r\n }\r\n}\r\n\r\nconst PASTE_THRESHOLD_CHARS = 200;\r\n\r\n/**\r\n * Build the steering preamble that gets prepended to a user's message\r\n * after they pressed Esc to interrupt the agent. The preamble carries\r\n * three things the model would otherwise have to infer:\r\n *\r\n * 1. Context — exactly what was in flight (tool calls, subagents,\r\n * partial assistant text). Without this the model rationalizes\r\n * from chat scrollback and often resumes the prior task by\r\n * accident.\r\n * 2. Authority — a short, explicit list of what the model is\r\n * allowed to do (abandon the prior plan, respawn fresh\r\n * subagents, ask for clarification). Models hedge unless they\r\n * believe they have permission to pivot hard.\r\n * 3. New direction — the user's actual instruction, fenced off.\r\n *\r\n * The block is user-role plain text. We deliberately don't use a\r\n * system role here — the human triggered this, so accountability\r\n * stays with their turn and the model can challenge / clarify\r\n * without violating role separation.\r\n *\r\n * Exported for the steering test that pins the contract.\r\n */\r\nexport function buildSteeringPreamble(\r\n snapshot: State['steerSnapshot'],\r\n newDirection: string,\r\n): string {\r\n const lines: string[] = ['[STEERING — I pressed Esc to interrupt you mid-task on purpose.', ''];\r\n\r\n // Section 1: what was running. Even an empty list is useful —\r\n // tells the model \"you weren't doing much yet, no work to mourn\".\r\n const ctx: string[] = [];\r\n if (snapshot?.runningTools && snapshot.runningTools.length > 0) {\r\n ctx.push(`- in-flight tools (now cancelled): ${snapshot.runningTools.join(', ')}`);\r\n }\r\n if (snapshot?.subagentsTerminated && snapshot.subagentsTerminated > 0) {\r\n const subDetails = snapshot.subagents\r\n .map((s) => `${s.label}${s.tool ? ` (was running: ${s.tool})` : ''}`)\r\n .join(', ');\r\n ctx.push(\r\n `- subagents (${snapshot.subagentsTerminated} terminated by me, do NOT await them): ${subDetails}`,\r\n );\r\n }\r\n if (snapshot?.partialAssistantText && snapshot.partialAssistantText.trim().length > 0) {\r\n const tail = snapshot.partialAssistantText.trim().slice(-300);\r\n ctx.push(`- your last partial output (truncated, for context only): \"${tail}\"`);\r\n }\r\n if (ctx.length > 0) {\r\n lines.push('What was happening when I cut you off:');\r\n lines.push(...ctx);\r\n lines.push('');\r\n }\r\n\r\n // Section 2: authority. Explicit grant so the model doesn't hedge.\r\n lines.push('You have authority to:');\r\n lines.push('- Abandon the prior plan entirely if the new direction makes it stale.');\r\n lines.push('- Re-spawn fresh subagents (with different roles or tasks) if needed.');\r\n lines.push('- Skip a polite \"should I continue?\" — just pivot.');\r\n lines.push('- Ask me to clarify if the new direction is genuinely ambiguous.');\r\n lines.push('');\r\n\r\n // Section 3: the user's instruction, fenced so the model can't\r\n // mistake it for part of the preamble.\r\n lines.push('New direction:');\r\n lines.push('---');\r\n lines.push(newDirection);\r\n lines.push('---');\r\n lines.push(']');\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n// `buildGoalPreamble` was relocated to @wrongstack/core so headless and\r\n// WebUI callers (which depend on @wrongstack/cli but not @wrongstack/tui)\r\n// can issue `/goal set` without dragging the TUI package in. Re-exported\r\n// from this module for backward compatibility with consumers still\r\n// importing from @wrongstack/tui; also used locally within this file\r\n// where `/goal …` is wired into the chat-input handler.\r\nexport { buildGoalPreamble } from '@wrongstack/core';\r\n\r\nexport function App({\r\n agent,\r\n slashRegistry,\r\n attachments,\r\n events,\r\n tokenCounter,\r\n visionAdapters = [],\r\n supportsVision,\r\n model,\r\n banner = true,\r\n queueStore,\r\n yolo = false,\r\n getYolo,\r\n getAutonomy,\r\n getEternalEngine,\r\n getParallelEngine,\r\n subscribeEternalIteration,\r\n subscribeEternalStage,\r\n subscribeAutoPhase,\r\n getSDDContext,\r\n onSDDOutput,\r\n appVersion,\r\n provider,\r\n family,\r\n keyTail,\r\n getPickableProviders,\r\n switchProviderAndModel,\r\n switchAutonomy,\r\n effectiveMaxContext,\r\n onExit,\r\n director,\r\n fleetRoster,\r\n onClearHistory,\r\n fleetStreamController,\r\n statuslineHiddenItems,\r\n setStatuslineHiddenItems,\r\n agentsMonitorController,\r\n initialGoal,\r\n initialAsk,\r\n sessionsDir,\r\n}: AppProps): React.ReactElement {\r\n const { exit } = useApp();\r\n // Reactive mirrors of agent.ctx.{model,provider.id} so the status bar\r\n // re-renders when /model or /use mutate them. The banner is `Static`\r\n // and never re-renders — the user gets the textual confirmation from\r\n // the slash command's message in history instead.\r\n const [liveModel, setLiveModel] = useState<string>(model);\r\n const [liveProvider, setLiveProvider] = useState<string>(provider ?? 'agent');\r\n const [yoloLive, setYoloLive] = useState<boolean>(yolo);\r\n const [autonomyLive, setAutonomyLive] = useState<'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel'>(getAutonomy?.() ?? 'off');\r\n const [hiddenItems, setHiddenItems] = useState(statuslineHiddenItems);\r\n\r\n // Sync when parent re-loads from config file (e.g., after /statusline reset)\r\n useEffect(() => {\r\n setHiddenItems(statuslineHiddenItems);\r\n }, [statuslineHiddenItems]);\r\n\r\n // Push local changes back to the parent controller so /statusline sees them\r\n useEffect(() => {\r\n setStatuslineHiddenItems(hiddenItems);\r\n }, [setStatuslineHiddenItems, hiddenItems]);\r\n\r\n const projectRoot = agent.ctx.projectRoot;\r\n\r\n // Load goal.json on mount to show startup banner with goal state\r\n useEffect(() => {\r\n if (!projectRoot) return;\r\n const goalPath = path.join(projectRoot, '.wrongstack', 'goal.json');\r\n fs.readFile(goalPath, 'utf8').then((raw) => {\r\n const goal = JSON.parse(raw);\r\n if (goal?.goal && typeof goal.iterations === 'number') {\r\n const lastEntry = goal.journal?.[goal.journal.length - 1];\r\n dispatch({\r\n type: 'goalSummary',\r\n summary: {\r\n goal: goal.goal,\r\n goalState: goal.goalState ?? 'active',\r\n iterations: goal.iterations,\r\n lastTask: lastEntry?.task,\r\n lastStatus: lastEntry?.status,\r\n },\r\n });\r\n }\r\n }).catch(() => {\r\n // No goal file yet — that's fine\r\n });\r\n }, [projectRoot]);\r\n\r\n const [state, dispatch] = useReducer(reducer, {\r\n entries: banner\r\n ? [\r\n {\r\n id: 0,\r\n kind: 'banner' as const,\r\n version: appVersion ?? 'dev',\r\n provider: provider ?? 'agent',\r\n model,\r\n cwd: agent.ctx.cwd,\r\n family,\r\n keyTail,\r\n },\r\n ]\r\n : [],\r\n buffer: '',\r\n cursor: 0,\r\n placeholders: [],\r\n placeholderContents: [],\r\n streamingText: '',\r\n toolStream: null,\r\n status: 'idle' as const,\r\n interrupts: 0,\r\n steeringPending: false,\r\n steerSnapshot: null,\r\n hint: '',\r\n nextId: 1,\r\n picker: { open: false, query: '', matches: [], selected: 0 },\r\n slashPicker: { open: false, query: '', matches: [], selected: 0 },\r\n runningTools: new Map(),\r\n queue: [],\r\n nextQueueId: 1,\r\n inputHistory: [],\r\n historyIndex: 0,\r\n modelPicker: {\r\n open: false,\r\n step: 'provider' as const,\r\n providerOptions: [],\r\n modelOptions: [],\r\n selected: 0,\r\n },\r\n autonomyPicker: { open: false, options: [], selected: 0 },\r\n confirmQueue: [],\r\n contextChipVersion: 0,\r\n fleet: {},\r\n leader: {\r\n iterations: 0,\r\n toolCalls: 0,\r\n recentTools: [],\r\n currentTool: undefined,\r\n startedAt: Date.now(),\r\n lastEventAt: Date.now(),\r\n iterating: false,\r\n },\r\n fleetCost: 0,\r\n fleetTokens: { input: 0, output: 0 },\r\n streamFleet: true,\r\n monitorOpen: false,\r\n agentsMonitorOpen: false,\r\n checkpoints: [],\r\n rewindOverlay: null,\r\n eternalStage: null,\r\n goalSummary: null,\r\n autoPhase: null,\r\n worktrees: {},\r\n worktreeMonitorOpen: false,\r\n });\r\n\r\n const builderRef = useRef<InputBuilder | null>(null);\r\n if (builderRef.current === null) {\r\n builderRef.current = new InputBuilder({ store: attachments });\r\n }\r\n\r\n // Bracketed-paste accumulator. A single paste can be delivered across\r\n // several stdin/keypress events: only the first carries the \\x1b[200~\r\n // begin marker and only the last carries \\x1b[201~. We buffer every\r\n // fragment here between those markers and finalize once, so a paste never\r\n // fragments into multiple placeholders or leaks newlines into the buffer.\r\n // `null` means \"not currently inside a paste\".\r\n const pasteAccumRef = useRef<string | null>(null);\r\n // Safety net: if the closing \\x1b[201~ marker never arrives (a terminal\r\n // dropped it, or Ink split the escape across chunks), flush the buffered\r\n // payload after a short idle period so accumulation can't swallow input\r\n // indefinitely. Real pastes deliver all fragments back-to-back, well\r\n // inside this window.\r\n const pasteFlushTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const activeCtrlRef = useRef<AbortController | null>(null);\r\n // Set once we've asked Ink to unmount on a Ctrl+C exit. A synchronous ref\r\n // (not React state) because consecutive SIGINTs can fire faster than a\r\n // re-render — without it, `stateRef.current.interrupts` reads stale and a\r\n // wedged unmount could never escalate to a hard exit.\r\n const exitRequestedRef = useRef(false);\r\n // Prevent re-entrant handleKey: some terminals emit \\r\\n as two separate\r\n // stdin events for Enter. While the first event is being processed (submit\r\n // or picker accept), the second arrives with stale state and would trigger\r\n // a duplicate action. The gate blocks the stale-second event entirely.\r\n const inputGateRef = useRef(false);\r\n // Separate guard JUST for the submit path. The full `inputGateRef`\r\n // is held across `await foo()` blocks (picker accept, model picker\r\n // commit) — that's fine because those resolve in milliseconds. But\r\n // `await submit()` resolves only when `agent.run()` finishes, which\r\n // can be minutes for a delegated subagent task. Using the same gate\r\n // would lock ALL keystrokes (typing, backspace, slash menu) for the\r\n // entire agent run. This timestamp-based guard fires for the few\r\n // milliseconds needed to debounce a terminal-side `\\r\\n` double-event\r\n // and then auto-releases — leaving the input live for the user.\r\n const lastEnterAtRef = useRef(0);\r\n // The status-bar chip surfaces the basename so multiple WrongStack\r\n // windows running against different repos are immediately distinguishable.\r\n // Empty / root fallback to undefined so the chip just hides itself.\r\n const projectName = React.useMemo(() => {\r\n const base = path.basename(projectRoot);\r\n return base && base !== path.sep ? base : undefined;\r\n }, [projectRoot]);\r\n\r\n // Source of truth for the streamed assistant text — kept here, not in\r\n // React state, because we need to read it synchronously when `agent.run`\r\n // returns. The React `streamingText` shown in the live tail is throttled\r\n // (~10fps) for redraw cost, so it can lag the actual stream by up to\r\n // FLUSH_MS. Reading from this ref instead removes the race where the\r\n // final chunk lands in pending after run() returns and ends up flashing\r\n // into the next frame's tail (leaking into scrollback).\r\n const streamingTextRef = useRef('');\r\n const pendingDeltaRef = useRef('');\r\n const flushTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n // Latest state snapshot — async callbacks (the queue drainer, slash command\r\n // closures) read this instead of capturing `state` to avoid stale closures.\r\n const stateRef = useRef<State>(state);\r\n stateRef.current = state;\r\n const draftRef = useRef({ buffer: state.buffer, cursor: state.cursor });\r\n draftRef.current = { buffer: state.buffer, cursor: state.cursor };\r\n\r\n // handleRewindTo must be declared before the /rewind useEffect (line 1803)\r\n // so the closure can capture it. It is intentionally NOT in useCallback\r\n // — each call needs a fresh rewinder referencing the current sessionsDir.\r\n const handleRewindTo = React.useCallback(async (checkpointIndex: number) => {\r\n const sessionId = agent.ctx.session.id;\r\n if (!sessionId) return;\r\n const rewinder = new DefaultSessionRewinder(sessionsDir ?? '', projectRoot ?? agent.ctx.cwd);\r\n // Revert file system changes first (read-only, safe to do eagerly).\r\n await rewinder.rewindToCheckpoint(sessionId, checkpointIndex);\r\n // Then truncate the conversation history — this fires session.rewound\r\n // on the EventBus, which the useEffect at line 2212 listens to and\r\n // dispatches sessionRewound + clearHistory.\r\n await agent.ctx.session.truncateToCheckpoint(checkpointIndex);\r\n }, [agent.ctx.session, sessionsDir, projectRoot, agent.ctx.cwd]);\r\n\r\n const setDraft = (buffer: string, cursor: number): void => {\r\n draftRef.current = { buffer, cursor };\r\n dispatch({ type: 'setBuffer', buffer, cursor });\r\n };\r\n\r\n const clearDraft = (): void => {\r\n draftRef.current = { buffer: '', cursor: 0 };\r\n dispatch({ type: 'clearInput' });\r\n };\r\n\r\n const clearPlaceholdersOnly = (): void => {\r\n draftRef.current = { buffer: '', cursor: 0 };\r\n dispatch({ type: 'clearPlaceholdersOnly' });\r\n };\r\n\r\n // Session-elapsed clock. Mount time is fixed; we re-render once per\r\n // second to refresh the \"⏱ 12:34\" chip. The interval is cheap — one\r\n // dispatch per tick into the same `tick` action — and stops cleanly\r\n // on unmount.\r\n const startedAtRef = useRef<number>(Date.now());\r\n const [nowTick, setNowTick] = React.useState<number>(Date.now());\r\n useEffect(() => {\r\n const t = setInterval(() => setNowTick(Date.now()), 1000);\r\n return () => clearInterval(t);\r\n }, []);\r\n const elapsedMs = nowTick - startedAtRef.current;\r\n\r\n // Git branch + change counts. Polled every 5s (cheap, two short-lived\r\n // `git` subprocesses). Skipped silently when the cwd isn't a repo or\r\n // git isn't installed — the chip just doesn't render.\r\n const [gitInfo, setGitInfo] = React.useState<GitInfo | null>(null);\r\n useEffect(() => {\r\n let cancelled = false;\r\n const refresh = () => {\r\n readGitInfo(agent.ctx.cwd)\r\n .then((info) => {\r\n if (!cancelled) setGitInfo(info);\r\n })\r\n .catch(() => undefined);\r\n };\r\n refresh();\r\n const t = setInterval(refresh, 5000);\r\n return () => {\r\n cancelled = true;\r\n clearInterval(t);\r\n };\r\n }, [agent.ctx.cwd]);\r\n\r\n // Latest provider request's input-token count. Tracked separately\r\n // from `tokenCounter` (which is cumulative) because for the context\r\n // fullness bar we want the live size of the conversation as it sat\r\n // on the wire — that's what determines how close we are to the\r\n // model's max context window.\r\n //\r\n // We sum input + cacheRead + cacheWrite so the chip reflects the TRUE\r\n // total context the model loaded (Usage is disjoint by design — see the\r\n // doc on Usage). Without this, prompt-cached turns would show only the\r\n // fresh-token delta and the chip would read 0% even when the context\r\n // was near the limit.\r\n // Cumulative \"effective context\" from tokenCounter: fresh input tokens\r\n // PLUS cached tokens that were sent as part of this prompt. All three\r\n // contribute to context-window pressure — cache tokens are still tokens\r\n // the model must process. (usage.input is disjoint from cacheRead/\r\n // cacheWrite, so simple sum is correct.)\r\n const totalCtxTokens =\r\n (tokenCounter?.total().input ?? 0) +\r\n (tokenCounter?.total().cacheRead ?? 0) +\r\n (tokenCounter?.total().cacheWrite ?? 0);\r\n\r\n // Per-model maxContext. CLI passes effectiveMaxContext (resolved via\r\n // ModelsRegistry — correct for 1M-context variants). Fall back to\r\n // agent.ctx.provider.capabilities.maxContext when not provided.\r\n const maxContext =\r\n effectiveMaxContext ?? agent.ctx.provider.capabilities.maxContext;\r\n\r\n // Per-request context pressure: current prompt tokens (input + cacheRead).\r\n // Unlike the cumulative tokenCounter.total() which grows across all turns,\r\n // this tracks the live request's context weight — what actually determines\r\n // how close we are to the maxContext ceiling.\r\n // Cached tokens (cacheWrite) are excluded because they are an accounting\r\n // artifact of THIS request (provider charges for them separately); they\r\n // are already counted in usage.input as part of the prompt the model sees.\r\n const currentContextTokens =\r\n (tokenCounter?.currentRequestTokens()?.input ?? 0) +\r\n (tokenCounter?.currentRequestTokens()?.cacheRead ?? 0);\r\n\r\n const contextWindow = useMemo(() => {\r\n void state.contextChipVersion;\r\n return currentContextTokens > 0 && maxContext > 0\r\n ? { used: currentContextTokens, max: maxContext }\r\n : undefined;\r\n }, [currentContextTokens, maxContext, state.contextChipVersion]);\r\n\r\n // Todo counts come from the agent's context, which is mutated by\r\n // the `todo` tool. Re-read on each render — array access is O(N) on\r\n // a list that's typically < 20 items.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: nowTick intentionally triggers re-render; ctx.todos is not React state\r\n const todos = useMemo(() => {\r\n const counts = { pending: 0, inProgress: 0, completed: 0 };\r\n for (const t of agent.ctx.todos) {\r\n if (t.status === 'pending') counts.pending++;\r\n else if (t.status === 'in_progress') counts.inProgress++;\r\n else if (t.status === 'completed') counts.completed++;\r\n }\r\n return counts;\r\n // Tick on `nowTick` so we pick up todo changes even though\r\n // agent.ctx.todos isn't React state — the 1s clock doubles as a\r\n // poll for ctx-side state.\r\n }, [nowTick, agent.ctx.todos]);\r\n\r\n // Fleet breakdown for the status-bar chip. Derived from `state.fleet`,\r\n // which the FleetBus event listeners already maintain — re-bucket\r\n // into running / idle / pending / completed because that's the slice\r\n // the user cares about at a glance. Recomputes on every state.fleet\r\n // change (cheap — fleet usually has <10 entries).\r\n const fleetCounts = useMemo(() => {\r\n const entries = Object.values(state.fleet);\r\n if (entries.length === 0) return undefined;\r\n let running = 0;\r\n let idle = 0;\r\n let completed = 0;\r\n for (const e of entries) {\r\n if (e.status === 'running') running += 1;\r\n else if (e.status === 'idle') idle += 1;\r\n else completed += 1; // success/failed/timeout/stopped all count as \"done\"\r\n }\r\n return { running, idle, pending: 0, completed };\r\n }, [state.fleet]);\r\n\r\n // Synthesize LEADER as AGENT#0 and prepend to the live fleet so the\r\n // monitor / FleetPanel are never empty even when no subagents have been\r\n // spawned. The 'leader' key can't collide with subagent IDs (those are\r\n // ULIDs). status maps from the high-level run state — streaming/running/\r\n // iterating → 'running', else 'idle'.\r\n const entriesWithLeader = useMemo<Record<string, FleetEntry>>(() => {\r\n const leaderEntry: FleetEntry = {\r\n id: 'leader',\r\n name: 'LEADER',\r\n provider,\r\n model,\r\n status:\r\n state.status === 'running' || state.status === 'streaming' || state.leader.iterating\r\n ? 'running'\r\n : 'idle',\r\n streamingText: '',\r\n iterations: state.leader.iterations,\r\n toolCalls: state.leader.toolCalls,\r\n recentTools: state.leader.recentTools,\r\n recentMessages: [],\r\n cost: 0,\r\n startedAt: state.leader.startedAt,\r\n lastEventAt: state.leader.lastEventAt,\r\n currentTool: state.leader.currentTool,\r\n };\r\n return { leader: leaderEntry, ...state.fleet };\r\n }, [state.fleet, state.leader, state.status, provider, model]);\r\n\r\n // Stable per-subagent label + color assigned on first sighting.\r\n const STREAM_COLORS = ['cyan', 'magenta', 'yellow', 'green', 'blue'];\r\n const labelsRef = useRef<Map<string, { label: string; color: string }>>(new Map());\r\n const labelFor = (id: string, name?: string): { label: string; color: string } => {\r\n const m = labelsRef.current;\r\n const existing = m.get(id);\r\n if (existing) return existing;\r\n const n = m.size + 1;\r\n const suffix = name && name !== id ? ` ${name}` : '';\r\n const v = {\r\n label: `AGENT#${n}${suffix}`,\r\n color: STREAM_COLORS[(n - 1) % STREAM_COLORS.length]!,\r\n };\r\n m.set(id, v);\r\n return v;\r\n };\r\n\r\n // Plan counts come from `<sessionId>.plan.json` on disk, not React\r\n // state. We poll lazily every few ticks so the chip stays current\r\n // without slamming the FS — plans change at human pace (a few times\r\n // per session at most), so 3s granularity is plenty.\r\n const [planCounts, setPlanCounts] = useState<{\r\n open: number;\r\n inProgress: number;\r\n done: number;\r\n } | null>(null);\r\n useEffect(() => {\r\n const planPath = (agent.ctx.meta as Record<string, unknown>)['plan.path'];\r\n if (typeof planPath !== 'string' || !planPath) return;\r\n let cancelled = false;\r\n const poll = async () => {\r\n try {\r\n const data = await fs.readFile(planPath, 'utf8');\r\n const parsed = JSON.parse(data) as {\r\n items?: Array<{ status?: string }>;\r\n };\r\n if (cancelled) return;\r\n if (!Array.isArray(parsed.items)) {\r\n setPlanCounts(null);\r\n return;\r\n }\r\n let open = 0;\r\n let inProgress = 0;\r\n let done = 0;\r\n for (const it of parsed.items) {\r\n if (it?.status === 'done') done++;\r\n else if (it?.status === 'in_progress') inProgress++;\r\n else open++;\r\n }\r\n setPlanCounts(open + inProgress + done > 0 ? { open, inProgress, done } : null);\r\n } catch {\r\n // Missing or corrupt — clear the chip.\r\n if (!cancelled) setPlanCounts(null);\r\n }\r\n };\r\n void poll();\r\n const id = setInterval(poll, 3000);\r\n return () => {\r\n cancelled = true;\r\n clearInterval(id);\r\n };\r\n }, [agent.ctx.meta]);\r\n\r\n // Live-region shrink mitigation. Ink's log-update tracks the previous\r\n // render's logical line count; when content visually wraps past the\r\n // terminal width, the visual-row count exceeds the logical count and\r\n // log-update's clear-and-rewrite leaves the extra visual rows behind.\r\n // Those extras then slide into native scrollback as the next render\r\n // commits new Static items above the live region — looking to the user\r\n // like an extra echo of the input (\"Enter ile boş input da history'e\r\n // sıyrılıyor\").\r\n //\r\n // We can't reach log-update directly, but we can issue an erase-below-\r\n // cursor (\\x1b[J) at the moments most likely to leak: when a picker /\r\n // dialog transitions from open → closed (the live region's height\r\n // drops sharply), and when a fresh history entry was just committed.\r\n // \\x1b[J only touches what's below the cursor, so committed Static\r\n // history above is preserved. For users in heavy resize / picker\r\n // workflows the bullet-proof alternative is still `--alt-screen`.\r\n const prevAnyOverlayOpen = useRef(false);\r\n const prevEntriesCount = useRef(0);\r\n useEffect(() => {\r\n const anyOpenNow =\r\n state.picker.open || state.slashPicker.open || state.modelPicker.open || state.confirmQueue.length > 0;\r\n const overlayClosed = prevAnyOverlayOpen.current && !anyOpenNow;\r\n const newEntryCommitted = state.entries.length > prevEntriesCount.current;\r\n prevAnyOverlayOpen.current = anyOpenNow;\r\n prevEntriesCount.current = state.entries.length;\r\n if (overlayClosed || newEntryCommitted) {\r\n try {\r\n // \\x1b[J = erase from cursor to end of screen. The cursor sits at the\r\n // top of log-update's live region, so this clears the stale live\r\n // region only and leaves committed Static history (in scrollback)\r\n // untouched. Do NOT prefix with \\x1b[H: homing to (0,0) wipes the\r\n // visible committed output and forces the input/status bar to redraw\r\n // at the top of the viewport instead of staying pinned to the bottom.\r\n process.stdout.write('\\x1b[J');\r\n } catch {\r\n // stdout might be detached during shutdown — ignore.\r\n }\r\n }\r\n }, [\r\n state.picker.open,\r\n state.slashPicker.open,\r\n state.modelPicker.open,\r\n state.confirmQueue.length,\r\n state.entries.length,\r\n ]);\r\n\r\n // Detect an active `@<query>` token at the cursor and drive the picker.\r\n // Reruns whenever buffer/cursor changes — guards against stale results.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: picker state reads are intentional — dispatching based on stale picker state is harmless\r\n useEffect(() => {\r\n const detected = detectAtToken(state.buffer, state.cursor);\r\n if (!detected) {\r\n if (state.picker.open) dispatch({ type: 'pickerClose' });\r\n return;\r\n }\r\n if (!state.picker.open || state.picker.query !== detected.query) {\r\n dispatch({ type: 'pickerOpen', query: detected.query });\r\n }\r\n let cancelled = false;\r\n searchFiles(projectRoot, detected.query, 8)\r\n .then((matches) => {\r\n if (!cancelled) {\r\n dispatch({ type: 'pickerSetMatches', query: detected.query, matches });\r\n }\r\n })\r\n .catch(() => undefined);\r\n return () => {\r\n cancelled = true;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.buffer, state.cursor, projectRoot]);\r\n\r\n // Detect an active `/<query>` token at the cursor and drive the slash picker.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: slashPicker state reads are intentional — same pattern as @ picker above\r\n useEffect(() => {\r\n const trimmed = state.buffer.trimStart();\r\n if (!trimmed.startsWith('/')) {\r\n if (state.slashPicker.open) dispatch({ type: 'slashPickerClose' });\r\n return;\r\n }\r\n // Once any whitespace appears after the leading '/', the user has moved\r\n // past the command name into argument territory (e.g. `/model glm-5.1`).\r\n // Keeping the picker open here is actively harmful: arrow keys would\r\n // still target the command menu even though the user is typing args.\r\n // Close it so Enter submits the full line.\r\n if (/\\s/.test(trimmed)) {\r\n if (state.slashPicker.open) dispatch({ type: 'slashPickerClose' });\r\n return;\r\n }\r\n const query = trimmed.slice(1).toLowerCase();\r\n const allCommands = slashRegistry.listWithOwner();\r\n const matches: SlashCommandMatch[] = allCommands\r\n .filter(({ cmd }) => {\r\n const name = cmd.name.toLowerCase();\r\n const aliases = cmd.aliases ?? [];\r\n return name.includes(query) || aliases.some((a) => a.toLowerCase().includes(query));\r\n })\r\n .slice(0, 12)\r\n .map(({ cmd, owner }) => ({\r\n name: cmd.name,\r\n description: cmd.description,\r\n argsHint: cmd.argsHint,\r\n isBuiltin: owner === 'core',\r\n }));\r\n\r\n if (!state.slashPicker.open) {\r\n dispatch({ type: 'slashPickerOpen', query, matches });\r\n } else if (state.slashPicker.query !== query) {\r\n dispatch({ type: 'slashPickerOpen', query, matches });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.buffer, slashRegistry]);\r\n\r\n const pasteClipboardImage = async (): Promise<void> => {\r\n const builder = builderRef.current;\r\n if (!builder) return;\r\n try {\r\n const img = await readClipboardImage();\r\n if (!img) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: 'No image on the clipboard.' },\r\n });\r\n return;\r\n }\r\n const placeholder = await builder.appendImage(img.base64, img.mediaType);\r\n const kb = (img.bytes / 1024).toFixed(0);\r\n dispatch({ type: 'addPlaceholder', ph: `${placeholder} (PNG ${kb}KB)` });\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'error',\r\n text: `Clipboard image error: ${err instanceof Error ? err.message : String(err)}`,\r\n },\r\n });\r\n }\r\n };\r\n\r\n const acceptPickerSelection = async (): Promise<void> => {\r\n const { open, matches, selected } = state.picker;\r\n if (!open || matches.length === 0) return;\r\n const picked = matches[selected];\r\n if (!picked) return;\r\n const builder = builderRef.current;\r\n if (!builder) return;\r\n\r\n // Find the @-token span we're replacing.\r\n const draft = draftRef.current;\r\n const tok = detectAtToken(draft.buffer, draft.cursor);\r\n if (!tok) {\r\n dispatch({ type: 'pickerClose' });\r\n return;\r\n }\r\n\r\n // Attach the file via the builder. The builder appends \"[file #N]\" to its\r\n // own display string, but we want to put the placeholder inline in the\r\n // visible buffer (replacing @query) so the user sees it.\r\n const absPath = path.isAbsolute(picked) ? picked : path.join(projectRoot, picked);\r\n try {\r\n const data = await fs.readFile(absPath, 'utf8');\r\n const placeholder = await builder.appendFile({\r\n kind: 'file',\r\n data,\r\n meta: { filename: picked, label: picked },\r\n });\r\n const before = draft.buffer.slice(0, tok.start);\r\n const after = draft.buffer.slice(tok.end);\r\n const next = `${before}${placeholder}${after}`;\r\n setDraft(next, tok.start + placeholder.length);\r\n dispatch({ type: 'pickerClose' });\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'error',\r\n text: `Attach failed: ${err instanceof Error ? err.message : String(err)}`,\r\n },\r\n });\r\n dispatch({ type: 'pickerClose' });\r\n }\r\n };\r\n\r\n /** Fill the buffer with the selected slash command and close the picker. */\r\n const acceptSlashPickerSelection = (): void => {\r\n const { open, matches, selected } = state.slashPicker;\r\n if (!open || matches.length === 0) return;\r\n const picked = matches[selected];\r\n if (!picked) return;\r\n const cmd = picked.argsHint !== undefined ? `/${picked.name} ` : `/${picked.name}`;\r\n setDraft(cmd, cmd.length);\r\n dispatch({ type: 'slashPickerClose' });\r\n };\r\n\r\n // Rehydrate any queue items persisted by a previous (crashed) run.\r\n // Fires once at mount; the persist effect below picks up afterwards.\r\n // We dispatch one enqueue per item so the reducer's id allocation\r\n // stays the single source of truth — no need to import its internals.\r\n useEffect(() => {\r\n if (!queueStore) return;\r\n let cancelled = false;\r\n queueStore\r\n .read()\r\n .then((items) => {\r\n if (cancelled || items.length === 0) return;\r\n for (const item of items) {\r\n dispatch({\r\n type: 'enqueue',\r\n item: { displayText: item.displayText, blocks: item.blocks },\r\n });\r\n }\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `Restored ${items.length} queued message${items.length === 1 ? '' : 's'} from a previous run.`,\r\n },\r\n });\r\n })\r\n .catch(() => undefined);\r\n return () => {\r\n cancelled = true;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [queueStore]);\r\n\r\n // Persist the queue snapshot on every change. Strip the in-memory id\r\n // before writing — it's render bookkeeping, not part of the message.\r\n // Errors are swallowed: the queue lives in memory regardless, so a\r\n // persistence failure only loses crash-recovery, not the queue itself.\r\n useEffect(() => {\r\n if (!queueStore) return;\r\n queueStore\r\n .write(state.queue.map(({ displayText, blocks }) => ({ displayText, blocks })))\r\n .catch(() => undefined);\r\n }, [state.queue, queueStore]);\r\n\r\n // Register the TUI-only /queue command for the lifetime of this App.\r\n useEffect(() => {\r\n const cmd = createQueueSlashCommand({\r\n getQueue: () => stateRef.current.queue,\r\n clear: () => dispatch({ type: 'queueClear' }),\r\n deleteAt: (positions) => dispatch({ type: 'queueDelete', positions }),\r\n });\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('queue');\r\n };\r\n }, [slashRegistry]);\r\n\r\n // Register /kill (list/kill tracked bash/exec processes) and /ps (list only).\r\n useEffect(() => {\r\n slashRegistry.register(createKillSlashCommand());\r\n slashRegistry.register(createPsSlashCommand());\r\n return () => {\r\n slashRegistry.unregister('kill');\r\n slashRegistry.unregister('ps');\r\n };\r\n }, [slashRegistry]);\r\n\r\n // Kill all tracked bash/exec processes when the TUI unmounts.\r\n // This fires on natural exit, Ctrl+C, and any other unmount path,\r\n // ensuring no orphaned child processes survive after the session ends.\r\n useEffect(() => {\r\n return () => {\r\n getProcessRegistry().killAll();\r\n };\r\n }, []);\r\n\r\n // Register `/altscreen on|off` — runtime escape valve for the\r\n // alt-screen scrollback limitation. In alt-screen mode the terminal's\r\n // native scrollback is disabled, so users can't review old chat\r\n // entries. `off` writes the alt-screen-exit escape so subsequent\r\n // entries land in the normal scroll region and the mouse wheel /\r\n // shift+pgup work again. The trade-off (lost on-screen history,\r\n // resize artifacts) is spelled out in the response message so the\r\n // user can decide whether to keep it.\r\n useEffect(() => {\r\n const ALT_OFF = '\\x1b[?1049l';\r\n const ALT_ON = '\\x1b[?1049h';\r\n const cmd = {\r\n name: 'altscreen',\r\n description:\r\n 'Toggle the alt-screen buffer. Default is OFF (native scroll); /altscreen on for full-screen mode.',\r\n async run(args: string) {\r\n const arg = args.trim().toLowerCase();\r\n if (arg === 'off') {\r\n try {\r\n process.stdout.write(ALT_OFF);\r\n } catch {\r\n return { message: 'Failed to exit alt-screen.' };\r\n }\r\n return {\r\n message:\r\n 'Alt-screen disabled. New entries will land in normal scrollback (mouse wheel / Shift+PgUp work). ' +\r\n 'On-screen history rendered before this command is no longer reachable via terminal scroll. ' +\r\n 'Resize may now leak the live region — `/altscreen on` to re-enable.',\r\n };\r\n }\r\n if (arg === 'on') {\r\n try {\r\n process.stdout.write(ALT_ON);\r\n } catch {\r\n return { message: 'Failed to re-enter alt-screen.' };\r\n }\r\n return { message: 'Alt-screen re-enabled. Native scroll is now disabled.' };\r\n }\r\n return { message: 'Usage: /altscreen on|off' };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('altscreen');\r\n };\r\n }, [slashRegistry]);\r\n\r\n // `/steer <message>` — slash-command equivalent of Esc-to-steer.\r\n // Useful when Esc is consumed by an outer terminal multiplexer, or\r\n // when the user wants a single-shot redirect without the typed\r\n // follow-up (the message is the new direction). Performs the same\r\n // sequence the Esc handler does: snapshot context, abort the active\r\n // run, terminate the fleet, drop the queue, then sets steeringPending\r\n // so the message — submitted as the slash command's return — picks\r\n // up the rich STEERING preamble in the normal submit path.\r\n //\r\n // Unlike Esc, this slash command can be invoked at any state. When\r\n // the agent is idle the abort and fleet-termination are no-ops; the\r\n // steering preamble still gets prepended, which is harmless extra\r\n // context (\"nothing was running\") for the next turn.\r\n useEffect(() => {\r\n const cmd = {\r\n name: 'steer',\r\n description: 'Interrupt the running agent (incl. fleet) and redirect: /steer <new direction>',\r\n help: [\r\n 'Usage: /steer <new direction>',\r\n '',\r\n 'Aborts the active iteration, terminates any running subagents,',\r\n 'drops queued messages, and sends your text to the model with a',\r\n 'STEERING preamble explaining what was in flight and what the',\r\n 'model is authorised to do (pivot hard, respawn subagents, ask',\r\n 'for clarification). Equivalent to pressing Esc then typing.',\r\n ].join('\\n'),\r\n async run(args: string) {\r\n const text = args.trim();\r\n if (!text) {\r\n return { message: 'Usage: /steer <new direction>' };\r\n }\r\n // Capture BEFORE mutating — same as the Esc handler.\r\n const s = stateRef.current;\r\n const runningTools = Array.from(s.runningTools.values()).map((t) => t.name);\r\n const subagents = Object.values(s.fleet)\r\n .filter((e) => e.status === 'running')\r\n .map((e) => ({ label: e.name, status: e.status, tool: e.currentTool?.name }));\r\n const subagentsTerminated = subagents.length;\r\n const partialAssistantText = streamingTextRef.current.slice(-1500);\r\n\r\n activeCtrlRef.current?.abort();\r\n dispatch({\r\n type: 'steerStart',\r\n snapshot: { runningTools, subagents, subagentsTerminated, partialAssistantText },\r\n });\r\n const droppedCount = s.queue.length;\r\n if (droppedCount > 0) dispatch({ type: 'queueClear' });\r\n if (director && subagentsTerminated > 0) {\r\n const cap = new Promise<void>((resolve) => {\r\n const t = setTimeout(resolve, 1500);\r\n t.unref?.();\r\n });\r\n void Promise.race([director.terminateAll().catch(() => undefined), cap]);\r\n }\r\n\r\n // Build the full preamble + direction here, return it as the\r\n // slash command output's `runText` so the submit pipeline\r\n // sends THIS to the model instead of \"/steer …\".\r\n const preamble = buildSteeringPreamble(\r\n { runningTools, subagents, subagentsTerminated, partialAssistantText },\r\n text,\r\n );\r\n // Consume immediately — the runText below already carries the\r\n // preamble; the steeringPending flag would otherwise double up.\r\n dispatch({ type: 'steerConsume' });\r\n\r\n const droppedTag = droppedCount > 0 ? ` · dropped ${droppedCount} queued` : '';\r\n const fleetTag =\r\n subagentsTerminated > 0\r\n ? ` · stopped ${subagentsTerminated} subagent${subagentsTerminated === 1 ? '' : 's'}`\r\n : '';\r\n return {\r\n message: `↯ Steering${droppedTag}${fleetTag}.`,\r\n runText: preamble,\r\n };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('steer');\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [slashRegistry, director]);\r\n\r\n // `/rewind` — open the checkpoint timeline overlay. If a checkpoint\r\n // index is provided as argument, rewinds directly to it.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps -- handleRewindTo is stable via useCallback\r\n useEffect(() => {\r\n const cmd = {\r\n name: 'rewind',\r\n description: 'Open checkpoint timeline to rewind session: /rewind [checkpoint-index]',\r\n help: [\r\n 'Usage: /rewind [checkpoint-index]',\r\n '',\r\n 'Opens a checkpoint timeline. Use ↑/↓ to navigate, Enter to rewind,',\r\n 'Esc to cancel. The session is reverted to the selected checkpoint',\r\n 'and conversation history is truncated — LLM continues fresh.',\r\n '',\r\n 'If a checkpoint index is provided the timeline is skipped and',\r\n 'rewind happens immediately.',\r\n ].join('\\n'),\r\n async run(args: string) {\r\n const idx = Number.parseInt(args.trim(), 10);\r\n if (!Number.isNaN(idx) && idx >= 0) {\r\n handleRewindTo(idx);\r\n return {};\r\n }\r\n // No arg — open the timeline overlay\r\n const s = stateRef.current;\r\n if (s.checkpoints.length === 0) {\r\n return { message: 'No checkpoints in this session yet.' };\r\n }\r\n dispatch({ type: 'rewindOverlayOpen' });\r\n return {};\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('rewind');\r\n };\r\n }, [slashRegistry, handleRewindTo]);\r\n\r\n // `/agents` — bare `/agents` and `/agents monitor` toggle the overlay.\r\n // `/agents <id>` falls through to the CLI builtin (same-name registration\r\n // from the same 'core' owner is a no-op per SlashCommandRegistry semantics,\r\n // so we own the bare/monitor forms here and let the builtin handle IDs).\r\n useEffect(() => {\r\n const cmd = {\r\n name: 'agents',\r\n description: 'Toggle the agents monitor overlay.',\r\n async run(args: string) {\r\n const arg = args.trim().toLowerCase();\r\n if (!arg || arg === 'monitor') {\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n return { message: undefined };\r\n }\r\n // Any other arg falls through to the CLI builtin (same owner\r\n // 'core' re-registration = silently ignored). The builtin handles\r\n // onAgents UUID lookups and /agents on|off.\r\n return { message: undefined };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => { slashRegistry.unregister('agents'); };\r\n }, [slashRegistry]);\r\n\r\n // `/goal` is registered as a CLI builtin (packages/cli/src/slash-commands/\r\n // goal.ts) which handles both the preamble lock-in (the former TUI\r\n // behavior) and goal.json persistence for /autonomy eternal. The TUI\r\n // does NOT register its own /goal here — that would collide with the\r\n // builtin and throw \"already registered\" on mount.\r\n\r\n // Register the TUI-only `/model` command — opens a two-step picker\r\n // (provider → model). All work is local state mutation; the actual\r\n // switch fires only after the user confirms a model in step 2.\r\n useEffect(() => {\r\n if (!getPickableProviders || !switchProviderAndModel) return;\r\n const cmd = {\r\n name: 'model',\r\n aliases: ['provider', 'switch'],\r\n description: 'Pick a provider + model interactively (two-step).',\r\n async run() {\r\n const providers = await getPickableProviders();\r\n dispatch({ type: 'modelPickerOpen', providers });\r\n return { message: undefined };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('model');\r\n };\r\n }, [slashRegistry, getPickableProviders, switchProviderAndModel]);\r\n\r\n // Register the TUI-only `/autonomy` command — opens a single-step picker.\r\n // When the user types `/autonomy` with no arg, the picker appears.\r\n // If they type `/autonomy off` etc. with an arg, the CLI builtin handles it.\r\n useEffect(() => {\r\n if (!switchAutonomy) return;\r\n const cmd = {\r\n name: 'autonomy',\r\n aliases: ['auto'],\r\n description: 'Pick an autonomy mode interactively (picker).',\r\n async run() {\r\n dispatch({ type: 'autonomyPickerOpen', options: AUTONOMY_OPTIONS });\r\n return { message: undefined };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('autonomy');\r\n };\r\n }, [slashRegistry, switchAutonomy]);\r\n\r\n // Subscribe to provider streaming events.\r\n useEffect(() => {\r\n // Throttle stream delta DISPATCHES to reduce flicker — we batch into\r\n // React state at ~10fps. The full text is also written into\r\n // streamingTextRef synchronously on every delta, so `runBlocks` can\r\n // read the complete stream when `agent.run` returns without racing\r\n // the throttle's last unflushed batch.\r\n const FLUSH_MS = 100;\r\n const flush = () => {\r\n if (pendingDeltaRef.current) {\r\n dispatch({ type: 'streamDelta', delta: pendingDeltaRef.current });\r\n pendingDeltaRef.current = '';\r\n }\r\n flushTimerRef.current = null;\r\n };\r\n const offDelta = events.on('provider.text_delta', (e) => {\r\n // Strip any bracketed-paste DCS sequences that some providers echo\r\n // into the stream. They are invisible in a real terminal but appear as\r\n // junk text if Ink's raw rendering catches them. The ESC byte is\r\n // matched optionally — a stripped/split ESC would otherwise leave a\r\n // bare `[200~` in the rendered text (same failure as the input path).\r\n // biome-ignore lint/suspicious/noControlCharactersInRegex: bracketed paste escape sequences are intentional\r\n const text = e.text.replace(/\\x1b?\\[200~|\\x1b?\\[201~/g, '');\r\n streamingTextRef.current += text;\r\n pendingDeltaRef.current += text;\r\n if (!flushTimerRef.current) flushTimerRef.current = setTimeout(flush, FLUSH_MS);\r\n });\r\n const offToolStart = events.on('tool.started', (e) => {\r\n dispatch({ type: 'toolStarted', id: e.id, name: e.name });\r\n dispatch({ type: 'leaderToolStart', name: e.name });\r\n });\r\n const offIterStart = events.on('iteration.started', () => {\r\n dispatch({ type: 'leaderIterStart' });\r\n });\r\n const offIterEnd = events.on('iteration.completed', () => {\r\n dispatch({ type: 'leaderIterEnd' });\r\n });\r\n const offToolProgress = events.on('tool.progress', (e) => {\r\n // Only `partial_output` becomes the live tail. Other event kinds\r\n // (`log`, `warning`, `metric`, `file_changed`) are deliberately not\r\n // rendered here — they pile up too fast and would steal screen real\r\n // estate from the assistant text. They still flow through EventBus\r\n // for observability/metrics consumers.\r\n if (e.event.type !== 'partial_output' || !e.event.text) return;\r\n dispatch({\r\n type: 'toolStreamAppend',\r\n toolUseId: e.id,\r\n name: e.name,\r\n text: e.event.text,\r\n startedAt: Date.now(),\r\n });\r\n });\r\n const offTool = events.on('tool.executed', (e) => {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'tool',\r\n name: e.name,\r\n durationMs: e.durationMs,\r\n ok: e.ok,\r\n input: e.input,\r\n output: e.output,\r\n // Real model-visible sizes — forwarded so the size chip beside\r\n // the tool header can show what the model paid for instead of\r\n // the misleading preview-byte count we used to surface.\r\n outputBytes: e.outputBytes,\r\n outputTokens: e.outputTokens,\r\n outputLines: e.outputLines,\r\n },\r\n });\r\n // `tool.executed` has no tool_use id; the reducer falls back to\r\n // clearing the oldest running entry that matches this name.\r\n dispatch({ type: 'toolEnded', name: e.name });\r\n // Clear the live tail for this tool — the final entry is now in\r\n // <Static>, no need to keep mirroring it below.\r\n dispatch({ type: 'toolStreamClear', name: e.name });\r\n // Mirror into the leader-only counter so the AgentsMonitor's LEADER\r\n // row stays live even when no subagents exist.\r\n dispatch({ type: 'leaderToolEnd', name: e.name, ok: e.ok, durationMs: e.durationMs });\r\n // Echo the current todo list into chat whenever the `todo` tool\r\n // mutates ctx.todos — same format as `/todos list`. Snapshotted from\r\n // agent.ctx.todos at this point (the tool executor has already\r\n // applied the mutation by the time tool.executed fires).\r\n if (e.ok && e.name === 'todo') {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: formatTodosList(agent.ctx.todos) },\r\n });\r\n }\r\n });\r\n const offRetry = events.on('provider.retry', (e) => {\r\n const secs = (e.delayMs / 1000).toFixed(e.delayMs >= 1000 ? 1 : 2);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: `⟳ retry ${e.attempt} in ${secs}s — ${e.description}` },\r\n });\r\n });\r\n const offProvErr = events.on('provider.error', (e) => {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: e.description },\r\n });\r\n });\r\n // Per-iteration text flush. Without this, the entire run buffers all text\r\n // deltas in the live tail box and dumps them into history as ONE assistant\r\n // entry only after `agent.run()` returns. Tool results, in contrast, land\r\n // in history immediately via `tool.executed` — so a multi-iteration turn\r\n // renders as \"all tools, then a wall of text\" instead of the natural\r\n // text → tool → text → tool interleaving that matches the actual stream.\r\n //\r\n // We hook `provider.response` (fires once per LLM call, both for\r\n // intermediate `tool_use` stops and the final `end_turn`) and commit\r\n // whatever has accumulated in `streamingTextRef` as an assistant history\r\n // entry. The next iteration's deltas start a fresh buffer. `runBlocks`\r\n // becomes purely the loop driver — it no longer adds the assistant entry,\r\n // since the per-iteration flushes have already done so.\r\n const offProvResp = events.on('provider.response', () => {\r\n const text = streamingTextRef.current;\r\n streamingTextRef.current = '';\r\n pendingDeltaRef.current = '';\r\n if (flushTimerRef.current) {\r\n clearTimeout(flushTimerRef.current);\r\n flushTimerRef.current = null;\r\n }\r\n dispatch({ type: 'streamReset' });\r\n if (text.trim()) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'assistant', text } });\r\n }\r\n });\r\n const offConfirmNeeded = events.on('tool.confirm_needed', (e) => {\r\n // Only show the ConfirmPrompt component — no duplicate history entry needed.\r\n // The full ConfirmPrompt with y/n/a/d keys is rendered below;\r\n // the history placeholder was redundant.\r\n dispatch({\r\n type: 'confirmOpen',\r\n info: {\r\n toolUseId: e.toolUseId,\r\n toolName: e.tool.name,\r\n input: e.input,\r\n suggestedPattern: e.suggestedPattern,\r\n resolve: e.resolve,\r\n },\r\n });\r\n });\r\n const offTrustPersisted = events.on('trust.persisted', (e) => {\r\n const icon = e.decision === 'always' ? '✓' : '✗';\r\n const label = e.decision === 'always' ? 'always allowed' : 'denied';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `${icon} ${label}: ${e.tool}(${e.pattern})`,\r\n },\r\n });\r\n });\r\n return () => {\r\n offDelta();\r\n offToolStart();\r\n offIterStart();\r\n offIterEnd();\r\n offToolProgress();\r\n offTool();\r\n offRetry();\r\n offProvErr();\r\n offProvResp();\r\n offConfirmNeeded();\r\n offTrustPersisted();\r\n if (flushTimerRef.current) clearTimeout(flushTimerRef.current);\r\n };\r\n }, [events, agent.ctx.todos]);\r\n\r\n // Live mirror of `streamFleet` for the FleetBus listener below. The\r\n // listener is wired in a single mount-time effect so it doesn't tear\r\n // down per-state-change; a ref lets it read the current toggle value\r\n // on every event without re-subscribing.\r\n const streamFleetRef = useRef(state.streamFleet);\r\n useEffect(() => {\r\n streamFleetRef.current = state.streamFleet;\r\n }, [state.streamFleet]);\r\n\r\n // --- Subagent lifecycle entries (uniform for director + non-director) ---\r\n // Wired to EventBus, not FleetBus, so /spawn-agent runs (which don't\r\n // build a Director) also surface in the chat. The director path emits\r\n // the same events through `MultiAgentHost`, so this single listener\r\n // covers both modes and replaces the per-status history entry that\r\n // previously lived inside the director.on('task.completed') hook.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: labelFor is ref-stable (uses useRef)\r\n useEffect(() => {\r\n const offSpawned = events.on('subagent.spawned', (e) => {\r\n const lbl = labelFor(e.subagentId, e.name);\r\n dispatch({\r\n type: 'fleetSpawn',\r\n id: e.subagentId,\r\n name: e.name,\r\n provider: e.provider,\r\n model: e.model,\r\n transcriptPath: e.transcriptPath,\r\n });\r\n const where = e.provider && e.model ? `${e.provider}/${e.model}` : 'spawned';\r\n const desc = e.description ? ` — ${e.description.slice(0, 80)}` : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '▶',\r\n text: `${where}${desc}`,\r\n },\r\n });\r\n });\r\n const offStarted = events.on('subagent.task_started', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({ type: 'fleetStart', id: e.subagentId, taskId: e.taskId });\r\n const desc = e.description ? ` — ${e.description.slice(0, 80)}` : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '●',\r\n text: `task started${desc}`,\r\n },\r\n });\r\n });\r\n const offCompleted = events.on('subagent.task_completed', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({\r\n type: 'fleetDone',\r\n id: e.subagentId,\r\n status: e.status,\r\n iterations: e.iterations,\r\n toolCalls: e.toolCalls,\r\n });\r\n // Status-specific icon so timeout/stopped/failed are visually\r\n // distinct from a plain success. We now have a structured error\r\n // envelope with `kind` (e.g. `provider_rate_limit`,\r\n // `tool_failed`) — prefix the tail with `[kind]` so the user\r\n // sees the actual failure mode, not just \"✗ failed\" for every\r\n // breed of failure.\r\n const icon =\r\n e.status === 'success'\r\n ? '✓'\r\n : e.status === 'timeout'\r\n ? '⏱'\r\n : e.status === 'stopped'\r\n ? '⊘'\r\n : '✗';\r\n const errKind = e.error?.kind;\r\n const errMsg = e.error?.message;\r\n const errMsgTail = errMsg\r\n ? ` — ${errMsg.replace(/\\s+/g, ' ').slice(0, 100)}${errMsg.length > 100 ? '…' : ''}`\r\n : '';\r\n const errChip = errKind ? ` [${errKind}]` : '';\r\n const secs = (e.durationMs / 1000).toFixed(e.durationMs < 10_000 ? 1 : 0);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon,\r\n text: `${e.status} (${e.iterations} iter · ${e.toolCalls} tools · ${secs}s)${errChip}${errMsgTail}`,\r\n },\r\n });\r\n });\r\n // Budget pressure: subagent hit a soft limit and the coordinator\r\n // is auto-extending. Surface as a fleet warning so the user can see\r\n // \"⚡ agent#bug-hunter hitting tool_calls limit (350/400) — extending\".\r\n // Timeout-specific: never says \"extending\" since timeout is a pure\r\n // warning — the subagent just keeps running until it finishes.\r\n const offBudgetWarning = events.on('subagent.budget_warning', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({ type: 'fleetBudgetWarning', id: e.subagentId, kind: e.kind, used: e.used, limit: e.limit });\r\n const timeoutSuffix = e.kind === 'timeout' ? ' (subagent continues running)' : ' — extending';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '⚡',\r\n text: `hitting ${e.kind} limit (${e.used}/${e.limit})${timeoutSuffix}`,\r\n },\r\n });\r\n });\r\n // Granted extension — bump the persistent ⚡×N badge and log the grant\r\n // so the chat history shows the never-die handshake completing.\r\n const offBudgetExtended = events.on('subagent.budget_extended', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({ type: 'fleetBudgetExtended', id: e.subagentId, totalExtensions: e.totalExtensions });\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '⚡',\r\n text: `extended ${e.kind} → ${e.newLimit} (×${e.totalExtensions})`,\r\n },\r\n });\r\n });\r\n // Periodic progress snapshot so the user can see what each subagent\r\n // is doing in the main chat history without opening the FleetPanel.\r\n // Format: \"AGENT#2 💬 L25 · 47 tools · $0.023 · doing bash...\"\r\n const offIterationSummary = events.on('subagent.iteration_summary', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n const costStr = e.costUsd > 0 ? ` · ${e.costUsd.toFixed(3)}` : '';\r\n const toolStr = e.currentTool ? ` · doing ${e.currentTool}` : '';\r\n const partial = e.partialText ? ` · \"${e.partialText.slice(0, 60)}${e.partialText.length > 60 ? '…' : ''}\"` : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '💬',\r\n text: `L${e.iteration} · ${e.toolCalls} tools${costStr}${toolStr}${partial}`,\r\n },\r\n });\r\n });\r\n // Always-on per-tool state surface. Now fires in both director and\r\n // non-director modes, so the leader's chat history shows subagent\r\n // tool calls regardless of mode. Director mode also gets FleetBus\r\n // path for richer FleetPanel streaming.\r\n const offTool = events.on('subagent.tool_executed', (e) => {\r\n dispatch({\r\n type: 'fleetTool',\r\n id: e.subagentId,\r\n name: e.name,\r\n ok: e.ok,\r\n durationMs: e.durationMs,\r\n outputBytes: e.outputBytes,\r\n });\r\n dispatch({ type: 'fleetToolEnd', id: e.subagentId });\r\n });\r\n return () => {\r\n offSpawned();\r\n offStarted();\r\n offCompleted();\r\n offBudgetWarning();\r\n offBudgetExtended();\r\n offIterationSummary();\r\n offTool();\r\n };\r\n }, [events, director]);\r\n\r\n // Checkpoint and session rewind event listeners — no director required.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps -- onClearHistory is stable\r\n useEffect(() => {\r\n const offCheckpoint = events.on('checkpoint.written', (e) => {\r\n dispatch({\r\n type: 'checkpointReceived',\r\n cp: {\r\n promptIndex: e.promptIndex,\r\n promptPreview: e.promptPreview,\r\n ts: e.ts,\r\n fileCount: e.fileCount,\r\n },\r\n });\r\n });\r\n const offRewound = events.on('session.rewound', (_e) => {\r\n dispatch({ type: 'sessionRewound', toPromptIndex: 0 });\r\n dispatch({ type: 'clearHistory' });\r\n if (onClearHistory) {\r\n onClearHistory(dispatch);\r\n }\r\n });\r\n return () => {\r\n offCheckpoint();\r\n offRewound();\r\n };\r\n }, [events, onClearHistory]);\r\n\r\n // --- AutoPhase phase/task events → PhaseMonitor ---\r\n useEffect(() => {\r\n if (!subscribeAutoPhase) return;\r\n\r\n const handler = (event: string, payload: unknown) => {\r\n switch (event) {\r\n case 'phase.started': {\r\n const p = payload as { phaseId: string; name: string };\r\n dispatch({ type: 'autoPhasePhaseUpdate', phaseId: p.phaseId, name: p.name, status: 'running', completedTasks: 0, totalTasks: 0, startedAt: Date.now() });\r\n break;\r\n }\r\n case 'phase.completed': {\r\n const p = payload as { phaseId: string; name: string; durationMs: number };\r\n dispatch({ type: 'autoPhasePhaseUpdate', phaseId: p.phaseId, name: p.name, status: 'completed', completedTasks: 0, totalTasks: 0 });\r\n break;\r\n }\r\n case 'phase.failed': {\r\n const p = payload as { phaseId: string; name: string; error?: string };\r\n dispatch({ type: 'autoPhasePhaseUpdate', phaseId: p.phaseId, name: p.name, status: 'failed', completedTasks: 0, totalTasks: 0 });\r\n break;\r\n }\r\n case 'phase.statusChange': {\r\n const p = payload as { phaseId: string; name: string; from: string; to: string };\r\n const status = p.to === 'running' ? 'running' : p.to;\r\n dispatch({ type: 'autoPhasePhaseUpdate', phaseId: p.phaseId, name: p.name, status, completedTasks: 0, totalTasks: 0 });\r\n break;\r\n }\r\n case 'phase.taskCompleted': {\r\n const p = payload as { phaseId: string; taskId: string; taskTitle: string };\r\n const existing = stateRef.current.autoPhase?.phases[p.phaseId];\r\n if (existing) {\r\n dispatch({\r\n type: 'autoPhasePhaseUpdate',\r\n phaseId: p.phaseId,\r\n name: existing.name,\r\n status: existing.status,\r\n completedTasks: existing.completedTasks + 1,\r\n totalTasks: existing.totalTasks,\r\n });\r\n }\r\n break;\r\n }\r\n case 'autonomous.tick': {\r\n const p = payload as { activePhases: Array<{ id: string }>; queuedPhases: Array<{ id: string }> };\r\n dispatch({ type: 'autoPhaseRunningPhases', phaseIds: p.activePhases.map((ph) => ph.id) });\r\n // Update elapsed time\r\n const ap = stateRef.current.autoPhase;\r\n if (ap) {\r\n const firstPhase = ap.phases[Object.keys(ap.phases)[0] ?? ''];\r\n const elapsed = ap.elapsedMs > 0 ? ap.elapsedMs + 1000 : Date.now() - (firstPhase?.startedAt ?? Date.now());\r\n dispatch({ type: 'autoPhaseElapsed', ms: elapsed });\r\n }\r\n break;\r\n }\r\n case 'graph.completed': {\r\n dispatch({ type: 'autoPhaseReset' });\r\n break;\r\n }\r\n case 'graph.failed': {\r\n dispatch({ type: 'autoPhaseReset' });\r\n break;\r\n }\r\n case 'worktree.allocated': {\r\n const p = payload as { handleId: string; ownerLabel: string; branch: string; baseBranch: string };\r\n dispatch({\r\n type: 'worktreeUpsert',\r\n handleId: p.handleId,\r\n baseBranch: p.baseBranch,\r\n row: { branch: p.branch, ownerLabel: p.ownerLabel, baseBranch: p.baseBranch, status: 'active', allocatedAt: Date.now() },\r\n });\r\n break;\r\n }\r\n case 'worktree.committed': {\r\n const p = payload as { handleId: string; insertions: number; deletions: number; files: number };\r\n dispatch({\r\n type: 'worktreeUpsert',\r\n handleId: p.handleId,\r\n row: { insertions: p.insertions, deletions: p.deletions, files: p.files, status: 'committing' },\r\n });\r\n break;\r\n }\r\n case 'worktree.merged': {\r\n const p = payload as { handleId: string };\r\n dispatch({ type: 'worktreeUpsert', handleId: p.handleId, row: { status: 'merged' } });\r\n break;\r\n }\r\n case 'worktree.conflict': {\r\n const p = payload as { handleId: string; conflictFiles: string[] };\r\n dispatch({ type: 'worktreeUpsert', handleId: p.handleId, row: { status: 'needs-review', conflictFiles: p.conflictFiles } });\r\n break;\r\n }\r\n case 'worktree.failed': {\r\n const p = payload as { handleId: string };\r\n dispatch({ type: 'worktreeUpsert', handleId: p.handleId, row: { status: 'failed' } });\r\n break;\r\n }\r\n case 'worktree.released': {\r\n const p = payload as { handleId: string; kept: boolean };\r\n // Keep conflicted/failed (kept) worktrees visible; drop clean ones.\r\n if (!p.kept) dispatch({ type: 'worktreeRemove', handleId: p.handleId });\r\n break;\r\n }\r\n }\r\n };\r\n\r\n return subscribeAutoPhase(handler);\r\n }, [subscribeAutoPhase]);\r\n\r\n // --- Leader agent compaction events → chat history ---\r\n useEffect(() => {\r\n const offFired = events.on('compaction.fired', (e) => {\r\n const { level, tokens, load, maxContext, report } = e as {\r\n level: string;\r\n tokens: number;\r\n load: number;\r\n maxContext: number;\r\n report: { before: number; after: number; reductions: { phase: string; saved: number }[] };\r\n aggressive: boolean;\r\n };\r\n const pct = (load * 100).toFixed(0);\r\n const before = report.before;\r\n const after = report.after;\r\n const saved = before - after;\r\n // `tokens` / `load` come from the middleware's full-request estimator\r\n // (messages + system + tools); `report.before` is the compactor's\r\n // message-only count. They are different views of the same moment, so\r\n // label them explicitly to avoid the \"98k tokens but 73% load?\" confusion.\r\n if (saved <= 0) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `▸ compaction skipped at ${level} — load ${pct}% (${tokens.toLocaleString()} of ${maxContext.toLocaleString()} tok). preserveK protects recent turns; nothing to elide.`,\r\n },\r\n });\r\n return;\r\n }\r\n const table = [\r\n `▸ context compacted at ${level} — load ${pct}% (${tokens.toLocaleString()} of ${maxContext.toLocaleString()} tok, full request)`,\r\n ` msg tokens before ${before.toLocaleString().padStart(8)}`,\r\n ` msg tokens after ${after.toLocaleString().padStart(8)}`,\r\n ` saved ${saved.toLocaleString().padStart(8)} (${((saved / before) * 100).toFixed(1)}%)`,\r\n ];\r\n for (const line of table) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'info', text: line } });\r\n }\r\n });\r\n const offFailed = events.on('compaction.failed', (e) => {\r\n const { level, load, maxContext, fatal } = e as { level: string; load: number; maxContext: number; fatal: boolean };\r\n const pct = (load * 100).toFixed(0);\r\n const text = fatal\r\n ? `✗ compaction failed at ${level} — load ${pct}% of ${maxContext.toLocaleString()} tok — FATAL`\r\n : `⚠ compaction failed at ${level} — load ${pct}% of ${maxContext.toLocaleString()} tok — continuing`;\r\n dispatch({ type: 'addEntry', entry: { kind: fatal ? 'error' : 'warn', text } });\r\n });\r\n return () => {\r\n offFired();\r\n offFailed();\r\n };\r\n }, [events]);\r\n\r\n // Install a dispatch-backed setter into the shared controller so the\r\n // `/fleet stream on|off` slash command can flip our reducer flag.\r\n // Restored to a noop on unmount so a late-arriving slash callback\r\n // doesn't dispatch into a torn-down React tree.\r\n useEffect(() => {\r\n if (!fleetStreamController) return;\r\n fleetStreamController.enabled = state.streamFleet;\r\n fleetStreamController.setEnabled = (enabled: boolean) => {\r\n dispatch({ type: 'setStreamFleet', enabled });\r\n };\r\n return () => {\r\n fleetStreamController.setEnabled = (enabled: boolean) => {\r\n fleetStreamController.enabled = enabled;\r\n };\r\n };\r\n }, [fleetStreamController, state.streamFleet]);\r\n\r\n // Keep the controller's mirror of `enabled` in sync when the toggle is\r\n // flipped from a TUI-side path (not the slash command).\r\n useEffect(() => {\r\n if (fleetStreamController) fleetStreamController.enabled = state.streamFleet;\r\n }, [state.streamFleet, fleetStreamController]);\r\n\r\n // Install a dispatch-backed setter into the shared controller so the\r\n // `/agents on|off` slash command can toggle our overlay flag.\r\n // Restored to a noop on unmount so a late-arriving slash callback\r\n // doesn't dispatch into a torn-down React tree.\r\n useEffect(() => {\r\n if (!agentsMonitorController) return;\r\n agentsMonitorController.visible = state.agentsMonitorOpen;\r\n agentsMonitorController.setVisible = (visible: boolean) => {\r\n if (visible !== state.agentsMonitorOpen) {\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n }\r\n };\r\n return () => {\r\n agentsMonitorController.setVisible = (visible: boolean) => {\r\n agentsMonitorController.visible = visible;\r\n };\r\n };\r\n }, [agentsMonitorController, state.agentsMonitorOpen]);\r\n\r\n // Keep the controller's mirror of `visible` in sync when the toggle is\r\n // flipped from a TUI-side path (not the slash command).\r\n useEffect(() => {\r\n if (agentsMonitorController) agentsMonitorController.visible = state.agentsMonitorOpen;\r\n }, [state.agentsMonitorOpen, agentsMonitorController]);\r\n\r\n // Track double-Esc for input buffer clearing.\r\n const lastEscAtRef = useRef(0);\r\n const ESC_DOUBLE_PRESS_MS = 1000;\r\n\r\n // --- FleetBus → TUI dispatch bridge ---\r\n // Subscribes to every event on the director's FleetBus and dispatches\r\n // fleet state actions. Text deltas are throttled (FLUSH_MS) to avoid\r\n // flooding React re-renders; other events dispatch immediately.\r\n // Seeds initial fleet state from director.status() on mount so the\r\n // panel reflects subagents spawned before the TUI attached.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: labelFor is ref-stable\r\n useEffect(() => {\r\n const d = director;\r\n if (!d) return;\r\n const FLUSH_MS = 150;\r\n\r\n // Per-agent buffered assistant text. Flushed as one `subagent`\r\n // history entry when the agent stops emitting deltas for FLUSH_MS,\r\n // so we don't fire a fresh history entry on every token.\r\n const streamBuf = new Map<string, string>();\r\n let streamFlushTimer: ReturnType<typeof setTimeout> | null = null;\r\n const flushStreamBufs = () => {\r\n for (const [id, text] of streamBuf) {\r\n const trimmed = text.trim();\r\n if (!trimmed) continue;\r\n const lbl = labelFor(id);\r\n dispatch({ type: 'fleetMessage', id, text: trimmed });\r\n if (streamFleetRef.current) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '💬',\r\n text: trimmed,\r\n },\r\n });\r\n }\r\n }\r\n streamBuf.clear();\r\n streamFlushTimer = null;\r\n };\r\n\r\n // Seed: discover already-spawned subagents from the coordinator.\r\n const status = d.status();\r\n for (const s of status.subagents) {\r\n const meta = d.getSubagentMeta(s.id);\r\n dispatch({\r\n type: 'fleetSpawn',\r\n id: s.id,\r\n name: meta?.name ?? s.name,\r\n provider: meta?.provider,\r\n model: meta?.model,\r\n });\r\n // Seed a stable label so subagents spawned before TUI mount still\r\n // show up by name in the status bar's per-agent detail line.\r\n labelFor(s.id, meta?.name ?? s.name);\r\n }\r\n // Also seed cost from the usage aggregator.\r\n dispatch({ type: 'fleetCost', cost: d.snapshot().total.cost, input: d.snapshot().total.input, output: d.snapshot().total.output });\r\n\r\n // Discover new subagents on first FleetBus event for an unknown id.\r\n const seen = new Set(Object.keys(status.subagents));\r\n\r\n // Throttled delta accumulator per subagent.\r\n const pending = new Map<string, string>();\r\n let flushTimer: ReturnType<typeof setTimeout> | null = null;\r\n const doFlush = () => {\r\n for (const [id, text] of pending) {\r\n if (text) dispatch({ type: 'fleetDelta', id, text });\r\n }\r\n pending.clear();\r\n flushTimer = null;\r\n };\r\n\r\n const offFleet = d.fleet.onAny((e: FleetEvent) => {\r\n // Discover new subagents.\r\n const fresh = !seen.has(e.subagentId);\r\n if (fresh) {\r\n seen.add(e.subagentId);\r\n const meta = d.getSubagentMeta(e.subagentId);\r\n dispatch({\r\n type: 'fleetSpawn',\r\n id: e.subagentId,\r\n name: meta?.name,\r\n provider: meta?.provider,\r\n model: meta?.model,\r\n });\r\n // Always assign a label on first sighting so the status bar's\r\n // 4th line has stable AGENT#N names even when history streaming\r\n // is disabled. The history `spawned` entry below is gated on\r\n // streamFleet; label assignment itself is unconditional.\r\n const lbl = labelFor(e.subagentId, meta?.name);\r\n if (streamFleetRef.current) {\r\n const where =\r\n meta?.provider && meta?.model ? `${meta.provider}/${meta.model}` : 'spawned';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '▶',\r\n text: where,\r\n },\r\n });\r\n }\r\n }\r\n\r\n switch (e.type) {\r\n case 'iteration.started':\r\n dispatch({ type: 'fleetStart', id: e.subagentId });\r\n break;\r\n case 'session.started':\r\n // First event a subagent emits — treat as start so the fleet\r\n // panel is populated even if no iteration.started fires yet.\r\n dispatch({ type: 'fleetStart', id: e.subagentId });\r\n break;\r\n case 'provider.text_delta': {\r\n const p = e.payload as { text?: string };\r\n if (p?.text) {\r\n const cur = pending.get(e.subagentId) ?? '';\r\n pending.set(e.subagentId, cur + p.text);\r\n if (!flushTimer) flushTimer = setTimeout(doFlush, FLUSH_MS);\r\n streamBuf.set(e.subagentId, (streamBuf.get(e.subagentId) ?? '') + p.text);\r\n if (streamFlushTimer) clearTimeout(streamFlushTimer);\r\n streamFlushTimer = setTimeout(flushStreamBufs, FLUSH_MS * 4);\r\n }\r\n break;\r\n }\r\n case 'provider.thinking_delta': {\r\n // Extended thinking output — same buffering as text_delta so\r\n // it gets flushed into recentMessages and (when streaming is\r\n // on) injected into leader history.\r\n const p = e.payload as { text?: string };\r\n if (p?.text) {\r\n streamBuf.set(e.subagentId, (streamBuf.get(e.subagentId) ?? '') + p.text);\r\n if (streamFlushTimer) clearTimeout(streamFlushTimer);\r\n streamFlushTimer = setTimeout(flushStreamBufs, FLUSH_MS * 4);\r\n }\r\n break;\r\n }\r\n case 'provider.retry': {\r\n const p = e.payload as { attempt?: number; delayMs?: number };\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `subagent retry ${p?.attempt ?? '?'}${p?.delayMs ? ` (${p.delayMs}ms)` : ''}`,\r\n },\r\n });\r\n break;\r\n }\r\n case 'provider.error': {\r\n const p = e.payload as { description?: string };\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'error',\r\n text: `subagent error${p?.description ? `: ${p.description}` : ''}`,\r\n },\r\n });\r\n break;\r\n }\r\n case 'tool.started': {\r\n const p = e.payload as { name?: string };\r\n if (p?.name) {\r\n dispatch({ type: 'fleetToolStart', id: e.subagentId, name: p.name });\r\n }\r\n break;\r\n }\r\n case 'tool.executed': {\r\n const p = e.payload as {\r\n name?: string;\r\n ok?: boolean;\r\n durationMs?: number;\r\n outputBytes?: number;\r\n outputLines?: number;\r\n };\r\n dispatch({\r\n type: 'fleetTool',\r\n id: e.subagentId,\r\n name: p?.name,\r\n ok: p?.ok,\r\n durationMs: p?.durationMs,\r\n outputBytes: p?.outputBytes,\r\n outputLines: p?.outputLines,\r\n });\r\n dispatch({ type: 'fleetToolEnd', id: e.subagentId });\r\n // Also inject into leader chat history when stream is enabled.\r\n if (streamFleetRef.current && p?.name) {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '🔧',\r\n text: `→ ${p.name} ${p.ok === false ? '✗' : '✓'}${p.durationMs != null ? ` (${p.durationMs}ms)` : ''}`,\r\n },\r\n });\r\n }\r\n break;\r\n }\r\n case 'provider.response': {\r\n // Surface live cost from the aggregator (already computed with\r\n // per-model pricing).\r\n dispatch({ type: 'fleetCost', cost: d.snapshot().total.cost, input: d.snapshot().total.input, output: d.snapshot().total.output });\r\n break;\r\n }\r\n case 'session.ended':\r\n // Subagent finished — leave status update to task.completed.\r\n break;\r\n case 'compaction.fired':\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: 'subagent compaction triggered' },\r\n });\r\n break;\r\n case 'compaction.failed':\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: 'subagent compaction failed' },\r\n });\r\n break;\r\n case 'token.threshold':\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: 'subagent token threshold reached' },\r\n });\r\n break;\r\n case 'budget.threshold_reached': {\r\n const p = e.payload as { kind?: string; used?: number; limit?: number };\r\n dispatch({\r\n type: 'fleetBudgetWarning',\r\n id: e.subagentId,\r\n kind: p?.kind ?? 'unknown',\r\n used: p?.used ?? 0,\r\n limit: p?.limit ?? 0,\r\n });\r\n break;\r\n }\r\n case 'budget.extended': {\r\n const p = e.payload as { totalExtensions?: number };\r\n if (p?.totalExtensions !== undefined) {\r\n dispatch({\r\n type: 'fleetBudgetExtended',\r\n id: e.subagentId,\r\n totalExtensions: p.totalExtensions,\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n\r\n // Task completions arrive on the director's bus too, but the\r\n // history entry is now produced by the `subagent.task_completed`\r\n // EventBus listener (which fires uniformly for director and\r\n // non-director paths). Here we only update fleet panel state +\r\n // running cost — the chat-side entry would otherwise duplicate.\r\n const offDone = d.on('task.completed', (payload) => {\r\n dispatch({\r\n type: 'fleetDone',\r\n id: payload.result.subagentId,\r\n status: payload.result.status,\r\n iterations: payload.result.iterations,\r\n toolCalls: payload.result.toolCalls,\r\n });\r\n dispatch({ type: 'fleetCost', cost: d.snapshot().total.cost, input: d.snapshot().total.input, output: d.snapshot().total.output });\r\n // Drain any pending streaming text right before the completion\r\n // entry is committed by the EventBus listener so the order\r\n // \"chat → done line\" stays correct.\r\n if (streamFlushTimer) {\r\n clearTimeout(streamFlushTimer);\r\n flushStreamBufs();\r\n }\r\n });\r\n\r\n return () => {\r\n offFleet();\r\n offDone();\r\n if (flushTimer) clearTimeout(flushTimer);\r\n doFlush(); // commit any pending deltas before cleanup\r\n if (streamFlushTimer) clearTimeout(streamFlushTimer);\r\n flushStreamBufs();\r\n };\r\n }, [director]);\r\n\r\n // Handle SIGINT as a three-stage escalation:\r\n // 1st press — stop work and stay at the prompt: cancel the foreground\r\n // run + kill the fleet, OR (in autonomy / background-only mode) halt\r\n // the engines + terminate the fleet. Pickers cancel instead.\r\n // 2nd press — exit: graceful Ink unmount (restores the terminal) with a\r\n // hard-exit fallback timer in case the React tree is wedged.\r\n // 3rd press — immediate process.exit, so a wedged Ink loop can't trap\r\n // the user.\r\n useEffect(() => {\r\n const onSigint = () => {\r\n const current = stateRef.current;\r\n // Second (or later) Ctrl+C — exit no matter what. Status may be\r\n // 'aborting', 'running', or 'streaming'; the user has clearly\r\n // decided they want out. Try Ink's graceful exit first, then\r\n // hard-exit on a short timer in case the React tree is wedged.\r\n if (current.interrupts >= 1) {\r\n // Second (or later) Ctrl+C — the user wants out. Force-kill tracked\r\n // processes regardless of state.\r\n getProcessRegistry().killAll({ force: true });\r\n // If we already asked Ink to unmount and the user pressed again, the\r\n // React tree is wedged — hard-exit immediately.\r\n if (exitRequestedRef.current) {\r\n process.exit(130);\r\n }\r\n exitRequestedRef.current = true;\r\n dispatch({ type: 'interrupt' });\r\n // Terminate any lingering fleet so subagents don't outlive the TUI.\r\n if (director) void director.terminateAll().catch(() => undefined);\r\n // Graceful Ink unmount first: it restores the terminal (raw mode off,\r\n // cursor shown, alt-screen dismantled) and routes the 130 exit code\r\n // through run-tui's settle(). A bare process.exit() here would skip\r\n // that and can leave the terminal in raw mode — the \"exit feels\r\n // broken\" symptom. Fall back to a hard exit if Ink never unmounts.\r\n onExit(130);\r\n exit();\r\n const hardExit = setTimeout(() => process.exit(130), 400);\r\n hardExit.unref?.();\r\n return;\r\n }\r\n dispatch({ type: 'interrupt' });\r\n\r\n // Pickers are safe to cancel outright — closing the overlay\r\n // restores the previous state cleanly with no side-effects.\r\n // Do this first so a single Ctrl+C from the model picker or\r\n // slash picker exits gracefully instead of doing nothing.\r\n if (current.modelPicker.open) {\r\n dispatch({ type: 'modelPickerClose' });\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: 'Model picker cancelled.' },\r\n });\r\n return;\r\n }\r\n if (current.slashPicker.open) {\r\n dispatch({ type: 'slashPickerClose' });\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: 'Cancelled.' },\r\n });\r\n return;\r\n }\r\n\r\n if (activeCtrlRef.current) {\r\n activeCtrlRef.current.abort();\r\n dispatch({ type: 'status', status: 'aborting' });\r\n // Kill every running subagent on the first interrupt — without\r\n // this the parent agent.run() stays parked in `await delegate\r\n // → director.awaitTasks` forever and the \"press again to exit\"\r\n // hint becomes a lie.\r\n //\r\n // We `await` terminateAll AND race a 1500ms cap so a stuck\r\n // bridge or hung tool can't trap us in cleanup — the user\r\n // pressed Ctrl+C; their patience is finite. The second\r\n // Ctrl+C still forces exit immediately via the path above,\r\n // so this race only matters for the polite-shutdown window.\r\n if (director) {\r\n const cap = new Promise<void>((resolve) => {\r\n const t = setTimeout(resolve, 1500);\r\n t.unref?.();\r\n });\r\n void Promise.race([director.terminateAll().catch(() => undefined), cap]);\r\n }\r\n // Kill all tracked bash/exec processes from the process registry.\r\n // This ensures runaway child processes (including background bashes\r\n // that outlive the agent iteration) are cleaned up on Ctrl+C.\r\n const killed = getProcessRegistry().killAll();\r\n const procTag = killed.length > 0 ? ` + killed ${killed.length} process${killed.length === 1 ? '' : 'es'}` : '';\r\n const droppedCount = stateRef.current.queue.length;\r\n if (droppedCount > 0) {\r\n dispatch({ type: 'queueClear' });\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `Iteration cancelled${director ? ' + fleet terminated' : ''}${procTag}. Dropped ${droppedCount} queued message${droppedCount === 1 ? '' : 's'}. Press Ctrl+C again to exit.`,\r\n },\r\n });\r\n } else {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `Iteration cancelled${director ? ' + fleet terminated' : ''}${procTag}. Press Ctrl+C again to exit.`,\r\n },\r\n });\r\n }\r\n } else {\r\n // No foreground (runBlocks) controller. We may still have background\r\n // work with no AbortController of its own: an autonomy engine driving\r\n // iterations, or a fleet of subagents. Eternal/parallel loops never\r\n // set activeCtrlRef, so this branch is the ONLY place their Ctrl+C is\r\n // handled — the first press must actually stop that work (and return\r\n // to the prompt), not merely announce \"press again to exit\".\r\n const fleetRunning = Object.values(current.fleet).filter(\r\n (e) => e.status === 'running',\r\n ).length;\r\n const autonomyRunning =\r\n eternalLoopRunningRef.current ||\r\n parallelLoopRunningRef.current ||\r\n getEternalEngine?.()?.currentState === 'running' ||\r\n getParallelEngine?.()?.currentState === 'running';\r\n if (autonomyRunning || fleetRunning > 0) {\r\n // Halt the engines first — eternal's stop() aborts the in-flight\r\n // iteration; both flip their persisted state to 'stopped'. Then\r\n // flip autonomy off so the driver loop won't start another\r\n // iteration, and terminate the fleet + tracked processes.\r\n getEternalEngine?.()?.stop();\r\n getParallelEngine?.()?.stop();\r\n if (autonomyRunning) switchAutonomy?.('off');\r\n if (director) {\r\n const cap = new Promise<void>((resolve) => {\r\n const t = setTimeout(resolve, 1500);\r\n t.unref?.();\r\n });\r\n void Promise.race([director.terminateAll().catch(() => undefined), cap]);\r\n }\r\n const killed = getProcessRegistry().killAll();\r\n const bits: string[] = [];\r\n if (autonomyRunning) bits.push('autonomy stopped');\r\n if (fleetRunning > 0)\r\n bits.push(`${fleetRunning} agent${fleetRunning === 1 ? '' : 's'} terminated`);\r\n if (killed.length > 0)\r\n bits.push(`${killed.length} process${killed.length === 1 ? '' : 'es'} killed`);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `${bits.join(' + ') || 'Background work stopped'}. Press Ctrl+C again to exit.`,\r\n },\r\n });\r\n return;\r\n }\r\n // Truly idle — nothing running. Kill any lingering processes and arm\r\n // the second-press exit.\r\n const killed = getProcessRegistry().killAll();\r\n const procTag = killed.length > 0 ? ` Killed ${killed.length} process${killed.length === 1 ? '' : 'es'}.` : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: `Press Ctrl+C again to exit.${procTag}` },\r\n });\r\n }\r\n };\r\n process.on('SIGINT', onSigint);\r\n return () => {\r\n process.off('SIGINT', onSigint);\r\n };\r\n }, [director, getEternalEngine, getParallelEngine, switchAutonomy, onExit, exit]);\r\n\r\n /** Truncate pasted content for history preview: first `lines` lines + \"...\" line if truncated. */\r\n const truncatePastePreview = (text: string, lines: number): string => {\r\n const all = text.split('\\n');\r\n if (all.length <= lines) return text;\r\n const head = all.slice(0, lines).join('\\n');\r\n return `${head}\\n... (${all.length - lines} more lines)`;\r\n };\r\n\r\n // Finalize a fully-assembled paste payload. A collapse-worthy paste (long\r\n // or many-lined) or any multi-line paste becomes a `[pasted #N] (N lines)`\r\n // pill above the input — the content lives in the InputBuilder and is\r\n // expanded at submit. A short single-line paste is inserted straight into\r\n // the editable row so the user can see and edit it; it must NOT also go\r\n // through the builder, or it would be duplicated when the draft buffer is\r\n // appended at submit.\r\n const commitPaste = async (full: string): Promise<void> => {\r\n const builder = builderRef.current;\r\n if (!builder || !full) return;\r\n if (builder.wouldCollapse(full) || full.includes('\\n')) {\r\n const lineCount = full.split('\\n').length;\r\n const ph = await builder.appendPaste(full);\r\n // Truncate long pastes for preview — first 6 lines + \"...\" indicator.\r\n const preview = truncatePastePreview(full, 6);\r\n dispatch({\r\n type: 'addPlaceholder',\r\n ph: `${ph ?? '[pasted]'} (${lineCount} lines)`,\r\n content: preview,\r\n });\r\n return;\r\n }\r\n const { buffer, cursor } = draftRef.current;\r\n const next = buffer.slice(0, cursor) + full + buffer.slice(cursor);\r\n setDraft(next, cursor + full.length);\r\n };\r\n\r\n const handleKey = async (input: string, key: KeyEvent) => {\r\n // Note: we no longer block input while the agent is running. Enter\r\n // routes through the queue when busy (see submit()), but typing,\r\n // backspace, paste, and clipboard-image all stay live.\r\n // Exception: when status is 'aborting', all input is blocked — except\r\n // Ctrl+C which the SIGINT handler processes directly (not through handleKey).\r\n // We check interrupts here so the second Ctrl+C can still reach the handler\r\n // even though status is 'aborting'.\r\n if (state.status === 'aborting' && state.interrupts === 0) return;\r\n // Block all input while confirmation prompt is shown — the ConfirmPrompt\r\n // component handles y/n/a/d/escape/enter itself and Input's disabled prop\r\n // is not reliable when multiple useInput hooks are active.\r\n if (state.confirmQueue.length > 0) return;\r\n\r\n // Re-entrancy guard: block stale-second events from \\r\\n terminals.\r\n if (inputGateRef.current) return;\r\n\r\n // ── Double-Esc clears input buffer ────────────────────────────────\r\n // When the user presses Esc twice within ESC_DOUBLE_PRESS_MS ms while\r\n // the buffer is non-empty, clear it. This mirrors the behaviour of bash's\r\n // Ctrl+C double-press clearing the line, adapted for Esc (no Ctrl needed).\r\n if (key.escape) {\r\n const now = Date.now();\r\n if (state.buffer.length > 0 && now - lastEscAtRef.current < ESC_DOUBLE_PRESS_MS) {\r\n dispatch({ type: 'clearInput' });\r\n lastEscAtRef.current = 0;\r\n return;\r\n }\r\n lastEscAtRef.current = now;\r\n }\r\n\r\n // ── Bracketed-paste accumulation ──────────────────────────────────\r\n // Must run before the Enter/key handling below: a paste split across\r\n // events can land a fragment that is exactly \"\\n\", which would\r\n // otherwise be read as Enter and submit mid-paste. The begin marker\r\n // (\\x1b[200~, or a bare [200~ when Ink ate the ESC) opens accumulation;\r\n // we swallow every fragment until the end marker (\\x1b[201~ / [201~),\r\n // then finalize the whole payload at once.\r\n if (input) {\r\n const paste = feedPaste(pasteAccumRef.current, input);\r\n if (paste) {\r\n pasteAccumRef.current = paste.accum;\r\n if (pasteFlushTimerRef.current) clearTimeout(pasteFlushTimerRef.current);\r\n if (paste.complete !== null) {\r\n pasteFlushTimerRef.current = null;\r\n await commitPaste(paste.complete);\r\n return;\r\n }\r\n pasteFlushTimerRef.current = setTimeout(() => {\r\n pasteFlushTimerRef.current = null;\r\n const full = pasteAccumRef.current;\r\n pasteAccumRef.current = null;\r\n if (full) void commitPaste(full);\r\n }, 250);\r\n return;\r\n }\r\n }\r\n\r\n // Some terminals emit \\r\\n for Enter as two separate stdin events.\r\n // \\r arrives with key.return=true (handled below); \\n may arrive as\r\n // a stray character with key.return=false. Normalize both to Enter\r\n // and prevent them from polluting the buffer as literal text.\r\n const isEnter = key.return || input === '\\r' || input === '\\n';\r\n\r\n // IMPORTANT: do NOT bail on `!input` here. Special keys (arrows,\r\n // Enter, Escape, Tab, Backspace) arrive with an empty `input`\r\n // string, and the slash/file pickers + cursor movement below all\r\n // depend on receiving those events. The late guard before text\r\n // insertion handles the empty-input case correctly.\r\n\r\n // Model picker takes absolute precedence: nothing else is meaningful\r\n // while the two-step overlay is open. Esc cancels (or backs out of\r\n // step 2 to step 1); Enter advances to the next step or confirms.\r\n if (state.modelPicker.open) {\r\n if (key.escape) {\r\n if (state.modelPicker.step === 'model') {\r\n dispatch({ type: 'modelPickerBack' });\r\n } else {\r\n dispatch({ type: 'modelPickerClose' });\r\n }\r\n return;\r\n }\r\n if (key.upArrow) {\r\n dispatch({ type: 'modelPickerMove', delta: -1 });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n dispatch({ type: 'modelPickerMove', delta: 1 });\r\n return;\r\n }\r\n if (isEnter) {\r\n inputGateRef.current = true;\r\n try {\r\n if (state.modelPicker.step === 'provider') {\r\n const opt = state.modelPicker.providerOptions[state.modelPicker.selected];\r\n if (!opt) return;\r\n dispatch({\r\n type: 'modelPickerPickProvider',\r\n providerId: opt.id,\r\n models: opt.models,\r\n });\r\n return;\r\n }\r\n // step === 'model' → commit the switch\r\n const providerId = state.modelPicker.pickedProviderId;\r\n const modelId = state.modelPicker.modelOptions[state.modelPicker.selected];\r\n if (!providerId || !modelId) return;\r\n const err = switchProviderAndModel?.(providerId, modelId);\r\n if (err) {\r\n dispatch({ type: 'modelPickerHint', text: err });\r\n return;\r\n }\r\n setLiveProvider(providerId);\r\n setLiveModel(modelId);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: `Switched to ${providerId} / ${modelId}.` },\r\n });\r\n dispatch({ type: 'modelPickerClose' });\r\n return;\r\n } finally {\r\n inputGateRef.current = false;\r\n }\r\n }\r\n // Any other key while picker is open: ignore.\r\n return;\r\n }\r\n\r\n // AutoPhase monitor toggle — Ctrl+P\r\n if (key.ctrl && input === 'p') {\r\n dispatch({ type: 'autoPhaseMonitorToggle' });\r\n return;\r\n }\r\n\r\n // Worktree monitor toggle — Ctrl+T opens, Ctrl+T closes (when open) or deletes word (when closed).\r\n if (key.ctrl && input === 't') {\r\n dispatch({ type: 'worktreeMonitorToggle' });\r\n return;\r\n }\r\n\r\n // Autonomy picker takes absolute precedence while open.\r\n if (state.autonomyPicker.open) {\r\n if (key.escape) {\r\n dispatch({ type: 'autonomyPickerClose' });\r\n return;\r\n }\r\n if (key.upArrow) {\r\n dispatch({ type: 'autonomyPickerMove', delta: -1 });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n dispatch({ type: 'autonomyPickerMove', delta: 1 });\r\n return;\r\n }\r\n if (isEnter) {\r\n const opt = state.autonomyPicker.options[state.autonomyPicker.selected];\r\n if (!opt) return;\r\n const err = switchAutonomy?.(opt.mode);\r\n if (err) {\r\n dispatch({ type: 'autonomyPickerHint', text: err });\r\n return;\r\n }\r\n dispatch({ type: 'autonomyPickerClose' });\r\n return;\r\n }\r\n return;\r\n }\r\n\r\n if (state.slashPicker.open) {\r\n if (key.escape) {\r\n dispatch({ type: 'slashPickerClose' });\r\n return;\r\n }\r\n if (key.upArrow) {\r\n dispatch({ type: 'slashPickerMove', delta: -1 });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n dispatch({ type: 'slashPickerMove', delta: 1 });\r\n return;\r\n }\r\n if (isEnter) {\r\n const now = Date.now();\r\n if (now - lastEnterAtRef.current < 50) return;\r\n lastEnterAtRef.current = now;\r\n inputGateRef.current = true;\r\n const line = selectedSlashCommandLine(state.slashPicker);\r\n if (line) {\r\n void submit(line);\r\n } else {\r\n acceptSlashPickerSelection();\r\n }\r\n inputGateRef.current = false;\r\n return;\r\n }\r\n // Tab → autocomplete with selected command\r\n if (key.tab && state.slashPicker.matches.length > 0) {\r\n const sel = state.slashPicker.matches[state.slashPicker.selected];\r\n if (sel) {\r\n setDraft(`/${sel.name} `, sel.name.length + 2);\r\n dispatch({ type: 'slashPickerClose' });\r\n }\r\n return;\r\n }\r\n // Any other key falls through to normal text handling.\r\n }\r\n\r\n // Picker takes precedence over normal input handling when open.\r\n if (state.picker.open) {\r\n if (key.escape) {\r\n dispatch({ type: 'pickerClose' });\r\n return;\r\n }\r\n if (key.upArrow) {\r\n dispatch({ type: 'pickerMove', delta: -1 });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n dispatch({ type: 'pickerMove', delta: 1 });\r\n return;\r\n }\r\n if (isEnter) {\r\n inputGateRef.current = true;\r\n try {\r\n await acceptPickerSelection();\r\n } finally {\r\n inputGateRef.current = false;\r\n }\r\n return;\r\n }\r\n // Any other key falls through to normal text handling, which will\r\n // either extend the @-query (e.g. typing more chars) or break it\r\n // (e.g. typing a space) — handled below.\r\n }\r\n\r\n // Esc when the agent is busy = \"drop what you're doing, I want to\r\n // steer\". Aborts the current iteration, terminates any running\r\n // subagents (otherwise they keep burning tokens on now-stale work),\r\n // and stashes a context snapshot so the STEERING preamble can tell\r\n // the model exactly what it was mid-doing. Does NOT consume the\r\n // Ctrl+C exit ladder (interrupts counter untouched). When no run\r\n // is active, Esc falls through to normal text handling.\r\n if (key.escape && state.status !== 'idle' && state.confirmQueue.length === 0) {\r\n // Snapshot context BEFORE we mutate anything. The submit handler\r\n // replays this into the model prompt so the model isn't guessing.\r\n const runningTools = Array.from(state.runningTools.values()).map((t) => t.name);\r\n const subagents = Object.values(state.fleet)\r\n .filter((e) => e.status === 'running')\r\n .map((e) => ({\r\n label: e.name,\r\n status: e.status,\r\n tool: e.currentTool?.name,\r\n }));\r\n const subagentsTerminated = subagents.length;\r\n const partialAssistantText = streamingTextRef.current.slice(-1500);\r\n\r\n activeCtrlRef.current?.abort();\r\n dispatch({ type: 'status', status: 'aborting' });\r\n dispatch({\r\n type: 'steerStart',\r\n snapshot: {\r\n runningTools,\r\n subagents,\r\n subagentsTerminated,\r\n partialAssistantText,\r\n },\r\n });\r\n\r\n // Kill the fleet too. Without this the subagents keep running\r\n // on the old direction, finish minutes later, and pollute the\r\n // chat with task.completed events the model doesn't care about\r\n // anymore. Cap at 1.5s so a wedged bridge can't hang the steer.\r\n if (director && subagentsTerminated > 0) {\r\n const cap = new Promise<void>((resolve) => {\r\n const t = setTimeout(resolve, 1500);\r\n t.unref?.();\r\n });\r\n void Promise.race([director.terminateAll().catch(() => undefined), cap]);\r\n }\r\n\r\n // Drop anything queued — steering means the user is redirecting,\r\n // not adding to the backlog. Without this the queued items would\r\n // run *before* the steering message, which contradicts the UX.\r\n const droppedCount = state.queue.length;\r\n if (droppedCount > 0) dispatch({ type: 'queueClear' });\r\n const droppedTag = droppedCount > 0 ? ` · dropped ${droppedCount} queued` : '';\r\n const fleetTag =\r\n subagentsTerminated > 0\r\n ? ` · stopped ${subagentsTerminated} subagent${subagentsTerminated === 1 ? '' : 's'}`\r\n : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `↯ Interrupted${droppedTag}${fleetTag}. Type your new direction.`,\r\n },\r\n });\r\n return;\r\n }\r\n\r\n // Ctrl+F toggles the full graphical fleet monitor overlay. Global —\r\n // works whether or not the agent is running, so the user can pop the\r\n // dashboard mid-run to watch subagents.\r\n if (key.ctrl && input === 'f') {\r\n dispatch({ type: 'toggleMonitor' });\r\n return;\r\n }\r\n // Ctrl+G toggles the agents monitor overlay.\r\n if (key.ctrl && input === 'g') {\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n return;\r\n }\r\n // Esc closes the monitor when it's the only thing open (the busy-state\r\n // Esc handler above already returned when a run was active).\r\n if (key.escape && state.monitorOpen) {\r\n dispatch({ type: 'toggleMonitor' });\r\n return;\r\n }\r\n if (key.escape && state.agentsMonitorOpen) {\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n return;\r\n }\r\n\r\n if (isEnter) {\r\n // Re-entrancy protection for terminals that emit `\\r\\n` as two\r\n // separate stdin events: ignore Enter pressed within 50ms of the\r\n // last one. The 50ms window catches the double-event reliably\r\n // (the second `\\n` arrives within microseconds of the `\\r`) while\r\n // staying well below human double-tap speed.\r\n //\r\n // We intentionally do NOT await submit() here — it kicks off\r\n // agent.run() which can stay pending for minutes when a delegate\r\n // call is in flight. Awaiting would block this handler frame for\r\n // the full duration, which means every subsequent keystroke would\r\n // miss its dispatch (including the slash key — the user reported\r\n // the input feeling dead during delegated work). submit() handles\r\n // its own re-entrancy via state.status: when the agent is busy,\r\n // the message is queued instead of re-running concurrently.\r\n const now = Date.now();\r\n if (now - lastEnterAtRef.current < 50) return;\r\n lastEnterAtRef.current = now;\r\n void submit();\r\n return;\r\n }\r\n\r\n const { buffer, cursor } = draftRef.current;\r\n\r\n if (key.backspace || key.delete) {\r\n if (key.ctrl) {\r\n if (key.backspace) {\r\n if (cursor === 0) return;\r\n const beforeCursor = buffer.slice(0, cursor);\r\n const lastWordStart = beforeCursor.lastIndexOf(' ') + 1;\r\n const next = beforeCursor.slice(0, lastWordStart) + buffer.slice(cursor);\r\n setDraft(next, lastWordStart);\r\n } else {\r\n if (cursor >= buffer.length) return;\r\n const afterCursor = buffer.slice(cursor);\r\n const nextWordStart = afterCursor.indexOf(' ');\r\n const end = nextWordStart === -1 ? buffer.length : cursor + nextWordStart + 1;\r\n const next = buffer.slice(0, cursor) + buffer.slice(end);\r\n setDraft(next, cursor);\r\n }\r\n return;\r\n }\r\n\r\n // Block-level backspace: if cursor is at end and buffer ends with a\r\n // placeholder pattern ([pasted #N] or [pasted]), delete the whole\r\n // placeholder and remove it from the placeholders list.\r\n if (key.backspace && cursor === buffer.length && state.placeholders.length > 0) {\r\n const BLOCK_PH_RE = /\\[pasted(?: #\\d+)?\\]$/;\r\n if (BLOCK_PH_RE.test(buffer)) {\r\n const newBuffer = buffer.replace(BLOCK_PH_RE, '').replace(/\\s+$/, '');\r\n dispatch({ type: 'removeLastPlaceholder' });\r\n setDraft(newBuffer, newBuffer.length);\r\n return;\r\n }\r\n }\r\n\r\n if (cursor === 0) return;\r\n const next = buffer.slice(0, cursor - 1) + buffer.slice(cursor);\r\n setDraft(next, cursor - 1);\r\n return;\r\n }\r\n\r\n if (key.leftArrow) {\r\n if (key.ctrl) {\r\n if (cursor === 0) return;\r\n const beforeCursor = buffer.slice(0, cursor);\r\n const prevWordStart = beforeCursor.lastIndexOf(' ');\r\n const target = prevWordStart === -1 ? 0 : prevWordStart + 1;\r\n setDraft(buffer, target);\r\n return;\r\n }\r\n if (cursor > 0) setDraft(buffer, cursor - 1);\r\n return;\r\n }\r\n if (key.rightArrow) {\r\n if (key.ctrl) {\r\n if (cursor >= buffer.length) return;\r\n const afterCursor = buffer.slice(cursor);\r\n const nextWordStart = afterCursor.indexOf(' ');\r\n const target = nextWordStart === -1 ? buffer.length : cursor + nextWordStart + 1;\r\n setDraft(buffer, target);\r\n return;\r\n }\r\n if (cursor < buffer.length) setDraft(buffer, cursor + 1);\r\n return;\r\n }\r\n if (key.home) {\r\n setDraft(buffer, 0);\r\n return;\r\n }\r\n if (key.end) {\r\n setDraft(buffer, buffer.length);\r\n return;\r\n }\r\n\r\n // History scrolling is delegated to the terminal's native scrollback\r\n // (mouse wheel, Shift+PgUp in Windows Terminal, etc.) — Ink's <Static>\r\n // emits each finalized entry once and never repaints over it.\r\n if (key.upArrow) {\r\n if (state.inputHistory.length > 0) dispatch({ type: 'historyUp' });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n if (state.historyIndex > 0) dispatch({ type: 'historyDown' });\r\n return;\r\n }\r\n // Ctrl+P → toggle PhaseMonitor overlay when AutoPhase is active.\r\n if (key.ctrl && input === 'p') {\r\n if (state.autoPhase) dispatch({ type: 'autoPhaseMonitorToggle' });\r\n else {\r\n // No active AutoPhase — treat as a command alias for /autophase status\r\n slashRegistry.dispatch('/autophase', agent.ctx).then((res) => {\r\n if (res?.message) dispatch({ type: 'addEntry', entry: { kind: 'info', text: res.message } });\r\n });\r\n }\r\n return;\r\n }\r\n if (key.ctrl && input === 'a') {\r\n setDraft(buffer, 0);\r\n return;\r\n }\r\n if (key.ctrl && input === 'e') {\r\n setDraft(buffer, buffer.length);\r\n return;\r\n }\r\n if (key.ctrl && input === 'u') {\r\n setDraft('', 0);\r\n return;\r\n }\r\n if (key.ctrl && input === 'w') {\r\n // Ctrl+T → toggle worktree monitor when it's open, otherwise delete word before cursor.\r\n if (state.worktreeMonitorOpen) {\r\n dispatch({ type: 'worktreeMonitorToggle' });\r\n return;\r\n }\r\n if (cursor === 0) return;\r\n const beforeCursor = buffer.slice(0, cursor);\r\n const lastWordStart = beforeCursor.lastIndexOf(' ') + 1;\r\n const next = buffer.slice(0, lastWordStart) + buffer.slice(cursor);\r\n setDraft(next, lastWordStart);\r\n return;\r\n }\r\n\r\n // Delete key and Ctrl+D → delete character at cursor (forward delete).\r\n // Ctrl+D also doubles as \"EOF\" in some shells — here it's just convenient\r\n // forward-delete when the user isn't at the terminal's physical Delete key.\r\n if (key.delete || (key.ctrl && input === 'd')) {\r\n if (cursor >= buffer.length) return;\r\n const next = buffer.slice(0, cursor) + buffer.slice(cursor + 1);\r\n setDraft(next, cursor);\r\n return;\r\n }\r\n\r\n // Ctrl+K → kill: delete from cursor to end of line.\r\n if (key.ctrl && input === 'k') {\r\n if (cursor >= buffer.length) return;\r\n const next = buffer.slice(0, cursor);\r\n setDraft(next, cursor);\r\n return;\r\n }\r\n\r\n // Alt+V → read image from clipboard and attach as [image #N].\r\n if (key.meta && input === 'v') {\r\n await pasteClipboardImage();\r\n return;\r\n }\r\n\r\n if (!input || key.ctrl || key.meta) return;\r\n\r\n // Non-bracketed large paste: some terminals (notably older Windows\r\n // consoles) don't emit \\x1b[200~ markers, so a paste arrives as one big\r\n // text chunk. Bracketed pastes are already handled by the accumulation\r\n // guard near the top of handleKey; route big unmarked chunks through the\r\n // same finalizer so they collapse to a pill consistently.\r\n if (input.length > PASTE_THRESHOLD_CHARS) {\r\n await commitPaste(input);\r\n return;\r\n }\r\n\r\n // Plain multi-line paste below the threshold. Strip newlines to spaces\r\n // so the input row stays visually single-line while the content still\r\n // carries through to the agent.\r\n if (input.includes('\\n')) {\r\n const normalized = input.replace(/\\r?\\n/g, ' ');\r\n const next = buffer.slice(0, cursor) + normalized + buffer.slice(cursor);\r\n setDraft(next, cursor + normalized.length);\r\n return;\r\n }\r\n\r\n const next = buffer.slice(0, cursor) + input + buffer.slice(cursor);\r\n setDraft(next, cursor + input.length);\r\n };\r\n\r\n /**\r\n * Drive a single iteration: run the agent against `blocks`, render the\r\n * result into history, then if any messages were typed while we were\r\n * busy, pull the head of the queue and recurse. Recursion terminates\r\n * when the queue is empty (status stays idle).\r\n */\r\n const runBlocks = async (blocks: ContentBlock[]): Promise<void> => {\r\n const ctrl = new AbortController();\r\n activeCtrlRef.current = ctrl;\r\n // Each run starts a fresh interrupt cycle: 1st Ctrl+C aborts, 2nd exits.\r\n // submit() already resets, but queue-drain / runText / autonomy paths\r\n // re-enter runBlocks without going through submit — without this reset a\r\n // stale counter from a prior abort would make the next run's first\r\n // Ctrl+C force-exit instead of aborting.\r\n dispatch({ type: 'resetInterrupts' });\r\n dispatch({ type: 'status', status: 'running' });\r\n\r\n try {\r\n const startedAt = Date.now();\r\n const before = tokenCounter?.total();\r\n const costBefore = tokenCounter?.estimateCost().total ?? 0;\r\n const routed = blocks.some((block) => block.type === 'image')\r\n ? await routeImagesForModel(blocks, {\r\n supportsVision: supportsVision\r\n ? await supportsVision()\r\n : agent.ctx.provider.capabilities.vision,\r\n adapters: visionAdapters,\r\n ctx: agent.ctx,\r\n signal: ctrl.signal,\r\n providerId: agent.ctx.provider.id,\r\n model: agent.ctx.model,\r\n })\r\n : { blocks, route: 'none' as const, convertedImages: 0 };\r\n if (routed.route === 'adapter') {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `Image input analyzed via ${routed.adapterName ?? 'vision adapter'} (${routed.convertedImages} image${routed.convertedImages === 1 ? '' : 's'}).`,\r\n },\r\n });\r\n }\r\n const result = await agent.run(routed.blocks, { signal: ctrl.signal });\r\n\r\n // Per-iteration assistant text was already committed by the\r\n // `provider.response` listener as each LLM call finished. Safety net:\r\n // if anything is still lingering in the synchronous ref (e.g. an\r\n // aborted run that never received a final provider.response), commit\r\n // it now so partial output is preserved rather than silently dropped.\r\n const lingering = streamingTextRef.current;\r\n if (lingering.trim()) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'assistant', text: lingering } });\r\n }\r\n streamingTextRef.current = '';\r\n pendingDeltaRef.current = '';\r\n if (flushTimerRef.current) {\r\n clearTimeout(flushTimerRef.current);\r\n flushTimerRef.current = null;\r\n }\r\n dispatch({ type: 'streamReset' });\r\n\r\n if (result.status === 'aborted') {\r\n dispatch({ type: 'addEntry', entry: { kind: 'warn', text: 'Aborted.' } });\r\n } else if (result.status === 'failed') {\r\n const err = result.error;\r\n const text = err\r\n ? `Failed [${err.severity}${err.recoverable ? ', recoverable' : ''}]: ${err.describe()}`\r\n : 'Failed.';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text },\r\n });\r\n } else if (result.status === 'max_iterations') {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: `Hit max iterations (${result.iterations}).` },\r\n });\r\n }\r\n\r\n // ── SDD Auto-Detection ──────────────────────────────────────────\r\n // Process AI output for spec, implementation plan, and task detection.\r\n if (result.status === 'done' && result.finalText && onSDDOutput) {\r\n try {\r\n const sddMessages = await onSDDOutput(result.finalText);\r\n for (const msg of sddMessages) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'info', text: msg } });\r\n }\r\n } catch {\r\n // Non-fatal — SDD detection is best-effort\r\n }\r\n }\r\n\r\n if (tokenCounter && before) {\r\n const after = tokenCounter.total();\r\n const costAfter = tokenCounter.estimateCost().total;\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'turn-summary',\r\n text: `[in: ${fmtTok(after.input - before.input)} out: ${fmtTok(after.output - before.output)} iters: ${result.iterations} cost: ${(costAfter - costBefore).toFixed(4)} ${((Date.now() - startedAt) / 1000).toFixed(1)}s]`,\r\n },\r\n });\r\n }\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: err instanceof Error ? err.message : String(err) },\r\n });\r\n } finally {\r\n activeCtrlRef.current = null;\r\n dispatch({ type: 'status', status: 'idle' });\r\n }\r\n\r\n // Drain the queue. If the run was aborted, the SIGINT handler has\r\n // already cleared the queue, so the head will be undefined.\r\n const head = stateRef.current.queue[0];\r\n if (head) {\r\n dispatch({ type: 'dequeueFirst' });\r\n await runBlocks(head.blocks);\r\n }\r\n };\r\n const runBlocksRef = useRef(runBlocks);\r\n runBlocksRef.current = runBlocks;\r\n\r\n /**\r\n * Eternal-mode driver. Loops `engine.runOneIteration()` until autonomy\r\n * flips away from 'eternal' or the engine reports stopped state. Each\r\n * iteration appends an info entry summarizing what happened so the TUI\r\n * timeline shows the engine's activity. Runs as a single sequential\r\n * consumer of `agent.run` — no race with user submissions because user\r\n * input is gated by `state.status` (a running iteration keeps status\r\n * at 'running' until the agent.run inside the engine returns).\r\n */\r\n const runEternalLoop = async (): Promise<void> => {\r\n const engine = getEternalEngine?.();\r\n if (!engine) return;\r\n // Avoid double-driving if the loop is already running. Status will\r\n // bounce idle↔running per iteration; the autonomy flag is the source\r\n // of truth for \"should we keep going\".\r\n if (eternalLoopRunningRef.current) return;\r\n eternalLoopRunningRef.current = true;\r\n try {\r\n while (true) {\r\n // Re-check the live state every iteration — /autonomy stop, SIGINT,\r\n // or /goal clear could have flipped it during the prior iteration.\r\n const liveMode = getAutonomy?.() ?? 'off';\r\n if (liveMode !== 'eternal') break;\r\n if (engine.currentState === 'stopped') break;\r\n dispatch({ type: 'status', status: 'running' });\r\n try {\r\n // Per-iteration entries land via the subscribeEternalIteration\r\n // useEffect below — we don't need to log here. Only surface\r\n // *errors* the engine catches but doesn't journal.\r\n await engine.runOneIteration();\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: `[eternal] ${err instanceof Error ? err.message : String(err)}` },\r\n });\r\n }\r\n dispatch({ type: 'status', status: 'idle' });\r\n // Yield so a slash command submitted between iterations (e.g.\r\n // /autonomy stop) actually lands before we kick the next one.\r\n await new Promise((r) => setTimeout(r, 200));\r\n }\r\n } finally {\r\n eternalLoopRunningRef.current = false;\r\n // Sync the displayed autonomy state with reality. The loop only exits\r\n // when getAutonomy() !== 'eternal' or engine.currentState === 'stopped',\r\n // both of which mean the mode is effectively off/idle. Refreshing here\r\n // stops the status bar from oscillating between \"● thinking…\" and\r\n // \"● idle\" forever after the goal is done.\r\n if (getAutonomy) {\r\n const finalMode = getAutonomy();\r\n if (finalMode !== autonomyLive) setAutonomyLive(finalMode);\r\n }\r\n }\r\n };\r\n const eternalLoopRunningRef = useRef(false);\r\n const runEternalLoopRef = useRef(runEternalLoop);\r\n runEternalLoopRef.current = runEternalLoop;\r\n\r\n /** Parallel-eternal driver — fan-out loop for the ParallelEternalEngine. */\r\n const runParallelLoop = async (): Promise<void> => {\r\n const engine = getParallelEngine?.();\r\n if (!engine) return;\r\n if (parallelLoopRunningRef.current) return;\r\n parallelLoopRunningRef.current = true;\r\n try {\r\n while (true) {\r\n const liveMode = getAutonomy?.() ?? 'off';\r\n if (liveMode !== 'eternal-parallel') break;\r\n if (engine.currentState === 'stopped') break;\r\n dispatch({ type: 'status', status: 'running' });\r\n try {\r\n await engine.runOneIteration();\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: `[parallel] ${err instanceof Error ? err.message : String(err)}` },\r\n });\r\n }\r\n dispatch({ type: 'status', status: 'idle' });\r\n await new Promise((r) => setTimeout(r, 200));\r\n }\r\n } finally {\r\n parallelLoopRunningRef.current = false;\r\n if (getAutonomy) {\r\n const finalMode = getAutonomy();\r\n if (finalMode !== autonomyLive) setAutonomyLive(finalMode);\r\n }\r\n }\r\n };\r\n const parallelLoopRunningRef = useRef(false);\r\n const runParallelLoopRef = useRef(runParallelLoop);\r\n runParallelLoopRef.current = runParallelLoop;\r\n\r\n // Subscribe to live per-iteration events from the eternal engine. The\r\n // engine's loop drive (runEternalLoop above) emits \"iteration completed\"\r\n // info entries, but those are coarse — this subscription surfaces the\r\n // *actual* journal entry per iteration with source, status, and cost.\r\n // Without it the TUI timeline only shows one-line summaries; with it the\r\n // user sees `#42 ✓ [todo] refactor parser ($0.0034)`.\r\n useEffect(() => {\r\n if (!subscribeEternalIteration) return;\r\n const unsub = subscribeEternalIteration((entry) => {\r\n const mark = entry.status === 'success' ? '✓' : entry.status === 'failure' ? '✗' : entry.status === 'aborted' ? '⊘' : '·';\r\n const cost = typeof entry.costUsd === 'number' ? ` ($${entry.costUsd.toFixed(4)})` : '';\r\n const note = entry.note ? ` — ${entry.note.slice(0, 80)}` : '';\r\n const text = `#${entry.iteration} ${mark} [${entry.source}] ${entry.task}${cost}${note}`;\r\n dispatch({ type: 'addEntry', entry: { kind: 'info', text } });\r\n });\r\n return unsub;\r\n }, [subscribeEternalIteration]);\r\n\r\n // Subscribe to live stage-transition events from the eternal engine.\r\n // Drives `state.eternalStage` used by the status bar to show the\r\n // engine's current location (decide → execute → reflect → sleep/paused).\r\n useEffect(() => {\r\n if (!subscribeEternalStage) return;\r\n const unsub = subscribeEternalStage((stage) => {\r\n dispatch({ type: 'eternalStage', stage });\r\n });\r\n return unsub;\r\n }, [subscribeEternalStage]);\r\n\r\n const submit = async (overrideRaw?: string) => {\r\n const raw = overrideRaw ?? draftRef.current.buffer;\r\n const trimmed = raw.trim();\r\n if (!trimmed && state.placeholders.length === 0) return;\r\n\r\n dispatch({ type: 'resetInterrupts' });\r\n const pushSubmittedHistory = () => {\r\n if (trimmed) dispatch({ type: 'historyPush', text: trimmed });\r\n };\r\n if (trimmed === '/image' || trimmed === '/paste-image') {\r\n pushSubmittedHistory();\r\n clearDraft();\r\n await pasteClipboardImage();\r\n return;\r\n }\r\n\r\n // Slash commands always dispatch immediately, even mid-iteration —\r\n // they don't conflict with a running agent.\r\n if (trimmed.startsWith('/')) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'user', text: trimmed } });\r\n pushSubmittedHistory();\r\n clearDraft();\r\n try {\r\n const res = await slashRegistry.dispatch(trimmed, agent.ctx);\r\n if (res?.message) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'info', text: res.message } });\r\n }\r\n // autoPhaseInit: when /autophase start succeeds, the graph title is\r\n // embedded in metadata so the TUI can show the PhasePanel immediately\r\n // even before the first orchestrator event fires.\r\n if (res?.metadata?.autoPhaseInit) {\r\n const m = res.metadata.autoPhaseInit as { title: string };\r\n dispatch({ type: 'autoPhaseInit', title: m.title });\r\n }\r\n // Slash commands like /model and /use mutate agent.ctx directly.\r\n // Re-sync the visible status bar so the user sees the switch\r\n // landed; otherwise the bar keeps the startup-time values and\r\n // /model \"feels\" broken even when subsequent requests use the\r\n // new model.\r\n const ctxModel = agent.ctx.model;\r\n if (ctxModel && ctxModel !== liveModel) setLiveModel(ctxModel);\r\n const ctxProviderId = (agent.ctx.provider as { id?: string } | undefined)?.id;\r\n if (ctxProviderId && ctxProviderId !== liveProvider) setLiveProvider(ctxProviderId);\r\n if (getYolo) {\r\n const currentYolo = getYolo();\r\n if (currentYolo !== yoloLive) setYoloLive(currentYolo);\r\n }\r\n if (getAutonomy) {\r\n const currentAutonomy = getAutonomy();\r\n if (currentAutonomy !== autonomyLive) setAutonomyLive(currentAutonomy);\r\n // When /autonomy eternal lands, kick off the engine-driven loop.\r\n // Fire-and-forget — the loop runs until autonomy flips away from\r\n // 'eternal' or the engine's currentState goes !== 'running'.\r\n // Without this, the slash command would set the flag but the\r\n // TUI would just sit at the prompt waiting for user input.\r\n if (currentAutonomy === 'eternal' && getEternalEngine) {\r\n void runEternalLoopRef.current();\r\n }\r\n if (currentAutonomy === 'eternal-parallel' && getParallelEngine) {\r\n void runParallelLoopRef.current();\r\n }\r\n }\r\n if (res?.exit) {\r\n exit();\r\n onExit(0);\r\n }\r\n // `runText` lets a slash command queue a follow-up user-role\r\n // message (used by `/steer <text>` to send the STEERING\r\n // preamble + new direction as if the user had typed it).\r\n // Run AFTER the message is rendered so the user sees the\r\n // slash result before the model's response streams.\r\n if (res?.runText) {\r\n const b = builderRef.current;\r\n if (b) {\r\n b.appendText(res.runText);\r\n const blocks = await b.submit();\r\n // Wait briefly for any in-flight abort to settle into\r\n // 'idle' before kicking the next iteration — otherwise\r\n // runBlocks would early-return on the busy guard.\r\n const start = Date.now();\r\n while (stateRef.current.status !== 'idle' && Date.now() - start < 1500) {\r\n await new Promise((r) => setTimeout(r, 25));\r\n }\r\n await runBlocks(blocks);\r\n }\r\n }\r\n // Only fire onClearHistory for `/clear` — without this gate every\r\n // slash command (`/model`, `/use`, `/help`, …) would wipe the\r\n // conversation. Match the command name segment, not just the\r\n // prefix, so `/clearfoo` doesn't trigger.\r\n const cmd = trimmed.slice(1).split(/\\s+/, 1)[0];\r\n if (cmd === 'clear') {\r\n onClearHistory?.(dispatch);\r\n }\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: err instanceof Error ? err.message : String(err) },\r\n });\r\n }\r\n return;\r\n }\r\n\r\n const builder = builderRef.current;\r\n if (!builder) return;\r\n // Steering inject: if the user pressed Esc on the prior iteration,\r\n // prepend a STEERING preamble so the model sees this isn't a\r\n // follow-up — it's an interrupt redirecting the work. The preamble\r\n // carries (a) context the model would otherwise have to guess\r\n // (what tools were running, what subagents were live) and (b)\r\n // explicit authority — \"drop the prior plan, respawn subagents\r\n // if useful, ask for clarification if needed\". Plain user-role\r\n // text so accountability stays with the human who triggered it.\r\n const steering = state.steeringPending;\r\n\r\n // ── SDD Context Injection ──────────────────────────────────────────\r\n // When an SDD session is active, prepend the session context so the\r\n // model knows it's in a spec-building conversation.\r\n const sddContext = getSDDContext?.();\r\n if (sddContext && trimmed) {\r\n builder.appendText(`[SDD SESSION ACTIVE]\\n${sddContext}\\n\\n---\\nUser message:\\n`);\r\n }\r\n\r\n if (trimmed) {\r\n const toAppend = steering ? buildSteeringPreamble(state.steerSnapshot, trimmed) : trimmed;\r\n builder.appendText(toAppend);\r\n }\r\n if (steering) dispatch({ type: 'steerConsume' });\r\n // The user sees their original text + a visual ↯ marker when\r\n // steering, not the full preamble — keeps the chat readable while\r\n // the model still gets the explicit instruction.\r\n const displayText = trimmed ? (steering ? `↯ ${trimmed}` : trimmed) : '(attachments only)';\r\n // Build history preview from placeholders + their actual content.\r\n // Each placeholder becomes a label line; if content was stored, show a preview.\r\n const pasteParts: string[] = [];\r\n for (let i = 0; i < state.placeholders.length; i++) {\r\n const label = state.placeholders[i]!;\r\n const content = state.placeholderContents[i] ?? '';\r\n pasteParts.push(label);\r\n if (content) pasteParts.push(` ${content.split('\\n').slice(0, 6).join('\\n ')}`);\r\n }\r\n const pasteContent = pasteParts.length > 0 ? pasteParts.join('\\n') : undefined;\r\n pushSubmittedHistory();\r\n clearDraft();\r\n const blocks = await builder.submit();\r\n\r\n if (state.status !== 'idle') {\r\n // Agent is busy — queue this message for the drainer to pick up.\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'user', text: displayText, queued: true, pasteContent },\r\n });\r\n dispatch({ type: 'enqueue', item: { displayText, blocks } });\r\n return;\r\n }\r\n\r\n dispatch({ type: 'addEntry', entry: { kind: 'user', text: displayText, pasteContent } });\r\n await runBlocks(blocks);\r\n };\r\n\r\n // ─── --goal / --ask boot inject ─────────────────────────────────────\r\n // The CLI may pass `--goal \"...\"` or `--ask \"...\"` to pre-populate the\r\n // very first turn. `initialGoal` wraps the text in the GOAL preamble so\r\n // the model lands in autonomous goal mode; `initialAsk` submits the text\r\n // verbatim (handy for scripted shell aliases). Both fire one-shot via a\r\n // mount-time ref guard so a re-render can't double-submit. We wait a tick\r\n // for the input builder to settle, then push directly into runBlocks —\r\n // bypassing the slash registry / submit() path keeps the boot path\r\n // self-contained even if user-installed slash commands haven't mounted\r\n // their effects yet.\r\n const bootInjectedRef = useRef(false);\r\n useEffect(() => {\r\n if (bootInjectedRef.current) return;\r\n bootInjectedRef.current = true;\r\n const goal = initialGoal?.trim();\r\n const ask = initialAsk?.trim();\r\n if (!goal && !ask) return;\r\n void (async () => {\r\n // Give the banner a frame to render first so the user sees the\r\n // greeting before the first turn streams over the top of it.\r\n await new Promise((r) => setTimeout(r, 50));\r\n const b = builderRef.current;\r\n if (!b) return;\r\n if (goal) {\r\n const shortGoal = goal.length > 80 ? `${goal.slice(0, 80)}…` : goal;\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `🎯 Goal locked: ${shortGoal}\\n Agent will work until verifiably complete. Esc / /steer to redirect, Ctrl+C to stop.`,\r\n },\r\n });\r\n b.appendText(buildGoalPreamble(goal));\r\n } else if (ask) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'user', text: ask } });\r\n b.appendText(ask);\r\n }\r\n const blocks = await b.submit();\r\n await runBlocksRef.current(blocks);\r\n })();\r\n }, [initialAsk, initialGoal]);\r\n\r\n const inputHint = useMemo(() => {\r\n if (state.status !== 'idle') return '';\r\n if (state.buffer.startsWith('/')) return 'slash command — Enter to dispatch';\r\n if (state.picker.open) return '';\r\n return '';\r\n }, [state.buffer, state.status, state.picker.open]);\r\n\r\n return (\r\n <Box flexDirection=\"column\">\r\n <History\r\n entries={state.entries}\r\n streamingText={state.streamingText}\r\n toolStream={state.toolStream}\r\n />\r\n {/* Live activity strip — one line per running subagent with\r\n current tool + elapsed timer. Sits directly above the input\r\n area so it's always visible without scrolling. Renders\r\n nothing when no subagents are running. */}\r\n <LiveActivityStrip entries={state.fleet} nowTick={nowTick} />\r\n <Input\r\n value={state.buffer}\r\n cursor={state.cursor}\r\n placeholders={state.placeholders}\r\n disabled={state.status === 'aborting' || state.confirmQueue.length > 0}\r\n hint={inputHint}\r\n onKey={handleKey}\r\n />\r\n {state.picker.open ? (\r\n <FilePicker\r\n query={state.picker.query}\r\n matches={state.picker.matches}\r\n selected={state.picker.selected}\r\n />\r\n ) : null}\r\n {state.slashPicker.open ? (\r\n <SlashMenu\r\n query={state.slashPicker.query}\r\n matches={state.slashPicker.matches}\r\n selected={state.slashPicker.selected}\r\n />\r\n ) : null}\r\n {state.modelPicker.open ? (\r\n <ModelPicker\r\n step={state.modelPicker.step}\r\n providerOptions={state.modelPicker.providerOptions}\r\n modelOptions={state.modelPicker.modelOptions}\r\n selected={state.modelPicker.selected}\r\n pickedProviderId={state.modelPicker.pickedProviderId}\r\n hint={state.modelPicker.hint}\r\n />\r\n ) : null}\r\n {state.autonomyPicker.open ? (\r\n <AutonomyPicker\r\n options={state.autonomyPicker.options}\r\n selected={state.autonomyPicker.selected}\r\n hint={state.autonomyPicker.hint}\r\n />\r\n ) : null}\r\n {state.rewindOverlay ? (\r\n <CheckpointTimeline\r\n checkpoints={state.rewindOverlay.checkpoints}\r\n selected={state.rewindOverlay.selected}\r\n onSelect={(i) => dispatch({ type: 'rewindOverlayMove', delta: i - state.rewindOverlay!.selected })}\r\n onConfirm={(i) => handleRewindTo(state.rewindOverlay!.checkpoints[i]!.promptIndex)}\r\n onClose={() => dispatch({ type: 'rewindOverlayClose' })}\r\n />\r\n ) : null}\r\n {state.confirmQueue.length > 0 && (() => {\r\n const head = state.confirmQueue[0]!;\r\n let resolved = false;\r\n return (\r\n <ConfirmPrompt\r\n toolName={head.toolName}\r\n input={head.input}\r\n suggestedPattern={head.suggestedPattern}\r\n onDecision={(decision) => {\r\n if (resolved) return;\r\n resolved = true;\r\n head.resolve(decision);\r\n dispatch({ type: 'confirmClose' });\r\n }}\r\n />\r\n );\r\n })()}\r\n <StatusBar\r\n model={`${liveProvider}/${liveModel}`}\r\n version={appVersion}\r\n state={state.status}\r\n tokenCounter={tokenCounter}\r\n hint={renderRunningTools(state.runningTools) || state.hint}\r\n queueCount={state.queue.length}\r\n yolo={yoloLive}\r\n autonomy={autonomyLive}\r\n elapsedMs={elapsedMs}\r\n todos={todos}\r\n plan={planCounts ?? undefined}\r\n fleet={fleetCounts}\r\n git={gitInfo}\r\n context={contextWindow}\r\n projectName={projectName}\r\n subagentCount={Object.keys(state.fleet).length}\r\n processCount={getProcessRegistry().activeCount}\r\n hiddenItems={hiddenItems}\r\n eternalStage={state.eternalStage}\r\n goalSummary={state.goalSummary}\r\n />\r\n {/* Agents monitor overlay (Ctrl+G) and fleet monitor overlay (Ctrl+F)\r\n take up the lower region — hide FleetPanel while any overlay is open. */}\r\n {state.agentsMonitorOpen ? (\r\n <AgentsMonitor\r\n entries={entriesWithLeader}\r\n totalCost={state.fleetCost}\r\n totalTokens={state.fleetTokens}\r\n nowTick={nowTick}\r\n />\r\n ) : state.autoPhase?.monitorOpen ? (\r\n <PhaseMonitor\r\n phases={state.autoPhase.phases}\r\n runningPhaseIds={state.autoPhase.runningPhaseIds}\r\n elapsedMs={state.autoPhase.elapsedMs}\r\n nowTick={nowTick}\r\n onClose={() => dispatch({ type: 'autoPhaseMonitorToggle' })}\r\n />\r\n ) : state.worktreeMonitorOpen ? (\r\n <WorktreeMonitor\r\n worktrees={state.worktrees}\r\n baseBranch={state.worktreeBase}\r\n nowTick={nowTick}\r\n onClose={() => dispatch({ type: 'worktreeMonitorToggle' })}\r\n />\r\n ) : state.monitorOpen ? (\r\n <FleetMonitor\r\n entries={state.fleet}\r\n totalCost={state.fleetCost}\r\n totalTokens={state.fleetTokens}\r\n nowTick={nowTick}\r\n />\r\n ) : director ? (\r\n <FleetPanel entries={state.fleet} totalCost={state.fleetCost} roster={fleetRoster} />\r\n ) : null}\r\n {state.autoPhase && !state.autoPhase.monitorOpen ? (\r\n <PhasePanel\r\n phases={state.autoPhase.phases}\r\n runningPhaseIds={state.autoPhase.runningPhaseIds}\r\n nowTick={nowTick}\r\n />\r\n ) : null}\r\n {Object.keys(state.worktrees).length > 0 && !state.worktreeMonitorOpen && !state.monitorOpen ? (\r\n <WorktreePanel worktrees={state.worktrees} nowTick={nowTick} />\r\n ) : null}\r\n </Box>\r\n );\r\n}\r\n\r\n/**\r\n * Render an at-a-glance \"running: …\" hint for the status bar. Shows the\r\n * oldest in-flight tool by name; if more than one, appends \"(+N)\".\r\n */\r\nexport function renderRunningTools(\r\n running: ReadonlyMap<string, { name: string; startedAt: number }>,\r\n): string {\r\n if (running.size === 0) return '';\r\n let oldest: { name: string; startedAt: number } | null = null;\r\n for (const info of running.values()) {\r\n if (!oldest || info.startedAt < oldest.startedAt) oldest = info;\r\n }\r\n if (!oldest) return '';\r\n const elapsedSec = ((Date.now() - oldest.startedAt) / 1000).toFixed(1);\r\n const more = running.size > 1 ? ` (+${running.size - 1})` : '';\r\n return `running: ${oldest.name} ${elapsedSec}s${more}`;\r\n}\r\n\r\n/**\r\n * Find an active `@<query>` token at the cursor. The token starts at the\r\n * last `@` not preceded by a non-whitespace char, and runs up to the cursor\r\n * (no whitespace allowed inside). Returns null if no active token.\r\n */\r\nexport function detectAtToken(\r\n buffer: string,\r\n cursor: number,\r\n): { start: number; end: number; query: string } | null {\r\n let i = cursor - 1;\r\n while (i >= 0) {\r\n const ch = buffer.charCodeAt(i);\r\n if (ch === 64 /* @ */) {\r\n // Must be at the start of buffer or preceded by whitespace.\r\n if (i === 0 || /\\s/.test(buffer[i - 1] ?? '')) {\r\n return { start: i, end: cursor, query: buffer.slice(i + 1, cursor) };\r\n }\r\n return null;\r\n }\r\n if (ch === 32 /* space */ || ch === 9 /* tab */ || ch === 10 /* nl */) return null;\r\n i--;\r\n }\r\n return null;\r\n}\r\n\r\nfunction fmtTok(n: number): string {\r\n if (n < 1000) return String(n);\r\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\r\n return `${(n / 1_000_000).toFixed(1)}M`;\r\n}\r\n","import type { EventBus } from '@wrongstack/core';\n\n/**\n * Animated terminal/tab title for the TUI.\n *\n * Writes an OSC-0 sequence (`ESC ] 0 ; <text> BEL`) — an out-of-band terminal\n * command that sets the window/tab title without touching the screen, so it\n * never corrupts Ink's render. The title animates: a braille spinner plus a\n * live status derived from the agent's EventBus (thinking / running a tool),\n * and a gentle scrolling marquee when idle. Reset to a static title on stop.\n *\n * Disable with WRONGSTACK_NO_TITLE=1.\n */\n\nconst SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\nconst setTitle = (s: string): string => `\\x1b]0;${s}\\x07`;\n\n/** A marquee window over `text`, advancing by `offset`. */\nfunction marquee(text: string, offset: number, width: number): string {\n const padded = `${text} `;\n const start = offset % padded.length;\n return (padded + padded).slice(start, start + width);\n}\n\nexport interface TerminalTitleOptions {\n stdout: NodeJS.WriteStream;\n events: EventBus;\n model?: string;\n appName?: string;\n intervalMs?: number;\n /** ms of silence before the title falls back to the idle marquee. */\n idleAfterMs?: number;\n}\n\nexport function startTerminalTitle(opts: TerminalTitleOptions): () => void {\n const { stdout, events } = opts;\n if (process.env['WRONGSTACK_NO_TITLE'] === '1' || !stdout.isTTY) {\n return () => {};\n }\n\n const app = opts.appName ?? 'WrongStack';\n const idleAfter = opts.idleAfterMs ?? 3500;\n const suffix = ` · ${app}`;\n\n let frame = 0;\n let scroll = 0;\n let phase: 'idle' | 'thinking' | 'tool' = 'idle';\n let toolName = '';\n let lastActivity = 0; // 0 → never active yet, start idle\n\n const touch = (next: 'thinking' | 'tool', tool?: string) => {\n phase = next;\n if (tool) toolName = tool;\n lastActivity = Date.now();\n };\n\n const offs: Array<() => void> = [\n events.on('iteration.started', () => touch('thinking')),\n events.on('provider.text_delta', () => touch('thinking')),\n events.on('provider.thinking_delta', () => touch('thinking')),\n events.on('tool.started', (e) => touch('tool', (e as { name?: string }).name ?? 'tool')),\n events.on('tool.executed', () => touch('thinking')),\n ];\n\n const write = (s: string) => {\n try {\n stdout.write(s);\n } catch {\n /* stdout closed during shutdown */\n }\n };\n\n const timer = setInterval(() => {\n frame = (frame + 1) % SPINNER.length;\n scroll += 1;\n if (lastActivity && Date.now() - lastActivity > idleAfter) phase = 'idle';\n\n const sp = SPINNER[frame];\n let title: string;\n if (phase === 'tool') {\n title = `${sp} ▸ ${toolName}${suffix}`;\n } else if (phase === 'thinking') {\n title = `${sp} thinking…${suffix}`;\n } else {\n // Idle: scroll the app name + model so the tab still feels alive.\n title = marquee(`✦ ${app}${suffix}`, scroll >> 1, 22);\n }\n write(setTitle(title));\n }, opts.intervalMs ?? 130);\n // Don't keep the event loop alive just for the title animation.\n timer.unref?.();\n\n return () => {\n clearInterval(timer);\n for (const off of offs) off();\n write(setTitle(app));\n };\n}\n","import type {\n Agent,\n AttachmentStore,\n Director,\n EventBus,\n FleetBus,\n FleetUsageAggregator,\n QueueStore,\n SlashCommandRegistry,\n TokenCounter,\n} from '@wrongstack/core';\nimport type { VisionAdapters } from '@wrongstack/runtime/vision';\nimport { render } from 'ink';\nimport React from 'react';\nimport { App } from './app.js';\nimport { startTerminalTitle } from './terminal-title.js';\n\nexport interface RunTuiOptions {\n agent: Agent;\n slashRegistry: SlashCommandRegistry;\n attachments: AttachmentStore;\n events: EventBus;\n tokenCounter?: TokenCounter;\n visionAdapters?: VisionAdapters;\n /** Resolve current model vision support. Falls back to provider capability when omitted. */\n supportsVision?: () => boolean | Promise<boolean>;\n model: string;\n banner?: boolean;\n /** Persists the input queue across crashes; if omitted, the queue is in-memory only. */\n queueStore?: QueueStore;\n /** Surfaces the \"⚠ YOLO\" chip in the status bar. */\n yolo?: boolean;\n /** Query live YOLO state from the permission policy. */\n getYolo?: () => boolean;\n /** Query the live autonomy mode. */\n getAutonomy?: () => 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';\n /**\n * Access the eternal-autonomy engine. When autonomy mode flips to\n * 'eternal' the TUI drives `runOneIteration()` from the post-slash hook\n * so the engine and TUI never race for the shared Context.\n */\n getEternalEngine?: () => import('@wrongstack/core').EternalAutonomyEngine | null;\n /**\n * Access the parallel-eternal engine. When autonomy mode flips to\n * 'eternal-parallel' the TUI drives `runOneIteration()` from the post-slash\n * hook so the engine and TUI never race for the shared Context.\n */\n getParallelEngine?: () => import('@wrongstack/core').ParallelEternalEngine | null;\n /**\n * Subscribe to live per-iteration events from the eternal engine.\n * Returns an unsubscribe function. TUI uses this to render each\n * iteration as a live timeline entry as it lands.\n */\n subscribeEternalIteration?: (\n fn: (entry: import('@wrongstack/core').JournalEntry) => void,\n ) => () => void;\n /**\n * Subscribe to per-iteration stage transitions from the eternal engine.\n * TUI uses this to render live status (decide → execute → reflect →\n * sleep/paused/stopped) in the status bar.\n */\n subscribeEternalStage?: (\n fn: (stage: {\n phase: 'idle';\n } | {\n phase: 'decide';\n reason: string;\n } | {\n phase: 'execute';\n task: string;\n } | {\n phase: 'reflect';\n status: 'success' | 'failure' | 'aborted' | 'skipped';\n note?: string;\n } | {\n phase: 'sleep';\n ms: number;\n } | {\n phase: 'paused';\n } | {\n phase: 'stopped';\n } | {\n phase: 'error';\n message: string;\n }) => void,\n ) => () => void;\n /** Renders in the startup banner. Read from the CLI's package.json. */\n appVersion?: string;\n /** Provider id for the startup banner (\"openai\", \"anthropic\", ...). */\n provider?: string;\n /** Wire family — shown beneath provider in the banner. */\n family?: string;\n /** Last 3 chars of the active API key — shown in the banner for visual key-pick verification. */\n keyTail?: string;\n /** Snapshot of keyed providers + their model lists for the `/model` picker. Async — the catalog fetch may need to hit disk/network. */\n getPickableProviders?: () => Promise<import('./components/model-picker.js').ProviderOption[]>;\n /** Apply a (provider, model) pair after the picker confirms. Returns an error string on failure. */\n switchProviderAndModel?: (providerId: string, modelId: string) => string | null;\n /** Apply an autonomy mode after the picker confirms. Returns an error string on failure. */\n switchAutonomy?: (mode: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel') => string | null;\n /**\n * Model-specific maxContext (tokens), resolved by the CLI via the\n * ModelsRegistry. When omitted, the TUI falls back to the provider\n * family's baseline (e.g. anthropic = 200_000), which can be wrong\n * for variants like the 1M-context Opus build. The status bar's\n * context chip uses this for its progress denominator.\n */\n effectiveMaxContext?: number;\n /** Absolute project root for goal.json loading. */\n projectRoot?: string;\n /** Render into the terminal's alternate screen buffer (like vim/less/htop).\n * Default: false — native scrollback stays live so chat history is\n * scrollable via mouse wheel / Shift+PgUp, which matches the user's\n * \"this is a chat app, let me scroll the chat\" intuition. Pass true\n * (or run with `--alt-screen`) for the full-screen mode that owns the\n * terminal and prevents resize/overlay leaks of the live region —\n * trade-off is that the terminal's native scrollback is suspended\n * while the TUI is up and only what's currently on screen is visible.\n */\n altScreen?: boolean;\n /**\n * Called right after we exit the alt-screen on a clean shutdown. The\n * CLI uses this to print a one-line \"session saved to …\" hint into\n * the user's normal terminal, since alt-screen exit erases the whole\n * TUI view.\n */\n onAfterExit?: () => void;\n /** Called from /clear so the TUI can wipe its history entries while agent.ctx + memory are cleared separately. */\n onClearHistory?: (\n dispatch: React.Dispatch<{ type: 'clearHistory' } | { type: 'resetContextChip' }>,\n ) => void;\n\n // --- Fleet surface (director mode) ---\n\n /**\n * Live director instance. When set, the TUI renders a fleet panel\n * showing every spawned subagent, its current task, streaming output,\n * and runtime cost — updated live from the FleetBus. Pass null or omit\n * when multi-agent / director mode is disabled.\n */\n director?: Director | null;\n /**\n * Optional roster reference for resolving subagent role ids to\n * human-readable names. Same value passed to director.tools().\n */\n fleetRoster?: Record<string, { name: string }>;\n /**\n * Shared controller for the `/fleet stream on|off` toggle. The slash\n * command runs in the CLI process and needs to flip TUI reducer state;\n * the App installs a dispatch-backed `setEnabled` here on mount so\n * both sides stay synchronized.\n */\n /**\n * Shared controller for the `/fleet stream on|off` toggle. The slash\n * command runs in the CLI process and needs to flip TUI reducer state;\n * the App installs a dispatch-backed `setEnabled` here on mount so\n * both sides stay synchronized.\n */\n fleetStreamController?: {\n enabled: boolean;\n setEnabled: (enabled: boolean) => void;\n };\n /**\n * Controller for status bar hidden items. App installs a dispatch-backed\n * setter on mount so the /statusline slash command can update the TUI's\n * visible bar without a round-trip. The initial value is loaded from\n * the config file before App mounts.\n */\n statuslineHiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\n setStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\n /**\n * Controller for the agents monitor overlay. App installs a dispatch-backed\n * setter on mount so the `/agents on|off` slash command can toggle the\n * overlay without a round-trip.\n */\n agentsMonitorController?: {\n visible: boolean;\n setVisible: (visible: boolean) => void;\n };\n\n /**\n * If set, the App boots straight into goal mode — the text is wrapped\n * in the GOAL preamble and submitted as the first turn. Lets users\n * launch directly from the shell:\n * wstack --tui --director --goal \"audit packages/core for races\"\n * The chat shows a one-line \"🎯 Goal locked: …\" hint; the actual\n * preamble is hidden from the visible history (same as `/goal`).\n */\n initialGoal?: string;\n /**\n * If set, submitted as the first turn verbatim (no preamble). Mainly\n * for scripted shell aliases — `wstack --tui --ask \"summarize foo.md\"`\n * — that want one turn pre-populated without the goal-mode framing.\n * Ignored when `initialGoal` is also set.\n */\n initialAsk?: string;\n /**\n * Directory containing session JSONL files. Required for rewind\n * functionality. When provided the TUI can list checkpoints and\n * trigger a rewind via `/rewind` or Ctrl+R.\n */\n sessionsDir?: string;\n /**\n * SDD session context getter. When an SDD session is active, returns\n * the AI prompt context to inject into user messages.\n */\n getSDDContext?: () => string | null;\n /**\n * Process AI output for SDD auto-detection (spec, tasks, plan).\n * Returns displayable status messages.\n */\n onSDDOutput?: (output: string) => Promise<string[]>;\n /**\n * Subscribe to AutoPhase phase/graph events from the PhaseOrchestrator.\n * Returns an unsubscribe function. The TUI uses this to drive the\n * PhaseMonitor and PhasePanel live views via dispatch actions.\n */\n subscribeAutoPhase?: (\n handler: (event: string, payload: unknown) => void,\n ) => () => void;\n /**\n * Read the persisted autonomy settings (defaultMode, autoProceedDelayMs).\n * Used by the SettingsPicker in the TUI on mount and after Ctrl+S toggle.\n */\n getSettings?: () => { mode: 'off' | 'suggest' | 'auto'; delayMs: number };\n /**\n * Persist autonomy settings changes. Returns null on success, or an\n * error string on failure (so the TUI can display it as a hint).\n */\n saveSettings?: (s: { mode: 'off' | 'suggest' | 'auto'; delayMs: number }) => string | null | Promise<string | null>;\n}\n\n// Bracketed paste mode wraps any pasted text with these markers, letting us\n// distinguish a paste from typed input even when chunks arrive identically.\nconst BRACKETED_PASTE_ON = '\\x1b[?2004h';\nconst BRACKETED_PASTE_OFF = '\\x1b[?2004l';\n\n// Alternate-screen buffer (DECSET 1049). Switches the terminal to a\n// dedicated virtual screen; on exit, the previous scrollback is restored\n// untouched. This is what every \"full-screen TUI\" uses (vim, less, htop).\n// Without it, Ink writes its dynamic area in line with scrollback and\n// each redraw can leak the previous frame's input/status into the\n// permanent terminal history — the exact bug we hit before this change.\nconst ALT_SCREEN_ON = '\\x1b[?1049h';\nconst ALT_SCREEN_OFF = '\\x1b[?1049l';\nconst CURSOR_HOME = '\\x1b[H';\n\nexport async function runTui(opts: RunTuiOptions): Promise<number> {\n const stdout = process.stdout;\n const stdin = process.stdin;\n\n // Ink requires a TTY on both stdin and stdout. Without this guard the\n // render call would fail with a terse internal Ink error; bail with a\n // clear message so a piped invocation (`echo hi | wstack --tui`) tells\n // the user what to do instead.\n if (!stdout.isTTY || !stdin.isTTY) {\n process.stderr.write(\n 'wstack: --tui requires an interactive terminal on both stdin and stdout.\\n' +\n ' Drop the flag (use the plain REPL) or run wstack directly without piping.\\n',\n );\n return 2;\n }\n\n const useAltScreen = opts.altScreen === true;\n if (useAltScreen) {\n stdout.write(ALT_SCREEN_ON);\n stdout.write(CURSOR_HOME);\n }\n stdout.write(BRACKETED_PASTE_ON);\n\n // Animated window/tab title: a braille spinner + live status (thinking /\n // running a tool) driven by the EventBus, scrolling the app name when idle.\n // Out-of-band OSC sequence, so it never touches Ink's render. Reset on\n // cleanup(). Self-disables on a non-TTY or WRONGSTACK_NO_TITLE=1.\n const stopTitle = startTerminalTitle({ stdout, events: opts.events, model: opts.model });\n\n // Take over EVERY keystroke. Raw mode (Ink turns this on when render\n // mounts) already disables ICANON/ECHO/ISIG/IXON on Linux+macOS, so\n // Ctrl+C/Z/\\\\/S/Q arrive as input bytes instead of generating\n // signals or being eaten by the terminal driver. Belt-and-suspenders:\n // install no-op handlers for the suspend/quit signals just in case\n // some shell or terminal still surfaces them — without these, a\n // stray Ctrl+Z could background the TUI mid-session.\n const swallowSignals: NodeJS.Signals[] = ['SIGTSTP', 'SIGQUIT', 'SIGTTIN', 'SIGTTOU'];\n const swallow = () => {};\n for (const s of swallowSignals) {\n try {\n process.on(s, swallow);\n } catch {\n // Signal not supported on this platform (Windows ignores most of\n // these). Safe to skip — there's nothing for the terminal to\n // deliver in the first place.\n }\n }\n\n // Track cleanup state so signal handlers don't double-disable. Order\n // matters on exit: paste mode off first (it's a screen-independent\n // setting), then alt-screen off (which restores the user's previous\n // terminal contents).\n let cleaned = false;\n const cleanup = () => {\n if (cleaned) return;\n cleaned = true;\n try {\n stopTitle();\n } catch {\n // title controller already torn down — ignore.\n }\n try {\n stdout.write(BRACKETED_PASTE_OFF);\n if (useAltScreen) {\n stdout.write(ALT_SCREEN_OFF);\n }\n } catch {\n // stdout may already be closed during shutdown — ignore.\n }\n };\n\n // If the process is killed externally (terminal closed, SIGTERM from a\n // supervisor) waitUntilExit's .then/.catch never runs. Register signal +\n // exit listeners so the terminal isn't left in bracketed-paste mode.\n const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGHUP', 'SIGINT'];\n const signalHandler = () => cleanup();\n const exitHandler = () => cleanup();\n for (const s of signals) process.on(s, signalHandler);\n process.on('exit', exitHandler);\n\n const detachListeners = () => {\n for (const s of signals) process.off(s, signalHandler);\n for (const s of swallowSignals) {\n try {\n process.off(s, swallow);\n } catch {\n // ignore — see install site\n }\n }\n process.off('exit', exitHandler);\n };\n\n return new Promise<number>((resolve) => {\n let exitCode = 0;\n const onExit = (code: number) => {\n exitCode = code;\n };\n const settle = (code: number) => {\n cleanup();\n detachListeners();\n // Once the alt-screen is dismantled the user is staring at their\n // pre-TUI terminal again — print a quick line so they can see\n // where the session is preserved, instead of wondering \"where did\n // my chat go?\". Best-effort: callback failures don't change exit.\n if (useAltScreen && opts.onAfterExit) {\n try {\n opts.onAfterExit();\n } catch {\n // ignore — UX helper, not load-bearing\n }\n }\n resolve(code);\n };\n\n let instance: ReturnType<typeof render>;\n try {\n instance = render(\n React.createElement(App, {\n agent: opts.agent,\n slashRegistry: opts.slashRegistry,\n attachments: opts.attachments,\n events: opts.events,\n tokenCounter: opts.tokenCounter,\n visionAdapters: opts.visionAdapters,\n supportsVision: opts.supportsVision,\n model: opts.model,\n banner: opts.banner ?? true,\n queueStore: opts.queueStore,\n yolo: opts.yolo,\n getYolo: opts.getYolo,\n getAutonomy: opts.getAutonomy,\n getEternalEngine: opts.getEternalEngine,\n getParallelEngine: opts.getParallelEngine,\n subscribeEternalIteration: opts.subscribeEternalIteration,\n subscribeEternalStage: opts.subscribeEternalStage,\n subscribeAutoPhase: opts.subscribeAutoPhase,\n appVersion: opts.appVersion,\n provider: opts.provider,\n family: opts.family,\n keyTail: opts.keyTail,\n getPickableProviders: opts.getPickableProviders,\n switchProviderAndModel: opts.switchProviderAndModel,\n switchAutonomy: opts.switchAutonomy,\n effectiveMaxContext: opts.effectiveMaxContext,\n onExit,\n director: opts.director ?? null,\n fleetRoster: opts.fleetRoster,\n onClearHistory: opts.onClearHistory\n ? (dispatch) => opts.onClearHistory!(dispatch)\n : undefined,\n fleetStreamController: opts.fleetStreamController,\n statuslineHiddenItems: opts.statuslineHiddenItems,\n setStatuslineHiddenItems: opts.setStatuslineHiddenItems,\n agentsMonitorController: opts.agentsMonitorController,\n initialGoal: opts.initialGoal,\n initialAsk: opts.initialAsk,\n getSDDContext: opts.getSDDContext,\n onSDDOutput: opts.onSDDOutput,\n sessionsDir: opts.sessionsDir,\n projectRoot: opts.projectRoot,\n getSettings: opts.getSettings,\n saveSettings: opts.saveSettings,\n }),\n { exitOnCtrlC: false },\n );\n } catch (err) {\n process.stderr.write(\n `wstack: TUI failed to start: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n settle(1);\n return;\n }\n // Non-altScreen mode: terminal reflows visible text on resize BEFORE\n // Ink can react, which leaks one or more lines of the live region\n // (input prompt, status bar) into native scrollback. We can't recover\n // what the terminal already pushed up, but we CAN ensure no leftover\n // ghosts persist below the cursor by erasing from-cursor-to-end on\n // every resize. Combined with Ink's automatic re-render on resize,\n // this minimizes the artifact to (at most) the lines the terminal\n // itself pushed up at the moment of the resize event.\n //\n // For users doing heavy resize / split-pane workflows, --alt-screen\n // is the bullet-proof fix: Ink renders into a separate screen buffer\n // that has no native scrollback, so terminal-side reflow can't push\n // anything anywhere. Trade-off documented in tui/README.md.\n let detachResize: (() => void) | null = null;\n if (!useAltScreen) {\n const onResize = () => {\n try {\n // \\x1b[J = erase from cursor to end of screen. Does NOT touch\n // anything above the cursor, so committed Static history in\n // scrollback is preserved. Ink's useStdout subscriber will\n // immediately re-render the live region at the new width.\n // Do NOT prefix with \\x1b[H: homing to (0,0) erases the visible\n // committed output and repositions the live region (input + status\n // bar) at the top of the viewport instead of the bottom.\n stdout.write('\\x1b[J');\n } catch {\n // stdout might be detached mid-shutdown — ignore.\n }\n };\n stdout.on('resize', onResize);\n detachResize = () => stdout.off('resize', onResize);\n }\n\n instance\n .waitUntilExit()\n .then(() => {\n detachResize?.();\n settle(exitCode);\n })\n .catch(() => {\n detachResize?.();\n settle(1);\n });\n });\n}"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/confirm-prompt.tsx","../src/components/checkpoint-timeline.tsx","../src/components/file-picker.tsx","../src/components/fleet-panel.tsx","../src/components/status-bar.tsx","../src/components/fleet-monitor.tsx","../src/components/agents-monitor.tsx","../src/components/phase-monitor.tsx","../src/components/phase-panel.tsx","../src/components/worktree-panel.tsx","../src/components/worktree-monitor.tsx","../src/markdown-table.ts","../src/components/history.tsx","../src/components/input.tsx","../src/components/live-activity-strip.tsx","../src/components/autonomy-picker.tsx","../src/components/model-picker.tsx","../src/components/slash-menu.tsx","../src/file-search.ts","../src/paste-accumulator.ts","../src/git-info.ts","../src/queue-slash.ts","../src/kill-slash.ts","../src/ps-slash.ts","../src/app.tsx","../src/terminal-title.ts","../src/run-tui.ts"],"names":["s","React","input","useInput","jsxs","Box","jsx","Text","path","cache","Fragment","STATUS","fmtTokens","oneLine","fmtElapsed","st","sep","fmtTok","snippet","useEffect","fmtBytes","fs","parts","USAGE","renderList","getProcessRegistry","useState","maxContext","killed","next","blocks"],"mappings":"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","file":"index.js","sourcesContent":["import { Box, Text, useInput } from 'ink';\nimport React from 'react';\n\nexport interface ConfirmPromptProps {\n toolName: string;\n input: unknown;\n suggestedPattern: string;\n onDecision: (decision: 'yes' | 'no' | 'always' | 'deny') => void;\n}\n\nfunction stringifyInput(input: unknown): string {\n if (!input || typeof input !== 'object') return '';\n const obj = input as Record<string, unknown>;\n return Object.entries(obj)\n .filter(([k]) => k !== 'content' && k !== 'new_string')\n .map(([k, v]) => `${k}: ${truncate(JSON.stringify(v), 80)}`)\n .join(' ');\n}\n\nfunction truncate(s: string, max: number): string {\n return s.length <= max ? s : `${s.slice(0, max - 1)}…`;\n}\n\nfunction hasDiff(input: unknown): boolean {\n return Boolean(\n input && typeof input === 'object' && 'diff' in (input as Record<string, unknown>),\n );\n}\n\nfunction renderDiffLine(line: string): React.ReactElement {\n const prefix = line.startsWith('+')\n ? 'green'\n : line.startsWith('-')\n ? 'red'\n : line.startsWith('@@')\n ? 'cyan'\n : undefined;\n return (\n <Text key={line} color={prefix}>\n {line}\n {'\\n'}\n </Text>\n );\n}\n\nfunction renderDiff(diff: string): React.ReactElement {\n const lines = diff\n .split('\\n')\n .filter((l) => l.length > 0)\n .slice(0, 20);\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n {lines.map((l) => renderDiffLine(l))}\n </Box>\n );\n}\n\nexport function ConfirmPrompt({\n toolName,\n input,\n suggestedPattern,\n onDecision,\n}: ConfirmPromptProps): React.ReactElement {\n // Terminal bell on mount — alerts the user that action is required,\n // especially important when the agent has been running autonomously\n // and the user may not be staring at the terminal.\n React.useEffect(() => {\n process.stdout.write('\\x07');\n }, []);\n\n useInput((input, _key) => {\n // Ignore empty input and CRLF/LF artifacts (Enter produces \\r on Windows, \\n on Unix)\n if (!input || input === '\\r' || input === '\\n') return;\n const ch = input.toLowerCase();\n if (ch === 'y') {\n onDecision('yes');\n } else if (ch === 'n') {\n onDecision('no');\n } else if (ch === 'a') {\n onDecision('always');\n } else if (ch === 'd') {\n onDecision('deny');\n }\n });\n\n const inputSummary = stringifyInput(input);\n const showDiff = hasDiff(input);\n const inp = input as { diff?: unknown };\n const diff = typeof inp?.diff === 'string' ? inp.diff : '';\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor=\"yellow\"\n paddingX={1}\n marginY={1}\n >\n <Box flexDirection=\"row\">\n <Text bold color=\"yellow\">\n ⚠ APPROVAL REQUIRED\n </Text>\n <Text> </Text>\n <Text bold color=\"white\">\n {toolName}\n </Text>\n </Box>\n {inputSummary ? <Text dimColor>{inputSummary}</Text> : null}\n {showDiff && diff ? (\n <Box flexDirection=\"column\" marginY={1}>\n {renderDiff(diff)}\n </Box>\n ) : null}\n <Text dimColor>─────────────────</Text>\n <Box flexDirection=\"row\">\n <Text>\n <Text bold color=\"green\">\n [y]\n </Text>\n <Text dimColor>es </Text>\n <Text bold color=\"red\">\n [n]\n </Text>\n <Text dimColor>o </Text>\n <Text bold color=\"cyan\">\n [a]\n </Text>\n <Text dimColor>lways ({suggestedPattern}) </Text>\n <Text bold color=\"red\">\n [d]\n </Text>\n <Text dimColor>eny</Text>\n </Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text, useInput } from 'ink';\nimport type React from 'react';\n\nexport interface CheckpointTimelineProps {\n checkpoints: Array<{\n promptIndex: number;\n promptPreview: string;\n ts: string;\n fileCount: number;\n }>;\n selected: number;\n onSelect: (index: number) => void;\n onConfirm: (index: number) => void;\n onClose: () => void;\n}\n\n/**\n * Full-screen checkpoint timeline overlay for the /rewind command.\n * Arrow keys to navigate, Enter to rewind to selected, Esc to close.\n */\nexport function CheckpointTimeline({\n checkpoints,\n selected,\n onSelect,\n onConfirm,\n onClose,\n}: CheckpointTimelineProps): React.ReactElement {\n useInput((_, key) => {\n if (key.escape) {\n onClose();\n } else if (key.upArrow) {\n onSelect(Math.max(0, selected - 1));\n } else if (key.downArrow) {\n onSelect(Math.min(checkpoints.length - 1, selected + 1));\n } else if (key.return) {\n onConfirm(selected);\n }\n });\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n ⟲ Session Rewind\n </Text>\n <Text dimColor> — ↑/↓ navigate · Enter rewind · Esc cancel</Text>\n </Box>\n {checkpoints.length === 0 ? (\n <Text dimColor>No checkpoints in this session.</Text>\n ) : (\n checkpoints.map((cp, i) => {\n const isSelected = i === selected;\n const label = `[${cp.promptIndex}] ${cp.promptPreview}`;\n return (\n <Box key={cp.promptIndex}>\n <Text color={isSelected ? 'cyan' : undefined} bold={isSelected}>\n {isSelected ? '▸ ' : ' '}\n </Text>\n <Text color={isSelected ? 'cyan' : undefined} bold={isSelected}>\n {label}\n </Text>\n <Text dimColor> {new Date(cp.ts).toLocaleTimeString()}</Text>\n {cp.fileCount > 0 && (\n <Text dimColor> · {cp.fileCount} file{cp.fileCount !== 1 ? 's' : ''}</Text>\n )}\n </Box>\n );\n })\n )}\n </Box>\n );\n}","import { Box, Text } from 'ink';\nimport type React from 'react';\n\nexport interface FilePickerProps {\n query: string;\n matches: string[];\n selected: number;\n}\n\nexport function FilePicker({ query, matches, selected }: FilePickerProps): React.ReactElement {\n if (matches.length === 0) {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text dimColor>@{query} — no matches</Text>\n </Box>\n );\n }\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text dimColor>@{query || '…'} — ↑/↓ select, Enter attach, Esc cancel</Text>\n {matches.map((m, i) => (\n <Text key={m} color={i === selected ? 'cyan' : undefined} inverse={i === selected}>\n {i === selected ? '› ' : ' '}\n {highlight(m, query)}\n </Text>\n ))}\n </Box>\n );\n}\n\nfunction highlight(path: string, _query: string): string {\n // Visual highlight is omitted for terseness; ink Text styling at char level\n // requires splitting into segments. Keep the path verbatim for now.\n return path;\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { FleetEntry } from '../app.js';\n\nexport interface FleetPanelProps {\n /** Per-subagent state, keyed by subagentId. */\n entries: Record<string, FleetEntry>;\n /** Fleet-wide accumulated cost (from FleetUsageAggregator). */\n totalCost: number;\n /** Optional roster for resolving role ids to display names. */\n roster?: Record<string, { name: string }>;\n /** When set, the LEADER row is always shown (even when idle) with a collab session indicator. */\n collabSession?: { sessionId: string | null; bugCount: number; planCount: number; evalCount: number } | null;\n}\n\n/**\n * Compact fleet summary rendered below the status bar when director mode is\n * active. Max 4 lines: fleet summary + up to 3 running agents with only\n * name and current tool. Idle/finished agents are excluded unless a collab\n * session is active (LEADER always shows as \"waiting\" in that case).\n */\nexport function FleetPanel({ entries, totalCost, collabSession }: FleetPanelProps): React.ReactElement | null {\n const list = Object.values(entries);\n if (list.length === 0 && !collabSession) return null;\n\n // Always extract the leader entry separately — it gets special treatment.\n const leader = list.find((e) => e.id === 'leader');\n const subagents = list.filter((e) => e.id !== 'leader');\n\n // Only running agents — idle and finished agents are not shown.\n // But when a collab session is active, the leader is always shown with its\n // collab-specific status so the user can see the director is still alive.\n const running = subagents.filter((e) => e.status === 'running');\n const runningCount = running.length;\n const hasCollab = !!collabSession;\n\n // Fleet summary line\n const costLabel = totalCost > 0 ? ` · ${totalCost.toFixed(3)}` : '';\n const collabLabel = hasCollab && collabSession.sessionId\n ? ` · collab(${collabSession.bugCount}b/${collabSession.planCount}p/${collabSession.evalCount}e)`\n : '';\n const summaryLine =\n runningCount > 0\n ? `${runningCount} running${costLabel}${collabLabel}`\n : `idle${costLabel}${collabLabel}`;\n\n // Show up to 3 running agents (collab agents or regular subagents).\n const shown = running.slice(0, 3);\n const overflow = running.length > 3 ? running.length - 3 : 0;\n\n // Leader status label: when collab is active show \"waiting for agents\",\n // otherwise show its current tool or a dash.\n const leaderTool = hasCollab\n ? 'waiting for agents'\n : (leader?.currentTool?.name ?? (leader?.status === 'running' ? 'running' : '—'));\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n {/* Fleet summary */}\n <Box flexDirection=\"row\" gap={1}>\n <Text dimColor>⚡ Fleet</Text>\n <Text dimColor>│</Text>\n <Text>{summaryLine}</Text>\n </Box>\n\n {/* Leader row — always shown when collab session is active, regardless of idle/running */}\n {hasCollab && leader ? (\n <Box flexDirection=\"row\" gap={1}>\n <Text color=\"yellow\">●</Text>\n <Text>{leader.name.slice(0, 14).padEnd(14)}</Text>\n <Text dimColor>→</Text>\n <Text color=\"yellow\">{leaderTool}</Text>\n </Box>\n ) : null}\n\n {/* Running agents: name + current tool only */}\n {shown.map((entry) => {\n // entry.name is the subagent's display name (nickname when assigned,\n // e.g. \"Einstein (Bug Hunter)\") — prefer it over the raw id.\n const name = entry.name && entry.name !== entry.id ? entry.name : entry.id.slice(0, 8);\n const tool = entry.currentTool?.name ?? '—';\n return (\n <Box key={entry.id} flexDirection=\"row\" gap={1}>\n <Text color=\"green\">●</Text>\n <Text>{name.slice(0, 14).padEnd(14)}</Text>\n <Text dimColor>→</Text>\n <Text color=\"cyan\">{tool}</Text>\n </Box>\n );\n })}\n\n {/* Overflow indicator — show count and the first overflowed agent name */}\n {overflow > 0 ? (\n <Text dimColor>\n {' '}+{overflow}: {running[3]?.name?.slice(0, 12) ?? 'agent'}…\n </Text>\n ) : null}\n </Box>\n );\n}\n","import type { TokenCounter } from '@wrongstack/core';\nimport { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { GitInfo } from '../git-info.js';\n\nexport interface TodoCounts {\n pending: number;\n inProgress: number;\n completed: number;\n}\n\nexport interface PlanCounts {\n open: number;\n inProgress: number;\n done: number;\n}\n\n/**\n * Fleet activity breakdown surfaced on the work-in-flight line. Derived\n * from `director.status()` in the host app and refreshed alongside the\n * other dynamic chips. Kept optional (and the chip is only rendered\n * when any field is non-zero) so single-agent sessions stay quiet.\n */\nexport interface FleetCounts {\n /** Subagents currently mid-task. */\n running: number;\n /** Subagents spawned but idle (no current task). */\n idle: number;\n /** Tasks queued but not yet picked up by a worker. */\n pending: number;\n /** Tasks resolved (success/failure/timeout/stopped). */\n completed: number;\n}\n\n/**\n * Per-agent detail surfaced on the optional 4th line — one chip per\n * currently-running subagent so the user can see at a glance which\n * agent is doing what, for how long, and how many tools it has called.\n * Truncated to the top N by the host (typically 3-4) to keep the bar\n * from wrapping.\n */\nexport interface FleetAgentDetail {\n /** Stable label used by the streaming history (e.g. \"AGENT#1 bug-hunter\"). */\n label: string;\n /** Ink color name — same palette as the per-agent history prefix. */\n color: string;\n /** Ms since the subagent's first iteration. */\n elapsedMs: number;\n /** Tool calls observed via tool.executed. */\n toolCalls: number;\n /** True when the subagent is actively iterating. */\n running: boolean;\n /** Current/last tool the subagent invoked, shown as its live action. */\n tool?: string;\n /** Cumulative budget auto-extensions granted — rendered as \"⚡×N\". */\n extensions?: number;\n}\n\nexport interface ContextWindow {\n /** Input tokens of the most recent provider request — the de-facto live context size. */\n used: number;\n /** Provider's declared maxContext capability. */\n max: number;\n}\n\nexport interface StatusBarProps {\n model: string;\n /**\n * App version string (e.g. \"0.7.0\"). When set, renders a compact\n * `WS v0.7.0` chip at the head of line 1 so the running build is always\n * visible, not just in the startup banner.\n */\n version?: string;\n state: 'idle' | 'running' | 'streaming' | 'aborting';\n tokenCounter?: TokenCounter;\n hint?: string;\n queueCount?: number;\n yolo?: boolean;\n /** Session elapsed in milliseconds. Renders as `mm:ss` (< 1h) or `h:mm:ss`. */\n elapsedMs?: number;\n todos?: TodoCounts;\n /**\n * Plan board counts surfaced as a chip on line 2. Distinct from\n * `todos` — plans are higher-level and persist across resume; the\n * chip uses a different glyph (📋) so the user can tell them apart\n * at a glance.\n */\n plan?: PlanCounts;\n /**\n * Per-status fleet breakdown. When provided, takes precedence over\n * `subagentCount` for chip rendering. `subagentCount` is kept for\n * backwards compatibility when callers haven't wired the richer\n * breakdown yet.\n */\n fleet?: FleetCounts;\n /**\n * Optional per-agent detail row (up to ~4 agents). Renders below the\n * aggregate fleet chip on a dedicated 4th line so the user can see\n * which specific agent is burning time/tools right now without\n * scrolling history.\n */\n fleetAgents?: FleetAgentDetail[];\n git?: GitInfo | null;\n subagentCount?: number;\n /** Renders the \"ctx ████░░ 42%\" chip on line 1 when present. */\n context?: ContextWindow;\n /**\n * Project / working-folder name. Rendered on line 2 just before the git\n * branch so users running multiple WrongStack windows can tell at a\n * glance which repo each one is pinned to. Usually the basename of\n * `agent.ctx.projectRoot`.\n */\n projectName?: string;\n /** Autonomy mode chip: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel'. */\n autonomy?: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';\n /** Number of tracked bash/exec processes from the process registry. */\n processCount?: number;\n /** Items to hide from the status bar. */\n hiddenItems?: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\n /**\n * Live iteration stage from the eternal engine. When set, renders a\n * chip like `⏸ decide` or `▶ execute(todo:fix-auth)` next to the\n * autonomy chip on line 2.\n */\n eternalStage?: {\n phase: 'idle';\n } | {\n phase: 'decide';\n reason: string;\n } | {\n phase: 'execute';\n task: string;\n } | {\n phase: 'reflect';\n status: 'success' | 'failure' | 'aborted' | 'skipped';\n note?: string;\n } | {\n phase: 'sleep';\n ms: number;\n } | {\n phase: 'paused';\n } | {\n phase: 'stopped';\n } | {\n phase: 'error';\n message: string;\n } | null;\n /** Active goal summary for startup banner display. */\n goalSummary?: {\n goal: string;\n goalState: 'active' | 'paused' | 'completed' | 'abandoned';\n iterations: number;\n lastTask?: string;\n lastStatus?: string;\n } | null;\n /**\n * Seconds remaining in the auto-proceed countdown. null = not counting.\n * Rendered as a chip on line 2 when non-null.\n */\n autoProceedCountdown?: number | null;\n}\n\n/**\n * Two-line status bar. The first line stays compact and shows the\n * runtime essentials (state · model · tokens · cost · queue · running\n * tool). The second line opts in only when there's actually something\n * to show — git branch, elapsed time, todo counts, YOLO marker — so a\n * vanilla session keeps the original single-line footprint.\n */\nexport function StatusBar({\n model,\n version,\n state,\n tokenCounter,\n hint,\n queueCount = 0,\n yolo = false,\n autonomy,\n elapsedMs,\n todos,\n plan,\n fleet,\n fleetAgents,\n git,\n subagentCount = 0,\n context,\n projectName,\n processCount,\n hiddenItems,\n eternalStage,\n goalSummary,\n}: StatusBarProps): React.ReactElement {\n const hiddenSet = new Set(hiddenItems);\n const usage = tokenCounter?.total();\n const cost = tokenCounter?.estimateCost();\n const cache = tokenCounter?.cacheStats();\n const { label: stateLabel, color: stateColor } = stateChip(state, fleet?.running ?? 0);\n\n // Line 2 is *session context* — slow-moving facts about where you\n // are: the project, the branch, the elapsed clock, YOLO chip. These\n // change at most once per session.\n const hasSecondLine =\n yolo ||\n (autonomy && autonomy !== 'off') ||\n elapsedMs !== undefined ||\n (git !== null && git !== undefined) ||\n (projectName !== undefined && projectName.length > 0) ||\n (goalSummary !== null && goalSummary !== undefined);\n\n // Line 3 is *active work* — the dynamic chips that mutate as the\n // agent / subagents make progress. Hidden when nothing is in flight\n // so a fresh session keeps the two-line baseline.\n const fleetHasActivity =\n (fleet &&\n (fleet.running > 0 || fleet.idle > 0 || fleet.pending > 0 || fleet.completed > 0)) ||\n subagentCount > 0;\n const hasThirdLine =\n (todos && (todos.pending > 0 || todos.inProgress > 0 || todos.completed > 0)) ||\n (plan && (plan.open > 0 || plan.inProgress > 0 || plan.done > 0)) ||\n fleetHasActivity;\n\n return (\n <Box\n flexDirection=\"column\"\n paddingX={1}\n borderStyle=\"single\"\n borderTop={true}\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n >\n <Box flexDirection=\"row\" gap={2}>\n {version ? (\n <>\n <Text>\n <Text color=\"blue\" bold>WS</Text>\n <Text dimColor> v{version}</Text>\n </Text>\n <Text dimColor>│</Text>\n </>\n ) : null}\n <Text color={stateColor}>● {stateLabel}</Text>\n <Text dimColor>│</Text>\n <Text color=\"magenta\">{model}</Text>\n {context && context.max > 0 ? (\n <>\n <Text dimColor>│</Text>\n <ContextChip ctx={context} />\n </>\n ) : null}\n {usage ? (\n <>\n <Text dimColor>│</Text>\n <Text>\n ↑{' '}\n <Text color=\"cyan\">\n {fmtTok(usage.input + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0))}\n </Text>{' '}\n ↓ <Text color=\"cyan\">{fmtTok(usage.output)}</Text>\n </Text>\n </>\n ) : null}\n {cache && cache.hitRatio > 0 ? (\n <>\n <Text dimColor>│</Text>\n <Text dimColor>cache {(cache.hitRatio * 100).toFixed(0)}%</Text>\n </>\n ) : null}\n {cost && cost.total > 0 ? (\n <>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">${cost.total.toFixed(4)}</Text>\n </>\n ) : null}\n {queueCount > 0 ? (\n <>\n <Text dimColor>│</Text>\n <Text color=\"cyan\">⌛ queued: {queueCount}</Text>\n </>\n ) : null}\n {typeof processCount === 'number' && processCount > 0 ? (\n <>\n <Text dimColor>│</Text>\n <Text color=\"red\">⚡ {processCount} process{processCount === 1 ? '' : 'es'}</Text>\n </>\n ) : null}\n {hint ? (\n <>\n <Text dimColor>│</Text>\n <Text dimColor>{hint}</Text>\n </>\n ) : null}\n </Box>\n\n {hasSecondLine ? (\n <Box flexDirection=\"row\" gap={2}>\n {yolo ? (\n <Text color=\"red\" bold>\n ⚠ YOLO\n </Text>\n ) : null}\n {autonomy && autonomy !== 'off' ? (\n <>\n {yolo ? <Text dimColor>│</Text> : null}\n <Text\n color={\n autonomy === 'eternal' ? 'red' : autonomy === 'auto' ? 'yellow' : 'cyan'\n }\n bold\n >\n ∞ {autonomy.toUpperCase()}\n </Text>\n </>\n ) : null}\n {eternalStage ? (\n <>\n {yolo || (autonomy && autonomy !== 'off') ? <Text dimColor>│</Text> : null}\n <EternalStageChip stage={eternalStage} />\n </>\n ) : null}\n {elapsedMs !== undefined && !hiddenSet.has('elapsed') ? (\n <>\n {yolo || (autonomy && autonomy !== 'off') || eternalStage ? <Text dimColor>│</Text> : null}\n <Text dimColor>⏱ {fmtElapsed(elapsedMs)}</Text>\n </>\n ) : null}\n {projectName ? (\n <>\n {yolo || elapsedMs !== undefined ? <Text dimColor>│</Text> : null}\n <Text color=\"blue\">📁 {projectName}</Text>\n </>\n ) : null}\n {goalSummary ? (\n <>\n {yolo || elapsedMs !== undefined || projectName ? <Text dimColor>│</Text> : null}\n <Text color={goalSummary.goalState === 'active' ? 'green' : goalSummary.goalState === 'paused' ? 'yellow' : goalSummary.goalState === 'completed' ? 'green' : 'dim'}>\n 🎯 {goalSummary.goal.length > 40 ? `${goalSummary.goal.slice(0, 37)}…` : goalSummary.goal} [{goalSummary.goalState}] (iter {goalSummary.iterations})\n </Text>\n </>\n ) : null}\n {git ? (\n <>\n {yolo || elapsedMs !== undefined || projectName ? <Text dimColor>│</Text> : null}\n <Text>\n <Text color=\"magenta\">⎇ {git.branch}</Text>\n {git.added > 0 ? <Text color=\"green\"> +{git.added}</Text> : null}\n {git.deleted > 0 ? <Text color=\"red\"> -{git.deleted}</Text> : null}\n {git.untracked > 0 ? <Text dimColor> ?{git.untracked}</Text> : null}\n </Text>\n </>\n ) : null}\n </Box>\n ) : null}\n\n {hasThirdLine ? (\n <Box flexDirection=\"row\" gap={2}>\n {todos && (todos.pending > 0 || todos.inProgress > 0 || todos.completed > 0) ? (\n <Text>\n <Text dimColor>todos </Text>\n {todos.inProgress > 0 ? <Text color=\"yellow\">⌛{todos.inProgress}</Text> : null}\n {todos.inProgress > 0 && (todos.pending > 0 || todos.completed > 0) ? ' ' : ''}\n {todos.pending > 0 ? <Text dimColor>☐{todos.pending}</Text> : null}\n {todos.pending > 0 && todos.completed > 0 ? ' ' : ''}\n {todos.completed > 0 ? <Text color=\"green\">✓{todos.completed}</Text> : null}\n </Text>\n ) : null}\n {plan && (plan.open > 0 || plan.inProgress > 0 || plan.done > 0) ? (\n <>\n {todos && (todos.pending > 0 || todos.inProgress > 0 || todos.completed > 0) ? (\n <Text dimColor>│</Text>\n ) : null}\n <Text>\n <Text color=\"cyan\">📋 </Text>\n {plan.inProgress > 0 ? <Text color=\"yellow\">⌛{plan.inProgress}</Text> : null}\n {plan.inProgress > 0 && (plan.open > 0 || plan.done > 0) ? ' ' : ''}\n {plan.open > 0 ? <Text dimColor>☐{plan.open}</Text> : null}\n {plan.open > 0 && plan.done > 0 ? ' ' : ''}\n {plan.done > 0 ? <Text color=\"green\">✓{plan.done}</Text> : null}\n </Text>\n </>\n ) : null}\n {fleetHasActivity ? (\n <>\n {((todos && (todos.pending > 0 || todos.inProgress > 0 || todos.completed > 0)) ||\n (plan && (plan.open > 0 || plan.inProgress > 0 || plan.done > 0))) ? (\n <Text dimColor>│</Text>\n ) : null}\n {fleet ? (\n <Text>\n <Text color=\"blue\">🌐 </Text>\n {fleet.running > 0 ? <Text color=\"yellow\">▶{fleet.running}</Text> : null}\n {fleet.running > 0 && (fleet.pending > 0 || fleet.idle > 0 || fleet.completed > 0)\n ? ' '\n : ''}\n {fleet.pending > 0 ? <Text dimColor>☐{fleet.pending}</Text> : null}\n {fleet.pending > 0 && (fleet.idle > 0 || fleet.completed > 0) ? ' ' : ''}\n {fleet.idle > 0 ? <Text dimColor>·{fleet.idle}idle</Text> : null}\n {fleet.idle > 0 && fleet.completed > 0 ? ' ' : ''}\n {fleet.completed > 0 ? <Text color=\"green\">✓{fleet.completed}</Text> : null}\n </Text>\n ) : (\n <Text color=\"blue\">\n 🌐 {subagentCount} agent{subagentCount === 1 ? '' : 's'}\n </Text>\n )}\n </>\n ) : null}\n </Box>\n ) : null}\n\n {fleetAgents && fleetAgents.length > 0 ? (\n <Box flexDirection=\"row\" gap={2}>\n {fleetAgents.map((a, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: agent list is stable per render\n <Text key={i}>\n <Text color={a.color} bold>\n {a.label}\n </Text>\n <Text dimColor>{' '}</Text>\n <Text color={a.running ? 'yellow' : undefined} dimColor={!a.running}>\n {a.running ? '▶' : '·'}\n </Text>\n <Text dimColor>{' '}</Text>\n <Text dimColor>{fmtElapsed(a.elapsedMs)}</Text>\n <Text dimColor>{' · '}</Text>\n <Text dimColor>{a.toolCalls}t</Text>\n {a.tool ? (\n <>\n <Text dimColor>{' · '}</Text>\n <Text color=\"cyan\">{a.tool}</Text>\n </>\n ) : null}\n {a.extensions && a.extensions > 0 ? (\n <>\n <Text dimColor>{' · '}</Text>\n <Text color=\"yellow\">⚡×{a.extensions}</Text>\n </>\n ) : null}\n </Text>\n ))}\n </Box>\n ) : null}\n </Box>\n );\n}\n\nfunction EternalStageChip({\n stage,\n}: {\n stage: NonNullable<StatusBarProps['eternalStage']>;\n}): React.ReactElement {\n switch (stage.phase) {\n case 'idle':\n return <Text dimColor>⬜ idle</Text>;\n case 'decide':\n return <Text color=\"cyan\">⬇ decide: {stage.reason}</Text>;\n case 'execute':\n return (\n <Text color=\"green\">\n ▶ <Text bold>execute</Text>\n {stage.task ? `(${stage.task})` : ''}\n </Text>\n );\n case 'reflect':\n return (\n <Text color={stage.status === 'success' ? 'green' : stage.status === 'failure' ? 'red' : 'yellow'}>\n ↩ reflect: {stage.status}\n </Text>\n );\n case 'sleep':\n return <Text dimColor>💤 sleep {Math.round(stage.ms / 1000)}s</Text>;\n case 'paused':\n return <Text color=\"yellow\">⏸ paused</Text>;\n case 'stopped':\n return <Text dimColor>■ stopped</Text>;\n case 'error':\n return <Text color=\"red\">⚠ error: {stage.message}</Text>;\n }\n}\n\nfunction ContextChip({ ctx }: { ctx: ContextWindow }): React.ReactElement {\n const ratio = Math.max(0, Math.min(1, ctx.used / ctx.max));\n const pct = Math.round(ratio * 100);\n const color = ratio >= 0.85 ? 'red' : ratio >= 0.65 ? 'yellow' : 'cyan';\n return (\n <Text>\n <Text dimColor>ctx </Text>\n <Text color={color}>{renderProgress(ratio, 10)}</Text>\n <Text color={color}> {pct}%</Text>\n <Text dimColor>\n {' '}\n ({fmtTok(ctx.used)}/{fmtTok(ctx.max)})\n </Text>\n </Text>\n );\n}\n\n/**\n * Compute the leading state chip (label + Ink color) for the status bar.\n *\n * The foreground loop reports 'idle' between turns, but background subagents\n * can still be running — e.g. between eternal/parallel autonomy iterations,\n * or a fleet spawned outside a foreground run. Showing plain \"idle\" then is\n * misleading, so when `fleetRunning > 0` and the foreground is idle we surface\n * the live agent count (`agents ▶N`) in a distinct color instead.\n */\nexport function stateChip(\n state: 'idle' | 'running' | 'streaming' | 'aborting',\n fleetRunning: number,\n): { label: string; color: string } {\n if (state === 'idle' && fleetRunning > 0) {\n return { label: `agents ▶${fleetRunning}`, color: 'magenta' };\n }\n if (state === 'idle') return { label: 'idle', color: 'cyan' };\n if (state === 'aborting') return { label: 'aborting…', color: 'yellow' };\n return { label: 'thinking…', color: 'green' };\n}\n\nconst FILLED = '█';\nconst EMPTY = '░';\n\nexport function renderProgress(ratio: number, width: number): string {\n const clamped = Math.max(0, Math.min(1, ratio));\n const filled = clamped === 0 ? 0 : Math.max(1, Math.round(clamped * width));\n const capped = Math.min(width, filled);\n return FILLED.repeat(capped) + EMPTY.repeat(width - capped);\n}\n\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\nexport function fmtElapsed(ms: number): string {\n const totalSec = Math.floor(ms / 1000);\n const h = Math.floor(totalSec / 3600);\n const m = Math.floor((totalSec % 3600) / 60);\n const s = totalSec % 60;\n if (h > 0) {\n return `${h}:${pad2(m)}:${pad2(s)}`;\n }\n return `${pad2(m)}:${pad2(s)}`;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { FleetEntry } from '../app.js';\nimport { fmtElapsed, renderProgress } from './status-bar.js';\n\nexport interface FleetMonitorProps {\n entries: Record<string, FleetEntry>;\n /** Fleet-wide accumulated cost. */\n totalCost: number;\n /** Fleet-wide token totals, when available. */\n totalTokens?: { input: number; output: number };\n /** Concurrency ceiling for the gauge. */\n maxConcurrent?: number;\n /** 1s clock tick so elapsed times + sparklines stay live. */\n nowTick: number;\n /** Active or completed collaborative debugging session. */\n collabSession?: {\n sessionId: string | null;\n bugCount: number;\n planCount: number;\n evalCount: number;\n overallVerdict: 'approve' | 'needs_revision' | 'reject' | null;\n timeline: Array<{ at: number; icon: string; color: string; text: string }>;\n startedAt: number | null;\n } | null;\n}\n\nconst STATUS: Record<FleetEntry['status'], { icon: string; color: string }> = {\n idle: { icon: '○', color: 'gray' },\n running: { icon: '▶', color: 'yellow' },\n success: { icon: '✓', color: 'green' },\n failed: { icon: '✗', color: 'red' },\n timeout: { icon: '⏱', color: 'yellow' },\n stopped: { icon: '⊘', color: 'gray' },\n};\n\nconst SPARK = ['▁', '▂', '▃', '▄', '▅', '▆', '▇', '█'];\n\n/**\n * Bucket recent tool executions into a fixed number of time bins ending at\n * `now`, returning a per-bin count. Drives the per-agent activity sparkline\n * in the Agents (live) monitor; exported here because it was historically\n * defined alongside the fleet monitor.\n */\nexport function bucketActivity(\n recentTools: ReadonlyArray<{ at: number }>,\n now: number,\n bins = 12,\n binMs = 2000,\n): number[] {\n const out = new Array<number>(bins).fill(0);\n const windowStart = now - bins * binMs;\n for (const t of recentTools) {\n if (t.at < windowStart || t.at > now) continue;\n let idx = Math.floor((t.at - windowStart) / binMs);\n if (idx < 0) idx = 0;\n if (idx >= bins) idx = bins - 1;\n out[idx]!++;\n }\n return out;\n}\n\n/** Render a numeric series as a unicode sparkline. */\nexport function sparkline(values: number[]): string {\n if (values.length === 0) return '';\n const max = Math.max(1, ...values);\n return values\n .map((v) => {\n if (v <= 0) return SPARK[0];\n const idx = Math.min(SPARK.length - 1, Math.ceil((v / max) * (SPARK.length - 1)));\n return SPARK[idx];\n })\n .join('');\n}\n\nfunction fmtTokens(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(1)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\nfunction fmtCost(n: number): string {\n if (n === 0) return '—';\n return `$${n.toFixed(3)}`;\n}\n\n/**\n * Fleet orchestration dashboard (Ctrl+F). Concurrency gauge, fleet totals,\n * a compact one-line-per-agent table, and a recent-events timeline. Live\n * per-agent context (current tool / streaming tail) lives in the Agents\n * monitor (Ctrl+G) — this view is for \"how the fleet is doing overall\".\n */\nexport function FleetMonitor({\n entries,\n totalCost,\n totalTokens,\n maxConcurrent = 4,\n nowTick,\n collabSession,\n}: FleetMonitorProps): React.ReactElement {\n const all = Object.values(entries);\n const running = all.filter((e) => e.status === 'running');\n const idle = all.filter((e) => e.status === 'idle').length;\n const done = all.filter((e) => e.status === 'success').length;\n const failed = all.filter((e) => e.status === 'failed' || e.status === 'timeout').length;\n\n const concurrencyRatio = maxConcurrent > 0 ? running.length / maxConcurrent : 0;\n\n // Sort: running → idle → recently-finished (newest first).\n const ordered = [...all].sort((a, b) => {\n const ra = a.status === 'running' ? 0 : a.status === 'idle' ? 1 : 2;\n const rb = b.status === 'running' ? 0 : b.status === 'idle' ? 1 : 2;\n if (ra !== rb) return ra - rb;\n if (ra === 2) return b.lastEventAt - a.lastEventAt;\n return a.startedAt - b.startedAt;\n });\n const shown = ordered.slice(0, 12);\n const overflow = all.length - shown.length;\n\n // Timeline: spawn + terminal-status events across all agents + collab session events, newest first.\n const events: Array<{ at: number; icon: string; color: string; text: string }> = [];\n for (const e of all) {\n events.push({ at: e.startedAt, icon: '●', color: 'cyan', text: `${e.name} spawned` });\n if (e.status !== 'running' && e.status !== 'idle') {\n const s = STATUS[e.status];\n events.push({\n at: e.lastEventAt,\n icon: s.icon,\n color: s.color,\n text: `${e.name} ${e.status} (${e.toolCalls}t)`,\n });\n }\n if (e.budgetWarning) {\n events.push({\n at: e.budgetWarning.at,\n icon: '⚡',\n color: 'yellow',\n text: `${e.name} ${e.budgetWarning.kind} ${e.budgetWarning.used}/${e.budgetWarning.limit} — extending`,\n });\n }\n }\n events.sort((a, b) => b.at - a.at);\n const timeline = events.slice(0, 20);\n\n // Collab verdict chip color\n const VERDICT_COLOR: Record<string, string> = {\n approve: 'green',\n needs_revision: 'yellow',\n reject: 'red',\n };\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"cyan\" paddingX={1}>\n {/* Header — orchestration identity, distinct from AGENTS · LIVE */}\n <Box flexDirection=\"row\" gap={1}>\n <Text bold color=\"cyan\">\n FLEET · ORCHESTRATION\n </Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{running.length}</Text>\n <Text dimColor>○{idle}</Text>\n <Text color=\"green\">✓{done}</Text>\n {failed > 0 ? <Text color=\"red\">✗{failed}</Text> : null}\n <Text dimColor>· Ctrl+F to close</Text>\n </Box>\n\n {/* Collab session banner — shown when a session is active or completed */}\n {collabSession ? (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\" gap={1}>\n <Text bold color=\"magenta\">⚡ COLLAB SESSION</Text>\n {collabSession.sessionId ? (\n <Text dimColor>{collabSession.sessionId.slice(0, 8)}</Text>\n ) : null}\n <Text dimColor>│</Text>\n <Text color=\"red\">🐛{collabSession.bugCount}</Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">📐{collabSession.planCount}</Text>\n <Text dimColor>│</Text>\n <Text color=\"blue\">⚖️{collabSession.evalCount}</Text>\n {collabSession.overallVerdict ? (\n <>\n <Text dimColor>│</Text>\n <Text bold color={VERDICT_COLOR[collabSession.overallVerdict]}>\n {collabSession.overallVerdict}\n </Text>\n </>\n ) : null}\n </Box>\n {/* Inline collab timeline — first 6 entries */}\n {collabSession.timeline.length > 0 ? (\n <Box flexDirection=\"column\" marginTop={0}>\n {collabSession.timeline.slice(0, 6).map((ev, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: timeline is rebuilt per render\n <Box key={i} flexDirection=\"row\" gap={1}>\n <Text dimColor>{`${fmtElapsed(Math.max(0, nowTick - ev.at))} ago`.padEnd(10)}</Text>\n <Text color={ev.color}>{ev.icon}</Text>\n <Text dimColor>{ev.text}</Text>\n </Box>\n ))}\n </Box>\n ) : null}\n </Box>\n ) : null}\n\n {/* Concurrency + totals gauge */}\n <Box flexDirection=\"row\" gap={1}>\n <Text dimColor>concurrency</Text>\n <Text color=\"cyan\">[{renderProgress(concurrencyRatio, 12)}]</Text>\n <Text dimColor>\n {running.length}/{maxConcurrent}\n </Text>\n {totalTokens ? (\n <Text dimColor>\n {' '}\n {fmtTokens(totalTokens.input)}↑ {fmtTokens(totalTokens.output)}↓\n </Text>\n ) : null}\n <Text color=\"green\">{` $${totalCost.toFixed(3)}`}</Text>\n </Box>\n\n {shown.length === 0 ? (\n <Text dimColor>No subagents yet — spawn with /fleet spawn or /fleet dispatch.</Text>\n ) : null}\n\n {/* Compact one-line-per-agent table */}\n {shown.length > 0 ? (\n <Box flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\" gap={1}>\n <Text dimColor>{' '}</Text>\n <Text dimColor>{'name'.padEnd(16)}</Text>\n <Text dimColor>{'status'.padEnd(10)}</Text>\n <Text dimColor>{'L/t'.padEnd(8)}</Text>\n <Text dimColor>{'elapsed'.padEnd(8)}</Text>\n <Text dimColor>cost</Text>\n </Box>\n {shown.map((e) => {\n const s = STATUS[e.status];\n const elapsed =\n e.status === 'running'\n ? fmtElapsed(Math.max(0, nowTick - e.startedAt))\n : fmtElapsed(Math.max(0, nowTick - e.lastEventAt)) + ' ago';\n return (\n <Box key={e.id} flexDirection=\"row\" gap={1}>\n <Text color={s.color}>{s.icon}</Text>\n <Text>{e.name.padEnd(16).slice(0, 16)}</Text>\n <Text color={s.color}>{e.status.padEnd(10)}</Text>\n <Text dimColor>{`L${e.iterations} ${e.toolCalls}t`.padEnd(8)}</Text>\n <Text dimColor>{elapsed.padEnd(8).slice(0, 8)}</Text>\n <Text color=\"yellow\">{fmtCost(e.cost)}</Text>\n {e.extensions && e.extensions > 0 ? (\n <Text color=\"yellow\"> ⚡×{e.extensions}</Text>\n ) : null}\n </Box>\n );\n })}\n {overflow > 0 ? <Text dimColor>{` … +${overflow} more`}</Text> : null}\n </Box>\n ) : null}\n\n {/* Timeline */}\n {timeline.length > 0 ? (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text dimColor>timeline</Text>\n {timeline.map((ev, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: timeline is rebuilt per render\n <Box key={i} flexDirection=\"row\" gap={1}>\n <Text dimColor>{`${fmtElapsed(Math.max(0, nowTick - ev.at))} ago`.padEnd(10)}</Text>\n <Text color={ev.color}>{ev.icon}</Text>\n <Text dimColor>{ev.text}</Text>\n </Box>\n ))}\n </Box>\n ) : null}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { FleetEntry } from '../app.js';\nimport { bucketActivity, sparkline } from './fleet-monitor.js';\nimport { fmtElapsed } from './status-bar.js';\n\nexport interface AgentsMonitorProps {\n entries: Record<string, FleetEntry>;\n /** Fleet-wide accumulated cost. */\n totalCost: number;\n /** Fleet-wide token totals, when available. */\n totalTokens?: { input: number; output: number };\n /** 1s clock tick so elapsed times + sparklines stay live. */\n nowTick: number;\n}\n\nconst STATUS: Record<FleetEntry['status'], { icon: string; color: string }> = {\n idle: { icon: '○', color: 'gray' },\n running: { icon: '▶', color: 'yellow' },\n success: { icon: '✓', color: 'green' },\n failed: { icon: '✗', color: 'red' },\n timeout: { icon: '⏱', color: 'yellow' },\n stopped: { icon: '⊘', color: 'gray' },\n};\n\nfunction isTerminal(status: FleetEntry['status']): boolean {\n return (\n status === 'success' || status === 'failed' || status === 'timeout' || status === 'stopped'\n );\n}\n\n/**\n * An idle agent that hasn't produced any event for this long is considered\n * stale and dropped from the live view — a running agent is never hidden.\n * `lastEventAt` is bumped on every tool / message / stream event.\n */\nexport const IDLE_HIDE_MS = 60_000;\n\n/**\n * Select the agents the live monitor should render: never-terminal agents,\n * with idle agents pruned once they've been silent longer than `idleHideMs`.\n * Running agents come first (oldest first), then surviving idle agents\n * (most-recently-active first). Pure + exported for unit testing.\n */\nexport function selectLiveAgents(\n all: FleetEntry[],\n now: number,\n idleHideMs: number = IDLE_HIDE_MS,\n): FleetEntry[] {\n const visible = all.filter((e) => {\n if (isTerminal(e.status)) return false;\n if (e.status === 'running') return true;\n // idle: keep only while it's been recently active\n return now - e.lastEventAt < idleHideMs;\n });\n return visible.sort((a, b) => {\n if (a.status === 'running' && b.status !== 'running') return -1;\n if (a.status !== 'running' && b.status === 'running') return 1;\n if (a.status === 'running') return a.startedAt - b.startedAt; // oldest run first\n return b.lastEventAt - a.lastEventAt; // freshest idle first\n });\n}\n\nfunction fmtTokens(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(1)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\nfunction snippet(s: string, max = 72): string {\n const oneLine = s.replace(/\\s+/g, ' ').trim();\n if (oneLine.length <= max) return oneLine;\n return `${oneLine.slice(0, max - 1)}…`;\n}\n\n/** Colored context-window fill bar: ████░░░░░░ 67% */\nfunction ContextBar({\n pct,\n tokens,\n maxTokens,\n}: {\n pct: number;\n tokens?: number;\n maxTokens?: number;\n}): React.ReactElement {\n const clamped = Math.max(0, Math.min(2, pct)); // cap visual at 200%\n const totalBars = 10;\n const filled = Math.round(clamped * totalBars);\n const empty = totalBars - filled;\n const color = pct < 0.6 ? 'green' : pct < 0.75 ? 'yellow' : 'red';\n const pctText = pct >= 1 ? `${Math.round(pct * 100)}%+` : `${Math.round(pct * 100)}%`;\n const tokenText = tokens ? ` ${fmtTokens(tokens)}/${fmtTokens(maxTokens ?? 200_000)}` : '';\n return (\n <Text color={color}>\n {'█'.repeat(filled)}\n {'░'.repeat(Math.max(0, empty))}\n {' '}\n {pctText}\n {tokenText}\n </Text>\n );\n}\n\n/**\n * Live per-agent context view (Ctrl+G). Each active agent gets a card with\n * its current tool, the last tool result, the most recent streaming /\n * message text, an activity sparkline, and budget pressure. Terminal\n * agents are excluded so the monitor reflects only what's actually live.\n */\nexport function AgentsMonitor({\n entries,\n totalCost,\n totalTokens,\n nowTick,\n}: AgentsMonitorProps): React.ReactElement {\n const all = Object.values(entries);\n\n // Terminal agents are excluded, and idle agents that have been silent for\n // longer than IDLE_HIDE_MS are pruned — the FleetPanel + history still hold\n // the full record; this view shows only what's actually live right now.\n const live = selectLiveAgents(all, nowTick);\n\n const running = live.filter((e) => e.status === 'running').length;\n const totalDone = all.filter((e) => e.status === 'success').length;\n const totalFailed = all.filter((e) => e.status === 'failed' || e.status === 'timeout').length;\n // Idle agents pruned for being stale (live but not in the visible set).\n const hiddenIdle = all.filter(\n (e) => e.status === 'idle' && nowTick - e.lastEventAt >= IDLE_HIDE_MS,\n ).length;\n\n const ordered = live;\n const shown = ordered.slice(0, 8);\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"magenta\" paddingX={1}>\n {/* Header — live identity, distinct from FLEET MONITOR */}\n <Box flexDirection=\"row\" gap={1}>\n <Text bold color=\"magenta\">\n AGENTS · LIVE\n </Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{running}</Text>\n <Text dimColor>─────────────────</Text>\n <Text dimColor>done</Text>\n <Text color=\"green\">✓{totalDone}</Text>\n <Text dimColor>·</Text>\n <Text dimColor>failed</Text>\n {totalFailed > 0 ? <Text color=\"red\">✗{totalFailed}</Text> : null}\n <Text dimColor>· Ctrl+G to close</Text>\n </Box>\n\n {/* Token + cost row */}\n <Box flexDirection=\"row\" gap={1}>\n <Text dimColor>shown</Text>\n <Text color=\"magenta\">{live.length}</Text>\n {totalTokens ? (\n <Text dimColor>\n {' '}\n {fmtTokens(totalTokens.input)}↑ {fmtTokens(totalTokens.output)}↓\n </Text>\n ) : null}\n <Text color=\"green\">${totalCost.toFixed(3)}</Text>\n {hiddenIdle > 0 ? <Text dimColor>· {hiddenIdle} idle hidden</Text> : null}\n </Box>\n\n {shown.length === 0 ? (\n <Text dimColor>No live agents — spawn with /spawn or /fleet dispatch.</Text>\n ) : null}\n\n {/* Per-agent live cards */}\n {shown.map((e) => {\n const s = STATUS[e.status];\n const elapsed =\n e.status === 'running' ? fmtElapsed(Math.max(0, nowTick - e.startedAt)) : e.status;\n const spark = sparkline(bucketActivity(e.recentTools, nowTick));\n const lastTool = e.recentTools[e.recentTools.length - 1];\n const lastMessage = e.recentMessages[e.recentMessages.length - 1];\n const streamTail = e.streamingText ? snippet(e.streamingText.slice(-160)) : '';\n const toolElapsed = e.currentTool ? Math.max(0, nowTick - e.currentTool.startedAt) : 0;\n\n return (\n <Box key={e.id} flexDirection=\"column\" marginTop={1}>\n {/* Identity line: icon · name · elapsed · iter/tools · extensions */}\n <Box flexDirection=\"row\" gap={1}>\n <Text color={s.color} bold>\n {s.icon}\n </Text>\n <Text bold>{e.name}</Text>\n <Text dimColor>·</Text>\n <Text dimColor>{elapsed}</Text>\n <Text dimColor>·</Text>\n <Text dimColor>\n L{e.iterations} {e.toolCalls}t\n </Text>\n {e.extensions && e.extensions > 0 ? (\n <Text color=\"yellow\">⚡×{e.extensions}</Text>\n ) : null}\n </Box>\n\n {/* Current tool (live, ms-precision) — only while inside a tool */}\n {e.status === 'running' && e.currentTool ? (\n <Box flexDirection=\"row\" gap={1} paddingLeft={2}>\n <Text color=\"cyan\">→ {e.currentTool.name}</Text>\n <Text dimColor>({toolElapsed}ms)</Text>\n </Box>\n ) : null}\n\n {/* Activity sparkline + last completed tool summary */}\n {spark || lastTool ? (\n <Box flexDirection=\"row\" gap={1} paddingLeft={2}>\n <Text color=\"green\">{spark || ''}</Text>\n {lastTool ? (\n <Text dimColor>\n last: {lastTool.name}\n {typeof lastTool.durationMs === 'number' ? ` ${lastTool.durationMs}ms` : ''}\n {lastTool.ok === false ? ' ✗' : ''}\n </Text>\n ) : null}\n </Box>\n ) : null}\n\n {/* Live streaming tail (for running agents) */}\n {e.status === 'running' && streamTail ? (\n <Box paddingLeft={2}>\n <Text dimColor>\n {'>'} {streamTail}\n </Text>\n </Box>\n ) : null}\n\n {/* Latest finished-message snippet (when nothing streaming) */}\n {(e.status !== 'running' || !streamTail) && lastMessage ? (\n <Box paddingLeft={2}>\n <Text dimColor>msg: {snippet(lastMessage.text)}</Text>\n </Box>\n ) : null}\n\n {/* Budget pressure */}\n {e.budgetWarning ? (\n <Box paddingLeft={2}>\n <Text color=\"yellow\">\n ⚡ {e.budgetWarning.kind} {e.budgetWarning.used}/{e.budgetWarning.limit} —\n extending\n </Text>\n </Box>\n ) : null}\n\n {/* Context window fill bar */}\n {e.ctxPct !== undefined ? (\n <Box paddingLeft={2}>\n <Text dimColor>ctx </Text>\n <ContextBar pct={e.ctxPct} tokens={e.ctxTokens} maxTokens={e.ctxMaxTokens} />\n </Box>\n ) : null}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import { Box, Text, useInput } from 'ink';\nimport type React from 'react';\n\nconst fmtElapsed = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const h = Math.floor(m / 60);\n if (h > 0) return `${h}:${String(m % 60).padStart(2, '0')}:${String(s % 60).padStart(2, '0')}`;\n if (m > 0) return `${m}:${String(s % 60).padStart(2, '0')}`;\n return `${s}s`;\n};\n\nexport interface PhaseMonitorProps {\n /** Per-phase state from the App reducer. */\n phases: Record<string, {\n name: string;\n status: string;\n completedTasks: number;\n totalTasks: number;\n startedAt?: number;\n }>;\n /** IDs of currently running phases. */\n runningPhaseIds: string[];\n /** Session-level elapsed ms. */\n elapsedMs: number;\n /** nowTick for elapsed time calculation. */\n nowTick: number;\n onClose: () => void;\n}\n\nconst PHASE_STATUS: Record<string, { icon: string; color: string; label: string }> = {\n pending: { icon: '⏳', color: 'gray', label: 'pending' },\n ready: { icon: '🔜', color: 'cyan', label: 'ready' },\n running: { icon: '▶', color: 'yellow', label: 'running' },\n paused: { icon: '⏸', color: 'magenta', label: 'paused' },\n completed: { icon: '✓', color: 'green', label: 'done' },\n failed: { icon: '✗', color: 'red', label: 'failed' },\n skipped: { icon: '⏭', color: 'gray', label: 'skipped' },\n};\n\nfunction fmtPhase(s: string): { icon: string; color: string; label: string } {\n return PHASE_STATUS[s] ?? { icon: '?', color: 'white', label: s };\n}\n\n/**\n * Full-screen PhaseMonitor overlay (Ctrl+P in TUI).\n *\n * Layout:\n * Header: project title + elapsed time + Ctrl+P to close\n * Per-phase rows:\n * · icon · name · status · (task progress) · started/elapsed\n * Bottom: keyboard hint\n */\nexport function PhaseMonitor({\n phases,\n runningPhaseIds,\n elapsedMs,\n nowTick,\n onClose,\n}: PhaseMonitorProps): React.ReactElement {\n useInput((_, key) => {\n if (key.escape) onClose();\n });\n\n const phaseList = Object.values(phases);\n const running = phaseList.filter((p) => runningPhaseIds.includes(Object.keys(phases).find((k) => phases[k] === p) ?? ''));\n const done = phaseList.filter((p) => p.status === 'completed' || p.status === 'skipped');\n const failed = phaseList.filter((p) => p.status === 'failed');\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"cyan\" paddingX={1}>\n {/* Header */}\n <Box flexDirection=\"row\" gap={1} marginBottom={1}>\n <Text bold color=\"cyan\">PHASE MONITOR</Text>\n <Text dimColor>│</Text>\n <Text dimColor>⏱ {fmtElapsed(elapsedMs)}</Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{running.length}</Text>\n <Text dimColor>·</Text>\n <Text color=\"green\">✓{done.length}</Text>\n {failed.length > 0 ? (\n <>\n <Text dimColor>·</Text>\n <Text color=\"red\">✗{failed.length}</Text>\n </>\n ) : null}\n <Text dimColor>│ Ctrl+P / Esc to close</Text>\n </Box>\n\n {phaseList.length === 0 ? (\n <Text dimColor>No phases active. Use /autophase start [title] to begin.</Text>\n ) : (\n phaseList.map((phase, i) => {\n const s = fmtPhase(phase.status);\n const phaseKey = Object.keys(phases).find((k) => phases[k] === phase) ?? String(i);\n const isRunning = runningPhaseIds.includes(phaseKey);\n const elapsed = phase.startedAt ? fmtElapsed(nowTick - phase.startedAt) : '—';\n const progress = phase.totalTasks > 0\n ? `${phase.completedTasks}/${phase.totalTasks}`\n : '—';\n\n return (\n <Box key={phaseKey} flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\" gap={1}>\n <Text color={s.color} bold>{s.icon}</Text>\n <Text bold>{phase.name}</Text>\n <Text dimColor>·</Text>\n <Text color={s.color}>{s.label}</Text>\n {isRunning ? (\n <>\n <Text dimColor>·</Text>\n <Text dimColor>elapsed {elapsed}</Text>\n </>\n ) : null}\n {phase.totalTasks > 0 && (\n <>\n <Text dimColor>·</Text>\n <Text dimColor>tasks {progress}</Text>\n </>\n )}\n </Box>\n </Box>\n );\n })\n )}\n\n {/* Keyboard hints */}\n <Box marginTop={1}>\n <Text dimColor>↑/↓ navigate phases · Esc close</Text>\n </Box>\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\n\nconst fmtElapsed = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const h = Math.floor(m / 60);\n if (h > 0) return `${h}:${String(m % 60).padStart(2, '0')}:${String(s % 60).padStart(2, '0')}`;\n if (m > 0) return `${m}:${String(s % 60).padStart(2, '0')}`;\n return `${s}s`;\n};\n\nexport interface PhasePanelProps {\n /** Per-phase state from the App reducer. */\n phases: Record<string, {\n name: string;\n status: string;\n completedTasks: number;\n totalTasks: number;\n startedAt?: number;\n }>;\n /** Active running phase IDs. */\n runningPhaseIds: string[];\n /** nowTick for elapsed time display. */\n nowTick: number;\n}\n\nconst STATUS: Record<string, { icon: string; color: string }> = {\n pending: { icon: '○', color: 'gray' },\n ready: { icon: '◐', color: 'cyan' },\n running: { icon: '●', color: 'yellow' },\n paused: { icon: '⏸', color: 'magenta' },\n completed: { icon: '✓', color: 'green' },\n failed: { icon: '✗', color: 'red' },\n skipped: { icon: '⊘', color: 'gray' },\n};\n\nfunction s(entry: string) {\n return STATUS[entry] ?? { icon: '?', color: 'white' };\n}\n\n /**\n * AutoPhase sidebar panel — shown below fleet panel when AutoPhase is active.\n * Compact 2-line-per-phase view optimized for the TUI layout.\n * Unlike PhaseMonitor (an overlay), PhasePanel is always visible while active.\n */\nexport function PhasePanel({ phases, nowTick }: PhasePanelProps): React.ReactElement | null {\n const list = Object.values(phases);\n if (list.length === 0) return null;\n\n const done = list.filter((p) => p.status === 'completed' || p.status === 'skipped').length;\n const running = list.filter((p) => p.status === 'running').length;\n const failed = list.filter((p) => p.status === 'failed').length;\n\n return (\n <Box\n flexDirection=\"column\"\n paddingX={1}\n borderStyle=\"single\"\n borderTop={false}\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n >\n {/* Header */}\n <Box flexDirection=\"row\" gap={2}>\n <Text dimColor>Phases</Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{running}</Text>\n <Text dimColor>✓{done}</Text>\n {failed > 0 ? <Text color=\"red\">✗{failed}</Text> : null}\n <Text dimColor>· {list.length} total</Text>\n <Text dimColor>· Ctrl+P for details</Text>\n </Box>\n\n {/* Per-phase compact rows */}\n {list.map((phase, i) => {\n const phaseKey = Object.keys(phases).find((k) => phases[k] === phase) ?? String(i);\n const st = s(phase.status);\n const progress = phase.totalTasks > 0\n ? `${phase.completedTasks}/${phase.totalTasks}`\n : '';\n const elapsed = phase.startedAt\n ? fmtElapsed(nowTick - phase.startedAt)\n : '';\n\n return (\n <Box key={phaseKey} flexDirection=\"row\" gap={1}>\n <Text color={st.color}>{st.icon}</Text>\n <Text>{phase.name.slice(0, 14).padEnd(14)}</Text>\n <Text color={st.color} dimColor>{st.icon === '●' ? phase.status : ''}</Text>\n {progress ? (\n <Text dimColor> {progress}</Text>\n ) : null}\n {elapsed && st.icon === '●' ? (\n <Text dimColor> {elapsed}</Text>\n ) : null}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\n\nconst fmtElapsed = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const h = Math.floor(m / 60);\n if (h > 0) return `${h}:${String(m % 60).padStart(2, '0')}:${String(s % 60).padStart(2, '0')}`;\n if (m > 0) return `${m}:${String(s % 60).padStart(2, '0')}`;\n return `${s}s`;\n};\n\nexport interface WorktreeRow {\n branch: string;\n ownerLabel: string;\n status: string;\n insertions: number;\n deletions: number;\n files: number;\n allocatedAt: number;\n conflictFiles?: string[];\n}\n\nconst STATUS: Record<string, { icon: string; color: string }> = {\n allocating: { icon: '○', color: 'gray' },\n active: { icon: '●', color: 'yellow' },\n committing: { icon: '◐', color: 'cyan' },\n merging: { icon: '⇡', color: 'blue' },\n merged: { icon: '✓', color: 'green' },\n 'needs-review':{ icon: '⚠', color: 'magenta' },\n failed: { icon: '✗', color: 'red' },\n};\n\nfunction st(status: string) {\n return STATUS[status] ?? { icon: '?', color: 'white' };\n}\n\n/**\n * Worktree sidebar panel — shown beside the AutoPhase PhasePanel when git\n * worktree isolation is active. One compact row per worktree (branch, owner\n * phase, diff stats, status). Always visible while live; details on Ctrl+T.\n */\nexport function WorktreePanel({\n worktrees,\n nowTick,\n}: {\n worktrees: Record<string, WorktreeRow>;\n nowTick: number;\n}): React.ReactElement | null {\n const list = Object.values(worktrees);\n if (list.length === 0) return null;\n\n const active = list.filter((w) => w.status === 'active' || w.status === 'committing' || w.status === 'merging').length;\n const merged = list.filter((w) => w.status === 'merged').length;\n const failed = list.filter((w) => w.status === 'failed' || w.status === 'needs-review').length;\n\n return (\n <Box\n flexDirection=\"column\"\n paddingX={1}\n borderStyle=\"single\"\n borderTop={false}\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n >\n <Box flexDirection=\"row\" gap={2}>\n <Text dimColor>Worktrees</Text>\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{active}</Text>\n <Text color=\"green\">✓{merged}</Text>\n {failed > 0 ? <Text color=\"red\">✗{failed}</Text> : null}\n <Text dimColor>· {list.length} total · Ctrl+T for details</Text>\n </Box>\n\n {list.map((w) => {\n const s = st(w.status);\n const conflict = w.status === 'needs-review';\n const elapsed = w.allocatedAt ? fmtElapsed(nowTick - w.allocatedAt) : '';\n return (\n <Box key={w.branch} flexDirection=\"row\" gap={1}>\n <Text color={s.color}>{s.icon}</Text>\n <Text>{w.branch.replace(/^wstack\\/ap\\//, '').slice(0, 18).padEnd(18)}</Text>\n <Text dimColor>{w.ownerLabel.slice(0, 12)}</Text>\n {conflict ? (\n <Text color=\"magenta\"> CONFLICT</Text>\n ) : (\n <Text dimColor> +{w.insertions}/-{w.deletions} {w.files}f</Text>\n )}\n {elapsed && (w.status === 'active' || w.status === 'committing') ? (\n <Text dimColor> {elapsed}</Text>\n ) : null}\n </Box>\n );\n })}\n </Box>\n );\n}\n","import { Box, Text, useInput } from 'ink';\nimport type React from 'react';\nimport type { WorktreeRow } from './worktree-panel.js';\n\nconst fmtElapsed = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n const m = Math.floor(s / 60);\n const h = Math.floor(m / 60);\n if (h > 0) return `${h}:${String(m % 60).padStart(2, '0')}:${String(s % 60).padStart(2, '0')}`;\n if (m > 0) return `${m}:${String(s % 60).padStart(2, '0')}`;\n return `${s}s`;\n};\n\nconst WT_STATUS: Record<string, { icon: string; color: string; label: string }> = {\n allocating: { icon: '○', color: 'gray', label: 'allocating' },\n active: { icon: '●', color: 'yellow', label: 'active' },\n committing: { icon: '◐', color: 'cyan', label: 'committing' },\n merging: { icon: '⇡', color: 'blue', label: 'merging' },\n merged: { icon: '✓', color: 'green', label: 'merged' },\n 'needs-review':{ icon: '⚠', color: 'magenta', label: 'needs-review' },\n failed: { icon: '✗', color: 'red', label: 'failed' },\n};\n\nfunction fmt(s: string) {\n return WT_STATUS[s] ?? { icon: '?', color: 'white', label: s };\n}\n\n/**\n * Full-screen Worktree monitor overlay (Ctrl+T to open, Ctrl+T/Esc to close).\n * Shows each AutoPhase worktree: branch, base→branch, owner phase, diff stats,\n * and conflict files for any worktree left in needs-review.\n */\nexport function WorktreeMonitor({\n worktrees,\n baseBranch,\n nowTick,\n onClose,\n}: {\n worktrees: Record<string, WorktreeRow & { baseBranch?: string }>;\n baseBranch?: string;\n nowTick: number;\n onClose: () => void;\n}): React.ReactElement {\n useInput((input, key) => {\n if (key.escape || (key.ctrl && input === 'w')) onClose();\n });\n\n const list = Object.values(worktrees);\n const active = list.filter((w) => ['active', 'committing', 'merging'].includes(w.status)).length;\n const merged = list.filter((w) => w.status === 'merged').length;\n const failed = list.filter((w) => w.status === 'failed' || w.status === 'needs-review').length;\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"green\" paddingX={1}>\n <Box flexDirection=\"row\" gap={1} marginBottom={1}>\n <Text bold color=\"green\">WORKTREE MONITOR</Text>\n <Text dimColor>│</Text>\n {baseBranch ? <Text dimColor>base {baseBranch}</Text> : null}\n <Text dimColor>│</Text>\n <Text color=\"yellow\">▶{active}</Text>\n <Text dimColor>·</Text>\n <Text color=\"green\">✓{merged}</Text>\n {failed > 0 ? (\n <>\n <Text dimColor>·</Text>\n <Text color=\"red\">✗{failed}</Text>\n </>\n ) : null}\n <Text dimColor>│ Ctrl+T / Esc to close</Text>\n </Box>\n\n {list.length === 0 ? (\n <Text dimColor>No worktrees. They appear when AutoPhase runs with isolation on.</Text>\n ) : (\n list.map((w) => {\n const s = fmt(w.status);\n const short = w.branch.replace(/^wstack\\/ap\\//, '');\n const elapsed = w.allocatedAt ? fmtElapsed(nowTick - w.allocatedAt) : '—';\n return (\n <Box key={w.branch} flexDirection=\"column\" marginTop={1}>\n <Box flexDirection=\"row\" gap={1}>\n <Text color={s.color} bold>{s.icon}</Text>\n <Text bold>{short}</Text>\n <Text dimColor>·</Text>\n <Text color={s.color}>{s.label}</Text>\n <Text dimColor>· elapsed {elapsed}</Text>\n </Box>\n <Box flexDirection=\"row\" gap={1} marginLeft={2}>\n <Text dimColor>{w.baseBranch ?? baseBranch ?? 'base'} → {short}</Text>\n <Text dimColor>· owner: {w.ownerLabel}</Text>\n </Box>\n <Box flexDirection=\"row\" gap={1} marginLeft={2}>\n <Text color=\"green\">+{w.insertions}</Text>\n <Text color=\"red\">-{w.deletions}</Text>\n <Text dimColor>· {w.files} files</Text>\n </Box>\n {w.conflictFiles && w.conflictFiles.length > 0 ? (\n <Box marginLeft={2}>\n <Text color=\"magenta\">conflicts: {w.conflictFiles.join(', ')}</Text>\n </Box>\n ) : null}\n </Box>\n );\n })\n )}\n\n <Box marginTop={1}>\n <Text dimColor>Esc close · merge conflicts with /worktree merge <branch></Text>\n </Box>\n </Box>\n );\n}\n","/**\n * Scan a body of prose for GitHub-flavoured markdown tables and replace\n * each one with a Unicode box-drawing rendering that fits the terminal\n * width. Cells that overflow their column wrap over multiple lines.\n *\n * Non-table prose passes through unchanged.\n *\n * Input shape (rest of the doc may surround it):\n * | Header A | Header B |\n * |----------|---------:|\n * | a 1 | 42 |\n * | a 2 | 7 |\n *\n * Output shape:\n * ┌──────────┬──────────┐\n * │ Header A │ Header B │\n * ├──────────┼──────────┤\n * │ a 1 │ 42 │\n * │ a 2 │ 7 │\n * └──────────┴──────────┘\n */\nexport function renderMarkdownTables(text: string, maxWidth: number): string {\n if (!text.includes('|')) return text; // fast path\n const lines = text.split('\\n');\n const out: string[] = [];\n let i = 0;\n while (i < lines.length) {\n const end = detectTable(lines, i);\n if (end > i) {\n out.push(renderTable(lines.slice(i, end), Math.max(20, maxWidth)));\n i = end;\n } else {\n out.push(lines[i] ?? '');\n i++;\n }\n }\n return out.join('\\n');\n}\n\ntype Align = 'left' | 'right' | 'center';\n\nconst ROW_RE = /^\\s*\\|.*\\|\\s*$/;\nconst SEP_RE = /^\\s*\\|[\\s\\-:|]+\\|\\s*$/;\n\nfunction detectTable(lines: string[], start: number): number {\n if (start + 1 >= lines.length) return start;\n if (!ROW_RE.test(lines[start] ?? '')) return start;\n const sep = lines[start + 1] ?? '';\n // Need at least one dash somewhere — distinguishes the separator from\n // a regular row that happens to contain colons/spaces only.\n if (!SEP_RE.test(sep) || !/-/.test(sep)) return start;\n let end = start + 2;\n while (end < lines.length && ROW_RE.test(lines[end] ?? '')) end++;\n return end;\n}\n\nfunction parseCells(line: string): string[] {\n // Strip the outer pipes, then split on remaining pipes. Pipes inside a\n // cell would need escaping with `\\|`; we honour that minimally.\n const inner = line.trim().replace(/^\\||\\|$/g, '');\n const parts: string[] = [];\n let buf = '';\n for (let i = 0; i < inner.length; i++) {\n const ch = inner[i];\n if (ch === '\\\\' && inner[i + 1] === '|') {\n buf += '|';\n i++;\n continue;\n }\n if (ch === '|') {\n parts.push(buf);\n buf = '';\n continue;\n }\n buf += ch;\n }\n parts.push(buf);\n return parts.map((c) => c.trim());\n}\n\nfunction parseAlign(sep: string): Align {\n const t = sep.trim();\n const left = t.startsWith(':');\n const right = t.endsWith(':');\n if (left && right) return 'center';\n if (right) return 'right';\n return 'left';\n}\n\nfunction renderTable(tableLines: string[], maxWidth: number): string {\n const header = parseCells(tableLines[0] ?? '');\n const sepCells = parseCells(tableLines[1] ?? '');\n const cols = header.length;\n const aligns: Align[] = [];\n for (let c = 0; c < cols; c++) {\n aligns.push(parseAlign(sepCells[c] ?? ''));\n }\n const dataRows = tableLines.slice(2).map(parseCells);\n // Normalise short rows by padding with empty cells; drop extras.\n for (const row of dataRows) {\n while (row.length < cols) row.push('');\n row.length = cols;\n }\n\n const widths = computeWidths([header, ...dataRows], cols, maxWidth);\n\n const lines: string[] = [];\n lines.push(border('┌', '┬', '┐', widths));\n lines.push(...renderRow(header, widths, aligns));\n lines.push(border('├', '┼', '┤', widths));\n for (const row of dataRows) {\n lines.push(...renderRow(row, widths, aligns));\n }\n lines.push(border('└', '┴', '┘', widths));\n return lines.join('\\n');\n}\n\nfunction computeWidths(allRows: string[][], cols: number, maxWidth: number): number[] {\n // Each column adds `│ … ` of overhead (2 padding + 1 separator); the\n // very first column also gets an opening `│`. Net overhead = 3*cols + 1.\n const overhead = 3 * cols + 1;\n const avail = Math.max(cols * MIN_COL_WIDTH, maxWidth - overhead);\n const natural = new Array<number>(cols).fill(0);\n for (const row of allRows) {\n for (let c = 0; c < cols; c++) {\n const cell = row[c] ?? '';\n const w = longestWord(cell); // floor: never wrap mid-word in the middle of a short label\n const total = cell.length;\n // Track both, prefer the natural width but ensure at least `w`.\n natural[c] = Math.max(natural[c]!, total);\n if (w > natural[c]!) natural[c] = Math.min(total + 1, w);\n }\n }\n const sumNatural = natural.reduce((s, n) => s + n, 0);\n if (sumNatural <= avail) return natural;\n // Need to shrink. Repeatedly steal a char from the widest column above\n // MIN_COL_WIDTH until we fit. Cheap; cols is small.\n const widths = natural.slice();\n let sum = sumNatural;\n while (sum > avail) {\n let maxIdx = -1;\n let maxVal = MIN_COL_WIDTH;\n for (let i = 0; i < cols; i++) {\n const w = widths[i]!;\n if (w > maxVal) {\n maxVal = w;\n maxIdx = i;\n }\n }\n if (maxIdx < 0) break; // every column is at MIN_COL_WIDTH; give up\n widths[maxIdx]!--;\n sum--;\n }\n return widths;\n}\n\nconst MIN_COL_WIDTH = 4;\n\nfunction longestWord(s: string): number {\n let max = 0;\n for (const w of s.split(/\\s+/)) if (w.length > max) max = w.length;\n return max;\n}\n\nfunction border(left: string, mid: string, right: string, widths: number[]): string {\n return left + widths.map((w) => '─'.repeat(w + 2)).join(mid) + right;\n}\n\nfunction renderRow(cells: string[], widths: number[], aligns: Align[]): string[] {\n const wrapped = cells.map((c, i) => wrapCell(c, widths[i] ?? MIN_COL_WIDTH));\n const height = Math.max(1, ...wrapped.map((w) => w.length));\n const out: string[] = [];\n for (let line = 0; line < height; line++) {\n const parts: string[] = [];\n for (let c = 0; c < widths.length; c++) {\n const w = widths[c] ?? MIN_COL_WIDTH;\n const text = wrapped[c]?.[line] ?? '';\n parts.push(padCell(text, w, aligns[c] ?? 'left'));\n }\n out.push('│ ' + parts.join(' │ ') + ' │');\n }\n return out;\n}\n\nfunction wrapCell(text: string, width: number): string[] {\n if (text.length <= width) return [text];\n const out: string[] = [];\n // Split on whitespace, keep grouping until we'd overflow.\n const words = text.split(/(\\s+)/);\n let cur = '';\n for (const word of words) {\n if (!word) continue;\n if (cur.length + word.length <= width) {\n cur += word;\n continue;\n }\n if (cur) {\n out.push(cur.trimEnd());\n cur = '';\n }\n if (word.length > width) {\n // Hard-break a word longer than the column.\n let rest = word;\n while (rest.length > width) {\n out.push(rest.slice(0, width));\n rest = rest.slice(width);\n }\n cur = rest;\n } else if (!/^\\s+$/.test(word)) {\n cur = word;\n }\n }\n if (cur) out.push(cur.trimEnd());\n return out.length === 0 ? [''] : out;\n}\n\nfunction padCell(text: string, width: number, align: Align): string {\n if (text.length >= width) return text.slice(0, width);\n const pad = width - text.length;\n if (align === 'right') return ' '.repeat(pad) + text;\n if (align === 'center') {\n const l = Math.floor(pad / 2);\n return ' '.repeat(l) + text + ' '.repeat(pad - l);\n }\n return text + ' '.repeat(pad);\n}\n","import type React from 'react';\nimport { useEffect, useState } from 'react';\nimport { Box, Static, Text, useStdout } from 'ink';\nimport { renderMarkdownTables } from '../markdown-table.js';\n\nexport type HistoryEntry =\n | { id: number; kind: 'user'; text: string; queued?: boolean; pasteContent?: string }\n | { id: number; kind: 'assistant'; text: string }\n | {\n id: number;\n kind: 'tool';\n name: string;\n durationMs: number;\n ok: boolean;\n input?: unknown;\n output?: string;\n /** Full byte length of the result body the model actually received\n * (post-cap, post-scrub). Carried separately because `output` is a\n * ~400-char preview — `outputBytes` is what the model paid for. */\n outputBytes?: number;\n /** ~3.5 chars/token estimate over `outputBytes`. Cheap to render in\n * the chip; the authoritative count lives in provider.response.usage. */\n outputTokens?: number;\n /** Real line count for tools that have a meaningful one — read counts\n * numbered prefixes, shell/grep/logs count newlines. Undefined for\n * tools without a line notion (json, fetch, …). */\n outputLines?: number;\n }\n | { id: number; kind: 'info'; text: string }\n | { id: number; kind: 'warn'; text: string }\n | { id: number; kind: 'error'; text: string }\n | { id: number; kind: 'turn-summary'; text: string }\n | {\n id: number;\n kind: 'banner';\n version: string;\n provider: string;\n model: string;\n cwd: string;\n /** Wire family the provider is configured to speak (anthropic, openai, …). */\n family?: string;\n /** Last 3 chars of the active API key — quick visual confirmation that the right account is wired up. */\n keyTail?: string;\n }\n /** Tool confirmation shown while waiting for the user to approve/deny. */\n | { id: number; kind: 'confirm'; toolName: string; input: unknown; suggestedPattern: string }\n /**\n * Subagent activity surfaced into the leader's history. One entry per\n * tool call, assistant message, spawn, or completion — prefixed with a\n * stable `AGENT#N` label so users can follow each subagent across\n * interleaved output from multiple parallel runs.\n */\n | {\n id: number;\n kind: 'subagent';\n agentLabel: string;\n agentColor: string;\n icon: string;\n text: string;\n detail?: string;\n };\n\nexport interface HistoryProps {\n entries: HistoryEntry[];\n streamingText?: string;\n /**\n * Optional live tail of the currently streaming tool. Rendered below the\n * assistant tail so the user sees both at once: model thinking and tool\n * output. Cleared automatically when the tool's `tool.executed` event\n * fires and the final entry lands in `entries`.\n */\n toolStream?: { toolUseId: string; name: string; text: string; startedAt: number } | null;\n}\n\nexport function History({ entries, streamingText, toolStream }: HistoryProps): React.ReactElement {\n const { stdout } = useStdout();\n // Track terminal dimensions imperatively so that every resize triggers a\n // re-render. We snapshot into state rather than deriving directly from\n // useStdout because Static children receive `termWidth` as a prop — if\n // the parent doesn't re-render on resize, the stale value gets baked\n // into committed scrollback entries. This ensures Entry components in\n // both Static (committed) and live-streaming regions use the current\n // width for table wrapping etc.\n const [termSize, setTermSize] = useState({ columns: stdout?.columns ?? 80, rows: stdout?.rows ?? 24 });\n useEffect(() => {\n const handleResize = () => {\n setTermSize({ columns: stdout?.columns ?? 80, rows: stdout?.rows ?? 24 });\n };\n process.stdout.on('resize', handleResize);\n return () => { process.stdout.off('resize', handleResize); };\n }, [stdout]);\n const termWidth = termSize.columns;\n const tail = streamingText ? tailForDisplay(streamingText, MAX_STREAM_DISPLAY_CHARS) : '';\n const toolTail = toolStream?.text\n ? tailForDisplay(toolStream.text, MAX_STREAM_DISPLAY_CHARS)\n : '';\n\n // Finalized entries go through <Static>: Ink prints each one ONCE and\n // never re-renders them, which means they flow into the terminal's\n // native scrollback. The user scrolls with the terminal's own\n // mechanism (mouse wheel, Shift+PgUp in Windows Terminal/PowerShell,\n // etc.) — we don't need an in-app scrollbar or scroll keys. Trying\n // to manage scroll ourselves clipped older content under a fixed\n // height box and lost it to redraws.\n return (\n <>\n <Static items={entries}>\n {(entry) => (\n <Box key={entry.id} marginBottom={entry.kind === 'turn-summary' ? 1 : 0}>\n <Entry entry={entry} termWidth={termWidth} />\n </Box>\n )}\n </Static>\n {tail ? (\n <Box flexDirection=\"column\" marginY={1}>\n <Box flexDirection=\"row\">\n <Text bold color=\"cyan\">{'ASSISTANT: '}</Text>\n <Text dimColor>(streaming...)</Text>\n </Box>\n <Text color=\"white\">{tail}</Text>\n </Box>\n ) : null}\n {toolTail ? (\n <ToolStreamBox\n name={toolStream!.name}\n text={toolTail}\n startedAt={toolStream!.startedAt}\n termWidth={termWidth}\n />\n ) : null}\n </>\n );\n}\n\nconst MAX_STREAM_DISPLAY_CHARS = 480;\n\nconst MAX_STREAM_LINES = 8;\n\n/**\n * Rich streaming tool output — framed header with live elapsed time,\n * tail-N output so the screen doesn't flood, and a \"N more lines\n * above\" indicator when truncated.\n */\nfunction ToolStreamBox({\n name,\n text,\n startedAt,\n termWidth,\n}: {\n name: string;\n text: string;\n startedAt: number;\n termWidth: number;\n}): React.ReactElement {\n // Tick every 500ms while streaming to refresh the elapsed counter.\n const [tick, setTick] = useState(0);\n useEffect(() => {\n const t = setInterval(() => setTick((n) => n + 1), 500);\n return () => clearInterval(t);\n }, []);\n void tick; // consumed in elapsed calc below\n\n const elapsedMs = Date.now() - startedAt;\n const lines = text.split('\\n');\n const totalLines = lines.length;\n const hidden = Math.max(0, totalLines - MAX_STREAM_LINES);\n const visible = hidden > 0 ? lines.slice(hidden) : lines;\n // Truncate long individual lines so borders don't break.\n const contentWidth = Math.max(20, Math.min(termWidth - 4, 100));\n\n return (\n <Box flexDirection=\"column\" marginTop={0}>\n {/* Header */}\n <Box flexDirection=\"row\">\n <Text color=\"yellow\">◆ </Text>\n <Text bold color=\"cyan\">\n {name}\n </Text>\n <Text dimColor>{` ⏱ ${fmtDuration(elapsedMs)}`}</Text>\n {hidden > 0 ? (\n <Text dimColor>{` (${totalLines} lines, showing last ${MAX_STREAM_LINES})`}</Text>\n ) : null}\n </Box>\n {/* Output lines */}\n <Box flexDirection=\"column\" marginLeft={2}>\n {hidden > 0 ? (\n <Text dimColor italic>{` … ${hidden} more line${hidden === 1 ? '' : 's'} above`}</Text>\n ) : null}\n {visible.map((line, i) => {\n const key = i;\n const trimmed = line.length > contentWidth ? `${line.slice(0, contentWidth - 1)}…` : line;\n return (\n <Text key={key} dimColor>\n {trimmed || ' '}\n </Text>\n );\n })}\n </Box>\n </Box>\n );\n}\n\nexport function tailForDisplay(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text;\n const cut = text.length - maxChars;\n // Prefer a newline boundary near the cut for a cleaner visual edge.\n const nl = text.indexOf('\\n', cut);\n if (nl !== -1 && nl < cut + 80) {\n return `… ${text.slice(nl + 1)}`;\n }\n return `… ${text.slice(cut)}`;\n}\n\nfunction DiffBlock({ rows, hidden }: { rows: DiffLineRow[]; hidden: number }): React.ReactElement {\n // Width of the line-number gutter: pick the widest line number across all\n // rows so the column stays aligned. Fall back to 1 when no row carries a\n // line number (e.g. a diff with only a meta/hunk row).\n let gutterWidth = 1;\n for (const r of rows) {\n const n = r.kind === 'del' ? r.oldLine : r.newLine;\n if (typeof n === 'number') {\n const w = String(n).length;\n if (w > gutterWidth) gutterWidth = w;\n }\n }\n const blank = ' '.repeat(gutterWidth);\n return (\n <Box flexDirection=\"column\" marginLeft={4} marginTop={0}>\n {rows.map((row, i) => {\n const key = i;\n if (row.kind === 'hunk') {\n return (\n <Text key={key} color=\"cyan\" dimColor>\n {row.text}\n </Text>\n );\n }\n if (row.kind === 'meta') {\n return (\n <Text key={key} dimColor>\n {`${blank} ${row.text}`}\n </Text>\n );\n }\n const lnNumber = row.kind === 'del' ? row.oldLine : row.newLine;\n const lnText =\n typeof lnNumber === 'number' ? String(lnNumber).padStart(gutterWidth, ' ') : blank;\n if (row.kind === 'ctx') {\n return (\n <Text key={key} dimColor>\n {`${lnText} ${row.text}`}\n </Text>\n );\n }\n // add / del — soft background block on the content only; line number\n // stays dim outside the block so the eye anchors on the change, not\n // a wall of colour. Bright variants render lighter than plain\n // green/red on most terminals.\n const bg = row.kind === 'add' ? 'greenBright' : 'redBright';\n return (\n <Text key={key}>\n <Text dimColor>{`${lnText} `}</Text>\n <Text backgroundColor={bg} color=\"black\">\n {row.text}\n </Text>\n </Text>\n );\n })}\n {hidden > 0 ? (\n <Text dimColor italic>\n {`${blank} … ${hidden} more line${hidden === 1 ? '' : 's'}`}\n </Text>\n ) : null}\n </Box>\n );\n}\n\nfunction Entry({\n entry,\n termWidth,\n}: { entry: HistoryEntry; termWidth: number }): React.ReactElement {\n switch (entry.kind) {\n case 'user':\n return (\n <Text>\n <Text bold color=\"yellow\">{'USER: '}</Text>\n <Text color=\"white\">{entry.text}</Text>\n {entry.queued ? <Text dimColor>{' (queued)'}</Text> : null}\n {entry.pasteContent ? (\n <>\n {entry.text ? '\\n' : null}\n <Text dimColor>\n {' ↳ '}\n {entry.pasteContent}\n </Text>\n </>\n ) : null}\n </Text>\n );\n case 'assistant':\n return (\n <Box flexDirection=\"column\" marginY={1}>\n <Box flexDirection=\"row\">\n <Text bold color=\"cyan\">{'ASSISTANT: '}</Text>\n </Box>\n <Text color=\"white\">{renderMarkdownTables(entry.text, termWidth)}</Text>\n </Box>\n );\n case 'tool': {\n const argSummary = formatToolArgs(entry.name, entry.input);\n const outLines = formatToolOutput(\n entry.name,\n entry.output,\n entry.ok,\n entry.outputBytes,\n entry.outputLines,\n );\n const diff = entry.ok ? extractDiffPreview(entry.name, entry.output) : undefined;\n // Right-aligned size chip: what the MODEL actually received, not the\n // 400-char event preview. Lines (when meaningful), real bytes, and a\n // ~3.5 chars/token estimate. Skipped entirely on errors and empty\n // bodies so the success line stays clean.\n const sizeChip = (() => {\n if (!entry.ok) return '';\n const parts: string[] = [];\n if (entry.outputLines !== undefined && entry.outputLines > 0) {\n parts.push(`${entry.outputLines} L`);\n }\n if (entry.outputBytes && entry.outputBytes > 0) {\n parts.push(fmtBytes(entry.outputBytes));\n }\n if (entry.outputTokens && entry.outputTokens > 0) {\n parts.push(`≈${fmtTok(entry.outputTokens)} tok`);\n }\n return parts.join(' · ');\n })();\n return (\n <Box flexDirection=\"column\">\n <Text>\n <Text color={entry.ok ? 'green' : 'red'}>{entry.ok ? '●' : '✗'}</Text>{' '}\n <Text bold color=\"cyan\">\n {entry.name}\n </Text>\n {argSummary ? (\n <>\n <Text>{' '}</Text>\n <Text dimColor>{argSummary}</Text>\n </>\n ) : null}\n <Text dimColor>{` · ${fmtDuration(entry.durationMs)}`}</Text>\n {sizeChip ? <Text dimColor>{` · ${sizeChip}`}</Text> : null}\n </Text>\n {outLines.map((line, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: tool output lines are static, index is stable\n <Text key={i}>\n <Text dimColor>{i === outLines.length - 1 && !diff ? ' └─ ' : ' ├─ '}</Text>\n <Text\n color={!entry.ok || line.startsWith('!') ? 'red' : undefined}\n dimColor={entry.ok && !line.startsWith('!')}\n >\n {line}\n </Text>\n </Text>\n ))}\n {diff ? <DiffBlock rows={diff.rows} hidden={diff.hidden} /> : null}\n </Box>\n );\n }\n case 'info':\n return <Text dimColor>{entry.text}</Text>;\n case 'warn':\n return <Text color=\"yellow\">{entry.text}</Text>;\n case 'error':\n return <Text color=\"red\">{entry.text}</Text>;\n case 'turn-summary':\n return <Text dimColor>{entry.text}</Text>;\n case 'confirm':\n // Confirmation is handled by ConfirmPrompt component, not here.\n // This placeholder is intentionally minimal to avoid duplicating the UI.\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"yellow\" paddingX={1} marginY={1}>\n <Text bold color=\"yellow\">⚠ Confirm: {entry.toolName}</Text>\n <Text dimColor>Waiting for y / n / a / d...</Text>\n </Box>\n );\n case 'banner':\n return <Banner entry={entry} />;\n case 'subagent': {\n // One-line summary for tools/spawn/done; multi-line wrap for\n // assistant messages. The label color is stable per subagent so\n // the eye can track interleaved output from multiple agents.\n const lines = entry.text.split('\\n');\n return (\n <Box flexDirection=\"column\">\n <Text>\n <Text color={entry.agentColor} bold>\n {`[${entry.agentLabel}]`}\n </Text>\n <Text>{' '}</Text>\n <Text color={entry.agentColor}>{entry.icon}</Text>\n <Text>{' '}</Text>\n <Text>{lines[0] ?? ''}</Text>\n {entry.detail ? (\n <>\n <Text dimColor>{' · '}</Text>\n <Text dimColor>{entry.detail}</Text>\n </>\n ) : null}\n </Text>\n {lines.slice(1).map((line, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: stable line index\n <Text key={i}>\n <Text dimColor>{' '}</Text>\n <Text>{line}</Text>\n </Text>\n ))}\n </Box>\n );\n }\n }\n}\n\n/**\n * Startup splash. Renders into the Static area on mount and never\n * re-renders, so it's safe to use rich layout without worrying about\n * Ink's redraw cursor math. Keeping it inside one Box (no nested\n * borders that pull in different widths per line) keeps the frame\n * intact at any terminal width ≥ 60 cols.\n */\nfunction Banner({\n entry,\n}: {\n entry: Extract<HistoryEntry, { kind: 'banner' }>;\n}): React.ReactElement {\n const cwdShort = shortenPath(entry.cwd, 48);\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"magenta\" paddingX={2} paddingY={0}>\n <Text>\n <Text color=\"magenta\" bold>\n {' ▟▛ '}\n </Text>\n <Text color=\"magenta\" bold>\n WrongStack\n </Text>\n <Text dimColor>{' v'}</Text>\n <Text>{entry.version}</Text>\n </Text>\n <Text dimColor italic>\n {' Built on the wrong stack. Shipped anyway.'}\n </Text>\n <Text>\n <Text color=\"cyan\">{' provider '}</Text>\n <Text>\n {entry.provider}/{entry.model}\n </Text>\n </Text>\n {entry.family ? (\n <Text>\n <Text color=\"cyan\">{' family '}</Text>\n <Text dimColor>{entry.family}</Text>\n </Text>\n ) : null}\n {entry.keyTail ? (\n <Text>\n <Text color=\"cyan\">{' key '}</Text>\n <Text dimColor>{'●●●…'}</Text>\n <Text>{entry.keyTail}</Text>\n </Text>\n ) : null}\n <Text>\n <Text color=\"cyan\">{' cwd '}</Text>\n <Text dimColor>{cwdShort}</Text>\n </Text>\n <Text>\n <Text color=\"cyan\">{' hints '}</Text>\n <Text dimColor>/help · /init · /memory · /queue · /exit</Text>\n </Text>\n </Box>\n );\n}\n\nexport function shortenPath(p: string, max: number): string {\n if (p.length <= max) return p;\n // Keep the tail (closest to where the user is working).\n return `…${p.slice(p.length - (max - 1))}`;\n}\n\nconst MAX_PREVIEW = 120;\n\nexport function previewArgs(input: unknown): string {\n let s: string;\n try {\n s = typeof input === 'string' ? input : JSON.stringify(input);\n } catch {\n s = String(input);\n }\n return collapse(s, MAX_PREVIEW);\n}\n\nexport function previewOutput(output: string): string {\n return collapse(output, MAX_PREVIEW);\n}\n\nfunction collapse(s: string, max: number): string {\n const oneLine = s.replace(/\\r?\\n/g, '↵').replace(/\\s+/g, ' ').trim();\n return oneLine.length <= max ? oneLine : `${oneLine.slice(0, max - 1)}…`;\n}\n\n/** Compact thousands formatter used by the tool-size chip. 4500 → \"4.5k\",\n * 12000 → \"12k\", 1_500_000 → \"1.5M\". Keeps the chip from blowing out the\n * status line when a tool dumps a megabyte of output. */\nexport function fmtTok(n: number): string {\n if (!Number.isFinite(n) || n <= 0) return '0';\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1000) return `${(n / 1000).toFixed(n >= 10_000 ? 0 : 1)}k`;\n return String(n);\n}\n\nexport function fmtDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n const totalSec = Math.floor(ms / 1000);\n return `${Math.floor(totalSec / 60)}m${totalSec % 60}s`;\n}\n\nconst ARG_BUDGET = 60;\nconst OUT_BUDGET = 80;\n\n/**\n * Render the most useful single-line description of a tool call's\n * arguments. Each tool has the field a human cares about (path for\n * read/edit, command for bash, pattern for grep) — pick that and skip\n * the noisy JSON shape entirely. Falls back to a compact JSON preview\n * for unrecognised tools.\n */\nexport function formatToolArgs(toolName: string, input: unknown): string {\n if (!input || typeof input !== 'object') return '';\n const obj = input as Record<string, unknown>;\n\n switch (toolName) {\n case 'read':\n case 'write':\n case 'edit':\n case 'patch':\n case 'document':\n case 'list_dir':\n case 'ls':\n case 'tree': {\n const p = stringOf(obj['path']) ?? stringOf(obj['file']);\n return p ? shortenPath(p, ARG_BUDGET) : '';\n }\n case 'grep':\n case 'search':\n case 'replace': {\n const pat = stringOf(obj['pattern']) ?? stringOf(obj['query']);\n const scope = stringOf(obj['path']) ?? stringOf(obj['glob']);\n const head = pat ? `\"${truncMid(pat, 36)}\"` : '';\n const tail = scope ? ` in ${shortenPath(scope, 28)}` : '';\n return `${head}${tail}` || (stringOf(obj['command']) ?? '');\n }\n case 'glob': {\n const pat = stringOf(obj['pattern']) ?? stringOf(obj['glob']);\n return pat ? `\"${truncMid(pat, ARG_BUDGET - 2)}\"` : '';\n }\n case 'bash':\n case 'shell':\n case 'exec':\n case 'install':\n case 'git': {\n const cmd = stringOf(obj['command']) ?? stringOf(obj['args']);\n return cmd ? truncMid(cmd, ARG_BUDGET) : '';\n }\n case 'diff': {\n const files = Array.isArray(obj['files']) ? (obj['files'] as unknown[]) : undefined;\n if (files && files.length > 0) {\n const head = stringOf(files[0]) ?? '';\n const rest = files.length > 1 ? ` (+${files.length - 1})` : '';\n return head ? `${shortenPath(head, 50)}${rest}` : '';\n }\n const mode = stringOf(obj['mode']);\n return mode ? `mode: ${mode}` : '';\n }\n case 'fetch':\n case 'webfetch':\n case 'web_fetch': {\n const u = stringOf(obj['url']);\n return u ? truncMid(u, ARG_BUDGET) : '';\n }\n case 'todo': {\n const list = obj['todos'];\n if (Array.isArray(list)) return `${list.length} item${list.length === 1 ? '' : 's'}`;\n return '';\n }\n case 'lint':\n case 'format':\n case 'typecheck':\n case 'test':\n case 'audit':\n case 'outdated': {\n const files = obj['files'];\n if (Array.isArray(files) && files.length > 0) {\n const first = stringOf(files[0]);\n const more = files.length > 1 ? ` (+${files.length - 1})` : '';\n return first ? `${shortenPath(first, 50)}${more}` : `${files.length} files`;\n }\n const filter = stringOf(obj['filter']) ?? stringOf(obj['pattern']);\n return filter ? `\"${truncMid(filter, ARG_BUDGET - 2)}\"` : '';\n }\n case 'json': {\n const file = stringOf(obj['file']);\n const q = stringOf(obj['query']);\n if (file) return q ? `${shortenPath(file, 40)} ${q}` : shortenPath(file, ARG_BUDGET);\n return q ? truncMid(q, ARG_BUDGET) : '';\n }\n case 'scaffold': {\n const tmpl = stringOf(obj['template']) ?? stringOf(obj['type']);\n const name = stringOf(obj['name']);\n if (tmpl && name) return `${tmpl} → ${truncMid(name, ARG_BUDGET - tmpl.length - 4)}`;\n return name ?? tmpl ?? '';\n }\n case 'remember':\n case 'forget':\n case 'memory': {\n const key = stringOf(obj['key']) ?? stringOf(obj['name']);\n return key ? truncMid(key, ARG_BUDGET) : '';\n }\n case 'mode': {\n const m = stringOf(obj['mode']) ?? stringOf(obj['name']);\n return m ? truncMid(m, ARG_BUDGET) : '';\n }\n case 'logs': {\n const target = stringOf(obj['target']) ?? stringOf(obj['service']) ?? stringOf(obj['path']);\n return target ? truncMid(target, ARG_BUDGET) : '';\n }\n }\n\n // Generic fallback: prefer the most \"identifying\" string field, else\n // a tight JSON preview.\n for (const key of ['path', 'file', 'url', 'name', 'query', 'pattern', 'command']) {\n const v = stringOf(obj[key]);\n if (v) return truncMid(v, ARG_BUDGET);\n }\n try {\n return truncMid(JSON.stringify(obj), ARG_BUDGET);\n } catch {\n return '';\n }\n}\n\n/**\n * Distil a tool's result text into 0–N digest lines the renderer can\n * stack under the tool header. Some tools say everything in one line\n * (todo: nothing to add beyond the args); others (bash with both\n * stdout and stderr, grep with a first matching path) deserve two or\n * three. The shape is per-tool — there is no fixed budget.\n */\nexport function formatToolOutput(\n toolName: string,\n output: string | undefined,\n ok: boolean,\n /** Real bytes the model received — passed in by the Entry component so\n * read-tool / shell-tool digests can quote the true size instead of the\n * 400-char preview that `output` is capped to. */\n _outputBytes?: number,\n /** Real line count from the agent — preferred over scanning the preview\n * when present, since the preview rarely contains every prefix. */\n outputLines?: number,\n): string[] {\n if (!output) return ok ? [] : ['failed'];\n const text = output.trim();\n if (!text) return ok ? [] : ['failed'];\n\n // Try to parse JSON-shaped tool outputs (grep, glob, etc.).\n const json = tryParseJson(text);\n\n if (toolName === 'write') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const bytes = numOf(o['bytes_written']) ?? numOf(o['bytes']);\n const created = o['created'] === true;\n const tag = created ? 'created' : 'updated';\n if (bytes !== undefined) return [`${tag} · ${fmtBytes(bytes)}`];\n return [tag];\n }\n }\n\n if (toolName === 'edit') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const reps = numOf(o['replacements']);\n if (reps !== undefined) return [`${reps} replacement${reps === 1 ? '' : 's'}`];\n }\n }\n\n if (toolName === 'patch') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const applied = numOf(o['applied']);\n const rejected = numOf(o['rejected']);\n const files = Array.isArray(o['files']) ? (o['files'] as unknown[]) : undefined;\n const lines: string[] = [];\n if (applied !== undefined || rejected !== undefined) {\n const parts = [];\n if (applied !== undefined) parts.push(`${applied} applied`);\n if (rejected !== undefined && rejected > 0) parts.push(`${rejected} rejected`);\n lines.push(parts.join(' · '));\n }\n if (files && files.length > 0) {\n const first = stringOf(files[0]) ?? '';\n const more = files.length > 1 ? ` (+${files.length - 1})` : '';\n lines.push(`${shortenPath(first, 60)}${more}`);\n }\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'replace') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const files = numOf(o['files_modified']);\n const reps = numOf(o['total_replacements']);\n if (files !== undefined && reps !== undefined) {\n return [\n `${reps} replacement${reps === 1 ? '' : 's'} in ${files} file${files === 1 ? '' : 's'}`,\n ];\n }\n }\n }\n\n if (toolName === 'diff') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const files = Array.isArray(o['files']) ? (o['files'] as unknown[]) : undefined;\n const truncated = o['truncated'] === true;\n const mode = stringOf(o['mode']);\n const diff = stringOf(o['diff']);\n if (!diff) return [files && files.length === 0 ? 'no changes' : 'empty diff'];\n const head: string[] = [];\n if (mode) head.push(mode);\n if (files && files.length > 0)\n head.push(`${files.length} file${files.length === 1 ? '' : 's'}`);\n if (truncated) head.push('truncated');\n return head.length > 0 ? [head.join(' · ')] : [];\n }\n }\n\n if (toolName === 'read') {\n // When the agent supplied a real line count (new path), the size chip\n // beside the tool header already shows lines/bytes/tokens for the FULL\n // body the model received — no need to repeat misleading numbers\n // derived from the 400-char preview.\n if (outputLines !== undefined) return [];\n // Legacy fallback: derive what we can from the preview text. The byte\n // count below is the preview length, NOT what the model received, so\n // mark it as such to avoid confusion.\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const bytes = numOf(o['bytes']);\n if (bytes !== undefined) return [`${fmtBytes(bytes)} read`];\n }\n const range = scanNumberedRange(text);\n if (range.count > 0 && range.first !== undefined && range.last !== undefined) {\n if (range.first === range.last) {\n return [`L${range.first} · ${fmtBytes(text.length)}`];\n }\n const contiguous = range.count === range.last - range.first + 1;\n const head = `L${range.first}–${range.last}`;\n const tail = contiguous\n ? `${range.count} line${range.count === 1 ? '' : 's'}`\n : `${range.count} lines (gaps)`;\n return [`${head} · ${tail} · ${fmtBytes(text.length)}`];\n }\n }\n\n if (toolName === 'grep' || toolName === 'glob') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const matches = Array.isArray(o['matches']) ? (o['matches'] as unknown[]) : undefined;\n const count = numOf(o['count']) ?? matches?.length;\n const truncated = o['truncated'] === true;\n if (count !== undefined) {\n if (count === 0) return ['no matches'];\n const lines: string[] = [\n `${count} match${count === 1 ? '' : 'es'}${truncated ? ' (truncated)' : ''}`,\n ];\n // Surface the first hit so the user knows *where* without\n // opening the tool result.\n const firstHit = matches && matches.length > 0 ? formatMatchHit(matches[0]) : undefined;\n if (firstHit) lines.push(firstHit);\n return lines;\n }\n }\n }\n\n if (toolName === 'bash' || toolName === 'shell') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const exit = numOf(o['exit_code']) ?? numOf(o['exitCode']);\n const stdout = stringOf(o['stdout']) ?? '';\n const stderr = stringOf(o['stderr']) ?? '';\n const stdoutLines = countLines(stdout);\n const stderrLines = countLines(stderr);\n const head: string[] = [];\n if (exit !== undefined) head.push(`exit ${exit}`);\n const lineParts: string[] = [];\n if (stdoutLines > 0) lineParts.push(`${stdoutLines} out`);\n if (stderrLines > 0) lineParts.push(`${stderrLines} err`);\n if (lineParts.length > 0) head.push(lineParts.join(' · '));\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n const stdoutPreview = firstNonEmpty(stdout);\n const stderrPreview = firstNonEmpty(stderr);\n if (stdoutPreview) lines.push(`\"${truncMid(stdoutPreview, 70)}\"`);\n if (stderrPreview && stderrPreview !== stdoutPreview) {\n lines.push(`! \"${truncMid(stderrPreview, 70)}\"`);\n }\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'todo') {\n // The arg summary already says \"N items\" — repeating \"updated\" is\n // noise, so emit nothing on success.\n return ok ? [] : [text.split('\\n')[0] ?? ''];\n }\n\n if (toolName === 'fetch' || toolName === 'webfetch' || toolName === 'web_fetch') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const status = numOf(o['status']);\n const ct = stringOf(o['content_type']);\n const url = stringOf(o['url']);\n const content = stringOf(o['content']);\n const head: string[] = [];\n if (status !== undefined) head.push(`HTTP ${status}`);\n if (ct) head.push(ct.split(';')[0] ?? ct);\n if (content) head.push(fmtBytes(Buffer.byteLength(content, 'utf8')));\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n if (url && status !== undefined && (status < 200 || status >= 400)) {\n lines.push(shortenPath(url, 70));\n }\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'git') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const exit = numOf(o['exitCode']) ?? numOf(o['exit_code']);\n const stdout = stringOf(o['stdout']) ?? '';\n const stderr = stringOf(o['stderr']) ?? '';\n const head: string[] = [];\n if (exit !== undefined) head.push(`exit ${exit}`);\n const stdoutLines = countLines(stdout);\n const stderrLines = countLines(stderr);\n const lparts: string[] = [];\n if (stdoutLines > 0) lparts.push(`${stdoutLines} out`);\n if (stderrLines > 0) lparts.push(`${stderrLines} err`);\n if (lparts.length > 0) head.push(lparts.join(' · '));\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n const preview = firstNonEmpty(stdout) ?? firstNonEmpty(stderr);\n if (preview) lines.push(`\"${truncMid(preview, 70)}\"`);\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'lint') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const linter = stringOf(o['linter']);\n const files = numOf(o['files_checked']);\n const errors = numOf(o['errors']) ?? 0;\n const warnings = numOf(o['warnings']) ?? 0;\n const fix = o['fix_applied'] === true;\n const head: string[] = [];\n if (linter && linter !== 'none') head.push(linter);\n head.push(`${errors} error${errors === 1 ? '' : 's'}`);\n head.push(`${warnings} warning${warnings === 1 ? '' : 's'}`);\n if (files !== undefined) head.push(`${files} file${files === 1 ? '' : 's'}`);\n if (fix) head.push('fixed');\n return [head.join(' · ')];\n }\n }\n\n if (toolName === 'format') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const fixer = stringOf(o['fixer']);\n const checked = numOf(o['files_checked']);\n const changed = numOf(o['files_changed']);\n const head: string[] = [];\n if (fixer && fixer !== 'none') head.push(fixer);\n if (changed !== undefined && checked !== undefined) {\n head.push(`${changed}/${checked} changed`);\n } else if (changed !== undefined) {\n head.push(`${changed} changed`);\n }\n return head.length > 0 ? [head.join(' · ')] : [];\n }\n }\n\n if (toolName === 'typecheck') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const exit = numOf(o['exit_code']) ?? numOf(o['exitCode']);\n const errors = numOf(o['errors']);\n const head: string[] = [];\n if (errors !== undefined) head.push(`${errors} error${errors === 1 ? '' : 's'}`);\n if (exit !== undefined) head.push(`exit ${exit}`);\n const stdout = stringOf(o['output']) ?? stringOf(o['stdout']) ?? '';\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n const preview = firstNonEmpty(stdout);\n if (preview && (!errors || errors > 0)) lines.push(`\"${truncMid(preview, 70)}\"`);\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'test') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const runner = stringOf(o['runner']);\n const total = numOf(o['tests_run']) ?? 0;\n const passed = numOf(o['passed']) ?? 0;\n const failed = numOf(o['failed']) ?? 0;\n const duration = numOf(o['duration_ms']);\n const head: string[] = [];\n if (runner && runner !== 'none') head.push(runner);\n head.push(`${passed}/${total} passed`);\n if (failed > 0) head.push(`${failed} failed`);\n if (duration !== undefined) head.push(fmtDuration(duration));\n return [head.join(' · ')];\n }\n }\n\n if (toolName === 'audit') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const total = numOf(o['total']) ?? 0;\n const summary = stringOf(o['summary']);\n if (total === 0) return ['no vulnerabilities'];\n const head = `${total} vulnerabilit${total === 1 ? 'y' : 'ies'}`;\n return summary && summary.toLowerCase() !== head.toLowerCase()\n ? [head, truncMid(summary, OUT_BUDGET)]\n : [head];\n }\n }\n\n if (toolName === 'outdated') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const total = numOf(o['total']) ?? 0;\n const pkgs = Array.isArray(o['packages']) ? (o['packages'] as unknown[]) : undefined;\n if (total === 0) return ['all up to date'];\n const lines: string[] = [`${total} outdated`];\n if (pkgs && pkgs.length > 0) {\n const first = pkgs[0];\n if (first && typeof first === 'object') {\n const p = first as Record<string, unknown>;\n const name = stringOf(p['name']) ?? stringOf(p['package']);\n const cur = stringOf(p['current']);\n const wanted = stringOf(p['wanted']) ?? stringOf(p['latest']);\n if (name && cur && wanted) lines.push(`${name}: ${cur} → ${wanted}`);\n else if (name) lines.push(name);\n }\n }\n return lines;\n }\n }\n\n if (toolName === 'tree') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const files = numOf(o['total_files']);\n const dirs = numOf(o['total_dirs']);\n const truncated = o['truncated'] === true;\n const parts: string[] = [];\n if (files !== undefined) parts.push(`${files} file${files === 1 ? '' : 's'}`);\n if (dirs !== undefined) parts.push(`${dirs} dir${dirs === 1 ? '' : 's'}`);\n if (truncated) parts.push('truncated');\n return parts.length > 0 ? [parts.join(' · ')] : [];\n }\n }\n\n if (toolName === 'json') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const err = stringOf(o['error']);\n if (err) return [truncMid(err, OUT_BUDGET)];\n const type = stringOf(o['type']);\n const keys = Array.isArray(o['keys']) ? (o['keys'] as unknown[]) : undefined;\n const parts: string[] = [];\n if (type) parts.push(type);\n if (keys) parts.push(`${keys.length} key${keys.length === 1 ? '' : 's'}`);\n return parts.length > 0 ? [parts.join(' · ')] : [];\n }\n }\n\n if (toolName === 'install') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const exit = numOf(o['exit_code']) ?? numOf(o['exitCode']);\n const added = numOf(o['added']);\n const removed = numOf(o['removed']);\n const head: string[] = [];\n if (exit !== undefined) head.push(`exit ${exit}`);\n if (added !== undefined) head.push(`+${added}`);\n if (removed !== undefined) head.push(`-${removed}`);\n const stdout = stringOf(o['stdout']) ?? stringOf(o['output']) ?? '';\n const lines: string[] = [];\n if (head.length > 0) lines.push(head.join(' · '));\n const preview = firstNonEmpty(stdout);\n if (preview) lines.push(`\"${truncMid(preview, 70)}\"`);\n if (lines.length > 0) return lines;\n }\n }\n\n if (toolName === 'scaffold') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const created = Array.isArray(o['created']) ? (o['created'] as unknown[]) : undefined;\n const skipped = Array.isArray(o['skipped']) ? (o['skipped'] as unknown[]) : undefined;\n const parts: string[] = [];\n if (created !== undefined) parts.push(`${created.length} created`);\n if (skipped !== undefined && skipped.length > 0) parts.push(`${skipped.length} skipped`);\n if (parts.length > 0) return [parts.join(' · ')];\n }\n }\n\n if (toolName === 'remember' || toolName === 'forget' || toolName === 'memory') {\n return ok ? [toolName === 'forget' ? 'removed' : 'saved'] : [text.split('\\n')[0] ?? ''];\n }\n\n if (toolName === 'mode') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const mode = stringOf(o['mode']) ?? stringOf(o['active']) ?? stringOf(o['name']);\n if (mode) return [`mode: ${mode}`];\n }\n }\n\n if (toolName === 'search') {\n if (json && typeof json === 'object') {\n const o = json as Record<string, unknown>;\n const matches = Array.isArray(o['matches'])\n ? (o['matches'] as unknown[])\n : Array.isArray(o['results'])\n ? (o['results'] as unknown[])\n : undefined;\n const count = numOf(o['count']) ?? matches?.length;\n if (count !== undefined) {\n if (count === 0) return ['no results'];\n const lines: string[] = [`${count} result${count === 1 ? '' : 's'}`];\n const firstHit = matches && matches.length > 0 ? formatMatchHit(matches[0]) : undefined;\n if (firstHit) lines.push(firstHit);\n return lines;\n }\n }\n }\n\n if (toolName === 'logs') {\n const lines = text.split('\\n').filter((l) => l.trim());\n if (lines.length === 0) return [];\n const head = `${lines.length} line${lines.length === 1 ? '' : 's'}`;\n const lastLine = lines[lines.length - 1];\n return lastLine ? [head, `\"${truncMid(lastLine.trim(), 70)}\"`] : [head];\n }\n\n // Generic fallback.\n //\n // Earlier we just grabbed the first non-empty line. That broke\n // catastrophically for tools that return pretty-printed JSON (most\n // notably `delegate`): `JSON.stringify(obj, null, 2)` starts with a\n // bare `{` on line 1, so the preview rendered as `└─ {` and the\n // user couldn't see WHY the subagent finished — defeating the whole\n // point of the chip.\n //\n // New behavior:\n // 1. If the text parses as a JSON object, surface up to GENERIC_KV_KEYS\n // of its most informative keys inline (`ok=false · status=timeout\n // · iterations=12 · error=\"...\"`).\n // 2. Otherwise collapse ALL whitespace into single spaces (no more\n // \"first line only\" trap) and render up to GENERIC_BUDGET chars.\n if (json && typeof json === 'object' && !Array.isArray(json)) {\n const summary = summarizeJsonObject(json as Record<string, unknown>);\n if (summary) return [summary];\n }\n const collapsed = text.replace(/\\s+/g, ' ').trim();\n return [truncMid(collapsed, GENERIC_BUDGET)];\n}\n\nconst GENERIC_BUDGET = 240;\n\n/**\n * Build a one-line \"key=value · key=value …\" preview for a JSON-shaped\n * tool result. Prioritises fields the user cares about: status flags,\n * error/result fields, then everything else by appearance order. Stops\n * once the rendered preview hits the budget.\n */\nfunction summarizeJsonObject(obj: Record<string, unknown>): string | null {\n const keys = Object.keys(obj);\n if (keys.length === 0) return null;\n // Reorder: status-y keys first (so a failure/timeout reads obviously),\n // then narrative fields (result/error/message), then the rest.\n const priority = [\n 'ok',\n 'status',\n 'timedOut',\n 'stopReason',\n 'reason',\n 'error',\n 'message',\n 'result',\n 'summary',\n 'iterations',\n 'toolCalls',\n 'durationMs',\n 'subagentId',\n 'taskId',\n ];\n const ordered = [\n ...priority.filter((k) => keys.includes(k)),\n ...keys.filter((k) => !priority.includes(k)),\n ];\n const parts: string[] = [];\n let used = 0;\n for (const key of ordered) {\n const v = obj[key];\n if (v === undefined || v === null) continue;\n const rendered =\n typeof v === 'string'\n ? `${key}=\"${truncMid(v.replace(/\\s+/g, ' '), 80)}\"`\n : typeof v === 'number' || typeof v === 'boolean'\n ? `${key}=${v}`\n : Array.isArray(v)\n ? `${key}=[${v.length}]`\n : `${key}={…}`;\n if (used + rendered.length > GENERIC_BUDGET) {\n parts.push('…');\n break;\n }\n parts.push(rendered);\n used += rendered.length + 3; // \" · \" separator\n }\n return parts.length > 0 ? parts.join(' · ') : null;\n}\n\nfunction firstNonEmpty(text: string): string | undefined {\n if (!text) return undefined;\n const line = text.split('\\n').find((l) => l.trim());\n return line ? line.replace(/\\s+/g, ' ').trim() : undefined;\n}\n\nfunction formatMatchHit(hit: unknown): string | undefined {\n if (typeof hit === 'string') return truncMid(hit, 70);\n if (hit && typeof hit === 'object') {\n const o = hit as Record<string, unknown>;\n const file = stringOf(o['file']) ?? stringOf(o['path']);\n const line = numOf(o['line']) ?? numOf(o['lineNumber']);\n const snippet = stringOf(o['text']) ?? stringOf(o['match']) ?? stringOf(o['preview']);\n if (file) {\n const head = line !== undefined ? `${shortenPath(file, 40)}:${line}` : shortenPath(file, 50);\n return snippet ? `${head} ${truncMid(snippet.replace(/\\s+/g, ' '), 40)}` : head;\n }\n if (snippet) return truncMid(snippet, 70);\n }\n return undefined;\n}\n\nexport type DiffLineKind = 'add' | 'del' | 'hunk' | 'ctx' | 'meta';\n\nexport interface DiffLineRow {\n kind: DiffLineKind;\n text: string;\n oldLine?: number;\n newLine?: number;\n}\n\nconst DIFF_MAX_LINES = 8;\n\n/**\n * Pull a unified-diff string out of a tool's JSON output, then turn it\n * into a small, structured preview suitable for colour-coded rendering\n * in the TUI history. We cap at ~8 lines so a giant patch doesn't\n * dominate the chat scrollback; the renderer surfaces the hidden count.\n */\nexport function extractDiffPreview(\n toolName: string,\n output: string | undefined,\n): { rows: DiffLineRow[]; hidden: number } | undefined {\n if (!output) return undefined;\n const text = output.trim();\n if (!text) return undefined;\n\n let diff: string | undefined;\n if (toolName === 'edit' || toolName === 'diff') {\n const parsed = tryParseJson(text);\n if (parsed && typeof parsed === 'object') {\n diff = stringOf((parsed as Record<string, unknown>)['diff']);\n }\n } else if (toolName === 'patch') {\n const parsed = tryParseJson(text);\n if (parsed && typeof parsed === 'object') {\n diff =\n stringOf((parsed as Record<string, unknown>)['diff']) ??\n stringOf((parsed as Record<string, unknown>)['stdout']);\n } else if (text.includes('@@') || text.startsWith('---')) {\n diff = text;\n }\n }\n\n if (!diff || !diff.trim() || diff.startsWith('(no-op')) return undefined;\n return parseUnifiedDiff(diff, DIFF_MAX_LINES);\n}\n\nfunction parseUnifiedDiff(diff: string, maxLines: number): { rows: DiffLineRow[]; hidden: number } {\n const all: DiffLineRow[] = [];\n // Counters advance as we walk through a hunk so each row can carry its\n // line number in the source/target file. Reset whenever we see a new @@.\n let oldLn = 0;\n let newLn = 0;\n for (const raw of diff.split('\\n')) {\n const line = raw.replace(/\\r$/, '');\n if (line.startsWith('+++') || line.startsWith('---')) continue;\n if (line.startsWith('diff --git') || line.startsWith('index ')) continue;\n if (line.startsWith('@@')) {\n const m = line.match(/^@@\\s+-(\\d+)(?:,\\d+)?\\s+\\+(\\d+)(?:,\\d+)?\\s+@@/);\n if (m) {\n oldLn = Number.parseInt(m[1] ?? '0', 10) || 0;\n newLn = Number.parseInt(m[2] ?? '0', 10) || 0;\n }\n all.push({ kind: 'hunk', text: truncMid(line, 60) });\n continue;\n }\n if (line.startsWith('+')) {\n all.push({ kind: 'add', text: truncMid(line, 100), newLine: newLn });\n newLn++;\n continue;\n }\n if (line.startsWith('-')) {\n all.push({ kind: 'del', text: truncMid(line, 100), oldLine: oldLn });\n oldLn++;\n continue;\n }\n if (line.startsWith('\\\\ No newline')) {\n all.push({ kind: 'meta', text: line });\n continue;\n }\n if (line.length === 0) continue;\n all.push({ kind: 'ctx', text: truncMid(line, 100), oldLine: oldLn, newLine: newLn });\n oldLn++;\n newLn++;\n }\n if (all.length === 0) return { rows: [], hidden: 0 };\n if (all.length <= maxLines) return { rows: all, hidden: 0 };\n return { rows: all.slice(0, maxLines), hidden: all.length - maxLines };\n}\n\nfunction stringOf(v: unknown): string | undefined {\n return typeof v === 'string' && v.length > 0 ? v : undefined;\n}\n\nfunction numOf(v: unknown): number | undefined {\n return typeof v === 'number' && Number.isFinite(v) ? v : undefined;\n}\n\nfunction tryParseJson(s: string): unknown {\n const t = s.trimStart();\n if (!t.startsWith('{') && !t.startsWith('[')) return undefined;\n try {\n return JSON.parse(s);\n } catch {\n return undefined;\n }\n}\n\nfunction scanNumberedRange(text: string): { first?: number; last?: number; count: number } {\n let first: number | undefined;\n let last: number | undefined;\n let count = 0;\n for (const line of text.split('\\n')) {\n const m = line.match(/^\\s*(\\d+)→/);\n if (m?.[1]) {\n const n = Number.parseInt(m[1], 10);\n if (Number.isFinite(n)) {\n if (first === undefined) first = n;\n last = n;\n count++;\n }\n }\n }\n return { first, last, count };\n}\n\nfunction countLines(text: string): number {\n if (!text) return 0;\n return text.replace(/\\n$/, '').split('\\n').length;\n}\n\nfunction fmtBytes(n: number): string {\n if (n < 1024) return `${n}B`;\n if (n < 1024 * 1024) return `${(n / 1024).toFixed(1)}KB`;\n return `${(n / (1024 * 1024)).toFixed(1)}MB`;\n}\n\nfunction truncMid(s: string, max: number): string {\n if (s.length <= max) return s;\n return `${s.slice(0, max - 1)}…`;\n}\n","import { Box, Text, useInput, useStdin } from 'ink';\nimport type React from 'react';\nimport { useEffect } from 'react';\n\nexport interface InputProps {\n prompt?: string;\n value: string;\n cursor: number;\n placeholders: string[];\n disabled?: boolean;\n hint?: string;\n onKey: (input: string, key: KeyEvent) => void;\n}\n\nexport interface KeyEvent {\n upArrow: boolean;\n downArrow: boolean;\n leftArrow: boolean;\n rightArrow: boolean;\n return: boolean;\n escape: boolean;\n ctrl: boolean;\n meta: boolean;\n shift: boolean;\n tab: boolean;\n backspace: boolean;\n delete: boolean;\n pageUp: boolean;\n pageDown: boolean;\n home: boolean;\n end: boolean;\n}\n\n// Ink 5.x useInput does not expose home/end as boolean flags even though\n// parseKeypress recognizes them. We subscribe to raw stdin to catch these.\nfunction isHomeEnd(data: string): 'home' | 'end' | null {\n // Common terminal sequences for Home/End.\n // CSI H / CSI F are the most universal; the longer variants are fallbacks.\n if (\n data === '\\x1b[H' ||\n data === '\\x1b[1~' ||\n data === '\\x1bOH' ||\n data === '\\x1b[7~'\n )\n return 'home';\n if (\n data === '\\x1b[F' ||\n data === '\\x1b[4~' ||\n data === '\\x1bOF' ||\n data === '\\x1b[8~'\n )\n return 'end';\n return null;\n}\n\nconst EMPTY_KEY: KeyEvent = {\n upArrow: false,\n downArrow: false,\n leftArrow: false,\n rightArrow: false,\n return: false,\n escape: false,\n ctrl: false,\n meta: false,\n shift: false,\n tab: false,\n backspace: false,\n delete: false,\n pageUp: false,\n pageDown: false,\n home: false,\n end: false,\n};\n\nexport function Input({\n prompt = '› ',\n value,\n cursor,\n placeholders,\n disabled,\n hint,\n onKey,\n}: InputProps): React.ReactElement {\n useInput((input, key) => {\n if (disabled) return;\n onKey(input, key as KeyEvent);\n });\n\n // Catch Home/End that Ink's useInput doesn't surface.\n const { stdin } = useStdin();\n useEffect(() => {\n if (!stdin || disabled) return;\n const handleData = (data: Buffer) => {\n const kind = isHomeEnd(data.toString());\n if (kind === 'home') onKey('', { ...EMPTY_KEY, home: true });\n else if (kind === 'end') onKey('', { ...EMPTY_KEY, end: true });\n };\n stdin.on('data', handleData);\n return () => {\n stdin.off('data', handleData);\n };\n }, [stdin, disabled, onKey]);\n\n const before = value.slice(0, cursor);\n const at = value.slice(cursor, cursor + 1) || ' ';\n const after = value.slice(cursor + 1);\n\n // Disabled (aborting an iteration) is the only signal that needs a\n // hard visual cue — paint the prompt red. We avoid wrapping the input\n // in a border Box: Ink redraws the live area on every state change,\n // and in non-altScreen mode the previous frame's border is left in\n // the terminal's scrollback. A `> ` prompt + inverse cursor is enough\n // to indicate the input row.\n const promptColor = disabled ? 'red' : 'cyan';\n\n return (\n <Box flexDirection=\"column\">\n {placeholders.map((p, i) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: placeholders are append-only, index is stable\n <Text key={i} dimColor>\n {' ↳ '}\n {p}\n </Text>\n ))}\n {/* Single <Text> wrapper so prompt + buffer + cursor + tail all wrap\n as one continuous string. Splitting them across sibling Text\n elements would let each piece wrap independently and shift the\n cursor cell off the intended character. */}\n <Text>\n <Text color={promptColor}>{prompt}</Text>\n {before}\n <Text inverse>{at}</Text>\n {after}\n </Text>\n {hint ? <Text dimColor>{hint}</Text> : null}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { FleetEntry } from '../app.js';\n\nexport interface LiveActivityStripProps {\n /** Per-subagent state from the FleetEntry table. */\n entries: Record<string, FleetEntry>;\n /** Re-renders every tick so elapsed timers stay live; otherwise the\n * bar freezes between FleetEntry updates (which can be 30s+ apart\n * if a subagent is parked in one tool). */\n nowTick: number;\n /** Optional cap on rows so a 20-subagent fleet doesn't push the\n * input off-screen. Default 4 — matches the status bar's 4th line. */\n maxRows?: number;\n}\n\nfunction fmtElapsed(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n if (ms < 60_000) return `${(ms / 1000).toFixed(1)}s`;\n const m = Math.floor(ms / 60_000);\n const s = Math.floor((ms % 60_000) / 1000);\n return `${m}m${s.toString().padStart(2, '0')}s`;\n}\n\nfunction fmtBytes(n: number): string {\n if (n < 1024) return `${n}B`;\n return `${(n / 1024).toFixed(1)}KB`;\n}\n\nfunction fmtRecentTool(tool: FleetEntry['recentTools'][number]): string {\n const status = tool.ok === false ? 'fail' : 'ok';\n const name = tool.name.length > 18 ? `${tool.name.slice(0, 17)}...` : tool.name;\n const parts = [status, name];\n if (typeof tool.durationMs === 'number') parts.push(fmtElapsed(tool.durationMs));\n if (typeof tool.outputBytes === 'number' && tool.outputBytes > 0) parts.push(fmtBytes(tool.outputBytes));\n if (typeof tool.outputLines === 'number' && tool.outputLines > 0) parts.push(`${tool.outputLines}L`);\n return parts.join(' ');\n}\n\nfunction fmtRecentMessage(message: FleetEntry['recentMessages'][number]): string {\n const text = message.text.replace(/\\s+/g, ' ');\n return text.length > 48 ? `${text.slice(0, 47)}...` : text;\n}\n\n/**\n * Compact one-line-per-subagent strip that sits directly above the\n * input area. Shows only RUNNING subagents — completed/failed entries\n * already surfaced as history rows and don't need to crowd the\n * always-visible band.\n *\n * Each row carries: `→ <label> <currentTool?> (elapsed) · <iter>it\n * <tool>tc`. The currentTool segment updates on `tool.started` /\n * `tool.executed` so the user can tell at a glance \"AGENT#1 has been\n * inside `bash` for 12s now\" without grep-tailing the JSONL.\n *\n * Renders nothing when no subagents are running, so the input area\n * sits flush against history during idle / solo work.\n */\nexport function LiveActivityStrip({\n entries,\n nowTick,\n maxRows = 4,\n}: LiveActivityStripProps): React.ReactElement | null {\n const running = Object.values(entries)\n .filter((e) => e.status === 'running')\n // Stable order: oldest-started first, so the strip doesn't shuffle\n // every time a tool starts/ends on one of the rows.\n .sort((a, b) => a.startedAt - b.startedAt)\n .slice(0, maxRows);\n if (running.length === 0) return null;\n\n // Reference nowTick so React knows we depend on it — otherwise the\n // 1s ticker won't re-render the elapsed values.\n void nowTick;\n const now = Date.now();\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n {running.map((e) => {\n const toolElapsed = e.currentTool ? now - e.currentTool.startedAt : 0;\n const taskElapsed = now - e.startedAt;\n const toolSeg = e.currentTool\n ? `→ ${e.currentTool.name} (${fmtElapsed(toolElapsed)})`\n : 'idle between tools';\n const recentTools = (e.recentTools ?? []).slice(-2).map(fmtRecentTool).join(' | ');\n const messageText =\n e.streamingText.trim() || (e.recentMessages ?? []).slice(-1).map(fmtRecentMessage).join('');\n return (\n <Box key={e.id} flexDirection=\"row\" gap={1}>\n <Text color=\"cyan\">●</Text>\n <Text>{e.name.slice(0, 14).padEnd(14)}</Text>\n <Text dimColor>·</Text>\n <Text color={e.currentTool ? 'green' : 'yellow'}>{toolSeg}</Text>\n <Text dimColor>·</Text>\n <Text dimColor>\n {e.iterations}it {e.toolCalls}tc · {fmtElapsed(taskElapsed)}\n </Text>\n {recentTools ? (\n <>\n <Text dimColor>|</Text>\n <Text dimColor>last: {recentTools}</Text>\n </>\n ) : null}\n {messageText ? (\n <>\n <Text dimColor>|</Text>\n <Text dimColor>msg: {fmtRecentMessage({ text: messageText, at: Date.now() })}</Text>\n </>\n ) : null}\n </Box>\n );\n })}\n {Object.values(entries).filter((e) => e.status === 'running').length > maxRows ? (\n <Box paddingLeft={2}>\n <Text dimColor>\n …+{Object.values(entries).filter((e) => e.status === 'running').length - maxRows} more\n </Text>\n </Box>\n ) : null}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\r\nimport type React from 'react';\r\n\r\nexport interface AutonomyOption {\r\n mode: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';\r\n label: string;\r\n description: string;\r\n color: string;\r\n}\r\n\r\nexport interface AutonomyPickerProps {\r\n options: AutonomyOption[];\r\n selected: number;\r\n hint?: string;\r\n}\r\n\r\nexport const AUTONOMY_OPTIONS: AutonomyOption[] = [\r\n { mode: 'off', label: 'OFF', description: 'Agent stops after each turn (normal interactive mode)', color: 'green' },\r\n { mode: 'suggest', label: 'SUGGEST', description: 'Shows next-step suggestions after each turn', color: 'cyan' },\r\n { mode: 'auto', label: 'AUTO', description: 'Self-driving — agent picks next step and continues', color: 'yellow' },\r\n { mode: 'eternal', label: 'ETERNAL', description: 'Goal-driven loop — requires /goal set first', color: 'red' },\r\n { mode: 'eternal-parallel', label: 'PARALLEL', description: 'Fan-out 4–8 subagents per tick — requires /goal', color: 'magenta' },\r\n];\r\n\r\nexport function AutonomyPicker({ options, selected, hint }: AutonomyPickerProps): React.ReactElement {\r\n return (\r\n <Box flexDirection=\"column\" paddingX={1}>\r\n <Text color=\"cyan\" bold>\r\n ━━ Autonomy Mode ━━\r\n </Text>\r\n <Text dimColor>↑/↓ navigate · Enter select · Esc cancel · Ctrl+C exit</Text>\r\n {options.map((opt, i) => (\r\n <Text key={opt.mode} color={i === selected ? opt.color : undefined} inverse={i === selected}>\r\n {i === selected ? '› ' : ' '}\r\n <Text bold>{opt.label.padEnd(12)}</Text>\r\n <Text dimColor>{opt.description}</Text>\r\n </Text>\r\n ))}\r\n {hint ? <Text color=\"yellow\">{hint}</Text> : null}\r\n </Box>\r\n );\r\n}","import { Box, Text } from 'ink';\nimport type React from 'react';\n\nexport interface ProviderOption {\n id: string;\n family: string;\n /** Model ids the picker offers in step 2 for this provider. */\n models: string[];\n /** Optional dim hint shown next to the model list (e.g. \"from saved config\"). */\n modelsLabel?: string;\n}\n\nexport interface ModelPickerProps {\n step: 'provider' | 'model';\n providerOptions: ProviderOption[];\n modelOptions: string[];\n selected: number;\n pickedProviderId?: string;\n /** Status hint (e.g. error from a failed switch attempt) shown at the bottom. */\n hint?: string;\n}\n\n/**\n * Two-step Ink overlay for the TUI's `/model` command.\n * Step 1: pick a provider that has a key.\n * Step 2: pick a model bound to that provider.\n *\n * Driven entirely by props — App owns the cursor state and key events.\n * Render is intentionally compact; the host frames it in a single Box.\n */\nexport function ModelPicker({\n step,\n providerOptions,\n modelOptions,\n selected,\n pickedProviderId,\n hint,\n}: ModelPickerProps): React.ReactElement {\n if (step === 'provider') {\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text color=\"cyan\" bold>\n ━━ Switch model — Step 1/2: Pick provider ━━\n </Text>\n <Text dimColor>↑/↓ navigate · Enter select · Esc cancel · Ctrl+C exit</Text>\n {providerOptions.length === 0 ? (\n <Text dimColor>(no providers with keys — add one via `wstack auth`)</Text>\n ) : (\n providerOptions.map((p, i) => (\n <Text key={p.id} color={i === selected ? 'cyan' : undefined} inverse={i === selected}>\n {i === selected ? '› ' : ' '}\n <Text bold>{p.id.padEnd(28)}</Text>\n <Text dimColor> [{p.family}]</Text>\n <Text dimColor>\n {' '}\n {p.models.length} model{p.models.length === 1 ? '' : 's'}\n </Text>\n </Text>\n ))\n )}\n {hint ? <Text color=\"yellow\">{hint}</Text> : null}\n </Box>\n );\n }\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text color=\"cyan\" bold>\n ━━ Switch model — Step 2/2: Pick model ({pickedProviderId}) ━━\n </Text>\n <Text dimColor>↑/↓ navigate · Enter select · Esc back · Ctrl+C exit</Text>\n {modelOptions.length === 0 ? (\n <Text dimColor>(no models known for this provider)</Text>\n ) : (\n modelOptions.map((id, i) => (\n <Text key={id} color={i === selected ? 'cyan' : undefined} inverse={i === selected}>\n {i === selected ? '› ' : ' '}\n {id}\n </Text>\n ))\n )}\n {hint ? <Text color=\"yellow\">{hint}</Text> : null}\n </Box>\n );\n}\n","import { Box, Text } from 'ink';\nimport type React from 'react';\nimport type { SlashCommandMatch } from '../app.js';\n\nexport interface SlashMenuProps {\n query: string;\n matches: SlashCommandMatch[];\n selected: number;\n}\n\nexport function SlashMenu({ query, matches, selected }: SlashMenuProps): React.ReactElement {\n const placeholder = query ? `/${query}` : '/';\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Text dimColor>\n {placeholder || '/'} — ↑/↓ select, Enter dispatch, Tab autocomplete, Esc close\n </Text>\n {matches.map((m, i) => (\n <Text key={m.name} color={i === selected ? 'cyan' : undefined} inverse={i === selected}>\n {i === selected ? '› ' : ' '}\n <Text bold>{m.name}</Text>\n {m.argsHint ? <Text dimColor> {m.argsHint}</Text> : null}\n <Text dimColor> — {m.description}</Text>\n </Text>\n ))}\n {matches.length === 0 && <Text dimColor>No matching commands</Text>}\n </Box>\n );\n}\n","import type { Dirent } from 'node:fs';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\n\nconst IGNORED_DIRS = new Set([\n 'node_modules',\n '.git',\n 'dist',\n 'build',\n '.next',\n '.turbo',\n '.cache',\n 'coverage',\n '.idea',\n '.vscode',\n]);\n\nconst MAX_FILES_INDEXED = 5000;\nconst MAX_DEPTH = 8;\n\nlet cache: { root: string; files: string[]; loadedAt: number } | null = null;\nconst CACHE_TTL_MS = 30_000;\n\nasync function loadIndex(root: string): Promise<string[]> {\n const now = Date.now();\n if (cache && cache.root === root && now - cache.loadedAt < CACHE_TTL_MS) {\n return cache.files;\n }\n const files: string[] = [];\n await walk(root, '', 0, files);\n files.sort();\n cache = { root, files, loadedAt: now };\n return files;\n}\n\nasync function walk(root: string, rel: string, depth: number, out: string[]): Promise<void> {\n if (out.length >= MAX_FILES_INDEXED) return;\n if (depth > MAX_DEPTH) return;\n const dir = rel ? path.join(root, rel) : root;\n let entries: Dirent[];\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const e of entries) {\n if (out.length >= MAX_FILES_INDEXED) return;\n if (e.name.startsWith('.') && e.name !== '.env.example') continue;\n if (IGNORED_DIRS.has(e.name)) continue;\n const next = rel ? `${rel}/${e.name}` : e.name;\n if (e.isDirectory()) {\n await walk(root, next, depth + 1, out);\n } else if (e.isFile()) {\n out.push(next);\n }\n }\n}\n\n/**\n * Subsequence (fuzzy) match — each character of `query` must appear in `s`\n * in order. Lower scores rank earlier. Score combines:\n * - shorter match span (chars close together = better)\n * - earlier first-match offset\n * - shorter total path length\n */\nfunction score(s: string, query: string): number | null {\n if (!query) return s.length;\n const ql = query.toLowerCase();\n const sl = s.toLowerCase();\n let si = 0;\n let firstHit = -1;\n let lastHit = -1;\n for (let qi = 0; qi < ql.length; qi++) {\n const c = ql.charCodeAt(qi);\n while (si < sl.length && sl.charCodeAt(si) !== c) si++;\n if (si >= sl.length) return null;\n if (firstHit < 0) firstHit = si;\n lastHit = si;\n si++;\n }\n const span = lastHit - firstHit;\n return span * 100 + firstHit * 2 + s.length;\n}\n\nexport async function searchFiles(root: string, query: string, limit = 8): Promise<string[]> {\n const all = await loadIndex(root);\n if (!query) return all.slice(0, limit);\n const scored: { path: string; score: number }[] = [];\n for (const f of all) {\n const sc = score(f, query);\n if (sc !== null) scored.push({ path: f, score: sc });\n }\n scored.sort((a, b) => a.score - b.score);\n return scored.slice(0, limit).map((x) => x.path);\n}\n\nexport function invalidateFileCache(): void {\n cache = null;\n}\n","// Bracketed-paste accumulation, factored out of the TUI key handler so the\n// (fiddly) marker logic can be unit-tested in isolation.\n//\n// A terminal in bracketed-paste mode wraps pasted text as\n// `\\x1b[200~<content>\\x1b[201~`. The OS/terminal can split that across\n// several stdin reads, and Ink's keypress parser sometimes strips the ESC\n// byte — leaving a bare `[200~` / `[201~`. So we:\n// - detect both the ESC-prefixed and bare marker forms,\n// - buffer fragments across calls until the closing marker arrives,\n// - hand back the fully-assembled payload exactly once.\n\nconst BEGIN = '[200~';\nconst END = '[201~';\n// biome-ignore lint/suspicious/noControlCharactersInRegex: paste markers carry a literal ESC\nconst BEGIN_RE = /\\x1b?\\[200~/g;\n// biome-ignore lint/suspicious/noControlCharactersInRegex: paste markers carry a literal ESC\nconst END_RE = /\\x1b?\\[201~/g;\n// Partial ANSI CSI without the ESC prefix — Ink strips ESC from sequences\n// like \\x1b[0m, leaving [0m which would otherwise appear as literal text.\nconst PARTIAL_ANSI_RE = /^\\[[\\x30-\\x3f]*[\\x20-\\x2f]*[\\x40-\\x7e]/;\nconst ANSI_RE = new RegExp(\n [\n // CSI: ESC [ params* intermediates* final\n // params 0x30-0x3f (digits, ; : < = > ?)\n // intermediates 0x20-0x2f (space … /)\n // final 0x40-0x7e (@ … ~)\n '\\\\x1b\\\\[[\\\\x30-\\\\x3f]*[\\\\x20-\\\\x2f]*[\\\\x40-\\\\x7e]',\n // OSC: ESC ] … BEL (\\x07) or ST (\\x1b\\\\)\n '\\\\x1b\\\\][^\\\\x07\\\\x1b]*(?:\\\\x07|\\\\x1b\\\\\\\\)',\n // DCS: ESC P … ST (\\x1b\\\\)\n '\\\\x1bP[^\\\\x1b]*(?:\\\\x1b\\\\\\\\)',\n // SOS / PM: ESC X / ESC ^\n '\\\\x1b[XP][^\\\\x1b]*(?:\\\\x1b\\\\\\\\)',\n // Standalone ESC — guard only\n '\\\\x1b',\n ].join('|'),\n 'g',\n);\n\nexport interface PasteFeedResult {\n /** New accumulator state: a string while mid-paste, `null` when idle. */\n accum: string | null;\n /**\n * The fully-assembled paste payload when an end marker closed it, else\n * `null` (still buffering).\n */\n complete: string | null;\n}\n\n/**\n * Feed one keypress fragment into the paste accumulator.\n *\n * @param accum current accumulator (`null` when not inside a paste)\n * @param input the raw keypress string for this event\n * @returns `null` when `input` is not part of a paste (the caller should\n * handle it as normal input); otherwise the updated accumulation state.\n */\nexport function feedPaste(accum: string | null, input: string): PasteFeedResult | null {\n if (accum === null && !input.includes(BEGIN)) {\n // If input starts with '[' but is not a paste marker, it may be a partial\n // ANSI CSI sequence whose ESC was stripped by Ink. Guard against it\n // appearing as literal text in the input buffer.\n if (input.startsWith('[') && !input.startsWith(BEGIN) && !input.startsWith(END)) {\n // Treat partial ANSI sequences (ESC stripped) as mid-paste content\n // so [0m doesn't leak into the buffer as literal text.\n if (PARTIAL_ANSI_RE.test(input)) {\n return { accum: '', complete: null };\n }\n // Bare '[' is not a paste marker and not a known partial ANSI\n // sequence — let it through as ordinary input.\n return null;\n }\n return null;\n }\n // Strip paste markers AND all ANSI sequences before accumulating.\n const piece = input.replace(BEGIN_RE, '').replace(END_RE, '').replace(ANSI_RE, '');\n const next = (accum ?? '') + piece;\n if (input.includes(END)) return { accum: null, complete: next };\n return { accum: next, complete: null };\n}\n","import { spawn } from 'node:child_process';\nimport { buildChildEnv } from '@wrongstack/core';\n\nexport interface GitInfo {\n branch: string;\n /** Total lines added in working tree vs HEAD (staged + unstaged). */\n added: number;\n /** Total lines deleted in working tree vs HEAD (staged + unstaged). */\n deleted: number;\n /** Count of untracked files in the working tree. */\n untracked: number;\n}\n\n/**\n * Read git branch + change summary for the given cwd. Returns `null`\n * when the directory isn't a git repository or git isn't installed —\n * the status bar just hides the git chip in that case.\n *\n * Spawns two short-lived `git` processes in parallel. Cheap enough to\n * call on a 3–5 second interval; the caller is responsible for the\n * cadence (this function is purely fire-and-result).\n */\nexport async function readGitInfo(cwd: string): Promise<GitInfo | null> {\n const [branchRes, numstatRes, statusRes] = await Promise.all([\n runGit(cwd, ['branch', '--show-current']),\n runGit(cwd, ['diff', 'HEAD', '--numstat']),\n runGit(cwd, ['status', '--porcelain']),\n ]);\n\n // If any of the three failed with a non-zero exit OR git wasn't\n // found, we're not in a repo (or git is missing) — bail entirely.\n if (!branchRes.ok || !numstatRes.ok || !statusRes.ok) return null;\n\n const branch = branchRes.stdout.trim();\n // Detached HEAD: `branch --show-current` returns empty. Render the\n // short SHA instead so the chip isn't blank.\n const branchLabel = branch || (await detachedShortSha(cwd)) || 'detached';\n\n let added = 0;\n let deleted = 0;\n for (const line of numstatRes.stdout.split('\\n')) {\n if (!line) continue;\n const [a, d] = line.split('\\t');\n // Binary files report '-' for both columns — skip them.\n if (a && a !== '-') added += Number.parseInt(a, 10) || 0;\n if (d && d !== '-') deleted += Number.parseInt(d, 10) || 0;\n }\n\n let untracked = 0;\n for (const line of statusRes.stdout.split('\\n')) {\n if (line.startsWith('?? ')) untracked++;\n }\n\n return { branch: branchLabel, added, deleted, untracked };\n}\n\nasync function detachedShortSha(cwd: string): Promise<string | null> {\n const res = await runGit(cwd, ['rev-parse', '--short', 'HEAD']);\n return res.ok ? res.stdout.trim() : null;\n}\n\ninterface GitResult {\n ok: boolean;\n stdout: string;\n}\n\nfunction runGit(cwd: string, args: string[]): Promise<GitResult> {\n return new Promise((resolve) => {\n let stdout = '';\n try {\n const child = spawn('git', args, {\n cwd,\n env: buildChildEnv(),\n // Inherit stderr (silent) — we don't care about git's noise.\n stdio: ['ignore', 'pipe', 'ignore'],\n // Don't let a slow git hang the TUI.\n timeout: 3000,\n windowsHide: true,\n });\n child.stdout.setEncoding('utf8');\n child.stdout.on('data', (chunk: string) => {\n stdout += chunk;\n });\n child.on('error', () => resolve({ ok: false, stdout: '' }));\n child.on('close', (code) => {\n resolve({ ok: code === 0, stdout });\n });\n } catch {\n resolve({ ok: false, stdout: '' });\n }\n });\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { QueueItem } from './app.js';\n\n/**\n * Dependencies the `/queue` command needs from the App. The TUI registers\n * the command at mount time with closures over `getQueue` (reads the latest\n * queue snapshot via a ref) and the three mutators. The command returns\n * its output as `{ message }` which the App pipes into history as `info`.\n */\nexport interface QueueSlashDeps {\n getQueue: () => QueueItem[];\n clear: () => void;\n deleteAt: (positions: number[]) => void;\n}\n\nconst USAGE =\n 'Usage:\\n' +\n ' /queue — list pending messages\\n' +\n ' /queue list — same as /queue\\n' +\n ' /queue clear — drop all pending messages\\n' +\n ' /queue delete N M… — drop messages at 1-based positions';\n\nexport function createQueueSlashCommand(deps: QueueSlashDeps): SlashCommand {\n return {\n name: 'queue',\n description: 'List, clear, or delete pending messages typed while the agent was running.',\n async run(args) {\n const out = handleQueueCommand(args, deps);\n return { message: out };\n },\n };\n}\n\n/**\n * Pure logic for the /queue command. Exported separately so tests can\n * drive it without spinning up Ink.\n */\nexport function handleQueueCommand(args: string, deps: QueueSlashDeps): string {\n const trimmed = args.trim();\n const [sub, ...rest] = trimmed.split(/\\s+/);\n const subcommand = sub?.toLowerCase() ?? '';\n\n if (subcommand === '' || subcommand === 'list') {\n return renderList(deps.getQueue());\n }\n\n if (subcommand === 'clear') {\n const before = deps.getQueue().length;\n if (before === 0) return 'Queue is already empty.';\n deps.clear();\n return `Cleared ${before} queued message${before === 1 ? '' : 's'}.`;\n }\n\n if (subcommand === 'delete' || subcommand === 'del' || subcommand === 'rm') {\n if (rest.length === 0) return 'Usage: /queue delete <position> [<position>…]';\n const queue = deps.getQueue();\n if (queue.length === 0) return 'Queue is empty — nothing to delete.';\n const parsed: number[] = [];\n const invalid: string[] = [];\n const outOfRange: number[] = [];\n for (const tok of rest) {\n if (!/^\\d+$/.test(tok)) {\n invalid.push(tok);\n continue;\n }\n const n = Number.parseInt(tok, 10);\n if (n < 1 || n > queue.length) {\n outOfRange.push(n);\n continue;\n }\n parsed.push(n);\n }\n const uniqueValid = [...new Set(parsed)];\n if (uniqueValid.length === 0) {\n const parts = ['No valid positions to delete.'];\n if (invalid.length > 0) parts.push(`Invalid: ${invalid.join(', ')}.`);\n if (outOfRange.length > 0)\n parts.push(`Out of range (queue has ${queue.length}): ${outOfRange.join(', ')}.`);\n return parts.join(' ');\n }\n deps.deleteAt(uniqueValid);\n const parts = [\n `Deleted ${uniqueValid.length} of ${queue.length} (positions ${uniqueValid.sort((a, b) => a - b).join(', ')}).`,\n ];\n if (invalid.length > 0) parts.push(`Ignored invalid: ${invalid.join(', ')}.`);\n if (outOfRange.length > 0) parts.push(`Ignored out of range: ${outOfRange.join(', ')}.`);\n return parts.join(' ');\n }\n\n return `Unknown subcommand \"${sub}\".\\n${USAGE}`;\n}\n\nfunction renderList(queue: QueueItem[]): string {\n if (queue.length === 0) return 'Queue is empty.';\n const lines = [`Queue (${queue.length}):`];\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n if (!item) continue;\n const preview = oneLine(item.displayText, 100);\n lines.push(` ${i + 1}. ${preview}`);\n }\n return lines.join('\\n');\n}\n\nfunction oneLine(s: string, max: number): string {\n const collapsed = s.replace(/\\s+/g, ' ').trim();\n return collapsed.length <= max ? collapsed : `${collapsed.slice(0, max - 1)}…`;\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport { getProcessRegistry } from '@wrongstack/tools';\n\nconst USAGE =\n 'Usage:\\n' +\n ' /kill — list active processes + breaker state\\n' +\n ' /kill list — same as /kill\\n' +\n ' /kill all — kill all tracked processes (SIGTERM → SIGKILL)\\n' +\n ' /kill force — kill all with SIGKILL immediately\\n' +\n ' /kill reset — reset the circuit breaker to closed\\n' +\n ' /kill <pid> — kill a specific process by PID';\n\nexport function createKillSlashCommand(): SlashCommand {\n return {\n name: 'kill',\n description: 'List or kill active bash/exec processes managed by the process registry.',\n async run(args) {\n const trimmed = args.trim();\n const parts = trimmed.split(/\\s+/);\n const sub = parts[0]?.toLowerCase() ?? '';\n\n if (sub === '' || sub === 'list') {\n return { message: renderList() };\n }\n\n if (sub === 'all') {\n const pids = getProcessRegistry().killAll();\n if (pids.length === 0) return { message: 'No processes to kill.' };\n return { message: `Killed ${pids.length} process${pids.length === 1 ? '' : 'es'}: ${pids.join(', ')}` };\n }\n\n if (sub === 'force') {\n getProcessRegistry().forceBreakerOpen();\n const pids = getProcessRegistry().killAll({ force: true });\n if (pids.length === 0) return { message: 'Circuit breaker forced open. No processes to kill.' };\n return { message: `Force-killed ${pids.length} process${pids.length === 1 ? '' : 'es'}: ${pids.join(', ')}` };\n }\n\n if (sub === 'reset') {\n getProcessRegistry().forceBreakerReset();\n return { message: 'Circuit breaker reset to closed. Bash/exec calls allowed.' };\n }\n\n const pid = Number.parseInt(sub, 10);\n if (!Number.isNaN(pid) && pid > 0) {\n const found = getProcessRegistry().kill(pid);\n if (found) return { message: `Killed process ${pid}.` };\n return { message: `Process ${pid} not found in registry.` };\n }\n\n return { message: `Unknown subcommand \"${sub}\".\\n${USAGE}` };\n },\n };\n}\n\nfunction renderList(): string {\n const registry = getProcessRegistry();\n const stats = registry.stats();\n const all = registry.list();\n\n const breaker = stats.breaker;\n const stateLabel =\n breaker.state === 'closed'\n ? '🟢 closed'\n : breaker.state === 'half-open'\n ? '🟡 half-open'\n : `🔴 open (cooldown ${breaker.cooldownRemainingMs !== null ? `${(breaker.cooldownRemainingMs / 1000).toFixed(0)}s` : '—'})`;\n\n const breakerLine = [\n ` Circuit breaker: ${stateLabel}`,\n ` consecutive failures: ${breaker.consecutiveFailures}/5`,\n ` slow calls in window: ${breaker.slowCallsInWindow}/3`,\n ` calls in window: ${breaker.callsInWindow}/30`,\n ].join('\\n');\n\n if (all.length === 0) {\n return `No active processes.\\n\\n${breakerLine}`;\n }\n\n const now = Date.now();\n const lines: string[] = [`Active processes (${all.length}):`];\n for (const p of all) {\n const age = ((now - p.startedAt) / 1000).toFixed(1);\n const killedTag = p.killed ? ' [killed]' : '';\n const cmd = p.command.length > 80 ? p.command.slice(0, 77) + '…' : p.command;\n lines.push(` ${p.pid} ${p.name} ${age}s ${cmd}${killedTag}`);\n }\n return [...lines, '', breakerLine].join('\\n');\n}","import type { SlashCommand } from '@wrongstack/core';\nimport { getProcessRegistry } from '@wrongstack/tools';\n\n/**\n * `/ps` — pure process list, no side effects.\n * `/kill` handles listing AND killing.\n */\nexport function createPsSlashCommand(): SlashCommand {\n return {\n name: 'ps',\n description: 'List all active bash/exec processes tracked by the process registry.',\n async run(_args) {\n return { message: renderList() };\n },\n };\n}\n\nfunction renderList(): string {\n const registry = getProcessRegistry();\n const stats = registry.stats();\n const all = registry.list();\n if (all.length === 0) return 'No active processes.';\n\n const breaker = stats.breaker;\n const stateLabel =\n breaker.state === 'closed'\n ? '🟢 closed'\n : breaker.state === 'half-open'\n ? '🟡 half-open'\n : `🔴 open`;\n\n const now = Date.now();\n const lines: string[] = [\n `Active processes (${all.length}) — breaker ${stateLabel}`,\n ` failure=${breaker.consecutiveFailures}/5 slow=${breaker.slowCallsInWindow}/3 rate=${breaker.callsInWindow}/30`,\n '',\n ];\n for (const p of all) {\n const age = ((now - p.startedAt) / 1000).toFixed(1);\n const killedTag = p.killed ? ' [killed]' : '';\n const cmd = p.command.length > 80 ? p.command.slice(0, 77) + '…' : p.command;\n lines.push(` ${p.pid} ${p.name} ${age}s ${cmd}${killedTag}`);\n }\n return lines.join('\\n');\n}","import * as fs from 'node:fs/promises';\r\nimport * as path from 'node:path';\r\nimport type {\r\n Agent,\r\n AttachmentStore,\r\n ContentBlock,\r\n Director,\r\n EventBus,\r\n FleetEvent,\r\n QueueStore,\r\n SlashCommandRegistry,\r\n TokenCounter,\r\n} from '@wrongstack/core';\r\nimport { DefaultSessionRewinder } from '@wrongstack/core';\r\nimport { InputBuilder, buildGoalPreamble, formatTodosList } from '@wrongstack/core';\r\nimport { type VisionAdapters, routeImagesForModel } from '@wrongstack/runtime/vision';\r\nimport { getProcessRegistry } from '@wrongstack/tools';\r\nimport { Box, useApp } from 'ink';\r\nimport React, { useEffect, useMemo, useReducer, useRef, useState } from 'react';\r\nimport { readClipboardImage } from './clipboard.js';\r\nimport { ConfirmPrompt } from './components/confirm-prompt.js';\r\nimport { CheckpointTimeline } from './components/checkpoint-timeline.js';\r\nimport { FilePicker } from './components/file-picker.js';\r\nimport { FleetPanel } from './components/fleet-panel.js';\r\nimport { FleetMonitor } from './components/fleet-monitor.js';\r\nimport { AgentsMonitor } from './components/agents-monitor.js';\r\nimport { PhaseMonitor } from './components/phase-monitor.js';\r\nimport { PhasePanel } from './components/phase-panel.js';\r\nimport { WorktreePanel, type WorktreeRow } from './components/worktree-panel.js';\r\nimport { WorktreeMonitor } from './components/worktree-monitor.js';\r\nimport { History, type HistoryEntry } from './components/history.js';\r\nimport { Input, type KeyEvent } from './components/input.js';\r\nimport { LiveActivityStrip } from './components/live-activity-strip.js';\r\nimport { AutonomyPicker, AUTONOMY_OPTIONS, type AutonomyOption } from './components/autonomy-picker.js';\r\nimport { ModelPicker, type ProviderOption } from './components/model-picker.js';\r\nimport { SlashMenu } from './components/slash-menu.js';\r\nimport { StatusBar } from './components/status-bar.js';\r\nimport { searchFiles } from './file-search.js';\r\nimport { feedPaste } from './paste-accumulator.js';\r\nimport { type GitInfo, readGitInfo } from './git-info.js';\r\nimport { createQueueSlashCommand } from './queue-slash.js';\r\nimport { createKillSlashCommand } from './kill-slash.js';\r\nimport { createPsSlashCommand } from './ps-slash.js';\r\n\r\nexport interface QueueItem {\r\n id: number;\r\n displayText: string;\r\n blocks: ContentBlock[];\r\n}\r\n\r\n/** Per-subagent state tracked live from the FleetBus. */\r\nexport interface FleetEntry {\r\n id: string;\r\n name: string;\r\n provider?: string;\r\n model?: string;\r\n status: 'idle' | 'running' | 'success' | 'failed' | 'timeout' | 'stopped';\r\n streamingText: string;\r\n iterations: number;\r\n toolCalls: number;\r\n recentTools: Array<{\r\n name: string;\r\n ok?: boolean;\r\n durationMs?: number;\r\n outputBytes?: number;\r\n outputLines?: number;\r\n at: number;\r\n }>;\r\n recentMessages: Array<{ text: string; at: number }>;\r\n cost: number;\r\n startedAt: number;\r\n lastEventAt: number;\r\n /**\r\n * Tool the subagent is currently inside, set on `tool.started` and\r\n * cleared on `tool.executed`. Lets the FleetPanel render \"running →\r\n * bash\" instead of an opaque \"running\". Undefined when no tool is\r\n * mid-flight (between iterations, before the first tool, or after\r\n * the last tool of a run).\r\n */\r\n currentTool?: { name: string; startedAt: number };\r\n /**\r\n * Absolute path to the per-subagent JSONL transcript on disk, when\r\n * one was created. Surfaced so the FleetPanel can render `path:`\r\n * dim under the entry — users grep / tail the file for full\r\n * visibility into the subagent's run.\r\n */\r\n transcriptPath?: string;\r\n /**\r\n * Most recent budget warning: subagent hit a soft limit and the\r\n * coordinator is auto-extending. Rendered in FleetPanel as:\r\n * \"⚡ hitting tool_calls limit (350/400) — extending\"\r\n * Cleared on the next fleetDone or fleetStart.\r\n */\r\n budgetWarning?: { kind: string; used: number; limit: number; at: number };\r\n /**\r\n * Cumulative auto-extension grants for this subagent. Surfaced as a\r\n * persistent \"⚡×N\" badge in the monitor and 4th status line so the user\r\n * can see how often never-die kept the agent alive. Survives across tasks\r\n * within the same subagent entry (unlike `budgetWarning`, which clears).\r\n */\r\n extensions?: number;\r\n /**\r\n * Latest context window fill percentage (0–1, can exceed 1 when over budget).\r\n * Emitted on every `iteration.completed` via `ctx.pct` event.\r\n * Rendered as a colored progress bar in the AgentsMonitor.\r\n */\r\n ctxPct?: number;\r\n /** Estimated total tokens in the context window (from ctx.pct event). */\r\n ctxTokens?: number;\r\n /** Provider's max context window in tokens (from ctx.pct event). */\r\n ctxMaxTokens?: number;\r\n}\r\n\r\n/** A registered slash command matched against the user's current / query. */\r\nexport interface SlashCommandMatch {\r\n name: string;\r\n description: string;\r\n argsHint?: string;\r\n isBuiltin: boolean;\r\n}\r\n\r\nexport function selectedSlashCommandLine(picker: {\r\n open: boolean;\r\n matches: SlashCommandMatch[];\r\n selected: number;\r\n}): string | null {\r\n if (!picker.open || picker.matches.length === 0) return null;\r\n const picked = picker.matches[picker.selected];\r\n return picked ? `/${picked.name}` : null;\r\n}\r\n\r\nexport interface AppProps {\r\n agent: Agent;\r\n slashRegistry: SlashCommandRegistry;\r\n attachments: AttachmentStore;\r\n events: EventBus;\r\n tokenCounter?: TokenCounter;\r\n visionAdapters?: VisionAdapters;\r\n /** Resolve current model vision support. Falls back to provider capability when omitted. */\r\n supportsVision?: () => boolean | Promise<boolean>;\r\n model: string;\r\n banner?: boolean;\r\n /** Persists the queue across crashes; rehydrated on mount, written on every mutation. */\r\n queueStore?: QueueStore;\r\n /** Reflects the policy's --yolo flag for the status bar's \"⚠ YOLO\" chip. */\r\n yolo?: boolean;\r\n /**\r\n * Query the live YOLO state from the permission policy. Called after\r\n * every slash-command dispatch so `/yolo off` (which mutates the\r\n * policy inside the CLI) is immediately reflected in the status bar.\r\n * Mirrors the `agent.ctx.model` → `setLiveModel` pattern used for\r\n * provider/model sync.\r\n */\r\n getYolo?: () => boolean;\r\n /** Query the live autonomy mode. */\r\n getAutonomy?: () => 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';\r\n /**\r\n * Access the eternal-autonomy engine. When autonomy mode goes to\r\n * 'eternal' the TUI drives `runOneIteration()` from a post-slash hook\r\n * so the engine and TUI never race for the shared Context.\r\n */\r\n getEternalEngine?: () => import('@wrongstack/core').EternalAutonomyEngine | null;\r\n /**\r\n * Access the parallel-eternal engine. When autonomy mode goes to\r\n * 'eternal-parallel' the TUI drives `runOneIteration()` from a post-slash\r\n * hook so the engine and TUI never race for the shared Context.\r\n */\r\n getParallelEngine?: () => import('@wrongstack/core').ParallelEternalEngine | null;\r\n /**\r\n * Subscribe to live per-iteration events from the eternal engine. The\r\n * TUI installs this on mount to render each iteration as a timeline\r\n * entry the moment it lands — strictly more responsive than reading\r\n * goal.json after the fact.\r\n */\r\n subscribeEternalIteration?: (\r\n fn: (entry: import('@wrongstack/core').JournalEntry) => void,\r\n ) => () => void;\r\n /**\r\n * Subscribe to per-iteration stage transitions from the eternal engine.\r\n * Drives `state.eternalStage` used by the status bar to show the\r\n * engine's current location (decide → execute → reflect → sleep/paused).\r\n */\r\n subscribeEternalStage?: (\r\n fn: (stage: {\r\n phase: 'idle';\r\n } | {\r\n phase: 'decide';\r\n reason: string;\r\n } | {\r\n phase: 'execute';\r\n task: string;\r\n } | {\r\n phase: 'reflect';\r\n status: 'success' | 'failure' | 'aborted' | 'skipped';\r\n note?: string;\r\n } | {\r\n phase: 'sleep';\r\n ms: number;\r\n } | {\r\n phase: 'paused';\r\n } | {\r\n phase: 'stopped';\r\n } | {\r\n phase: 'error';\r\n message: string;\r\n }) => void,\r\n ) => () => void;\r\n /**\r\n * Subscribe to AutoPhase phase/task events from the PhaseOrchestrator.\r\n * Drives `state.autoPhase` used by the PhaseMonitor component.\r\n * Handlers receive the event name and payload from PhaseEventMap.\r\n */\r\n subscribeAutoPhase?: (\r\n handler: (event: string, payload: unknown) => void,\r\n ) => () => void;\r\n /**\r\n * Read the persisted autonomy settings (defaultMode, autoProceedDelayMs).\r\n * Used by the SettingsPicker in the TUI on mount and after Ctrl+S toggle.\r\n */\r\n getSettings?: () => { mode: 'off' | 'suggest' | 'auto'; delayMs: number };\r\n /**\r\n * Persist autonomy settings changes. Returns null on success, or an\r\n * error string on failure (so the TUI can display it as a hint).\r\n */\r\n saveSettings?: (s: { mode: 'off' | 'suggest' | 'auto'; delayMs: number }) => string | null | Promise<string | null>;\r\n /**\r\n * SDD session context getter. When an SDD session is active, returns\r\n * the AI prompt context to inject into user messages so the model\r\n * knows it's in a spec-building conversation.\r\n */\r\n getSDDContext?: () => string | null;\r\n /**\r\n * Process AI output for SDD auto-detection (spec, tasks, plan).\r\n * Called after every agent.run() completes. Returns displayable\r\n * status messages (e.g. \"✓ Spec detected and saved!\").\r\n */\r\n onSDDOutput?: (output: string) => Promise<string[]>;\r\n /** Surfaced in the startup banner. Falls back to \"dev\" when omitted. */\r\n appVersion?: string;\r\n /** Provider id shown in the banner (\"openai\", \"anthropic\", …). Defaults to \"agent\". */\r\n provider?: string;\r\n /** Wire family for the configured provider — rendered under provider in the banner. */\r\n family?: string;\r\n /** Last 3 chars of the active API key, shown in the banner for \"did I pick the right key?\" verification. */\r\n keyTail?: string;\r\n /**\r\n * Snapshot the keyed providers (and their model lists) for the\r\n * `/model` picker. Called every time the picker opens, so the result\r\n * stays in sync with config edits / new aliases. Async because the\r\n * host may need to load the models.dev catalog.\r\n */\r\n getPickableProviders?: () => Promise<ProviderOption[]>;\r\n /**\r\n * Apply a (provider, model) pair after the picker confirms. Returns\r\n * an error message on failure; null on success. The host owns the\r\n * actual Provider construction + Context mutation.\r\n */\r\n switchProviderAndModel?: (providerId: string, modelId: string) => string | null;\r\n /**\r\n * Apply an autonomy mode after the picker confirms. Returns\r\n * an error string on failure; null on success.\r\n */\r\n switchAutonomy?: (mode: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel') => string | null;\r\n /**\r\n * Real max-context token budget for the *active model*, resolved by the\r\n * CLI via the ModelsRegistry. The provider object only knows its family\r\n * default (e.g. anthropic = 200k) which is wrong for variants like the\r\n * 1M-context Opus model. The status bar's context chip uses this when\r\n * provided and falls back to the provider baseline otherwise.\r\n */\r\n effectiveMaxContext?: number;\r\n /** Absolute project root for goal.json loading. */\r\n projectRoot?: string;\r\n onExit: (code: number) => void;\r\n /** Called when /clear is dispatched — the TUI should wipe its history entries (but keep the banner). */\r\n onClearHistory?: (\r\n dispatch: React.Dispatch<{ type: 'clearHistory' } | { type: 'resetContextChip' }>,\r\n ) => void;\r\n\r\n /**\r\n * Goal text passed from `--goal \"...\"` on the command line. When set,\r\n * the App mounts, renders the banner, then automatically dispatches\r\n * a synthetic `/goal <text>` so the user lands in goal mode without\r\n * having to type the slash command. Mutually advisory with `initialSteer`\r\n * — `initialGoal` wins if both are present.\r\n */\r\n initialGoal?: string;\r\n /**\r\n * Initial user message passed from `--ask \"...\"` on the command line.\r\n * Submitted verbatim as the first turn (no preamble) so users can\r\n * launch the TUI and pre-populate one turn from a shell alias / script.\r\n */\r\n initialAsk?: string;\r\n /** Directory for session JSONL files. Passed to App for /rewind. */\r\n sessionsDir?: string;\r\n\r\n // --- Fleet ---\r\n /** Live director for fleet panel rendering. Null when director mode is off. */\r\n director: Director | null;\r\n /** Optional roster for human-readable subagent names. */\r\n fleetRoster?: Record<string, { name: string }>;\r\n /**\r\n * Shared controller for the `/fleet stream on|off` slash command. The\r\n * App installs a dispatch-backed setter on mount so the slash command\r\n * can flip the reducer's `streamFleet` flag from the CLI surface.\r\n */\r\n fleetStreamController?: {\r\n enabled: boolean;\r\n setEnabled: (enabled: boolean) => void;\r\n };\r\n /**\r\n * Controller for status bar hidden items. App installs a dispatch-backed\r\n * setter on mount so the /statusline slash command can update the TUI's\r\n * visible bar without a round-trip. The initial value is loaded from\r\n * the config file before App mounts.\r\n */\r\n statuslineHiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\r\n setStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\r\n /**\r\n * Controller for the agents monitor overlay. App installs a dispatch-backed\r\n * setter on mount so the `/agents on|off` slash command can toggle the\r\n * overlay without a round-trip.\r\n */\r\n agentsMonitorController?: {\r\n visible: boolean;\r\n setVisible: (visible: boolean) => void;\r\n };\r\n}\r\n\r\ntype DraftEntry = HistoryEntry extends infer T\r\n ? T extends { id: number }\r\n ? Omit<T, 'id'>\r\n : never\r\n : never;\r\n\r\ntype GoalSummary = {\r\n goal: string;\r\n goalState: 'active' | 'paused' | 'completed' | 'abandoned';\r\n iterations: number;\r\n lastTask?: string;\r\n lastStatus?: string;\r\n} | null;\r\n\r\ntype State = {\r\n entries: HistoryEntry[];\r\n buffer: string;\r\n cursor: number;\r\n placeholders: string[];\r\n /** Parallel array to `placeholders` — stores the actual pasted content for history rendering. */\r\n placeholderContents: string[];\r\n streamingText: string;\r\n /**\r\n * Live tail of the currently streaming tool's stdout/progress text. Mirrors\r\n * the assistant `streamingText` pattern but is keyed by tool_use id so the\r\n * tail is cleared automatically when that tool finishes. Only one tool's\r\n * stream is shown at a time — multi-tool streaming is rare and stacking\r\n * tails fights for the same screen space.\r\n */\r\n toolStream: { toolUseId: string; name: string; text: string; startedAt: number } | null;\r\n status: 'idle' | 'running' | 'streaming' | 'aborting';\r\n interrupts: number;\r\n /**\r\n * Set when the user pressed Esc mid-iteration to interrupt the agent.\r\n * The NEXT submitted user message gets a STEERING prefix block prepended\r\n * so the model sees \"I interrupted you on purpose — focus on this\r\n * instead of resuming the prior task\". Cleared once that message\r\n * lands. Distinct from `interrupts` (which is the Ctrl+C exit ladder).\r\n */\r\n steeringPending: boolean;\r\n /**\r\n * Context snapshot captured at Esc time, replayed into the STEERING\r\n * preamble so the model sees exactly what it was mid-doing when the\r\n * user pulled the cord. Cleared together with `steeringPending`.\r\n * Without this the model has to guess from chat scrollback which\r\n * tools were live — and it can't see subagent state at all.\r\n */\r\n steerSnapshot: {\r\n runningTools: string[];\r\n subagents: Array<{ label: string; status: string; tool?: string }>;\r\n subagentsTerminated: number;\r\n partialAssistantText: string;\r\n } | null;\r\n hint: string;\r\n nextId: number;\r\n picker: { open: boolean; query: string; matches: string[]; selected: number };\r\n /** Slash command picker — open while typing a / command. */\r\n slashPicker: { open: boolean; query: string; matches: SlashCommandMatch[]; selected: number };\r\n /** Tool calls currently in-flight, by tool_use id. Surface in the status bar. */\r\n runningTools: Map<string, { name: string; startedAt: number }>;\r\n /** FIFO of user messages typed while the agent was running. Drained when idle. */\r\n queue: QueueItem[];\r\n nextQueueId: number;\r\n /** Previous input strings for up/down navigation. */\r\n inputHistory: string[];\r\n /** 0 = current buffer (not in history), 1 = most recent, n = nth most recent. */\r\n historyIndex: number;\r\n /** Two-step model picker (provider → model) — opened by `/model`. */\r\n modelPicker: {\r\n open: boolean;\r\n step: 'provider' | 'model';\r\n providerOptions: ProviderOption[];\r\n modelOptions: string[];\r\n selected: number;\r\n pickedProviderId?: string;\r\n hint?: string;\r\n };\r\n /** Single-step autonomy mode picker — opened by `/autonomy`. */\r\n autonomyPicker: {\r\n open: boolean;\r\n options: AutonomyOption[];\r\n selected: number;\r\n hint?: string;\r\n };\r\n /** Pending tool confirmations — queue to handle multiple tools requesting confirmation. */\r\n confirmQueue: {\r\n toolUseId: string;\r\n toolName: string;\r\n input: unknown;\r\n suggestedPattern: string;\r\n resolve: (decision: 'yes' | 'no' | 'always' | 'deny') => void;\r\n }[];\r\n /** Incremented on /clear so the context chip re-reads from agent.ctx tokens. */\r\n contextChipVersion: number;\r\n /** Live fleet state: per-subagent entries from FleetBus events. Keyed by subagentId. */\r\n fleet: Record<string, FleetEntry>;\r\n /**\r\n * Leader-loop activity, synthesized for the AgentsMonitor overlay so the\r\n * user can see leader iteration / tool counts alongside subagent rows.\r\n * Driven by EventBus `iteration.started`/`iteration.completed`/`tool.started`/`tool.executed`.\r\n * Always present; renders as AGENT#0 LEADER in the monitor regardless of\r\n * whether any subagents exist.\r\n */\r\n leader: {\r\n iterations: number;\r\n toolCalls: number;\r\n recentTools: Array<{ name: string; ok?: boolean; durationMs?: number; at: number }>;\r\n currentTool?: { name: string; startedAt: number };\r\n startedAt: number;\r\n lastEventAt: number;\r\n /** True while inside an iteration (between iteration.started and iteration.completed). */\r\n iterating: boolean;\r\n /** Latest context window fill fraction (from ctx.pct event). */\r\n ctxPct?: number;\r\n /** Estimated total tokens in context window. */\r\n ctxTokens?: number;\r\n /** Provider max context in tokens. */\r\n ctxMaxTokens?: number;\r\n };\r\n /** Fleet-wide accumulated cost. */\r\n fleetCost: number;\r\n /** Fleet-wide token totals from the usage aggregator, for the monitor gauge. */\r\n fleetTokens: { input: number; output: number };\r\n /**\r\n * When true, subagent text activity is\r\n * streamed into the main history with an `AGENT#N` prefix. Toggled\r\n * with `/fleet stream on|off`. Tool calls stay in the live fleet\r\n * surfaces so chat history remains readable during multi-agent runs.\r\n */\r\n streamFleet: boolean;\r\n /** When true, the full graphical fleet monitor overlay is shown (Ctrl+F). */\r\n monitorOpen: boolean;\r\n /** When true, the agents monitor overlay is shown (Ctrl+G). */\r\n agentsMonitorOpen: boolean;\r\n /**\r\n * Active or completed collaborative debugging session state.\r\n * Null when no collab session has run. Tracks counts + the event timeline\r\n * so FleetMonitor can render a live \"COLLAB SESSION\" banner and per-event\r\n * entries (bug.found / refactor.plan / critic.evaluation) as they arrive.\r\n */\r\n collabSession: {\r\n /** Null until the first collab subagent spawns; set on first bug.found. */\r\n sessionId: string | null;\r\n bugCount: number;\r\n planCount: number;\r\n evalCount: number;\r\n /** Most recent overall verdict when the session completes. */\r\n overallVerdict: 'approve' | 'needs_revision' | 'reject' | null;\r\n /** Timeline of collab events for the FleetMonitor overlay. */\r\n timeline: Array<{ at: number; icon: string; color: string; text: string }>;\r\n startedAt: number | null;\r\n } | null;\r\n /** Session checkpoints recorded by SessionWriter.writeCheckpoint() events. */\r\n checkpoints: Array<{\r\n promptIndex: number;\r\n promptPreview: string;\r\n ts: string;\r\n fileCount: number;\r\n }>;\r\n /** Checkpoint timeline overlay — null when closed. */\r\n rewindOverlay: { checkpoints: Array<{\r\n promptIndex: number;\r\n promptPreview: string;\r\n ts: string;\r\n fileCount: number;\r\n }>; selected: number } | null;\r\n /** Live iteration-stage of the eternal engine (decide/execute/reflect/sleep/paused/stopped). */\r\n eternalStage: {\r\n phase: 'idle';\r\n } | {\r\n phase: 'decide';\r\n reason: string;\r\n } | {\r\n phase: 'execute';\r\n task: string;\r\n } | {\r\n phase: 'reflect';\r\n status: 'success' | 'failure' | 'aborted' | 'skipped';\r\n note?: string;\r\n } | {\r\n phase: 'sleep';\r\n ms: number;\r\n } | {\r\n phase: 'paused';\r\n } | {\r\n phase: 'stopped';\r\n } | {\r\n phase: 'error';\r\n message: string;\r\n } | null;\r\n /** Loaded from .wrongstack/goal.json on mount for startup banner. */\r\n goalSummary: GoalSummary;\r\n /** AutoPhase orchestrator state — rendered by PhaseMonitor. */\r\n autoPhase: {\r\n /** AutoPhase graph title. */\r\n title: string;\r\n /** Per-phase task summary, keyed by phaseId. */\r\n phases: Record<string, {\r\n name: string;\r\n status: string;\r\n completedTasks: number;\r\n totalTasks: number;\r\n startedAt?: number;\r\n }>;\r\n /** Active phase IDs (running phases). */\r\n runningPhaseIds: string[];\r\n /** Elapsed ms since graph start — drives the elapsed counter. */\r\n elapsedMs: number;\r\n /** True while the monitor overlay is open (Ctrl+P). */\r\n monitorOpen: boolean;\r\n } | null;\r\n /** Git-worktree isolation state — rendered by WorktreePanel/WorktreeMonitor. */\r\n worktrees: Record<string, WorktreeRow & { baseBranch?: string }>;\r\n /** Base branch worktrees fork from (for the monitor header). */\r\n worktreeBase?: string;\r\n /** True while the worktree monitor overlay is open (Ctrl+T). */\r\n worktreeMonitorOpen: boolean;\r\n};\r\n\r\ntype Action =\r\n | { type: 'addEntry'; entry: DraftEntry }\r\n | { type: 'setBuffer'; buffer: string; cursor: number }\r\n | { type: 'addPlaceholder'; ph: string; content?: string }\r\n | { type: 'removeLastPlaceholder' }\r\n | { type: 'clearInput' }\r\n | { type: 'clearPlaceholdersOnly' }\r\n | { type: 'clearHistory' }\r\n | { type: 'streamDelta'; delta: string }\r\n | { type: 'streamReset' }\r\n | { type: 'status'; status: State['status'] }\r\n | { type: 'interrupt' }\r\n | { type: 'resetInterrupts' }\r\n /**\r\n * User pressed Esc mid-iteration — flag the next message for steering\r\n * AND stash a context snapshot so the preamble can tell the model\r\n * exactly what it was doing.\r\n */\r\n | { type: 'steerStart'; snapshot: State['steerSnapshot'] }\r\n /** Submit handler consumed the steering flag; reset. */\r\n | { type: 'steerConsume' }\r\n | { type: 'hint'; text: string }\r\n | { type: 'pickerOpen'; query: string }\r\n | { type: 'pickerClose' }\r\n | { type: 'pickerSetMatches'; query: string; matches: string[] }\r\n | { type: 'pickerMove'; delta: number }\r\n | { type: 'toolStarted'; id: string; name: string }\r\n | { type: 'toolEnded'; id?: string; name?: string }\r\n | { type: 'toolStreamAppend'; toolUseId: string; name: string; text: string; startedAt: number }\r\n | { type: 'toolStreamClear'; toolUseId?: string; name?: string }\r\n | { type: 'enqueue'; item: Omit<QueueItem, 'id'> }\r\n | { type: 'dequeueFirst' }\r\n | { type: 'queueClear' }\r\n | { type: 'queueDelete'; positions: number[] }\r\n | { type: 'slashPickerOpen'; query: string; matches: SlashCommandMatch[] }\r\n | { type: 'slashPickerClose' }\r\n | { type: 'slashPickerMove'; delta: number }\r\n | { type: 'modelPickerOpen'; providers: ProviderOption[] }\r\n | { type: 'modelPickerClose' }\r\n | { type: 'modelPickerMove'; delta: number }\r\n | { type: 'modelPickerPickProvider'; providerId: string; models: string[] }\r\n | { type: 'modelPickerBack' }\r\n | { type: 'modelPickerHint'; text?: string }\r\n | { type: 'autonomyPickerOpen'; options: AutonomyOption[] }\r\n | { type: 'autonomyPickerClose' }\r\n | { type: 'autonomyPickerMove'; delta: number }\r\n | { type: 'autonomyPickerHint'; text?: string }\r\n | { type: 'historyPush'; text: string }\r\n | { type: 'historyUp' }\r\n | { type: 'historyDown' }\r\n | { type: 'confirmOpen'; info: State['confirmQueue'][0] }\r\n | { type: 'confirmClose' }\r\n | { type: 'resetContextChip' }\r\n // Fleet actions\r\n | { type: 'fleetSeed'; entries: FleetEntry[]; cost: number }\r\n | {\r\n type: 'fleetSpawn';\r\n id: string;\r\n name?: string;\r\n provider?: string;\r\n model?: string;\r\n transcriptPath?: string;\r\n }\r\n | { type: 'fleetStart'; id: string; taskId?: string }\r\n | { type: 'fleetDelta'; id: string; text: string }\r\n | { type: 'fleetMessage'; id: string; text: string }\r\n | {\r\n type: 'fleetTool';\r\n id: string;\r\n name?: string;\r\n ok?: boolean;\r\n durationMs?: number;\r\n outputBytes?: number;\r\n outputLines?: number;\r\n }\r\n /** tool.started: pin the current tool name for status display. */\r\n | { type: 'fleetToolStart'; id: string; name: string }\r\n /** tool.executed: clear the current tool (paired with fleetTool). */\r\n | { type: 'fleetToolEnd'; id: string }\r\n | {\r\n type: 'fleetUsage';\r\n id: string;\r\n input: number;\r\n output: number;\r\n cacheRead: number;\r\n cacheWrite: number;\r\n }\r\n | {\r\n type: 'fleetDone';\r\n id: string;\r\n status: FleetEntry['status'];\r\n iterations: number;\r\n toolCalls: number;\r\n }\r\n | {\r\n type: 'fleetBudgetWarning';\r\n id: string;\r\n kind: string;\r\n used: number;\r\n limit: number;\r\n }\r\n | {\r\n type: 'fleetBudgetExtended';\r\n id: string;\r\n totalExtensions: number;\r\n }\r\n | {\r\n type: 'fleetCtxPct';\r\n id: string;\r\n load: number;\r\n tokens: number;\r\n maxContext: number;\r\n }\r\n | { type: 'fleetCost'; cost: number; input?: number; output?: number }\r\n | { type: 'leaderIterStart' }\r\n | { type: 'leaderIterEnd' }\r\n | { type: 'leaderToolStart'; name: string }\r\n | { type: 'leaderToolEnd'; name: string; ok?: boolean; durationMs?: number }\r\n | { type: 'leaderCtxPct'; load: number; tokens: number; maxContext: number }\r\n | { type: 'setStreamFleet'; enabled: boolean }\r\n | { type: 'toggleMonitor' }\r\n | { type: 'toggleAgentsMonitor' }\r\n | { type: 'checkpointReceived'; cp: State['checkpoints'][0] }\r\n | { type: 'rewindOverlayOpen' }\r\n | { type: 'rewindOverlayClose' }\r\n | { type: 'rewindOverlayMove'; delta: number }\r\n | { type: 'sessionRewound'; toPromptIndex: number }\r\n | { type: 'eternalStage'; stage: {\r\n phase: 'idle';\r\n } | {\r\n phase: 'decide';\r\n reason: string;\r\n } | {\r\n phase: 'execute';\r\n task: string;\r\n } | {\r\n phase: 'reflect';\r\n status: 'success' | 'failure' | 'aborted' | 'skipped';\r\n note?: string;\r\n } | {\r\n phase: 'sleep';\r\n ms: number;\r\n } | {\r\n phase: 'paused';\r\n } | {\r\n phase: 'stopped';\r\n } | {\r\n phase: 'error';\r\n message: string;\r\n }}\r\n | { type: 'goalSummary'; summary: GoalSummary }\r\n | { type: 'autoPhaseInit'; title: string }\r\n | { type: 'autoPhasePhaseUpdate'; phaseId: string; name: string; status: string; completedTasks: number; totalTasks: number; startedAt?: number }\r\n | { type: 'autoPhaseRunningPhases'; phaseIds: string[] }\r\n | { type: 'autoPhaseElapsed'; ms: number }\r\n | { type: 'autoPhaseMonitorToggle' }\r\n | { type: 'autoPhaseReset' }\r\n | { type: 'worktreeUpsert'; handleId: string; row: Partial<WorktreeRow & { baseBranch?: string }>; baseBranch?: string }\r\n | { type: 'worktreeRemove'; handleId: string }\r\n | { type: 'worktreeMonitorToggle' }\r\n /** BugHunter emitted a bug.found event on the FleetBus. */\r\n | { type: 'collabBugFound'; sessionId: string; bugId: string; severity: string; description: string }\r\n /** RefactorPlanner emitted a refactor.plan event on the FleetBus. */\r\n | { type: 'collabPlanEmitted'; sessionId: string; planId: string; riskScore: string; phaseCount: number }\r\n /** Critic emitted a critic.evaluation event on the FleetBus. */\r\n | { type: 'collabEvalComplete'; sessionId: string; evalId: string; verdict: string; score: number }\r\n /** Collab session completed — overall verdict is available. */\r\n | { type: 'collabSessionDone'; sessionId: string; verdict: 'approve' | 'needs_revision' | 'reject' }\r\n /** A collab subagent (bug-hunter / refactor-planner / critic) was spawned. */\r\n | { type: 'collabSubagentSpawned'; subagentId: string; role: string };\r\n\r\nexport function reducer(state: State, action: Action): State {\r\n switch (action.type) {\r\n case 'addEntry': {\r\n // Append-only. We render finalized entries via Ink's <Static>,\r\n // which forbids removals or reordering — old items live on in the\r\n // terminal's native scrollback. Memory growth is bounded by the\r\n // terminal's own scrollback limits in practice.\r\n const appended = [...state.entries, { ...action.entry, id: state.nextId } as HistoryEntry];\r\n return { ...state, entries: appended, nextId: state.nextId + 1 };\r\n }\r\n case 'setBuffer':\r\n return { ...state, buffer: action.buffer, cursor: action.cursor };\r\n case 'addPlaceholder':\r\n return {\r\n ...state,\r\n placeholders: [...state.placeholders, action.ph],\r\n placeholderContents: [...state.placeholderContents, action.content ?? ''],\r\n };\r\n case 'removeLastPlaceholder':\r\n if (state.placeholders.length === 0) return state;\r\n return {\r\n ...state,\r\n placeholders: state.placeholders.slice(0, -1),\r\n placeholderContents: state.placeholderContents.slice(0, -1),\r\n };\r\n case 'clearInput':\r\n return {\r\n ...state,\r\n buffer: '',\r\n cursor: 0,\r\n placeholders: [],\r\n placeholderContents: [],\r\n historyIndex: 0,\r\n picker: { open: false, query: '', matches: [], selected: 0 },\r\n slashPicker: { open: false, query: '', matches: [], selected: 0 },\r\n };\r\n case 'clearPlaceholdersOnly':\r\n return { ...state, placeholders: [], placeholderContents: [] };\r\n case 'clearHistory': {\r\n // Keep only the banner entry (always first, id=0). Any other entries\r\n // (user messages, assistant responses, slash results) are discarded so\r\n // the TUI starts fresh after /clear.\r\n const banner = state.entries.find((e) => e.kind === 'banner');\r\n return {\r\n ...state,\r\n entries: banner ? [banner] : state.entries,\r\n queue: [],\r\n nextQueueId: 1,\r\n };\r\n }\r\n case 'streamDelta':\r\n return { ...state, streamingText: state.streamingText + action.delta };\r\n case 'streamReset':\r\n return { ...state, streamingText: '' };\r\n case 'status':\r\n return { ...state, status: action.status };\r\n case 'interrupt':\r\n return { ...state, interrupts: state.interrupts + 1 };\r\n case 'steerStart':\r\n return { ...state, steeringPending: true, steerSnapshot: action.snapshot };\r\n case 'steerConsume':\r\n return { ...state, steeringPending: false, steerSnapshot: null, interrupts: 0 };\r\n case 'resetInterrupts':\r\n return { ...state, interrupts: 0 };\r\n case 'hint':\r\n return { ...state, hint: action.text };\r\n case 'pickerOpen':\r\n return {\r\n ...state,\r\n picker: { open: true, query: action.query, matches: state.picker.matches, selected: 0 },\r\n };\r\n case 'pickerClose':\r\n return {\r\n ...state,\r\n picker: { open: false, query: '', matches: [], selected: 0 },\r\n };\r\n case 'pickerSetMatches':\r\n // Guard against stale async results — only apply if query still matches.\r\n if (!state.picker.open || state.picker.query !== action.query) return state;\r\n return {\r\n ...state,\r\n picker: {\r\n ...state.picker,\r\n matches: action.matches,\r\n selected: Math.min(state.picker.selected, Math.max(0, action.matches.length - 1)),\r\n },\r\n };\r\n case 'pickerMove': {\r\n const n = state.picker.matches.length;\r\n if (n === 0) return state;\r\n const next = (state.picker.selected + action.delta + n) % n;\r\n return { ...state, picker: { ...state.picker, selected: next } };\r\n }\r\n case 'toolStarted': {\r\n const next = new Map(state.runningTools);\r\n next.set(action.id, { name: action.name, startedAt: Date.now() });\r\n return { ...state, runningTools: next };\r\n }\r\n case 'toolEnded': {\r\n const next = new Map(state.runningTools);\r\n if (action.id !== undefined && next.has(action.id)) {\r\n next.delete(action.id);\r\n return { ...state, runningTools: next };\r\n }\r\n if (action.name !== undefined) {\r\n // Fall back to clearing the oldest running entry with this name —\r\n // `tool.executed` doesn't carry the tool_use id, so we approximate.\r\n for (const [id, info] of next) {\r\n if (info.name === action.name) {\r\n next.delete(id);\r\n return { ...state, runningTools: next };\r\n }\r\n }\r\n }\r\n return state;\r\n }\r\n case 'toolStreamAppend': {\r\n // Only one tool's stream is shown at a time. If a different tool is\r\n // currently streaming, switch — last writer wins. Streams from\r\n // not-yet-acknowledged tools take over as soon as data arrives, which\r\n // matches user intuition (whatever just produced output is what's\r\n // visible).\r\n const cur = state.toolStream;\r\n if (cur && cur.toolUseId === action.toolUseId) {\r\n return {\r\n ...state,\r\n toolStream: { ...cur, text: cur.text + action.text },\r\n };\r\n }\r\n return {\r\n ...state,\r\n toolStream: {\r\n toolUseId: action.toolUseId,\r\n name: action.name,\r\n text: action.text,\r\n startedAt: action.startedAt,\r\n },\r\n };\r\n }\r\n case 'toolStreamClear': {\r\n if (state.toolStream === null) return state;\r\n // Clear only when the finishing tool matches the streaming one. A\r\n // stale `tool.executed` for a different tool must not blank the\r\n // currently-visible stream.\r\n const t = state.toolStream;\r\n if (action.toolUseId !== undefined && action.toolUseId !== t.toolUseId) return state;\r\n if (action.name !== undefined && action.toolUseId === undefined && action.name !== t.name)\r\n return state;\r\n return { ...state, toolStream: null };\r\n }\r\n case 'enqueue': {\r\n const item: QueueItem = { ...action.item, id: state.nextQueueId };\r\n return {\r\n ...state,\r\n queue: [...state.queue, item],\r\n nextQueueId: state.nextQueueId + 1,\r\n };\r\n }\r\n case 'dequeueFirst': {\r\n if (state.queue.length === 0) return state;\r\n return { ...state, queue: state.queue.slice(1) };\r\n }\r\n case 'queueClear': {\r\n if (state.queue.length === 0) return state;\r\n return { ...state, queue: [] };\r\n }\r\n case 'queueDelete': {\r\n if (state.queue.length === 0 || action.positions.length === 0) return state;\r\n // Positions are 1-based; convert to 0-based set for fast filtering.\r\n const drop = new Set(action.positions.map((p) => p - 1).filter((i) => i >= 0));\r\n const filtered = state.queue.filter((_, i) => !drop.has(i));\r\n if (filtered.length === state.queue.length) return state;\r\n return { ...state, queue: filtered };\r\n }\r\n case 'slashPickerOpen':\r\n return {\r\n ...state,\r\n slashPicker: { open: true, query: action.query, matches: action.matches, selected: 0 },\r\n };\r\n case 'slashPickerClose':\r\n return {\r\n ...state,\r\n slashPicker: { open: false, query: '', matches: [], selected: 0 },\r\n };\r\n case 'slashPickerMove': {\r\n const n = state.slashPicker.matches.length;\r\n if (n === 0) return state;\r\n const next = (state.slashPicker.selected + action.delta + n) % n;\r\n return { ...state, slashPicker: { ...state.slashPicker, selected: next } };\r\n }\r\n case 'historyPush': {\r\n if (action.text === '' || action.text === state.inputHistory[0]) return state;\r\n return { ...state, inputHistory: [action.text, ...state.inputHistory].slice(0, 100) };\r\n }\r\n case 'historyUp': {\r\n if (state.inputHistory.length === 0) return state;\r\n const next = Math.min(state.historyIndex + 1, state.inputHistory.length);\r\n const entry = state.inputHistory[next - 1] ?? '';\r\n return { ...state, historyIndex: next, buffer: entry, cursor: entry.length };\r\n }\r\n case 'historyDown': {\r\n if (state.historyIndex === 0) return state;\r\n const next = state.historyIndex - 1;\r\n const entry = next === 0 ? '' : (state.inputHistory[next - 1] ?? '');\r\n return { ...state, historyIndex: next, buffer: entry, cursor: entry.length };\r\n }\r\n case 'modelPickerOpen':\r\n return {\r\n ...state,\r\n modelPicker: {\r\n open: true,\r\n step: 'provider',\r\n providerOptions: action.providers,\r\n modelOptions: [],\r\n selected: 0,\r\n hint: undefined,\r\n },\r\n };\r\n case 'modelPickerClose':\r\n return {\r\n ...state,\r\n modelPicker: {\r\n open: false,\r\n step: 'provider',\r\n providerOptions: [],\r\n modelOptions: [],\r\n selected: 0,\r\n },\r\n };\r\n case 'modelPickerMove': {\r\n if (!state.modelPicker.open) return state;\r\n const len =\r\n state.modelPicker.step === 'provider'\r\n ? state.modelPicker.providerOptions.length\r\n : state.modelPicker.modelOptions.length;\r\n if (len === 0) return state;\r\n const next = (state.modelPicker.selected + action.delta + len) % len;\r\n return {\r\n ...state,\r\n modelPicker: { ...state.modelPicker, selected: next },\r\n };\r\n }\r\n case 'modelPickerPickProvider':\r\n return {\r\n ...state,\r\n modelPicker: {\r\n ...state.modelPicker,\r\n step: 'model',\r\n modelOptions: action.models,\r\n selected: 0,\r\n pickedProviderId: action.providerId,\r\n hint: undefined,\r\n },\r\n };\r\n case 'modelPickerBack':\r\n return {\r\n ...state,\r\n modelPicker: {\r\n ...state.modelPicker,\r\n step: 'provider',\r\n modelOptions: [],\r\n selected: 0,\r\n pickedProviderId: undefined,\r\n hint: undefined,\r\n },\r\n };\r\n case 'modelPickerHint':\r\n return {\r\n ...state,\r\n modelPicker: { ...state.modelPicker, hint: action.text },\r\n };\r\n case 'autonomyPickerOpen':\r\n return {\r\n ...state,\r\n autonomyPicker: { open: true, options: action.options, selected: 0, hint: undefined },\r\n };\r\n case 'autonomyPickerClose':\r\n return {\r\n ...state,\r\n autonomyPicker: { open: false, options: [], selected: 0 },\r\n };\r\n case 'autonomyPickerMove': {\r\n const n = state.autonomyPicker.options.length;\r\n if (n === 0) return state;\r\n const next = (state.autonomyPicker.selected + action.delta + n) % n;\r\n return {\r\n ...state,\r\n autonomyPicker: { ...state.autonomyPicker, selected: next },\r\n };\r\n }\r\n case 'autonomyPickerHint':\r\n return {\r\n ...state,\r\n autonomyPicker: { ...state.autonomyPicker, hint: action.text },\r\n };\r\n case 'confirmOpen':\r\n return { ...state, confirmQueue: [...state.confirmQueue, action.info] };\r\n case 'confirmClose':\r\n return { ...state, confirmQueue: state.confirmQueue.slice(1) };\r\n case 'resetContextChip':\r\n return { ...state, contextChipVersion: state.contextChipVersion + 1 };\r\n // --- Fleet ---\r\n case 'fleetSeed': {\r\n const seeded: Record<string, FleetEntry> = {};\r\n for (const e of action.entries) {\r\n seeded[e.id] = {\r\n ...e,\r\n recentTools: e.recentTools ?? [],\r\n recentMessages: e.recentMessages ?? [],\r\n };\r\n }\r\n return { ...state, fleet: seeded, fleetCost: action.cost };\r\n }\r\n case 'fleetSpawn': {\r\n if (state.fleet[action.id]) return state;\r\n const entry: FleetEntry = {\r\n id: action.id,\r\n name: action.name ?? action.id.slice(0, 8),\r\n provider: action.provider,\r\n model: action.model,\r\n status: 'idle',\r\n streamingText: '',\r\n iterations: 0,\r\n toolCalls: 0,\r\n recentTools: [],\r\n recentMessages: [],\r\n cost: 0,\r\n startedAt: Date.now(),\r\n lastEventAt: Date.now(),\r\n transcriptPath: action.transcriptPath,\r\n };\r\n return { ...state, fleet: { ...state.fleet, [action.id]: entry } };\r\n }\r\n case 'fleetToolStart': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n currentTool: { name: action.name, startedAt: Date.now() },\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetToolEnd': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: { ...cur, currentTool: undefined, lastEventAt: Date.now() },\r\n },\r\n };\r\n }\r\n case 'fleetStart': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n status: 'running' as const,\r\n streamingText: '',\r\n budgetWarning: undefined, // clear on restart\r\n startedAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetDelta': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n // Keep last 500 chars of streaming text for display (refactor plans are verbose)\r\n const appended = (cur.streamingText + action.text).slice(-500);\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: { ...cur, streamingText: appended, lastEventAt: Date.now() },\r\n },\r\n };\r\n }\r\n case 'fleetMessage': {\r\n const cur = state.fleet[action.id];\r\n const text = action.text.trim().replace(/\\s+/g, ' ');\r\n if (!cur || !text) return state;\r\n const now = Date.now();\r\n const recentMessages = [...(cur.recentMessages ?? []), { text, at: now }].slice(-2);\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: { ...cur, recentMessages, lastEventAt: now },\r\n },\r\n };\r\n }\r\n case 'fleetTool': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n const now = Date.now();\r\n const recentTools =\r\n action.name !== undefined\r\n ? [\r\n ...(cur.recentTools ?? []),\r\n {\r\n name: action.name,\r\n ok: action.ok,\r\n durationMs: action.durationMs,\r\n outputBytes: action.outputBytes,\r\n outputLines: action.outputLines,\r\n at: now,\r\n },\r\n ].slice(-2)\r\n : (cur.recentTools ?? []);\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n toolCalls: cur.toolCalls + 1,\r\n recentTools,\r\n lastEventAt: now,\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetUsage': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: { ...state.fleet, [action.id]: { ...cur, lastEventAt: Date.now() } },\r\n };\r\n }\r\n case 'fleetDone': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n status: action.status,\r\n iterations: action.iterations,\r\n toolCalls: action.toolCalls,\r\n streamingText: '',\r\n currentTool: undefined,\r\n budgetWarning: undefined, // clear on done/restart\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetBudgetWarning': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n budgetWarning: { kind: action.kind, used: action.used, limit: action.limit, at: Date.now() },\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetBudgetExtended': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n // The director sends the authoritative cumulative count; trust it\r\n // over a local increment so a dropped event can't desync the badge.\r\n extensions: action.totalExtensions,\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetCtxPct': {\r\n const cur = state.fleet[action.id];\r\n if (!cur) return state;\r\n return {\r\n ...state,\r\n fleet: {\r\n ...state.fleet,\r\n [action.id]: {\r\n ...cur,\r\n ctxPct: action.load,\r\n ctxTokens: action.tokens,\r\n ctxMaxTokens: action.maxContext,\r\n lastEventAt: Date.now(),\r\n },\r\n },\r\n };\r\n }\r\n case 'fleetCost': {\r\n return {\r\n ...state,\r\n fleetCost: action.cost,\r\n fleetTokens:\r\n action.input !== undefined || action.output !== undefined\r\n ? { input: action.input ?? state.fleetTokens.input, output: action.output ?? state.fleetTokens.output }\r\n : state.fleetTokens,\r\n };\r\n }\r\n case 'leaderIterStart': {\r\n return {\r\n ...state,\r\n leader: {\r\n ...state.leader,\r\n iterations: state.leader.iterations + 1,\r\n iterating: true,\r\n lastEventAt: Date.now(),\r\n },\r\n };\r\n }\r\n case 'leaderIterEnd': {\r\n return {\r\n ...state,\r\n leader: { ...state.leader, iterating: false, lastEventAt: Date.now() },\r\n };\r\n }\r\n case 'leaderToolStart': {\r\n return {\r\n ...state,\r\n leader: {\r\n ...state.leader,\r\n currentTool: { name: action.name, startedAt: Date.now() },\r\n lastEventAt: Date.now(),\r\n },\r\n };\r\n }\r\n case 'leaderToolEnd': {\r\n const now = Date.now();\r\n const recentTools = [\r\n ...state.leader.recentTools,\r\n { name: action.name, ok: action.ok, durationMs: action.durationMs, at: now },\r\n ].slice(-8);\r\n return {\r\n ...state,\r\n leader: {\r\n ...state.leader,\r\n toolCalls: state.leader.toolCalls + 1,\r\n currentTool: undefined,\r\n recentTools,\r\n lastEventAt: now,\r\n },\r\n };\r\n }\r\n case 'leaderCtxPct': {\r\n return {\r\n ...state,\r\n leader: {\r\n ...state.leader,\r\n ctxPct: action.load,\r\n ctxTokens: action.tokens,\r\n ctxMaxTokens: action.maxContext,\r\n lastEventAt: Date.now(),\r\n },\r\n };\r\n }\r\n case 'setStreamFleet': {\r\n return { ...state, streamFleet: action.enabled };\r\n }\r\n case 'toggleMonitor': {\r\n return { ...state, monitorOpen: !state.monitorOpen };\r\n }\r\n case 'toggleAgentsMonitor': {\r\n return { ...state, agentsMonitorOpen: !state.agentsMonitorOpen };\r\n }\r\n case 'checkpointReceived': {\r\n const existing = state.checkpoints.find((c) => c.promptIndex === action.cp.promptIndex);\r\n if (existing) return state;\r\n return { ...state, checkpoints: [...state.checkpoints, action.cp] };\r\n }\r\n case 'rewindOverlayOpen': {\r\n return {\r\n ...state,\r\n rewindOverlay: { checkpoints: state.checkpoints, selected: state.checkpoints.length - 1 },\r\n };\r\n }\r\n case 'rewindOverlayClose': {\r\n return { ...state, rewindOverlay: null };\r\n }\r\n case 'rewindOverlayMove': {\r\n if (!state.rewindOverlay) return state;\r\n const len = state.rewindOverlay.checkpoints.length;\r\n if (len === 0) return { ...state, rewindOverlay: null };\r\n const selected = Math.max(0, Math.min(len - 1, state.rewindOverlay.selected + action.delta));\r\n return { ...state, rewindOverlay: { ...state.rewindOverlay, selected } };\r\n }\r\n case 'sessionRewound': {\r\n return {\r\n ...state,\r\n checkpoints: state.checkpoints.filter((c) => c.promptIndex <= action.toPromptIndex),\r\n rewindOverlay: null,\r\n };\r\n }\r\n case 'eternalStage': {\r\n return { ...state, eternalStage: action.stage };\r\n }\r\n case 'goalSummary': {\r\n return { ...state, goalSummary: action.summary };\r\n }\r\n case 'autoPhaseInit': {\r\n return {\r\n ...state,\r\n autoPhase: {\r\n title: action.title,\r\n phases: {},\r\n runningPhaseIds: [],\r\n elapsedMs: 0,\r\n monitorOpen: false,\r\n },\r\n };\r\n }\r\n case 'autoPhasePhaseUpdate': {\r\n // Lazily initialize autoPhase state on first phase event — the title\r\n // is not shown in the PhaseMonitor so a placeholder is fine here.\r\n const existing = state.autoPhase ?? {\r\n title: 'AutoPhase',\r\n phases: {},\r\n runningPhaseIds: [],\r\n elapsedMs: 0,\r\n monitorOpen: false,\r\n };\r\n return {\r\n ...state,\r\n autoPhase: {\r\n ...existing,\r\n phases: {\r\n ...existing.phases,\r\n [action.phaseId]: {\r\n name: action.name,\r\n status: action.status,\r\n completedTasks: action.completedTasks,\r\n totalTasks: action.totalTasks,\r\n startedAt: action.startedAt,\r\n },\r\n },\r\n },\r\n };\r\n }\r\n case 'autoPhaseRunningPhases': {\r\n if (!state.autoPhase) return state;\r\n return {\r\n ...state,\r\n autoPhase: { ...state.autoPhase, runningPhaseIds: action.phaseIds },\r\n };\r\n }\r\n case 'autoPhaseElapsed': {\r\n if (!state.autoPhase) return state;\r\n return { ...state, autoPhase: { ...state.autoPhase, elapsedMs: action.ms } };\r\n }\r\n case 'autoPhaseMonitorToggle': {\r\n if (!state.autoPhase) return state;\r\n return { ...state, autoPhase: { ...state.autoPhase, monitorOpen: !state.autoPhase.monitorOpen } };\r\n }\r\n case 'autoPhaseReset': {\r\n return { ...state, autoPhase: null };\r\n }\r\n case 'worktreeUpsert': {\r\n const prev = state.worktrees[action.handleId];\r\n const merged: WorktreeRow & { baseBranch?: string } = {\r\n branch: '',\r\n ownerLabel: '',\r\n status: 'active',\r\n insertions: 0,\r\n deletions: 0,\r\n files: 0,\r\n allocatedAt: Date.now(),\r\n ...prev,\r\n ...action.row,\r\n };\r\n return {\r\n ...state,\r\n worktrees: { ...state.worktrees, [action.handleId]: merged },\r\n worktreeBase: action.baseBranch ?? state.worktreeBase,\r\n };\r\n }\r\n case 'worktreeRemove': {\r\n if (!state.worktrees[action.handleId]) return state;\r\n const next = { ...state.worktrees };\r\n delete next[action.handleId];\r\n return { ...state, worktrees: next };\r\n }\r\n case 'worktreeMonitorToggle': {\r\n return { ...state, worktreeMonitorOpen: !state.worktreeMonitorOpen };\r\n }\r\n // --- Collab session ---\r\n case 'collabSubagentSpawned': {\r\n // Lazily initialize collab state on the first subagent spawn.\r\n if (state.collabSession) return state;\r\n return {\r\n ...state,\r\n collabSession: {\r\n sessionId: null,\r\n bugCount: 0,\r\n planCount: 0,\r\n evalCount: 0,\r\n overallVerdict: null,\r\n timeline: [{ at: Date.now(), icon: '⚡', color: 'cyan', text: `${action.role} spawned` }],\r\n startedAt: Date.now(),\r\n },\r\n };\r\n }\r\n case 'collabBugFound': {\r\n const cs = state.collabSession;\r\n if (!cs) {\r\n // Lazily bootstrap collab state on first event.\r\n return {\r\n ...state,\r\n collabSession: {\r\n sessionId: action.sessionId,\r\n bugCount: 1,\r\n planCount: 0,\r\n evalCount: 0,\r\n overallVerdict: null,\r\n timeline: [{ at: Date.now(), icon: '🐛', color: 'red', text: `bug: ${action.description.slice(0, 60)}…` }],\r\n startedAt: Date.now(),\r\n },\r\n };\r\n }\r\n const entry = { at: Date.now(), icon: '🐛', color: 'red', text: `bug [${action.severity}]: ${action.description.slice(0, 55)}…` };\r\n return { ...state, collabSession: { ...cs, sessionId: action.sessionId, bugCount: cs.bugCount + 1, timeline: [entry, ...cs.timeline].slice(0, 30) } };\r\n }\r\n case 'collabPlanEmitted': {\r\n const cs = state.collabSession;\r\n if (!cs) return state;\r\n const entry = { at: Date.now(), icon: '📐', color: 'yellow', text: `plan [${action.riskScore}]: ${action.phaseCount} phases` };\r\n return { ...state, collabSession: { ...cs, sessionId: action.sessionId, planCount: cs.planCount + 1, timeline: [entry, ...cs.timeline].slice(0, 30) } };\r\n }\r\n case 'collabEvalComplete': {\r\n const cs = state.collabSession;\r\n if (!cs) return state;\r\n const entry = { at: Date.now(), icon: '⚖️', color: action.verdict === 'approve' ? 'green' : action.verdict === 'reject' ? 'red' : 'yellow', text: `eval ${action.score}/10 → ${action.verdict}` };\r\n return { ...state, collabSession: { ...cs, sessionId: action.sessionId, evalCount: cs.evalCount + 1, timeline: [entry, ...cs.timeline].slice(0, 30) } };\r\n }\r\n case 'collabSessionDone': {\r\n const cs = state.collabSession;\r\n if (!cs) return state;\r\n const entry = { at: Date.now(), icon: '🏁', color: 'green', text: `session done — ${action.verdict}` };\r\n return { ...state, collabSession: { ...cs, overallVerdict: action.verdict, timeline: [entry, ...cs.timeline].slice(0, 30) } };\r\n }\r\n }\r\n}\r\n\r\nconst PASTE_THRESHOLD_CHARS = 200;\r\n\r\n/**\r\n * Build the steering preamble that gets prepended to a user's message\r\n * after they pressed Esc to interrupt the agent. The preamble carries\r\n * three things the model would otherwise have to infer:\r\n *\r\n * 1. Context — exactly what was in flight (tool calls, subagents,\r\n * partial assistant text). Without this the model rationalizes\r\n * from chat scrollback and often resumes the prior task by\r\n * accident.\r\n * 2. Authority — a short, explicit list of what the model is\r\n * allowed to do (abandon the prior plan, respawn fresh\r\n * subagents, ask for clarification). Models hedge unless they\r\n * believe they have permission to pivot hard.\r\n * 3. New direction — the user's actual instruction, fenced off.\r\n *\r\n * The block is user-role plain text. We deliberately don't use a\r\n * system role here — the human triggered this, so accountability\r\n * stays with their turn and the model can challenge / clarify\r\n * without violating role separation.\r\n *\r\n * Exported for the steering test that pins the contract.\r\n */\r\nexport function buildSteeringPreamble(\r\n snapshot: State['steerSnapshot'],\r\n newDirection: string,\r\n): string {\r\n const lines: string[] = ['[STEERING — I pressed Esc to interrupt you mid-task on purpose.', ''];\r\n\r\n // Section 1: what was running. Even an empty list is useful —\r\n // tells the model \"you weren't doing much yet, no work to mourn\".\r\n const ctx: string[] = [];\r\n if (snapshot?.runningTools && snapshot.runningTools.length > 0) {\r\n ctx.push(`- in-flight tools (now cancelled): ${snapshot.runningTools.join(', ')}`);\r\n }\r\n if (snapshot?.subagentsTerminated && snapshot.subagentsTerminated > 0) {\r\n const subDetails = snapshot.subagents\r\n .map((s) => `${s.label}${s.tool ? ` (was running: ${s.tool})` : ''}`)\r\n .join(', ');\r\n ctx.push(\r\n `- subagents (${snapshot.subagentsTerminated} terminated by me, do NOT await them): ${subDetails}`,\r\n );\r\n }\r\n if (snapshot?.partialAssistantText && snapshot.partialAssistantText.trim().length > 0) {\r\n const tail = snapshot.partialAssistantText.trim().slice(-300);\r\n ctx.push(`- your last partial output (truncated, for context only): \"${tail}\"`);\r\n }\r\n if (ctx.length > 0) {\r\n lines.push('What was happening when I cut you off:');\r\n lines.push(...ctx);\r\n lines.push('');\r\n }\r\n\r\n // Section 2: authority. Explicit grant so the model doesn't hedge.\r\n lines.push('You have authority to:');\r\n lines.push('- Abandon the prior plan entirely if the new direction makes it stale.');\r\n lines.push('- Re-spawn fresh subagents (with different roles or tasks) if needed.');\r\n lines.push('- Skip a polite \"should I continue?\" — just pivot.');\r\n lines.push('- Ask me to clarify if the new direction is genuinely ambiguous.');\r\n lines.push('');\r\n\r\n // Section 3: the user's instruction, fenced so the model can't\r\n // mistake it for part of the preamble.\r\n lines.push('New direction:');\r\n lines.push('---');\r\n lines.push(newDirection);\r\n lines.push('---');\r\n lines.push(']');\r\n\r\n return lines.join('\\n');\r\n}\r\n\r\n// `buildGoalPreamble` was relocated to @wrongstack/core so headless and\r\n// WebUI callers (which depend on @wrongstack/cli but not @wrongstack/tui)\r\n// can issue `/goal set` without dragging the TUI package in. Re-exported\r\n// from this module for backward compatibility with consumers still\r\n// importing from @wrongstack/tui; also used locally within this file\r\n// where `/goal …` is wired into the chat-input handler.\r\nexport { buildGoalPreamble } from '@wrongstack/core';\r\n\r\nexport function App({\r\n agent,\r\n slashRegistry,\r\n attachments,\r\n events,\r\n tokenCounter,\r\n visionAdapters = [],\r\n supportsVision,\r\n model,\r\n banner = true,\r\n queueStore,\r\n yolo = false,\r\n getYolo,\r\n getAutonomy,\r\n getEternalEngine,\r\n getParallelEngine,\r\n subscribeEternalIteration,\r\n subscribeEternalStage,\r\n subscribeAutoPhase,\r\n getSDDContext,\r\n onSDDOutput,\r\n appVersion,\r\n provider,\r\n family,\r\n keyTail,\r\n getPickableProviders,\r\n switchProviderAndModel,\r\n switchAutonomy,\r\n effectiveMaxContext,\r\n onExit,\r\n director,\r\n fleetRoster,\r\n onClearHistory,\r\n fleetStreamController,\r\n statuslineHiddenItems,\r\n setStatuslineHiddenItems,\r\n agentsMonitorController,\r\n initialGoal,\r\n initialAsk,\r\n sessionsDir,\r\n}: AppProps): React.ReactElement {\r\n const { exit } = useApp();\r\n // Reactive mirrors of agent.ctx.{model,provider.id} so the status bar\r\n // re-renders when /model or /use mutate them. The banner is `Static`\r\n // and never re-renders — the user gets the textual confirmation from\r\n // the slash command's message in history instead.\r\n const [liveModel, setLiveModel] = useState<string>(model);\r\n const [liveProvider, setLiveProvider] = useState<string>(provider ?? 'agent');\r\n const [yoloLive, setYoloLive] = useState<boolean>(yolo);\r\n const [autonomyLive, setAutonomyLive] = useState<'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel'>(getAutonomy?.() ?? 'off');\r\n const [hiddenItems, setHiddenItems] = useState(statuslineHiddenItems);\r\n\r\n // Sync when parent re-loads from config file (e.g., after /statusline reset)\r\n useEffect(() => {\r\n setHiddenItems(statuslineHiddenItems);\r\n }, [statuslineHiddenItems]);\r\n\r\n // Push local changes back to the parent controller so /statusline sees them\r\n useEffect(() => {\r\n setStatuslineHiddenItems(hiddenItems);\r\n }, [setStatuslineHiddenItems, hiddenItems]);\r\n\r\n const projectRoot = agent.ctx.projectRoot;\r\n\r\n // Load goal.json on mount to show startup banner with goal state\r\n useEffect(() => {\r\n if (!projectRoot) return;\r\n const goalPath = path.join(projectRoot, '.wrongstack', 'goal.json');\r\n fs.readFile(goalPath, 'utf8').then((raw) => {\r\n const goal = JSON.parse(raw);\r\n if (goal?.goal && typeof goal.iterations === 'number') {\r\n const lastEntry = goal.journal?.[goal.journal.length - 1];\r\n dispatch({\r\n type: 'goalSummary',\r\n summary: {\r\n goal: goal.goal,\r\n goalState: goal.goalState ?? 'active',\r\n iterations: goal.iterations,\r\n lastTask: lastEntry?.task,\r\n lastStatus: lastEntry?.status,\r\n },\r\n });\r\n }\r\n }).catch(() => {\r\n // No goal file yet — that's fine\r\n });\r\n }, [projectRoot]);\r\n\r\n const [state, dispatch] = useReducer(reducer, {\r\n entries: banner\r\n ? [\r\n {\r\n id: 0,\r\n kind: 'banner' as const,\r\n version: appVersion ?? 'dev',\r\n provider: provider ?? 'agent',\r\n model,\r\n cwd: agent.ctx.cwd,\r\n family,\r\n keyTail,\r\n },\r\n ]\r\n : [],\r\n buffer: '',\r\n cursor: 0,\r\n placeholders: [],\r\n placeholderContents: [],\r\n streamingText: '',\r\n toolStream: null,\r\n status: 'idle' as const,\r\n interrupts: 0,\r\n steeringPending: false,\r\n steerSnapshot: null,\r\n hint: '',\r\n nextId: 1,\r\n picker: { open: false, query: '', matches: [], selected: 0 },\r\n slashPicker: { open: false, query: '', matches: [], selected: 0 },\r\n runningTools: new Map(),\r\n queue: [],\r\n nextQueueId: 1,\r\n inputHistory: [],\r\n historyIndex: 0,\r\n modelPicker: {\r\n open: false,\r\n step: 'provider' as const,\r\n providerOptions: [],\r\n modelOptions: [],\r\n selected: 0,\r\n },\r\n autonomyPicker: { open: false, options: [], selected: 0 },\r\n confirmQueue: [],\r\n contextChipVersion: 0,\r\n fleet: {},\r\n leader: {\r\n iterations: 0,\r\n toolCalls: 0,\r\n recentTools: [],\r\n currentTool: undefined,\r\n startedAt: Date.now(),\r\n lastEventAt: Date.now(),\r\n iterating: false,\r\n },\r\n fleetCost: 0,\r\n fleetTokens: { input: 0, output: 0 },\r\n streamFleet: true,\r\n monitorOpen: false,\r\n agentsMonitorOpen: false,\r\n collabSession: null,\r\n checkpoints: [],\r\n rewindOverlay: null,\r\n eternalStage: null,\r\n goalSummary: null,\r\n autoPhase: null,\r\n worktrees: {},\r\n worktreeMonitorOpen: false,\r\n });\r\n\r\n const builderRef = useRef<InputBuilder | null>(null);\r\n if (builderRef.current === null) {\r\n builderRef.current = new InputBuilder({ store: attachments });\r\n }\r\n\r\n // Bracketed-paste accumulator. A single paste can be delivered across\r\n // several stdin/keypress events: only the first carries the \\x1b[200~\r\n // begin marker and only the last carries \\x1b[201~. We buffer every\r\n // fragment here between those markers and finalize once, so a paste never\r\n // fragments into multiple placeholders or leaks newlines into the buffer.\r\n // `null` means \"not currently inside a paste\".\r\n const pasteAccumRef = useRef<string | null>(null);\r\n // Safety net: if the closing \\x1b[201~ marker never arrives (a terminal\r\n // dropped it, or Ink split the escape across chunks), flush the buffered\r\n // payload after a short idle period so accumulation can't swallow input\r\n // indefinitely. Real pastes deliver all fragments back-to-back, well\r\n // inside this window.\r\n const pasteFlushTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n const activeCtrlRef = useRef<AbortController | null>(null);\r\n // Set once we've asked Ink to unmount on a Ctrl+C exit. A synchronous ref\r\n // (not React state) because consecutive SIGINTs can fire faster than a\r\n // re-render — without it, `stateRef.current.interrupts` reads stale and a\r\n // wedged unmount could never escalate to a hard exit.\r\n const exitRequestedRef = useRef(false);\r\n // Prevent re-entrant handleKey: some terminals emit \\r\\n as two separate\r\n // stdin events for Enter. While the first event is being processed (submit\r\n // or picker accept), the second arrives with stale state and would trigger\r\n // a duplicate action. The gate blocks the stale-second event entirely.\r\n const inputGateRef = useRef(false);\r\n // Separate guard JUST for the submit path. The full `inputGateRef`\r\n // is held across `await foo()` blocks (picker accept, model picker\r\n // commit) — that's fine because those resolve in milliseconds. But\r\n // `await submit()` resolves only when `agent.run()` finishes, which\r\n // can be minutes for a delegated subagent task. Using the same gate\r\n // would lock ALL keystrokes (typing, backspace, slash menu) for the\r\n // entire agent run. This timestamp-based guard fires for the few\r\n // milliseconds needed to debounce a terminal-side `\\r\\n` double-event\r\n // and then auto-releases — leaving the input live for the user.\r\n const lastEnterAtRef = useRef(0);\r\n // The status-bar chip surfaces the basename so multiple WrongStack\r\n // windows running against different repos are immediately distinguishable.\r\n // Empty / root fallback to undefined so the chip just hides itself.\r\n const projectName = React.useMemo(() => {\r\n const base = path.basename(projectRoot);\r\n return base && base !== path.sep ? base : undefined;\r\n }, [projectRoot]);\r\n\r\n // Source of truth for the streamed assistant text — kept here, not in\r\n // React state, because we need to read it synchronously when `agent.run`\r\n // returns. The React `streamingText` shown in the live tail is throttled\r\n // (~10fps) for redraw cost, so it can lag the actual stream by up to\r\n // FLUSH_MS. Reading from this ref instead removes the race where the\r\n // final chunk lands in pending after run() returns and ends up flashing\r\n // into the next frame's tail (leaking into scrollback).\r\n const streamingTextRef = useRef('');\r\n const pendingDeltaRef = useRef('');\r\n const flushTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\r\n\r\n // Latest state snapshot — async callbacks (the queue drainer, slash command\r\n // closures) read this instead of capturing `state` to avoid stale closures.\r\n const stateRef = useRef<State>(state);\r\n stateRef.current = state;\r\n const draftRef = useRef({ buffer: state.buffer, cursor: state.cursor });\r\n draftRef.current = { buffer: state.buffer, cursor: state.cursor };\r\n\r\n // handleRewindTo must be declared before the /rewind useEffect (line 1803)\r\n // so the closure can capture it. It is intentionally NOT in useCallback\r\n // — each call needs a fresh rewinder referencing the current sessionsDir.\r\n const handleRewindTo = React.useCallback(async (checkpointIndex: number) => {\r\n const sessionId = agent.ctx.session.id;\r\n if (!sessionId) return;\r\n const rewinder = new DefaultSessionRewinder(sessionsDir ?? '', projectRoot ?? agent.ctx.cwd);\r\n // Revert file system changes first (read-only, safe to do eagerly).\r\n await rewinder.rewindToCheckpoint(sessionId, checkpointIndex);\r\n // Then truncate the conversation history — this fires session.rewound\r\n // on the EventBus, which the useEffect at line 2212 listens to and\r\n // dispatches sessionRewound + clearHistory.\r\n await agent.ctx.session.truncateToCheckpoint(checkpointIndex);\r\n }, [agent.ctx.session, sessionsDir, projectRoot, agent.ctx.cwd]);\r\n\r\n const setDraft = (buffer: string, cursor: number): void => {\r\n draftRef.current = { buffer, cursor };\r\n dispatch({ type: 'setBuffer', buffer, cursor });\r\n };\r\n\r\n const clearDraft = (): void => {\r\n draftRef.current = { buffer: '', cursor: 0 };\r\n dispatch({ type: 'clearInput' });\r\n };\r\n\r\n // Session-elapsed clock. Mount time is fixed; we re-render once per\r\n // second to refresh the \"⏱ 12:34\" chip. The interval is cheap — one\r\n // dispatch per tick into the same `tick` action — and stops cleanly\r\n // on unmount.\r\n const startedAtRef = useRef<number>(Date.now());\r\n const [nowTick, setNowTick] = React.useState<number>(Date.now());\r\n useEffect(() => {\r\n const t = setInterval(() => setNowTick(Date.now()), 1000);\r\n return () => clearInterval(t);\r\n }, []);\r\n const elapsedMs = nowTick - startedAtRef.current;\r\n\r\n // Git branch + change counts. Polled every 5s (cheap, two short-lived\r\n // `git` subprocesses). Skipped silently when the cwd isn't a repo or\r\n // git isn't installed — the chip just doesn't render.\r\n const [gitInfo, setGitInfo] = React.useState<GitInfo | null>(null);\r\n useEffect(() => {\r\n let cancelled = false;\r\n const refresh = () => {\r\n readGitInfo(agent.ctx.cwd)\r\n .then((info) => {\r\n if (!cancelled) setGitInfo(info);\r\n })\r\n .catch(() => undefined);\r\n };\r\n refresh();\r\n const t = setInterval(refresh, 5000);\r\n return () => {\r\n cancelled = true;\r\n clearInterval(t);\r\n };\r\n }, [agent.ctx.cwd]);\r\n\r\n // Latest provider request's input-token count. Tracked separately\r\n // from `tokenCounter` (which is cumulative) because for the context\r\n // fullness bar we want the live size of the conversation as it sat\r\n // on the wire — that's what determines how close we are to the\r\n // model's max context window.\r\n //\r\n // We sum input + cacheRead + cacheWrite so the chip reflects the TRUE\r\n // total context the model loaded (Usage is disjoint by design — see the\r\n // doc on Usage). Without this, prompt-cached turns would show only the\r\n // fresh-token delta and the chip would read 0% even when the context\r\n // was near the limit.\r\n // Cumulative \"effective context\" from tokenCounter: fresh input tokens\r\n // PLUS cached tokens that were sent as part of this prompt. All three\r\n // contribute to context-window pressure — cache tokens are still tokens\r\n // the model must process. (usage.input is disjoint from cacheRead/\r\n // cacheWrite, so simple sum is correct.)\r\n\r\n // Per-model maxContext. CLI passes effectiveMaxContext (resolved via\r\n // ModelsRegistry — correct for 1M-context variants). Fall back to\r\n // agent.ctx.provider.capabilities.maxContext when not provided.\r\n const maxContext =\r\n effectiveMaxContext ?? agent.ctx.provider.capabilities.maxContext;\r\n\r\n // Per-request context pressure: current prompt tokens (input + cacheRead).\r\n // Unlike the cumulative tokenCounter.total() which grows across all turns,\r\n // this tracks the live request's context weight — what actually determines\r\n // how close we are to the maxContext ceiling.\r\n // Cached tokens (cacheWrite) are excluded because they are an accounting\r\n // artifact of THIS request (provider charges for them separately); they\r\n // are already counted in usage.input as part of the prompt the model sees.\r\n const currentContextTokens =\r\n (tokenCounter?.currentRequestTokens()?.input ?? 0) +\r\n (tokenCounter?.currentRequestTokens()?.cacheRead ?? 0);\r\n\r\n const contextWindow = useMemo(() => {\r\n void state.contextChipVersion;\r\n return currentContextTokens > 0 && maxContext > 0\r\n ? { used: currentContextTokens, max: maxContext }\r\n : undefined;\r\n }, [currentContextTokens, maxContext, state.contextChipVersion]);\r\n\r\n // Todo counts come from the agent's context, which is mutated by\r\n // the `todo` tool. Re-read on each render — array access is O(N) on\r\n // a list that's typically < 20 items.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: nowTick intentionally triggers re-render; ctx.todos is not React state\r\n const todos = useMemo(() => {\r\n const counts = { pending: 0, inProgress: 0, completed: 0 };\r\n for (const t of agent.ctx.todos) {\r\n if (t.status === 'pending') counts.pending++;\r\n else if (t.status === 'in_progress') counts.inProgress++;\r\n else if (t.status === 'completed') counts.completed++;\r\n }\r\n return counts;\r\n // Tick on `nowTick` so we pick up todo changes even though\r\n // agent.ctx.todos isn't React state — the 1s clock doubles as a\r\n // poll for ctx-side state.\r\n }, [nowTick, agent.ctx.todos]);\r\n\r\n // Fleet breakdown for the status-bar chip. Derived from `state.fleet`,\r\n // which the FleetBus event listeners already maintain — re-bucket\r\n // into running / idle / pending / completed because that's the slice\r\n // the user cares about at a glance. Recomputes on every state.fleet\r\n // change (cheap — fleet usually has <10 entries).\r\n const fleetCounts = useMemo(() => {\r\n const entries = Object.values(state.fleet);\r\n if (entries.length === 0) return undefined;\r\n let running = 0;\r\n let idle = 0;\r\n let completed = 0;\r\n for (const e of entries) {\r\n if (e.status === 'running') running += 1;\r\n else if (e.status === 'idle') idle += 1;\r\n else completed += 1; // success/failed/timeout/stopped all count as \"done\"\r\n }\r\n return { running, idle, pending: 0, completed };\r\n }, [state.fleet]);\r\n\r\n // Synthesize LEADER as AGENT#0 and prepend to the live fleet so the\r\n // monitor / FleetPanel are never empty even when no subagents have been\r\n // spawned. The 'leader' key can't collide with subagent IDs (those are\r\n // ULIDs). status maps from the high-level run state — streaming/running/\r\n // iterating → 'running', else 'idle'.\r\n const entriesWithLeader = useMemo<Record<string, FleetEntry>>(() => {\r\n const leaderEntry: FleetEntry = {\r\n id: 'leader',\r\n name: 'LEADER',\r\n provider,\r\n model,\r\n status:\r\n state.status === 'running' || state.status === 'streaming' || state.leader.iterating\r\n ? 'running'\r\n : 'idle',\r\n streamingText: '',\r\n iterations: state.leader.iterations,\r\n toolCalls: state.leader.toolCalls,\r\n recentTools: state.leader.recentTools,\r\n recentMessages: [],\r\n cost: 0,\r\n startedAt: state.leader.startedAt,\r\n lastEventAt: state.leader.lastEventAt,\r\n currentTool: state.leader.currentTool,\r\n ctxPct: state.leader.ctxPct,\r\n ctxTokens: state.leader.ctxTokens,\r\n ctxMaxTokens: state.leader.ctxMaxTokens,\r\n };\r\n return { leader: leaderEntry, ...state.fleet };\r\n }, [state.fleet, state.leader, state.status, provider, model]);\r\n\r\n // Stable per-subagent label + color assigned on first sighting.\r\n const STREAM_COLORS = ['cyan', 'magenta', 'yellow', 'green', 'blue'];\r\n const labelsRef = useRef<Map<string, { label: string; color: string }>>(new Map());\r\n const labelFor = (id: string, name?: string): { label: string; color: string } => {\r\n const m = labelsRef.current;\r\n const existing = m.get(id);\r\n if (existing) return existing;\r\n const n = m.size + 1;\r\n // Nickname wins: show \"Einstein (Bug Hunter)\" rather than \"AGENT#1 Einstein (Bug Hunter)\".\r\n const v = {\r\n label: name && name !== id ? name : `AGENT#${n}`,\r\n color: STREAM_COLORS[(n - 1) % STREAM_COLORS.length]!,\r\n };\r\n m.set(id, v);\r\n return v;\r\n };\r\n\r\n // Plan counts come from `<sessionId>.plan.json` on disk, not React\r\n // state. We poll lazily every few ticks so the chip stays current\r\n // without slamming the FS — plans change at human pace (a few times\r\n // per session at most), so 3s granularity is plenty.\r\n const [planCounts, setPlanCounts] = useState<{\r\n open: number;\r\n inProgress: number;\r\n done: number;\r\n } | null>(null);\r\n useEffect(() => {\r\n const planPath = (agent.ctx.meta as Record<string, unknown>)['plan.path'];\r\n if (typeof planPath !== 'string' || !planPath) return;\r\n let cancelled = false;\r\n const poll = async () => {\r\n try {\r\n const data = await fs.readFile(planPath, 'utf8');\r\n const parsed = JSON.parse(data) as {\r\n items?: Array<{ status?: string }>;\r\n };\r\n if (cancelled) return;\r\n if (!Array.isArray(parsed.items)) {\r\n setPlanCounts(null);\r\n return;\r\n }\r\n let open = 0;\r\n let inProgress = 0;\r\n let done = 0;\r\n for (const it of parsed.items) {\r\n if (it?.status === 'done') done++;\r\n else if (it?.status === 'in_progress') inProgress++;\r\n else open++;\r\n }\r\n setPlanCounts(open + inProgress + done > 0 ? { open, inProgress, done } : null);\r\n } catch {\r\n // Missing or corrupt — clear the chip.\r\n if (!cancelled) setPlanCounts(null);\r\n }\r\n };\r\n void poll();\r\n const id = setInterval(poll, 3000);\r\n return () => {\r\n cancelled = true;\r\n clearInterval(id);\r\n };\r\n }, [agent.ctx.meta]);\r\n\r\n // Live-region shrink mitigation. Ink's log-update tracks the previous\r\n // render's logical line count; when content visually wraps past the\r\n // terminal width, the visual-row count exceeds the logical count and\r\n // log-update's clear-and-rewrite leaves the extra visual rows behind.\r\n // Those extras then slide into native scrollback as the next render\r\n // commits new Static items above the live region — looking to the user\r\n // like an extra echo of the input (\"Enter ile boş input da history'e\r\n // sıyrılıyor\").\r\n //\r\n // We can't reach log-update directly, but we can issue an erase-below-\r\n // cursor (\\x1b[J) at the moments most likely to leak: when a picker /\r\n // dialog transitions from open → closed (the live region's height\r\n // drops sharply), and when a fresh history entry was just committed.\r\n // \\x1b[J only touches what's below the cursor, so committed Static\r\n // history above is preserved. For users in heavy resize / picker\r\n // workflows the bullet-proof alternative is still `--alt-screen`.\r\n const prevAnyOverlayOpen = useRef(false);\r\n const prevEntriesCount = useRef(0);\r\n useEffect(() => {\r\n const anyOpenNow =\r\n state.picker.open || state.slashPicker.open || state.modelPicker.open || state.confirmQueue.length > 0;\r\n const overlayClosed = prevAnyOverlayOpen.current && !anyOpenNow;\r\n const newEntryCommitted = state.entries.length > prevEntriesCount.current;\r\n prevAnyOverlayOpen.current = anyOpenNow;\r\n prevEntriesCount.current = state.entries.length;\r\n if (overlayClosed || newEntryCommitted) {\r\n try {\r\n // \\x1b[J = erase from cursor to end of screen. The cursor sits at the\r\n // top of log-update's live region, so this clears the stale live\r\n // region only and leaves committed Static history (in scrollback)\r\n // untouched. Do NOT prefix with \\x1b[H: homing to (0,0) wipes the\r\n // visible committed output and forces the input/status bar to redraw\r\n // at the top of the viewport instead of staying pinned to the bottom.\r\n process.stdout.write('\\x1b[J');\r\n } catch {\r\n // stdout might be detached during shutdown — ignore.\r\n }\r\n }\r\n }, [\r\n state.picker.open,\r\n state.slashPicker.open,\r\n state.modelPicker.open,\r\n state.confirmQueue.length,\r\n state.entries.length,\r\n ]);\r\n\r\n // Detect an active `@<query>` token at the cursor and drive the picker.\r\n // Reruns whenever buffer/cursor changes — guards against stale results.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: picker state reads are intentional — dispatching based on stale picker state is harmless\r\n useEffect(() => {\r\n const detected = detectAtToken(state.buffer, state.cursor);\r\n if (!detected) {\r\n if (state.picker.open) dispatch({ type: 'pickerClose' });\r\n return;\r\n }\r\n if (!state.picker.open || state.picker.query !== detected.query) {\r\n dispatch({ type: 'pickerOpen', query: detected.query });\r\n }\r\n let cancelled = false;\r\n searchFiles(projectRoot, detected.query, 8)\r\n .then((matches) => {\r\n if (!cancelled) {\r\n dispatch({ type: 'pickerSetMatches', query: detected.query, matches });\r\n }\r\n })\r\n .catch(() => undefined);\r\n return () => {\r\n cancelled = true;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.buffer, state.cursor, projectRoot]);\r\n\r\n // Detect an active `/<query>` token at the cursor and drive the slash picker.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: slashPicker state reads are intentional — same pattern as @ picker above\r\n useEffect(() => {\r\n const trimmed = state.buffer.trimStart();\r\n if (!trimmed.startsWith('/')) {\r\n if (state.slashPicker.open) dispatch({ type: 'slashPickerClose' });\r\n return;\r\n }\r\n // Once any whitespace appears after the leading '/', the user has moved\r\n // past the command name into argument territory (e.g. `/model glm-5.1`).\r\n // Keeping the picker open here is actively harmful: arrow keys would\r\n // still target the command menu even though the user is typing args.\r\n // Close it so Enter submits the full line.\r\n if (/\\s/.test(trimmed)) {\r\n if (state.slashPicker.open) dispatch({ type: 'slashPickerClose' });\r\n return;\r\n }\r\n const query = trimmed.slice(1).toLowerCase();\r\n const allCommands = slashRegistry.listWithOwner();\r\n const matches: SlashCommandMatch[] = allCommands\r\n .filter(({ cmd }) => {\r\n const name = cmd.name.toLowerCase();\r\n const aliases = cmd.aliases ?? [];\r\n return name.includes(query) || aliases.some((a) => a.toLowerCase().includes(query));\r\n })\r\n .slice(0, 12)\r\n .map(({ cmd, owner }) => ({\r\n name: cmd.name,\r\n description: cmd.description,\r\n argsHint: cmd.argsHint,\r\n isBuiltin: owner === 'core',\r\n }));\r\n\r\n if (!state.slashPicker.open) {\r\n dispatch({ type: 'slashPickerOpen', query, matches });\r\n } else if (state.slashPicker.query !== query) {\r\n dispatch({ type: 'slashPickerOpen', query, matches });\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [state.buffer, slashRegistry]);\r\n\r\n const pasteClipboardImage = async (): Promise<void> => {\r\n const builder = builderRef.current;\r\n if (!builder) return;\r\n try {\r\n const img = await readClipboardImage();\r\n if (!img) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: 'No image on the clipboard.' },\r\n });\r\n return;\r\n }\r\n const placeholder = await builder.appendImage(img.base64, img.mediaType);\r\n const kb = (img.bytes / 1024).toFixed(0);\r\n dispatch({ type: 'addPlaceholder', ph: `${placeholder} (PNG ${kb}KB)` });\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'error',\r\n text: `Clipboard image error: ${err instanceof Error ? err.message : String(err)}`,\r\n },\r\n });\r\n }\r\n };\r\n\r\n const acceptPickerSelection = async (): Promise<void> => {\r\n const { open, matches, selected } = state.picker;\r\n if (!open || matches.length === 0) return;\r\n const picked = matches[selected];\r\n if (!picked) return;\r\n const builder = builderRef.current;\r\n if (!builder) return;\r\n\r\n // Find the @-token span we're replacing.\r\n const draft = draftRef.current;\r\n const tok = detectAtToken(draft.buffer, draft.cursor);\r\n if (!tok) {\r\n dispatch({ type: 'pickerClose' });\r\n return;\r\n }\r\n\r\n // Attach the file via the builder. The builder appends \"[file #N]\" to its\r\n // own display string, but we want to put the placeholder inline in the\r\n // visible buffer (replacing @query) so the user sees it.\r\n const absPath = path.isAbsolute(picked) ? picked : path.join(projectRoot, picked);\r\n try {\r\n const data = await fs.readFile(absPath, 'utf8');\r\n const placeholder = await builder.appendFile({\r\n kind: 'file',\r\n data,\r\n meta: { filename: picked, label: picked },\r\n });\r\n const before = draft.buffer.slice(0, tok.start);\r\n const after = draft.buffer.slice(tok.end);\r\n const next = `${before}${placeholder}${after}`;\r\n setDraft(next, tok.start + placeholder.length);\r\n dispatch({ type: 'pickerClose' });\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'error',\r\n text: `Attach failed: ${err instanceof Error ? err.message : String(err)}`,\r\n },\r\n });\r\n dispatch({ type: 'pickerClose' });\r\n }\r\n };\r\n\r\n /** Fill the buffer with the selected slash command and close the picker. */\r\n const acceptSlashPickerSelection = (): void => {\r\n const { open, matches, selected } = state.slashPicker;\r\n if (!open || matches.length === 0) return;\r\n const picked = matches[selected];\r\n if (!picked) return;\r\n const cmd = picked.argsHint !== undefined ? `/${picked.name} ` : `/${picked.name}`;\r\n setDraft(cmd, cmd.length);\r\n dispatch({ type: 'slashPickerClose' });\r\n };\r\n\r\n // Rehydrate any queue items persisted by a previous (crashed) run.\r\n // Fires once at mount; the persist effect below picks up afterwards.\r\n // We dispatch one enqueue per item so the reducer's id allocation\r\n // stays the single source of truth — no need to import its internals.\r\n useEffect(() => {\r\n if (!queueStore) return;\r\n let cancelled = false;\r\n queueStore\r\n .read()\r\n .then((items) => {\r\n if (cancelled || items.length === 0) return;\r\n for (const item of items) {\r\n dispatch({\r\n type: 'enqueue',\r\n item: { displayText: item.displayText, blocks: item.blocks },\r\n });\r\n }\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `Restored ${items.length} queued message${items.length === 1 ? '' : 's'} from a previous run.`,\r\n },\r\n });\r\n })\r\n .catch(() => undefined);\r\n return () => {\r\n cancelled = true;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [queueStore]);\r\n\r\n // Persist the queue snapshot on every change. Strip the in-memory id\r\n // before writing — it's render bookkeeping, not part of the message.\r\n // Errors are swallowed: the queue lives in memory regardless, so a\r\n // persistence failure only loses crash-recovery, not the queue itself.\r\n useEffect(() => {\r\n if (!queueStore) return;\r\n queueStore\r\n .write(state.queue.map(({ displayText, blocks }) => ({ displayText, blocks })))\r\n .catch(() => undefined);\r\n }, [state.queue, queueStore]);\r\n\r\n // Register the TUI-only /queue command for the lifetime of this App.\r\n useEffect(() => {\r\n const cmd = createQueueSlashCommand({\r\n getQueue: () => stateRef.current.queue,\r\n clear: () => dispatch({ type: 'queueClear' }),\r\n deleteAt: (positions) => dispatch({ type: 'queueDelete', positions }),\r\n });\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('queue');\r\n };\r\n }, [slashRegistry]);\r\n\r\n // Register /kill (list/kill tracked bash/exec processes) and /ps (list only).\r\n useEffect(() => {\r\n slashRegistry.register(createKillSlashCommand());\r\n slashRegistry.register(createPsSlashCommand());\r\n return () => {\r\n slashRegistry.unregister('kill');\r\n slashRegistry.unregister('ps');\r\n };\r\n }, [slashRegistry]);\r\n\r\n // Kill all tracked bash/exec processes when the TUI unmounts.\r\n // This fires on natural exit, Ctrl+C, and any other unmount path,\r\n // ensuring no orphaned child processes survive after the session ends.\r\n useEffect(() => {\r\n return () => {\r\n getProcessRegistry().killAll();\r\n };\r\n }, []);\r\n\r\n // Register `/altscreen on|off` — runtime escape valve for the\r\n // alt-screen scrollback limitation. In alt-screen mode the terminal's\r\n // native scrollback is disabled, so users can't review old chat\r\n // entries. `off` writes the alt-screen-exit escape so subsequent\r\n // entries land in the normal scroll region and the mouse wheel /\r\n // shift+pgup work again. The trade-off (lost on-screen history,\r\n // resize artifacts) is spelled out in the response message so the\r\n // user can decide whether to keep it.\r\n useEffect(() => {\r\n const ALT_OFF = '\\x1b[?1049l';\r\n const ALT_ON = '\\x1b[?1049h';\r\n const cmd = {\r\n name: 'altscreen',\r\n description:\r\n 'Toggle the alt-screen buffer. Default is OFF (native scroll); /altscreen on for full-screen mode.',\r\n async run(args: string) {\r\n const arg = args.trim().toLowerCase();\r\n if (arg === 'off') {\r\n try {\r\n process.stdout.write(ALT_OFF);\r\n } catch {\r\n return { message: 'Failed to exit alt-screen.' };\r\n }\r\n return {\r\n message:\r\n 'Alt-screen disabled. New entries will land in normal scrollback (mouse wheel / Shift+PgUp work). ' +\r\n 'On-screen history rendered before this command is no longer reachable via terminal scroll. ' +\r\n 'Resize may now leak the live region — `/altscreen on` to re-enable.',\r\n };\r\n }\r\n if (arg === 'on') {\r\n try {\r\n process.stdout.write(ALT_ON);\r\n } catch {\r\n return { message: 'Failed to re-enter alt-screen.' };\r\n }\r\n return { message: 'Alt-screen re-enabled. Native scroll is now disabled.' };\r\n }\r\n return { message: 'Usage: /altscreen on|off' };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('altscreen');\r\n };\r\n }, [slashRegistry]);\r\n\r\n // `/steer <message>` — slash-command equivalent of Esc-to-steer.\r\n // Useful when Esc is consumed by an outer terminal multiplexer, or\r\n // when the user wants a single-shot redirect without the typed\r\n // follow-up (the message is the new direction). Performs the same\r\n // sequence the Esc handler does: snapshot context, abort the active\r\n // run, terminate the fleet, drop the queue, then sets steeringPending\r\n // so the message — submitted as the slash command's return — picks\r\n // up the rich STEERING preamble in the normal submit path.\r\n //\r\n // Unlike Esc, this slash command can be invoked at any state. When\r\n // the agent is idle the abort and fleet-termination are no-ops; the\r\n // steering preamble still gets prepended, which is harmless extra\r\n // context (\"nothing was running\") for the next turn.\r\n useEffect(() => {\r\n const cmd = {\r\n name: 'steer',\r\n description: 'Interrupt the running agent (incl. fleet) and redirect: /steer <new direction>',\r\n help: [\r\n 'Usage: /steer <new direction>',\r\n '',\r\n 'Aborts the active iteration, terminates any running subagents,',\r\n 'drops queued messages, and sends your text to the model with a',\r\n 'STEERING preamble explaining what was in flight and what the',\r\n 'model is authorised to do (pivot hard, respawn subagents, ask',\r\n 'for clarification). Equivalent to pressing Esc then typing.',\r\n ].join('\\n'),\r\n async run(args: string) {\r\n const text = args.trim();\r\n if (!text) {\r\n return { message: 'Usage: /steer <new direction>' };\r\n }\r\n // Capture BEFORE mutating — same as the Esc handler.\r\n const s = stateRef.current;\r\n const runningTools = Array.from(s.runningTools.values()).map((t) => t.name);\r\n const subagents = Object.values(s.fleet)\r\n .filter((e) => e.status === 'running')\r\n .map((e) => ({ label: e.name, status: e.status, tool: e.currentTool?.name }));\r\n const subagentsTerminated = subagents.length;\r\n const partialAssistantText = streamingTextRef.current.slice(-1500);\r\n\r\n activeCtrlRef.current?.abort();\r\n dispatch({\r\n type: 'steerStart',\r\n snapshot: { runningTools, subagents, subagentsTerminated, partialAssistantText },\r\n });\r\n const droppedCount = s.queue.length;\r\n if (droppedCount > 0) dispatch({ type: 'queueClear' });\r\n if (director && subagentsTerminated > 0) {\r\n const cap = new Promise<void>((resolve) => {\r\n const t = setTimeout(resolve, 1500);\r\n t.unref?.();\r\n });\r\n void Promise.race([director.terminateAll().catch(() => undefined), cap]);\r\n }\r\n\r\n // Build the full preamble + direction here, return it as the\r\n // slash command output's `runText` so the submit pipeline\r\n // sends THIS to the model instead of \"/steer …\".\r\n const preamble = buildSteeringPreamble(\r\n { runningTools, subagents, subagentsTerminated, partialAssistantText },\r\n text,\r\n );\r\n // Consume immediately — the runText below already carries the\r\n // preamble; the steeringPending flag would otherwise double up.\r\n dispatch({ type: 'steerConsume' });\r\n\r\n const droppedTag = droppedCount > 0 ? ` · dropped ${droppedCount} queued` : '';\r\n const fleetTag =\r\n subagentsTerminated > 0\r\n ? ` · stopped ${subagentsTerminated} subagent${subagentsTerminated === 1 ? '' : 's'}`\r\n : '';\r\n return {\r\n message: `↯ Steering${droppedTag}${fleetTag}.`,\r\n runText: preamble,\r\n };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('steer');\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [slashRegistry, director]);\r\n\r\n // `/rewind` — open the checkpoint timeline overlay. If a checkpoint\r\n // index is provided as argument, rewinds directly to it.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps -- handleRewindTo is stable via useCallback\r\n useEffect(() => {\r\n const cmd = {\r\n name: 'rewind',\r\n description: 'Open checkpoint timeline to rewind session: /rewind [checkpoint-index]',\r\n help: [\r\n 'Usage: /rewind [checkpoint-index]',\r\n '',\r\n 'Opens a checkpoint timeline. Use ↑/↓ to navigate, Enter to rewind,',\r\n 'Esc to cancel. The session is reverted to the selected checkpoint',\r\n 'and conversation history is truncated — LLM continues fresh.',\r\n '',\r\n 'If a checkpoint index is provided the timeline is skipped and',\r\n 'rewind happens immediately.',\r\n ].join('\\n'),\r\n async run(args: string) {\r\n const idx = Number.parseInt(args.trim(), 10);\r\n if (!Number.isNaN(idx) && idx >= 0) {\r\n handleRewindTo(idx);\r\n return {};\r\n }\r\n // No arg — open the timeline overlay\r\n const s = stateRef.current;\r\n if (s.checkpoints.length === 0) {\r\n return { message: 'No checkpoints in this session yet.' };\r\n }\r\n dispatch({ type: 'rewindOverlayOpen' });\r\n return {};\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('rewind');\r\n };\r\n }, [slashRegistry, handleRewindTo]);\r\n\r\n // `/agents` — bare `/agents` and `/agents monitor` toggle the overlay.\r\n // `/agents <id>` falls through to the CLI builtin (same-name registration\r\n // from the same 'core' owner is a no-op per SlashCommandRegistry semantics,\r\n // so we own the bare/monitor forms here and let the builtin handle IDs).\r\n useEffect(() => {\r\n const cmd = {\r\n name: 'agents',\r\n description: 'Toggle the agents monitor overlay.',\r\n async run(args: string) {\r\n const arg = args.trim().toLowerCase();\r\n if (!arg || arg === 'monitor') {\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n return { message: undefined };\r\n }\r\n // Any other arg falls through to the CLI builtin (same owner\r\n // 'core' re-registration = silently ignored). The builtin handles\r\n // onAgents UUID lookups and /agents on|off.\r\n return { message: undefined };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => { slashRegistry.unregister('agents'); };\r\n }, [slashRegistry]);\r\n\r\n // `/goal` is registered as a CLI builtin (packages/cli/src/slash-commands/\r\n // goal.ts) which handles both the preamble lock-in (the former TUI\r\n // behavior) and goal.json persistence for /autonomy eternal. The TUI\r\n // does NOT register its own /goal here — that would collide with the\r\n // builtin and throw \"already registered\" on mount.\r\n\r\n // Register the TUI-only `/model` command — opens a two-step picker\r\n // (provider → model). All work is local state mutation; the actual\r\n // switch fires only after the user confirms a model in step 2.\r\n useEffect(() => {\r\n if (!getPickableProviders || !switchProviderAndModel) return;\r\n const cmd = {\r\n name: 'model',\r\n aliases: ['provider', 'switch'],\r\n description: 'Pick a provider + model interactively (two-step).',\r\n async run() {\r\n const providers = await getPickableProviders();\r\n dispatch({ type: 'modelPickerOpen', providers });\r\n return { message: undefined };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('model');\r\n };\r\n }, [slashRegistry, getPickableProviders, switchProviderAndModel]);\r\n\r\n // Register the TUI-only `/autonomy` command — opens a single-step picker.\r\n // When the user types `/autonomy` with no arg, the picker appears.\r\n // If they type `/autonomy off` etc. with an arg, the CLI builtin handles it.\r\n useEffect(() => {\r\n if (!switchAutonomy) return;\r\n const cmd = {\r\n name: 'autonomy',\r\n aliases: ['auto'],\r\n description: 'Pick an autonomy mode interactively (picker).',\r\n async run() {\r\n dispatch({ type: 'autonomyPickerOpen', options: AUTONOMY_OPTIONS });\r\n return { message: undefined };\r\n },\r\n };\r\n slashRegistry.register(cmd);\r\n return () => {\r\n slashRegistry.unregister('autonomy');\r\n };\r\n }, [slashRegistry, switchAutonomy]);\r\n\r\n // Subscribe to provider streaming events.\r\n useEffect(() => {\r\n // Throttle stream delta DISPATCHES to reduce flicker — we batch into\r\n // React state at ~10fps. The full text is also written into\r\n // streamingTextRef synchronously on every delta, so `runBlocks` can\r\n // read the complete stream when `agent.run` returns without racing\r\n // the throttle's last unflushed batch.\r\n const FLUSH_MS = 100;\r\n const flush = () => {\r\n if (pendingDeltaRef.current) {\r\n dispatch({ type: 'streamDelta', delta: pendingDeltaRef.current });\r\n pendingDeltaRef.current = '';\r\n }\r\n flushTimerRef.current = null;\r\n };\r\n const offDelta = events.on('provider.text_delta', (e) => {\r\n // Strip any bracketed-paste DCS sequences that some providers echo\r\n // into the stream. They are invisible in a real terminal but appear as\r\n // junk text if Ink's raw rendering catches them. The ESC byte is\r\n // matched optionally — a stripped/split ESC would otherwise leave a\r\n // bare `[200~` in the rendered text (same failure as the input path).\r\n // biome-ignore lint/suspicious/noControlCharactersInRegex: bracketed paste escape sequences are intentional\r\n const text = e.text.replace(/\\x1b?\\[200~|\\x1b?\\[201~/g, '');\r\n streamingTextRef.current += text;\r\n pendingDeltaRef.current += text;\r\n if (!flushTimerRef.current) flushTimerRef.current = setTimeout(flush, FLUSH_MS);\r\n });\r\n const offToolStart = events.on('tool.started', (e) => {\r\n dispatch({ type: 'toolStarted', id: e.id, name: e.name });\r\n dispatch({ type: 'leaderToolStart', name: e.name });\r\n });\r\n const offIterStart = events.on('iteration.started', () => {\r\n dispatch({ type: 'leaderIterStart' });\r\n });\r\n const offIterEnd = events.on('iteration.completed', () => {\r\n dispatch({ type: 'leaderIterEnd' });\r\n });\r\n const offToolProgress = events.on('tool.progress', (e) => {\r\n // Only `partial_output` becomes the live tail. Other event kinds\r\n // (`log`, `warning`, `metric`, `file_changed`) are deliberately not\r\n // rendered here — they pile up too fast and would steal screen real\r\n // estate from the assistant text. They still flow through EventBus\r\n // for observability/metrics consumers.\r\n if (e.event.type !== 'partial_output' || !e.event.text) return;\r\n dispatch({\r\n type: 'toolStreamAppend',\r\n toolUseId: e.id,\r\n name: e.name,\r\n text: e.event.text,\r\n startedAt: Date.now(),\r\n });\r\n });\r\n const offTool = events.on('tool.executed', (e) => {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'tool',\r\n name: e.name,\r\n durationMs: e.durationMs,\r\n ok: e.ok,\r\n input: e.input,\r\n output: e.output,\r\n // Real model-visible sizes — forwarded so the size chip beside\r\n // the tool header can show what the model paid for instead of\r\n // the misleading preview-byte count we used to surface.\r\n outputBytes: e.outputBytes,\r\n outputTokens: e.outputTokens,\r\n outputLines: e.outputLines,\r\n },\r\n });\r\n // `tool.executed` has no tool_use id; the reducer falls back to\r\n // clearing the oldest running entry that matches this name.\r\n dispatch({ type: 'toolEnded', name: e.name });\r\n // Clear the live tail for this tool — the final entry is now in\r\n // <Static>, no need to keep mirroring it below.\r\n dispatch({ type: 'toolStreamClear', name: e.name });\r\n // Mirror into the leader-only counter so the AgentsMonitor's LEADER\r\n // row stays live even when no subagents exist.\r\n dispatch({ type: 'leaderToolEnd', name: e.name, ok: e.ok, durationMs: e.durationMs });\r\n // Echo the current todo list into chat whenever the `todo` tool\r\n // mutates ctx.todos — same format as `/todos list`. Snapshotted from\r\n // agent.ctx.todos at this point (the tool executor has already\r\n // applied the mutation by the time tool.executed fires).\r\n if (e.ok && e.name === 'todo') {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: formatTodosList(agent.ctx.todos) },\r\n });\r\n }\r\n });\r\n const offRetry = events.on('provider.retry', (e) => {\r\n const secs = (e.delayMs / 1000).toFixed(e.delayMs >= 1000 ? 1 : 2);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: `⟳ retry ${e.attempt} in ${secs}s — ${e.description}` },\r\n });\r\n });\r\n const offProvErr = events.on('provider.error', (e) => {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: e.description },\r\n });\r\n });\r\n // Per-iteration text flush. Without this, the entire run buffers all text\r\n // deltas in the live tail box and dumps them into history as ONE assistant\r\n // entry only after `agent.run()` returns. Tool results, in contrast, land\r\n // in history immediately via `tool.executed` — so a multi-iteration turn\r\n // renders as \"all tools, then a wall of text\" instead of the natural\r\n // text → tool → text → tool interleaving that matches the actual stream.\r\n //\r\n // We hook `provider.response` (fires once per LLM call, both for\r\n // intermediate `tool_use` stops and the final `end_turn`) and commit\r\n // whatever has accumulated in `streamingTextRef` as an assistant history\r\n // entry. The next iteration's deltas start a fresh buffer. `runBlocks`\r\n // becomes purely the loop driver — it no longer adds the assistant entry,\r\n // since the per-iteration flushes have already done so.\r\n const offProvResp = events.on('provider.response', () => {\r\n const text = streamingTextRef.current;\r\n streamingTextRef.current = '';\r\n pendingDeltaRef.current = '';\r\n if (flushTimerRef.current) {\r\n clearTimeout(flushTimerRef.current);\r\n flushTimerRef.current = null;\r\n }\r\n dispatch({ type: 'streamReset' });\r\n if (text.trim()) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'assistant', text } });\r\n }\r\n });\r\n const offConfirmNeeded = events.on('tool.confirm_needed', (e) => {\r\n // Only show the ConfirmPrompt component — no duplicate history entry needed.\r\n // The full ConfirmPrompt with y/n/a/d keys is rendered below;\r\n // the history placeholder was redundant.\r\n dispatch({\r\n type: 'confirmOpen',\r\n info: {\r\n toolUseId: e.toolUseId,\r\n toolName: e.tool.name,\r\n input: e.input,\r\n suggestedPattern: e.suggestedPattern,\r\n resolve: e.resolve,\r\n },\r\n });\r\n });\r\n const offTrustPersisted = events.on('trust.persisted', (e) => {\r\n const icon = e.decision === 'always' ? '✓' : '✗';\r\n const label = e.decision === 'always' ? 'always allowed' : 'denied';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `${icon} ${label}: ${e.tool}(${e.pattern})`,\r\n },\r\n });\r\n });\r\n return () => {\r\n offDelta();\r\n offToolStart();\r\n offIterStart();\r\n offIterEnd();\r\n offToolProgress();\r\n offTool();\r\n offRetry();\r\n offProvErr();\r\n offProvResp();\r\n offConfirmNeeded();\r\n offTrustPersisted();\r\n if (flushTimerRef.current) clearTimeout(flushTimerRef.current);\r\n };\r\n }, [events, agent.ctx.todos]);\r\n\r\n // Live mirror of `streamFleet` for the FleetBus listener below. The\r\n // listener is wired in a single mount-time effect so it doesn't tear\r\n // down per-state-change; a ref lets it read the current toggle value\r\n // on every event without re-subscribing.\r\n const streamFleetRef = useRef(state.streamFleet);\r\n useEffect(() => {\r\n streamFleetRef.current = state.streamFleet;\r\n }, [state.streamFleet]);\r\n\r\n // --- Subagent lifecycle entries (uniform for director + non-director) ---\r\n // Wired to EventBus, not FleetBus, so /spawn-agent runs (which don't\r\n // build a Director) also surface in the chat. The director path emits\r\n // the same events through `MultiAgentHost`, so this single listener\r\n // covers both modes and replaces the per-status history entry that\r\n // previously lived inside the director.on('task.completed') hook.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: labelFor is ref-stable (uses useRef)\r\n useEffect(() => {\r\n const offSpawned = events.on('subagent.spawned', (e) => {\r\n const lbl = labelFor(e.subagentId, e.name);\r\n dispatch({\r\n type: 'fleetSpawn',\r\n id: e.subagentId,\r\n name: e.name,\r\n provider: e.provider,\r\n model: e.model,\r\n transcriptPath: e.transcriptPath,\r\n });\r\n const where = e.provider && e.model ? `${e.provider}/${e.model}` : 'spawned';\r\n const desc = e.description ? ` — ${e.description.slice(0, 80)}` : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '▶',\r\n text: `${where}${desc}`,\r\n },\r\n });\r\n });\r\n const offStarted = events.on('subagent.task_started', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({ type: 'fleetStart', id: e.subagentId, taskId: e.taskId });\r\n const desc = e.description ? ` — ${e.description.slice(0, 80)}` : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '●',\r\n text: `task started${desc}`,\r\n },\r\n });\r\n });\r\n const offCompleted = events.on('subagent.task_completed', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({\r\n type: 'fleetDone',\r\n id: e.subagentId,\r\n status: e.status,\r\n iterations: e.iterations,\r\n toolCalls: e.toolCalls,\r\n });\r\n // Status-specific icon so timeout/stopped/failed are visually\r\n // distinct from a plain success. We now have a structured error\r\n // envelope with `kind` (e.g. `provider_rate_limit`,\r\n // `tool_failed`) — prefix the tail with `[kind]` so the user\r\n // sees the actual failure mode, not just \"✗ failed\" for every\r\n // breed of failure.\r\n const icon =\r\n e.status === 'success'\r\n ? '✓'\r\n : e.status === 'timeout'\r\n ? '⏱'\r\n : e.status === 'stopped'\r\n ? '⊘'\r\n : '✗';\r\n const errKind = e.error?.kind;\r\n const errMsg = e.error?.message;\r\n const errMsgTail = errMsg\r\n ? ` — ${errMsg.replace(/\\s+/g, ' ').slice(0, 100)}${errMsg.length > 100 ? '…' : ''}`\r\n : '';\r\n const errChip = errKind ? ` [${errKind}]` : '';\r\n const secs = (e.durationMs / 1000).toFixed(e.durationMs < 10_000 ? 1 : 0);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon,\r\n text: `${e.status} (${e.iterations} iter · ${e.toolCalls} tools · ${secs}s)${errChip}${errMsgTail}`,\r\n },\r\n });\r\n });\r\n // Budget pressure: subagent hit a soft limit and the coordinator\r\n // is auto-extending. Surface as a fleet warning so the user can see\r\n // \"⚡ agent#bug-hunter hitting tool_calls limit (350/400) — extending\".\r\n // Timeout-specific: never says \"extending\" since timeout is a pure\r\n // warning — the subagent just keeps running until it finishes.\r\n const offBudgetWarning = events.on('subagent.budget_warning', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({ type: 'fleetBudgetWarning', id: e.subagentId, kind: e.kind, used: e.used, limit: e.limit });\r\n const timeoutSuffix = e.kind === 'timeout' ? ' (subagent continues running)' : ' — extending';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '⚡',\r\n text: `hitting ${e.kind} limit (${e.used}/${e.limit})${timeoutSuffix}`,\r\n },\r\n });\r\n });\r\n // Granted extension — bump the persistent ⚡×N badge and log the grant\r\n // so the chat history shows the never-die handshake completing.\r\n const offBudgetExtended = events.on('subagent.budget_extended', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({ type: 'fleetBudgetExtended', id: e.subagentId, totalExtensions: e.totalExtensions });\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '⚡',\r\n text: `extended ${e.kind} → ${e.newLimit} (×${e.totalExtensions})`,\r\n },\r\n });\r\n });\r\n // Periodic progress snapshot so the user can see what each subagent\r\n // is doing in the main chat history without opening the FleetPanel.\r\n // Format: \"AGENT#2 💬 L25 · 47 tools · $0.023 · doing bash...\"\r\n const offIterationSummary = events.on('subagent.iteration_summary', (e) => {\r\n const lbl = labelFor(e.subagentId);\r\n const costStr = e.costUsd > 0 ? ` · ${e.costUsd.toFixed(3)}` : '';\r\n const toolStr = e.currentTool ? ` · doing ${e.currentTool}` : '';\r\n const partial = e.partialText ? ` · \"${e.partialText.slice(0, 60)}${e.partialText.length > 60 ? '…' : ''}\"` : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '💬',\r\n text: `L${e.iteration} · ${e.toolCalls} tools${costStr}${toolStr}${partial}`,\r\n },\r\n });\r\n });\r\n // Live context window fill: update ctxPct on the fleet entry so the\r\n // AgentsMonitor (Ctrl+G) can render a per-agent progress bar.\r\n // In director mode, MultiAgentHost forwards subagent ctx.pct events as\r\n // 'subagent.ctx_pct' with subagentId. The leader agent emits ctx.pct\r\n // directly (handled by a separate listener below for non-director mode).\r\n const offCtxPct = events.on('subagent.ctx_pct', (e) => {\r\n dispatch({\r\n type: 'fleetCtxPct',\r\n id: e.subagentId,\r\n load: e.load,\r\n tokens: e.tokens,\r\n maxContext: e.maxContext,\r\n });\r\n });\r\n // Leader agent ctx.pct: emitted directly on the host EventBus (not forwarded\r\n // by MultiAgentHost). Updates the dedicated leader state for the monitor.\r\n const offLeaderCtxPct = events.on('ctx.pct', (e) => {\r\n dispatch({\r\n type: 'leaderCtxPct',\r\n load: e.load,\r\n tokens: e.tokens,\r\n maxContext: e.maxContext,\r\n });\r\n });\r\n // Always-on per-tool state surface. Now fires in both director and\r\n // non-director modes, so the leader's chat history shows subagent\r\n // tool calls regardless of mode. Director mode also gets FleetBus\r\n // path for richer FleetPanel streaming.\r\n const offTool = events.on('subagent.tool_executed', (e) => {\r\n dispatch({\r\n type: 'fleetTool',\r\n id: e.subagentId,\r\n name: e.name,\r\n ok: e.ok,\r\n durationMs: e.durationMs,\r\n outputBytes: e.outputBytes,\r\n });\r\n dispatch({ type: 'fleetToolEnd', id: e.subagentId });\r\n });\r\n return () => {\r\n offSpawned();\r\n offStarted();\r\n offCompleted();\r\n offBudgetWarning();\r\n offBudgetExtended();\r\n offIterationSummary();\r\n offCtxPct();\r\n offLeaderCtxPct();\r\n offTool();\r\n };\r\n }, [events, director]);\r\n\r\n // Checkpoint and session rewind event listeners — no director required.\r\n // eslint-disable-next-line react-hooks/exhaustive-deps -- onClearHistory is stable\r\n useEffect(() => {\r\n const offCheckpoint = events.on('checkpoint.written', (e) => {\r\n dispatch({\r\n type: 'checkpointReceived',\r\n cp: {\r\n promptIndex: e.promptIndex,\r\n promptPreview: e.promptPreview,\r\n ts: e.ts,\r\n fileCount: e.fileCount,\r\n },\r\n });\r\n });\r\n const offRewound = events.on('session.rewound', (_e) => {\r\n dispatch({ type: 'sessionRewound', toPromptIndex: 0 });\r\n dispatch({ type: 'clearHistory' });\r\n if (onClearHistory) {\r\n onClearHistory(dispatch);\r\n }\r\n });\r\n return () => {\r\n offCheckpoint();\r\n offRewound();\r\n };\r\n }, [events, onClearHistory]);\r\n\r\n // --- AutoPhase phase/task events → PhaseMonitor ---\r\n useEffect(() => {\r\n if (!subscribeAutoPhase) return;\r\n\r\n const handler = (event: string, payload: unknown) => {\r\n switch (event) {\r\n case 'phase.started': {\r\n const p = payload as { phaseId: string; name: string };\r\n dispatch({ type: 'autoPhasePhaseUpdate', phaseId: p.phaseId, name: p.name, status: 'running', completedTasks: 0, totalTasks: 0, startedAt: Date.now() });\r\n break;\r\n }\r\n case 'phase.completed': {\r\n const p = payload as { phaseId: string; name: string; durationMs: number };\r\n dispatch({ type: 'autoPhasePhaseUpdate', phaseId: p.phaseId, name: p.name, status: 'completed', completedTasks: 0, totalTasks: 0 });\r\n break;\r\n }\r\n case 'phase.failed': {\r\n const p = payload as { phaseId: string; name: string; error?: string };\r\n dispatch({ type: 'autoPhasePhaseUpdate', phaseId: p.phaseId, name: p.name, status: 'failed', completedTasks: 0, totalTasks: 0 });\r\n break;\r\n }\r\n case 'phase.statusChange': {\r\n const p = payload as { phaseId: string; name: string; from: string; to: string };\r\n const status = p.to === 'running' ? 'running' : p.to;\r\n dispatch({ type: 'autoPhasePhaseUpdate', phaseId: p.phaseId, name: p.name, status, completedTasks: 0, totalTasks: 0 });\r\n break;\r\n }\r\n case 'phase.taskCompleted': {\r\n const p = payload as { phaseId: string; taskId: string; taskTitle: string };\r\n const existing = stateRef.current.autoPhase?.phases[p.phaseId];\r\n if (existing) {\r\n dispatch({\r\n type: 'autoPhasePhaseUpdate',\r\n phaseId: p.phaseId,\r\n name: existing.name,\r\n status: existing.status,\r\n completedTasks: existing.completedTasks + 1,\r\n totalTasks: existing.totalTasks,\r\n });\r\n }\r\n break;\r\n }\r\n case 'autonomous.tick': {\r\n const p = payload as { activePhases: Array<{ id: string }>; queuedPhases: Array<{ id: string }> };\r\n dispatch({ type: 'autoPhaseRunningPhases', phaseIds: p.activePhases.map((ph) => ph.id) });\r\n // Update elapsed time\r\n const ap = stateRef.current.autoPhase;\r\n if (ap) {\r\n const firstPhase = ap.phases[Object.keys(ap.phases)[0] ?? ''];\r\n const elapsed = ap.elapsedMs > 0 ? ap.elapsedMs + 1000 : Date.now() - (firstPhase?.startedAt ?? Date.now());\r\n dispatch({ type: 'autoPhaseElapsed', ms: elapsed });\r\n }\r\n break;\r\n }\r\n case 'graph.completed': {\r\n dispatch({ type: 'autoPhaseReset' });\r\n break;\r\n }\r\n case 'graph.failed': {\r\n dispatch({ type: 'autoPhaseReset' });\r\n break;\r\n }\r\n case 'worktree.allocated': {\r\n const p = payload as { handleId: string; ownerLabel: string; branch: string; baseBranch: string };\r\n dispatch({\r\n type: 'worktreeUpsert',\r\n handleId: p.handleId,\r\n baseBranch: p.baseBranch,\r\n row: { branch: p.branch, ownerLabel: p.ownerLabel, baseBranch: p.baseBranch, status: 'active', allocatedAt: Date.now() },\r\n });\r\n break;\r\n }\r\n case 'worktree.committed': {\r\n const p = payload as { handleId: string; insertions: number; deletions: number; files: number };\r\n dispatch({\r\n type: 'worktreeUpsert',\r\n handleId: p.handleId,\r\n row: { insertions: p.insertions, deletions: p.deletions, files: p.files, status: 'committing' },\r\n });\r\n break;\r\n }\r\n case 'worktree.merged': {\r\n const p = payload as { handleId: string };\r\n dispatch({ type: 'worktreeUpsert', handleId: p.handleId, row: { status: 'merged' } });\r\n break;\r\n }\r\n case 'worktree.conflict': {\r\n const p = payload as { handleId: string; conflictFiles: string[] };\r\n dispatch({ type: 'worktreeUpsert', handleId: p.handleId, row: { status: 'needs-review', conflictFiles: p.conflictFiles } });\r\n break;\r\n }\r\n case 'worktree.failed': {\r\n const p = payload as { handleId: string };\r\n dispatch({ type: 'worktreeUpsert', handleId: p.handleId, row: { status: 'failed' } });\r\n break;\r\n }\r\n case 'worktree.released': {\r\n const p = payload as { handleId: string; kept: boolean };\r\n // Keep conflicted/failed (kept) worktrees visible; drop clean ones.\r\n if (!p.kept) dispatch({ type: 'worktreeRemove', handleId: p.handleId });\r\n break;\r\n }\r\n }\r\n };\r\n\r\n return subscribeAutoPhase(handler);\r\n }, [subscribeAutoPhase]);\r\n\r\n // --- Leader agent compaction events → chat history ---\r\n useEffect(() => {\r\n const offFired = events.on('compaction.fired', (e) => {\r\n const { level, tokens, load, maxContext, report } = e as {\r\n level: string;\r\n tokens: number;\r\n load: number;\r\n maxContext: number;\r\n report: { before: number; after: number; reductions: { phase: string; saved: number }[] };\r\n aggressive: boolean;\r\n };\r\n const pct = (load * 100).toFixed(0);\r\n const before = report.before;\r\n const after = report.after;\r\n const saved = before - after;\r\n // `tokens` / `load` come from the middleware's full-request estimator\r\n // (messages + system + tools); `report.before` is the compactor's\r\n // message-only count. They are different views of the same moment, so\r\n // label them explicitly to avoid the \"98k tokens but 73% load?\" confusion.\r\n if (saved <= 0) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `▸ compaction skipped at ${level} — load ${pct}% (${tokens.toLocaleString()} of ${maxContext.toLocaleString()} tok). preserveK protects recent turns; nothing to elide.`,\r\n },\r\n });\r\n return;\r\n }\r\n const table = [\r\n `▸ context compacted at ${level} — load ${pct}% (${tokens.toLocaleString()} of ${maxContext.toLocaleString()} tok, full request)`,\r\n ` msg tokens before ${before.toLocaleString().padStart(8)}`,\r\n ` msg tokens after ${after.toLocaleString().padStart(8)}`,\r\n ` saved ${saved.toLocaleString().padStart(8)} (${((saved / before) * 100).toFixed(1)}%)`,\r\n ];\r\n for (const line of table) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'info', text: line } });\r\n }\r\n });\r\n const offFailed = events.on('compaction.failed', (e) => {\r\n const { level, load, maxContext, fatal } = e as { level: string; load: number; maxContext: number; fatal: boolean };\r\n const pct = (load * 100).toFixed(0);\r\n const text = fatal\r\n ? `✗ compaction failed at ${level} — load ${pct}% of ${maxContext.toLocaleString()} tok — FATAL`\r\n : `⚠ compaction failed at ${level} — load ${pct}% of ${maxContext.toLocaleString()} tok — continuing`;\r\n dispatch({ type: 'addEntry', entry: { kind: fatal ? 'error' : 'warn', text } });\r\n });\r\n return () => {\r\n offFired();\r\n offFailed();\r\n };\r\n }, [events]);\r\n\r\n // Install a dispatch-backed setter into the shared controller so the\r\n // `/fleet stream on|off` slash command can flip our reducer flag.\r\n // Restored to a noop on unmount so a late-arriving slash callback\r\n // doesn't dispatch into a torn-down React tree.\r\n useEffect(() => {\r\n if (!fleetStreamController) return;\r\n fleetStreamController.enabled = state.streamFleet;\r\n fleetStreamController.setEnabled = (enabled: boolean) => {\r\n dispatch({ type: 'setStreamFleet', enabled });\r\n };\r\n return () => {\r\n fleetStreamController.setEnabled = (enabled: boolean) => {\r\n fleetStreamController.enabled = enabled;\r\n };\r\n };\r\n }, [fleetStreamController, state.streamFleet]);\r\n\r\n // Keep the controller's mirror of `enabled` in sync when the toggle is\r\n // flipped from a TUI-side path (not the slash command).\r\n useEffect(() => {\r\n if (fleetStreamController) fleetStreamController.enabled = state.streamFleet;\r\n }, [state.streamFleet, fleetStreamController]);\r\n\r\n // Install a dispatch-backed setter into the shared controller so the\r\n // `/agents on|off` slash command can toggle our overlay flag.\r\n // Restored to a noop on unmount so a late-arriving slash callback\r\n // doesn't dispatch into a torn-down React tree.\r\n useEffect(() => {\r\n if (!agentsMonitorController) return;\r\n agentsMonitorController.visible = state.agentsMonitorOpen;\r\n agentsMonitorController.setVisible = (visible: boolean) => {\r\n if (visible !== state.agentsMonitorOpen) {\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n }\r\n };\r\n return () => {\r\n agentsMonitorController.setVisible = (visible: boolean) => {\r\n agentsMonitorController.visible = visible;\r\n };\r\n };\r\n }, [agentsMonitorController, state.agentsMonitorOpen]);\r\n\r\n // Keep the controller's mirror of `visible` in sync when the toggle is\r\n // flipped from a TUI-side path (not the slash command).\r\n useEffect(() => {\r\n if (agentsMonitorController) agentsMonitorController.visible = state.agentsMonitorOpen;\r\n }, [state.agentsMonitorOpen, agentsMonitorController]);\r\n\r\n // Track double-Esc for input buffer clearing.\r\n const lastEscAtRef = useRef(0);\r\n const ESC_DOUBLE_PRESS_MS = 1000;\r\n\r\n // --- FleetBus → TUI dispatch bridge ---\r\n // Subscribes to every event on the director's FleetBus and dispatches\r\n // fleet state actions. Text deltas are throttled (FLUSH_MS) to avoid\r\n // flooding React re-renders; other events dispatch immediately.\r\n // Seeds initial fleet state from director.status() on mount so the\r\n // panel reflects subagents spawned before the TUI attached.\r\n // biome-ignore lint/correctness/useExhaustiveDependencies: labelFor is ref-stable\r\n useEffect(() => {\r\n const d = director;\r\n if (!d) return;\r\n const FLUSH_MS = 150;\r\n\r\n // Per-agent buffered assistant text. Flushed as one `subagent`\r\n // history entry when the agent stops emitting deltas for FLUSH_MS,\r\n // so we don't fire a fresh history entry on every token.\r\n const streamBuf = new Map<string, string>();\r\n let streamFlushTimer: ReturnType<typeof setTimeout> | null = null;\r\n const flushStreamBufs = () => {\r\n for (const [id, text] of streamBuf) {\r\n const trimmed = text.trim();\r\n if (!trimmed) continue;\r\n const lbl = labelFor(id);\r\n dispatch({ type: 'fleetMessage', id, text: trimmed });\r\n if (streamFleetRef.current) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '💬',\r\n text: trimmed,\r\n },\r\n });\r\n }\r\n }\r\n streamBuf.clear();\r\n streamFlushTimer = null;\r\n };\r\n\r\n // Seed: discover already-spawned subagents from the coordinator.\r\n const status = d.status();\r\n for (const s of status.subagents) {\r\n const meta = d.getSubagentMeta(s.id);\r\n dispatch({\r\n type: 'fleetSpawn',\r\n id: s.id,\r\n name: meta?.name ?? s.name,\r\n provider: meta?.provider,\r\n model: meta?.model,\r\n });\r\n // Seed a stable label so subagents spawned before TUI mount still\r\n // show up by name in the status bar's per-agent detail line.\r\n labelFor(s.id, meta?.name ?? s.name);\r\n }\r\n // Also seed cost from the usage aggregator.\r\n dispatch({ type: 'fleetCost', cost: d.snapshot().total.cost, input: d.snapshot().total.input, output: d.snapshot().total.output });\r\n\r\n // Discover new subagents on first FleetBus event for an unknown id.\r\n const seen = new Set(Object.keys(status.subagents));\r\n\r\n // Throttled delta accumulator per subagent.\r\n const pending = new Map<string, string>();\r\n let flushTimer: ReturnType<typeof setTimeout> | null = null;\r\n const doFlush = () => {\r\n for (const [id, text] of pending) {\r\n if (text) dispatch({ type: 'fleetDelta', id, text });\r\n }\r\n pending.clear();\r\n flushTimer = null;\r\n };\r\n\r\n const offFleet = d.fleet.onAny((e: FleetEvent) => {\r\n // Discover new subagents.\r\n const fresh = !seen.has(e.subagentId);\r\n if (fresh) {\r\n seen.add(e.subagentId);\r\n const meta = d.getSubagentMeta(e.subagentId);\r\n dispatch({\r\n type: 'fleetSpawn',\r\n id: e.subagentId,\r\n name: meta?.name,\r\n provider: meta?.provider,\r\n model: meta?.model,\r\n });\r\n // Always assign a label on first sighting so the status bar's\r\n // 4th line has stable AGENT#N names even when history streaming\r\n // is disabled. The history `spawned` entry below is gated on\r\n // streamFleet; label assignment itself is unconditional.\r\n const lbl = labelFor(e.subagentId, meta?.name);\r\n if (streamFleetRef.current) {\r\n const where =\r\n meta?.provider && meta?.model ? `${meta.provider}/${meta.model}` : 'spawned';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '▶',\r\n text: where,\r\n },\r\n });\r\n }\r\n }\r\n\r\n switch (e.type) {\r\n case 'iteration.started':\r\n dispatch({ type: 'fleetStart', id: e.subagentId });\r\n break;\r\n case 'session.started':\r\n // First event a subagent emits — treat as start so the fleet\r\n // panel is populated even if no iteration.started fires yet.\r\n dispatch({ type: 'fleetStart', id: e.subagentId });\r\n break;\r\n case 'provider.text_delta': {\r\n const p = e.payload as { text?: string };\r\n if (p?.text) {\r\n const cur = pending.get(e.subagentId) ?? '';\r\n pending.set(e.subagentId, cur + p.text);\r\n if (!flushTimer) flushTimer = setTimeout(doFlush, FLUSH_MS);\r\n streamBuf.set(e.subagentId, (streamBuf.get(e.subagentId) ?? '') + p.text);\r\n if (streamFlushTimer) clearTimeout(streamFlushTimer);\r\n streamFlushTimer = setTimeout(flushStreamBufs, FLUSH_MS * 4);\r\n }\r\n break;\r\n }\r\n case 'provider.thinking_delta': {\r\n // Extended thinking output — same buffering as text_delta so\r\n // it gets flushed into recentMessages and (when streaming is\r\n // on) injected into leader history.\r\n const p = e.payload as { text?: string };\r\n if (p?.text) {\r\n streamBuf.set(e.subagentId, (streamBuf.get(e.subagentId) ?? '') + p.text);\r\n if (streamFlushTimer) clearTimeout(streamFlushTimer);\r\n streamFlushTimer = setTimeout(flushStreamBufs, FLUSH_MS * 4);\r\n }\r\n break;\r\n }\r\n case 'provider.retry': {\r\n const p = e.payload as { attempt?: number; delayMs?: number };\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `subagent retry ${p?.attempt ?? '?'}${p?.delayMs ? ` (${p.delayMs}ms)` : ''}`,\r\n },\r\n });\r\n break;\r\n }\r\n case 'provider.error': {\r\n const p = e.payload as { description?: string };\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'error',\r\n text: `subagent error${p?.description ? `: ${p.description}` : ''}`,\r\n },\r\n });\r\n break;\r\n }\r\n case 'tool.started': {\r\n const p = e.payload as { name?: string };\r\n if (p?.name) {\r\n dispatch({ type: 'fleetToolStart', id: e.subagentId, name: p.name });\r\n }\r\n break;\r\n }\r\n case 'tool.executed': {\r\n const p = e.payload as {\r\n name?: string;\r\n ok?: boolean;\r\n durationMs?: number;\r\n outputBytes?: number;\r\n outputLines?: number;\r\n };\r\n dispatch({\r\n type: 'fleetTool',\r\n id: e.subagentId,\r\n name: p?.name,\r\n ok: p?.ok,\r\n durationMs: p?.durationMs,\r\n outputBytes: p?.outputBytes,\r\n outputLines: p?.outputLines,\r\n });\r\n dispatch({ type: 'fleetToolEnd', id: e.subagentId });\r\n // Also inject into leader chat history when stream is enabled.\r\n if (streamFleetRef.current && p?.name) {\r\n const lbl = labelFor(e.subagentId);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'subagent',\r\n agentLabel: lbl.label,\r\n agentColor: lbl.color,\r\n icon: '🔧',\r\n text: `→ ${p.name} ${p.ok === false ? '✗' : '✓'}${p.durationMs != null ? ` (${p.durationMs}ms)` : ''}`,\r\n },\r\n });\r\n }\r\n break;\r\n }\r\n case 'provider.response': {\r\n // Surface live cost from the aggregator (already computed with\r\n // per-model pricing).\r\n dispatch({ type: 'fleetCost', cost: d.snapshot().total.cost, input: d.snapshot().total.input, output: d.snapshot().total.output });\r\n break;\r\n }\r\n case 'session.ended':\r\n // Subagent finished — leave status update to task.completed.\r\n break;\r\n case 'compaction.fired':\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: 'subagent compaction triggered' },\r\n });\r\n break;\r\n case 'compaction.failed':\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: 'subagent compaction failed' },\r\n });\r\n break;\r\n case 'token.threshold':\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: 'subagent token threshold reached' },\r\n });\r\n break;\r\n case 'budget.threshold_reached': {\r\n const p = e.payload as { kind?: string; used?: number; limit?: number };\r\n dispatch({\r\n type: 'fleetBudgetWarning',\r\n id: e.subagentId,\r\n kind: p?.kind ?? 'unknown',\r\n used: p?.used ?? 0,\r\n limit: p?.limit ?? 0,\r\n });\r\n break;\r\n }\r\n case 'budget.extended': {\r\n const p = e.payload as { totalExtensions?: number };\r\n if (p?.totalExtensions !== undefined) {\r\n dispatch({\r\n type: 'fleetBudgetExtended',\r\n id: e.subagentId,\r\n totalExtensions: p.totalExtensions,\r\n });\r\n }\r\n break;\r\n }\r\n // --- Collab session events ---\r\n case 'bug.found': {\r\n // Detect collab subagent role from subagentId: bug-hunter-<sid>,\r\n // refactor-planner-<sid>, critic-<sid>\r\n const role = e.subagentId.includes('bug-hunter')\r\n ? 'bug-hunter'\r\n : e.subagentId.includes('refactor-planner')\r\n ? 'refactor-planner'\r\n : e.subagentId.includes('critic')\r\n ? 'critic'\r\n : null;\r\n if (!role && !state.collabSession) {\r\n // Not a collab subagent — ignore.\r\n break;\r\n }\r\n if (!state.collabSession) {\r\n // First collab event we've seen — bootstrap state lazily.\r\n dispatch({ type: 'collabSubagentSpawned', subagentId: e.subagentId, role: role ?? 'unknown' });\r\n }\r\n const bp = e.payload as { finding?: { id?: string; severity?: string; description?: string } };\r\n if (bp?.finding) {\r\n const sessionId = e.subagentId.split('-').slice(1).join('-') || e.subagentId;\r\n dispatch({\r\n type: 'collabBugFound',\r\n sessionId,\r\n bugId: bp.finding.id ?? 'unknown',\r\n severity: bp.finding.severity ?? 'unknown',\r\n description: bp.finding.description ?? '',\r\n });\r\n }\r\n break;\r\n }\r\n case 'refactor.plan': {\r\n if (!state.collabSession) break;\r\n const pp = e.payload as { plan?: { id?: string; riskScore?: string; phases?: unknown[] } };\r\n if (pp?.plan) {\r\n const sessionId = e.subagentId.split('-').slice(1).join('-') || e.subagentId;\r\n dispatch({\r\n type: 'collabPlanEmitted',\r\n sessionId,\r\n planId: pp.plan.id ?? 'unknown',\r\n riskScore: pp.plan.riskScore ?? 'unknown',\r\n phaseCount: pp.plan.phases?.length ?? 0,\r\n });\r\n }\r\n break;\r\n }\r\n case 'critic.evaluation': {\r\n if (!state.collabSession) break;\r\n const ep = e.payload as { evaluation?: { id?: string; verdict?: string; score?: number } };\r\n if (ep?.evaluation) {\r\n const sessionId = e.subagentId.split('-').slice(1).join('-') || e.subagentId;\r\n dispatch({\r\n type: 'collabEvalComplete',\r\n sessionId,\r\n evalId: ep.evaluation.id ?? 'unknown',\r\n verdict: ep.evaluation.verdict ?? 'unknown',\r\n score: ep.evaluation.score ?? 0,\r\n });\r\n }\r\n break;\r\n }\r\n case 'collab.session_done': {\r\n // Emitted by the CollabSession itself (EventEmitter 'session.done').\r\n if (!state.collabSession) break;\r\n const dp = e.payload as { report?: { sessionId?: string; overallVerdict?: 'approve' | 'needs_revision' | 'reject' } };\r\n if (dp?.report) {\r\n dispatch({\r\n type: 'collabSessionDone',\r\n sessionId: dp.report.sessionId ?? state.collabSession.sessionId ?? 'unknown',\r\n verdict: dp.report.overallVerdict ?? 'needs_revision',\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n\r\n // Task completions arrive on the director's bus too, but the\r\n // history entry is now produced by the `subagent.task_completed`\r\n // EventBus listener (which fires uniformly for director and\r\n // non-director paths). Here we only update fleet panel state +\r\n // running cost — the chat-side entry would otherwise duplicate.\r\n const offDone = d.on('task.completed', (payload) => {\r\n dispatch({\r\n type: 'fleetDone',\r\n id: payload.result.subagentId,\r\n status: payload.result.status,\r\n iterations: payload.result.iterations,\r\n toolCalls: payload.result.toolCalls,\r\n });\r\n dispatch({ type: 'fleetCost', cost: d.snapshot().total.cost, input: d.snapshot().total.input, output: d.snapshot().total.output });\r\n // Drain any pending streaming text right before the completion\r\n // entry is committed by the EventBus listener so the order\r\n // \"chat → done line\" stays correct.\r\n if (streamFlushTimer) {\r\n clearTimeout(streamFlushTimer);\r\n flushStreamBufs();\r\n }\r\n });\r\n\r\n return () => {\r\n offFleet();\r\n offDone();\r\n if (flushTimer) clearTimeout(flushTimer);\r\n doFlush(); // commit any pending deltas before cleanup\r\n if (streamFlushTimer) clearTimeout(streamFlushTimer);\r\n flushStreamBufs();\r\n };\r\n }, [director]);\r\n\r\n // Handle SIGINT as a three-stage escalation:\r\n // 1st press — stop work and stay at the prompt: cancel the foreground\r\n // run + kill the fleet, OR (in autonomy / background-only mode) halt\r\n // the engines + terminate the fleet. Pickers cancel instead.\r\n // 2nd press — exit: graceful Ink unmount (restores the terminal) with a\r\n // hard-exit fallback timer in case the React tree is wedged.\r\n // 3rd press — immediate process.exit, so a wedged Ink loop can't trap\r\n // the user.\r\n useEffect(() => {\r\n const onSigint = () => {\r\n const current = stateRef.current;\r\n // Second (or later) Ctrl+C — exit no matter what. Status may be\r\n // 'aborting', 'running', or 'streaming'; the user has clearly\r\n // decided they want out. Try Ink's graceful exit first, then\r\n // hard-exit on a short timer in case the React tree is wedged.\r\n if (current.interrupts >= 1) {\r\n // Second (or later) Ctrl+C — the user wants out. Force-kill tracked\r\n // processes regardless of state.\r\n getProcessRegistry().killAll({ force: true });\r\n // If we already asked Ink to unmount and the user pressed again, the\r\n // React tree is wedged — hard-exit immediately.\r\n if (exitRequestedRef.current) {\r\n process.exit(130);\r\n }\r\n exitRequestedRef.current = true;\r\n dispatch({ type: 'interrupt' });\r\n // Terminate any lingering fleet so subagents don't outlive the TUI.\r\n if (director) void director.terminateAll().catch(() => undefined);\r\n // Graceful Ink unmount first: it restores the terminal (raw mode off,\r\n // cursor shown, alt-screen dismantled) and routes the 130 exit code\r\n // through run-tui's settle(). A bare process.exit() here would skip\r\n // that and can leave the terminal in raw mode — the \"exit feels\r\n // broken\" symptom. Fall back to a hard exit if Ink never unmounts.\r\n onExit(130);\r\n exit();\r\n const hardExit = setTimeout(() => process.exit(130), 400);\r\n hardExit.unref?.();\r\n return;\r\n }\r\n dispatch({ type: 'interrupt' });\r\n\r\n // Pickers are safe to cancel outright — closing the overlay\r\n // restores the previous state cleanly with no side-effects.\r\n // Do this first so a single Ctrl+C from the model picker or\r\n // slash picker exits gracefully instead of doing nothing.\r\n if (current.modelPicker.open) {\r\n dispatch({ type: 'modelPickerClose' });\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: 'Model picker cancelled.' },\r\n });\r\n return;\r\n }\r\n if (current.slashPicker.open) {\r\n dispatch({ type: 'slashPickerClose' });\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: 'Cancelled.' },\r\n });\r\n return;\r\n }\r\n\r\n if (activeCtrlRef.current) {\r\n activeCtrlRef.current.abort();\r\n dispatch({ type: 'status', status: 'aborting' });\r\n // Kill every running subagent on the first interrupt — without\r\n // this the parent agent.run() stays parked in `await delegate\r\n // → director.awaitTasks` forever and the \"press again to exit\"\r\n // hint becomes a lie.\r\n //\r\n // We `await` terminateAll AND race a 1500ms cap so a stuck\r\n // bridge or hung tool can't trap us in cleanup — the user\r\n // pressed Ctrl+C; their patience is finite. The second\r\n // Ctrl+C still forces exit immediately via the path above,\r\n // so this race only matters for the polite-shutdown window.\r\n if (director) {\r\n const cap = new Promise<void>((resolve) => {\r\n const t = setTimeout(resolve, 1500);\r\n t.unref?.();\r\n });\r\n void Promise.race([director.terminateAll().catch(() => undefined), cap]);\r\n }\r\n // Kill all tracked bash/exec processes from the process registry.\r\n // This ensures runaway child processes (including background bashes\r\n // that outlive the agent iteration) are cleaned up on Ctrl+C.\r\n const killed = getProcessRegistry().killAll();\r\n const procTag = killed.length > 0 ? ` + killed ${killed.length} process${killed.length === 1 ? '' : 'es'}` : '';\r\n const droppedCount = stateRef.current.queue.length;\r\n if (droppedCount > 0) {\r\n dispatch({ type: 'queueClear' });\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `Iteration cancelled${director ? ' + fleet terminated' : ''}${procTag}. Dropped ${droppedCount} queued message${droppedCount === 1 ? '' : 's'}. Press Ctrl+C again to exit.`,\r\n },\r\n });\r\n } else {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `Iteration cancelled${director ? ' + fleet terminated' : ''}${procTag}. Press Ctrl+C again to exit.`,\r\n },\r\n });\r\n }\r\n } else {\r\n // No foreground (runBlocks) controller. We may still have background\r\n // work with no AbortController of its own: an autonomy engine driving\r\n // iterations, or a fleet of subagents. Eternal/parallel loops never\r\n // set activeCtrlRef, so this branch is the ONLY place their Ctrl+C is\r\n // handled — the first press must actually stop that work (and return\r\n // to the prompt), not merely announce \"press again to exit\".\r\n const fleetRunning = Object.values(current.fleet).filter(\r\n (e) => e.status === 'running',\r\n ).length;\r\n const autonomyRunning =\r\n eternalLoopRunningRef.current ||\r\n parallelLoopRunningRef.current ||\r\n getEternalEngine?.()?.currentState === 'running' ||\r\n getParallelEngine?.()?.currentState === 'running';\r\n if (autonomyRunning || fleetRunning > 0) {\r\n // Halt the engines first — eternal's stop() aborts the in-flight\r\n // iteration; both flip their persisted state to 'stopped'. Then\r\n // flip autonomy off so the driver loop won't start another\r\n // iteration, and terminate the fleet + tracked processes.\r\n getEternalEngine?.()?.stop();\r\n getParallelEngine?.()?.stop();\r\n if (autonomyRunning) switchAutonomy?.('off');\r\n if (director) {\r\n const cap = new Promise<void>((resolve) => {\r\n const t = setTimeout(resolve, 1500);\r\n t.unref?.();\r\n });\r\n void Promise.race([director.terminateAll().catch(() => undefined), cap]);\r\n }\r\n const killed = getProcessRegistry().killAll();\r\n const bits: string[] = [];\r\n if (autonomyRunning) bits.push('autonomy stopped');\r\n if (fleetRunning > 0)\r\n bits.push(`${fleetRunning} agent${fleetRunning === 1 ? '' : 's'} terminated`);\r\n if (killed.length > 0)\r\n bits.push(`${killed.length} process${killed.length === 1 ? '' : 'es'} killed`);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `${bits.join(' + ') || 'Background work stopped'}. Press Ctrl+C again to exit.`,\r\n },\r\n });\r\n return;\r\n }\r\n // Truly idle — nothing running. Kill any lingering processes and arm\r\n // the second-press exit.\r\n const killed = getProcessRegistry().killAll();\r\n const procTag = killed.length > 0 ? ` Killed ${killed.length} process${killed.length === 1 ? '' : 'es'}.` : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: `Press Ctrl+C again to exit.${procTag}` },\r\n });\r\n }\r\n };\r\n process.on('SIGINT', onSigint);\r\n return () => {\r\n process.off('SIGINT', onSigint);\r\n };\r\n }, [director, getEternalEngine, getParallelEngine, switchAutonomy, onExit, exit]);\r\n\r\n /** Truncate pasted content for history preview: first `lines` lines + \"...\" line if truncated. */\r\n const truncatePastePreview = (text: string, lines: number): string => {\r\n const all = text.split('\\n');\r\n if (all.length <= lines) return text;\r\n const head = all.slice(0, lines).join('\\n');\r\n return `${head}\\n... (${all.length - lines} more lines)`;\r\n };\r\n\r\n // Finalize a fully-assembled paste payload. A collapse-worthy paste (long\r\n // or many-lined) or any multi-line paste becomes a `[pasted #N] (N lines)`\r\n // pill above the input — the content lives in the InputBuilder and is\r\n // expanded at submit. A short single-line paste is inserted straight into\r\n // the editable row so the user can see and edit it; it must NOT also go\r\n // through the builder, or it would be duplicated when the draft buffer is\r\n // appended at submit.\r\n const commitPaste = async (full: string): Promise<void> => {\r\n const builder = builderRef.current;\r\n if (!builder || !full) return;\r\n if (builder.wouldCollapse(full) || full.includes('\\n')) {\r\n const lineCount = full.split('\\n').length;\r\n const ph = await builder.appendPaste(full);\r\n // Truncate long pastes for preview — first 6 lines + \"...\" indicator.\r\n const preview = truncatePastePreview(full, 6);\r\n dispatch({\r\n type: 'addPlaceholder',\r\n ph: `${ph ?? '[pasted]'} (${lineCount} lines)`,\r\n content: preview,\r\n });\r\n return;\r\n }\r\n const { buffer, cursor } = draftRef.current;\r\n const next = buffer.slice(0, cursor) + full + buffer.slice(cursor);\r\n setDraft(next, cursor + full.length);\r\n };\r\n\r\n const handleKey = async (input: string, key: KeyEvent) => {\r\n // Note: we no longer block input while the agent is running. Enter\r\n // routes through the queue when busy (see submit()), but typing,\r\n // backspace, paste, and clipboard-image all stay live.\r\n // Exception: when status is 'aborting', all input is blocked — except\r\n // Ctrl+C which the SIGINT handler processes directly (not through handleKey).\r\n // We check interrupts here so the second Ctrl+C can still reach the handler\r\n // even though status is 'aborting'.\r\n // Block input while aborting — unless the user is mid-steering\r\n // (they need to type their new direction) or already pressed Ctrl+C\r\n // twice (exit ladder takes priority). Ctrl+C SIGINT handler bypasses\r\n // handleKey entirely so it always fires regardless of this guard.\r\n if (state.status === 'aborting' && !state.steeringPending && state.interrupts === 0) return;\r\n // Block all input while confirmation prompt is shown — the ConfirmPrompt\r\n // component handles y/n/a/d/escape/enter itself and Input's disabled prop\r\n // is not reliable when multiple useInput hooks are active.\r\n if (state.confirmQueue.length > 0) return;\r\n\r\n // Re-entrancy guard: block stale-second events from \\r\\n terminals.\r\n if (inputGateRef.current) return;\r\n\r\n // ── Double-Esc clears input buffer ────────────────────────────────\r\n // When the user presses Esc twice within ESC_DOUBLE_PRESS_MS ms while\r\n // the buffer is non-empty, clear it. This mirrors the behaviour of bash's\r\n // Ctrl+C double-press clearing the line, adapted for Esc (no Ctrl needed).\r\n if (key.escape) {\r\n const now = Date.now();\r\n if (state.buffer.length > 0 && now - lastEscAtRef.current < ESC_DOUBLE_PRESS_MS) {\r\n dispatch({ type: 'clearInput' });\r\n lastEscAtRef.current = 0;\r\n return;\r\n }\r\n lastEscAtRef.current = now;\r\n }\r\n\r\n // ── Bracketed-paste accumulation ──────────────────────────────────\r\n // Must run before the Enter/key handling below: a paste split across\r\n // events can land a fragment that is exactly \"\\n\", which would\r\n // otherwise be read as Enter and submit mid-paste. The begin marker\r\n // (\\x1b[200~, or a bare [200~ when Ink ate the ESC) opens accumulation;\r\n // we swallow every fragment until the end marker (\\x1b[201~ / [201~),\r\n // then finalize the whole payload at once.\r\n if (input) {\r\n const paste = feedPaste(pasteAccumRef.current, input);\r\n if (paste) {\r\n pasteAccumRef.current = paste.accum;\r\n if (pasteFlushTimerRef.current) clearTimeout(pasteFlushTimerRef.current);\r\n if (paste.complete !== null) {\r\n pasteFlushTimerRef.current = null;\r\n await commitPaste(paste.complete);\r\n return;\r\n }\r\n pasteFlushTimerRef.current = setTimeout(() => {\r\n pasteFlushTimerRef.current = null;\r\n const full = pasteAccumRef.current;\r\n pasteAccumRef.current = null;\r\n if (full) void commitPaste(full);\r\n }, 250);\r\n return;\r\n }\r\n }\r\n\r\n // Some terminals emit \\r\\n for Enter as two separate stdin events.\r\n // \\r arrives with key.return=true (handled below); \\n may arrive as\r\n // a stray character with key.return=false. Normalize both to Enter\r\n // and prevent them from polluting the buffer as literal text.\r\n const isEnter = key.return || input === '\\r' || input === '\\n';\r\n\r\n // IMPORTANT: do NOT bail on `!input` here. Special keys (arrows,\r\n // Enter, Escape, Tab, Backspace) arrive with an empty `input`\r\n // string, and the slash/file pickers + cursor movement below all\r\n // depend on receiving those events. The late guard before text\r\n // insertion handles the empty-input case correctly.\r\n\r\n // Model picker takes absolute precedence: nothing else is meaningful\r\n // while the two-step overlay is open. Esc cancels (or backs out of\r\n // step 2 to step 1); Enter advances to the next step or confirms.\r\n if (state.modelPicker.open) {\r\n if (key.escape) {\r\n if (state.modelPicker.step === 'model') {\r\n dispatch({ type: 'modelPickerBack' });\r\n } else {\r\n dispatch({ type: 'modelPickerClose' });\r\n }\r\n return;\r\n }\r\n if (key.upArrow) {\r\n dispatch({ type: 'modelPickerMove', delta: -1 });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n dispatch({ type: 'modelPickerMove', delta: 1 });\r\n return;\r\n }\r\n if (isEnter) {\r\n inputGateRef.current = true;\r\n try {\r\n if (state.modelPicker.step === 'provider') {\r\n const opt = state.modelPicker.providerOptions[state.modelPicker.selected];\r\n if (!opt) return;\r\n dispatch({\r\n type: 'modelPickerPickProvider',\r\n providerId: opt.id,\r\n models: opt.models,\r\n });\r\n return;\r\n }\r\n // step === 'model' → commit the switch\r\n const providerId = state.modelPicker.pickedProviderId;\r\n const modelId = state.modelPicker.modelOptions[state.modelPicker.selected];\r\n if (!providerId || !modelId) return;\r\n const err = switchProviderAndModel?.(providerId, modelId);\r\n if (err) {\r\n dispatch({ type: 'modelPickerHint', text: err });\r\n return;\r\n }\r\n setLiveProvider(providerId);\r\n setLiveModel(modelId);\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'info', text: `Switched to ${providerId} / ${modelId}.` },\r\n });\r\n dispatch({ type: 'modelPickerClose' });\r\n return;\r\n } finally {\r\n inputGateRef.current = false;\r\n }\r\n }\r\n // Any other key while picker is open: ignore.\r\n return;\r\n }\r\n\r\n // Autonomy picker takes absolute precedence while open.\r\n if (state.autonomyPicker.open) {\r\n if (key.escape) {\r\n dispatch({ type: 'autonomyPickerClose' });\r\n return;\r\n }\r\n if (key.upArrow) {\r\n dispatch({ type: 'autonomyPickerMove', delta: -1 });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n dispatch({ type: 'autonomyPickerMove', delta: 1 });\r\n return;\r\n }\r\n if (isEnter) {\r\n const opt = state.autonomyPicker.options[state.autonomyPicker.selected];\r\n if (!opt) return;\r\n const err = switchAutonomy?.(opt.mode);\r\n if (err) {\r\n dispatch({ type: 'autonomyPickerHint', text: err });\r\n return;\r\n }\r\n dispatch({ type: 'autonomyPickerClose' });\r\n return;\r\n }\r\n return;\r\n }\r\n\r\n if (state.slashPicker.open) {\r\n if (key.escape) {\r\n dispatch({ type: 'slashPickerClose' });\r\n return;\r\n }\r\n if (key.upArrow) {\r\n dispatch({ type: 'slashPickerMove', delta: -1 });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n dispatch({ type: 'slashPickerMove', delta: 1 });\r\n return;\r\n }\r\n if (isEnter) {\r\n const now = Date.now();\r\n if (now - lastEnterAtRef.current < 50) return;\r\n lastEnterAtRef.current = now;\r\n inputGateRef.current = true;\r\n const line = selectedSlashCommandLine(state.slashPicker);\r\n if (line) {\r\n void submit(line);\r\n } else {\r\n acceptSlashPickerSelection();\r\n }\r\n inputGateRef.current = false;\r\n return;\r\n }\r\n // Tab → autocomplete with selected command\r\n if (key.tab && state.slashPicker.matches.length > 0) {\r\n const sel = state.slashPicker.matches[state.slashPicker.selected];\r\n if (sel) {\r\n setDraft(`/${sel.name} `, sel.name.length + 2);\r\n dispatch({ type: 'slashPickerClose' });\r\n }\r\n return;\r\n }\r\n // Any other key falls through to normal text handling.\r\n }\r\n\r\n // Picker takes precedence over normal input handling when open.\r\n if (state.picker.open) {\r\n if (key.escape) {\r\n dispatch({ type: 'pickerClose' });\r\n return;\r\n }\r\n if (key.upArrow) {\r\n dispatch({ type: 'pickerMove', delta: -1 });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n dispatch({ type: 'pickerMove', delta: 1 });\r\n return;\r\n }\r\n if (isEnter) {\r\n inputGateRef.current = true;\r\n try {\r\n await acceptPickerSelection();\r\n } finally {\r\n inputGateRef.current = false;\r\n }\r\n return;\r\n }\r\n // Any other key falls through to normal text handling, which will\r\n // either extend the @-query (e.g. typing more chars) or break it\r\n // (e.g. typing a space) — handled below.\r\n }\r\n\r\n // Esc when the agent is busy = \"drop what you're doing, I want to\r\n // steer\". Aborts the current iteration, terminates any running\r\n // subagents (otherwise they keep burning tokens on now-stale work),\r\n // and stashes a context snapshot so the STEERING preamble can tell\r\n // the model exactly what it was mid-doing. Does NOT consume the\r\n // Ctrl+C exit ladder (interrupts counter untouched). When no run\r\n // is active, Esc falls through to normal text handling.\r\n if (key.escape && state.status !== 'idle' && state.confirmQueue.length === 0) {\r\n // Snapshot context BEFORE we mutate anything. The submit handler\r\n // replays this into the model prompt so the model isn't guessing.\r\n const runningTools = Array.from(state.runningTools.values()).map((t) => t.name);\r\n const subagents = Object.values(state.fleet)\r\n .filter((e) => e.status === 'running')\r\n .map((e) => ({\r\n label: e.name,\r\n status: e.status,\r\n tool: e.currentTool?.name,\r\n }));\r\n const subagentsTerminated = subagents.length;\r\n const partialAssistantText = streamingTextRef.current.slice(-1500);\r\n\r\n activeCtrlRef.current?.abort();\r\n dispatch({ type: 'status', status: 'aborting' });\r\n dispatch({\r\n type: 'steerStart',\r\n snapshot: {\r\n runningTools,\r\n subagents,\r\n subagentsTerminated,\r\n partialAssistantText,\r\n },\r\n });\r\n\r\n // Kill the fleet too. Without this the subagents keep running\r\n // on the old direction, finish minutes later, and pollute the\r\n // chat with task.completed events the model doesn't care about\r\n // anymore. Cap at 1.5s so a wedged bridge can't hang the steer.\r\n if (director && subagentsTerminated > 0) {\r\n const cap = new Promise<void>((resolve) => {\r\n const t = setTimeout(resolve, 1500);\r\n t.unref?.();\r\n });\r\n void Promise.race([director.terminateAll().catch(() => undefined), cap]);\r\n }\r\n\r\n // Drop anything queued — steering means the user is redirecting,\r\n // not adding to the backlog. Without this the queued items would\r\n // run *before* the steering message, which contradicts the UX.\r\n const droppedCount = state.queue.length;\r\n if (droppedCount > 0) dispatch({ type: 'queueClear' });\r\n const droppedTag = droppedCount > 0 ? ` · dropped ${droppedCount} queued` : '';\r\n const fleetTag =\r\n subagentsTerminated > 0\r\n ? ` · stopped ${subagentsTerminated} subagent${subagentsTerminated === 1 ? '' : 's'}`\r\n : '';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'warn',\r\n text: `↯ Interrupted${droppedTag}${fleetTag}. Type your new direction.`,\r\n },\r\n });\r\n return;\r\n }\r\n\r\n // Ctrl+F toggles the full graphical fleet monitor overlay. Global —\r\n // works whether or not the agent is running, so the user can pop the\r\n // dashboard mid-run to watch subagents.\r\n // Ctrl+F and Ctrl+G: monitor toggles are always allowed, even while\r\n // aborting — the user may want to check subagent state while steering.\r\n if (key.ctrl && input === 'f') {\r\n if (state.agentsMonitorOpen) {\r\n // Switch: close AgentsMonitor, open FleetMonitor\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n dispatch({ type: 'toggleMonitor' });\r\n } else {\r\n dispatch({ type: 'toggleMonitor' });\r\n }\r\n return;\r\n }\r\n // Ctrl+G toggles the agents monitor overlay.\r\n if (key.ctrl && input === 'g') {\r\n if (state.monitorOpen) {\r\n // Switch: close FleetMonitor, open AgentsMonitor\r\n dispatch({ type: 'toggleMonitor' });\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n } else {\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n }\r\n return;\r\n }\r\n // Ctrl+T toggles the worktree monitor overlay — a sibling of Ctrl+F/G.\r\n // Global so the user can pop it mid-run. Opening it closes any other\r\n // overlay first so only one dashboard shows at a time. (Word-delete that\r\n // used to live on Ctrl+T is covered by Ctrl+Backspace.)\r\n if (key.ctrl && input === 't') {\r\n if (state.worktreeMonitorOpen) {\r\n dispatch({ type: 'worktreeMonitorToggle' });\r\n return;\r\n }\r\n if (state.agentsMonitorOpen) dispatch({ type: 'toggleAgentsMonitor' });\r\n if (state.monitorOpen) dispatch({ type: 'toggleMonitor' });\r\n if (state.autoPhase?.monitorOpen) dispatch({ type: 'autoPhaseMonitorToggle' });\r\n dispatch({ type: 'worktreeMonitorToggle' });\r\n return;\r\n }\r\n // Esc closes whichever monitor is open. When both are closed the busy-state\r\n // Esc handler above already returned when a run was active.\r\n if (key.escape) {\r\n if (state.agentsMonitorOpen) {\r\n dispatch({ type: 'toggleAgentsMonitor' });\r\n return;\r\n }\r\n if (state.monitorOpen) {\r\n dispatch({ type: 'toggleMonitor' });\r\n return;\r\n }\r\n if (state.worktreeMonitorOpen) {\r\n dispatch({ type: 'worktreeMonitorToggle' });\r\n return;\r\n }\r\n }\r\n\r\n if (isEnter) {\r\n // Re-entrancy protection for terminals that emit `\\r\\n` as two\r\n // separate stdin events: ignore Enter pressed within 50ms of the\r\n // last one. The 50ms window catches the double-event reliably\r\n // (the second `\\n` arrives within microseconds of the `\\r`) while\r\n // staying well below human double-tap speed.\r\n //\r\n // We intentionally do NOT await submit() here — it kicks off\r\n // agent.run() which can stay pending for minutes when a delegate\r\n // call is in flight. Awaiting would block this handler frame for\r\n // the full duration, which means every subsequent keystroke would\r\n // miss its dispatch (including the slash key — the user reported\r\n // the input feeling dead during delegated work). submit() handles\r\n // its own re-entrancy via state.status: when the agent is busy,\r\n // the message is queued instead of re-running concurrently.\r\n const now = Date.now();\r\n if (now - lastEnterAtRef.current < 50) return;\r\n lastEnterAtRef.current = now;\r\n void submit();\r\n return;\r\n }\r\n\r\n const { buffer, cursor } = draftRef.current;\r\n\r\n if (key.backspace || key.delete) {\r\n if (key.ctrl) {\r\n if (key.backspace) {\r\n if (cursor === 0) return;\r\n const beforeCursor = buffer.slice(0, cursor);\r\n const lastWordStart = beforeCursor.lastIndexOf(' ') + 1;\r\n const next = beforeCursor.slice(0, lastWordStart) + buffer.slice(cursor);\r\n setDraft(next, lastWordStart);\r\n } else {\r\n if (cursor >= buffer.length) return;\r\n const afterCursor = buffer.slice(cursor);\r\n const nextWordStart = afterCursor.indexOf(' ');\r\n const end = nextWordStart === -1 ? buffer.length : cursor + nextWordStart + 1;\r\n const next = buffer.slice(0, cursor) + buffer.slice(end);\r\n setDraft(next, cursor);\r\n }\r\n return;\r\n }\r\n\r\n // Block-level backspace: if cursor is at end and buffer ends with a\r\n // placeholder pattern ([pasted #N] or [pasted]), delete the whole\r\n // placeholder and remove it from the placeholders list.\r\n if (key.backspace && cursor === buffer.length && state.placeholders.length > 0) {\r\n const BLOCK_PH_RE = /\\[pasted(?: #\\d+)?\\]$/;\r\n if (BLOCK_PH_RE.test(buffer)) {\r\n const newBuffer = buffer.replace(BLOCK_PH_RE, '').replace(/\\s+$/, '');\r\n dispatch({ type: 'removeLastPlaceholder' });\r\n setDraft(newBuffer, newBuffer.length);\r\n return;\r\n }\r\n }\r\n\r\n if (cursor === 0) return;\r\n const next = buffer.slice(0, cursor - 1) + buffer.slice(cursor);\r\n setDraft(next, cursor - 1);\r\n return;\r\n }\r\n\r\n if (key.leftArrow) {\r\n if (key.ctrl) {\r\n if (cursor === 0) return;\r\n const beforeCursor = buffer.slice(0, cursor);\r\n const prevWordStart = beforeCursor.lastIndexOf(' ');\r\n const target = prevWordStart === -1 ? 0 : prevWordStart + 1;\r\n setDraft(buffer, target);\r\n return;\r\n }\r\n if (cursor > 0) setDraft(buffer, cursor - 1);\r\n return;\r\n }\r\n if (key.rightArrow) {\r\n if (key.ctrl) {\r\n if (cursor >= buffer.length) return;\r\n const afterCursor = buffer.slice(cursor);\r\n const nextWordStart = afterCursor.indexOf(' ');\r\n const target = nextWordStart === -1 ? buffer.length : cursor + nextWordStart + 1;\r\n setDraft(buffer, target);\r\n return;\r\n }\r\n if (cursor < buffer.length) setDraft(buffer, cursor + 1);\r\n return;\r\n }\r\n if (key.home) {\r\n setDraft(buffer, 0);\r\n return;\r\n }\r\n if (key.end) {\r\n setDraft(buffer, buffer.length);\r\n return;\r\n }\r\n\r\n // History scrolling is delegated to the terminal's native scrollback\r\n // (mouse wheel, Shift+PgUp in Windows Terminal, etc.) — Ink's <Static>\r\n // emits each finalized entry once and never repaints over it.\r\n if (key.upArrow) {\r\n if (state.inputHistory.length > 0) dispatch({ type: 'historyUp' });\r\n return;\r\n }\r\n if (key.downArrow) {\r\n if (state.historyIndex > 0) dispatch({ type: 'historyDown' });\r\n return;\r\n }\r\n // Ctrl+P → toggle PhaseMonitor overlay when AutoPhase is active.\r\n if (key.ctrl && input === 'p') {\r\n if (state.autoPhase) dispatch({ type: 'autoPhaseMonitorToggle' });\r\n else {\r\n // No active AutoPhase — treat as a command alias for /autophase status\r\n slashRegistry.dispatch('/autophase', agent.ctx).then((res) => {\r\n if (res?.message) dispatch({ type: 'addEntry', entry: { kind: 'info', text: res.message } });\r\n });\r\n }\r\n return;\r\n }\r\n if (key.ctrl && input === 'a') {\r\n setDraft(buffer, 0);\r\n return;\r\n }\r\n if (key.ctrl && input === 'e') {\r\n setDraft(buffer, buffer.length);\r\n return;\r\n }\r\n if (key.ctrl && input === 'u') {\r\n setDraft('', 0);\r\n return;\r\n }\r\n // Delete key and Ctrl+D → delete character at cursor (forward delete).\r\n // Ctrl+D also doubles as \"EOF\" in some shells — here it's just convenient\r\n // forward-delete when the user isn't at the terminal's physical Delete key.\r\n if (key.delete || (key.ctrl && input === 'd')) {\r\n if (cursor >= buffer.length) return;\r\n const next = buffer.slice(0, cursor) + buffer.slice(cursor + 1);\r\n setDraft(next, cursor);\r\n return;\r\n }\r\n\r\n // Ctrl+K → kill: delete from cursor to end of line.\r\n if (key.ctrl && input === 'k') {\r\n if (cursor >= buffer.length) return;\r\n const next = buffer.slice(0, cursor);\r\n setDraft(next, cursor);\r\n return;\r\n }\r\n\r\n // Alt+V → read image from clipboard and attach as [image #N].\r\n if (key.meta && input === 'v') {\r\n await pasteClipboardImage();\r\n return;\r\n }\r\n\r\n if (!input || key.ctrl || key.meta) return;\r\n\r\n // Non-bracketed large paste: some terminals (notably older Windows\r\n // consoles) don't emit \\x1b[200~ markers, so a paste arrives as one big\r\n // text chunk. Bracketed pastes are already handled by the accumulation\r\n // guard near the top of handleKey; route big unmarked chunks through the\r\n // same finalizer so they collapse to a pill consistently.\r\n if (input.length > PASTE_THRESHOLD_CHARS) {\r\n await commitPaste(input);\r\n return;\r\n }\r\n\r\n // Plain multi-line paste below the threshold. Strip newlines to spaces\r\n // so the input row stays visually single-line while the content still\r\n // carries through to the agent.\r\n if (input.includes('\\n')) {\r\n const normalized = input.replace(/\\r?\\n/g, ' ');\r\n const next = buffer.slice(0, cursor) + normalized + buffer.slice(cursor);\r\n setDraft(next, cursor + normalized.length);\r\n return;\r\n }\r\n\r\n const next = buffer.slice(0, cursor) + input + buffer.slice(cursor);\r\n setDraft(next, cursor + input.length);\r\n };\r\n\r\n /**\r\n * Drive a single iteration: run the agent against `blocks`, render the\r\n * result into history, then if any messages were typed while we were\r\n * busy, pull the head of the queue and recurse. Recursion terminates\r\n * when the queue is empty (status stays idle).\r\n */\r\n const runBlocks = async (blocks: ContentBlock[]): Promise<void> => {\r\n const ctrl = new AbortController();\r\n activeCtrlRef.current = ctrl;\r\n // Each run starts a fresh interrupt cycle: 1st Ctrl+C aborts, 2nd exits.\r\n // submit() already resets, but queue-drain / runText / autonomy paths\r\n // re-enter runBlocks without going through submit — without this reset a\r\n // stale counter from a prior abort would make the next run's first\r\n // Ctrl+C force-exit instead of aborting.\r\n dispatch({ type: 'resetInterrupts' });\r\n dispatch({ type: 'status', status: 'running' });\r\n\r\n try {\r\n const startedAt = Date.now();\r\n const before = tokenCounter?.total();\r\n const costBefore = tokenCounter?.estimateCost().total ?? 0;\r\n const routed = blocks.some((block) => block.type === 'image')\r\n ? await routeImagesForModel(blocks, {\r\n supportsVision: supportsVision\r\n ? await supportsVision()\r\n : agent.ctx.provider.capabilities.vision,\r\n adapters: visionAdapters,\r\n ctx: agent.ctx,\r\n signal: ctrl.signal,\r\n providerId: agent.ctx.provider.id,\r\n model: agent.ctx.model,\r\n })\r\n : { blocks, route: 'none' as const, convertedImages: 0 };\r\n if (routed.route === 'adapter') {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `Image input analyzed via ${routed.adapterName ?? 'vision adapter'} (${routed.convertedImages} image${routed.convertedImages === 1 ? '' : 's'}).`,\r\n },\r\n });\r\n }\r\n const result = await agent.run(routed.blocks, { signal: ctrl.signal });\r\n\r\n // Per-iteration assistant text was already committed by the\r\n // `provider.response` listener as each LLM call finished. Safety net:\r\n // if anything is still lingering in the synchronous ref (e.g. an\r\n // aborted run that never received a final provider.response), commit\r\n // it now so partial output is preserved rather than silently dropped.\r\n const lingering = streamingTextRef.current;\r\n if (lingering.trim()) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'assistant', text: lingering } });\r\n }\r\n streamingTextRef.current = '';\r\n pendingDeltaRef.current = '';\r\n if (flushTimerRef.current) {\r\n clearTimeout(flushTimerRef.current);\r\n flushTimerRef.current = null;\r\n }\r\n dispatch({ type: 'streamReset' });\r\n\r\n if (result.status === 'aborted') {\r\n dispatch({ type: 'addEntry', entry: { kind: 'warn', text: 'Aborted.' } });\r\n } else if (result.status === 'failed') {\r\n const err = result.error;\r\n const text = err\r\n ? `Failed [${err.severity}${err.recoverable ? ', recoverable' : ''}]: ${err.describe()}`\r\n : 'Failed.';\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text },\r\n });\r\n } else if (result.status === 'max_iterations') {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'warn', text: `Hit max iterations (${result.iterations}).` },\r\n });\r\n }\r\n\r\n // ── SDD Auto-Detection ──────────────────────────────────────────\r\n // Process AI output for spec, implementation plan, and task detection.\r\n if (result.status === 'done' && result.finalText && onSDDOutput) {\r\n try {\r\n const sddMessages = await onSDDOutput(result.finalText);\r\n for (const msg of sddMessages) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'info', text: msg } });\r\n }\r\n } catch {\r\n // Non-fatal — SDD detection is best-effort\r\n }\r\n }\r\n\r\n if (tokenCounter && before) {\r\n const after = tokenCounter.total();\r\n const costAfter = tokenCounter.estimateCost().total;\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'turn-summary',\r\n text: `[in: ${fmtTok(after.input - before.input)} out: ${fmtTok(after.output - before.output)} iters: ${result.iterations} cost: ${(costAfter - costBefore).toFixed(4)} ${((Date.now() - startedAt) / 1000).toFixed(1)}s]`,\r\n },\r\n });\r\n }\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: err instanceof Error ? err.message : String(err) },\r\n });\r\n } finally {\r\n activeCtrlRef.current = null;\r\n dispatch({ type: 'status', status: 'idle' });\r\n }\r\n\r\n // Drain the queue. If the run was aborted, the SIGINT handler has\r\n // already cleared the queue, so the head will be undefined.\r\n const head = stateRef.current.queue[0];\r\n if (head) {\r\n dispatch({ type: 'dequeueFirst' });\r\n await runBlocks(head.blocks);\r\n }\r\n };\r\n const runBlocksRef = useRef(runBlocks);\r\n runBlocksRef.current = runBlocks;\r\n\r\n /**\r\n * Eternal-mode driver. Loops `engine.runOneIteration()` until autonomy\r\n * flips away from 'eternal' or the engine reports stopped state. Each\r\n * iteration appends an info entry summarizing what happened so the TUI\r\n * timeline shows the engine's activity. Runs as a single sequential\r\n * consumer of `agent.run` — no race with user submissions because user\r\n * input is gated by `state.status` (a running iteration keeps status\r\n * at 'running' until the agent.run inside the engine returns).\r\n */\r\n const runEternalLoop = async (): Promise<void> => {\r\n const engine = getEternalEngine?.();\r\n if (!engine) return;\r\n // Avoid double-driving if the loop is already running. Status will\r\n // bounce idle↔running per iteration; the autonomy flag is the source\r\n // of truth for \"should we keep going\".\r\n if (eternalLoopRunningRef.current) return;\r\n eternalLoopRunningRef.current = true;\r\n try {\r\n while (true) {\r\n // Re-check the live state every iteration — /autonomy stop, SIGINT,\r\n // or /goal clear could have flipped it during the prior iteration.\r\n const liveMode = getAutonomy?.() ?? 'off';\r\n if (liveMode !== 'eternal') break;\r\n if (engine.currentState === 'stopped') break;\r\n dispatch({ type: 'status', status: 'running' });\r\n try {\r\n // Per-iteration entries land via the subscribeEternalIteration\r\n // useEffect below — we don't need to log here. Only surface\r\n // *errors* the engine catches but doesn't journal.\r\n await engine.runOneIteration();\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: `[eternal] ${err instanceof Error ? err.message : String(err)}` },\r\n });\r\n }\r\n dispatch({ type: 'status', status: 'idle' });\r\n // Yield so a slash command submitted between iterations (e.g.\r\n // /autonomy stop) actually lands before we kick the next one.\r\n await new Promise((r) => setTimeout(r, 200));\r\n }\r\n } finally {\r\n eternalLoopRunningRef.current = false;\r\n // Sync the displayed autonomy state with reality. The loop only exits\r\n // when getAutonomy() !== 'eternal' or engine.currentState === 'stopped',\r\n // both of which mean the mode is effectively off/idle. Refreshing here\r\n // stops the status bar from oscillating between \"● thinking…\" and\r\n // \"● idle\" forever after the goal is done.\r\n if (getAutonomy) {\r\n const finalMode = getAutonomy();\r\n if (finalMode !== autonomyLive) setAutonomyLive(finalMode);\r\n }\r\n }\r\n };\r\n const eternalLoopRunningRef = useRef(false);\r\n const runEternalLoopRef = useRef(runEternalLoop);\r\n runEternalLoopRef.current = runEternalLoop;\r\n\r\n /** Parallel-eternal driver — fan-out loop for the ParallelEternalEngine. */\r\n const runParallelLoop = async (): Promise<void> => {\r\n const engine = getParallelEngine?.();\r\n if (!engine) return;\r\n if (parallelLoopRunningRef.current) return;\r\n parallelLoopRunningRef.current = true;\r\n try {\r\n while (true) {\r\n const liveMode = getAutonomy?.() ?? 'off';\r\n if (liveMode !== 'eternal-parallel') break;\r\n if (engine.currentState === 'stopped') break;\r\n dispatch({ type: 'status', status: 'running' });\r\n try {\r\n await engine.runOneIteration();\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: `[parallel] ${err instanceof Error ? err.message : String(err)}` },\r\n });\r\n }\r\n dispatch({ type: 'status', status: 'idle' });\r\n await new Promise((r) => setTimeout(r, 200));\r\n }\r\n } finally {\r\n parallelLoopRunningRef.current = false;\r\n if (getAutonomy) {\r\n const finalMode = getAutonomy();\r\n if (finalMode !== autonomyLive) setAutonomyLive(finalMode);\r\n }\r\n }\r\n };\r\n const parallelLoopRunningRef = useRef(false);\r\n const runParallelLoopRef = useRef(runParallelLoop);\r\n runParallelLoopRef.current = runParallelLoop;\r\n\r\n // Subscribe to live per-iteration events from the eternal engine. The\r\n // engine's loop drive (runEternalLoop above) emits \"iteration completed\"\r\n // info entries, but those are coarse — this subscription surfaces the\r\n // *actual* journal entry per iteration with source, status, and cost.\r\n // Without it the TUI timeline only shows one-line summaries; with it the\r\n // user sees `#42 ✓ [todo] refactor parser ($0.0034)`.\r\n useEffect(() => {\r\n if (!subscribeEternalIteration) return;\r\n const unsub = subscribeEternalIteration((entry) => {\r\n const mark = entry.status === 'success' ? '✓' : entry.status === 'failure' ? '✗' : entry.status === 'aborted' ? '⊘' : '·';\r\n const cost = typeof entry.costUsd === 'number' ? ` ($${entry.costUsd.toFixed(4)})` : '';\r\n const note = entry.note ? ` — ${entry.note.slice(0, 80)}` : '';\r\n const text = `#${entry.iteration} ${mark} [${entry.source}] ${entry.task}${cost}${note}`;\r\n dispatch({ type: 'addEntry', entry: { kind: 'info', text } });\r\n });\r\n return unsub;\r\n }, [subscribeEternalIteration]);\r\n\r\n // Subscribe to live stage-transition events from the eternal engine.\r\n // Drives `state.eternalStage` used by the status bar to show the\r\n // engine's current location (decide → execute → reflect → sleep/paused).\r\n useEffect(() => {\r\n if (!subscribeEternalStage) return;\r\n const unsub = subscribeEternalStage((stage) => {\r\n dispatch({ type: 'eternalStage', stage });\r\n });\r\n return unsub;\r\n }, [subscribeEternalStage]);\r\n\r\n const submit = async (overrideRaw?: string) => {\r\n const raw = overrideRaw ?? draftRef.current.buffer;\r\n const trimmed = raw.trim();\r\n if (!trimmed && state.placeholders.length === 0) return;\r\n\r\n dispatch({ type: 'resetInterrupts' });\r\n const pushSubmittedHistory = () => {\r\n if (trimmed) dispatch({ type: 'historyPush', text: trimmed });\r\n };\r\n if (trimmed === '/image' || trimmed === '/paste-image') {\r\n pushSubmittedHistory();\r\n clearDraft();\r\n await pasteClipboardImage();\r\n return;\r\n }\r\n\r\n // Slash commands always dispatch immediately, even mid-iteration —\r\n // they don't conflict with a running agent.\r\n if (trimmed.startsWith('/')) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'user', text: trimmed } });\r\n pushSubmittedHistory();\r\n clearDraft();\r\n try {\r\n const res = await slashRegistry.dispatch(trimmed, agent.ctx);\r\n if (res?.message) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'info', text: res.message } });\r\n }\r\n // autoPhaseInit: when /autophase start succeeds, the graph title is\r\n // embedded in metadata so the TUI can show the PhasePanel immediately\r\n // even before the first orchestrator event fires.\r\n if (res?.metadata?.autoPhaseInit) {\r\n const m = res.metadata.autoPhaseInit as { title: string };\r\n dispatch({ type: 'autoPhaseInit', title: m.title });\r\n }\r\n // Slash commands like /model and /use mutate agent.ctx directly.\r\n // Re-sync the visible status bar so the user sees the switch\r\n // landed; otherwise the bar keeps the startup-time values and\r\n // /model \"feels\" broken even when subsequent requests use the\r\n // new model.\r\n const ctxModel = agent.ctx.model;\r\n if (ctxModel && ctxModel !== liveModel) setLiveModel(ctxModel);\r\n const ctxProviderId = (agent.ctx.provider as { id?: string } | undefined)?.id;\r\n if (ctxProviderId && ctxProviderId !== liveProvider) setLiveProvider(ctxProviderId);\r\n if (getYolo) {\r\n const currentYolo = getYolo();\r\n if (currentYolo !== yoloLive) setYoloLive(currentYolo);\r\n }\r\n if (getAutonomy) {\r\n const currentAutonomy = getAutonomy();\r\n if (currentAutonomy !== autonomyLive) setAutonomyLive(currentAutonomy);\r\n // When /autonomy eternal lands, kick off the engine-driven loop.\r\n // Fire-and-forget — the loop runs until autonomy flips away from\r\n // 'eternal' or the engine's currentState goes !== 'running'.\r\n // Without this, the slash command would set the flag but the\r\n // TUI would just sit at the prompt waiting for user input.\r\n if (currentAutonomy === 'eternal' && getEternalEngine) {\r\n void runEternalLoopRef.current();\r\n }\r\n if (currentAutonomy === 'eternal-parallel' && getParallelEngine) {\r\n void runParallelLoopRef.current();\r\n }\r\n }\r\n if (res?.exit) {\r\n exit();\r\n onExit(0);\r\n }\r\n // `runText` lets a slash command queue a follow-up user-role\r\n // message (used by `/steer <text>` to send the STEERING\r\n // preamble + new direction as if the user had typed it).\r\n // Run AFTER the message is rendered so the user sees the\r\n // slash result before the model's response streams.\r\n if (res?.runText) {\r\n const b = builderRef.current;\r\n if (b) {\r\n b.appendText(res.runText);\r\n const blocks = await b.submit();\r\n // Wait briefly for any in-flight abort to settle into\r\n // 'idle' before kicking the next iteration — otherwise\r\n // runBlocks would early-return on the busy guard.\r\n const start = Date.now();\r\n while (stateRef.current.status !== 'idle' && Date.now() - start < 1500) {\r\n await new Promise((r) => setTimeout(r, 25));\r\n }\r\n await runBlocks(blocks);\r\n }\r\n }\r\n // Only fire onClearHistory for `/clear` — without this gate every\r\n // slash command (`/model`, `/use`, `/help`, …) would wipe the\r\n // conversation. Match the command name segment, not just the\r\n // prefix, so `/clearfoo` doesn't trigger.\r\n const cmd = trimmed.slice(1).split(/\\s+/, 1)[0];\r\n if (cmd === 'clear') {\r\n onClearHistory?.(dispatch);\r\n }\r\n } catch (err) {\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'error', text: err instanceof Error ? err.message : String(err) },\r\n });\r\n }\r\n return;\r\n }\r\n\r\n const builder = builderRef.current;\r\n if (!builder) return;\r\n // Steering inject: if the user pressed Esc on the prior iteration,\r\n // prepend a STEERING preamble so the model sees this isn't a\r\n // follow-up — it's an interrupt redirecting the work. The preamble\r\n // carries (a) context the model would otherwise have to guess\r\n // (what tools were running, what subagents were live) and (b)\r\n // explicit authority — \"drop the prior plan, respawn subagents\r\n // if useful, ask for clarification if needed\". Plain user-role\r\n // text so accountability stays with the human who triggered it.\r\n const steering = state.steeringPending;\r\n\r\n // ── SDD Context Injection ──────────────────────────────────────────\r\n // When an SDD session is active, prepend the session context so the\r\n // model knows it's in a spec-building conversation.\r\n const sddContext = getSDDContext?.();\r\n if (sddContext && trimmed) {\r\n builder.appendText(`[SDD SESSION ACTIVE]\\n${sddContext}\\n\\n---\\nUser message:\\n`);\r\n }\r\n\r\n if (trimmed) {\r\n const toAppend = steering ? buildSteeringPreamble(state.steerSnapshot, trimmed) : trimmed;\r\n builder.appendText(toAppend);\r\n }\r\n if (steering) dispatch({ type: 'steerConsume' });\r\n // The user sees their original text + a visual ↯ marker when\r\n // steering, not the full preamble — keeps the chat readable while\r\n // the model still gets the explicit instruction.\r\n const displayText = trimmed ? (steering ? `↯ ${trimmed}` : trimmed) : '(attachments only)';\r\n // Build history preview from placeholders + their actual content.\r\n // Each placeholder becomes a label line; if content was stored, show a preview.\r\n const pasteParts: string[] = [];\r\n for (let i = 0; i < state.placeholders.length; i++) {\r\n const label = state.placeholders[i]!;\r\n const content = state.placeholderContents[i] ?? '';\r\n pasteParts.push(label);\r\n if (content) pasteParts.push(` ${content.split('\\n').slice(0, 6).join('\\n ')}`);\r\n }\r\n const pasteContent = pasteParts.length > 0 ? pasteParts.join('\\n') : undefined;\r\n pushSubmittedHistory();\r\n clearDraft();\r\n const blocks = await builder.submit();\r\n\r\n if (state.status !== 'idle') {\r\n // Agent is busy — queue this message for the drainer to pick up.\r\n dispatch({\r\n type: 'addEntry',\r\n entry: { kind: 'user', text: displayText, queued: true, pasteContent },\r\n });\r\n dispatch({ type: 'enqueue', item: { displayText, blocks } });\r\n return;\r\n }\r\n\r\n dispatch({ type: 'addEntry', entry: { kind: 'user', text: displayText, pasteContent } });\r\n await runBlocks(blocks);\r\n };\r\n\r\n // ─── --goal / --ask boot inject ─────────────────────────────────────\r\n // The CLI may pass `--goal \"...\"` or `--ask \"...\"` to pre-populate the\r\n // very first turn. `initialGoal` wraps the text in the GOAL preamble so\r\n // the model lands in autonomous goal mode; `initialAsk` submits the text\r\n // verbatim (handy for scripted shell aliases). Both fire one-shot via a\r\n // mount-time ref guard so a re-render can't double-submit. We wait a tick\r\n // for the input builder to settle, then push directly into runBlocks —\r\n // bypassing the slash registry / submit() path keeps the boot path\r\n // self-contained even if user-installed slash commands haven't mounted\r\n // their effects yet.\r\n const bootInjectedRef = useRef(false);\r\n useEffect(() => {\r\n if (bootInjectedRef.current) return;\r\n bootInjectedRef.current = true;\r\n const goal = initialGoal?.trim();\r\n const ask = initialAsk?.trim();\r\n if (!goal && !ask) return;\r\n void (async () => {\r\n // Give the banner a frame to render first so the user sees the\r\n // greeting before the first turn streams over the top of it.\r\n await new Promise((r) => setTimeout(r, 50));\r\n const b = builderRef.current;\r\n if (!b) return;\r\n if (goal) {\r\n const shortGoal = goal.length > 80 ? `${goal.slice(0, 80)}…` : goal;\r\n dispatch({\r\n type: 'addEntry',\r\n entry: {\r\n kind: 'info',\r\n text: `🎯 Goal locked: ${shortGoal}\\n Agent will work until verifiably complete. Esc / /steer to redirect, Ctrl+C to stop.`,\r\n },\r\n });\r\n b.appendText(buildGoalPreamble(goal));\r\n } else if (ask) {\r\n dispatch({ type: 'addEntry', entry: { kind: 'user', text: ask } });\r\n b.appendText(ask);\r\n }\r\n const blocks = await b.submit();\r\n await runBlocksRef.current(blocks);\r\n })();\r\n }, [initialAsk, initialGoal]);\r\n\r\n const inputHint = useMemo(() => {\r\n if (state.status !== 'idle') return '';\r\n if (state.buffer.startsWith('/')) return 'slash command — Enter to dispatch';\r\n if (state.picker.open) return '';\r\n return '';\r\n }, [state.buffer, state.status, state.picker.open]);\r\n\r\n return (\r\n <Box flexDirection=\"column\">\r\n <History\r\n entries={state.entries}\r\n streamingText={state.streamingText}\r\n toolStream={state.toolStream}\r\n />\r\n {/* Live activity strip — one line per running subagent with\r\n current tool + elapsed timer. Sits directly above the input\r\n area so it's always visible without scrolling. Renders\r\n nothing when no subagents are running. */}\r\n <LiveActivityStrip entries={state.fleet} nowTick={nowTick} />\r\n <Input\r\n value={state.buffer}\r\n cursor={state.cursor}\r\n placeholders={state.placeholders}\r\n disabled={\r\n (state.status === 'aborting' && !state.steeringPending) ||\r\n state.confirmQueue.length > 0\r\n }\r\n hint={inputHint}\r\n onKey={handleKey}\r\n />\r\n {state.picker.open ? (\r\n <FilePicker\r\n query={state.picker.query}\r\n matches={state.picker.matches}\r\n selected={state.picker.selected}\r\n />\r\n ) : null}\r\n {state.slashPicker.open ? (\r\n <SlashMenu\r\n query={state.slashPicker.query}\r\n matches={state.slashPicker.matches}\r\n selected={state.slashPicker.selected}\r\n />\r\n ) : null}\r\n {state.modelPicker.open ? (\r\n <ModelPicker\r\n step={state.modelPicker.step}\r\n providerOptions={state.modelPicker.providerOptions}\r\n modelOptions={state.modelPicker.modelOptions}\r\n selected={state.modelPicker.selected}\r\n pickedProviderId={state.modelPicker.pickedProviderId}\r\n hint={state.modelPicker.hint}\r\n />\r\n ) : null}\r\n {state.autonomyPicker.open ? (\r\n <AutonomyPicker\r\n options={state.autonomyPicker.options}\r\n selected={state.autonomyPicker.selected}\r\n hint={state.autonomyPicker.hint}\r\n />\r\n ) : null}\r\n {state.rewindOverlay ? (\r\n <CheckpointTimeline\r\n checkpoints={state.rewindOverlay.checkpoints}\r\n selected={state.rewindOverlay.selected}\r\n onSelect={(i) => dispatch({ type: 'rewindOverlayMove', delta: i - state.rewindOverlay!.selected })}\r\n onConfirm={(i) => handleRewindTo(state.rewindOverlay!.checkpoints[i]!.promptIndex)}\r\n onClose={() => dispatch({ type: 'rewindOverlayClose' })}\r\n />\r\n ) : null}\r\n {state.confirmQueue.length > 0 && (() => {\r\n const head = state.confirmQueue[0]!;\r\n let resolved = false;\r\n return (\r\n <ConfirmPrompt\r\n toolName={head.toolName}\r\n input={head.input}\r\n suggestedPattern={head.suggestedPattern}\r\n onDecision={(decision) => {\r\n if (resolved) return;\r\n resolved = true;\r\n head.resolve(decision);\r\n dispatch({ type: 'confirmClose' });\r\n }}\r\n />\r\n );\r\n })()}\r\n <StatusBar\r\n model={`${liveProvider}/${liveModel}`}\r\n version={appVersion}\r\n state={state.status}\r\n tokenCounter={tokenCounter}\r\n hint={renderRunningTools(state.runningTools) || state.hint}\r\n queueCount={state.queue.length}\r\n yolo={yoloLive}\r\n autonomy={autonomyLive}\r\n elapsedMs={elapsedMs}\r\n todos={todos}\r\n plan={planCounts ?? undefined}\r\n fleet={fleetCounts}\r\n git={gitInfo}\r\n context={contextWindow}\r\n projectName={projectName}\r\n subagentCount={Object.keys(state.fleet).length}\r\n processCount={getProcessRegistry().activeCount}\r\n hiddenItems={hiddenItems}\r\n eternalStage={state.eternalStage}\r\n goalSummary={state.goalSummary}\r\n />\r\n {/* Agents monitor overlay (Ctrl+G) and fleet monitor overlay (Ctrl+F)\r\n take up the lower region — hide FleetPanel while any overlay is open. */}\r\n {state.agentsMonitorOpen ? (\r\n <AgentsMonitor\r\n entries={entriesWithLeader}\r\n totalCost={state.fleetCost}\r\n totalTokens={state.fleetTokens}\r\n nowTick={nowTick}\r\n />\r\n ) : state.autoPhase?.monitorOpen ? (\r\n <PhaseMonitor\r\n phases={state.autoPhase.phases}\r\n runningPhaseIds={state.autoPhase.runningPhaseIds}\r\n elapsedMs={state.autoPhase.elapsedMs}\r\n nowTick={nowTick}\r\n onClose={() => dispatch({ type: 'autoPhaseMonitorToggle' })}\r\n />\r\n ) : state.worktreeMonitorOpen ? (\r\n <WorktreeMonitor\r\n worktrees={state.worktrees}\r\n baseBranch={state.worktreeBase}\r\n nowTick={nowTick}\r\n onClose={() => dispatch({ type: 'worktreeMonitorToggle' })}\r\n />\r\n ) : state.monitorOpen ? (\r\n <FleetMonitor\r\n entries={state.fleet}\r\n totalCost={state.fleetCost}\r\n totalTokens={state.fleetTokens}\r\n nowTick={nowTick}\r\n collabSession={state.collabSession}\r\n />\r\n ) : director ? (\r\n <FleetPanel entries={entriesWithLeader} totalCost={state.fleetCost} roster={fleetRoster} collabSession={state.collabSession} />\r\n ) : null}\r\n {state.autoPhase && !state.autoPhase.monitorOpen ? (\r\n <PhasePanel\r\n phases={state.autoPhase.phases}\r\n runningPhaseIds={state.autoPhase.runningPhaseIds}\r\n nowTick={nowTick}\r\n />\r\n ) : null}\r\n {Object.keys(state.worktrees).length > 0 && !state.worktreeMonitorOpen && !state.monitorOpen ? (\r\n <WorktreePanel worktrees={state.worktrees} nowTick={nowTick} />\r\n ) : null}\r\n </Box>\r\n );\r\n}\r\n\r\n/**\r\n * Render an at-a-glance \"running: …\" hint for the status bar. Shows the\r\n * oldest in-flight tool by name; if more than one, appends \"(+N)\".\r\n */\r\nexport function renderRunningTools(\r\n running: ReadonlyMap<string, { name: string; startedAt: number }>,\r\n): string {\r\n if (running.size === 0) return '';\r\n let oldest: { name: string; startedAt: number } | null = null;\r\n for (const info of running.values()) {\r\n if (!oldest || info.startedAt < oldest.startedAt) oldest = info;\r\n }\r\n if (!oldest) return '';\r\n const elapsedSec = ((Date.now() - oldest.startedAt) / 1000).toFixed(1);\r\n const more = running.size > 1 ? ` (+${running.size - 1})` : '';\r\n return `running: ${oldest.name} ${elapsedSec}s${more}`;\r\n}\r\n\r\n/**\r\n * Find an active `@<query>` token at the cursor. The token starts at the\r\n * last `@` not preceded by a non-whitespace char, and runs up to the cursor\r\n * (no whitespace allowed inside). Returns null if no active token.\r\n */\r\nexport function detectAtToken(\r\n buffer: string,\r\n cursor: number,\r\n): { start: number; end: number; query: string } | null {\r\n let i = cursor - 1;\r\n while (i >= 0) {\r\n const ch = buffer.charCodeAt(i);\r\n if (ch === 64 /* @ */) {\r\n // Must be at the start of buffer or preceded by whitespace.\r\n if (i === 0 || /\\s/.test(buffer[i - 1] ?? '')) {\r\n return { start: i, end: cursor, query: buffer.slice(i + 1, cursor) };\r\n }\r\n return null;\r\n }\r\n if (ch === 32 /* space */ || ch === 9 /* tab */ || ch === 10 /* nl */) return null;\r\n i--;\r\n }\r\n return null;\r\n}\r\n\r\nfunction fmtTok(n: number): string {\r\n if (n < 1000) return String(n);\r\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\r\n return `${(n / 1_000_000).toFixed(1)}M`;\r\n}\r\n","import type { EventBus } from '@wrongstack/core';\n\n/**\n * Animated terminal/tab title for the TUI.\n *\n * Writes an OSC-0 sequence (`ESC ] 0 ; <text> BEL`) — an out-of-band terminal\n * command that sets the window/tab title without touching the screen, so it\n * never corrupts Ink's render. The title animates: a braille spinner plus a\n * live status derived from the agent's EventBus (thinking / running a tool),\n * and a gentle scrolling marquee when idle. Reset to a static title on stop.\n *\n * Disable with WRONGSTACK_NO_TITLE=1.\n */\n\nconst SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\nconst setTitle = (s: string): string => `\\x1b]0;${s}\\x07`;\n\n/** A marquee window over `text`, advancing by `offset`. */\nfunction marquee(text: string, offset: number, width: number): string {\n const padded = `${text} `;\n const start = offset % padded.length;\n return (padded + padded).slice(start, start + width);\n}\n\nexport interface TerminalTitleOptions {\n stdout: NodeJS.WriteStream;\n events: EventBus;\n model?: string;\n appName?: string;\n intervalMs?: number;\n /** ms of silence before the title falls back to the idle marquee. */\n idleAfterMs?: number;\n}\n\nexport function startTerminalTitle(opts: TerminalTitleOptions): () => void {\n const { stdout, events } = opts;\n if (process.env['WRONGSTACK_NO_TITLE'] === '1' || !stdout.isTTY) {\n return () => {};\n }\n\n const app = opts.appName ?? 'WrongStack';\n const idleAfter = opts.idleAfterMs ?? 3500;\n const suffix = ` · ${app}`;\n\n let frame = 0;\n let scroll = 0;\n let phase: 'idle' | 'thinking' | 'tool' = 'idle';\n let toolName = '';\n let lastActivity = 0; // 0 → never active yet, start idle\n\n const touch = (next: 'thinking' | 'tool', tool?: string) => {\n phase = next;\n if (tool) toolName = tool;\n lastActivity = Date.now();\n };\n\n const offs: Array<() => void> = [\n events.on('iteration.started', () => touch('thinking')),\n events.on('provider.text_delta', () => touch('thinking')),\n events.on('provider.thinking_delta', () => touch('thinking')),\n events.on('tool.started', (e) => touch('tool', (e as { name?: string }).name ?? 'tool')),\n events.on('tool.executed', () => touch('thinking')),\n ];\n\n const write = (s: string) => {\n try {\n stdout.write(s);\n } catch {\n /* stdout closed during shutdown */\n }\n };\n\n const timer = setInterval(() => {\n frame = (frame + 1) % SPINNER.length;\n scroll += 1;\n if (lastActivity && Date.now() - lastActivity > idleAfter) phase = 'idle';\n\n const sp = SPINNER[frame];\n let title: string;\n if (phase === 'tool') {\n title = `${sp} ▸ ${toolName}${suffix}`;\n } else if (phase === 'thinking') {\n title = `${sp} thinking…${suffix}`;\n } else {\n // Idle: scroll the app name + model so the tab still feels alive.\n title = marquee(`✦ ${app}${suffix}`, scroll >> 1, 22);\n }\n write(setTitle(title));\n }, opts.intervalMs ?? 130);\n // Don't keep the event loop alive just for the title animation.\n timer.unref?.();\n\n return () => {\n clearInterval(timer);\n for (const off of offs) off();\n write(setTitle(app));\n };\n}\n","import type {\n Agent,\n AttachmentStore,\n Director,\n EventBus,\n QueueStore,\n SlashCommandRegistry,\n TokenCounter,\n} from '@wrongstack/core';\nimport type { VisionAdapters } from '@wrongstack/runtime/vision';\nimport { render } from 'ink';\nimport React from 'react';\nimport { App } from './app.js';\nimport { startTerminalTitle } from './terminal-title.js';\n\nexport interface RunTuiOptions {\n agent: Agent;\n slashRegistry: SlashCommandRegistry;\n attachments: AttachmentStore;\n events: EventBus;\n tokenCounter?: TokenCounter;\n visionAdapters?: VisionAdapters;\n /** Resolve current model vision support. Falls back to provider capability when omitted. */\n supportsVision?: () => boolean | Promise<boolean>;\n model: string;\n banner?: boolean;\n /** Persists the input queue across crashes; if omitted, the queue is in-memory only. */\n queueStore?: QueueStore;\n /** Surfaces the \"⚠ YOLO\" chip in the status bar. */\n yolo?: boolean;\n /** Query live YOLO state from the permission policy. */\n getYolo?: () => boolean;\n /** Query the live autonomy mode. */\n getAutonomy?: () => 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel';\n /**\n * Access the eternal-autonomy engine. When autonomy mode flips to\n * 'eternal' the TUI drives `runOneIteration()` from the post-slash hook\n * so the engine and TUI never race for the shared Context.\n */\n getEternalEngine?: () => import('@wrongstack/core').EternalAutonomyEngine | null;\n /**\n * Access the parallel-eternal engine. When autonomy mode flips to\n * 'eternal-parallel' the TUI drives `runOneIteration()` from the post-slash\n * hook so the engine and TUI never race for the shared Context.\n */\n getParallelEngine?: () => import('@wrongstack/core').ParallelEternalEngine | null;\n /**\n * Subscribe to live per-iteration events from the eternal engine.\n * Returns an unsubscribe function. TUI uses this to render each\n * iteration as a live timeline entry as it lands.\n */\n subscribeEternalIteration?: (\n fn: (entry: import('@wrongstack/core').JournalEntry) => void,\n ) => () => void;\n /**\n * Subscribe to per-iteration stage transitions from the eternal engine.\n * TUI uses this to render live status (decide → execute → reflect →\n * sleep/paused/stopped) in the status bar.\n */\n subscribeEternalStage?: (\n fn: (stage: {\n phase: 'idle';\n } | {\n phase: 'decide';\n reason: string;\n } | {\n phase: 'execute';\n task: string;\n } | {\n phase: 'reflect';\n status: 'success' | 'failure' | 'aborted' | 'skipped';\n note?: string;\n } | {\n phase: 'sleep';\n ms: number;\n } | {\n phase: 'paused';\n } | {\n phase: 'stopped';\n } | {\n phase: 'error';\n message: string;\n }) => void,\n ) => () => void;\n /** Renders in the startup banner. Read from the CLI's package.json. */\n appVersion?: string;\n /** Provider id for the startup banner (\"openai\", \"anthropic\", ...). */\n provider?: string;\n /** Wire family — shown beneath provider in the banner. */\n family?: string;\n /** Last 3 chars of the active API key — shown in the banner for visual key-pick verification. */\n keyTail?: string;\n /** Snapshot of keyed providers + their model lists for the `/model` picker. Async — the catalog fetch may need to hit disk/network. */\n getPickableProviders?: () => Promise<import('./components/model-picker.js').ProviderOption[]>;\n /** Apply a (provider, model) pair after the picker confirms. Returns an error string on failure. */\n switchProviderAndModel?: (providerId: string, modelId: string) => string | null;\n /** Apply an autonomy mode after the picker confirms. Returns an error string on failure. */\n switchAutonomy?: (mode: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel') => string | null;\n /**\n * Model-specific maxContext (tokens), resolved by the CLI via the\n * ModelsRegistry. When omitted, the TUI falls back to the provider\n * family's baseline (e.g. anthropic = 200_000), which can be wrong\n * for variants like the 1M-context Opus build. The status bar's\n * context chip uses this for its progress denominator.\n */\n effectiveMaxContext?: number;\n /** Absolute project root for goal.json loading. */\n projectRoot?: string;\n /** Render into the terminal's alternate screen buffer (like vim/less/htop).\n * Default: false — native scrollback stays live so chat history is\n * scrollable via mouse wheel / Shift+PgUp, which matches the user's\n * \"this is a chat app, let me scroll the chat\" intuition. Pass true\n * (or run with `--alt-screen`) for the full-screen mode that owns the\n * terminal and prevents resize/overlay leaks of the live region —\n * trade-off is that the terminal's native scrollback is suspended\n * while the TUI is up and only what's currently on screen is visible.\n */\n altScreen?: boolean;\n /**\n * Called right after we exit the alt-screen on a clean shutdown. The\n * CLI uses this to print a one-line \"session saved to …\" hint into\n * the user's normal terminal, since alt-screen exit erases the whole\n * TUI view.\n */\n onAfterExit?: () => void;\n /** Called from /clear so the TUI can wipe its history entries while agent.ctx + memory are cleared separately. */\n onClearHistory?: (\n dispatch: React.Dispatch<{ type: 'clearHistory' } | { type: 'resetContextChip' }>,\n ) => void;\n\n // --- Fleet surface (director mode) ---\n\n /**\n * Live director instance. When set, the TUI renders a fleet panel\n * showing every spawned subagent, its current task, streaming output,\n * and runtime cost — updated live from the FleetBus. Pass null or omit\n * when multi-agent / director mode is disabled.\n */\n director?: Director | null;\n /**\n * Optional roster reference for resolving subagent role ids to\n * human-readable names. Same value passed to director.tools().\n */\n fleetRoster?: Record<string, { name: string }>;\n /**\n * Shared controller for the `/fleet stream on|off` toggle. The slash\n * command runs in the CLI process and needs to flip TUI reducer state;\n * the App installs a dispatch-backed `setEnabled` here on mount so\n * both sides stay synchronized.\n */\n /**\n * Shared controller for the `/fleet stream on|off` toggle. The slash\n * command runs in the CLI process and needs to flip TUI reducer state;\n * the App installs a dispatch-backed `setEnabled` here on mount so\n * both sides stay synchronized.\n */\n fleetStreamController?: {\n enabled: boolean;\n setEnabled: (enabled: boolean) => void;\n };\n /**\n * Controller for status bar hidden items. App installs a dispatch-backed\n * setter on mount so the /statusline slash command can update the TUI's\n * visible bar without a round-trip. The initial value is loaded from\n * the config file before App mounts.\n */\n statuslineHiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\n setStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\n /**\n * Controller for the agents monitor overlay. App installs a dispatch-backed\n * setter on mount so the `/agents on|off` slash command can toggle the\n * overlay without a round-trip.\n */\n agentsMonitorController?: {\n visible: boolean;\n setVisible: (visible: boolean) => void;\n };\n\n /**\n * If set, the App boots straight into goal mode — the text is wrapped\n * in the GOAL preamble and submitted as the first turn. Lets users\n * launch directly from the shell:\n * wstack --tui --director --goal \"audit packages/core for races\"\n * The chat shows a one-line \"🎯 Goal locked: …\" hint; the actual\n * preamble is hidden from the visible history (same as `/goal`).\n */\n initialGoal?: string;\n /**\n * If set, submitted as the first turn verbatim (no preamble). Mainly\n * for scripted shell aliases — `wstack --tui --ask \"summarize foo.md\"`\n * — that want one turn pre-populated without the goal-mode framing.\n * Ignored when `initialGoal` is also set.\n */\n initialAsk?: string;\n /**\n * Directory containing session JSONL files. Required for rewind\n * functionality. When provided the TUI can list checkpoints and\n * trigger a rewind via `/rewind` or Ctrl+R.\n */\n sessionsDir?: string;\n /**\n * SDD session context getter. When an SDD session is active, returns\n * the AI prompt context to inject into user messages.\n */\n getSDDContext?: () => string | null;\n /**\n * Process AI output for SDD auto-detection (spec, tasks, plan).\n * Returns displayable status messages.\n */\n onSDDOutput?: (output: string) => Promise<string[]>;\n /**\n * Subscribe to AutoPhase phase/graph events from the PhaseOrchestrator.\n * Returns an unsubscribe function. The TUI uses this to drive the\n * PhaseMonitor and PhasePanel live views via dispatch actions.\n */\n subscribeAutoPhase?: (\n handler: (event: string, payload: unknown) => void,\n ) => () => void;\n /**\n * Read the persisted autonomy settings (defaultMode, autoProceedDelayMs).\n * Used by the SettingsPicker in the TUI on mount and after Ctrl+S toggle.\n */\n getSettings?: () => { mode: 'off' | 'suggest' | 'auto'; delayMs: number };\n /**\n * Persist autonomy settings changes. Returns null on success, or an\n * error string on failure (so the TUI can display it as a hint).\n */\n saveSettings?: (s: { mode: 'off' | 'suggest' | 'auto'; delayMs: number }) => string | null | Promise<string | null>;\n}\n\n// Bracketed paste mode wraps any pasted text with these markers, letting us\n// distinguish a paste from typed input even when chunks arrive identically.\nconst BRACKETED_PASTE_ON = '\\x1b[?2004h';\nconst BRACKETED_PASTE_OFF = '\\x1b[?2004l';\n\n// Alternate-screen buffer (DECSET 1049). Switches the terminal to a\n// dedicated virtual screen; on exit, the previous scrollback is restored\n// untouched. This is what every \"full-screen TUI\" uses (vim, less, htop).\n// Without it, Ink writes its dynamic area in line with scrollback and\n// each redraw can leak the previous frame's input/status into the\n// permanent terminal history — the exact bug we hit before this change.\nconst ALT_SCREEN_ON = '\\x1b[?1049h';\nconst ALT_SCREEN_OFF = '\\x1b[?1049l';\nconst CURSOR_HOME = '\\x1b[H';\n\nexport async function runTui(opts: RunTuiOptions): Promise<number> {\n const stdout = process.stdout;\n const stdin = process.stdin;\n\n // Ink requires a TTY on both stdin and stdout. Without this guard the\n // render call would fail with a terse internal Ink error; bail with a\n // clear message so a piped invocation (`echo hi | wstack --tui`) tells\n // the user what to do instead.\n if (!stdout.isTTY || !stdin.isTTY) {\n process.stderr.write(\n 'wstack: --tui requires an interactive terminal on both stdin and stdout.\\n' +\n ' Drop the flag (use the plain REPL) or run wstack directly without piping.\\n',\n );\n return 2;\n }\n\n const useAltScreen = opts.altScreen === true;\n if (useAltScreen) {\n stdout.write(ALT_SCREEN_ON);\n stdout.write(CURSOR_HOME);\n }\n stdout.write(BRACKETED_PASTE_ON);\n\n // Animated window/tab title: a braille spinner + live status (thinking /\n // running a tool) driven by the EventBus, scrolling the app name when idle.\n // Out-of-band OSC sequence, so it never touches Ink's render. Reset on\n // cleanup(). Self-disables on a non-TTY or WRONGSTACK_NO_TITLE=1.\n const stopTitle = startTerminalTitle({ stdout, events: opts.events, model: opts.model });\n\n // Take over EVERY keystroke. Raw mode (Ink turns this on when render\n // mounts) already disables ICANON/ECHO/ISIG/IXON on Linux+macOS, so\n // Ctrl+C/Z/\\\\/S/Q arrive as input bytes instead of generating\n // signals or being eaten by the terminal driver. Belt-and-suspenders:\n // install no-op handlers for the suspend/quit signals just in case\n // some shell or terminal still surfaces them — without these, a\n // stray Ctrl+Z could background the TUI mid-session.\n const swallowSignals: NodeJS.Signals[] = ['SIGTSTP', 'SIGQUIT', 'SIGTTIN', 'SIGTTOU'];\n const swallow = () => {};\n for (const s of swallowSignals) {\n try {\n process.on(s, swallow);\n } catch {\n // Signal not supported on this platform (Windows ignores most of\n // these). Safe to skip — there's nothing for the terminal to\n // deliver in the first place.\n }\n }\n\n // Track cleanup state so signal handlers don't double-disable. Order\n // matters on exit: paste mode off first (it's a screen-independent\n // setting), then alt-screen off (which restores the user's previous\n // terminal contents).\n let cleaned = false;\n const cleanup = () => {\n if (cleaned) return;\n cleaned = true;\n try {\n stopTitle();\n } catch {\n // title controller already torn down — ignore.\n }\n try {\n stdout.write(BRACKETED_PASTE_OFF);\n if (useAltScreen) {\n stdout.write(ALT_SCREEN_OFF);\n }\n } catch {\n // stdout may already be closed during shutdown — ignore.\n }\n };\n\n // If the process is killed externally (terminal closed, SIGTERM from a\n // supervisor) waitUntilExit's .then/.catch never runs. Register signal +\n // exit listeners so the terminal isn't left in bracketed-paste mode.\n const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGHUP', 'SIGINT'];\n const signalHandler = () => cleanup();\n const exitHandler = () => cleanup();\n for (const s of signals) process.on(s, signalHandler);\n process.on('exit', exitHandler);\n\n const detachListeners = () => {\n for (const s of signals) process.off(s, signalHandler);\n for (const s of swallowSignals) {\n try {\n process.off(s, swallow);\n } catch {\n // ignore — see install site\n }\n }\n process.off('exit', exitHandler);\n };\n\n return new Promise<number>((resolve) => {\n let exitCode = 0;\n const onExit = (code: number) => {\n exitCode = code;\n };\n const settle = (code: number) => {\n cleanup();\n detachListeners();\n // Once the alt-screen is dismantled the user is staring at their\n // pre-TUI terminal again — print a quick line so they can see\n // where the session is preserved, instead of wondering \"where did\n // my chat go?\". Best-effort: callback failures don't change exit.\n if (useAltScreen && opts.onAfterExit) {\n try {\n opts.onAfterExit();\n } catch {\n // ignore — UX helper, not load-bearing\n }\n }\n resolve(code);\n };\n\n let instance: ReturnType<typeof render>;\n try {\n instance = render(\n React.createElement(App, {\n agent: opts.agent,\n slashRegistry: opts.slashRegistry,\n attachments: opts.attachments,\n events: opts.events,\n tokenCounter: opts.tokenCounter,\n visionAdapters: opts.visionAdapters,\n supportsVision: opts.supportsVision,\n model: opts.model,\n banner: opts.banner ?? true,\n queueStore: opts.queueStore,\n yolo: opts.yolo,\n getYolo: opts.getYolo,\n getAutonomy: opts.getAutonomy,\n getEternalEngine: opts.getEternalEngine,\n getParallelEngine: opts.getParallelEngine,\n subscribeEternalIteration: opts.subscribeEternalIteration,\n subscribeEternalStage: opts.subscribeEternalStage,\n subscribeAutoPhase: opts.subscribeAutoPhase,\n appVersion: opts.appVersion,\n provider: opts.provider,\n family: opts.family,\n keyTail: opts.keyTail,\n getPickableProviders: opts.getPickableProviders,\n switchProviderAndModel: opts.switchProviderAndModel,\n switchAutonomy: opts.switchAutonomy,\n effectiveMaxContext: opts.effectiveMaxContext,\n onExit,\n director: opts.director ?? null,\n fleetRoster: opts.fleetRoster,\n onClearHistory: opts.onClearHistory\n ? (dispatch) => opts.onClearHistory!(dispatch)\n : undefined,\n fleetStreamController: opts.fleetStreamController,\n statuslineHiddenItems: opts.statuslineHiddenItems,\n setStatuslineHiddenItems: opts.setStatuslineHiddenItems,\n agentsMonitorController: opts.agentsMonitorController,\n initialGoal: opts.initialGoal,\n initialAsk: opts.initialAsk,\n getSDDContext: opts.getSDDContext,\n onSDDOutput: opts.onSDDOutput,\n sessionsDir: opts.sessionsDir,\n projectRoot: opts.projectRoot,\n getSettings: opts.getSettings,\n saveSettings: opts.saveSettings,\n }),\n { exitOnCtrlC: false },\n );\n } catch (err) {\n process.stderr.write(\n `wstack: TUI failed to start: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n settle(1);\n return;\n }\n // Non-altScreen mode: terminal reflows visible text on resize BEFORE\n // Ink can react, which leaks one or more lines of the live region\n // (input prompt, status bar) into native scrollback. We can't recover\n // what the terminal already pushed up, but we CAN ensure no leftover\n // ghosts persist below the cursor by erasing from-cursor-to-end on\n // every resize. Combined with Ink's automatic re-render on resize,\n // this minimizes the artifact to (at most) the lines the terminal\n // itself pushed up at the moment of the resize event.\n //\n // For users doing heavy resize / split-pane workflows, --alt-screen\n // is the bullet-proof fix: Ink renders into a separate screen buffer\n // that has no native scrollback, so terminal-side reflow can't push\n // anything anywhere. Trade-off documented in tui/README.md.\n let detachResize: (() => void) | null = null;\n if (!useAltScreen) {\n const onResize = () => {\n try {\n // \\x1b[J = erase from cursor to end of screen. Does NOT touch\n // anything above the cursor, so committed Static history in\n // scrollback is preserved. Ink's useStdout subscriber will\n // immediately re-render the live region at the new width.\n // Do NOT prefix with \\x1b[H: homing to (0,0) erases the visible\n // committed output and repositions the live region (input + status\n // bar) at the top of the viewport instead of the bottom.\n stdout.write('\\x1b[J');\n } catch {\n // stdout might be detached mid-shutdown — ignore.\n }\n };\n stdout.on('resize', onResize);\n detachResize = () => stdout.off('resize', onResize);\n }\n\n instance\n .waitUntilExit()\n .then(() => {\n detachResize?.();\n settle(exitCode);\n })\n .catch(() => {\n detachResize?.();\n settle(1);\n });\n });\n}"]}
|