@wrongstack/cli 0.5.0 → 0.5.2

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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/slash-commands/sdd.ts","../src/provider-config-utils.ts","../src/webui-server.ts","../src/plugin-api-factory.ts","../src/arg-parser.ts","../src/boot-config.ts","../src/input-reader.ts","../src/provider-helpers.ts","../src/picker.ts","../src/slash-commands/helpers.ts","../src/slash-commands/clear.ts","../src/slash-commands/compact.ts","../src/slash-commands/context.ts","../src/slash-commands/diag-stats.ts","../src/slash-commands/fleet.ts","../src/slash-commands/health.ts","../src/slash-commands/help.ts","../src/slash-commands/init.ts","../src/slash-commands/memory.ts","../src/slash-commands/metrics.ts","../src/slash-commands/plan.ts","../src/slash-commands/plugin.ts","../src/slash-commands/session.ts","../src/slash-commands/skill.ts","../src/slash-commands/spawn-agents.ts","../src/slash-commands/todos.ts","../src/slash-commands/tools.ts","../src/slash-commands/yolo.ts","../src/slash-commands/autonomy.ts","../src/slash-commands/mode.ts","../src/slash-commands/index.ts","../src/slash-commands/skill-generator.ts","../src/slash-commands/skill-install.ts","../src/pre-launch.ts","../src/diff-renderer.ts","../src/theme.ts","../src/renderer.ts","../src/auth-menu.ts","../src/subcommands/handlers/auth.ts","../src/version.ts","../src/subcommands/handlers/diag-doctor.ts","../src/subcommands/handlers/export.ts","../src/subcommands/handlers/init.ts","../src/subcommands/handlers/mcp.ts","../src/plugin-management.ts","../src/subcommands/handlers/plugin-usage.ts","../src/subcommands/handlers/projects.ts","../src/subcommands/handlers/providers-models.ts","../src/subcommands/handlers/helpers.ts","../src/subcommands/handlers/sessions-config.ts","../src/subcommands/handlers/tools-skills.ts","../src/subcommands/handlers/version-help.ts","../src/subcommands/index.ts","../src/utils.ts","../src/boot.ts","../src/repl.ts","../src/execution.ts","../src/multi-agent.ts","../src/permission-prompt.ts","../src/session-stats.ts","../src/spinner.ts","../src/wiring/pipeline.ts","../src/wiring/provider.ts","../src/wiring/session.ts","../src/index.ts"],"names":["path5","projectContext","color","resolve","req","fs13","path13","DefaultSecretVault","decryptConfigSecrets","encryptConfigSecrets","atomicWrite","path","os","fs","path2","os2","fs2","fs3","path3","msg","policy","path4","fs4","labels","path6","os3","installer","fs5","path7","answer","theme","baseUrl","fs6","fs7","path8","fs8","path9","fs9","path10","detected","fs10","fs11","path11","fs12","os5","createRequire","path12","runCtrl","sddPhase","pct","getActiveSDDContext","trySaveSpecFromAIOutput","trySaveImplementationPlan","trySaveTasksFromAIOutput","autoDetectTaskCompletion","getTaskProgress","getActiveSDDPhase","runWebUI","path14","randomUUID","path15","taskId","FILLED","EMPTY","renderContextChip","renderProgress","createDefaultPipelines","capabilitiesFor","Agent","makeProviderFromConfig","path16","Context","loadPlan","resolveBundledSkillsDir","DefaultPathResolver","createDefaultContainer","TOKENS","ToolRegistry","builtinToolsPack","EventBus","createApi","stat","lines","t","loadDirectorState","director"],"mappings":"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","file":"index.js","sourcesContent":["import * as path from 'node:path';\nimport type { SlashCommand, SpecRequirement } from '@wrongstack/core';\nimport {\n SpecParser,\n SpecStore,\n TaskGraphStore,\n AISpecBuilder,\n SpecVersioning,\n analyzeCriticalPath,\n renderTaskGraph,\n renderTaskList,\n renderSpecAnalysis,\n listTemplates,\n templateToMarkdown,\n getTemplate,\n TaskGenerator,\n TaskTracker,\n TaskFlow,\n DefaultTaskStore,\n type SpecIndexEntry,\n type TaskGraphIndexEntry,\n type SpecVersion,\n type AISpecPhase,\n} from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\n/** Active AI spec builder session held in memory. */\nlet activeBuilder: AISpecBuilder | null = null;\n\n/** Active task graph and tracker for the current SDD session. */\nlet activeTaskStore: DefaultTaskStore | null = null;\nlet activeTaskTracker: TaskTracker | null = null;\nlet activeTaskGraphId: string | null = null;\n\n/**\n * Get the active SDD session context for injection into the AI conversation.\n * Returns null if no active session. Called by the REPL before agent.run().\n */\nexport function getActiveSDDContext(): string | null {\n if (!activeBuilder) return null;\n const session = activeBuilder.getSession();\n if (session.phase === 'done') return null;\n\n return activeBuilder.getAIPrompt();\n}\n\n/**\n * Get the active SDD session phase. Returns null if no active session.\n */\nexport function getActiveSDDPhase(): AISpecPhase | null {\n if (!activeBuilder) return null;\n return activeBuilder.getPhase();\n}\n\n/**\n * Parse a spec from AI output text and save it to the active session.\n * Returns true if a spec was found and saved.\n */\nexport async function trySaveSpecFromAIOutput(aiOutput: string): Promise<boolean> {\n if (!activeBuilder) return false;\n const spec = activeBuilder.tryParseSpecFromOutput(aiOutput);\n if (!spec) return false;\n activeBuilder.setSpec(spec);\n return true;\n}\n\n/**\n * Parse tasks from AI output and save them to the task graph.\n * Returns true if tasks were found and saved.\n */\nexport async function trySaveTasksFromAIOutput(aiOutput: string): Promise<boolean> {\n if (!activeBuilder) return false;\n const session = activeBuilder.getSession();\n if (!session.spec) return false;\n\n const json = activeBuilder.extractJSONArray(aiOutput);\n if (!json) return false;\n\n let tasks: Array<Record<string, unknown>>;\n try {\n tasks = JSON.parse(json);\n } catch {\n return false;\n }\n\n if (!Array.isArray(tasks) || tasks.length === 0) return false;\n\n // Validate each task has at least a title\n const validTasks = tasks.filter(t => t && typeof t === 'object' && typeof t.title === 'string' && t.title.length > 0);\n if (validTasks.length === 0) return false;\n\n // Create task graph from parsed tasks\n const store = new DefaultTaskStore();\n const tracker = new TaskTracker({ store });\n const graph = await tracker.createGraph(session.spec.id, session.spec.title);\n\n for (const task of validTasks) {\n const title = String(task.title);\n const description = String(task.description ?? '');\n const type = (['feature', 'bugfix', 'refactor', 'docs', 'test', 'chore']\n .includes(String(task.type)) ? String(task.type) : 'feature') as 'feature' | 'bugfix' | 'refactor' | 'docs' | 'test' | 'chore';\n const priority = (['critical', 'high', 'medium', 'low']\n .includes(String(task.priority)) ? String(task.priority) : 'medium') as 'critical' | 'high' | 'medium' | 'low';\n const estimateHours = Number(task.estimateHours) || 2;\n const tags = Array.isArray(task.tags) ? task.tags.map(String) : [];\n\n tracker.addNode({\n title,\n description,\n type,\n priority,\n status: 'pending',\n estimateHours,\n tags,\n });\n }\n\n activeTaskStore = store;\n activeTaskTracker = tracker;\n activeTaskGraphId = graph.id;\n\n // Save task graph ID to session for persistence\n activeBuilder.setTaskGraphId(graph.id);\n\n return true;\n}\n\n/**\n * Get the current task progress. Returns null if no tasks.\n */\nexport function getTaskProgress(): { total: number; completed: number; pending: number; percent: number } | null {\n if (!activeTaskTracker) return null;\n const progress = activeTaskTracker.getProgress();\n return {\n total: progress.total,\n completed: progress.completed,\n pending: progress.pending,\n percent: progress.percentComplete,\n };\n}\n\n/**\n * Get the current task list as text for AI context.\n */\nexport function getTaskListText(): string | null {\n if (!activeTaskTracker) return null;\n const nodes = activeTaskTracker.getAllNodes();\n if (nodes.length === 0) return null;\n\n const lines = nodes.map((n, i) => {\n const status = n.status === 'completed' ? '✅' : n.status === 'in_progress' ? '🔄' : '⏳';\n return `${i + 1}. ${status} [${n.priority}] ${n.title}`;\n });\n\n return lines.join('\\n');\n}\n\n/**\n * Mark a task as completed by title (fuzzy match).\n * Returns true if a task was found and marked.\n */\nexport function markTaskCompleted(taskTitle: string): boolean {\n if (!activeTaskTracker) return false;\n const nodes = activeTaskTracker.getAllNodes({ status: ['pending', 'in_progress'] });\n const match = nodes.find(n =>\n n.title.toLowerCase().includes(taskTitle.toLowerCase()) ||\n taskTitle.toLowerCase().includes(n.title.toLowerCase())\n );\n if (!match) return false;\n activeTaskTracker.updateNodeStatus(match.id, 'completed');\n return true;\n}\n\n/**\n * Auto-detect task completion patterns in AI output and mark tasks.\n * Returns the number of tasks marked as completed.\n *\n * Patterns detected:\n * - \"Task N: complete\" / \"Task N complete\" / \"Task N done\"\n * - \"✅ Task: <title>\" / \"✅ <title>\"\n * - \"/sdd done N\" / \"/sdd done <title>\"\n * - \"Completed: <title>\" / \"Done: <title>\"\n */\nexport function autoDetectTaskCompletion(aiOutput: string): number {\n if (!activeTaskTracker) return 0;\n const pending = activeTaskTracker.getAllNodes({ status: ['pending', 'in_progress'] });\n if (pending.length === 0) return 0;\n\n let completed = 0;\n const lines = aiOutput.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Pattern: /sdd done N or /sdd done <title>\n const sddDoneMatch = trimmed.match(/\\/sdd\\s+done\\s+(.+)/i);\n if (sddDoneMatch?.[1]) {\n const target = sddDoneMatch[1].trim();\n const num = Number(target);\n if (!Number.isNaN(num) && num >= 1 && num <= pending.length) {\n const node = pending[num - 1];\n if (node && node.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(node.id, 'completed');\n completed++;\n }\n } else {\n const match = pending.find(n =>\n n.title.toLowerCase().includes(target.toLowerCase()) ||\n target.toLowerCase().includes(n.title.toLowerCase())\n );\n if (match && match.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(match.id, 'completed');\n completed++;\n }\n }\n continue;\n }\n\n // Pattern: ✅ followed by task title\n const checkmarkMatch = trimmed.match(/^✅\\s*(?:Task:\\s*)?(.+)/i);\n if (checkmarkMatch?.[1]) {\n const title = checkmarkMatch[1].trim();\n const match = pending.find(n =>\n n.title.toLowerCase().includes(title.toLowerCase()) ||\n title.toLowerCase().includes(n.title.toLowerCase())\n );\n if (match && match.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(match.id, 'completed');\n completed++;\n }\n continue;\n }\n\n // Pattern: Task N: complete/done/finished\n const taskNumMatch = trimmed.match(/Task\\s+(\\d+)\\s*[:]\\s*(?:complete|done|finished)/i);\n if (taskNumMatch?.[1]) {\n const num = Number(taskNumMatch[1]);\n if (num >= 1 && num <= pending.length) {\n const node = pending[num - 1];\n if (node && node.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(node.id, 'completed');\n completed++;\n }\n }\n continue;\n }\n\n // Pattern: Completed: <title> or Done: <title>\n const completedMatch = trimmed.match(/^(?:Completed|Done|Finished)\\s*[:]\\s*(.+)/i);\n if (completedMatch?.[1]) {\n const title = completedMatch[1].trim();\n const match = pending.find(n =>\n n.title.toLowerCase().includes(title.toLowerCase()) ||\n title.toLowerCase().includes(n.title.toLowerCase())\n );\n if (match && match.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(match.id, 'completed');\n completed++;\n }\n }\n }\n\n return completed;\n}\n\n/**\n * Try to save implementation plan from AI output during implementation phase.\n * Extracts the text before the JSON task array as the implementation plan.\n * Returns true if a plan was saved.\n */\nexport function trySaveImplementationPlan(aiOutput: string): boolean {\n if (!activeBuilder) return false;\n const session = activeBuilder.getSession();\n if (session.phase !== 'implementation') return false;\n\n // Try to find the JSON array and extract text before it\n const jsonMatch = aiOutput.match(/```json\\s*\\[/);\n if (jsonMatch?.index && jsonMatch.index > 0) {\n const plan = aiOutput.substring(0, jsonMatch.index).trim();\n if (plan.length > 50) { // Must be substantial\n activeBuilder.setImplementation(plan);\n return true;\n }\n }\n\n // If no JSON found, save the whole output as the plan\n if (aiOutput.length > 100 && !aiOutput.includes('```json')) {\n activeBuilder.setImplementation(aiOutput.trim());\n return true;\n }\n\n return false;\n}\n\n/**\n * Get the active builder instance (for advanced integration).\n */\nexport function getActiveBuilder(): AISpecBuilder | null {\n return activeBuilder;\n}\n\n/**\n * `/sdd` — AI-driven Specification-Driven Development workflow.\n *\n * Workflow:\n * /sdd new [title] — Start AI-driven spec session (AI asks questions)\n * /sdd approve — Approve current phase (spec → impl → tasks → done)\n * /sdd execute — Execute generated tasks\n * /sdd cancel — Cancel current session\n * /sdd status — Show current session status\n *\n * Also:\n * /sdd list — List saved specs\n * /sdd show <id> — Show a spec\n * /sdd templates — List available templates\n */\nexport function buildSddCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'sdd',\n description:\n 'AI-driven SDD: /sdd [new|approve|execute|cancel|status|list|show|templates]',\n async run(args) {\n const ctx = opts.context;\n const projectRoot = ctx?.projectRoot ?? process.cwd();\n const specsDir = path.join(projectRoot, '.wrongstack', 'specs');\n const graphsDir = path.join(projectRoot, '.wrongstack', 'task-graphs');\n\n const specStore = new SpecStore({ baseDir: specsDir });\n const graphStore = new TaskGraphStore({ baseDir: graphsDir });\n const versioning = new SpecVersioning();\n\n const [verb, ...rest] = args.trim().split(/\\s+/);\n const restJoined = rest.join(' ').trim();\n\n switch (verb) {\n case '':\n case 'help':\n return { message: sddHelp() };\n\n // ── AI-Driven Spec Session ─────────────────────────────────────────\n\n case 'new':\n case 'create': {\n const forceFlag = rest.includes('--force') || rest.includes('-f');\n const title = rest.filter(a => !a.startsWith('-')).join(' ').trim() || 'Untitled Feature';\n\n // Check for existing session and offer to resume (unless --force)\n if (!activeBuilder && !forceFlag) {\n const sessionPath = path.join(projectRoot, '.wrongstack', 'sdd-session.json');\n try {\n const fsp = await import('node:fs/promises');\n await fsp.access(sessionPath);\n // Session file exists — try to load it\n const projectContext = await gatherProjectContext(projectRoot);\n const tempBuilder = new AISpecBuilder({\n store: specStore,\n projectContext,\n sessionPath,\n });\n const loaded = await tempBuilder.loadSession();\n if (loaded) {\n const existing = tempBuilder.getSession();\n if (existing.phase !== 'done') {\n return {\n message: [\n `An existing SDD session was found:`,\n ` Feature: \"${existing.title}\"`,\n ` Phase: ${existing.phase}`,\n ` Questions: ${existing.questionCount}`,\n '',\n 'Use /sdd resume to continue, or /sdd new --force to start fresh.',\n ].join('\\n'),\n };\n }\n }\n } catch {\n // No existing session — continue\n }\n }\n\n // Reset task state from previous session\n activeTaskStore = null;\n activeTaskTracker = null;\n activeTaskGraphId = null;\n\n // Gather project context for smarter AI questions\n const projectContext = await gatherProjectContext(projectRoot);\n\n activeBuilder = new AISpecBuilder({\n store: specStore,\n projectContext,\n minQuestions: 2,\n maxQuestions: 10,\n sessionPath: path.join(projectRoot, '.wrongstack', 'sdd-session.json'),\n });\n activeBuilder.startSession(title);\n\n const aiPrompt = activeBuilder.getAIPrompt();\n\n return {\n message: [\n `╔═══ SDD: AI Spec Builder ═══╗`,\n '',\n `Feature: \"${title}\"`,\n '',\n 'The AI will now ask you contextual questions.',\n 'Answer naturally — it will generate the spec when ready.',\n '',\n 'Commands: /sdd approve · /sdd status · /sdd cancel',\n ].join('\\n'),\n runText: `[SDD SESSION ACTIVE]\\n${aiPrompt}\\n\\n---\\nUser message:\\nStart the specification interview for \"${title}\". Ask your first contextual question.`,\n };\n }\n\n // ── Phase Transitions ──────────────────────────────────────────────\n\n case 'approve':\n case 'ok':\n case 'confirm': {\n if (!activeBuilder) {\n return {\n message: 'No active SDD session. Use /sdd new to start one.',\n };\n }\n\n const phase = activeBuilder.getSession().phase;\n\n if (phase === 'questioning') {\n // AI hasn't generated spec yet — tell it to generate now\n const sddCtx = activeBuilder.getAIPrompt();\n return {\n message: 'No spec generated yet. Generating now...',\n runText: `[SDD SESSION ACTIVE]\\n${sddCtx}\\n\\n---\\nUser message:\\nGenerate the complete specification now based on the conversation so far.`,\n };\n }\n\n if (phase === 'spec_review') {\n const spec = activeBuilder.getSession().spec;\n if (!spec) {\n return { message: 'No spec to approve.' };\n }\n\n // Save spec and move to implementation phase\n await activeBuilder.saveSpec();\n versioning.recordVersion(spec, 'Initial spec approved');\n activeBuilder.approve(); // spec_review → implementation\n\n const implPrompt = activeBuilder.getAIPrompt();\n return {\n message: [\n `✅ Spec \"${spec.title}\" approved and saved!`,\n `ID: ${spec.id}`,\n `Requirements: ${spec.requirements.length}`,\n '',\n 'The AI will now generate an implementation plan and tasks.',\n ].join('\\n'),\n runText: `[SDD SESSION ACTIVE]\\n${implPrompt}\\n\\n---\\nUser message:\\nGenerate the implementation plan and tasks for the approved spec.`,\n };\n }\n\n if (phase === 'task_review') {\n activeBuilder.approve(); // task_review → executing\n\n const execPrompt = activeBuilder.getAIPrompt();\n return {\n message: '✅ Tasks approved! The AI will now execute them one by one.',\n runText: `[SDD SESSION ACTIVE]\\n${execPrompt}\\n\\n---\\nUser message:\\nStart executing the tasks one by one.`,\n };\n }\n\n return {\n message: `Current phase is \"${phase}\". Use /sdd status to see details.`,\n };\n }\n\n // ── Task Execution ─────────────────────────────────────────────────\n\n case 'execute':\n case 'run': {\n if (!activeBuilder) {\n return {\n message: 'No active SDD session. Use /sdd new to start one.',\n };\n }\n\n const session = activeBuilder.getSession();\n if (session.phase !== 'executing' && session.phase !== 'task_review') {\n return {\n message: `Cannot execute in phase \"${session.phase}\". Use /sdd approve first.`,\n };\n }\n\n const execPrompt = activeBuilder.getAIPrompt();\n return {\n message: '⚡ Starting task execution. The AI will execute tasks one by one.',\n runText: `[SDD SESSION ACTIVE]\\n${execPrompt}\\n\\n---\\nUser message:\\nStart executing the tasks one by one.`,\n };\n }\n\n case 'plan':\n case 'impl': {\n if (!activeBuilder) {\n return { message: 'No active SDD session. Use /sdd new to start one.' };\n }\n\n const session = activeBuilder.getSession();\n if (!session.implementation) {\n return {\n message: session.phase === 'implementation'\n ? 'No implementation plan yet. The AI will generate it after /sdd approve.'\n : 'No implementation plan in this session.',\n };\n }\n\n return {\n message: [\n '═══ Implementation Plan ═══',\n '',\n session.implementation,\n ].join('\\n'),\n };\n }\n\n case 'spec': {\n if (!activeBuilder) {\n return { message: 'No active SDD session. Use /sdd new to start one.' };\n }\n\n const session = activeBuilder.getSession();\n if (!session.spec) {\n return {\n message: session.phase === 'questioning'\n ? 'No spec generated yet. Keep answering the AI\\'s questions.'\n : 'No spec in this session.',\n };\n }\n\n const spec = session.spec;\n const lines = [\n `═══ Current Spec ═══`,\n '',\n `Title: ${spec.title}`,\n `Version: ${spec.version}`,\n `Status: ${spec.status}`,\n '',\n '## Overview',\n spec.overview,\n ];\n\n if (spec.requirements.length > 0) {\n lines.push('', `## Requirements (${spec.requirements.length})`);\n for (const r of spec.requirements) {\n const ac = r.acceptanceCriteria.length > 0 ? ` → ${r.acceptanceCriteria.join(', ')}` : '';\n lines.push(` [${r.priority}] ${r.description}${ac}`);\n }\n }\n\n return { message: lines.join('\\n') };\n }\n\n case 'tasks':\n case 'task': {\n if (!activeTaskTracker) {\n return { message: 'No tasks generated yet. Use /sdd new to start.' };\n }\n\n const nodes = activeTaskTracker.getAllNodes();\n if (nodes.length === 0) {\n return { message: 'No tasks in the current graph.' };\n }\n\n const progress = activeTaskTracker.getProgress();\n const lines = [\n `═══ Task List (${progress.completed}/${progress.total} done) ═══`,\n '',\n ];\n\n for (let i = 0; i < nodes.length; i++) {\n const n = nodes[i]!;\n const status = n.status === 'completed' ? '✅' : n.status === 'in_progress' ? '🔄' : n.status === 'failed' ? '❌' : '⏳';\n lines.push(`${i + 1}. ${status} [${n.priority}] ${n.title}`);\n if (n.description) {\n lines.push(` ${n.description.split('\\n')[0]}`);\n }\n }\n\n return { message: lines.join('\\n') };\n }\n\n case 'done':\n case 'complete': {\n if (!activeTaskTracker) {\n return { message: 'No tasks to complete.' };\n }\n\n if (!restJoined) {\n return { message: 'Usage: /sdd done <task title or number>' };\n }\n\n // Try to match by number first\n const nodes = activeTaskTracker.getAllNodes({ status: ['pending', 'in_progress'] });\n const num = Number(restJoined);\n let matched = false;\n\n if (!Number.isNaN(num) && num >= 1 && num <= nodes.length) {\n const node = nodes[num - 1];\n if (node) {\n activeTaskTracker.updateNodeStatus(node.id, 'completed');\n matched = true;\n }\n }\n\n // Try fuzzy title match\n if (!matched) {\n const match = nodes.find(n =>\n n.title.toLowerCase().includes(restJoined.toLowerCase()) ||\n restJoined.toLowerCase().includes(n.title.toLowerCase())\n );\n if (match) {\n activeTaskTracker.updateNodeStatus(match.id, 'completed');\n matched = true;\n }\n }\n\n if (!matched) {\n return { message: `No pending task matching \"${restJoined}\".` };\n }\n\n const remaining = activeTaskTracker.getProgress();\n return {\n message: `✅ Task completed! ${remaining.completed}/${remaining.total} done (${remaining.percentComplete}%)`,\n };\n }\n\n // ── Session Management ─────────────────────────────────────────────\n\n case 'status': {\n if (!activeBuilder) {\n return { message: 'No active SDD session.' };\n }\n\n const session = activeBuilder.getSession();\n const phaseEmoji: Record<AISpecPhase, string> = {\n questioning: '❓',\n spec_review: '📋',\n implementation: '🏗️',\n task_review: '📝',\n executing: '⚡',\n done: '✅',\n };\n\n const progress = getTaskProgress();\n const lines = [\n '═══ SDD Session Status ═══',\n '',\n `Feature: \"${session.title}\"`,\n `Phase: ${phaseEmoji[session.phase]} ${session.phase}`,\n `Questions asked: ${session.questionCount}`,\n ];\n\n if (session.spec) {\n lines.push(`Spec: ${session.spec.title} (${session.spec.requirements.length} requirements)`);\n lines.push(` Requirements: ${session.spec.requirements.map(r => r.description).join(', ')}`);\n }\n\n if (session.implementation) {\n const planPreview = session.implementation.split('\\n').slice(0, 3).join(' ');\n lines.push(`Implementation: ${planPreview}${session.implementation.length > 100 ? '...' : ''}`);\n }\n\n if (progress && progress.total > 0) {\n lines.push(`Tasks: ${progress.completed}/${progress.total} (${progress.percent}%)`);\n }\n\n lines.push('', `Session ID: ${session.id}`);\n lines.push('Commands: /sdd plan · /sdd tasks · /sdd approve · /sdd cancel');\n\n return {\n message: lines.join('\\n'),\n };\n }\n\n case 'cancel': {\n // Always try to delete the session file from disk\n const sessionPath = path.join(projectRoot, '.wrongstack', 'sdd-session.json');\n let deletedFromDisk = false;\n try {\n const fsp = await import('node:fs/promises');\n await fsp.unlink(sessionPath);\n deletedFromDisk = true;\n } catch {\n // No file on disk\n }\n\n if (activeBuilder) {\n const title = activeBuilder.getSession().title;\n await activeBuilder.deleteSession();\n activeBuilder = null;\n activeTaskStore = null;\n activeTaskTracker = null;\n activeTaskGraphId = null;\n return { message: `SDD session for \"${title}\" cancelled.` };\n }\n\n if (deletedFromDisk) {\n return { message: 'Stale SDD session file deleted. You can now use /sdd new.' };\n }\n\n return { message: 'No active SDD session.' };\n }\n\n case 'resume': {\n if (activeBuilder) {\n return { message: 'An SDD session is already active. Use /sdd cancel first.' };\n }\n\n const sessionPath = path.join(projectRoot, '.wrongstack', 'sdd-session.json');\n const projectContext = await gatherProjectContext(projectRoot);\n\n activeBuilder = new AISpecBuilder({\n store: specStore,\n projectContext,\n minQuestions: 2,\n maxQuestions: 10,\n sessionPath,\n });\n\n const loaded = await activeBuilder.loadSession();\n if (!loaded) {\n activeBuilder = null;\n return { message: 'No saved SDD session found. Use /sdd new to start one.' };\n }\n\n const session = activeBuilder.getSession();\n\n // Restore task graph if it exists\n let taskCount = 0;\n let completedCount = 0;\n const taskGraphId = activeBuilder.getTaskGraphId();\n if (taskGraphId) {\n try {\n const store = new DefaultTaskStore();\n const tracker = new TaskTracker({ store });\n const graph = await tracker.loadGraph(taskGraphId);\n if (graph) {\n activeTaskStore = store;\n activeTaskTracker = tracker;\n activeTaskGraphId = taskGraphId;\n const progress = tracker.getProgress();\n taskCount = progress.total;\n completedCount = progress.completed;\n }\n } catch {\n // Task graph not found — continue without it\n }\n }\n\n const resumePrompt = activeBuilder.getAIPrompt();\n return {\n message: [\n `╔═══ SDD Session Resumed ═══╗`,\n '',\n `Feature: \"${session.title}\"`,\n `Phase: ${session.phase}`,\n `Questions asked: ${session.questionCount}`,\n session.spec ? `Spec: ${session.spec.title}` : '',\n taskCount > 0 ? `Tasks: ${completedCount}/${taskCount} completed` : '',\n '',\n 'The AI will continue from where you left off.',\n ].filter(Boolean).join('\\n'),\n runText: `[SDD SESSION ACTIVE]\\n${resumePrompt}\\n\\n---\\nUser message:\\nContinue from where we left off. Check the session status and proceed.`,\n };\n }\n\n // ── Spec Browsing ──────────────────────────────────────────────────\n\n case 'list':\n case 'ls': {\n const entries = await specStore.list();\n if (entries.length === 0) {\n return { message: 'No specs saved. Use /sdd new to create one.' };\n }\n\n const lines = entries.map((e: SpecIndexEntry, i: number) => {\n const status =\n e.status === 'draft'\n ? '📝'\n : e.status === 'approved'\n ? '✅'\n : '📋';\n return `${i + 1}. ${status} ${e.title} (${e.version}) — ${e.id.slice(0, 8)}...`;\n });\n\n return { message: `Saved Specs:\\n${lines.join('\\n')}` };\n }\n\n case 'show':\n case 'view': {\n const spec = await findSpec(specStore, restJoined);\n if (!spec) return { message: `Spec \"${restJoined}\" not found.` };\n\n const parser = new SpecParser();\n const analysis = parser.analyze(spec);\n\n return {\n message: [\n `# ${spec.title}`,\n `Version: ${spec.version} | Status: ${spec.status}`,\n '',\n '## Overview',\n spec.overview,\n '',\n `## Requirements (${spec.requirements.length})`,\n ...spec.requirements.map((r: SpecRequirement) => {\n const tags = `[${r.type}][${r.priority}]`;\n const ac =\n r.acceptanceCriteria.length > 0\n ? `\\n AC: ${r.acceptanceCriteria.join(', ')}`\n : '';\n return `- ${tags} ${r.description}${ac}`;\n }),\n '',\n renderSpecAnalysis(spec, {\n completeness: analysis.completeness,\n gaps: analysis.gaps,\n risks: analysis.risks.map((r) => r.risk),\n suggestions: analysis.suggestions,\n }),\n ].join('\\n'),\n };\n }\n\n case 'templates': {\n const templates = listTemplates();\n const lines = templates.map(\n (t: { id: string; name: string; description: string }) =>\n ` ${t.id}: ${t.name} — ${t.description}`,\n );\n return {\n message: `Available Templates:\\n${lines.join('\\n')}`,\n };\n }\n\n case 'from': {\n const templateId = restJoined || 'feature';\n const template = getTemplate(templateId);\n if (!template) {\n return {\n message: `Template \"${templateId}\" not found.\\nAvailable: ${listTemplates().map((t: { id: string }) => t.id).join(', ')}`,\n };\n }\n\n const skeleton = templateToMarkdown(template, 'New Specification');\n const spec = await specStore.createDraft('New Specification');\n await specStore.update(spec.id, { sections: [] });\n\n return {\n message: [\n `Created draft spec from template \"${template.name}\".`,\n `ID: ${spec.id}`,\n '',\n 'Edit the spec through the AI conversation or /sdd show to review.',\n '',\n skeleton,\n ].join('\\n'),\n };\n }\n\n case 'version':\n case 'history': {\n const spec = await findSpec(specStore, restJoined);\n if (!spec)\n return { message: `Spec \"${restJoined}\" not found.` };\n\n const history = versioning.getHistory(spec.id);\n if (history.length === 0) {\n return {\n message: `No version history for \"${spec.title}\".`,\n };\n }\n\n const lines = history.map(\n (v: SpecVersion, i: number) =>\n `${i + 1}. v${v.version} — ${new Date(v.timestamp).toISOString()}${v.changeDescription ? ` (${v.changeDescription})` : ''}`,\n );\n return {\n message: `Version History for \"${spec.title}\":\\n${lines.join('\\n')}`,\n };\n }\n\n default:\n return {\n message: `Unknown command \"${verb}\".\\n\\n${sddHelp()}`,\n };\n }\n },\n };\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction sddHelp(): string {\n return [\n '',\n '╔══════════════════════════════════════════════════════════════╗',\n '║ 🚀 SDD — AI-Driven Spec Builder ║',\n '╚══════════════════════════════════════════════════════════════╝',\n '',\n ' ┌─ 🆕 Start ──────────────────────────────────────────────┐',\n ' │ /sdd new [title] Start a new spec session │',\n ' │ /sdd new --force Start fresh (skip resume check) │',\n ' │ /sdd resume Resume a saved session │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 🔄 Flow ───────────────────────────────────────────────┐',\n ' │ /sdd approve Approve current phase │',\n ' │ /sdd spec Show current session\\'s spec │',\n ' │ /sdd plan Show implementation plan │',\n ' │ /sdd execute Execute generated tasks │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 📋 Task Management ────────────────────────────────────┐',\n ' │ /sdd tasks Show current task list │',\n ' │ /sdd done <N> Mark task complete (by # or name) │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 📊 Info ───────────────────────────────────────────────┐',\n ' │ /sdd status Show session status │',\n ' │ /sdd cancel Cancel session │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 📁 Spec History ───────────────────────────────────────┐',\n ' │ /sdd list List saved specs │',\n ' │ /sdd show <id> Show spec details │',\n ' │ /sdd templates List available templates │',\n ' │ /sdd from <tmpl> Create from template │',\n ' │ /sdd version <id> Show version history │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 💡 Quick Start ────────────────────────────────────────┐',\n ' │ │',\n ' │ 1. /sdd new Auth System │',\n ' │ → AI starts asking questions │',\n ' │ │',\n ' │ 2. Just type your answers naturally │',\n ' │ → AI continues the interview │',\n ' │ │',\n ' │ 3. AI generates spec (auto-detected) │',\n ' │ → /sdd approve │',\n ' │ │',\n ' │ 3. AI generates implementation + tasks │',\n ' │ → /sdd approve │',\n ' │ │',\n ' │ 4. AI executes tasks one by one │',\n ' │ → /sdd tasks (view progress) │',\n ' │ → /sdd done 1 (manual completion) │',\n ' │ │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ].join('\\n');\n}\n\n/**\n * Gather project context to help the AI ask smarter questions.\n * Reads package.json, file structure, and other indicators.\n */\nasync function gatherProjectContext(projectRoot: string): Promise<string> {\n const parts: string[] = [];\n\n try {\n const fsp = await import('node:fs/promises');\n const pkgPath = path.join(projectRoot, 'package.json');\n const pkgRaw = await fsp.readFile(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgRaw) as Record<string, unknown>;\n parts.push(`Project: ${String(pkg.name ?? 'unknown')}`);\n parts.push(`Description: ${String(pkg.description ?? 'none')}`);\n if (pkg.dependencies) {\n const deps = Object.keys(pkg.dependencies as Record<string, unknown>);\n parts.push(`Dependencies: ${deps.slice(0, 20).join(', ')}${deps.length > 20 ? '...' : ''}`);\n }\n if (pkg.devDependencies) {\n const devDeps = Object.keys(pkg.devDependencies as Record<string, unknown>);\n parts.push(`Dev Dependencies: ${devDeps.slice(0, 15).join(', ')}${devDeps.length > 15 ? '...' : ''}`);\n }\n } catch {\n // no package.json — skip\n }\n\n try {\n const fsp = await import('node:fs/promises');\n const tsconfigPath = path.join(projectRoot, 'tsconfig.json');\n await fsp.access(tsconfigPath);\n parts.push('Language: TypeScript');\n } catch {\n // no tsconfig\n }\n\n try {\n const fsp = await import('node:fs/promises');\n const srcDir = path.join(projectRoot, 'src');\n const entries = await fsp.readdir(srcDir, { withFileTypes: true });\n const dirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n if (dirs.length > 0) {\n parts.push(`Source structure: src/${dirs.join(', src/')}`);\n }\n } catch {\n // no src dir\n }\n\n return parts.join('\\n');\n}\n\nasync function findSpec(store: SpecStore, idOrTitle: string) {\n if (!idOrTitle) return null;\n const byId = await store.load(idOrTitle);\n if (byId) return byId;\n const all = await store.list();\n const match = all.find(\n (e: SpecIndexEntry) =>\n e.id.startsWith(idOrTitle) ||\n e.title.toLowerCase().includes(idOrTitle.toLowerCase()),\n );\n if (match) return store.load(match.id);\n return null;\n}\n\nasync function findGraph(store: TaskGraphStore, idOrTitle: string) {\n if (!idOrTitle) {\n const all = await store.list();\n if (all.length === 0) return null;\n const first = all[0];\n return first ? store.load(first.id) : null;\n }\n const byId = await store.load(idOrTitle);\n if (byId) return byId;\n const all = await store.list();\n const match = all.find(\n (e: TaskGraphIndexEntry) =>\n e.id.startsWith(idOrTitle) ||\n e.title.toLowerCase().includes(idOrTitle.toLowerCase()),\n );\n if (match) return store.load(match.id);\n return null;\n}\n","/**\n * Pure helpers for ProviderConfig shape normalisation, key masking, and\n * timestamp generation. Shared between auth-menu.ts, webui-server.ts, and\n * any future code that touches the config `providers` map.\n *\n * These are intentionally side-effect-free — config I/O (vault encrypt/decrypt,\n * atomic writes) lives closer to the call sites where the vault is available.\n */\nimport type { ProviderApiKey, ProviderConfig } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\n\n/**\n * Normalize a ProviderConfig to the canonical `apiKeys[]` form.\n * Migrates the legacy single-key `apiKey` field on the fly so every\n * consumer sees a uniform shape. Does NOT mutate the input.\n */\nexport function normalizeKeys(cfg: ProviderConfig): ProviderApiKey[] {\n if (Array.isArray(cfg.apiKeys) && cfg.apiKeys.length > 0) {\n return cfg.apiKeys.map((k) => ({ ...k }));\n }\n if (typeof cfg.apiKey === 'string' && cfg.apiKey.length > 0) {\n return [{ label: 'default', apiKey: cfg.apiKey, createdAt: '' }];\n }\n return [];\n}\n\n/**\n * Write a normalized key list back into a ProviderConfig. Keeps the\n * legacy `apiKey` field mirrored to the active entry so code that\n * bypasses the config loader still sees a usable key.\n */\nexport function writeKeysBack(cfg: ProviderConfig, keys: ProviderApiKey[]): void {\n if (keys.length === 0) {\n delete cfg.apiKeys;\n delete cfg.apiKey;\n delete cfg.activeKey;\n return;\n }\n cfg.apiKeys = keys;\n const active = keys.find((k) => k.label === cfg.activeKey) ?? keys[0]!;\n cfg.apiKey = active.apiKey;\n if (!cfg.activeKey || !keys.some((k) => k.label === cfg.activeKey)) {\n cfg.activeKey = active.label;\n }\n}\n\n/**\n * Return the label of the active key, or the first key's label if no\n * active is pinned. Returns `undefined` when there are no keys at all.\n */\nexport function activeLabel(cfg: ProviderConfig, keys: ProviderApiKey[]): string | undefined {\n if (cfg.activeKey && keys.some((k) => k.label === cfg.activeKey)) return cfg.activeKey;\n return keys[0]?.label;\n}\n\n/** Mask an API key for display: show first 4 + last 4 chars. */\nexport function maskedKey(key: string): string {\n if (!key) return color.dim('—');\n if (key.length <= 8) return color.dim('•'.repeat(key.length));\n const head = key.slice(0, 4);\n const tail = key.slice(-4);\n return `${color.dim(head + '…')}${tail}`;\n}\n\n/** ISO-8601 timestamp for key `createdAt` fields. */\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n","import * as crypto from 'node:crypto';\r\nimport * as fs from 'node:fs/promises';\r\nimport * as path from 'node:path';\r\nimport type { Agent, EventBus, ModelsRegistry, SessionWriter } from '@wrongstack/core';\r\nimport { type ProviderConfig, atomicWrite } from '@wrongstack/core';\r\nimport {\r\n DefaultSecretVault,\r\n decryptConfigSecrets,\r\n encryptConfigSecrets,\r\n} from '@wrongstack/core/security';\r\nimport { WebSocket, WebSocketServer } from 'ws';\r\nimport { maskedKey, normalizeKeys, nowIso, writeKeysBack } from './provider-config-utils.js';\r\n\r\n// Re-export types from webui for type checking\r\n// At runtime, the actual types are resolved via workspace resolution\r\n\r\n// WSServerMessage and WSClientMessage types (mirrors packages/webui/src/types.ts)\r\nexport interface WSServerMessage {\r\n type: string;\r\n payload: unknown;\r\n}\r\n\r\nexport interface WSClientMessage {\r\n type: string;\r\n payload?: unknown;\r\n}\r\n\r\ninterface WebUIOptions {\r\n agent: Agent;\r\n events: EventBus;\r\n session: SessionWriter;\r\n port?: number;\r\n modelsRegistry?: ModelsRegistry;\r\n globalConfigPath?: string;\r\n}\r\n\r\ninterface ConnectedClient {\r\n ws: WebSocket;\r\n sessionId: string | null;\r\n}\r\n\r\nexport async function runWebUI(opts: WebUIOptions): Promise<void> {\r\n const port = opts.port ?? 3457;\r\n const clients = new Map<WebSocket, ConnectedClient>();\r\n let abortController: AbortController | null = null;\r\n\r\n // Generate a random auth token to prevent unauthorized local connections.\r\n // The WebUI frontend reads this from the session.start payload and uses it\r\n // for subsequent reconnections. Loopback connections are exempt for\r\n // convenience (matches standalone WebUI server behavior).\r\n const authToken = crypto.randomBytes(16).toString('hex');\r\n\r\n const wss = new WebSocketServer({ port, host: '127.0.0.1', maxPayload: 1 * 1024 * 1024 });\r\n\r\n console.log(`[WebUI] WebSocket server starting on ws://localhost:${port}`);\r\n\r\n // Subscribe to events once\r\n const eventUnsubscribers: Array<() => void> = [];\r\n\r\n function setupEvents() {\r\n // Clear any existing subscriptions\r\n for (const unsub of eventUnsubscribers) unsub();\r\n eventUnsubscribers.length = 0;\r\n\r\n // iteration.started\r\n eventUnsubscribers.push(\r\n opts.events.on('iteration.started', (e) => {\r\n broadcast({\r\n type: 'iteration.started',\r\n payload: { index: e.index },\r\n });\r\n }),\r\n );\r\n\r\n // provider.text_delta\r\n eventUnsubscribers.push(\r\n opts.events.on('provider.text_delta', (e) => {\r\n broadcast({\r\n type: 'provider.text_delta',\r\n payload: { text: e.text, messageId: 'current' },\r\n });\r\n }),\r\n );\r\n\r\n // provider.thinking_delta — extended-thinking deltas. The WebUI renders a\r\n // transient \"Thinking…\" chip from these; clears the moment text_delta /\r\n // tool.started / provider.response / run.result lands so the chip never\r\n // pollutes the persisted transcript.\r\n eventUnsubscribers.push(\r\n opts.events.on('provider.thinking_delta', (e) => {\r\n broadcast({\r\n type: 'provider.thinking_delta',\r\n payload: { text: e.text },\r\n });\r\n }),\r\n );\r\n\r\n // tool.started\r\n eventUnsubscribers.push(\r\n opts.events.on('tool.started', (e) => {\r\n broadcast({\r\n type: 'tool.started',\r\n payload: {\r\n id: e.id,\r\n name: e.name,\r\n input: e.input,\r\n messageId: `tool_${e.id}`,\r\n },\r\n });\r\n }),\r\n );\r\n\r\n // tool.progress\r\n eventUnsubscribers.push(\r\n opts.events.on('tool.progress', (e) => {\r\n broadcast({\r\n type: 'tool.progress',\r\n payload: {\r\n name: e.name,\r\n id: e.id,\r\n event: e.event,\r\n },\r\n });\r\n }),\r\n );\r\n\r\n // tool.executed\r\n eventUnsubscribers.push(\r\n opts.events.on('tool.executed', (e) => {\r\n broadcast({\r\n type: 'tool.executed',\r\n payload: {\r\n // Forward the tool_use id so the WebUI can correlate this with\r\n // the matching tool.started bubble for parallel tool calls.\r\n id: e.id,\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 },\r\n });\r\n }),\r\n );\r\n\r\n // provider.response\r\n eventUnsubscribers.push(\r\n opts.events.on('provider.response', (e) => {\r\n broadcast({\r\n type: 'provider.response',\r\n payload: {\r\n usage: e.usage,\r\n stopReason: e.stopReason,\r\n messageId: 'current',\r\n },\r\n });\r\n }),\r\n );\r\n\r\n // error\r\n eventUnsubscribers.push(\r\n opts.events.on('error', (e) => {\r\n broadcast({\r\n type: 'error',\r\n payload: {\r\n phase: e.phase,\r\n message: e.err instanceof Error ? e.err.message : String(e.err),\r\n },\r\n });\r\n }),\r\n );\r\n }\r\n\r\n return new Promise<void>((resolve) => {\r\n wss.on('listening', () => {\r\n console.log(`[WebUI] WebSocket server running on ws://localhost:${port}`);\r\n setupEvents();\r\n });\r\n\r\n wss.on('connection', (ws, req) => {\r\n // --- Auth token + Origin validation ---\r\n // Loopback connections (from the WebUI frontend on localhost) are\r\n // allowed without a token for convenience. Non-loopback connections\r\n // require the token passed as ?token=<authToken>.\r\n const isLoopback = (hostname: string) =>\r\n hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1' || hostname === '[::1]';\r\n\r\n try {\r\n const url = new URL(req.url ?? '/', `http://localhost:${port}`);\r\n const token = url.searchParams.get('token');\r\n const tokenOk = token === authToken;\r\n\r\n // Origin validation\r\n const origin = req.headers.origin;\r\n if (origin) {\r\n try {\r\n const { hostname } = new URL(origin);\r\n if (!isLoopback(hostname) && !tokenOk) {\r\n ws.close(4003, 'Forbidden: non-loopback origin requires auth token');\r\n return;\r\n }\r\n } catch {\r\n ws.close(4003, 'Forbidden: invalid origin');\r\n return;\r\n }\r\n } else {\r\n // Non-browser client (no origin header): require token for\r\n // defense-in-depth. Even though we bind to 127.0.0.1, a\r\n // compromised local process or DNS rebinding attack could\r\n // connect without an origin.\r\n if (!tokenOk) {\r\n ws.close(4003, 'Forbidden: auth token required for non-browser clients');\r\n return;\r\n }\r\n }\r\n } catch {\r\n ws.close(4001, 'Unauthorized: malformed request');\r\n return;\r\n }\r\n\r\n const client: ConnectedClient = { ws, sessionId: opts.session.id };\r\n clients.set(ws, client);\r\n console.log('[WebUI] Client connected');\r\n\r\n ws.on('message', async (data) => {\r\n try {\r\n const msg = JSON.parse(data.toString()) as WSClientMessage;\r\n await handleMessage(ws, client, msg);\r\n } catch (err) {\r\n console.error('[WebUI] Failed to parse message', err);\r\n }\r\n });\r\n\r\n ws.on('close', () => {\r\n console.log('[WebUI] Client disconnected');\r\n clients.delete(ws);\r\n });\r\n\r\n // Send session.start to the new client (includes wsToken for reconnection)\r\n send(ws, {\r\n type: 'session.start',\r\n payload: {\r\n sessionId: opts.session.id,\r\n model: opts.agent.ctx.model,\r\n provider: (opts.agent.ctx.provider as { id: string }).id,\r\n wsToken: authToken,\r\n },\r\n });\r\n });\r\n\r\n wss.on('error', (err) => {\r\n console.error('[WebUI] Server error:', err);\r\n });\r\n\r\n // Graceful shutdown\r\n function shutdown() {\r\n console.log('[WebUI] Shutting down...');\r\n for (const unsub of eventUnsubscribers) unsub();\r\n for (const [ws] of clients) {\r\n ws.close();\r\n }\r\n clients.clear();\r\n wss.close(() => {\r\n console.log('[WebUI] Server stopped');\r\n resolve();\r\n });\r\n }\r\n\r\n process.on('SIGINT', shutdown);\r\n process.on('SIGTERM', shutdown);\r\n });\r\n\r\n async function handleMessage(\r\n ws: WebSocket,\r\n client: ConnectedClient,\r\n msg: WSClientMessage,\r\n ): Promise<void> {\r\n switch (msg.type) {\r\n case 'user_message':\r\n await handleUserMessage(\r\n ws,\r\n client,\r\n (msg as { payload: { content: string } }).payload.content,\r\n );\r\n break;\r\n\r\n case 'abort':\r\n abortController?.abort();\r\n broadcast({\r\n type: 'error',\r\n payload: { phase: 'abort', message: 'User aborted' },\r\n });\r\n break;\r\n\r\n case 'ping':\r\n send(ws, { type: 'pong', payload: {} });\r\n break;\r\n\r\n case 'providers.list':\r\n await handleProvidersList(ws);\r\n break;\r\n\r\n case 'provider.models':\r\n await handleProviderModels(\r\n ws,\r\n (msg as { payload: { providerId: string } }).payload.providerId,\r\n );\r\n break;\r\n\r\n case 'providers.saved':\r\n await handleProvidersSaved(ws);\r\n break;\r\n\r\n case 'key.add':\r\n case 'key.update': {\r\n const m = msg as { payload: { providerId: string; label: string; apiKey: string } };\r\n await handleKeyUpsert(ws, m.payload.providerId, m.payload.label, m.payload.apiKey);\r\n break;\r\n }\r\n\r\n case 'key.delete': {\r\n const m = msg as { payload: { providerId: string; label: string } };\r\n await handleKeyDelete(ws, m.payload.providerId, m.payload.label);\r\n break;\r\n }\r\n\r\n case 'key.set_active': {\r\n const m = msg as { payload: { providerId: string; label: string } };\r\n await handleKeySetActive(ws, m.payload.providerId, m.payload.label);\r\n break;\r\n }\r\n\r\n case 'provider.add': {\r\n const m = msg as {\r\n payload: { id: string; family: string; baseUrl?: string; apiKey?: string };\r\n };\r\n await handleProviderAdd(ws, m.payload);\r\n break;\r\n }\r\n\r\n case 'provider.remove': {\r\n const m = msg as { payload: { providerId: string } };\r\n await handleProviderRemove(ws, m.payload.providerId);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n async function handleUserMessage(\r\n ws: WebSocket,\r\n client: ConnectedClient,\r\n content: string,\r\n ): Promise<void> {\r\n // Guard against overlapping runs on the same Agent instance. Two\r\n // rapid user messages would otherwise start a second agent.run()\r\n // before the first one's cleanup settles, corrupting context state.\r\n if (abortController) {\r\n send(ws, {\r\n type: 'error',\r\n payload: { phase: 'agent.run', message: 'A run is already in progress. Abort it first.' },\r\n });\r\n return;\r\n }\r\n\r\n // Abort any existing run (safety net; the guard above makes this\r\n // unreachable in the overlapping case, but direct abort requests\r\n // from the client still need the controller reference).\r\n abortController = new AbortController();\r\n\r\n try {\r\n const result = await opts.agent.run(content, {\r\n signal: abortController.signal,\r\n });\r\n\r\n send(ws, {\r\n type: 'run.result',\r\n payload: {\r\n status: result.status,\r\n iterations: result.iterations,\r\n finalText: result.finalText,\r\n error: result.error\r\n ? {\r\n code: result.error.code,\r\n message: result.error.message,\r\n recoverable: result.error.recoverable,\r\n }\r\n : undefined,\r\n },\r\n });\r\n } catch (err) {\r\n send(ws, {\r\n type: 'error',\r\n payload: {\r\n phase: 'agent.run',\r\n message: err instanceof Error ? err.message : String(err),\r\n },\r\n });\r\n } finally {\r\n abortController = null;\r\n }\r\n }\r\n\r\n function send(ws: WebSocket, msg: WSServerMessage): void {\r\n if (ws.readyState === WebSocket.OPEN) {\r\n ws.send(JSON.stringify(msg));\r\n }\r\n }\r\n\r\n function broadcast(msg: WSServerMessage): void {\r\n const data = JSON.stringify(msg);\r\n for (const [ws] of clients) {\r\n if (ws.readyState === WebSocket.OPEN) {\r\n try {\r\n ws.send(data);\r\n } catch {\r\n // Client disconnected between the readyState check and the send\r\n // — let the 'close' handler remove it from the map naturally.\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ---- Provider/Model/Key management handlers ----\r\n\r\n async function handleProvidersList(ws: WebSocket): Promise<void> {\r\n if (!opts.modelsRegistry) {\r\n sendResult(ws, false, 'Models registry not available');\r\n return;\r\n }\r\n try {\r\n const providers = await opts.modelsRegistry.listProviders();\r\n const savedProviders = await loadSavedProviders();\r\n const savedIds = new Set(Object.keys(savedProviders));\r\n\r\n send(ws, {\r\n type: 'provider.catalog',\r\n payload: {\r\n providers: providers.map((p) => ({\r\n id: p.id,\r\n name: p.name,\r\n family: p.family,\r\n apiBase: p.apiBase,\r\n envVars: p.envVars,\r\n modelCount: p.models.length,\r\n hasApiKey: savedIds.has(p.id) || p.envVars.some((v) => !!process.env[v]),\r\n })),\r\n },\r\n });\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleProviderModels(ws: WebSocket, providerId: string): Promise<void> {\r\n if (!opts.modelsRegistry) {\r\n sendResult(ws, false, 'Models registry not available');\r\n return;\r\n }\r\n try {\r\n const provider = await opts.modelsRegistry.getProvider(providerId);\r\n if (!provider) {\r\n sendResult(ws, false, `Provider \"${providerId}\" not found in catalog`);\r\n return;\r\n }\r\n send(ws, {\r\n type: 'provider.models',\r\n payload: {\r\n provider: providerId,\r\n models: provider.models.map((m) => ({\r\n id: m.id,\r\n name: m.name,\r\n releaseDate: m.release_date,\r\n contextWindow: m.limit?.context,\r\n inputCost: m.cost?.input,\r\n outputCost: m.cost?.output,\r\n capabilities: [\r\n ...(m.tool_call ? ['tools'] : []),\r\n ...(m.reasoning ? ['reasoning'] : []),\r\n ...(m.modalities?.input?.includes('image') ? ['vision'] : []),\r\n ...(m.open_weights ? ['open_weights'] : []),\r\n ],\r\n })),\r\n },\r\n });\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleProvidersSaved(ws: WebSocket): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n send(ws, {\r\n type: 'providers.saved',\r\n payload: {\r\n providers: Object.entries(providers).map(([id, cfg]) => ({\r\n id,\r\n family: cfg.family,\r\n baseUrl: cfg.baseUrl,\r\n apiKeys: normalizeKeys(cfg).map((k) => ({\r\n label: k.label,\r\n maskedKey: maskedKey(k.apiKey),\r\n isActive: k.label === cfg.activeKey,\r\n createdAt: k.createdAt,\r\n })),\r\n })),\r\n },\r\n });\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleKeyUpsert(\r\n ws: WebSocket,\r\n providerId: string,\r\n label: string,\r\n apiKey: string,\r\n ): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n const existing = providers[providerId] ?? { type: providerId };\r\n const keys = normalizeKeys(existing);\r\n\r\n // Check if label exists\r\n const existingIdx = keys.findIndex((k) => k.label === label);\r\n if (existingIdx >= 0) {\r\n keys[existingIdx] = { ...keys[existingIdx]!, apiKey, createdAt: nowIso() };\r\n } else {\r\n keys.push({ label, apiKey, createdAt: nowIso() });\r\n }\r\n\r\n writeKeysBack(existing, keys);\r\n if (!existing.activeKey) existing.activeKey = label;\r\n providers[providerId] = existing;\r\n\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Key \"${label}\" saved for ${providerId}`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleKeyDelete(ws: WebSocket, providerId: string, label: string): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n const existing = providers[providerId];\r\n if (!existing) {\r\n sendResult(ws, false, `Provider \"${providerId}\" not found`);\r\n return;\r\n }\r\n const keys = normalizeKeys(existing).filter((k) => k.label !== label);\r\n if (keys.length === 0) {\r\n delete providers[providerId];\r\n } else {\r\n writeKeysBack(existing, keys);\r\n if (existing.activeKey === label) {\r\n existing.activeKey = keys[0]!.label;\r\n }\r\n providers[providerId] = existing;\r\n }\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Key \"${label}\" deleted from ${providerId}`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleKeySetActive(\r\n ws: WebSocket,\r\n providerId: string,\r\n label: string,\r\n ): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n const existing = providers[providerId];\r\n if (!existing) {\r\n sendResult(ws, false, `Provider \"${providerId}\" not found`);\r\n return;\r\n }\r\n existing.activeKey = label;\r\n writeKeysBack(existing, normalizeKeys(existing));\r\n providers[providerId] = existing;\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Active key for ${providerId} set to \"${label}\"`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleProviderAdd(\r\n ws: WebSocket,\r\n payload: { id: string; family: string; baseUrl?: string; apiKey?: string },\r\n ): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n if (providers[payload.id]) {\r\n sendResult(ws, false, `Provider \"${payload.id}\" already exists. Use key.add to add a key.`);\r\n return;\r\n }\r\n const newProv: ProviderConfig = {\r\n type: payload.id,\r\n family: payload.family as ProviderConfig['family'],\r\n baseUrl: payload.baseUrl,\r\n };\r\n if (payload.apiKey) {\r\n newProv.apiKeys = [{ label: 'default', apiKey: payload.apiKey, createdAt: nowIso() }];\r\n newProv.activeKey = 'default';\r\n }\r\n providers[payload.id] = newProv;\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Provider \"${payload.id}\" added`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleProviderRemove(ws: WebSocket, providerId: string): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n if (!providers[providerId]) {\r\n sendResult(ws, false, `Provider \"${providerId}\" not found`);\r\n return;\r\n }\r\n delete providers[providerId];\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Provider \"${providerId}\" removed`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n // ---- Config I/O helpers (mirrors auth-menu.ts patterns) ----\r\n\r\n async function loadSavedProviders(): Promise<Record<string, ProviderConfig>> {\r\n if (!opts.globalConfigPath) return {};\r\n let raw: string;\r\n try {\r\n raw = await fs.readFile(opts.globalConfigPath, 'utf8');\r\n } catch {\r\n return {};\r\n }\r\n let parsed: { providers?: Record<string, ProviderConfig> } = {};\r\n try {\r\n parsed = JSON.parse(raw) as { providers?: Record<string, ProviderConfig> };\r\n } catch {\r\n return {};\r\n }\r\n if (!parsed.providers) return {};\r\n // Decrypt encrypted secret-bearing fields so callers operate on plaintext.\r\n const keyFile = path.join(path.dirname(opts.globalConfigPath), '.key');\r\n const vault = new DefaultSecretVault({ keyFile });\r\n return decryptConfigSecrets(parsed.providers, vault);\r\n }\r\n\r\n async function saveProviders(providers: Record<string, ProviderConfig>): Promise<void> {\r\n if (!opts.globalConfigPath) return;\r\n let raw: string;\r\n try {\r\n raw = await fs.readFile(opts.globalConfigPath, 'utf8');\r\n } catch {\r\n raw = '{}';\r\n }\r\n let parsed: Record<string, unknown>;\r\n try {\r\n parsed = JSON.parse(raw) as Record<string, unknown>;\r\n } catch {\r\n parsed = {};\r\n }\r\n parsed.providers = providers;\r\n // Encrypt any plaintext secret-bearing fields before writing to disk.\r\n const keyFile = path.join(path.dirname(opts.globalConfigPath), '.key');\r\n const vault = new DefaultSecretVault({ keyFile });\r\n const encrypted = encryptConfigSecrets(parsed, vault);\r\n await atomicWrite(opts.globalConfigPath, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\r\n }\r\n\r\n function sendResult(ws: WebSocket, success: boolean, message: string): void {\r\n send(ws, { type: 'key.operation_result', payload: { success, message } });\r\n }\r\n} // end of runWebUI\r\n","import { DefaultPluginAPI, type PluginAPI, type PluginAPIInit } from '@wrongstack/core';\n\nexport default function createApi(\n ownerName: string,\n base: Omit<PluginAPIInit, 'ownerName'>,\n): PluginAPI {\n return new DefaultPluginAPI({ ownerName, ...base });\n}\n","/**\n * Unified CLI argument parsing. Three parsers that were previously\n * spread across index.ts, subcommands/index.ts, and slash-commands/index.ts.\n */\n\n/** Flags that are boolean-only (no value expected after them). */\nexport const BOOLEAN_FLAGS = new Set([\n 'yolo',\n 'verbose',\n 'trace',\n 'help',\n 'version',\n 'no-banner',\n 'no-features',\n 'tui',\n 'no-tui',\n 'no-recovery',\n 'recover',\n 'no-alt-screen',\n 'alt-screen',\n 'output-json',\n 'prompt',\n 'metrics',\n 'webui',\n]);\n\n// ------------------------------------------------------------------ main args\n\nexport interface ParsedArgs {\n flags: Record<string, string | boolean>;\n positional: string[];\n}\n\n/** Parse top-level `wstack` CLI args. */\nexport function parseArgs(argv: string[]): ParsedArgs {\n const flags: Record<string, string | boolean> = {};\n const positional: string[] = [];\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (!a) continue;\n if (a === '--') {\n positional.push(...argv.slice(i + 1));\n break;\n }\n if (a.startsWith('--')) {\n const eq = a.indexOf('=');\n if (eq !== -1) {\n flags[a.slice(2, eq)] = a.slice(eq + 1);\n continue;\n }\n const name = a.slice(2);\n if (BOOLEAN_FLAGS.has(name)) {\n flags[name] = true;\n continue;\n }\n if (i + 1 < argv.length && !(argv[i + 1] ?? '').startsWith('-')) {\n flags[name] = argv[++i] ?? '';\n } else {\n flags[name] = true;\n }\n } else if (a.startsWith('-') && a.length === 2) {\n const short = a.slice(1);\n const expand: Record<string, string> = { v: 'verbose' };\n flags[expand[short] ?? short] = true;\n } else {\n positional.push(a);\n }\n }\n return { flags, positional };\n}\n\n// --------------------------------------------------------------- auth flags\n\nexport interface AuthFlags {\n positional: string[];\n label?: string;\n family?: import('@wrongstack/core').WireFamily;\n baseUrl?: string;\n envVars?: string[];\n}\n\n/** Parse `wstack auth <provider> [--label ...] [--family ...] [...]` flags. */\nexport function parseAuthFlags(args: string[]): AuthFlags {\n const out: AuthFlags = { positional: [] };\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a === '--label') {\n const v = args[++i];\n if (v) out.label = v;\n } else if (a === '--family') {\n const v = args[++i];\n if (v) out.family = v as AuthFlags['family'];\n } else if (a === '--base-url') {\n const v = args[++i];\n if (v) out.baseUrl = v;\n } else if (a === '--env') {\n const v = args[++i];\n if (v)\n out.envVars = v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n } else if (a && !a.startsWith('--')) {\n out.positional.push(a);\n }\n }\n return out;\n}\n\n// -------------------------------------------------------------- spawn flags\n\nexport interface SpawnFlags {\n description: string;\n opts: { provider?: string; model?: string; tools?: string[]; name?: string };\n}\n\n/**\n * Parse `/spawn` flags from the args head. Supported:\n * --provider=<id> / -p <id> override the subagent's provider id\n * --model=<id> / -m <id> override the subagent's model\n * --name=<label> / -n <label> display name\n * --tools=a,b,c restrict the subagent's tool slice\n *\n * Anything after the last flag is the task description.\n */\nexport function parseSpawnFlags(input: string): SpawnFlags {\n const opts: SpawnFlags['opts'] = {};\n let rest = input;\n const consume = (re: RegExp): RegExpMatchArray | null => {\n const m = rest.match(re);\n if (m) {\n rest = rest.slice(m[0].length).replace(/^\\s+/, '');\n return m;\n }\n return null;\n };\n while (rest.length > 0) {\n let m: RegExpMatchArray | null;\n m = consume(/^--provider=(\\S+)\\s*/);\n if (m) opts.provider = m[1];\n else {\n m = consume(/^--model=(\\S+)\\s*/);\n if (m) opts.model = m[1];\n else {\n m = consume(/^--name=(\"([^\"]+)\"|(\\S+))\\s*/);\n if (m) opts.name = m[2] ?? m[3];\n else {\n m = consume(/^--tools=(\\S+)\\s*/);\n if (m)\n opts.tools = m[1]!\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean);\n else {\n m = consume(/^-p\\s+(\\S+)\\s*/);\n if (m) opts.provider = m[1];\n else {\n m = consume(/^-m\\s+(\\S+)\\s*/);\n if (m) opts.model = m[1];\n else {\n m = consume(/^-n\\s+(\"([^\"]+)\"|(\\S+))\\s*/);\n if (m) opts.name = m[2] ?? m[3];\n else break;\n }\n }\n }\n }\n }\n }\n }\n return { description: rest.trim(), opts };\n}\n","import * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport {\n type Config,\n DefaultConfigLoader,\n DefaultPathResolver,\n DefaultSecretVault,\n type WstackPaths,\n migratePlaintextSecrets,\n resolveWstackPaths,\n} from '@wrongstack/core';\n\nexport interface BootPaths {\n cwd: string;\n projectRoot: string;\n userHome: string;\n wpaths: WstackPaths;\n pathResolver: DefaultPathResolver;\n}\n\nexport interface BootConfigResult {\n paths: BootPaths;\n config: Config;\n vault: DefaultSecretVault;\n}\n\n/**\n * Resolve paths and load config. This covers:\n * - cwd/project resolution\n * - wstack paths\n * - secret vault creation + plaintext migration\n * - config loading with CLI flag overrides\n */\nexport async function bootConfig(\n flags: Record<string, string | boolean>,\n): Promise<BootConfigResult> {\n const cwd = typeof flags['cwd'] === 'string' ? path.resolve(flags['cwd']) : process.cwd();\n const pathResolver = new DefaultPathResolver(cwd);\n const projectRoot = pathResolver.projectRoot;\n const userHome = os.homedir();\n const wpaths = resolveWstackPaths({ projectRoot, userHome });\n await ensureProjectMeta(wpaths, projectRoot);\n\n // Vault must come first so the config loader can decrypt apiKey-like\n // fields. It lazily creates ~/.wrongstack/.key on first encrypt/decrypt.\n const vault = new DefaultSecretVault({ keyFile: wpaths.secretsKey });\n\n // Auto-encrypt any plaintext secrets users still have in their config\n // files (left over from before the vault existed, or hand-written).\n // Silent no-op for already-encrypted configs.\n for (const file of [wpaths.globalConfig, wpaths.projectLocalConfig]) {\n try {\n const { migrated } = await migratePlaintextSecrets(file, vault);\n if (migrated > 0) {\n process.stderr.write(`[wstack] Encrypted ${migrated} plaintext secret(s) in ${file}\\n`);\n }\n } catch {\n // best-effort — never block boot on migration issues\n }\n }\n\n const configLoader = new DefaultConfigLoader({ paths: wpaths, vault });\n const config = await configLoader.load({ cliFlags: flagsToConfigPatch(flags) });\n\n return {\n paths: { cwd, projectRoot, userHome, wpaths, pathResolver },\n config,\n vault,\n };\n}\n\nfunction flagsToConfigPatch(flags: Record<string, string | boolean>): Partial<Config> {\n const patch: Partial<Config> = {};\n if (typeof flags['provider'] === 'string') patch.provider = flags['provider'];\n if (typeof flags['model'] === 'string') patch.model = flags['model'];\n if (typeof flags['cwd'] === 'string') patch.cwd = flags['cwd'];\n if (typeof flags['log-level'] === 'string') {\n patch.log = { level: flags['log-level'] as Config['log']['level'] };\n } else if (flags['verbose']) {\n patch.log = { level: 'debug' };\n } else if (flags['trace']) {\n patch.log = { level: 'trace' };\n }\n if (flags['yolo']) patch.yolo = true;\n if (flags['no-features']) {\n patch.features = {\n mcp: false,\n plugins: false,\n memory: false,\n modelsRegistry: false,\n skills: false,\n };\n }\n return patch;\n}\n\nasync function ensureProjectMeta(paths: WstackPaths, projectRoot: string): Promise<void> {\n try {\n await fs.mkdir(paths.projectDir, { recursive: true });\n const meta = {\n hash: paths.projectHash,\n root: projectRoot,\n lastSeen: new Date().toISOString(),\n };\n await fs.writeFile(paths.projectMeta, JSON.stringify(meta, null, 2));\n } catch {\n // best-effort\n }\n}\n","import * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport * as readline from 'node:readline';\nimport type { InputReader, PromptOption } from '@wrongstack/core';\n\nexport interface ReadlineInputReaderOptions {\n historyFile?: string;\n prompt?: string;\n}\n\nexport class ReadlineInputReader implements InputReader {\n private rl?: readline.Interface;\n private readonly historyFile: string;\n private history: string[] = [];\n private pending = false;\n\n constructor(opts: ReadlineInputReaderOptions = {}) {\n this.historyFile = opts.historyFile ?? path.join(os.homedir(), '.wrongstack', 'history');\n }\n\n private async loadHistory(): Promise<void> {\n try {\n const raw = await fs.readFile(this.historyFile, 'utf8');\n this.history = raw.split('\\n').filter(Boolean).slice(-1000);\n } catch {\n this.history = [];\n }\n }\n\n private async saveHistory(): Promise<void> {\n try {\n await fs.mkdir(path.dirname(this.historyFile), { recursive: true });\n await fs.writeFile(this.historyFile, this.history.slice(-1000).join('\\n'));\n } catch {\n // ignore\n }\n }\n\n private ensure(): readline.Interface {\n if (!this.rl) {\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n history: this.history,\n terminal: process.stdin.isTTY,\n });\n }\n return this.rl;\n }\n\n async readLine(prompt?: string): Promise<string> {\n if (this.history.length === 0) await this.loadHistory();\n while (this.pending) {\n // Wait for the current read to settle before accepting another.\n await new Promise<void>((resolve) => setTimeout(resolve, 50));\n }\n this.pending = true;\n try {\n const rl = this.ensure();\n if (\n (rl as unknown as { closed?: boolean }).closed ||\n (rl as unknown as { _flushed?: boolean })._flushed\n ) {\n rl.close();\n this.rl = undefined;\n }\n const fresh = this.ensure();\n return new Promise<string>((resolve) => {\n fresh.question(prompt ?? '> ', (line) => {\n if (line.trim()) {\n this.history.push(line);\n void this.saveHistory();\n }\n resolve(line);\n });\n // Ctrl+C closes the readline interface — resolve with empty\n // string so callers treat it as cancel instead of crashing with\n // an unhandled EOF error.\n fresh.once('close', () => resolve(''));\n }).then((result) => {\n // Tear down after each prompt so the next call always starts\n // fresh. On Windows / Node ≥ 24 the interface can enter an\n // internally-closed state after question() resolves; reusing it\n // throws ERR_USE_AFTER_CLOSE.\n this.rl?.close();\n this.rl = undefined;\n return result;\n });\n } finally {\n this.pending = false;\n }\n }\n\n async readKey(prompt: string, options: PromptOption[]): Promise<string> {\n process.stdout.write(prompt);\n return new Promise<string>((resolve) => {\n const stdin = process.stdin;\n const wasRaw = stdin.isRaw;\n const wasPaused = stdin.isPaused();\n if (stdin.isTTY) stdin.setRawMode(true);\n stdin.resume();\n const onData = (buf: Buffer) => {\n const key = buf.toString();\n // Ctrl+C — treat as cancel (resolve with empty string).\n if (key === '\\x03') {\n cleanup();\n process.stdout.write('\\n');\n resolve('');\n return;\n }\n const opt = options.find(\n (o) => o.key.toLowerCase() === key.toLowerCase() || o.value === key,\n );\n if (opt) {\n cleanup();\n process.stdout.write(`${opt.key}\\n`);\n resolve(opt.value);\n }\n };\n const onClose = () => {\n cleanup();\n resolve('');\n };\n const cleanup = () => {\n stdin.off('data', onData);\n stdin.off('close', onClose);\n if (stdin.isTTY) stdin.setRawMode(wasRaw);\n if (wasPaused) stdin.pause();\n };\n stdin.on('data', onData);\n stdin.on('close', onClose);\n });\n }\n\n /**\n * Read a line of input while masking each character with a bullet so the\n * user gets visual confirmation that bytes are arriving (especially on\n * paste, which previously felt like nothing happened). Pasted chunks\n * are echoed as a run of bullets, Backspace/DEL erases one bullet, and\n * Ctrl+U / Ctrl+W are honored. Non-TTY input is read normally — there's\n * nothing to hide when piped, and echoing bullets to a file is noise.\n *\n * Returns the raw entered string (no trim — caller decides).\n */\n async readSecret(prompt: string): Promise<string> {\n const stdin = process.stdin;\n if (!stdin.isTTY) return this.readLine(prompt);\n // Tear down the active readline so we can take over stdin.\n this.rl?.close();\n this.rl = undefined;\n process.stdout.write(prompt);\n return new Promise<string>((resolve) => {\n let buf = '';\n const wasRaw = stdin.isRaw;\n stdin.setRawMode(true);\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const eraseChar = () => {\n // Move cursor back, overwrite with space, move back again.\n process.stdout.write('\\b \\b');\n };\n const eraseAll = () => {\n for (let i = 0; i < buf.length; i++) eraseChar();\n };\n\n const onData = (chunk: string) => {\n // Process the whole chunk at once — paste arrives as one event.\n // We walk char-by-char so embedded control bytes (e.g. a stray\n // CR inside a paste) terminate input cleanly.\n for (const ch of chunk) {\n if (ch === '\\r' || ch === '\\n') {\n cleanup();\n process.stdout.write(` ${dim(`[${buf.length} chars]`)}\\n`);\n resolve(buf);\n return;\n }\n if (ch === '\u0003') {\n // Ctrl+C\n cleanup();\n process.stdout.write('\\n');\n process.exit(130);\n }\n if (ch === '\u0015') {\n // Ctrl+U — clear line\n eraseAll();\n buf = '';\n continue;\n }\n if (ch === '\u0017') {\n // Ctrl+W — erase last whitespace-delimited token\n const m = buf.match(/(\\S+\\s*)$/);\n const drop = m ? m[0].length : buf.length;\n for (let i = 0; i < drop; i++) eraseChar();\n buf = buf.slice(0, buf.length - drop);\n continue;\n }\n if (ch === '' || ch === '\\b') {\n if (buf.length > 0) {\n buf = buf.slice(0, -1);\n eraseChar();\n }\n continue;\n }\n // Skip other control bytes silently (escape sequences, etc.).\n if (ch < ' ') continue;\n buf += ch;\n process.stdout.write('•');\n }\n };\n const cleanup = () => {\n stdin.off('data', onData);\n stdin.setRawMode(wasRaw);\n stdin.pause();\n };\n stdin.on('data', onData);\n });\n }\n\n async close(): Promise<void> {\n await this.saveHistory();\n this.rl?.close();\n this.rl = undefined;\n }\n}\n\n// Local ANSI dim — kept inline so this module has no @wrongstack/core\n// dependency for its single visual flourish.\nfunction dim(s: string): string {\n if (!process.stdout.isTTY) return s;\n return `\u001b[2m${s}\u001b[22m`;\n}\n","/**\n * Shared provider-config helpers used by the picker, main boot sequence,\n * and subcommands. Keeps provider key detection and alias resolution in\n * one place so the logic doesn't drift between call sites.\n */\nimport type { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core';\n\n/**\n * Does this provider have an API key available — either in the\n * environment (via one of its known env vars) or stored in config\n * (encrypted or plaintext)? Used to filter the picker to providers\n * the user can actually use right now.\n */\nexport function hasApiKey(provider: ResolvedProvider, config?: Config): boolean {\n if (provider.envVars.some((v) => !!process.env[v])) return true;\n const entry = config?.providers?.[provider.id];\n if (!entry) return false;\n if (typeof entry.apiKey === 'string' && entry.apiKey.length > 0) return true;\n if (Array.isArray(entry.apiKeys) && entry.apiKeys.some((k) => k?.apiKey)) return true;\n return false;\n}\n\n/**\n * Build the list of providers the user can switch to mid-session.\n * Only includes providers that have an API key available (env var or\n * stored config). Falls back to the full catalog when no keys are found.\n *\n * Models are inlined from the catalog (or from `cfg.models` for custom\n * entries) so the picker can show a real selection.\n */\nexport async function buildPickableProviders(\n modelsRegistry: ModelsRegistry,\n config: Config,\n): Promise<Array<{ id: string; family: string; models: string[] }>> {\n const overlay = config.providers ?? {};\n let catalog: Awaited<ReturnType<typeof modelsRegistry.listProviders>> = [];\n try {\n catalog = await modelsRegistry.listProviders();\n } catch {\n // catalog unavailable — keyed-by-config-only path still works\n }\n const catalogById = new Map(catalog.map((p) => [p.id, p]));\n const hasKey = (id: string): boolean => {\n const entry = overlay[id];\n const envHit = catalogById.get(id)?.envVars.some((v) => !!process.env[v]);\n if (envHit) return true;\n if (!entry) return false;\n if (typeof entry.apiKey === 'string' && entry.apiKey.length > 0) return true;\n if (Array.isArray(entry.apiKeys) && entry.apiKeys.some((k) => k?.apiKey)) return true;\n return false;\n };\n const seen = new Set<string>();\n const out: Array<{ id: string; family: string; models: string[] }> = [];\n for (const [id, cfg] of Object.entries(overlay)) {\n if (!hasKey(id)) continue;\n seen.add(id);\n const catalogType = cfg.type && cfg.type !== id ? cfg.type : id;\n const inherited = catalogById.get(catalogType);\n const family = cfg.family ?? inherited?.family ?? 'unsupported';\n if (family === 'unsupported') continue;\n const models =\n cfg.models && cfg.models.length > 0\n ? [...cfg.models]\n : (inherited?.models ?? []).map((m) => m.id);\n out.push({ id, family, models });\n }\n for (const p of catalog) {\n if (seen.has(p.id)) continue;\n if (p.family === 'unsupported') continue;\n if (!hasKey(p.id)) continue;\n out.push({ id: p.id, family: p.family, models: p.models.map((m) => m.id) });\n }\n return out;\n}\n\n/**\n * Resolve a provider id that may be an alias. When the user has\n * `providers[id].type` pointing at a different catalog entry, return\n * the catalog id so downstream lookups still work. Returns the\n * original id unchanged when it's a direct catalog match.\n */\nexport function resolveProviderAlias(providerId: string, config: Config): string {\n const savedAlias = config.providers?.[providerId];\n if (savedAlias?.type && savedAlias.type !== providerId) {\n return savedAlias.type;\n }\n return providerId;\n}\n","import type { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport { hasApiKey } from './provider-helpers.js';\nimport type { TerminalRenderer } from './renderer.js';\n\nexport interface PickerResult {\n provider: string;\n model: string;\n}\n\n/**\n * Interactive provider + model picker. Lists supported providers grouped\n * by wire family — by default only those with an API key (env or stored\n * config), so you see only what you can actually launch into. Falls back\n * to the full catalog when no keys are found anywhere.\n *\n * When `defaultProvider`/`defaultModel` are passed, they're pre-selected\n * so the user can press Enter to accept the previous choice.\n */\nexport async function runPicker(deps: {\n modelsRegistry: ModelsRegistry;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n config?: Config;\n defaultProvider?: string;\n defaultModel?: string;\n}): Promise<PickerResult | undefined> {\n const { modelsRegistry, renderer, reader, config, defaultProvider, defaultModel } = deps;\n\n renderer.write(\n `\\n${color.bold(theme.primary('WrongStack') + color.dim(' — Provider & Model Selection'))}\\n`,\n );\n renderer.write(color.dim('Loading provider catalog…\\n'));\n\n let providers: ResolvedProvider[];\n try {\n providers = await modelsRegistry.listProviders();\n } catch {\n renderer.writeError(\n 'Failed to load provider catalog. Pass --provider and --model to skip the picker.',\n );\n return undefined;\n }\n\n // Drop unsupported wire families — they need a plugin and can't be\n // selected through this path.\n const supported = providers.filter((p) => p.family !== 'unsupported');\n\n // Build the display list by overlaying saved config on top of the\n // catalog. Two kinds of saved entries matter:\n // 1. The map key matches a catalog id (`zai-coding-plan`) — the\n // user may have overridden family/baseUrl. We MUST honor those\n // overrides for grouping/display, otherwise an entry the user\n // saved as `family: \"anthropic\"` would still appear under the\n // catalog's `openai-compatible` group.\n // 2. The map key is an alias not in the catalog. Its `cfg.type` may\n // still point at a catalog id, in which case we inherit the\n // model list and display name from there.\n const catalogById = new Map(supported.map((p) => [p.id, p]));\n const overlay = config?.providers ?? {};\n const seen = new Set<string>();\n const merged: ResolvedProvider[] = [];\n for (const p of supported) {\n const cfg = overlay[p.id];\n seen.add(p.id);\n if (cfg) {\n merged.push({\n ...p,\n family: cfg.family ?? p.family,\n apiBase: cfg.baseUrl ?? p.apiBase,\n envVars: cfg.envVars && cfg.envVars.length > 0 ? cfg.envVars : p.envVars,\n // When the user has saved an explicit model list, it wins — they\n // know which models their endpoint actually serves (e.g. LM\n // Studio, vLLM, or a proxy with custom model ids). Otherwise the\n // catalog list keeps providing suggestions.\n models:\n cfg.models && cfg.models.length > 0\n ? cfg.models.map((m) => ({ id: m, name: m }))\n : p.models,\n });\n } else {\n merged.push(p);\n }\n }\n for (const [id, cfg] of Object.entries(overlay)) {\n if (seen.has(id)) continue;\n if (!cfg?.family || cfg.family === 'unsupported') continue;\n const catalogType = cfg.type && cfg.type !== id ? cfg.type : undefined;\n const inherited = catalogType ? catalogById.get(catalogType) : undefined;\n merged.push({\n id,\n name: inherited ? `${inherited.name} ${color.dim('(alias)')}` : id,\n family: cfg.family,\n apiBase: cfg.baseUrl ?? inherited?.apiBase,\n envVars: cfg.envVars ?? inherited?.envVars ?? [],\n models:\n cfg.models && cfg.models.length > 0\n ? cfg.models.map((m) => ({ id: m, name: m }))\n : (inherited?.models ?? []),\n npm: inherited?.npm,\n });\n }\n\n if (merged.length === 0) {\n renderer.writeError('No supported providers found in catalog.');\n return undefined;\n }\n\n // Filter to keyed providers. If none are keyed (fresh install, no env\n // vars set), fall back to the full list and prompt the user to add a\n // key — picking a keyless provider here is still useful because the\n // very next step (`wstack auth <prov>`) needs to know which provider.\n const keyed = merged.filter((p) => hasApiKey(p, config));\n let displayList = keyed;\n let showingFallback = false;\n if (keyed.length === 0) {\n displayList = merged;\n showingFallback = true;\n }\n\n // Group by family for nicer display\n const families = new Map<string, ResolvedProvider[]>();\n for (const p of displayList) {\n const list = families.get(p.family) ?? [];\n list.push(p);\n families.set(p.family, list);\n }\n\n // Build a flat numbered list (family → providers). Track which entry\n // matches the current default so we can highlight + accept Enter.\n const ordered: Array<{ provider: ResolvedProvider; index: number }> = [];\n const familyOrder = ['anthropic', 'openai', 'google', 'openai-compatible'];\n let idx = 1;\n let defaultIdx: number | undefined;\n renderer.write('\\n');\n for (const fam of familyOrder) {\n const list = families.get(fam);\n if (!list || list.length === 0) continue;\n renderer.write(` ${color.bold(fam)}\\n`);\n for (const p of list) {\n const envFound = p.envVars.some((v) => !!process.env[v]);\n const entry = config?.providers?.[p.id];\n const configKey =\n (typeof entry?.apiKey === 'string' && entry.apiKey.length > 0) ||\n (Array.isArray(entry?.apiKeys) && entry!.apiKeys!.some((k) => k?.apiKey));\n // ● green = env key, ◉ cyan = stored in config, ○ dim = no key\n const marker = envFound ? color.green('●') : configKey ? color.cyan('◉') : color.dim('○');\n const isDefault = p.id === defaultProvider;\n if (isDefault) defaultIdx = idx;\n const idLabel = isDefault ? color.bold(p.id) : p.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n ` ${color.dim(`${idx}.`.padStart(4))} ${marker} ${idLabel.padEnd(22)} ${color.dim(p.name)}${suffix}\\n`,\n );\n ordered.push({ provider: p, index: idx });\n idx++;\n }\n }\n\n if (showingFallback) {\n renderer.write(\n `\\n ${color.yellow('⚠ No API keys detected.')} ${color.dim('Pick a provider, then run `wstack auth <provider>` to add one.')}\\n`,\n );\n } else {\n renderer.write(`\\n ${color.dim('● = env key ◉ = stored in config ○ = no key')}\\n`);\n }\n\n // Provider prompt. Enter on an empty line accepts the default when one\n // is present; otherwise we treat it as cancel.\n const defaultHint =\n defaultIdx !== undefined && defaultProvider\n ? ` ${color.dim(`[Enter = ${defaultProvider}]`)}`\n : '';\n const providerAnswer = (\n await reader.readLine(\n `\\n${color.amber('?')} Select provider (1-${ordered.length})${defaultHint}: `,\n )\n ).trim();\n\n if (!providerAnswer) {\n if (defaultIdx !== undefined) {\n const def = ordered[defaultIdx - 1];\n if (def) return pickModel(def.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n\n const providerIdx = Number.parseInt(providerAnswer, 10);\n if (Number.isNaN(providerIdx) || providerIdx < 1 || providerIdx > ordered.length) {\n // Try matching by id\n const byId = ordered.find((o) => o.provider.id.toLowerCase() === providerAnswer.toLowerCase());\n if (!byId) {\n renderer.writeError(`Invalid selection: \"${providerAnswer}\"`);\n return undefined;\n }\n return pickModel(byId.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n\n const chosen = ordered[providerIdx - 1];\n if (!chosen) return undefined;\n // Only honor the default-model hint when the user picked the default\n // provider; switching providers invalidates it.\n const modelHint = chosen.provider.id === defaultProvider ? defaultModel : undefined;\n return pickModel(chosen.provider, modelsRegistry, renderer, reader, modelHint);\n}\n\nasync function pickModel(\n provider: ResolvedProvider,\n registry: ModelsRegistry,\n renderer: TerminalRenderer,\n reader: ReadlineInputReader,\n defaultModel?: string,\n): Promise<PickerResult | undefined> {\n renderer.write(`\\n ${color.bold(provider.name)} ${color.dim(`(${provider.id})`)} models:\\n\\n`);\n\n const models = [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n\n if (models.length === 0) {\n renderer.writeError(' No models listed for this provider in the catalog.');\n return undefined;\n }\n\n // Find default-model index for the \"Enter = default\" hint.\n const defaultIdxInModels =\n defaultModel !== undefined ? models.findIndex((m) => m.id === defaultModel) : -1;\n\n // Show paginated — up to 30 at a time\n const pageSize = 30;\n let offset = 0;\n\n while (offset < models.length) {\n const page = models.slice(offset, offset + pageSize);\n for (let i = 0; i < page.length; i++) {\n const m = page[i]!;\n const num = offset + i + 1;\n const ctx = m.limit?.context\n ? `${(m.limit.context / 1000).toFixed(0)}k`.padStart(6)\n : ' ?';\n const cost = m.cost?.input !== undefined ? `$${m.cost.input}/$${m.cost.output ?? '?'}` : '';\n const caps: string[] = [];\n if (m.tool_call) caps.push('tools');\n if (m.reasoning) caps.push('reason');\n if (m.modalities?.input?.includes('image')) caps.push('vision');\n const capStr = caps.length > 0 ? color.dim(caps.join(',')) : '';\n const isDefault = m.id === defaultModel;\n const idLabel = isDefault ? color.bold(m.id) : m.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n ` ${color.dim(`${num}.`.padStart(5))} ${idLabel.padEnd(44)} ${color.dim(ctx)} ${color.dim(cost.padEnd(14))} ${capStr}${suffix}\\n`,\n );\n }\n offset += pageSize;\n\n if (offset < models.length) {\n const more = (\n await reader.readLine(\n `\\n${color.amber('?')} Showing ${Math.min(offset, models.length)}/${models.length} — Enter number or ${color.dim('Enter')} for more: `,\n )\n ).trim();\n if (!more) continue; // show next page\n return resolveModelSelection(more, models, provider, registry, renderer, reader);\n }\n }\n\n // All shown — final prompt. Enter accepts the default model when present.\n const defaultHint =\n defaultIdxInModels >= 0 && defaultModel ? ` ${color.dim(`[Enter = ${defaultModel}]`)}` : '';\n const answer = (\n await reader.readLine(`\\n${color.amber('?')} Select model (1-${models.length})${defaultHint}: `)\n ).trim();\n if (!answer) {\n if (defaultIdxInModels >= 0 && defaultModel) {\n renderer.write(\n `\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(defaultModel)}\\n\\n`,\n );\n return { provider: provider.id, model: defaultModel };\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n return resolveModelSelection(answer, models, provider, registry, renderer, reader);\n}\n\nasync function resolveModelSelection(\n answer: string,\n models: {\n id: string;\n name: string;\n release_date?: string;\n limit?: { context?: number };\n cost?: { input?: number; output?: number };\n tool_call?: boolean;\n reasoning?: boolean;\n modalities?: { input?: string[] };\n }[],\n provider: ResolvedProvider,\n _registry: ModelsRegistry,\n renderer: TerminalRenderer,\n _reader: ReadlineInputReader,\n): Promise<PickerResult | undefined> {\n const idx = Number.parseInt(answer, 10);\n let modelId: string | undefined;\n\n if (!Number.isNaN(idx) && idx >= 1 && idx <= models.length) {\n modelId = models[idx - 1]!.id;\n } else {\n // Try fuzzy matching by id\n const lower = answer.toLowerCase();\n const match = models.find((m) => m.id.toLowerCase() === lower);\n if (match) {\n modelId = match.id;\n } else {\n // Partial match\n const partial = models.filter((m) => m.id.toLowerCase().includes(lower));\n if (partial.length === 1) {\n modelId = partial[0]!.id;\n } else if (partial.length > 1) {\n renderer.writeError(`\"${answer}\" matches multiple models. Be more specific.`);\n return undefined;\n }\n }\n }\n\n if (!modelId) {\n // Use as-is (user might know the exact model string)\n modelId = answer;\n }\n\n renderer.write(`\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(modelId)}\\n\\n`);\n\n return { provider: provider.id, model: modelId };\n}\n\n// --- Helpers ---\n\n// Simple theme alias (avoids importing the full theme module just for one color)\nconst theme = { primary: color.amber };\n\n/**\n * Save provider + model to the global config file.\n * Returns true if saved successfully.\n */\nexport async function saveToGlobalConfig(\n configPath: string,\n provider: string,\n model: string,\n): Promise<boolean> {\n try {\n const { atomicWrite } = await import('@wrongstack/core');\n const fs = await import('node:fs/promises');\n\n let existing: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(configPath, 'utf8');\n existing = JSON.parse(raw) as Record<string, unknown>;\n } catch {\n // No existing config\n }\n\n existing.provider = provider;\n existing.model = model;\n await atomicWrite(configPath, JSON.stringify(existing, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { Context } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\n\nexport interface ProjectFacts {\n build?: string;\n test?: string;\n lint?: string;\n run?: string;\n hints: string[];\n}\n\nasync function pathExists(file: string): Promise<boolean> {\n try {\n await fs.access(file);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function detectPackageManager(root: string, declared?: string): Promise<string> {\n if (declared) {\n const name = declared.split('@')[0];\n if (name) return name;\n }\n if (await pathExists(path.join(root, 'pnpm-lock.yaml'))) return 'pnpm';\n if (await pathExists(path.join(root, 'bun.lockb'))) return 'bun';\n if (await pathExists(path.join(root, 'bun.lock'))) return 'bun';\n if (await pathExists(path.join(root, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nfunction hasUsableScript(scripts: Record<string, string>, name: string): boolean {\n const script = scripts[name];\n if (typeof script !== 'string' || script.trim() === '') return false;\n if (name === 'test' && /no test specified/i.test(script)) return false;\n return true;\n}\n\nfunction parseMakeTargets(makefile: string): Set<string> {\n const targets = new Set<string>();\n for (const line of makefile.split(/\\r?\\n/)) {\n if (line.startsWith('\\t') || line.trimStart().startsWith('#')) continue;\n const match = /^([A-Za-z0-9_.-]+)\\s*:(?![=])/.exec(line);\n if (match?.[1]) targets.add(match[1]);\n }\n return targets;\n}\n\nexport async function detectProjectFacts(root: string): Promise<ProjectFacts> {\n const facts: ProjectFacts = { hints: [] };\n try {\n const pkg = JSON.parse(await fs.readFile(path.join(root, 'package.json'), 'utf8')) as {\n scripts?: Record<string, string>;\n packageManager?: string;\n };\n const scripts = pkg.scripts ?? {};\n const pm = await detectPackageManager(root, pkg.packageManager);\n if (hasUsableScript(scripts, 'build')) facts.build = `${pm} run build`;\n if (hasUsableScript(scripts, 'test')) facts.test = `${pm} test`;\n if (hasUsableScript(scripts, 'lint')) facts.lint = `${pm} run lint`;\n const runScript = ['dev', 'start', 'serve', 'preview'].find((name) =>\n hasUsableScript(scripts, name),\n );\n if (runScript) facts.run = `${pm} run ${runScript}`;\n facts.hints.push(Object.keys(scripts).length > 0 ? 'package.json scripts' : 'package.json');\n } catch {\n /* not node */\n }\n try {\n if (!(await pathExists(path.join(root, 'pyproject.toml')))) throw new Error('not python');\n facts.test ??= 'pytest';\n facts.lint ??= 'ruff check .';\n facts.hints.push('pyproject.toml');\n } catch {\n /* not python */\n }\n try {\n if (!(await pathExists(path.join(root, 'go.mod')))) throw new Error('not go');\n facts.build ??= 'go build ./...';\n facts.test ??= 'go test ./...';\n facts.run ??= 'go run .';\n facts.hints.push('go.mod');\n } catch {\n /* not go */\n }\n try {\n if (!(await pathExists(path.join(root, 'Cargo.toml')))) throw new Error('not rust');\n facts.build ??= 'cargo build';\n facts.test ??= 'cargo test';\n facts.lint ??= 'cargo clippy';\n facts.run ??= 'cargo run';\n facts.hints.push('Cargo.toml');\n } catch {\n /* not rust */\n }\n try {\n const makefile = await fs.readFile(path.join(root, 'Makefile'), 'utf8');\n const targets = parseMakeTargets(makefile);\n facts.build ??= targets.has('build') ? 'make build' : 'make';\n if (targets.has('test')) facts.test ??= 'make test';\n if (targets.has('lint')) facts.lint ??= 'make lint';\n const runTarget = ['run', 'dev', 'start', 'serve'].find((name) => targets.has(name));\n if (runTarget) facts.run ??= `make ${runTarget}`;\n facts.hints.push('Makefile');\n } catch {\n /* no make */\n }\n return facts;\n}\n\nexport function renderAgentsTemplate(f: ProjectFacts): string {\n const cmd = (s?: string) => (s ? `\\`${s}\\`` : '_TODO_');\n return `# AGENTS.md\n\nThis file is loaded into WrongStack's system prompt as project context.\nKeep it concise, factual, and durable: write the information future agents\nneed before they touch this codebase.\n\n## Project brief\n\n- **Purpose:** _What does this project do, and why does it exist?_\n- **Primary users:** _Who uses it: developers, operators, customers, internal systems?_\n- **Runtime/deployment:** _Where does it run: CLI, server, browser, worker, library, package?_\n- **Main entry points:** _Which files or commands should an agent inspect first?_\n\n## How to work safely\n\n- _Project-specific rules the agent should always follow._\n- _Files, generated artifacts, migrations, or config the agent should not edit without asking._\n- _Preferred style or architecture choices that are not obvious from the code._\n\n## Commands\n\n- **Build:** ${cmd(f.build)}\n- **Test:** ${cmd(f.test)}\n- **Lint:** ${cmd(f.lint)}\n- **Run locally:** ${cmd(f.run)}\n\n## Architecture notes\n\n_Summarize the important modules, data flow, boundaries, and ownership rules.\nMention anything a newcomer might misread._\n\n## Domain knowledge\n\n_Business rules, acronyms, invariants, external services, and notes where the\ncode looks unusual but is intentional._\n\n## Verification checklist\n\n- _What should be run after code changes?_\n- _What manual smoke test proves the common path still works?_\n- _What failure modes deserve extra attention?_\n\n## Useful pointers\n\n- _Docs, dashboards, runbooks, issue trackers, design notes, or owner contacts._\n`;\n}\n\nexport function countTurnPairs(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n if (m.role === 'user' || m.role === 'assistant') count++;\n }\n return Math.floor(count / 2);\n}\n\nexport function countToolUses(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n if (Array.isArray(m.content)) count += m.content.filter((b) => b.type === 'tool_use').length;\n }\n return count;\n}\n\nexport function countToolResults(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n if (Array.isArray(m.content)) count += m.content.filter((b) => b.type === 'tool_result').length;\n }\n return count;\n}\n\nexport function estimateTokens(messages: Context['messages']): number {\n let total = 0;\n for (const m of messages) {\n const content = m.content;\n if (typeof content === 'string') {\n total += Math.ceil(content.length / 4);\n } else if (Array.isArray(content)) {\n for (const b of content) {\n if (b.type === 'text') total += Math.ceil(b.text.length / 4);\n else if (b.type === 'tool_use' || b.type === 'tool_result')\n total += Math.ceil(JSON.stringify(b).length / 4);\n }\n }\n }\n return total;\n}\n\nexport function statusIcon(status: string): string {\n if (status === 'healthy') return color.green('\\u25cf');\n if (status === 'degraded') return color.yellow('\\u25cf');\n return color.red('\\u25cf');\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildClearCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'clear',\n description: 'Reset the session and start a new one.',\n help: [\n 'Usage:',\n ' /clear',\n '',\n 'Wipes everything in the current REPL state: messages, todos, read-file tracking,',\n 'file mtimes, meta. Memory store entries (all scopes) are cleared too. The terminal',\n 'is wiped. Use this when you want a fresh conversation without restarting `wstack`.',\n ].join('\\n'),\n async run(_args, ctx) {\n if (ctx) {\n ctx.state.replaceMessages([]);\n ctx.state.replaceTodos([]);\n ctx.readFiles.clear();\n ctx.fileMtimes.clear();\n for (const key of Object.keys(ctx.meta)) ctx.state.deleteMeta(key);\n }\n await opts.memoryStore?.clear();\n opts.onClear?.();\n opts.renderer.clear();\n const msg = 'Session cleared (context, memory, and history reset).';\n opts.renderer.writeInfo(msg);\n return { message: msg };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildCompactCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'compact',\n description: 'Compact the context window.',\n help: [\n 'Usage:',\n ' /compact Run the configured compactor with default settings.',\n ' /compact aggressive Compact more aggressively.',\n '',\n 'The compactor summarizes older turns to reclaim tokens.',\n ].join('\\n'),\n async run(args, ctx) {\n if (!opts.compactor) {\n const msg = 'No compactor configured.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n const aggressive = args.trim() === 'aggressive';\n const report = await opts.compactor.compact(ctx, { aggressive });\n const reductions = report.reductions\n .map((r: { phase: string; saved: number }) => `${r.phase}: ${r.saved}`)\n .join(', ');\n const repaired = report.repaired\n ? `; repaired ${report.repaired.removedToolUses.length} tool_use, ${report.repaired.removedToolResults.length} tool_result, ${report.repaired.removedMessages} empty messages`\n : '';\n const msg = `Compaction: ${report.before} -> ${report.after} tokens (${reductions})${repaired}`;\n opts.renderer.writeInfo(msg);\n return { message: msg };\n },\n };\n}\n","import {\n color,\n formatContextWindowModeList,\n getContextWindowMode,\n repairToolUseAdjacency,\n resolveContextWindowPolicy,\n type ContextWindowPolicy,\n} from '@wrongstack/core';\nimport type { Context, SlashCommand } from '@wrongstack/core';\nimport { countToolResults, countToolUses, countTurnPairs, estimateTokens } from './helpers.js';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildContextCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'context',\n aliases: ['ctx'],\n description: 'Show context window summary.',\n help: [\n 'Usage:',\n ' /context Show counts: messages, est. tokens, tool calls, todos, read files.',\n ' /context detail As above, plus model, cwd, projectRoot, and the file list.',\n ' /context repair Repair orphan tool_use/tool_result blocks after manual compaction.',\n ' /context mode List context-window modes.',\n ' /context mode <id> Switch context-window mode for this session.',\n ].join('\\n'),\n async run(args, ctx) {\n const trimmed = args.trim();\n\n if (trimmed === 'mode' || trimmed === 'modes') {\n const active = readPolicy(ctx)?.id ?? 'balanced';\n const msg = `${color.bold('Context Window Modes')}\\n${formatContextWindowModeList(active)}`;\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n }\n\n if (trimmed === 'repair') {\n const before = ctx.messages.length;\n const repaired = repairToolUseAdjacency(ctx.messages);\n if (repaired.report.changed) {\n ctx.state.replaceMessages(repaired.messages);\n }\n const msg = repaired.report.changed\n ? [\n `${color.green('Context repaired')}`,\n ` messages: ${before} -> ${ctx.messages.length}`,\n ` tool_use: removed ${repaired.report.removedToolUses.length}`,\n ` tool_result: removed ${repaired.report.removedToolResults.length}`,\n ` empty msgs: removed ${repaired.report.removedMessages}`,\n ].join('\\n')\n : 'Context repair: no orphan tool_use/tool_result blocks found.';\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n }\n\n if (trimmed.startsWith('mode ')) {\n const id = trimmed.slice('mode '.length).trim();\n const mode = getContextWindowMode(id);\n if (!mode) {\n const msg = `Unknown context mode \"${id}\". Use /context mode to list modes.`;\n opts.renderer.write(`${color.red(msg)}\\n`);\n return { message: msg };\n }\n const policy = resolveContextWindowPolicy({}, mode.id);\n ctx.meta['contextWindowMode'] = policy.id;\n ctx.meta['contextWindowPolicy'] = policy;\n const msg = [\n `${color.green('Context mode set:')} ${policy.id} (${policy.name})`,\n ` thresholds: warn ${pct(policy.thresholds.warn)}, soft ${pct(policy.thresholds.soft)}, hard ${pct(policy.thresholds.hard)}`,\n ` preserve: last ${policy.preserveK} user/assistant messages`,\n ` elide: old tool results >= ${policy.eliseThreshold.toLocaleString()} tokens`,\n ].join('\\n');\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n }\n\n const messages = ctx.messages;\n const detailed = trimmed === 'detail';\n const policy = readPolicy(ctx);\n const lines = [\n `${color.bold('Context Window')}`,\n ` messages: ${messages.length} total (${countTurnPairs(messages)} user+assistant pairs)`,\n ` tokens (est): ${estimateTokens(messages).toLocaleString()} (chars / 4 estimate)`,\n ` mode: ${policy ? `${policy.id} (${policy.name})` : 'balanced'}`,\n ` system prompt: ${ctx.systemPrompt.length} block${ctx.systemPrompt.length !== 1 ? 's' : ''}`,\n ` tools: ${countToolUses(messages)} calls made, ${countToolResults(messages)} results in history`,\n ` read files: ${ctx.readFiles.size} files`,\n ` todos: ${ctx.todos.filter((t) => t.status === 'in_progress').length} in_progress / ${ctx.todos.filter((t) => t.status === 'pending').length} pending / ${ctx.todos.filter((t) => t.status === 'completed').length} completed`,\n ];\n if (detailed) {\n lines.push(\n ` thresholds: warn ${pct(policy?.thresholds.warn ?? 0.6)}, soft ${pct(policy?.thresholds.soft ?? 0.75)}, hard ${pct(policy?.thresholds.hard ?? 0.9)}`,\n ` model: ${ctx.model}`,\n ` cwd: ${ctx.cwd}`,\n ` projectRoot: ${ctx.projectRoot}`,\n ` file mtimes: ${ctx.fileMtimes.size} tracked`,\n );\n if (ctx.readFiles.size > 0) lines.push(` file list: ${[...ctx.readFiles].join(', ')}`);\n }\n const msg = lines.join('\\n');\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n },\n };\n}\n\nfunction readPolicy(ctx: Context): ContextWindowPolicy | null {\n const policy = ctx.meta?.['contextWindowPolicy'];\n return policy && typeof policy === 'object' ? (policy as ContextWindowPolicy) : null;\n}\n\nfunction pct(n: number): string {\n return `${Math.round(n * 100)}%`;\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildDiagCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'diag',\n description: 'Show runtime diagnostics (provider, tokens, tools, MCP).',\n async run() {\n if (!opts.onDiag) return { message: 'Diag not available in this context.' };\n return { message: opts.onDiag() };\n },\n };\n}\n\nexport function buildStatsCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'stats',\n description: 'Show session report: tokens, requests, tools, files, cost.',\n async run() {\n if (!opts.onStats) return { message: 'Stats not available in this context.' };\n const text = opts.onStats();\n return { message: text ?? 'No session activity recorded yet.' };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildFleetCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'fleet',\n description:\n 'Inspect or control the subagent fleet: /fleet [status|usage|kill <id>|manifest|retry [taskId]|log <id>|stream on|off|help]',\n help: [\n 'Usage:',\n ' /fleet Show fleet status (alias for /fleet status).',\n ' /fleet status Pending + completed subagent task table.',\n ' /fleet usage Per-subagent runtime cost.',\n ' /fleet kill <id> Terminate a running subagent.',\n ' /fleet manifest Print the director manifest.',\n ' /fleet retry List interrupted tasks from the last run.',\n ' /fleet retry <taskId> Re-spawn the matching subagent and re-assign the task.',\n ' /fleet retry all Re-assign every interrupted task at once.',\n ' /fleet log List subagent transcripts available on disk.',\n ' /fleet log <id> Print a compact summary of a subagent transcript.',\n ' /fleet log <id> raw Dump the full per-subagent JSONL.',\n ' /fleet stream on|off Show/hide subagent activity in the main history.',\n ' /fleet help Show this help.',\n ].join('\\n'),\n async run(args) {\n if (!opts.onFleet) return { message: 'Multi-agent is not enabled in this session.' };\n const trimmed = args.trim();\n const [verb, ...rest] = trimmed.length === 0 ? ['status'] : trimmed.split(/\\s+/);\n const target = rest.join(' ').trim() || undefined;\n switch (verb) {\n case 'status':\n case 'usage':\n case 'manifest': {\n const out = await opts.onFleet(verb, undefined);\n return { message: out };\n }\n case 'kill': {\n if (!target) return { message: 'Usage: /fleet kill <subagent-id>' };\n return { message: await opts.onFleet('kill', target) };\n }\n case 'retry': {\n if (!opts.onFleetRetry) {\n return { message: 'Retry is only available when director mode is active.' };\n }\n const msg = await opts.onFleetRetry(target);\n return { message: msg };\n }\n case 'log': {\n if (!opts.onFleetLog) {\n return { message: 'Log inspection is only available when a fleet root is configured.' };\n }\n // Second word after the id, if any, picks the rendering mode\n // (raw vs summary). Default: summary.\n const [id, ...modeRest] = rest;\n const mode = modeRest.join(' ').trim() === 'raw' ? 'raw' : 'summary';\n return { message: await opts.onFleetLog(id, mode) };\n }\n case 'stream': {\n const ctrl = opts.fleetStreamController;\n if (!ctrl) {\n return { message: 'Stream toggle is only available in the TUI.' };\n }\n const arg = (target ?? '').toLowerCase();\n if (arg === '' || arg === 'status') {\n return { message: `Fleet streaming is ${ctrl.enabled ? 'on' : 'off'}.` };\n }\n if (arg !== 'on' && arg !== 'off') {\n return { message: 'Usage: /fleet stream on|off' };\n }\n const enabled = arg === 'on';\n ctrl.setEnabled(enabled);\n ctrl.enabled = enabled;\n return { message: `Fleet streaming ${enabled ? 'enabled' : 'disabled'}.` };\n }\n case 'help':\n case '?':\n return {\n message: [\n '/fleet — inspect or control the subagent fleet',\n '',\n ' /fleet → status (default)',\n ' /fleet status pending + completed tasks per subagent',\n ' /fleet usage iterations, tool calls, duration roll-up',\n ' /fleet kill <id> terminate a subagent',\n ' /fleet manifest director manifest (requires --director)',\n ].join('\\n'),\n };\n default:\n return {\n message: `Unknown subcommand \"${verb}\". Try: status | usage | kill <id> | manifest | help`,\n };\n }\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport { statusIcon } from './helpers.js';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildHealthCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'health',\n description: 'Run health checks (requires --metrics flag).',\n async run() {\n if (!opts.healthRegistry)\n return { message: 'Health checks not enabled. Restart with --metrics.' };\n const result = await opts.healthRegistry.run();\n const lines = [\n `${statusIcon(result.status)} overall: ${result.status}`,\n ...result.checks.map((c) => {\n const detail = c.detail ? color.dim(` — ${c.detail}`) : '';\n return ` ${statusIcon(c.status)} ${c.name}: ${c.status}${detail}`;\n }),\n ];\n return { message: lines.join('\\n') };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildHelpCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'help',\n description: 'Show available slash commands. Pass a name for detailed help.',\n help: [\n 'Usage:',\n ' /help List every command with its one-line description.',\n ' /help <name> Show detailed help for one command (falls back to the description).',\n '',\n 'Examples:',\n ' /help',\n ' /help context',\n ' /help model',\n ].join('\\n'),\n async run(args) {\n const query = args.trim();\n if (query) {\n const needle = query.startsWith('/') ? query.slice(1) : query;\n let match: { cmd: SlashCommand; owner: string; fullName: string } | undefined;\n for (const entry of opts.registry.listWithOwner()) {\n const aliases = entry.cmd.aliases ?? [];\n const candidates = [\n entry.cmd.name,\n entry.fullName,\n ...aliases,\n ...aliases.map((a) => (entry.owner === 'core' ? a : `${entry.owner}:${a}`)),\n ];\n if (candidates.includes(needle)) {\n match = entry;\n break;\n }\n }\n if (!match) return { message: `Unknown command: /${needle}. Run /help to list commands.` };\n const prefix = match.owner === 'core' ? '' : `${match.owner}:`;\n const header = `/${prefix}${match.cmd.name}`;\n const aliasLine = match.cmd.aliases?.length\n ? `Aliases: ${match.cmd.aliases.map((a) => `/${prefix}${a}`).join(', ')}\\n`\n : '';\n const body = match.cmd.help ?? match.cmd.description;\n return {\n message: [\n header,\n '─'.repeat(header.length),\n aliasLine + (match.cmd.help ? '' : `${match.cmd.description}\\n`),\n body,\n ]\n .filter(Boolean)\n .join('\\n'),\n };\n }\n const lines = ['Available slash commands:'];\n for (const { cmd, owner } of opts.registry.listWithOwner()) {\n const prefix = owner === 'core' ? '' : `${owner}:`;\n const aliases = cmd.aliases ? cmd.aliases.map((a) => `/${prefix}${a}`).join(', ') : '';\n const aliasStr = aliases ? ` (${aliases})` : '';\n lines.push(` /${prefix}${cmd.name}${aliasStr} — ${cmd.description}`);\n }\n lines.push('', 'Run `/help <name>` for detailed help on a specific command.');\n return { message: lines.join('\\n') };\n },\n };\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { SlashCommand } from '@wrongstack/core';\nimport { detectProjectFacts, renderAgentsTemplate } from './helpers.js';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildInitCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'init',\n description: 'Create .wrongstack/AGENTS.md project context for the system prompt.',\n async run(args, ctx) {\n const force = args.trim() === '--force';\n const dir = path.join(ctx.projectRoot, '.wrongstack');\n const file = path.join(dir, 'AGENTS.md');\n try {\n await fs.access(file);\n if (!force) {\n const msg = `AGENTS.md already exists at ${file}. Use \"/init --force\" to overwrite.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n } catch {\n /* proceed */\n }\n const detected = await detectProjectFacts(ctx.projectRoot);\n const body = renderAgentsTemplate(detected);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(file, body, 'utf8');\n if (detected.hints.length > 0) {\n const msg = `Wrote ${file}\\nPre-filled: ${detected.hints.join(', ')}. Edit the file with project context and instructions the system prompt should carry.`;\n opts.renderer.writeInfo(`Wrote ${file}`);\n opts.renderer.writeInfo(\n `Pre-filled: ${detected.hints.join(', ')}. Edit the file with project context and instructions the system prompt should carry.`,\n );\n return { message: msg };\n }\n const msg = `Wrote ${file}\\nNo project type auto-detected. Edit the file with project context and instructions the system prompt should carry.`;\n opts.renderer.writeInfo(`Wrote ${file}`);\n return { message: msg };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildMemoryCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'memory',\n description:\n 'Inspect or edit persistent memory: /memory [show|remember <text>|forget <query>|clear]',\n async run(args) {\n const store = opts.memoryStore;\n if (!store) return { message: 'No memory store configured.' };\n const [verb, ...rest] = args.trim().split(/\\s+/);\n const restJoined = rest.join(' ').trim();\n switch (verb) {\n case '':\n case 'show':\n case 'list': {\n const text = await store.readAll();\n return {\n message:\n text.trim().length === 0\n ? 'Memory is empty. Add an entry with `/memory remember <text>`.'\n : text,\n };\n }\n case 'remember':\n case 'add': {\n if (!restJoined) return { message: 'Usage: /memory remember <text>' };\n await store.remember(restJoined);\n return { message: `Remembered: ${restJoined}` };\n }\n case 'forget':\n case 'rm': {\n if (!restJoined) return { message: 'Usage: /memory forget <query>' };\n const n = await store.forget(restJoined);\n return {\n message: n === 0 ? `No entries matched \"${restJoined}\".` : `Forgot ${n} entries.`,\n };\n }\n case 'clear': {\n await store.clear();\n return { message: 'Cleared all memory scopes.' };\n }\n default:\n return {\n message: `Unknown subcommand \"${verb}\". Try: show | remember <text> | forget <query> | clear`,\n };\n }\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildMetricsCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'metrics',\n description: 'Show metrics snapshot (requires --metrics flag).',\n async run() {\n if (!opts.metricsSink)\n return { message: 'Metrics not enabled. Restart with --metrics to collect.' };\n const snap = opts.metricsSink.snapshot();\n if (snap.series.length === 0) return { message: 'No metrics recorded yet.' };\n const lines: string[] = [];\n const byName = new Map<string, typeof snap.series>();\n for (const s of snap.series) {\n const bucket = byName.get(s.name) ?? [];\n bucket.push(s);\n byName.set(s.name, bucket);\n }\n for (const [name, series] of [...byName.entries()].sort()) {\n lines.push(color.dim(`# ${name}`));\n for (const s of series) {\n const labels = Object.entries(s.labels)\n .map(([k, v]) => `${k}=${v}`)\n .join(' ');\n const labelStr = labels ? color.dim(` {${labels}}`) : '';\n if (s.type === 'histogram')\n lines.push(\n ` count=${s.values.count} sum=${s.values.sum} min=${s.values.min} max=${s.values.max} p50=${s.values.p50} p95=${s.values.p95} p99=${s.values.p99}${labelStr}`,\n );\n else lines.push(` ${s.values.value}${labelStr}`);\n }\n }\n return { message: lines.join('\\n') };\n },\n };\n}\n","import {\n addPlanItem,\n clearPlan,\n emptyPlan,\n formatPlan,\n loadPlan,\n type PlanFile,\n removePlanItem,\n savePlan,\n setPlanItemStatus,\n} from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\n/**\n * `/plan` — strategic counterpart to `/todos`.\n *\n * Plans are higher-level than todos: a plan captures the overall approach\n * before any work begins, surviving session resume by default. Todos are\n * the moment-to-moment task board the LLM mutates per-turn.\n *\n * Storage: `<session-dir>/<session-id>.plan.json` — atomic-written on\n * every mutation, read on session resume so a banner can surface\n * \"you have N open plan items\".\n */\nexport function buildPlanCommand(opts: SlashCommandContext & { planPath?: string }): SlashCommand {\n return {\n name: 'plan',\n description: 'Strategic plan board: /plan [show|add <title>|done <id|#>|remove <id|#>|clear]',\n async run(args) {\n const planPath = opts.planPath;\n if (!planPath) return { message: 'Plan storage is not configured for this session.' };\n const ctx = opts.context;\n const sessionId = ctx?.session.id ?? 'unknown';\n const [verb, ...rest] = args.trim().split(/\\s+/);\n const restJoined = rest.join(' ').trim();\n\n const plan: PlanFile = (await loadPlan(planPath)) ?? emptyPlan(sessionId);\n\n switch (verb) {\n case '':\n case 'show':\n case 'list': {\n return { message: formatPlan(plan) };\n }\n case 'add': {\n if (!restJoined) return { message: 'Usage: /plan add <title>' };\n const { plan: updated, item } = addPlanItem(plan, restJoined);\n await savePlan(planPath, updated);\n return { message: `Added: ${item.title}\\n${formatPlan(updated)}` };\n }\n case 'start':\n case 'progress': {\n if (!restJoined) return { message: 'Usage: /plan start <id|index>' };\n const updated = setPlanItemStatus(plan, restJoined, 'in_progress');\n await savePlan(planPath, updated);\n return { message: formatPlan(updated) };\n }\n case 'done':\n case 'complete': {\n if (!restJoined) return { message: 'Usage: /plan done <id|index>' };\n const updated = setPlanItemStatus(plan, restJoined, 'done');\n await savePlan(planPath, updated);\n return { message: formatPlan(updated) };\n }\n case 'remove':\n case 'delete':\n case 'rm': {\n if (!restJoined) return { message: 'Usage: /plan remove <id|index>' };\n const updated = removePlanItem(plan, restJoined);\n await savePlan(planPath, updated);\n return { message: formatPlan(updated) };\n }\n case 'clear': {\n const updated = clearPlan(plan);\n await savePlan(planPath, updated);\n return { message: 'Plan cleared.' };\n }\n default:\n return {\n message: `Unknown subcommand \"${verb}\". Try: show | add <title> | start <id|#> | done <id|#> | remove <id|#> | clear`,\n };\n }\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildPluginCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'plugin',\n aliases: ['plugins'],\n description:\n 'Manage plugins: /plugin [list|status|official|install <alias>|enable <name>|disable <name>|remove <name>]',\n argsHint: '[list|status|official|install <alias>|enable <name>|disable <name>|remove <name>]',\n help: [\n 'Usage:',\n ' /plugin List configured plugins.',\n ' /plugin status Alias for list.',\n ' /plugin official List official bundled plugins and aliases.',\n ' /plugin install <alias|package> Add and enable a plugin.',\n ' /plugin add <alias|package> Alias for install.',\n ' /plugin enable <alias|package> Enable a configured plugin.',\n ' /plugin disable <alias|package> Disable a configured plugin.',\n ' /plugin remove <alias|package> Remove a plugin from config.',\n '',\n 'Examples:',\n ' /plugin official',\n ' /plugin install telegram',\n ' /plugin disable lsp',\n ].join('\\n'),\n async run(args) {\n if (!opts.onPlugin) {\n return { message: 'Plugin management is not available in this session.' };\n }\n return { message: await opts.onPlugin(args.trim()) };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildSaveCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'save',\n description: 'Save current session (auto by default; this forces flush).',\n async run(_args, ctx) {\n await ctx.session.append({\n type: 'session_end',\n ts: new Date().toISOString(),\n usage: opts.tokenCounter.total(),\n });\n return { message: `Session ${ctx.session.id} flushed.` };\n },\n };\n}\n\nexport function buildLoadCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'resume',\n aliases: ['load', 'sessions'],\n description: 'List recent sessions.',\n async run() {\n if (!opts.sessionStore) return { message: 'No session store configured.' };\n const list = await opts.sessionStore.list(10);\n if (list.length === 0) return { message: 'No saved sessions.' };\n const lines = list.map(\n (s) =>\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}`,\n );\n const msg = `Recent sessions:\\n${lines.join('\\n')}\\n\\n${color.dim(`Resume one with: wstack resume ${list[0]?.id ?? '<id>'}\\n`)}`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n\nexport function buildExitCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'exit',\n aliases: ['quit', 'q'],\n description: 'Exit the REPL.',\n async run() {\n opts.onExit?.();\n return { exit: true };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildSkillCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill',\n description: 'Show skill details or list available skills. Use /skill-gen to create new skills.',\n async run(args) {\n if (!opts.skillLoader) return { message: 'No skill loader configured.' };\n if (!args.trim()) {\n const entries = await opts.skillLoader.listEntries();\n if (entries.length === 0) return { message: 'No skills found.' };\n const lines = entries.map((e) => {\n const scopeTag =\n e.scope.length > 0 ? ` ${color.dim(`(${e.scope.slice(0, 3).join(', ')})`)}` : '';\n return ` ${color.bold(e.name)}${scopeTag}\\n Use when: ${e.trigger}`;\n });\n return { message: `Available skills:\\n${lines.join('\\n\\n')}\\n` };\n }\n const skill = await opts.skillLoader.find(args.trim());\n if (!skill) return { message: `Skill \"${args.trim()}\" not found.` };\n return { message: await opts.skillLoader.readBody(skill.name) };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport { parseSpawnFlags } from '../arg-parser.js';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildSpawnCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'spawn',\n description: 'Spawn an isolated subagent to handle a task.',\n async run(args) {\n const { description, opts: parsed } = parseSpawnFlags(args.trim());\n if (!description)\n return {\n message:\n 'Usage: /spawn [--provider=<id>] [--model=<id>] [--name=<label>] [--tools=a,b,c] <task description>',\n };\n if (!opts.onSpawn) return { message: 'Multi-agent is not enabled in this session.' };\n try {\n const summary =\n Object.keys(parsed).length > 0\n ? await opts.onSpawn(description, parsed)\n : await opts.onSpawn(description);\n return { message: summary };\n } catch (err) {\n return { message: `Spawn failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n },\n };\n}\n\nexport function buildAgentsCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'agents',\n description: 'Show status of spawned subagents.',\n async run() {\n if (!opts.onAgents) return { message: 'Multi-agent is not enabled in this session.' };\n return { message: opts.onAgents() };\n },\n };\n}\n\nexport function buildDirectorCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'director',\n description:\n 'Promote this session to director mode, enabling fleet orchestration tools. Only works before any subagents are spawned.',\n async run() {\n if (!opts.onDirector) return { message: 'Director promotion is not available in this session.' };\n const result = await opts.onDirector();\n if (result === null) {\n return {\n message:\n 'Cannot promote to director mode: subagents have already been spawned. Promote before using /spawn, or restart with --director.',\n };\n }\n return { message: result };\n },\n };\n}\n","import { randomUUID } from 'node:crypto';\nimport { formatTodosList } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildTodosCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'todos',\n description:\n 'Inspect or edit the live todo list: /todos [show|clear|add <text>|done <id|index>]',\n async run(args) {\n const ctx = opts.context;\n if (!ctx) return { message: 'No active context.' };\n const [verb, ...rest] = args.trim().split(/\\s+/);\n const restJoined = rest.join(' ').trim();\n switch (verb) {\n case '':\n case 'show':\n case 'list': {\n return { message: formatTodosList(ctx.todos) };\n }\n case 'clear': {\n const n = ctx.todos.length;\n ctx.todos.length = 0;\n return {\n message:\n n === 0 ? 'Todos were already empty.' : `Cleared ${n} todo${n === 1 ? '' : 's'}.`,\n };\n }\n case 'add': {\n if (!restJoined) return { message: 'Usage: /todos add <text>' };\n ctx.todos.push({\n id: `todo_${Date.now()}_${randomUUID().slice(0, 7)}`,\n content: restJoined,\n status: 'pending',\n });\n return { message: `Added: ${restJoined}` };\n }\n case 'done':\n case 'complete': {\n if (!restJoined) return { message: 'Usage: /todos done <id|index>' };\n const asIndex = Number.parseInt(restJoined, 10);\n let target = !Number.isNaN(asIndex)\n ? ctx.todos[asIndex - 1]\n : ctx.todos.find((t) => t.id === restJoined);\n if (!target)\n target = ctx.todos.find((t) =>\n t.content.toLowerCase().includes(restJoined.toLowerCase()),\n );\n if (!target) return { message: `No todo matched \"${restJoined}\".` };\n target.status = 'completed';\n return { message: `Marked done: ${target.content}` };\n }\n default:\n return {\n message: `Unknown subcommand \"${verb}\". Try: show | clear | add <text> | done <id|index>`,\n };\n }\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildToolsCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'tools',\n description: 'List registered tools.',\n async run() {\n const all = opts.toolRegistry.listWithOwner();\n const lines = all.map(\n ({ tool, owner }) =>\n ` ${tool.name.padEnd(28)} ${color.dim(`[${owner}]`)} ${tool.mutating ? color.yellow('mut') : color.cyan('ro')} ${color.dim(tool.permission)}`,\n );\n const msg = `${color.bold('Tools')} (${all.length}):\\n${lines.join('\\n')}\\n`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildYoloCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'yolo',\n description: 'Toggle or query YOLO (auto-approve) mode.',\n help: [\n 'Usage:',\n ' /yolo Show current YOLO status',\n ' /yolo on Enable YOLO mode (auto-approve every tool call)',\n ' /yolo off Disable YOLO mode (restore permission prompts)',\n ' /yolo toggle Toggle YOLO mode',\n '',\n 'YOLO mode skips all permission prompts and auto-approves every tool call.',\n 'Use with caution — the agent can execute any tool without asking.',\n ].join('\\n'),\n async run(args) {\n const arg = args.trim().toLowerCase();\n\n if (!opts.onYolo) {\n const msg = 'YOLO toggle is not available in this session.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n // No argument — show current status\n if (!arg) {\n const current = opts.onYolo();\n const status = current\n ? `${color.yellow('ON')} ${color.dim('(auto-approving all tool calls)')}`\n : `${color.green('OFF')} ${color.dim('(permission prompts active)')}`;\n const msg = `YOLO mode: ${status}`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n // Explicit set\n let newState: boolean;\n if (arg === 'on' || arg === 'enable' || arg === 'true' || arg === '1') {\n newState = true;\n } else if (arg === 'off' || arg === 'disable' || arg === 'false' || arg === '0') {\n newState = false;\n } else if (arg === 'toggle') {\n newState = !opts.onYolo();\n } else {\n const msg = `Unknown argument: ${arg}. Use /yolo on, /yolo off, or /yolo toggle.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n opts.onYolo(newState);\n const label = newState\n ? `${color.yellow('ENABLED')} — all tool calls will be auto-approved`\n : `${color.green('DISABLED')} — permission prompts are active`;\n const msg = `YOLO mode: ${label}`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport type AutonomyMode = 'off' | 'suggest' | 'auto';\n\nexport function buildAutonomyCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'autonomy',\n description: 'Toggle or query autonomy mode (self-driving agent).',\n help: [\n 'Usage:',\n ' /autonomy Show current autonomy status',\n ' /autonomy off Disabled — agent stops after each turn (default)',\n ' /autonomy suggest Show next-step suggestions after each turn',\n ' /autonomy on Auto-continue — agent picks next step and proceeds',\n ' /autonomy toggle Cycle: off → suggest → auto → off',\n '',\n 'Modes:',\n ' off — Normal interactive mode. Agent stops and waits.',\n ' suggest — After each turn, agent suggests next steps. You pick.',\n ' auto — After each turn, agent picks the best next step and continues.',\n ' Runs indefinitely until you press Esc or Ctrl+C.',\n '',\n 'In auto mode the agent works autonomously. Press Esc to redirect,',\n 'Ctrl+C to stop. The agent suggests context-aware next steps based on',\n 'the conversation history.',\n ].join('\\n'),\n async run(args) {\n const arg = args.trim().toLowerCase();\n\n if (!opts.onAutonomy) {\n const msg = 'Autonomy mode is not available in this session.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n // No argument — show current status\n if (!arg) {\n const current = opts.onAutonomy();\n const labels: Record<AutonomyMode, string> = {\n off: `${color.green('OFF')} ${color.dim('(agent stops after each turn)')}`,\n suggest: `${color.cyan('SUGGEST')} ${color.dim('(shows next-step suggestions)')}`,\n auto: `${color.yellow('AUTO')} ${color.dim('(self-driving — Esc to redirect, Ctrl+C to stop)')}`,\n };\n const msg = `Autonomy mode: ${labels[current]}`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n // Explicit set\n let newMode: AutonomyMode;\n if (arg === 'on' || arg === 'enable' || arg === 'true' || arg === 'auto') {\n newMode = 'auto';\n } else if (arg === 'off' || arg === 'disable' || arg === 'false') {\n newMode = 'off';\n } else if (arg === 'suggest' || arg === 'suggestions') {\n newMode = 'suggest';\n } else if (arg === 'toggle' || arg === 'cycle') {\n const current = opts.onAutonomy() ?? 'off';\n const cycle: AutonomyMode[] = ['off', 'suggest', 'auto'];\n newMode = cycle[(cycle.indexOf(current) + 1) % cycle.length] ?? 'off';\n } else {\n const msg = `Unknown argument: ${arg}. Use /autonomy on, /autonomy off, /autonomy suggest, or /autonomy toggle.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n opts.onAutonomy(newMode);\n const labels: Record<AutonomyMode, string> = {\n off: `${color.green('OFF')} — agent stops after each turn`,\n suggest: `${color.cyan('SUGGEST')} — shows next-step suggestions after each turn`,\n auto: `${color.yellow('AUTO')} — self-driving, agent continues automatically`,\n };\n const msg = `Autonomy mode: ${labels[newMode]}`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n","import type { ModeStore } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildModeCommand(\n opts: SlashCommandContext & { modeStore?: ModeStore },\n): SlashCommand {\n return {\n name: 'mode',\n description: 'Switch or view the current mode',\n help: [\n 'Usage:',\n ' /mode Show current mode and available modes',\n ' /mode <id> Switch to a different mode',\n '',\n 'Available modes:',\n ' default General-purpose coding assistant',\n ' brief Fast, no-nonsense — get to the point',\n ' teach Mentor mode — explains why, not just what',\n ' code-reviewer, code-auditor, architect, debugger, tester, devops, refactorer',\n '',\n 'Example:',\n ' /mode brief Switch to brief mode',\n ' /mode teach Switch to teach mode',\n ].join('\\n'),\n async run(args) {\n const modeStore = opts.modeStore;\n if (!modeStore) {\n return { message: 'Mode store not available in this context.' };\n }\n\n const modes = await modeStore.listModes();\n const active = await modeStore.getActiveMode();\n\n if (!args.trim()) {\n const lines = [`Current mode: ${active?.name ?? 'none'}`, '', 'Available modes:'];\n for (const m of modes) {\n const mark = m.id === active?.id ? ' [active]' : '';\n lines.push(` ${m.id} — ${m.description}${mark}`);\n }\n return { message: lines.join('\\n') };\n }\n\n const target = args.trim().toLowerCase();\n const targetMode = modes.find((m) => m.id === target);\n\n if (!targetMode) {\n const available = modes.map((m) => m.id).join(', ');\n return { message: `Unknown mode \"${target}\". Available: ${available}` };\n }\n\n await modeStore.setActiveMode(targetMode.id);\n return {\n message: `Switched to \"${targetMode.name}\" mode.\\n${targetMode.description}`,\n };\n },\n };\n}","import type {\r\n CompactReport,\r\n Context,\r\n HealthRegistry,\r\n MemoryStore,\r\n MetricsSink,\r\n ModeStore,\r\n Renderer,\r\n SessionStore,\r\n SkillLoader,\r\n SlashCommand,\r\n SlashCommandRegistry,\r\n TokenCounter,\r\n ToolRegistry,\r\n} from '@wrongstack/core';\r\n\r\nexport interface SlashCommandContext {\r\n registry: SlashCommandRegistry;\r\n toolRegistry: ToolRegistry;\r\n compactor?: {\r\n compact(ctx: Context, opts?: { aggressive?: boolean }): Promise<CompactReport>;\r\n };\r\n sessionStore?: SessionStore;\r\n skillLoader?: SkillLoader;\r\n tokenCounter: TokenCounter;\r\n renderer: Renderer;\r\n memoryStore?: MemoryStore;\r\n context?: Context;\r\n metricsSink?: MetricsSink;\r\n healthRegistry?: HealthRegistry;\r\n modeStore?: ModeStore;\r\n onExit?: () => void;\r\n onClear?: () => void;\r\n onDiag?: () => string;\r\n onStats?: () => string | null;\r\n onSpawn?: (\r\n description: string,\r\n opts?: { provider?: string; model?: string; tools?: string[]; name?: string },\r\n ) => Promise<string>;\r\n onAgents?: () => string;\r\n onFleet?: (action: 'status' | 'usage' | 'kill' | 'manifest', target?: string) => Promise<string>;\r\n /**\r\n * Toggle subagent activity streaming into the leader's history. The\r\n * TUI installs the actual setter on mount via a shared controller;\r\n * before that, calls are buffered into the initial-value field so\r\n * `/fleet stream off` issued before mount still takes effect.\r\n */\r\n fleetStreamController?: {\r\n /** Current state, readable for the slash command's reply. */\r\n enabled: boolean;\r\n /** Replaced by the TUI on mount with a dispatch-backed setter. */\r\n setEnabled: (enabled: boolean) => void;\r\n };\r\n /**\r\n * Re-run interrupted tasks from a prior director-state.json. Pass `undefined`\r\n * to list them, a specific task id to retry one, or 'all' to retry every\r\n * interrupted task. Returns a human-readable summary. Only wired when\r\n * director mode is enabled.\r\n */\r\n onFleetRetry?: (taskId?: string) => Promise<string>;\r\n /**\r\n * Inspect per-subagent JSONL transcripts under `<fleetRoot>/subagents/`.\r\n * Pass `undefined` to list available transcripts, a subagent id to show\r\n * a compact event summary, or a subagent id with `mode='raw'` to dump\r\n * the full JSONL. Only wired when a fleet root exists for this session.\r\n */\r\n onFleetLog?: (subagentId: string | undefined, mode: 'summary' | 'raw') => Promise<string>;\r\n /** Promote to director mode at runtime. Returns success message or null on failure. */\r\n onDirector?: () => Promise<string | null>;\r\n /** Manage plugin config from the interactive slash menu. */\r\n onPlugin?: (args: string) => Promise<string>;\r\n /** Toggle or query YOLO mode at runtime. Pass undefined to query, boolean to set. */\r\n onYolo?: (setTo?: boolean) => boolean;\r\n /** Toggle or query autonomy mode. Pass undefined to query, AutonomyMode to set. */\r\n onAutonomy?: (setTo?: import('./autonomy.js').AutonomyMode) => import('./autonomy.js').AutonomyMode;\r\n /**\r\n * Absolute path to the per-session plan JSON file. Read+written by the\r\n * `/plan` slash command. Optional — when omitted, `/plan` short-circuits\r\n * with a \"not configured\" message instead of crashing.\r\n */\r\n planPath?: string;\r\n}\r\n\r\n// Re-export helpers for external consumers (pre-launch.ts)\r\nexport type { ProjectFacts } from './helpers.js';\r\nexport { detectProjectFacts, renderAgentsTemplate } from './helpers.js';\r\n\r\nimport { buildClearCommand } from './clear.js';\r\nimport { buildCompactCommand } from './compact.js';\r\nimport { buildContextCommand } from './context.js';\r\nimport { buildDiagCommand, buildStatsCommand } from './diag-stats.js';\r\nimport { buildFleetCommand } from './fleet.js';\r\nimport { buildHealthCommand } from './health.js';\r\nimport { buildHelpCommand } from './help.js';\r\nimport { buildInitCommand } from './init.js';\r\nimport { buildMemoryCommand } from './memory.js';\r\nimport { buildMetricsCommand } from './metrics.js';\r\nimport { buildPlanCommand } from './plan.js';\r\nimport { buildPluginCommand } from './plugin.js';\r\nimport { buildExitCommand, buildLoadCommand, buildSaveCommand } from './session.js';\r\nimport { buildSkillCommand } from './skill.js';\r\nimport { buildAgentsCommand, buildDirectorCommand, buildSpawnCommand } from './spawn-agents.js';\r\nimport { buildTodosCommand } from './todos.js';\r\nimport { buildToolsCommand } from './tools.js';\r\nimport { buildYoloCommand } from './yolo.js';\r\nimport { buildAutonomyCommand } from './autonomy.js';\r\nimport { buildModeCommand } from './mode.js';\r\nimport { buildSddCommand } from './sdd.js';\r\nimport { buildSkillGeneratorCommand } from './skill-generator.js';\r\nimport {\r\n buildSkillInstallCommand,\r\n buildSkillUpdateCommand,\r\n buildSkillUninstallCommand,\r\n} from './skill-install.js';\r\n\r\nexport function buildBuiltinSlashCommands(opts: SlashCommandContext): SlashCommand[] {\r\n return [\r\n buildHelpCommand(opts),\r\n buildInitCommand(opts),\r\n buildClearCommand(opts),\r\n buildCompactCommand(opts),\r\n buildContextCommand(opts),\r\n buildToolsCommand(opts),\r\n buildSkillCommand(opts),\r\n buildSkillGeneratorCommand(opts),\r\n buildSkillInstallCommand(opts),\r\n buildSkillUpdateCommand(opts),\r\n buildSkillUninstallCommand(opts),\r\n buildPluginCommand(opts),\r\n buildDiagCommand(opts),\r\n buildStatsCommand(opts),\r\n buildSpawnCommand(opts),\r\n buildAgentsCommand(opts),\r\n buildDirectorCommand(opts),\r\n buildFleetCommand(opts),\r\n buildMetricsCommand(opts),\r\n buildHealthCommand(opts),\r\n buildMemoryCommand(opts),\r\n buildTodosCommand(opts),\r\n buildPlanCommand(opts),\r\n buildSddCommand(opts),\r\n buildSaveCommand(opts),\r\n buildLoadCommand(opts),\r\n buildYoloCommand(opts),\r\n buildAutonomyCommand(opts),\r\n buildModeCommand(opts),\r\n buildExitCommand(opts),\r\n ];\r\n}\r\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\n/**\n * `/skill-gen` — Create a new AI skill interactively.\n *\n * The AI reads the skill-creator skill and guides the user through\n * creating a new SKILL.md file. No wizard needed — the LLM handles\n * the conversation, validation, and file writing.\n *\n * Usage:\n * /skill-gen — Start skill creation (AI guides you)\n * /skill-gen list — List existing skills\n * /skill-gen edit <name> — View an existing skill\n */\nexport function buildSkillGeneratorCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill-gen',\n description: 'Create a new AI skill interactively. The AI will guide you.',\n help: [\n '╔═══ Skill Generator ═══╗',\n '',\n 'Create new AI skills with AI guidance.',\n '',\n 'Usage:',\n ' /skill-gen Start skill creation',\n ' /skill-gen list List existing skills',\n ' /skill-gen edit <name> View an existing skill',\n '',\n 'The AI will ask you questions and create the skill file.',\n 'Skills are saved to .wrongstack/skills/<name>/SKILL.md',\n ].join('\\n'),\n async run(args) {\n const trimmed = args.trim();\n\n // ── Subcommands ──────────────────────────────────────────────────\n\n if (trimmed === 'list' || trimmed === 'ls') {\n if (!opts.skillLoader) return { message: 'No skill loader configured.' };\n const entries = await opts.skillLoader.listEntries();\n if (entries.length === 0) return { message: 'No skills found.' };\n const lines = entries.map((e) => {\n const src = e.source === 'project' ? '📁' : e.source === 'user' ? '👤' : '📦';\n return ` ${src} ${e.name}\\n ${e.trigger}`;\n });\n return { message: `Available Skills:\\n${lines.join('\\n\\n')}\\n` };\n }\n\n if (trimmed.startsWith('edit ')) {\n const skillName = trimmed.slice(5).trim();\n if (!opts.skillLoader) return { message: 'No skill loader configured.' };\n const skill = await opts.skillLoader.find(skillName);\n if (!skill) return { message: `Skill \"${skillName}\" not found.` };\n const body = await opts.skillLoader.readBody(skillName);\n return {\n message: [\n `Skill: ${skillName}`,\n `Path: ${skill.path}`,\n '',\n body,\n ].join('\\n'),\n };\n }\n\n // ── Start AI-guided creation ─────────────────────────────────────\n // Return runText so the AI reads the skill-creator skill and\n // guides the user through creating a new skill.\n return {\n message: '╔═══ Skill Generator ═══╗\\n\\nThe AI will guide you through creating a new skill.\\nAnswer its questions naturally.',\n runText: 'I want to create a new AI skill. Read the skill-creator skill and guide me through the process. Ask me questions one at a time — name, description, what to cover — then create the SKILL.md file.',\n };\n },\n };\n}\n","import * as os from 'node:os';\nimport * as path from 'node:path';\nimport { SkillInstaller } from '@wrongstack/core/skills';\nimport { projectHash } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nfunction makeInstaller(opts: SlashCommandContext, projectRoot: string, global?: boolean) {\n const globalRoot = path.join(os.homedir(), '.wrongstack');\n return new SkillInstaller({\n manifestPath: path.join(globalRoot, 'installed-skills.json'),\n projectSkillsDir: path.join(projectRoot, '.wrongstack', 'skills'),\n globalSkillsDir: path.join(globalRoot, 'skills'),\n projectHash: projectHash(projectRoot),\n skillLoader: opts.skillLoader,\n });\n}\n\nexport function buildSkillInstallCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill-install',\n description: 'Install skills from a GitHub repository.',\n argsHint: '<user/repo[@ref]> [--global]',\n help: [\n '╔═══ Skill Install ═══╗',\n '',\n 'Install skills from a GitHub repository.',\n '',\n 'Usage:',\n ' /skill-install <user/repo> Install from default branch (main)',\n ' /skill-install <user/repo@ref> Install specific tag/branch/commit',\n ' /skill-install <user/repo> --global Install to user-global skills',\n '',\n 'Supports both single-skill repos (SKILL.md at root)',\n 'and multi-skill repos (skills/ subdirectory).',\n '',\n 'Examples:',\n ' /skill-install wrongstack/awesome-skills',\n ' /skill-install wrongstack/skills@v1.0',\n ' /skill-install user/my-skills --global',\n ].join('\\n'),\n async run(args, ctx) {\n const parts = args.trim().split(/\\s+/);\n const ref = parts.find((p) => !p.startsWith('--'));\n const isGlobal = parts.includes('--global');\n\n if (!ref) {\n return { message: 'Usage: /skill-install <user/repo[@ref]> [--global]' };\n }\n\n const installer = makeInstaller(opts, ctx.projectRoot, isGlobal);\n\n try {\n const results = await installer.install(ref, { global: isGlobal });\n\n if (results.length === 0) {\n return { message: 'No skills found in the repository.' };\n }\n\n const scope = isGlobal ? 'user-global' : 'project';\n const lines = [`Installed ${results.length} skill(s) [${scope}]:`];\n for (const r of results) {\n lines.push(` ✓ ${r.name} (${r.source}@${r.ref})`);\n lines.push(` → ${r.path}`);\n }\n return { message: lines.join('\\n') };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n opts.renderer.writeError(`Install failed: ${msg}`);\n return { message: `✗ Install failed: ${msg}` };\n }\n },\n };\n}\n\nexport function buildSkillUpdateCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill-update',\n description: 'Update installed skills from their GitHub source.',\n argsHint: '[name|ref] [--global]',\n help: [\n '╔═══ Skill Update ═══╗',\n '',\n 'Update installed skills from their GitHub source.',\n '',\n 'Usage:',\n ' /skill-update Update all installed skills',\n ' /skill-update <name> Update a specific skill',\n ' /skill-update <user/repo@ref> Update to a different ref',\n ' /skill-update <name> --global Update a global skill',\n ].join('\\n'),\n async run(args, ctx) {\n const parts = args.trim().split(/\\s+/);\n const nameOrRef = parts.find((p) => !p.startsWith('--'));\n const isGlobal = parts.includes('--global');\n\n const installer = makeInstaller(opts, ctx.projectRoot, isGlobal);\n\n try {\n const result = await installer.update(nameOrRef, { global: isGlobal });\n\n const lines: string[] = [];\n\n if (result.updated.length > 0) {\n lines.push(`Updated ${result.updated.length} skill(s):`);\n for (const u of result.updated) {\n if (u.oldRef !== u.newRef) {\n lines.push(` ✓ ${u.name} (${u.oldRef} → ${u.newRef})`);\n } else {\n lines.push(` ✓ ${u.name} (refreshed)`);\n }\n }\n }\n\n if (result.unchanged.length > 0) {\n lines.push(`Up to date: ${result.unchanged.join(', ')}`);\n }\n\n if (result.errors.length > 0) {\n for (const e of result.errors) {\n lines.push(` ✗ ${e.name}: ${e.error}`);\n }\n }\n\n if (lines.length === 0) {\n return { message: 'No installed skills to update.' };\n }\n\n return { message: lines.join('\\n') };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return { message: `✗ Update failed: ${msg}` };\n }\n },\n };\n}\n\nexport function buildSkillUninstallCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill-uninstall',\n description: 'Remove an installed skill.',\n argsHint: '<name> [--global]',\n help: [\n '╔═══ Skill Uninstall ═══╗',\n '',\n 'Remove an installed skill and its files.',\n '',\n 'Usage:',\n ' /skill-uninstall <name> Remove from project skills',\n ' /skill-uninstall <name> --global Remove from user-global skills',\n ].join('\\n'),\n async run(args, ctx) {\n const parts = args.trim().split(/\\s+/);\n const name = parts.find((p) => !p.startsWith('--'));\n const isGlobal = parts.includes('--global');\n\n if (!name) {\n // List installed skills when no name given\n const installer = makeInstaller(opts, ctx.projectRoot, isGlobal);\n const installed = await installer.listInstalled();\n if (installed.length === 0) {\n return { message: 'No installed skills found.' };\n }\n const scope = isGlobal ? 'user' : 'project';\n const filtered = installed.filter((s) => s.scope === scope);\n if (filtered.length === 0) {\n return { message: `No installed skills found (${scope} scope).` };\n }\n const lines = [`Installed skills (${scope}):`];\n for (const s of filtered) {\n lines.push(` ${s.name} ${s.source}@${s.ref} (${s.installedAt.slice(0, 10)})`);\n }\n lines.push('', 'Use /skill-uninstall <name> to remove.');\n return { message: lines.join('\\n') };\n }\n\n const installer = makeInstaller(opts, ctx.projectRoot, isGlobal);\n\n try {\n await installer.uninstall(name, { global: isGlobal });\n return { message: `✓ Skill \"${name}\" uninstalled.` };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return { message: `✗ Uninstall failed: ${msg}` };\n }\n },\n };\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport type { TerminalRenderer } from './renderer.js';\nimport { detectProjectFacts, renderAgentsTemplate } from './slash-commands/index.js';\n\nexport type ProjectKind =\n /** `.wrongstack/AGENTS.md` exists — fully set up. */\n | 'initialized'\n /** Has a recognizable manifest (package.json, pyproject.toml, etc.) but no AGENTS.md yet. */\n | 'project'\n /** No manifest, no AGENTS.md — probably an empty/scratch directory. */\n | 'empty';\n\nconst MANIFESTS = [\n 'package.json',\n 'pyproject.toml',\n 'Cargo.toml',\n 'go.mod',\n 'Makefile',\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n 'composer.json',\n 'Gemfile',\n];\n\nexport async function detectProjectKind(projectRoot: string): Promise<ProjectKind> {\n try {\n await fs.access(path.join(projectRoot, '.wrongstack', 'AGENTS.md'));\n return 'initialized';\n } catch {\n // not initialized\n }\n for (const m of MANIFESTS) {\n try {\n await fs.access(path.join(projectRoot, m));\n return 'project';\n } catch {\n // try next\n }\n }\n return 'empty';\n}\n\nasync function scaffoldAgentsMd(projectRoot: string): Promise<string> {\n const dir = path.join(projectRoot, '.wrongstack');\n const file = path.join(dir, 'AGENTS.md');\n const facts = await detectProjectFacts(projectRoot);\n const body = renderAgentsTemplate(facts);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(file, body, 'utf8');\n return file;\n}\n\n/**\n * Print a one-line project status banner and, when relevant, prompt the\n * user about scaffolding `AGENTS.md` or continuing in a directory that\n * doesn't look like a project. Returns `false` if the user bailed out.\n */\nexport async function runProjectCheck(opts: {\n projectRoot: string;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n}): Promise<boolean> {\n const { projectRoot, renderer, reader } = opts;\n const kind = await detectProjectKind(projectRoot);\n\n if (kind === 'initialized') {\n renderer.write(\n `\\n ${color.green('✓')} Project initialized ${color.dim(`(${path.join(projectRoot, '.wrongstack', 'AGENTS.md')})`)}\\n`,\n );\n return true;\n }\n\n if (kind === 'project') {\n renderer.write(\n `\\n ${color.amber('●')} Project detected ${color.dim(`(${projectRoot})`)} but ${color.bold('.wrongstack/AGENTS.md')} is missing.\\n`,\n );\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} Scaffold ${color.bold('AGENTS.md')} now? ${color.dim('[y/N]')} `,\n )\n )\n .trim()\n .toLowerCase();\n if (answer === 'y' || answer === 'yes') {\n try {\n const file = await scaffoldAgentsMd(projectRoot);\n renderer.write(` ${color.green('✓')} Wrote ${color.dim(file)}\\n`);\n } catch (err) {\n renderer.writeError(\n `Failed to scaffold AGENTS.md: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n return true;\n }\n\n // 'empty' — no manifest, no AGENTS.md\n renderer.write(\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\n );\n const answer = (\n await reader.readLine(` ${color.amber('?')} Continue anyway? ${color.dim('[Y/n]')} `)\n )\n .trim()\n .toLowerCase();\n if (answer === 'n' || answer === 'no') {\n renderer.write(color.dim(' Cancelled.\\n'));\n return false;\n }\n return true;\n}\n\nexport interface LaunchModeChoices {\n /** TUI or plain REPL. */\n mode: 'tui' | 'repl';\n /** Auto-approve every tool call (no permission prompts). */\n yolo: boolean;\n}\n\n/**\n * Ask for interactive mode (TUI vs REPL) and YOLO. Either prompt is\n * skipped when the corresponding CLI flag was already pinned. Returns\n * the resolved pair.\n */\nexport async function runLaunchPrompts(opts: {\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n modePinned?: 'tui' | 'repl';\n yoloPinned?: boolean;\n}): Promise<LaunchModeChoices> {\n const { renderer, reader, modePinned, yoloPinned } = opts;\n\n let mode: 'tui' | 'repl';\n if (modePinned) {\n mode = modePinned;\n } else {\n const answer = (\n await reader.readLine(\n `\\n ${color.amber('?')} Interactive mode: ${color.bold('T')}UI / ${color.bold('R')}EPL ${color.dim('[T/r]')} `,\n )\n )\n .trim()\n .toLowerCase();\n mode = answer === 'r' || answer === 'repl' ? 'repl' : 'tui';\n }\n\n let yolo: boolean;\n if (yoloPinned !== undefined) {\n yolo = yoloPinned;\n } else {\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} YOLO mode ${color.dim('(auto-approve every tool call)')} ${color.dim('[Y/n]')} `,\n )\n )\n .trim()\n .toLowerCase();\n yolo = answer !== 'n' && answer !== 'no';\n }\n\n renderer.write(\n `\\n ${color.green('▶')} Launching in ${color.bold(mode.toUpperCase())} mode${yolo ? color.yellow(' (YOLO)') : ''}\\n\\n`,\n );\n\n return { mode, yolo };\n}\n","import { color } from '@wrongstack/core';\n\nexport function renderDiff(diff: string): string {\n if (!diff) return '';\n const lines = diff.split('\\n');\n return lines\n .map((line) => {\n if (line.startsWith('+++') || line.startsWith('---')) return color.bold(line);\n if (line.startsWith('@@')) return color.cyan(line);\n if (line.startsWith('+')) return color.green(line);\n if (line.startsWith('-')) return color.red(line);\n return color.dim(line);\n })\n .join('\\n');\n}\n","import { color } from '@wrongstack/core';\n\nexport const theme = {\n primary: color.amber,\n accent: color.pink,\n muted: color.dim,\n success: color.green,\n warn: color.yellow,\n error: color.red,\n info: color.cyan,\n bold: color.bold,\n underline: color.underline,\n};\n","import type { ContentBlock, Renderer, TextBlock } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport { renderDiff } from './diff-renderer.js';\nimport { theme } from './theme.js';\n\nexport interface TerminalRendererOptions {\n out?: NodeJS.WriteStream;\n err?: NodeJS.WriteStream;\n}\n\nexport class TerminalRenderer implements Renderer {\n private readonly out: NodeJS.WriteStream;\n private readonly err: NodeJS.WriteStream;\n private lineStart = true;\n /**\n * When true, every stdout-bound method is a no-op. This is the only\n * safe state to be in while Ink owns the terminal (TUI mode):\n * raw writes to stdout interleave with Ink's cursor math and cause\n * the input + status bar to be reprinted as scrollback junk.\n * Stderr-bound methods (writeInfo/Warning/Error) still flow — they\n * go to a different stream Ink does not manage.\n */\n private silent = false;\n\n constructor(opts: TerminalRendererOptions = {}) {\n this.out = opts.out ?? process.stdout;\n this.err = opts.err ?? process.stderr;\n }\n\n /**\n * Toggle stdout suppression. Call `setSilent(true)` right before\n * handing the terminal to Ink, and `setSilent(false)` after Ink\n * exits. Idempotent.\n */\n setSilent(silent: boolean): void {\n this.silent = silent;\n }\n\n isSilent(): boolean {\n return this.silent;\n }\n\n write(input: string | TextBlock): void {\n if (this.silent) return;\n const text = typeof input === 'string' ? input : input.text;\n if (!text) return;\n const rendered = renderMarkdown(text);\n this.out.write(rendered);\n this.lineStart = rendered.endsWith('\\n');\n }\n\n writeLine(text = ''): void {\n if (this.silent) return;\n if (!this.lineStart) this.out.write('\\n');\n if (text) this.out.write(`${text}\\n`);\n else this.out.write('\\n');\n this.lineStart = true;\n }\n\n writeBlock(block: ContentBlock): void {\n if (this.silent) return;\n if (block.type === 'text') {\n this.write(block);\n } else if (block.type === 'tool_use') {\n this.writeToolCall(block.name, block.input);\n } else if (block.type === 'tool_result') {\n const text =\n typeof block.content === 'string' ? block.content : JSON.stringify(block.content);\n this.writeToolResult('result', text, !!block.is_error);\n }\n }\n\n writeToolCall(name: string, input: unknown): void {\n if (this.silent) return;\n if (!this.lineStart) this.out.write('\\n');\n const arrow = theme.primary('→');\n const display = formatInputSummary(input);\n this.out.write(`${arrow} ${theme.bold(name)}${display ? color.dim(` ${display}`) : ''}\\n`);\n this.lineStart = true;\n }\n\n writeToolResult(name: string, content: unknown, isError: boolean): void {\n if (this.silent) return;\n const txt = typeof content === 'string' ? content : safeStringify(content);\n const prefix = isError ? theme.error('✘') : theme.success('✓');\n\n if (isError) {\n const firstLine = txt.split('\\n')[0] ?? '';\n const truncated = firstLine.length > 200 ? `${firstLine.slice(0, 197)}…` : firstLine;\n this.out.write(` ${prefix} ${color.dim(truncated)}\\n`);\n this.lineStart = true;\n return;\n }\n\n // Tool-specific rendering.\n const isEditLike = name === 'edit' || name === 'write';\n const isReadLike = name === 'read' || name === 'grep' || name === 'glob' || name === 'bash';\n const previewLines = isEditLike ? 0 : isReadLike ? 6 : 2;\n\n // Edit-like tools: pull the embedded diff if present.\n const diff = extractDiff(content);\n if (isEditLike && diff) {\n this.out.write(` ${prefix} ${color.dim(summarize(content, name))}\\n`);\n const rendered = renderDiff(diff)\n .split('\\n')\n .map((l) => ` ${l}`)\n .join('\\n');\n this.out.write(`${rendered}\\n`);\n this.lineStart = true;\n return;\n }\n\n // Generic preview: show up to N lines, then \"+X more\" if truncated.\n const lines = txt.split('\\n');\n const head = lines.slice(0, previewLines).map((l: string) => l.replace(/\\s+$/, ''));\n const moreCount = Math.max(0, lines.length - head.length);\n this.out.write(` ${prefix} ${color.dim(summarize(content, name))}\\n`);\n for (const l of head) {\n const capped = l.length > 200 ? `${l.slice(0, 197)}…` : l;\n this.out.write(` ${color.dim(capped)}\\n`);\n }\n if (moreCount > 0) {\n this.out.write(\n ` ${color.dim(`+${moreCount} more line${moreCount === 1 ? '' : 's'}`)}\\n`,\n );\n }\n this.lineStart = true;\n }\n\n writeDiff(diff: string): void {\n if (this.silent) return;\n if (!this.lineStart) this.out.write('\\n');\n this.out.write(`${renderDiff(diff)}\\n`);\n this.lineStart = true;\n }\n\n writeWarning(text: string): void {\n this.err.write(`${theme.warn('⚠')} ${text}\\n`);\n }\n writeError(text: string): void {\n this.err.write(`${theme.error('✘')} ${text}\\n`);\n }\n writeInfo(text: string): void {\n this.err.write(`${theme.info('ℹ')} ${text}\\n`);\n }\n\n clear(): void {\n if (this.silent) return;\n this.out.write('\\x1b[2J\\x1b[H');\n this.lineStart = true;\n }\n}\n\nfunction renderMarkdown(s: string): string {\n let out = s;\n // Headings\n out = out.replace(/^(#{1,6}) (.+)$/gm, (_m, hashes, text) => {\n return theme.primary(theme.bold(`${hashes} ${text}`));\n });\n // Fenced code\n out = out.replace(/```([a-zA-Z0-9_+-]*)\\n([\\s\\S]*?)```/g, (_m, _lang, code) => {\n return color.gray(`\\n┌─\\n${code.replace(/^/gm, '│ ')}└─`);\n });\n // Inline code\n out = out.replace(/`([^`\\n]+)`/g, (_m, code) => theme.accent(code));\n // Bold\n out = out.replace(/\\*\\*([^*]+)\\*\\*/g, (_m, text) => theme.bold(text));\n // Italic — single-asterisk\n out = out.replace(\n /(^|[^*])\\*([^*\\n]+)\\*([^*]|$)/g,\n (_m, l, t, r) => `${l}${color.italic(t)}${r}`,\n );\n return out;\n}\n\nfunction formatInputSummary(input: unknown): string {\n if (!input || typeof input !== 'object') return '';\n const obj = input as Record<string, unknown>;\n if (typeof obj['path'] === 'string') return obj['path'] as string;\n if (typeof obj['url'] === 'string') return obj['url'] as string;\n if (typeof obj['command'] === 'string') {\n const cmd = obj['command'] as string;\n return cmd.length > 60 ? cmd.slice(0, 57) + '...' : cmd;\n }\n if (typeof obj['pattern'] === 'string') return obj['pattern'] as string;\n return '';\n}\n\nfunction safeStringify(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/**\n * If the tool result is an object with a `diff` field (e.g. from the edit\n * tool), return that. If it's a string containing a unified diff header,\n * return it as-is. Otherwise return null and the caller falls back to a\n * generic preview.\n */\nfunction extractDiff(value: unknown): string | null {\n if (typeof value === 'object' && value !== null) {\n const d = (value as { diff?: unknown }).diff;\n if (typeof d === 'string' && d.length > 0) return d;\n }\n if (typeof value === 'string') {\n // The agent serialises tool results to JSON before handing them to the\n // renderer, so a string `{\"diff\": \"...\"}` is the common case. Try parsing.\n const trimmed = value.trimStart();\n if (trimmed.startsWith('{')) {\n try {\n const parsed = JSON.parse(value) as { diff?: unknown };\n if (typeof parsed.diff === 'string' && parsed.diff.length > 0) {\n return parsed.diff;\n }\n } catch {\n // fall through\n }\n }\n if (/^---[^\\n]*\\n\\+\\+\\+/m.test(value)) return value;\n }\n return null;\n}\n\n/**\n * Short summary shown next to the ✓: file path + count for edit, line count\n * for read/grep, etc. Falls back to nothing if the shape isn't recognised.\n */\nfunction summarize(value: unknown, name: string): string {\n // Tool results arrive at the renderer already serialised to a JSON string.\n // Re-parse so we can pull out structured fields. Falls back to the raw value\n // for tools that return plain strings.\n let v: unknown = value;\n if (typeof value === 'string') {\n const trimmed = value.trimStart();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n v = JSON.parse(value);\n } catch {\n // not JSON — leave as string\n }\n }\n }\n if (typeof v === 'object' && v !== null) {\n const o = v as Record<string, unknown>;\n if (name === 'edit') {\n const path = typeof o['path'] === 'string' ? (o['path'] as string) : '';\n const reps = typeof o['replacements'] === 'number' ? (o['replacements'] as number) : 0;\n return `${path} ${reps} replacement${reps === 1 ? '' : 's'}`.trim();\n }\n if (name === 'write') {\n const path = typeof o['path'] === 'string' ? (o['path'] as string) : '';\n const bytes = typeof o['bytes'] === 'number' ? (o['bytes'] as number) : undefined;\n return bytes !== undefined ? `${path} ${bytes}B` : path;\n }\n if (typeof o['count'] === 'number') {\n return `${o['count']} match${o['count'] === 1 ? '' : 'es'}`;\n }\n }\n return '';\n}\n","import * as fs from 'node:fs/promises';\nimport {\n type ModelsRegistry,\n type ProviderConfig,\n type ResolvedProvider,\n type SecretVault,\n type WireFamily,\n atomicWrite,\n color,\n decryptConfigSecrets,\n encryptConfigSecrets,\n} from '@wrongstack/core';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport {\n activeLabel,\n maskedKey,\n normalizeKeys,\n nowIso,\n writeKeysBack,\n} from './provider-config-utils.js';\nimport type { TerminalRenderer } from './renderer.js';\n\nexport interface AuthMenuDeps {\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n modelsRegistry: ModelsRegistry;\n vault: SecretVault;\n globalConfigPath: string;\n}\n\n/**\n * Interactive auth manager. Shows saved providers + keys, lets the user\n * add/update/delete keys, set the active key per provider, or add a key\n * for any provider in the models.dev catalog. Loops until the user exits.\n *\n * The legacy single-key `apiKey` field is migrated to `apiKeys[]` lazily\n * on first edit, so users who set up under the old schema upgrade\n * transparently the first time they open this menu.\n */\nexport async function runAuthMenu(deps: AuthMenuDeps): Promise<number> {\n for (;;) {\n const providers = await loadProviders(deps);\n renderTopMenu(deps.renderer, providers);\n\n const ids = Object.keys(providers).sort();\n const choice = (await deps.reader.readLine(`\\n${color.amber('?')} Pick: `))\n .trim()\n .toLowerCase();\n\n if (!choice || choice === 'q' || choice === 'quit' || choice === 'exit') {\n deps.renderer.write(color.dim('Done.\\n'));\n return 0;\n }\n\n if (choice === 'a' || choice === 'add') {\n await addForNewProvider(deps);\n continue;\n }\n\n if (choice === 'c' || choice === 'custom') {\n await addCustomProvider(deps);\n continue;\n }\n\n const idx = Number.parseInt(choice, 10);\n if (!Number.isNaN(idx) && idx >= 1 && idx <= ids.length) {\n const pid = ids[idx - 1]!;\n await manageProvider(pid, deps);\n continue;\n }\n\n // Try matching by provider id directly.\n const byId = ids.find((id) => id.toLowerCase() === choice);\n if (byId) {\n await manageProvider(byId, deps);\n continue;\n }\n\n deps.renderer.writeError(`Unknown selection: \"${choice}\"`);\n }\n}\n\nfunction renderTopMenu(\n renderer: TerminalRenderer,\n providers: Record<string, ProviderConfig>,\n): void {\n renderer.write(`\\n${color.bold('WrongStack')} ${color.dim('— API keys')}\\n\\n`);\n const ids = Object.keys(providers).sort();\n if (ids.length === 0) {\n renderer.write(color.dim(' No providers configured yet.\\n'));\n } else {\n renderer.write(` ${color.dim('Saved providers:')}\\n`);\n let idx = 1;\n for (const id of ids) {\n const cfg = providers[id]!;\n const keys = normalizeKeys(cfg);\n const active = activeLabel(cfg, keys);\n const summary =\n keys.length === 0\n ? color.dim('(no keys)')\n : keys.length === 1\n ? maskedKey(keys[0]!.apiKey)\n : `${color.dim(`${keys.length} keys`)} ${color.dim('active:')} ${color.bold(active ?? '?')} ${maskedKey(keys.find((k) => k.label === active)?.apiKey ?? keys[0]!.apiKey)}`;\n const fam = cfg.family ? color.dim(`[${cfg.family}]`) : '';\n const aliasHint = cfg.type && cfg.type !== id ? color.dim(`→ ${cfg.type}`) : '';\n renderer.write(\n ` ${color.dim(`${idx}.`.padStart(4))} ${id.padEnd(22)} ${fam} ${aliasHint} ${summary}\\n`,\n );\n idx++;\n }\n }\n renderer.write(`\\n ${color.dim('Actions:')}\\n`);\n renderer.write(` ${color.bold('a')} Add key for a new provider (from catalog)\\n`);\n renderer.write(` ${color.bold('c')} Add custom provider (type + family + baseUrl)\\n`);\n renderer.write(` ${color.bold('q')} Quit\\n`);\n if (ids.length > 0) {\n renderer.write(color.dim(`\\n Pick a number to manage that provider's keys.\\n`));\n }\n}\n\nasync function manageProvider(providerId: string, deps: AuthMenuDeps): Promise<void> {\n for (;;) {\n const providers = await loadProviders(deps);\n const cfg = providers[providerId];\n if (!cfg) {\n deps.renderer.writeError(`Provider \"${providerId}\" no longer in config.`);\n return;\n }\n const keys = normalizeKeys(cfg);\n const active = activeLabel(cfg, keys);\n\n deps.renderer.write(\n `\\n${color.bold(providerId)} ${cfg.family ? color.dim(`[${cfg.family}]`) : color.amber('[no family]')}\\n`,\n );\n deps.renderer.write(\n color.dim(` type: ${cfg.type ?? providerId}\\n`) +\n color.dim(\n ` family: ${cfg.family ?? '(unset → resolved from models.dev when type matches)'}\\n`,\n ) +\n color.dim(` baseUrl: ${cfg.baseUrl ?? '(unset → catalog default)'}\\n`),\n );\n if (cfg.envVars && cfg.envVars.length > 0) {\n deps.renderer.write(color.dim(` envVars: ${cfg.envVars.join(', ')}\\n`));\n }\n if (cfg.models && cfg.models.length > 0) {\n deps.renderer.write(color.dim(` models: ${cfg.models.join(', ')}\\n`));\n }\n if (keys.length === 0) {\n deps.renderer.write(color.dim(' (no keys saved)\\n'));\n } else {\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i]!;\n const marker = k.label === active ? color.green('●') : color.dim('○');\n deps.renderer.write(\n ` ${color.dim(`${i + 1}.`.padStart(4))} ${marker} ${k.label.padEnd(20)} ${maskedKey(k.apiKey)} ${color.dim(k.createdAt)}\\n`,\n );\n }\n }\n\n deps.renderer.write(`\\n ${color.dim('Actions:')}\\n`);\n deps.renderer.write(` ${color.bold('a')} Add another key\\n`);\n if (keys.length > 0) {\n deps.renderer.write(` ${color.bold('u')} <n> Update key <n>\\n`);\n deps.renderer.write(` ${color.bold('d')} <n> Delete key <n>\\n`);\n deps.renderer.write(` ${color.bold('s')} <n> Set key <n> as active\\n`);\n }\n deps.renderer.write(` ${color.bold('f')} Edit family\\n`);\n deps.renderer.write(` ${color.bold('B')} Edit baseUrl\\n`);\n deps.renderer.write(` ${color.bold('m')} Edit visible model list\\n`);\n deps.renderer.write(` ${color.bold('x')} Remove this provider entirely\\n`);\n deps.renderer.write(` ${color.bold('b')} Back\\n`);\n\n const raw = (await deps.reader.readLine(`\\n${color.amber('?')} ${providerId} > `)).trim();\n if (!raw || raw === 'b' || raw === 'back') return;\n\n const [verb, argRaw] = raw.split(/\\s+/, 2);\n const arg = argRaw ? Number.parseInt(argRaw, 10) : Number.NaN;\n\n if (verb === 'a' || verb === 'add') {\n await addKeyForProvider(providerId, deps, cfg);\n continue;\n }\n if (verb === 'x' || verb === 'remove') {\n const confirm = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Remove provider \"${providerId}\" and ${keys.length} key(s)? ${color.dim('[y/N]')} `,\n )\n )\n .trim()\n .toLowerCase();\n if (confirm === 'y' || confirm === 'yes') {\n await mutateProviders(deps, (all) => {\n delete all[providerId];\n });\n deps.renderer.write(` ${color.green('✓')} Removed ${providerId}.\\n`);\n return;\n }\n continue;\n }\n if (verb === 'u' || verb === 'update') {\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\n deps.renderer.writeError(`Usage: u <1-${keys.length}>`);\n continue;\n }\n const target = keys[arg - 1]!;\n const newKey = await readKeyInput(deps, `Updated key for ${target.label}`);\n if (!newKey) continue;\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n const list = normalizeKeys(p).map((k) =>\n k.label === target.label ? { ...k, apiKey: newKey, createdAt: nowIso() } : k,\n );\n writeKeysBack(p, list);\n });\n deps.renderer.write(` ${color.green('✓')} Updated ${providerId}/${target.label}.\\n`);\n continue;\n }\n if (verb === 'd' || verb === 'delete' || verb === 'rm') {\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\n deps.renderer.writeError(`Usage: d <1-${keys.length}>`);\n continue;\n }\n const target = keys[arg - 1]!;\n const confirm = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Delete key \"${target.label}\" (${maskedKey(target.apiKey)})? ${color.dim('[y/N]')} `,\n )\n )\n .trim()\n .toLowerCase();\n if (confirm !== 'y' && confirm !== 'yes') continue;\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n const list = normalizeKeys(p).filter((k) => k.label !== target.label);\n writeKeysBack(p, list);\n if (p.activeKey === target.label) {\n p.activeKey = list[0]?.label;\n }\n });\n deps.renderer.write(` ${color.green('✓')} Deleted ${providerId}/${target.label}.\\n`);\n continue;\n }\n if (verb === 'f' || verb === 'family') {\n const current = cfg.family ?? '';\n const ans = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Family ${color.dim(`(anthropic | openai | openai-compatible | google, empty = unset, current: ${current || 'unset'})`)}: `,\n )\n ).trim() as WireFamily | '';\n if (ans !== '' && !['anthropic', 'openai', 'openai-compatible', 'google'].includes(ans)) {\n deps.renderer.writeError(`Invalid family: \"${ans}\"`);\n continue;\n }\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n if (ans === '') delete p.family;\n else p.family = ans;\n });\n deps.renderer.write(` ${color.green('✓')} family → ${ans || '(unset)'}\\n`);\n continue;\n }\n if (verb === 'B' || verb === 'baseurl' || verb === 'base-url') {\n const current = cfg.baseUrl ?? '';\n const ans = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Base URL ${color.dim(`(empty = unset, current: ${current || 'unset'})`)}: `,\n )\n ).trim();\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n if (ans === '') delete p.baseUrl;\n else p.baseUrl = ans;\n });\n deps.renderer.write(` ${color.green('✓')} baseUrl → ${ans || '(unset)'}\\n`);\n continue;\n }\n if (verb === 'm' || verb === 'models') {\n const current = (cfg.models ?? []).join(', ');\n const ans = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Model ids ${color.dim(`(comma-separated, empty = catalog default, current: ${current || 'none'})`)}: `,\n )\n ).trim();\n const list = ans\n ? ans\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : [];\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n if (list.length === 0) delete p.models;\n else p.models = list;\n });\n deps.renderer.write(\n ` ${color.green('✓')} models → ${list.length === 0 ? '(catalog default)' : list.join(', ')}\\n`,\n );\n continue;\n }\n if (verb === 's' || verb === 'set' || verb === 'active') {\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\n deps.renderer.writeError(`Usage: s <1-${keys.length}>`);\n continue;\n }\n const target = keys[arg - 1]!;\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n // Make sure the apiKeys[] form is canonical before flipping active.\n const list = normalizeKeys(p);\n writeKeysBack(p, list);\n p.activeKey = target.label;\n });\n deps.renderer.write(\n ` ${color.green('✓')} Active key for ${providerId} → ${color.bold(target.label)}.\\n`,\n );\n continue;\n }\n deps.renderer.writeError(`Unknown action: \"${raw}\"`);\n }\n}\n\n/**\n * Pick a provider from the models.dev catalog (grouped by family) and add\n * a key for it. Catalog lookup populates family/baseUrl/envVars defaults.\n * When the catalog is unavailable we still let the user type a provider\n * id and family manually so the offline path keeps working.\n */\nasync function addForNewProvider(deps: AuthMenuDeps): Promise<void> {\n let catalog: ResolvedProvider[] = [];\n try {\n catalog = (await deps.modelsRegistry.listProviders()).filter((p) => p.family !== 'unsupported');\n } catch {\n deps.renderer.writeWarning('Catalog unavailable — falling back to manual entry.');\n }\n\n if (catalog.length === 0) {\n // Manual entry path\n const pid = (await deps.reader.readLine(` ${color.amber('?')} Provider id: `)).trim();\n if (!pid) return;\n const fam = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Family (anthropic/openai/openai-compatible/google): `,\n )\n ).trim() as WireFamily;\n const baseUrl = (\n await deps.reader.readLine(` ${color.amber('?')} Base URL ${color.dim('(optional)')}: `)\n ).trim();\n await addKeyForProvider(pid, deps, {\n type: pid,\n family: fam || undefined,\n ...(baseUrl ? { baseUrl } : {}),\n });\n return;\n }\n\n // Group catalog by family, optionally narrowed by a substring filter\n // and/or hiding already-saved entries. The catalog has 120+ entries —\n // without a filter the openai-compatible list alone scrolls off-screen,\n // so types like \"zai-coding-plan\" get easy to miss.\n const saved = new Set(Object.keys(await loadProviders(deps)));\n deps.renderer.write(\n color.dim(\n ` Catalog has ${catalog.length} providers. Filter by name to narrow, or \"s\" for unsaved-only.\\n`,\n ),\n );\n const filterRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Filter ${color.dim('(substring of id/name, \"s\" for unsaved-only, empty = all)')}: `,\n )\n ).trim();\n const filterLc = filterRaw.toLowerCase();\n const showUnsavedOnly = filterLc === 's' || filterLc === 'unsaved';\n const matches = (p: ResolvedProvider): boolean => {\n if (showUnsavedOnly) return !saved.has(p.id);\n if (!filterLc) return true;\n return p.id.toLowerCase().includes(filterLc) || p.name.toLowerCase().includes(filterLc);\n };\n\n const byFamily = new Map<WireFamily, ResolvedProvider[]>();\n let filteredCount = 0;\n for (const p of catalog) {\n if (!matches(p)) continue;\n filteredCount++;\n const list = byFamily.get(p.family) ?? [];\n list.push(p);\n byFamily.set(p.family, list);\n }\n\n if (filteredCount === 0) {\n deps.renderer.writeError(\n `No providers match \"${filterRaw}\". Try a shorter substring or check \\`wstack providers\\` for valid ids.`,\n );\n return;\n }\n if (filterRaw && !showUnsavedOnly) {\n deps.renderer.write(\n color.dim(` ${filteredCount} match${filteredCount === 1 ? '' : 'es'} for \"${filterRaw}\".\\n`),\n );\n }\n\n const ordered: ResolvedProvider[] = [];\n const familyOrder: WireFamily[] = ['anthropic', 'openai', 'google', 'openai-compatible'];\n let idx = 1;\n deps.renderer.write('\\n');\n for (const fam of familyOrder) {\n const list = byFamily.get(fam);\n if (!list || list.length === 0) continue;\n deps.renderer.write(` ${color.bold(fam)}\\n`);\n for (const p of list) {\n const savedMark = saved.has(p.id) ? color.cyan('◉') : color.dim('○');\n const env = p.envVars[0] ? color.dim(`[${p.envVars[0]}]`) : '';\n deps.renderer.write(\n ` ${color.dim(`${idx}.`.padStart(4))} ${savedMark} ${p.id.padEnd(22)} ${color.dim(p.name)} ${env}\\n`,\n );\n ordered.push(p);\n idx++;\n }\n }\n deps.renderer.write(`\\n ${color.dim('◉ already saved ○ no key yet')}\\n`);\n\n const answer = (\n await deps.reader.readLine(\n `\\n${color.amber('?')} Pick (1-${ordered.length}) or type provider id: `,\n )\n ).trim();\n if (!answer) return;\n\n let chosen: ResolvedProvider | undefined;\n const num = Number.parseInt(answer, 10);\n if (!Number.isNaN(num) && num >= 1 && num <= ordered.length) {\n chosen = ordered[num - 1];\n } else {\n chosen =\n ordered.find((p) => p.id.toLowerCase() === answer.toLowerCase()) ??\n catalog.find((p) => p.id.toLowerCase() === answer.toLowerCase());\n }\n if (!chosen) {\n deps.renderer.writeError(`No such provider: \"${answer}\"`);\n return;\n }\n\n // Always show family + baseUrl as inline prompts with catalog defaults\n // so the user can override either one without a separate confirmation\n // step. Press Enter to accept the catalog value, or type a new one to\n // change it. Useful for routing a catalog-known id through a custom\n // proxy or a different wire family (e.g. \"anthropic\"-id provider\n // through an openai-compatible gateway).\n deps.renderer.write(\n color.dim(`\\n Defaults from models.dev — press Enter to keep, or type a new value.\\n`),\n );\n const famRaw = (\n await deps.reader.readLine(` ${color.amber('?')} Family ${color.dim(`[${chosen.family}]`)}: `)\n ).trim();\n let family: WireFamily = chosen.family;\n if (famRaw) {\n if (!['anthropic', 'openai', 'openai-compatible', 'google'].includes(famRaw)) {\n deps.renderer.writeError(\n `Invalid family: \"${famRaw}\" (must be anthropic | openai | openai-compatible | google).`,\n );\n return;\n }\n family = famRaw as WireFamily;\n }\n const baseRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Base URL ${color.dim(`[${chosen.apiBase ?? 'unset'}]`)}: `,\n )\n ).trim();\n const baseUrl: string | undefined = baseRaw || chosen.apiBase;\n\n // Pick the storage alias (= map key under `providers`). Two reasons to\n // make this distinct from the catalog id:\n // 1. The user may want the SAME catalog provider saved twice with\n // different family/baseUrl (e.g. zai-coding-plan once as\n // openai-compatible, once as anthropic) — different aliases let\n // both entries coexist.\n // 2. The CLI launches via `--provider <alias>`, so a short custom\n // name like \"zai-claude\" is friendlier than \"zai-coding-plan-anthropic\".\n // Auto-suggest a disambiguated alias when family diverges from the\n // catalog default, since that's the signal the user is creating a\n // second variant — not just adding another key to the same profile.\n const providersNow = await loadProviders(deps);\n let suggestedAlias = chosen.id;\n if (family !== chosen.family) {\n let candidate = `${chosen.id}-${family}`;\n let n = 2;\n while (providersNow[candidate]) {\n candidate = `${chosen.id}-${family}-${n}`;\n n++;\n }\n suggestedAlias = candidate;\n }\n const aliasRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Save under alias ${color.dim(`[${suggestedAlias}]`)} ${color.dim('(used as `--provider <alias>`)')}: `,\n )\n ).trim();\n const alias = aliasRaw || suggestedAlias;\n\n // Block clobbering an unrelated existing entry. Same alias is fine if\n // the user is intentionally adding another KEY to the same profile —\n // but only when family + baseUrl match what's already saved. Otherwise\n // we'd silently overwrite their settings and pile a key into the wrong\n // place (exactly the bug that motivated the alias prompt).\n const existing = providersNow[alias];\n if (existing) {\n const sameFamily = (existing.family ?? chosen.family) === family;\n const sameBase = (existing.baseUrl ?? chosen.apiBase) === baseUrl;\n if (!sameFamily || !sameBase) {\n deps.renderer.writeError(\n `Alias \"${alias}\" already exists with different family/baseUrl.\\n ` +\n `Existing: family=${existing.family ?? '(unset)'}, baseUrl=${existing.baseUrl ?? '(unset)'}\\n ` +\n `New: family=${family}, baseUrl=${baseUrl ?? '(unset)'}\\n ` +\n `Pick a different alias to keep them separate.`,\n );\n return;\n }\n }\n\n await addKeyForProvider(alias, deps, {\n type: chosen.id,\n family,\n baseUrl,\n envVars: chosen.envVars,\n });\n}\n\n/**\n * Add a fully user-defined provider that bypasses the models.dev catalog.\n * The user picks the type (registry id), wire family, and base URL — all\n * three are stored on the entry so the CLI can construct the provider\n * via `makeProviderFromConfig` at boot without a catalog lookup.\n */\nasync function addCustomProvider(deps: AuthMenuDeps): Promise<void> {\n deps.renderer.write(\n `\\n${color.bold('Custom provider')} ${color.dim('— for local models or proxies not in the models.dev catalog.')}\\n`,\n );\n const type = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Provider id ${color.dim('(e.g. \"local-llama\", \"my-proxy\")')}: `,\n )\n ).trim();\n if (!type) return;\n\n const existing = (await loadProviders(deps))[type];\n if (existing) {\n deps.renderer.writeWarning(`\"${type}\" already exists. Pick it from the main menu to edit.`);\n return;\n }\n\n const familyRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Wire family ${color.dim('(anthropic | openai | openai-compatible | google)')}: `,\n )\n ).trim();\n if (!['anthropic', 'openai', 'openai-compatible', 'google'].includes(familyRaw)) {\n deps.renderer.writeError(`Invalid family: \"${familyRaw}\"`);\n return;\n }\n const family = familyRaw as WireFamily;\n\n const baseUrl = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Base URL ${color.dim('(e.g. http://localhost:11434/v1, leave empty if not needed)')}: `,\n )\n ).trim();\n\n const modelsRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Model ids ${color.dim('(comma-separated, optional)')}: `,\n )\n ).trim();\n const models = modelsRaw\n ? modelsRaw\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined;\n\n const envVarsRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Env var names ${color.dim('(comma-separated, optional fallback for the key)')}: `,\n )\n ).trim();\n const envVars = envVarsRaw\n ? envVarsRaw\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined;\n\n await addKeyForProvider(type, deps, {\n type,\n family,\n ...(baseUrl ? { baseUrl } : {}),\n ...(models ? { models } : {}),\n ...(envVars ? { envVars } : {}),\n });\n}\n\nasync function addKeyForProvider(\n providerId: string,\n deps: AuthMenuDeps,\n template: Partial<ProviderConfig>,\n): Promise<void> {\n const providers = await loadProviders(deps);\n const existing = providers[providerId];\n const existingKeys = existing ? normalizeKeys(existing) : [];\n const usedLabels = new Set(existingKeys.map((k) => k.label));\n\n // Suggest a sensible default label\n let defaultLabel = 'default';\n if (usedLabels.has(defaultLabel)) {\n let n = 2;\n while (usedLabels.has(`key${n}`)) n++;\n defaultLabel = `key${n}`;\n }\n\n const labelRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Label for this key ${color.dim(`[${defaultLabel}]`)}: `,\n )\n ).trim();\n const label = labelRaw || defaultLabel;\n if (usedLabels.has(label)) {\n deps.renderer.writeError(\n `Label \"${label}\" already used for ${providerId}. Use update (u) instead.`,\n );\n return;\n }\n\n const apiKey = await readKeyInput(deps, `API key for ${providerId}/${label}`);\n if (!apiKey) {\n deps.renderer.writeError('No key entered. Nothing saved.');\n return;\n }\n\n await mutateProviders(deps, (all) => {\n const existingProv = all[providerId] ?? { type: providerId, ...template };\n // Backfill type/family/baseUrl from template when absent.\n if (!existingProv.type) existingProv.type = providerId;\n if (!existingProv.family && template.family) existingProv.family = template.family;\n if (!existingProv.baseUrl && template.baseUrl) existingProv.baseUrl = template.baseUrl;\n if (!existingProv.envVars && template.envVars) existingProv.envVars = template.envVars;\n const list = normalizeKeys(existingProv);\n list.push({ label, apiKey, createdAt: nowIso() });\n writeKeysBack(existingProv, list);\n if (!existingProv.activeKey) existingProv.activeKey = label;\n all[providerId] = existingProv;\n });\n\n deps.renderer.write(\n ` ${color.green('✓')} Saved ${color.bold(providerId)}/${color.bold(label)}. ${color.dim('Use `wstack --provider ' + providerId + ' \"<task>\"` to launch.')}\\n`,\n );\n}\n\n/**\n * One-shot add: used by `wstack auth <provider>` to skip the menu and\n * append a single key. Honors --label / --family / --base-url / --env\n * flags. If the label collides, we suffix with a counter.\n */\nexport async function runAuthDirect(\n deps: AuthMenuDeps,\n opts: {\n providerId: string;\n label?: string;\n family?: WireFamily;\n baseUrl?: string;\n envVars?: string[];\n },\n): Promise<number> {\n const { providerId } = opts;\n const providers = await loadProviders(deps);\n const existing = providers[providerId];\n\n if (!existing && !opts.family) {\n // Try the catalog before giving up.\n let knownFamily: WireFamily | undefined;\n let knownBase: string | undefined;\n let knownEnv: string[] | undefined;\n try {\n const k = await deps.modelsRegistry.getProvider(providerId);\n if (k) {\n knownFamily = k.family;\n knownBase = k.apiBase;\n knownEnv = k.envVars;\n }\n } catch {\n // catalog unavailable\n }\n if (!knownFamily || knownFamily === 'unsupported') {\n deps.renderer.writeError(\n `Provider \"${providerId}\" not in catalog. Pass --family <anthropic|openai|openai-compatible|google>.`,\n );\n return 1;\n }\n opts.family = knownFamily;\n opts.baseUrl ??= knownBase;\n opts.envVars ??= knownEnv;\n }\n\n const usedLabels = new Set(existing ? normalizeKeys(existing).map((k) => k.label) : []);\n let label = opts.label ?? 'default';\n if (usedLabels.has(label)) {\n let n = 2;\n while (usedLabels.has(`${label}-${n}`)) n++;\n label = `${label}-${n}`;\n deps.renderer.writeInfo(`Label collided; saving as \"${label}\".`);\n }\n\n const apiKey = await readKeyInput(deps, `API key for ${providerId}/${label}`);\n if (!apiKey) return 1;\n\n await mutateProviders(deps, (all) => {\n const p = all[providerId] ?? { type: providerId };\n if (!p.type) p.type = providerId;\n if (!p.family && opts.family) p.family = opts.family;\n if (!p.baseUrl && opts.baseUrl) p.baseUrl = opts.baseUrl;\n if (!p.envVars && opts.envVars) p.envVars = opts.envVars;\n const list = normalizeKeys(p);\n list.push({ label, apiKey, createdAt: nowIso() });\n writeKeysBack(p, list);\n if (!p.activeKey) p.activeKey = label;\n all[providerId] = p;\n });\n\n deps.renderer.writeInfo(`Stored encrypted key for ${providerId} (label \"${label}\").`);\n deps.renderer.writeInfo(`Use: wstack --provider ${providerId} \"<task>\"`);\n return 0;\n}\n\nasync function readKeyInput(deps: AuthMenuDeps, intent: string): Promise<string | undefined> {\n const key = (\n await deps.reader.readSecret(\n ` ${color.amber('?')} ${intent} ${color.dim('(hidden, paste OK)')}: `,\n )\n ).trim();\n if (!key) {\n deps.renderer.writeError('No key entered.');\n return undefined;\n }\n return key;\n}\n\n/* ----------------------------- I/O helpers ----------------------------- */\n\n/**\n * Read the on-disk config file and return its `providers` map, fully\n * decrypted. We don't use `deps.config` here because it's a frozen\n * snapshot taken at startup — and once we start mutating keys we want to\n * see our own writes on the next iteration.\n */\nasync function loadProviders(deps: AuthMenuDeps): Promise<Record<string, ProviderConfig>> {\n let raw: string;\n try {\n raw = await fs.readFile(deps.globalConfigPath, 'utf8');\n } catch {\n return {};\n }\n let parsed: { providers?: Record<string, ProviderConfig> } = {};\n try {\n parsed = JSON.parse(raw) as { providers?: Record<string, ProviderConfig> };\n } catch {\n return {};\n }\n const decrypted = decryptConfigSecrets(parsed, deps.vault);\n return decrypted.providers ?? {};\n}\n\n/**\n * Load → mutate → encrypt → atomic-write. Operates on the FULL config\n * file so we don't truncate anything the user has set up elsewhere; only\n * the `providers` key gets replaced wholesale with the post-mutation\n * value (so deletions actually take effect).\n */\nasync function mutateProviders(\n deps: AuthMenuDeps,\n mutator: (providers: Record<string, ProviderConfig>) => void,\n): Promise<void> {\n let raw: string;\n try {\n raw = await fs.readFile(deps.globalConfigPath, 'utf8');\n } catch {\n raw = '{}';\n }\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(raw) as Record<string, unknown>;\n } catch {\n parsed = {};\n }\n const decrypted = decryptConfigSecrets(parsed, deps.vault) as Record<string, unknown>;\n const providers = (decrypted.providers as Record<string, ProviderConfig>) ?? {};\n mutator(providers);\n decrypted.providers = providers;\n const encrypted = encryptConfigSecrets(decrypted, deps.vault);\n await atomicWrite(deps.globalConfigPath, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\n}\n","import { parseAuthFlags } from '../../arg-parser.js';\nimport { runAuthDirect, runAuthMenu } from '../../auth-menu.js';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const authCmd: SubcommandHandler = async (args, deps) => {\n const flags = parseAuthFlags(args);\n const menuDeps = {\n renderer: deps.renderer,\n reader: deps.reader,\n modelsRegistry: deps.modelsRegistry,\n vault: deps.vault,\n globalConfigPath: deps.paths.globalConfig,\n };\n if (flags.positional.length === 0) return runAuthMenu(menuDeps);\n return runAuthDirect(menuDeps, {\n providerId: flags.positional[0]!,\n label: flags.label,\n family: flags.family,\n baseUrl: flags.baseUrl,\n envVars: flags.envVars,\n });\n};\n","import { createRequire } from 'node:module';\n\nconst req = createRequire(import.meta.url);\n\nfunction readOwnVersion(): string {\n const candidates = ['../package.json', '../../package.json'];\n for (const rel of candidates) {\n try {\n const pkg = req(rel) as { version?: unknown };\n if (typeof pkg.version === 'string' && pkg.version.length > 0) return pkg.version;\n } catch {\n // try next\n }\n }\n return 'dev';\n}\n\nexport const CLI_VERSION = readOwnVersion();\n\nlet API_VERSION = '0.0.0';\ntry {\n const corePkg = req('@wrongstack/core/package.json') as { wrongstackApiVersion?: string };\n if (corePkg.wrongstackApiVersion) API_VERSION = corePkg.wrongstackApiVersion;\n} catch {\n /* fallback */\n}\n\nexport { API_VERSION };\n","import * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport { API_VERSION } from '../../version.js';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const diagCmd: SubcommandHandler = async (_args, deps) => {\n const cfg = deps.config;\n const age = await deps.modelsRegistry.ageSeconds();\n const lines = [\n color.bold('WrongStack diagnostics'),\n ` apiVersion: ${API_VERSION}`,\n ` cwd: ${deps.cwd}`,\n ` projectRoot: ${deps.projectRoot}`,\n ` projectHash: ${deps.paths.projectHash}`,\n ` projectDir: ${deps.paths.projectDir}`,\n ` globalRoot: ${deps.paths.globalRoot}`,\n ` modelsCache: ${deps.paths.modelsCache}`,\n ` cacheAge: ${isFinite(age) ? `${Math.round(age / 60)}m` : 'never'}`,\n ` node: ${process.version}`,\n ` os: ${os.platform()} ${os.release()}`,\n ` provider: ${cfg.provider ?? '<unset>'}`,\n ` model: ${cfg.model ?? '<unset>'}`,\n ` tools: ${deps.toolRegistry?.list().length ?? 0}`,\n ` plugins: ${cfg.plugins?.length ?? 0}`,\n ` mcpServers: ${Object.keys(cfg.mcpServers ?? {}).length}`,\n ];\n deps.renderer.write(lines.join('\\n') + '\\n');\n return 0;\n};\n\nexport const doctorCmd: SubcommandHandler = async (_args, deps) => {\n type CheckResult = { name: string; status: 'ok' | 'warn' | 'fail'; detail: string };\n const checks: CheckResult[] = [];\n const cfg = deps.config;\n if (!cfg.provider)\n checks.push({\n name: 'provider',\n status: 'fail',\n detail: 'no provider configured — run `wstack init` or `wstack auth`',\n });\n else checks.push({ name: 'provider', status: 'ok', detail: cfg.provider });\n if (!cfg.model)\n checks.push({\n name: 'model',\n status: 'fail',\n detail: 'no model configured — run `wstack init`',\n });\n else checks.push({ name: 'model', status: 'ok', detail: cfg.model });\n if (cfg.provider) {\n const providerCfg = (\n cfg.providers as Record<string, { apiKey?: string; envVars?: string[] }> | undefined\n )?.[cfg.provider];\n const hasVaultKey = typeof providerCfg?.apiKey === 'string' && providerCfg.apiKey.length > 0;\n const envHit = providerCfg?.envVars?.some((v) => process.env[v]) ?? false;\n if (hasVaultKey || envHit)\n checks.push({\n name: 'api key',\n status: 'ok',\n detail: hasVaultKey ? 'found in vault' : 'found in env',\n });\n else\n checks.push({\n name: 'api key',\n status: 'fail',\n detail: `no key for \"${cfg.provider}\" in vault or env — run \\`wstack auth ${cfg.provider}\\``,\n });\n }\n try {\n const age = await deps.modelsRegistry.ageSeconds();\n if (!isFinite(age))\n checks.push({\n name: 'models cache',\n status: 'warn',\n detail: 'never fetched — run `wstack models refresh`',\n });\n else if (age > 7 * 24 * 3600)\n checks.push({\n name: 'models cache',\n status: 'warn',\n detail: `${Math.round(age / 86400)} days old — run \\`wstack models refresh\\``,\n });\n else\n checks.push({ name: 'models cache', status: 'ok', detail: `${Math.round(age / 60)}m old` });\n } catch (err) {\n checks.push({\n name: 'models cache',\n status: 'warn',\n detail: `read failed: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n try {\n await fs.access(deps.paths.secretsKey);\n checks.push({ name: 'secret vault', status: 'ok', detail: deps.paths.secretsKey });\n } catch {\n checks.push({\n name: 'secret vault',\n status: 'warn',\n detail: 'not yet initialized (created lazily on first encrypt)',\n });\n }\n try {\n await fs.mkdir(deps.paths.projectSessions, { recursive: true });\n const probe = path.join(deps.paths.projectSessions, `.probe-${Date.now()}`);\n await fs.writeFile(probe, '');\n await fs.unlink(probe);\n checks.push({ name: 'sessions writable', status: 'ok', detail: deps.paths.projectSessions });\n } catch (err) {\n checks.push({\n name: 'sessions writable',\n status: 'fail',\n detail: `cannot write to ${deps.paths.projectSessions}: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n const mcpEntries = Object.entries(cfg.mcpServers ?? {}) as [\n string,\n { enabled?: boolean; transport?: string; command?: string; url?: string },\n ][];\n for (const [name, srv] of mcpEntries) {\n if (!srv.enabled) continue;\n if ((srv.transport === 'sse' || srv.transport === 'streamable-http') && !srv.url)\n checks.push({ name: `mcp:${name}`, status: 'fail', detail: 'transport requires url' });\n else if (srv.transport === 'stdio' && !srv.command)\n checks.push({\n name: `mcp:${name}`,\n status: 'fail',\n detail: 'stdio transport requires command',\n });\n else\n checks.push({\n name: `mcp:${name}`,\n status: 'ok',\n detail: `${srv.transport} ${srv.command ?? srv.url ?? ''}`.trim(),\n });\n }\n const major = Number.parseInt(process.version.replace(/^v/, '').split('.')[0] ?? '0', 10);\n if (major < 22)\n checks.push({ name: 'node', status: 'fail', detail: `${process.version} (need ≥22)` });\n else checks.push({ name: 'node', status: 'ok', detail: process.version });\n deps.renderer.write(color.bold('WrongStack doctor\\n\\n'));\n let failed = 0;\n let warned = 0;\n for (const c of checks) {\n const icon =\n c.status === 'ok'\n ? color.green('✓')\n : c.status === 'warn'\n ? color.amber('●')\n : color.red('✗');\n deps.renderer.write(` ${icon} ${c.name.padEnd(20)} ${color.dim(c.detail)}\\n`);\n if (c.status === 'fail') failed++;\n if (c.status === 'warn') warned++;\n }\n deps.renderer.write('\\n');\n if (failed > 0) {\n deps.renderer.write(\n color.red(`${failed} failed, ${warned} warning${warned === 1 ? '' : 's'}\\n`),\n );\n return 1;\n }\n if (warned > 0) {\n deps.renderer.write(\n color.amber(`All checks passed (${warned} warning${warned === 1 ? '' : 's'})\\n`),\n );\n return 0;\n }\n deps.renderer.write(color.green('All checks passed.\\n'));\n return 0;\n};\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { DefaultSessionReader } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const exportCmd: SubcommandHandler = async (args, deps) => {\n if (!deps.sessionStore) {\n deps.renderer.writeError('No session store configured.');\n return 1;\n }\n let format: 'markdown' | 'json' | 'text' = 'markdown';\n let output: string | undefined;\n let includeTools = true;\n let includeDiagnostics = true;\n let sessionId: string | undefined;\n for (let i = 0; i < args.length; i++) {\n const a = args[i]!;\n if (a === '--format' || a === '-f') {\n const v = args[++i];\n if (v !== 'markdown' && v !== 'json' && v !== 'text') {\n deps.renderer.writeError(`Unknown --format ${v}. Use markdown, json, or text.`);\n return 1;\n }\n format = v;\n } else if (a === '--out' || a === '-o') output = args[++i];\n else if (a === '--no-tools') includeTools = false;\n else if (a === '--no-diagnostics') includeDiagnostics = false;\n else if (a.startsWith('-')) {\n deps.renderer.writeError(`Unknown flag: ${a}`);\n return 1;\n } else if (!sessionId) sessionId = a;\n }\n if (!sessionId) {\n deps.renderer.writeError(\n 'Usage: wstack export <sessionId> [--format markdown|json|text] [--out <file>] [--no-tools] [--no-diagnostics]',\n );\n return 1;\n }\n const reader = new DefaultSessionReader({ store: deps.sessionStore });\n let rendered: string;\n try {\n rendered = await reader.export(sessionId, { format, includeTools, includeDiagnostics });\n } catch (err) {\n deps.renderer.writeError(`Export failed: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n if (output) {\n await fs.mkdir(path.dirname(path.resolve(deps.cwd, output)), { recursive: true });\n await fs.writeFile(path.resolve(deps.cwd, output), rendered, 'utf8');\n deps.renderer.write(`Wrote ${rendered.length} bytes to ${output}\\n`);\n } else {\n deps.renderer.write(rendered);\n if (!rendered.endsWith('\\n')) deps.renderer.write('\\n');\n }\n return 0;\n};\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { type Config, atomicWrite, color } from '@wrongstack/core';\nimport {\n DefaultSecretVault,\n encryptConfigSecrets,\n} from '@wrongstack/core/security';\nimport { detectProjectFacts, renderAgentsTemplate } from '../../slash-commands/helpers.js';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const initCmd: SubcommandHandler = async (_args, deps) => {\n deps.renderer.write(color.bold('WrongStack init\\n'));\n deps.renderer.writeInfo('Loading provider catalog from models.dev (cached locally)…');\n let providers;\n try {\n providers = await deps.modelsRegistry.listProviders();\n } catch (err) {\n deps.renderer.writeError(\n `Failed to load provider catalog: ${err instanceof Error ? err.message : err}`,\n );\n return 1;\n }\n const detected = providers\n .filter((p: { family: string; envVars: string[] }) => p.family !== 'unsupported')\n .filter((p: { envVars: string[] }) => p.envVars.some((v: string) => process.env[v]));\n const ranked =\n detected.length > 0\n ? detected\n : providers.filter((p: { id: string }) => ['anthropic', 'openai', 'google'].includes(p.id));\n if (detected.length > 0)\n deps.renderer.write(\n `Detected API keys for: ${detected.map((p: { name: string }) => p.name).join(', ')}\\n`,\n );\n const defaultId = ranked[0]?.id ?? 'anthropic';\n const providerId = (await deps.reader.readLine(`Provider [${defaultId}]: `)).trim() || defaultId;\n const provider = await deps.modelsRegistry.getProvider(providerId);\n if (!provider) {\n deps.renderer.writeError(`Provider \"${providerId}\" not found in models.dev catalog.`);\n return 1;\n }\n if (provider.family === 'unsupported') {\n deps.renderer.writeError(\n `Provider \"${providerId}\" uses ${provider.npm} which has no built-in transport. Install a plugin to enable it.`,\n );\n return 1;\n }\n const suggestedModel = (await deps.modelsRegistry.suggestModel(providerId)) ?? '';\n const modelHint = suggestedModel ? ` [${suggestedModel}]` : '';\n const modelId = (await deps.reader.readLine(`Model${modelHint}: `)).trim() || suggestedModel;\n if (!modelId) {\n deps.renderer.writeError('No model selected. Aborting.');\n return 1;\n }\n const envHit = provider.envVars.map((v: string) => process.env[v]).find(Boolean);\n let apiKey = '';\n if (!envHit) {\n apiKey = (\n await deps.reader.readLine(\n `API key (stored in ${deps.paths.globalConfig}; empty = expect ${provider.envVars[0] ?? 'env var'}): `,\n )\n ).trim();\n } else {\n deps.renderer.writeInfo(`Found API key in env (${provider.envVars.join(' / ')}).`);\n }\n await fs.mkdir(deps.paths.globalRoot, { recursive: true });\n const config: Partial<Config> = { version: 1, provider: providerId, model: modelId };\n if (apiKey) config.apiKey = apiKey;\n // Encrypt secret fields before writing to disk.\n const keyFile = path.join(path.dirname(deps.paths.globalConfig), '.key');\n const vault = new DefaultSecretVault({ keyFile });\n const encrypted = encryptConfigSecrets(config, vault);\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(encrypted, null, 2));\n await fs.mkdir(path.join(deps.projectRoot, '.wrongstack'), { recursive: true });\n const agentsFile = path.join(deps.projectRoot, '.wrongstack', 'AGENTS.md');\n try {\n await fs.access(agentsFile);\n } catch {\n const detected = await detectProjectFacts(deps.projectRoot);\n await atomicWrite(agentsFile, renderAgentsTemplate(detected));\n }\n deps.renderer.writeInfo(`Wrote ${deps.paths.globalConfig}`);\n deps.renderer.writeInfo(`Project state lives in ${deps.paths.projectDir}`);\n deps.renderer.writeInfo('Try: wstack \"<task>\" or wstack');\n return 0;\n};\n","import * as fs from 'node:fs/promises';\nimport { allServers, atomicWrite } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nconst BUILT_IN_MCP = allServers();\n\nexport const mcpCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n if (!sub || sub === 'list') {\n const servers = deps.config.mcpServers ?? {};\n if (Object.keys(servers).length === 0) {\n deps.renderer.write('No MCP servers configured.\\n');\n deps.renderer.write('Use `wstack mcp add <name>` or set mcpServers in your config.\\n');\n return 0;\n }\n for (const [name, cfg] of Object.entries(servers)) {\n const status = cfg.enabled === false ? 'disabled' : 'enabled';\n const desc = cfg.description ? ` # ${cfg.description}` : '';\n deps.renderer.write(` ${name.padEnd(20)} ${cfg.transport.padEnd(16)} ${status}${desc}\\n`);\n }\n return 0;\n }\n if (sub === 'add') {\n return addMcpServer(args, deps);\n }\n if (sub === 'remove') {\n const name = args[1];\n if (!name) {\n deps.renderer.writeError('Usage: wstack mcp remove <name>\\n');\n return 1;\n }\n return removeMcpServer(name, deps);\n }\n if (sub === 'restart') {\n deps.renderer.writeWarning('mcp restart is only available in REPL mode.');\n return 0;\n }\n deps.renderer.writeError(`Unknown mcp subcommand: ${sub}`);\n return 1;\n};\n\nasync function addMcpServer(args: string[], deps: SubcommandDeps): Promise<number> {\n const name = args[1]!;\n const enable = args.includes('--enable') || args.includes('-e');\n if (!name) {\n deps.renderer.writeError('Usage: wstack mcp add <name>\\n');\n deps.renderer.write('Available servers:\\n');\n for (const [sname, scfg] of Object.entries(deps.config.mcpServers ?? {}))\n deps.renderer.write(` ${sname.padEnd(20)} ${scfg.description ?? scfg.transport}\\n`);\n if (Object.keys(deps.config.mcpServers ?? {}).length === 0)\n for (const k of Object.keys(BUILT_IN_MCP)) {\n const s = BUILT_IN_MCP[k]!;\n deps.renderer.write(` ${k.padEnd(20)} ${s.description}\\n`);\n }\n deps.renderer.write('\\nRun `wstack mcp add <name> --enable` to enable immediately.\\n');\n return 1;\n }\n const factory = BUILT_IN_MCP[name];\n if (!factory) {\n deps.renderer.writeError(\n `Unknown server \"${name}\". Run \\`wstack mcp add\\` without args to see available servers.\\n`,\n );\n return 1;\n }\n const serverCfg = { ...factory };\n serverCfg.enabled = enable;\n let existing: Record<string, unknown> = {};\n try {\n existing = JSON.parse(await fs.readFile(deps.paths.globalConfig, 'utf8'));\n } catch {\n /* fine */\n }\n const mcpServers =\n (existing.mcpServers as Record<string, Record<string, unknown>> | undefined) ?? {};\n if (mcpServers[name])\n deps.renderer.writeWarning(`Server \"${name}\" already in config. Updating.\\n`);\n mcpServers[name] = serverCfg as unknown as Record<string, unknown>;\n existing.mcpServers = mcpServers;\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(existing, null, 2));\n const verb = enable ? 'Enabled' : 'Added (disabled — set enabled:true to activate)';\n deps.renderer.writeInfo(\n `${verb} \"${name}\" (${serverCfg.transport}). Config written to ${deps.paths.globalConfig}.\\n`,\n );\n return 0;\n}\n\nasync function removeMcpServer(name: string, deps: SubcommandDeps): Promise<number> {\n let existing: Record<string, unknown> = {};\n try {\n existing = JSON.parse(await fs.readFile(deps.paths.globalConfig, 'utf8'));\n } catch {\n deps.renderer.writeError('No config file found.\\n');\n return 1;\n }\n const mcpServers =\n (existing.mcpServers as Record<string, Record<string, unknown>> | undefined) ?? {};\n if (!mcpServers[name]) {\n deps.renderer.writeError(`Server \"${name}\" not in config.\\n`);\n return 1;\n }\n delete mcpServers[name];\n existing.mcpServers = mcpServers;\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(existing, null, 2));\n deps.renderer.writeInfo(`Removed \"${name}\" from config.\\n`);\n return 0;\n}\n","import * as fs from 'node:fs/promises';\nimport { type Config, type PluginConfig, atomicWrite } from '@wrongstack/core';\n\nexport const OFFICIAL_PLUGINS = [\n {\n alias: 'telegram',\n specifier: '@wrongstack/telegram',\n description: 'Telegram bridge for prompts, notifications, and slash commands.',\n },\n {\n alias: 'lsp',\n specifier: '@wrongstack/plug-lsp',\n description: 'Language Server Protocol tools for code intelligence.',\n },\n] as const;\n\nexport interface PluginManagementDeps {\n config: Config;\n configPath: string;\n}\n\nexport interface PluginManagementResult {\n code: number;\n level: 'output' | 'info' | 'error';\n message: string;\n patch?: {\n plugins?: (string | PluginConfig)[];\n features?: Record<string, unknown>;\n };\n restartRequired?: boolean;\n}\n\nconst OFFICIAL_ALIASES = new Map<string, string>(\n OFFICIAL_PLUGINS.flatMap((p) => [\n [p.alias, p.specifier],\n [p.specifier, p.specifier],\n ]),\n);\n\nexport async function runPluginManagementCommand(\n args: string[],\n deps: PluginManagementDeps,\n): Promise<PluginManagementResult> {\n const sub = args[0];\n if (!sub || sub === 'list' || sub === 'status') {\n return {\n code: 0,\n level: 'output',\n message: renderConfiguredPlugins(deps.config),\n };\n }\n if (sub === 'official' || sub === 'officials') {\n return {\n code: 0,\n level: 'output',\n message: renderOfficialPlugins(deps.config),\n };\n }\n if (sub === 'add' || sub === 'install') {\n const spec = args[1];\n if (!spec) {\n return errorResult('Usage: wstack plugin add <specifier|official-alias> [--disabled]');\n }\n return upsertPlugin(\n resolvePluginSpecifier(spec),\n { enabled: !args.includes('--disabled') },\n deps,\n 'Added',\n );\n }\n if (sub === 'remove' || sub === 'rm' || sub === 'uninstall') {\n const spec = args[1];\n if (!spec) {\n return errorResult('Usage: wstack plugin remove <specifier|official-alias>');\n }\n return removePlugin(resolvePluginSpecifier(spec), deps);\n }\n if (sub === 'enable' || sub === 'disable') {\n const spec = args[1];\n if (!spec) {\n return errorResult(`Usage: wstack plugin ${sub} <specifier|official-alias>`);\n }\n return upsertPlugin(\n resolvePluginSpecifier(spec),\n { enabled: sub === 'enable' },\n deps,\n sub === 'enable' ? 'Enabled' : 'Disabled',\n );\n }\n return errorResult(\n `Unknown plugin subcommand: ${sub}\\nUsage: wstack plugin [list|status|official|add|install|remove|enable|disable]`,\n );\n}\n\nexport function resolvePluginSpecifier(input: string): string {\n return OFFICIAL_ALIASES.get(input.toLowerCase()) ?? input;\n}\n\nexport function renderOfficialPlugins(config?: Config): string {\n return [\n 'Official plugins:',\n ...OFFICIAL_PLUGINS.map((p) => {\n const state = config ? officialPluginState(config, p.specifier) : '';\n const status = state ? `${state.padEnd(14)} ` : '';\n return ` ${p.alias.padEnd(12)} ${status}${p.specifier.padEnd(24)} ${p.description}`;\n }),\n '',\n 'Use `wstack plugin add <alias>` or `/plugin install <alias>`.',\n ].join('\\n');\n}\n\nexport function renderConfiguredPlugins(config: Config): string {\n const plugins = config.plugins ?? [];\n if (plugins.length === 0) {\n return [\n 'No plugins configured.',\n 'Use `wstack plugin add <specifier>` or `/plugin install <official-alias>`.',\n ].join('\\n');\n }\n return plugins\n .map((p) => {\n const name = pluginName(p);\n const enabled = typeof p === 'object' && p.enabled === false ? 'disabled' : 'enabled';\n const official = OFFICIAL_PLUGINS.find((entry) => entry.specifier === name);\n const suffix = official ? ` (${official.alias})` : '';\n return ` ${`${name}${suffix}`.padEnd(44)} ${enabled}`;\n })\n .join('\\n');\n}\n\nasync function readConfig(file: string): Promise<Record<string, unknown>> {\n try {\n return JSON.parse(await fs.readFile(file, 'utf8')) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\nfunction pluginName(p: string | PluginConfig): string {\n return typeof p === 'string' ? p : p.name;\n}\n\nfunction pluginEntry(spec: string, enabled: boolean): string | PluginConfig {\n return enabled ? spec : { name: spec, enabled: false };\n}\n\nfunction officialPluginState(\n config: Config,\n spec: string,\n): 'enabled' | 'disabled' | 'not configured' {\n const match = (config.plugins ?? []).find((p) => pluginName(p) === spec);\n if (!match) return 'not configured';\n return typeof match === 'object' && match.enabled === false ? 'disabled' : 'enabled';\n}\n\nasync function upsertPlugin(\n spec: string,\n opts: { enabled: boolean },\n deps: PluginManagementDeps,\n verb: string,\n): Promise<PluginManagementResult> {\n const existing = await readConfig(deps.configPath);\n const plugins = Array.isArray(existing.plugins)\n ? (existing.plugins as Array<string | PluginConfig>)\n : [];\n const idx = plugins.findIndex((p) => pluginName(p) === spec);\n const nextEntry = pluginEntry(spec, opts.enabled);\n if (idx >= 0) plugins[idx] = nextEntry;\n else plugins.push(nextEntry);\n const features = {\n ...(isRecord(deps.config.features) ? deps.config.features : {}),\n ...(isRecord(existing.features) ? existing.features : {}),\n plugins: true,\n };\n existing.plugins = plugins;\n existing.features = features;\n await atomicWrite(deps.configPath, JSON.stringify(existing, null, 2));\n return {\n code: 0,\n level: 'info',\n message: `${verb} \"${spec}\" (${opts.enabled ? 'enabled' : 'disabled'}). Config written to ${deps.configPath}.`,\n patch: { plugins, features },\n restartRequired: true,\n };\n}\n\nasync function removePlugin(\n spec: string,\n deps: PluginManagementDeps,\n): Promise<PluginManagementResult> {\n const existing = await readConfig(deps.configPath);\n const plugins = Array.isArray(existing.plugins)\n ? (existing.plugins as Array<string | PluginConfig>)\n : [];\n const next = plugins.filter((p) => pluginName(p) !== spec);\n if (next.length === plugins.length) {\n return errorResult(`Plugin \"${spec}\" not in config.`);\n }\n existing.plugins = next;\n await atomicWrite(deps.configPath, JSON.stringify(existing, null, 2));\n return {\n code: 0,\n level: 'info',\n message: `Removed \"${spec}\" from config.`,\n patch: { plugins: next },\n restartRequired: true,\n };\n}\n\nfunction errorResult(message: string): PluginManagementResult {\n return { code: 1, level: 'error', message };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n","import { runPluginManagementCommand } from '../../plugin-management.js';\r\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\r\n\r\nexport const pluginCmd: SubcommandHandler = async (args, deps) => {\r\n const result = await runPluginManagementCommand(args, {\r\n config: deps.config,\r\n configPath: deps.paths.globalConfig,\r\n });\r\n if (result.level === 'error') {\r\n deps.renderer.writeError(`${result.message}\\n`);\r\n } else if (result.level === 'info') {\r\n deps.renderer.writeInfo(`${result.message}\\n`);\r\n } else {\r\n deps.renderer.write(`${result.message}\\n`);\r\n }\r\n return result.code;\r\n};\r\n\r\nexport const usageCmd: SubcommandHandler = async (_args, deps) => {\r\n if (!deps.sessionStore) return 0;\r\n const list = await deps.sessionStore.list(100);\r\n let totalIn = 0;\r\n for (const s of list) totalIn += s.tokenTotal;\r\n deps.renderer.write(`Sessions: ${list.length} total tokens: ${totalIn}\\n`);\r\n return 0;\r\n};\r\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const projectsCmd: SubcommandHandler = async (_args, deps) => {\n const projectsRoot = path.join(deps.paths.globalRoot, 'projects');\n try {\n const entries = await fs.readdir(projectsRoot);\n if (entries.length === 0) {\n deps.renderer.write('No projects tracked.\\n');\n return 0;\n }\n for (const hash of entries) {\n try {\n const meta = JSON.parse(\n await fs.readFile(path.join(projectsRoot, hash, 'meta.json'), 'utf8'),\n ) as { root?: string; lastSeen?: string };\n deps.renderer.write(\n ` ${color.dim(hash)} ${color.dim(meta.lastSeen ?? '')} ${meta.root ?? '?'}\\n`,\n );\n } catch {\n deps.renderer.write(` ${color.dim(hash)} ${color.dim('(no meta)')}\\n`);\n }\n }\n return 0;\n } catch {\n deps.renderer.write('No projects directory.\\n');\n return 0;\n }\n};\n","import { type WireFamily, color } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const providersCmd: SubcommandHandler = async (args, deps) => {\n const showAll = args.includes('--all');\n const showUnsupported = args.includes('--unsupported');\n try {\n const all = await deps.modelsRegistry.listProviders();\n const byFamily: Record<WireFamily, typeof all> = {\n anthropic: [],\n openai: [],\n 'openai-compatible': [],\n google: [],\n unsupported: [],\n };\n for (const p of all) byFamily[p.family].push(p);\n const families: WireFamily[] = showUnsupported\n ? ['unsupported']\n : showAll\n ? ['anthropic', 'openai', 'google', 'openai-compatible', 'unsupported']\n : ['anthropic', 'openai', 'google', 'openai-compatible'];\n for (const family of families) {\n const list = byFamily[family];\n if (list.length === 0) continue;\n deps.renderer.write(`\\n${color.bold(family)} (${list.length}):\\n`);\n for (const p of list) {\n const envFound = p.envVars.some((v) => process.env[v]);\n const marker = envFound ? color.green('●') : color.dim('○');\n const envHint = p.envVars[0] ? color.dim(`[${p.envVars[0]}]`) : '';\n const note = family === 'unsupported' ? color.dim('(needs plugin)') : '';\n deps.renderer.write(\n ` ${marker} ${p.id.padEnd(20)} ${p.name.padEnd(28)} ${envHint} ${note}\\n`,\n );\n }\n }\n deps.renderer.write(\n `\\n${color.dim(`Current: ${deps.config.provider ?? '<unset>'} / ${deps.config.model ?? '<unset>'}. Use --all to include unsupported families.`)}\\n`,\n );\n return 0;\n } catch (err) {\n deps.renderer.writeError(\n `Failed to list providers: ${err instanceof Error ? err.message : err}`,\n );\n return 1;\n }\n};\n\nexport const modelsCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n if (sub === 'refresh') {\n deps.renderer.writeInfo('Refreshing models.dev cache…');\n try {\n const payload = await deps.modelsRegistry.refresh();\n deps.renderer.writeInfo(\n `Cached ${Object.keys(payload).length} providers to ${deps.paths.modelsCache}`,\n );\n return 0;\n } catch (err) {\n deps.renderer.writeError(`Refresh failed: ${err instanceof Error ? err.message : err}`);\n return 1;\n }\n }\n const providerId = sub ?? deps.config.provider;\n if (!providerId) {\n deps.renderer.writeError('Usage: wstack models <provider> | refresh');\n return 1;\n }\n let lookupId = providerId;\n const savedAlias = deps.config.providers?.[providerId];\n if (savedAlias?.type && savedAlias.type !== providerId) lookupId = savedAlias.type;\n const provider = await deps.modelsRegistry.getProvider(lookupId);\n if (!provider) {\n deps.renderer.writeError(\n lookupId !== providerId\n ? `Alias \"${providerId}\" points at catalog id \"${lookupId}\" which is not in the cache.`\n : `Provider \"${providerId}\" not in catalog.`,\n );\n return 1;\n }\n if (lookupId !== providerId)\n deps.renderer.write(\n color.dim(`(showing catalog models for \"${lookupId}\" via alias \"${providerId}\")\\n`),\n );\n deps.renderer.write(`${color.bold(provider.name)} ${color.dim(`(${provider.id})`)}\\n`);\n if (provider.doc) deps.renderer.write(color.dim(`Docs: ${provider.doc}\\n`));\n const userModels = deps.config.providers?.[providerId]?.models;\n const catalogById = new Map(provider.models.map((m) => [m.id, m]));\n const sorted =\n userModels && userModels.length > 0\n ? userModels.map((id) => catalogById.get(id) ?? { id, name: id })\n : [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n if (userModels && userModels.length > 0)\n deps.renderer.write(color.dim(`(${userModels.length} model(s) from your saved config)\\n`));\n for (const m of sorted) {\n const caps: string[] = [];\n if ('tool_call' in m && m.tool_call) caps.push('tools');\n if ('reasoning' in m && m.reasoning) caps.push('reasoning');\n if ('modalities' in m && m.modalities?.input?.includes('image')) caps.push('vision');\n const ctx = 'limit' in m && m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k` : '?';\n const cost =\n 'cost' in m && m.cost?.input !== undefined ? `$${m.cost.input}/$${m.cost.output ?? '?'}` : '';\n deps.renderer.write(\n ` ${m.id.padEnd(40)} ${color.dim(ctx.padStart(6))} ${color.dim(cost.padEnd(14))} ${color.dim(caps.join(','))}\\n`,\n );\n }\n const age = await deps.modelsRegistry.ageSeconds();\n deps.renderer.write(\n color.dim(\n `\\nCache age: ${isFinite(age) ? `${Math.round(age / 60)}m` : 'never fetched'}. Run \\`wstack models refresh\\` to update.\\n`,\n ),\n );\n return 0;\n};\n","export function redactKeys(obj: unknown): unknown {\n if (!obj || typeof obj !== 'object') return obj;\n if (Array.isArray(obj)) return obj.map(redactKeys);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {\n if (/api.?key|secret|token|pass/i.test(k) && typeof v === 'string' && v.length > 0)\n out[k] = '[REDACTED]';\n else out[k] = redactKeys(v);\n }\n return out;\n}\n","import { color } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\nimport { redactKeys } from './helpers.js';\n\nexport const sessionsCmd: SubcommandHandler = async (_args, deps) => {\n if (!deps.sessionStore) {\n deps.renderer.writeError('No session store available.');\n return 1;\n }\n const list = await deps.sessionStore.list(20);\n if (list.length === 0) {\n deps.renderer.write('No sessions found.\\n');\n return 0;\n }\n for (const s of list)\n deps.renderer.write(\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}\\n`,\n );\n return 0;\n};\n\nexport const configCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n if (!sub || sub === 'show') {\n deps.renderer.write(JSON.stringify(redactKeys(deps.config), null, 2) + '\\n');\n return 0;\n }\n if (sub === 'edit') {\n const editor = process.env['EDITOR'] ?? 'vi';\n deps.renderer.write(`Run: ${editor} ${deps.paths.globalConfig}\\n`);\n return 0;\n }\n deps.renderer.writeError(`Unknown config subcommand: ${sub}`);\n return 1;\n};\n","import { color } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const toolsCmd: SubcommandHandler = async (_args, deps) => {\n const reg = deps.toolRegistry;\n if (!reg) return 0;\n for (const { tool, owner } of reg.listWithOwner())\n deps.renderer.write(\n ` ${tool.name.padEnd(28)} ${color.dim(`[${owner}]`)} ${tool.permission}\\n`,\n );\n return 0;\n};\n\nexport const skillsCmd: SubcommandHandler = async (_args, deps) => {\n if (!deps.skillLoader) return 0;\n const list = await deps.skillLoader.list();\n for (const s of list)\n deps.renderer.write(\n ` ${s.name.padEnd(24)} ${color.dim(`[${s.source}]`)} ${s.description.split('\\n')[0]}\\n`,\n );\n return 0;\n};\n","import * as os from 'node:os';\r\nimport { color } from '@wrongstack/core';\r\nimport { API_VERSION, CLI_VERSION } from '../../version.js';\r\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\r\n\r\nexport const versionCmd: SubcommandHandler = async (_args, deps) => {\r\n deps.renderer.write(\r\n `WrongStack ${CLI_VERSION} (apiVersion ${API_VERSION}, node ${process.version}, ${os.platform()})\\n`,\r\n );\r\n return 0;\r\n};\r\n\r\nexport const helpCmd: SubcommandHandler = async (_args, deps) => {\r\n const lines = [\r\n color.bold('WrongStack — usage'),\r\n '',\r\n ' wstack Start REPL',\r\n ' wstack \"<task>\" Run task and exit',\r\n ' wstack resume [<id>] Resume a session',\r\n ' wstack sessions List recent sessions',\r\n ' wstack init Pick provider + model from models.dev',\r\n ' wstack auth Interactive key manager (list/add/update/delete)',\r\n ' wstack config [show|edit] Show or edit effective config',\r\n ' wstack tools List registered tools',\r\n ' wstack skills List discovered skills',\r\n ' wstack providers [--all] List providers from models.dev',\r\n ' wstack models [<provider>] List models',\r\n ' wstack models refresh Force-refresh cache',\r\n ' wstack mcp [list] List MCP servers',\r\n ' wstack plugin [list|status|official|install|add|remove|enable|disable] Manage plugins',\r\n ' wstack projects List tracked projects',\r\n ' wstack diag Full diagnostics',\r\n ' wstack doctor Health checks',\r\n ' wstack export <id> [opts] Render a session',\r\n ' wstack usage Token + cost summary',\r\n ' wstack version Print version',\r\n ];\r\n deps.renderer.write(lines.join('\\n') + '\\n');\r\n return 0;\r\n};\r\n","import type {\r\n Config,\r\n ModelsRegistry,\r\n SecretVault,\r\n SessionStore,\r\n SkillLoader,\r\n ToolRegistry,\r\n WstackPaths,\r\n} from '@wrongstack/core';\r\nimport type { ReadlineInputReader } from '../input-reader.js';\r\nimport type { TerminalRenderer } from '../renderer.js';\r\n\r\nexport type SubcommandHandler = (args: string[], deps: SubcommandDeps) => Promise<number>;\r\n\r\nexport interface SubcommandDeps {\r\n config: Config;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n sessionStore?: SessionStore;\r\n skillLoader?: SkillLoader;\r\n toolRegistry?: ToolRegistry;\r\n modelsRegistry: ModelsRegistry;\r\n paths: WstackPaths;\r\n vault: SecretVault;\r\n cwd: string;\r\n projectRoot: string;\r\n userHome: string;\r\n}\r\n\r\nimport { authCmd } from './handlers/auth.js';\r\nimport { diagCmd, doctorCmd } from './handlers/diag-doctor.js';\r\nimport { exportCmd } from './handlers/export.js';\r\nimport { initCmd } from './handlers/init.js';\r\nimport { mcpCmd } from './handlers/mcp.js';\r\nimport { pluginCmd, usageCmd } from './handlers/plugin-usage.js';\r\nimport { projectsCmd } from './handlers/projects.js';\r\nimport { modelsCmd, providersCmd } from './handlers/providers-models.js';\r\nimport { configCmd, sessionsCmd } from './handlers/sessions-config.js';\r\nimport { skillsCmd, toolsCmd } from './handlers/tools-skills.js';\r\nimport { helpCmd, versionCmd } from './handlers/version-help.js';\r\n\r\nexport const subcommands: Record<string, SubcommandHandler> = {\r\n init: initCmd,\r\n auth: authCmd,\r\n sessions: sessionsCmd,\r\n config: configCmd,\r\n tools: toolsCmd,\r\n skills: skillsCmd,\r\n providers: providersCmd,\r\n models: modelsCmd,\r\n mcp: mcpCmd,\r\n plugin: pluginCmd,\r\n plugins: pluginCmd,\r\n diag: diagCmd,\r\n doctor: doctorCmd,\r\n export: exportCmd,\r\n usage: usageCmd,\r\n version: versionCmd,\r\n help: helpCmd,\r\n projects: projectsCmd,\r\n};\r\n","/**\n * Format a token count for human-readable display.\n * 999 → \"999\"\n * 1_200 → \"1.2k\"\n * 12_000 → \"12k\"\n * 1_500_000 → \"1.5M\"\n */\nexport function 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\n/**\n * Return a new frozen config object with the given patch applied.\n * Config objects are frozen by the config loader — direct mutation\n * silently fails at runtime. This helper spreads + re-freezes safely.\n */\nexport function patchConfig<T extends object>(base: T, patch: Partial<T>): T {\n return Object.freeze({ ...base, ...patch }) as T;\n}\n\n/**\n * Human-readable duration: 999 → \"999ms\", 12_500 → \"12.5s\",\n * 160_016 → \"2m40s\", 7_200_000 → \"2h0m\". Used by `/agents` and\n * `/fleet status` so users don't have to read \"160016ms\" and do the\n * conversion in their head.\n */\nexport function fmtDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n const s = ms / 1000;\n if (s < 60) return `${s.toFixed(s < 10 ? 1 : 0)}s`;\n const m = Math.floor(s / 60);\n const remSec = Math.round(s - m * 60);\n if (m < 60) return remSec === 0 ? `${m}m` : `${m}m${remSec}s`;\n const h = Math.floor(m / 60);\n const remMin = m - h * 60;\n return `${h}h${remMin}m`;\n}\n\n/**\n * Render a completed TaskResult into a single line for `/agents` and\n * `/fleet status`. Distinguishes all four terminal statuses with\n * separate icons + colors so users can tell a timeout from a real\n * failure at a glance, and surfaces both the failure kind (e.g.\n * `provider_rate_limit`, `tool_failed`) and a truncated error tail\n * (previously dropped on the floor).\n *\n * Accepts either the structured `SubagentError` envelope (current) or\n * a legacy string error — the field shape is widened to keep older\n * callers compiling while migrations roll through.\n *\n * The caller passes the color helper (it lives in @wrongstack/core)\n * to avoid a circular import from this utility module.\n */\nexport function fmtTaskResultLine(\n r: {\n status: 'success' | 'failed' | 'timeout' | 'stopped';\n error?:\n | string\n | { kind?: string; message?: string; retryable?: boolean; backoffMs?: number };\n iterations: number;\n toolCalls: number;\n durationMs: number;\n },\n color: {\n green(s: string): string;\n red(s: string): string;\n yellow(s: string): string;\n dim(s: string): string;\n },\n): { mark: string; stats: string; tail: string } {\n const stats = `${r.iterations}it ${r.toolCalls}tc ${fmtDuration(r.durationMs)}`;\n // Error tails are unbounded provider strings — collapse whitespace and\n // truncate so a 2KB stack trace can't blow up the chat line. Lift the\n // structured `kind` chip in front of the tail so the user reads\n // `✗ failed [provider_rate_limit] — server overloaded` instead of\n // raw verbose body.\n const errMsg = typeof r.error === 'string' ? r.error : r.error?.message;\n const errKind = typeof r.error === 'object' ? r.error?.kind : undefined;\n const errTail = errMsg\n ? ` — ${errMsg.replace(/\\s+/g, ' ').slice(0, 80)}${errMsg.length > 80 ? '…' : ''}`\n : '';\n const errKindChip = errKind ? color.dim(` [${errKind}]`) : '';\n const errSnip = errMsg || errKind ? `${errKindChip}${color.dim(errTail)}` : '';\n switch (r.status) {\n case 'success':\n return { mark: color.green('✓'), stats, tail: '' };\n case 'timeout':\n return { mark: color.yellow('⏱'), stats: `${color.yellow('timeout')} ${stats}`, tail: errSnip };\n case 'stopped':\n return { mark: color.dim('⊘'), stats: `${color.dim('stopped')} ${stats}`, tail: errSnip };\n case 'failed':\n return { mark: color.red('✗'), stats: `${color.red('failed')} ${stats}`, tail: errSnip };\n }\n}\n","import { createRequire } from 'node:module';\nimport * as path from 'node:path';\n/**\n * Boot phase — everything before the DI container wiring.\n * Extracted from index.ts so main() focuses on wire → execute.\n */\nimport {\n type Config,\n DefaultLogger,\n DefaultModelsRegistry,\n DefaultSessionStore,\n DefaultSkillLoader,\n type ModelsRegistry,\n type SecretVault,\n ToolRegistry,\n type WstackPaths,\n TOKENS,\n} from '@wrongstack/core';\nimport { builtinToolsPack } from '@wrongstack/tools';\nimport { parseArgs } from './arg-parser.js';\nimport { bootConfig } from './boot-config.js';\nimport { ReadlineInputReader } from './input-reader.js';\nimport { runPicker, saveToGlobalConfig } from './picker.js';\nimport { runLaunchPrompts, runProjectCheck } from './pre-launch.js';\nimport { TerminalRenderer } from './renderer.js';\nimport { subcommands } from './subcommands/index.js';\nimport { patchConfig } from './utils.js';\nimport { createDefaultContainer } from '@wrongstack/runtime';\n\nexport interface BootContext {\n config: Config;\n vault: SecretVault;\n wpaths: WstackPaths;\n cwd: string;\n projectRoot: string;\n userHome: string;\n flags: Record<string, string | boolean>;\n positional: string[];\n modelsRegistry: ModelsRegistry;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n logger: DefaultLogger;\n}\n\nfunction resolveBundledSkillsDir(): string | undefined {\n try {\n const req = createRequire(import.meta.url);\n const corePkg = req.resolve('@wrongstack/core/package.json');\n return path.join(path.dirname(corePkg), 'skills');\n } catch {\n return undefined;\n }\n}\n\n/**\n * Boot the CLI: parse args, load config, handle subcommand dispatch\n * (early exit), run interactive prompts (project check, provider picker,\n * mode/yolo). Returns a BootContext for the wiring phase, or an exit\n * code when the run should stop here.\n */\nexport async function boot(argv: string[]): Promise<BootContext | number> {\n const { flags, positional } = parseArgs(argv);\n\n // `wstack resume <id>` is sugar for `wstack --resume <id>`.\n if (positional[0] === 'resume' && positional[1] && !subcommands['__noop_resume_marker']) {\n flags['resume'] = positional[1];\n positional.splice(0, 2);\n }\n\n let bootResult;\n try {\n bootResult = await bootConfig(flags);\n } catch (err) {\n process.stderr.write(`Config error: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 2;\n }\n const { paths, config: _config, vault } = bootResult;\n let config = _config;\n const { cwd, projectRoot, userHome, wpaths, pathResolver } = paths;\n void pathResolver; // used by callers via container binding\n\n const logger = new DefaultLogger({ level: config.log.level, file: wpaths.logFile });\n const renderer = new TerminalRenderer();\n const reader = new ReadlineInputReader({ historyFile: wpaths.historyFile });\n const modelsRegistry = new DefaultModelsRegistry({\n cacheFile: wpaths.modelsCache,\n ttlSeconds: 24 * 3600,\n });\n\n // Quick path: subcommand dispatch\n const first = positional[0];\n if (first && subcommands[first]) {\n // Create container to get the SAME skillLoader instance that the main\n // interactive CLI uses. This ensures cache invalidation after\n // /skill-install propagates correctly to /skill and other commands.\n const container = createDefaultContainer({\n config,\n wpaths,\n logger,\n modelsRegistry,\n bundledSkillsDir: config.features.skills ? resolveBundledSkillsDir() : undefined,\n });\n const sessionStore = container.resolve(TOKENS.SessionStore);\n const skillLoader = container.resolve(TOKENS.SkillLoader);\n const toolRegistryForSubcmd = new ToolRegistry();\n toolRegistryForSubcmd.registerAllOrThrow(\n [...(builtinToolsPack.tools ?? [])],\n builtinToolsPack.name,\n );\n const code = await subcommands[first]!(positional.slice(1), {\n config,\n renderer,\n reader,\n sessionStore,\n skillLoader,\n toolRegistry: toolRegistryForSubcmd,\n modelsRegistry,\n paths: wpaths,\n vault,\n cwd,\n projectRoot,\n userHome,\n });\n await reader.close();\n return code;\n }\n\n const isSingleShot = positional.length > 0 || typeof flags['prompt'] === 'string';\n const isInteractiveTTY = !!process.stdin.isTTY && !isSingleShot;\n\n if (isInteractiveTTY) {\n const cont = await runProjectCheck({ projectRoot, renderer, reader });\n if (!cont) {\n await reader.close();\n return 0;\n }\n }\n\n // Provider + model selection\n const providerFlag = typeof flags['provider'] === 'string' ? flags['provider'] : undefined;\n const modelFlag = typeof flags['model'] === 'string' ? flags['model'] : undefined;\n if (!(!!providerFlag && !!modelFlag)) {\n if (process.stdin.isTTY) {\n const picked = await runPicker({\n modelsRegistry,\n renderer,\n reader,\n config,\n defaultProvider: providerFlag ?? config.provider,\n defaultModel: modelFlag ?? config.model,\n });\n if (!picked) {\n if (!config.provider || !config.model) {\n await reader.close();\n return 2;\n }\n } else {\n const prevProvider = config.provider;\n const prevModel = config.model;\n config = patchConfig(config, { provider: picked.provider, model: picked.model });\n if (picked.provider !== prevProvider || picked.model !== prevModel) {\n const saved = await saveToGlobalConfig(\n wpaths.globalConfig,\n picked.provider,\n picked.model,\n );\n if (saved) renderer.writeInfo(`Saved ${picked.provider}/${picked.model} as default.\\n`);\n }\n }\n } else if (!config.provider || !config.model) {\n process.stderr.write(\n 'No provider or model configured. Run `wrongstack init` first, or pass --provider <id> --model <id>.\\n',\n );\n await reader.close();\n return 2;\n }\n }\n\n // Mode + YOLO prompts\n if (isInteractiveTTY) {\n let modePinned: 'tui' | 'repl' | undefined;\n if (flags['no-tui']) modePinned = 'repl';\n else if (flags['tui']) modePinned = 'tui';\n const yoloPinned: boolean | undefined = flags['yolo'] === true ? true : undefined;\n const choices = await runLaunchPrompts({ renderer, reader, modePinned, yoloPinned });\n if (choices.mode === 'tui') {\n flags['tui'] = true;\n flags['no-tui'] = false;\n } else {\n flags['tui'] = false;\n flags['no-tui'] = true;\n }\n if (choices.yolo !== config.yolo) config = patchConfig(config, { yolo: choices.yolo });\n }\n\n return {\n config,\n vault,\n wpaths,\n cwd,\n projectRoot,\n userHome,\n flags,\n positional,\n modelsRegistry,\n renderer,\n reader,\n logger,\n };\n}\n","import type { Agent, AttachmentStore, SlashCommandRegistry, TokenCounter } from '@wrongstack/core';\nimport { InputBuilder, color } from '@wrongstack/core';\nimport {\n readClipboardImage,\n routeImagesForModel,\n type VisionAdapters,\n} from '@wrongstack/runtime';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport type { TerminalRenderer } from './renderer.js';\nimport { getActiveSDDContext, trySaveSpecFromAIOutput, trySaveTasksFromAIOutput, getTaskListText, getTaskProgress, autoDetectTaskCompletion, getActiveSDDPhase, trySaveImplementationPlan } from './slash-commands/sdd.js';\nimport { theme } from './theme.js';\nimport { fmtTok } from './utils.js';\nimport { CLI_VERSION } from './version.js';\n\nexport interface ReplOptions {\n agent: Agent;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n slashRegistry: SlashCommandRegistry;\n attachments: AttachmentStore;\n banner?: boolean;\n tokenCounter?: TokenCounter;\n visionAdapters?: VisionAdapters;\n /** Autonomy mode state getter. */\n getAutonomy?: () => import('./slash-commands/autonomy.js').AutonomyMode;\n /** Model-specific max context window (tokens). Used for the context bar in turn summaries. */\n effectiveMaxContext?: number;\n /** Project / folder name shown in the banner. Usually `path.basename(projectRoot)`. */\n projectName?: string;\n /** Resolve current model vision support. Falls back to provider capability when omitted. */\n supportsVision?: () => boolean | Promise<boolean>;\n /** Skill loader for the skill generator wizard. */\n skillLoader?: import('@wrongstack/core').SkillLoader;\n}\n\nexport async function runRepl(opts: ReplOptions): Promise<number> {\n if (opts.banner !== false) printBanner(opts.renderer, opts.projectName);\n\n // Per-iteration abort controller — assigned each loop so a Ctrl+C that\n // cancels turn N doesn't leak into turn N+1. `activeCtrl` is updated\n // before each agent.run so the SIGINT handler can target it.\n let activeCtrl: AbortController | undefined;\n let interrupts = 0;\n const onSigint = () => {\n interrupts++;\n if (interrupts >= 2) {\n opts.renderer.writeWarning('Exiting.');\n process.exit(130);\n }\n if (activeCtrl) {\n activeCtrl.abort();\n opts.renderer.writeWarning('Iteration cancelled. Press Ctrl+C again to exit.');\n } else {\n opts.renderer.writeWarning('Press Ctrl+C again to exit.');\n }\n };\n process.on('SIGINT', onSigint);\n\n const builder = new InputBuilder({ store: opts.attachments });\n\n // Wrap the entire loop so SIGINT and reader teardown run on every exit\n // path — exceptions, EOF, breakouts. Previously a throw between `on`\n // and the final `off` left the listener installed across REPL restarts.\n try {\n for (;;) {\n let raw: string;\n try {\n raw = await readPossiblyMultiline(opts);\n } catch {\n break; // EOF (Ctrl+D)\n }\n const trimmed = raw.trim();\n if (!trimmed) {\n interrupts = 0;\n continue;\n }\n interrupts = 0;\n\n if (trimmed === '/image' || trimmed === '/paste-image' || raw === '\\x1bv') {\n await pasteClipboardImage(builder, opts);\n continue;\n }\n\n if (trimmed.startsWith('/')) {\n try {\n const res = await opts.slashRegistry.dispatch(trimmed, opts.agent.ctx);\n if (res?.message) opts.renderer.write(`${res.message}\\n`);\n if (res?.exit) break;\n\n // ── runText: Auto-trigger AI after slash command ─────────────────\n // When a slash command returns runText (e.g. /sdd new, /sdd approve),\n // automatically send it to the AI agent so the conversation continues\n // without the user having to type anything extra.\n if (res?.runText) {\n const runBlocks = [{ type: 'text' as const, text: res.runText }];\n const runCtrl = new AbortController();\n activeCtrl = runCtrl;\n try {\n const runResult = await opts.agent.run(runBlocks, { signal: runCtrl.signal });\n if (runResult.status === 'done' && runResult.finalText) {\n // SDD auto-detection: spec, implementation plan, tasks\n const specSaved = await trySaveSpecFromAIOutput(runResult.finalText);\n if (specSaved) {\n opts.renderer.write(\n `\\n${color.cyan(' ✓ Spec detected and saved! Use /sdd approve to continue.')}\\n`,\n );\n }\n const planSaved = trySaveImplementationPlan(runResult.finalText);\n if (planSaved) {\n opts.renderer.write(\n `\\n${color.cyan(' ✓ Implementation plan saved!')}\\n`,\n );\n }\n const tasksSaved = await trySaveTasksFromAIOutput(runResult.finalText);\n if (tasksSaved) {\n const progress = getTaskProgress();\n const count = progress?.total ?? 0;\n opts.renderer.write(\n `\\n${color.cyan(` ✓ ${count} tasks detected and saved! Use /sdd approve to execute.`)}\\n`,\n );\n }\n // Auto-detect task completion during execution phase\n const sddPhase = getActiveSDDPhase();\n if (sddPhase === 'executing') {\n const autoCompleted = autoDetectTaskCompletion(runResult.finalText);\n if (autoCompleted > 0) {\n const progress = getTaskProgress();\n if (progress) {\n opts.renderer.write(\n `\\n${color.cyan(` ✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`)}\\n`,\n );\n }\n }\n }\n }\n } catch (runErr) {\n // Non-fatal — user can continue manually\n opts.renderer.writeWarning('AI auto-trigger failed. You can continue manually.');\n }\n }\n } catch (err) {\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\n }\n continue;\n }\n\n // Route through InputBuilder so big pastes collapse to placeholders.\n const ph = await builder.appendPaste(raw);\n if (ph) {\n const lineCount = raw.split('\\n').length;\n opts.renderer.write(color.dim(` ↳ ${ph} (${lineCount} lines)\\n`));\n }\n const blocks = await builder.submit();\n\n // ── SDD Session Integration ─────────────────────────────────────────\n // When an SDD session is active, inject the session context so the AI\n // knows to ask questions, generate specs, etc.\n const sddContext = getActiveSDDContext();\n const taskList = getTaskListText();\n const taskProgress = getTaskProgress();\n const sddPhase = getActiveSDDPhase();\n\n let sddPrefix = '';\n if (sddContext) {\n sddPrefix = `[SDD SESSION ACTIVE]\\n${sddContext}`;\n if (taskList) {\n sddPrefix += `\\n\\n**Current Task List:**\\n${taskList}`;\n }\n if (taskProgress && taskProgress.total > 0) {\n sddPrefix += `\\n**Progress:** ${taskProgress.completed}/${taskProgress.total} (${taskProgress.percent}%)`;\n }\n if (sddPhase === 'executing' && taskProgress && taskProgress.percent === 100) {\n sddPrefix += '\\n\\n**All tasks completed! Provide a summary of everything implemented.**';\n }\n sddPrefix += '\\n\\n---\\nUser message:\\n';\n }\n\n const effectiveBlocks = sddPrefix\n ? [\n { type: 'text' as const, text: sddPrefix },\n ...blocks,\n ]\n : blocks;\n\n const runCtrl = new AbortController();\n activeCtrl = runCtrl;\n try {\n const startedAt = Date.now();\n const before = opts.tokenCounter?.total();\n const costBefore = opts.tokenCounter?.estimateCost().total ?? 0;\n const routed = effectiveBlocks.some((block) => block.type === 'image')\n ? await routeImagesForModel(effectiveBlocks, {\n supportsVision: opts.supportsVision\n ? await opts.supportsVision()\n : opts.agent.ctx.provider.capabilities.vision,\n adapters: opts.visionAdapters ?? [],\n ctx: opts.agent.ctx,\n signal: runCtrl.signal,\n providerId: opts.agent.ctx.provider.id,\n model: opts.agent.ctx.model,\n })\n : { blocks: effectiveBlocks, route: 'none' as const, convertedImages: 0 };\n if (routed.route === 'adapter') {\n opts.renderer.write(\n color.dim(\n ` ↳ image analyzed via ${routed.adapterName ?? 'vision adapter'} (${routed.convertedImages} image${routed.convertedImages === 1 ? '' : 's'})\\n`,\n ),\n );\n }\n const result = await opts.agent.run(routed.blocks, { signal: runCtrl.signal });\n if (result.status === 'aborted') {\n opts.renderer.writeWarning('Aborted.');\n } else if (result.status === 'failed') {\n const err = result.error;\n if (err) {\n const tag = err.recoverable ? ' (recoverable)' : '';\n opts.renderer.writeError(`Failed [${err.severity}]${tag}: ${err.describe()}`);\n } else {\n opts.renderer.writeError('Failed.');\n }\n } else if (result.status === 'max_iterations') {\n opts.renderer.writeWarning(`Hit max iterations (${result.iterations}).`);\n }\n\n // ── SDD Auto-Detection ──────────────────────────────────────────\n // When an SDD session is active, auto-detect spec and task JSON\n // in the AI output and save them to the session.\n if (result.status === 'done' && result.finalText && sddContext) {\n // Try to detect and save a spec\n const specSaved = await trySaveSpecFromAIOutput(result.finalText);\n if (specSaved) {\n opts.renderer.write(\n `\\n${color.cyan(' ✓ Spec detected and saved! Use /sdd approve to continue.')}\\n`,\n );\n }\n\n // Try to save implementation plan (text before task JSON)\n const planSaved = trySaveImplementationPlan(result.finalText);\n if (planSaved) {\n opts.renderer.write(\n `\\n${color.cyan(' ✓ Implementation plan saved!')}\\n`,\n );\n }\n\n // Try to detect and save tasks\n const tasksSaved = await trySaveTasksFromAIOutput(result.finalText);\n if (tasksSaved) {\n const progress = getTaskProgress();\n const count = progress?.total ?? 0;\n opts.renderer.write(\n `\\n${color.cyan(` ✓ ${count} tasks detected and saved! Use /sdd approve to execute.`)}\\n`,\n );\n }\n\n // Auto-detect task completion during execution phase\n const phase = getActiveSDDPhase();\n if (phase === 'executing') {\n const autoCompleted = autoDetectTaskCompletion(result.finalText);\n if (autoCompleted > 0) {\n const progress = getTaskProgress();\n if (progress) {\n opts.renderer.write(\n `\\n${color.cyan(` ✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`)}\\n`,\n );\n if (progress.percent === 100) {\n opts.renderer.write(\n `\\n${color.green(' 🎉 All tasks completed! Use /sdd cancel to end the session.')}\\n`,\n );\n }\n }\n }\n }\n }\n if (opts.tokenCounter && before) {\n const after = opts.tokenCounter.total();\n const costAfter = opts.tokenCounter.estimateCost().total;\n const ctxChip =\n opts.effectiveMaxContext && opts.effectiveMaxContext > 0\n ? ` ctx: ${renderContextChip(after.input, opts.effectiveMaxContext)}`\n : '';\n opts.renderer.write(\n `\\n${color.dim(\n `[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]${ctxChip}`,\n )}\\n`,\n );\n }\n\n // Autonomy loop: after a successful run, if autonomy is active,\n // ask the agent to suggest next steps and optionally auto-continue.\n if (result.status === 'done' && opts.getAutonomy) {\n const autonomy = opts.getAutonomy();\n if (autonomy === 'auto') {\n // Self-driving: ask the agent to continue with the next logical step.\n const nextPrompt =\n 'Based on what you just did, what is the single most important next step? ' +\n 'Just do it — execute the next logical step without asking for confirmation. ' +\n 'If there is nothing meaningful left to do, say \"DONE\" and nothing else.';\n opts.renderer.write(color.dim('\\n ↳ [autonomy] continuing…\\n'));\n const nextBlocks = [{ type: 'text' as const, text: nextPrompt }];\n const nextCtrl = new AbortController();\n activeCtrl = nextCtrl;\n try {\n const nextResult = await opts.agent.run(nextBlocks, { signal: nextCtrl.signal });\n if (nextResult.status === 'done' && nextResult.finalText?.trim() === 'DONE') {\n opts.renderer.write(color.dim('\\n ↳ [autonomy] agent reports task complete.\\n'));\n }\n // Loop continues — the for(;;) will read next input, but since\n // we're in auto mode, we need to re-trigger. We use a flag.\n if (opts.getAutonomy() === 'auto' && nextResult.status === 'done') {\n // Re-trigger: the outer loop will continue and we'll hit this\n // block again on the next iteration. But we need user input...\n // Instead, we just continue the loop with the next prompt.\n }\n } catch (err) {\n opts.renderer.writeError(\n `[autonomy] ${err instanceof Error ? err.message : String(err)}`,\n );\n } finally {\n activeCtrl = undefined;\n }\n } else if (autonomy === 'suggest') {\n // Suggest mode: ask the agent what to do next, show to user.\n const suggestPrompt =\n 'Based on what you just did, suggest 3 concrete next steps. ' +\n 'Format: numbered list, one line each, no explanation. ' +\n 'If there is nothing meaningful left, say \"No further steps needed.\"';\n const suggestBlocks = [{ type: 'text' as const, text: suggestPrompt }];\n const suggestCtrl = new AbortController();\n activeCtrl = suggestCtrl;\n try {\n const suggestResult = await opts.agent.run(suggestBlocks, { signal: suggestCtrl.signal });\n if (suggestResult.status === 'done' && suggestResult.finalText) {\n opts.renderer.write(\n `\\n${color.cyan(' Suggested next steps:')}\\n${suggestResult.finalText}\\n`,\n );\n }\n } catch {\n // Silently skip suggestion errors\n } finally {\n activeCtrl = undefined;\n }\n }\n }\n } catch (err) {\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\n } finally {\n activeCtrl = undefined;\n }\n }\n\n return 0;\n } finally {\n // Ensure listener + reader cleanup happens on every exit path: normal\n // EOF, /quit, an uncaught throw, etc. Without this, a thrown exception\n // mid-loop would leave the SIGINT handler attached for the rest of\n // the process lifetime (and the reader's terminal handle open).\n process.off('SIGINT', onSigint);\n await opts.reader.close().catch(() => {\n /* best-effort */\n });\n }\n}\n\nasync function pasteClipboardImage(builder: InputBuilder, opts: ReplOptions): Promise<void> {\n try {\n const img = await readClipboardImage();\n if (!img) {\n opts.renderer.write(color.dim(' no image on clipboard\\n'));\n return;\n }\n const placeholder = await builder.appendImage(img.base64, img.mediaType);\n const kb = (img.bytes / 1024).toFixed(0);\n opts.renderer.write(color.dim(` ↳ ${placeholder} (PNG ${kb}KB)\\n`));\n } catch (err) {\n opts.renderer.writeError(\n `Clipboard image error: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n}\n\n/**\n * Read a line, but support two multiline patterns:\n * 1. Trailing `\\` → continue on the next line (shell-style line continuation).\n * 2. A line that is exactly `\"\"\"` → start a heredoc; keep reading until\n * another bare `\"\"\"`. Useful for pasting code snippets.\n * Returns the assembled text and whether it came from a heredoc block (so\n * the caller can decide to always collapse heredocs as pastes).\n */\nasync function readPossiblyMultiline(opts: ReplOptions): Promise<string> {\n const firstPrompt = theme.primary('› ');\n const contPrompt = color.dim('· ');\n const first = await opts.reader.readLine(firstPrompt);\n\n if (first.trim() === '\"\"\"') {\n const parts: string[] = [];\n try {\n for (;;) {\n const next = await opts.reader.readLine(contPrompt);\n if (next.trim() === '\"\"\"') break;\n parts.push(next);\n }\n } catch {\n // EOF (Ctrl+D) during heredoc — user typed \"\"\" then quit.\n // Return what we have; the outer catch breaks the main loop.\n return parts.join('\\n');\n }\n return parts.join('\\n');\n }\n\n let buf = first;\n while (buf.endsWith('\\\\')) {\n buf = buf.slice(0, -1); // drop the trailing backslash\n const cont = await opts.reader.readLine(contPrompt);\n buf += '\\n' + cont;\n }\n return buf;\n}\n\nconst FILLED = '█';\nconst EMPTY = '░';\n\nfunction renderContextChip(used: number, max: number): string {\n const ratio = Math.max(0, Math.min(1, used / max));\n const pct = Math.round(ratio * 100);\n const bar = renderProgress(ratio, 6);\n return `${bar} ${pct}% (${fmtTok(used)}/${fmtTok(max)})`;\n}\n\nfunction 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 printBanner(renderer: TerminalRenderer, projectName?: string): void {\n const lines = [\n theme.primary(theme.bold('WrongStack')) + color.dim(` v${CLI_VERSION}`),\n color.dim('Built on the wrong stack. Shipped anyway.'),\n ];\n if (projectName && projectName.length > 0) {\n lines.push(color.dim('Project: ') + theme.bold(projectName));\n }\n lines.push(color.dim('Type /help for commands, /exit to quit.'), '');\n renderer.write(`${lines.join('\\n')}\\n`);\n}\n","/**\n * Execution phase — single-shot, TUI, REPL, and WebUI dispatch.\n * Extracted from index.ts so the main() function focuses on\n * boot + wiring; this file owns the three run modes and cleanup.\n */\nimport * as path from 'node:path';\nimport type {\n Agent,\n AttachmentStore,\n Config,\n Director,\n EventBus,\n ModelsRegistry,\n RecoveryLock,\n SessionWriter,\n SlashCommandRegistry,\n TokenCounter,\n} from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { ProviderConfig, ResolvedProvider, WstackPaths } from '@wrongstack/core';\nimport type { MCPRegistry } from '@wrongstack/mcp';\nimport { createToolVisionAdapters } from '@wrongstack/runtime/vision';\nimport { capabilitiesFor } from '@wrongstack/providers';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport type { TerminalRenderer } from './renderer.js';\nimport { runRepl } from './repl.js';\nimport type { SessionStats } from './session-stats.js';\nimport { fmtTok } from './utils.js';\nimport { CLI_VERSION } from './version.js';\n\nexport interface ExecutionDeps {\n agent: Agent;\n events: EventBus;\n slashRegistry: SlashCommandRegistry;\n attachments: AttachmentStore;\n tokenCounter: TokenCounter;\n config: Config;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n session: SessionWriter;\n mcpRegistry: MCPRegistry;\n recoveryLock: RecoveryLock;\n wpaths: WstackPaths;\n modelsRegistry: ModelsRegistry;\n projectRoot: string;\n flags: Record<string, string | boolean>;\n positional: string[];\n effectiveMaxContext: number;\n queueStore: import('@wrongstack/core').QueueStore;\n context: import('@wrongstack/core').Context;\n stats: SessionStats;\n detachTodosCheckpoint?: () => void | Promise<void>;\n savedProviderCfg: ProviderConfig | undefined;\n resolvedProvider: ResolvedProvider | undefined;\n getPickableProviders: () => Promise<Array<{ id: string; family: string; models: string[] }>>;\n switchProviderAndModel: (providerId: string, modelId: string) => string | null;\n /** Live director instance for the TUI fleet panel. Null when director mode is off. */\n director: Director | null;\n /** Fleet roster for human-readable subagent names. */\n fleetRoster?: Record<string, { name: string }>;\n /**\n * Shared controller object for the `/fleet stream on|off` toggle. The\n * TUI installs a dispatch-backed setter on mount; the slash command\n * reads/writes via this object so both surfaces stay synchronized.\n */\n fleetStreamController?: {\n enabled: boolean;\n setEnabled: (enabled: boolean) => void;\n };\n /** Query the live YOLO state from the permission policy. */\n getYolo?: () => boolean;\n /** Query the live autonomy mode. */\n getAutonomy?: () => import('./slash-commands/autonomy.js').AutonomyMode;\n /** Skill loader for the skill generator wizard. */\n skillLoader?: import('@wrongstack/core').SkillLoader;\n}\n\nexport async function execute(deps: ExecutionDeps): Promise<number> {\n const {\n agent,\n events,\n slashRegistry,\n attachments,\n tokenCounter,\n config,\n renderer,\n reader,\n session,\n mcpRegistry,\n recoveryLock,\n wpaths,\n modelsRegistry,\n projectRoot,\n flags,\n positional,\n effectiveMaxContext,\n queueStore,\n context,\n stats,\n detachTodosCheckpoint,\n savedProviderCfg,\n resolvedProvider,\n getPickableProviders,\n switchProviderAndModel,\n director,\n fleetRoster,\n fleetStreamController,\n getYolo,\n getAutonomy,\n skillLoader,\n } = deps;\n\n let code = 0;\n try {\n const visionAdapters = () => createToolVisionAdapters(agent.tools);\n const supportsVision = async (): Promise<boolean> => {\n try {\n const caps = await capabilitiesFor(modelsRegistry, context.provider.id, context.model);\n return caps.vision;\n } catch {\n return context.provider.capabilities.vision;\n }\n };\n // --prompt flag takes precedence: treat it like a positional query\n const promptFlag = typeof flags['prompt'] === 'string' ? flags['prompt'] : undefined;\n if (promptFlag) {\n positional.unshift(promptFlag);\n }\n // --goal / --ask boot directly into the TUI in goal/ask mode. The TUI is\n // the only surface with the steering + fleet panel + Esc-redirect wiring\n // that goal mode depends on, so if the user passed a goal but forgot\n // --tui, we flip --tui on for them. Single-shot positional invocation\n // still wins: `wstack --goal X \"literal prompt\"` runs the positional as\n // a normal single-shot (positional is non-empty), which is consistent\n // with --prompt's existing semantics.\n const goalFlag = typeof flags['goal'] === 'string' ? flags['goal'] : undefined;\n const askFlag = typeof flags['ask'] === 'string' ? flags['ask'] : undefined;\n if ((goalFlag || askFlag) && positional.length === 0 && !promptFlag) {\n flags.tui = true;\n }\n if (positional.length > 0 || promptFlag) {\n const query = positional.join(' ');\n const ctrl = new AbortController();\n const onSigint = () => ctrl.abort();\n process.on('SIGINT', onSigint);\n const startedAt = Date.now();\n const before = tokenCounter.total();\n const costBefore = tokenCounter.estimateCost().total;\n let result: import('@wrongstack/core').RunResult;\n try {\n result = await agent.run(query, { signal: ctrl.signal });\n } finally {\n process.off('SIGINT', onSigint);\n }\n const after = tokenCounter.total();\n const costAfter = tokenCounter.estimateCost().total;\n const usage = {\n input: after.input - before.input,\n output: after.output - before.output,\n iterations: result.iterations,\n cost: costAfter - costBefore,\n elapsedMs: Date.now() - startedAt,\n };\n if (flags['output-json']) {\n const json = JSON.stringify({\n status: result.status,\n finalText: result.finalText ?? null,\n error: result.error\n ? {\n code: result.error.code,\n subsystem: result.error.subsystem,\n severity: result.error.severity,\n recoverable: result.error.recoverable,\n message: result.error.message,\n context: result.error.context ?? null,\n }\n : null,\n usage,\n });\n process.stdout.write(json + '\\n');\n } else {\n if (result.status === 'failed') {\n code = 1;\n const err = result.error;\n if (err) {\n const tag = err.recoverable ? ' (recoverable)' : '';\n renderer.writeError(`Failed [${err.severity}]${tag}: ${err.describe()}`);\n } else {\n renderer.writeError('Failed.');\n }\n } else if (result.status === 'aborted') {\n code = 130;\n renderer.writeWarning('Aborted.');\n } else if (result.status === 'max_iterations') {\n code = 1;\n renderer.writeWarning(`Hit max iterations (${result.iterations}).`);\n }\n if (result.finalText) renderer.write('\\n' + result.finalText + '\\n');\n renderer.write(\n '\\n' +\n color.dim(\n `[in: ${fmtTok(usage.input)} out: ${fmtTok(usage.output)} iters: ${usage.iterations} cost: ${usage.cost.toFixed(4)} ${(usage.elapsedMs / 1000).toFixed(1)}s]`,\n ) +\n '\\n',\n );\n }\n } else if (flags.tui && !flags['no-tui']) {\n // Switch from inline CLI prompts to event-driven confirmation.\n // Without this, the permission prompt writes to stdout and blocks\n // on stdin — both owned by Ink — making the prompt invisible and\n // the input deadlocked. After this call, tool.confirm_needed events\n // fire instead, which the TUI's ConfirmPrompt component handles.\n agent.disableInteractiveConfirmation();\n const { runTui } = await import('@wrongstack/tui');\n renderer.setSilent(true);\n const banneredFamily = savedProviderCfg?.family ?? resolvedProvider?.family;\n const banneredKey =\n savedProviderCfg?.apiKey ??\n config.apiKey ??\n (resolvedProvider?.envVars ?? savedProviderCfg?.envVars ?? [])\n .map((v) => process.env[v])\n .find((v): v is string => !!v);\n const banneredKeyTail =\n banneredKey && banneredKey.length >= 3 ? banneredKey.slice(-3) : undefined;\n try {\n code = await runTui({\n agent,\n events,\n slashRegistry,\n attachments,\n tokenCounter,\n visionAdapters,\n supportsVision,\n model: context.model,\n banner: !flags['no-banner'],\n queueStore,\n yolo: !!config.yolo,\n getYolo,\n appVersion: CLI_VERSION,\n provider: config.provider,\n family: banneredFamily,\n keyTail: banneredKeyTail,\n getPickableProviders,\n switchProviderAndModel,\n effectiveMaxContext,\n // Default OFF so the terminal's native scrollback works for chat\n // history out of the box (mouse wheel / Shift+PgUp). Users who hit\n // resize/overlay-leak artifacts can opt back into alt-screen with\n // `--alt-screen` or `/altscreen on`. `--no-alt-screen` still wins\n // when both are passed.\n altScreen: flags['alt-screen'] === true && flags['no-alt-screen'] !== true,\n director,\n fleetRoster,\n onAfterExit: () => {\n process.stdout.write(\n color.dim(`Session saved: ${session.id} — resume with `) +\n color.cyan(`wstack resume ${session.id}`) +\n '\\n',\n );\n },\n onClearHistory: (dispatch) => {\n dispatch({ type: 'clearHistory' });\n dispatch({ type: 'resetContextChip' });\n },\n fleetStreamController,\n initialGoal: goalFlag,\n initialAsk: askFlag,\n getSDDContext: () => {\n const { getActiveSDDContext } = require('./slash-commands/sdd.js');\n return getActiveSDDContext();\n },\n onSDDOutput: async (output: string) => {\n const { trySaveSpecFromAIOutput, trySaveImplementationPlan, trySaveTasksFromAIOutput, autoDetectTaskCompletion, getTaskProgress, getActiveSDDPhase } = require('./slash-commands/sdd.js');\n const messages: string[] = [];\n const specSaved = await trySaveSpecFromAIOutput(output);\n if (specSaved) messages.push('✓ Spec detected and saved! Use /sdd approve to continue.');\n const planSaved = trySaveImplementationPlan(output);\n if (planSaved) messages.push('✓ Implementation plan saved!');\n const tasksSaved = await trySaveTasksFromAIOutput(output);\n if (tasksSaved) {\n const progress = getTaskProgress();\n const count = progress?.total ?? 0;\n messages.push(`✓ ${count} tasks detected and saved! Use /sdd approve to execute.`);\n }\n const sddPhase = getActiveSDDPhase();\n if (sddPhase === 'executing') {\n const autoCompleted = autoDetectTaskCompletion(output);\n if (autoCompleted > 0) {\n const progress = getTaskProgress();\n if (progress) {\n messages.push(`✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`);\n }\n }\n }\n return messages;\n },\n });\n } finally {\n renderer.setSilent(false);\n }\n } else if (flags.webui) {\n const { runWebUI } = await import('./webui-server.js');\n const webuiPromise = runWebUI({\n agent,\n events,\n session,\n port: Number.parseInt(String(flags.port ?? '3457'), 10),\n modelsRegistry,\n globalConfigPath: wpaths.globalConfig,\n });\n try {\n code = await runRepl({\n agent,\n renderer,\n reader,\n slashRegistry,\n tokenCounter,\n visionAdapters,\n supportsVision,\n attachments,\n effectiveMaxContext,\n projectName: path.basename(projectRoot) || undefined,\n getAutonomy,\n skillLoader,\n });\n } finally {\n // webuiPromise must be awaited regardless of whether runRepl threw,\n // so the HTTP/WS server can shut down cleanly.\n await webuiPromise.catch(() => undefined);\n }\n } else {\n code = await runRepl({\n agent,\n renderer,\n reader,\n slashRegistry,\n tokenCounter,\n visionAdapters,\n supportsVision,\n attachments,\n effectiveMaxContext,\n projectName: path.basename(projectRoot) || undefined,\n getAutonomy,\n skillLoader,\n });\n }\n } finally {\n // stats.render is synchronous but can throw — isolate it so cleanup\n // always runs regardless.\n try { stats.render(renderer); } catch (err) { /* best-effort */ }\n await Promise.resolve(detachTodosCheckpoint?.()).catch(() => undefined);\n await mcpRegistry.stopAll();\n await session.append({\n type: 'session_end',\n ts: new Date().toISOString(),\n usage: tokenCounter.total(),\n });\n await session.close();\n await recoveryLock.clear().catch(() => undefined);\n await reader.close();\n }\n return code;\n}\n","/**\r\n * L1-E: Multi-agent CLI integration. The coordinator + per-task agent\r\n * factory is created lazily on the first `/spawn` so users who never use\r\n * subagents don't pay the construction cost.\r\n */\r\nimport { randomUUID } from 'node:crypto';\r\nimport * as path from 'node:path';\r\nimport {\r\n Agent,\r\n AutoApprovePermissionPolicy,\r\n type Config,\r\n type ConfigStore,\r\n type Container,\r\n Context,\r\n DefaultMultiAgentCoordinator,\r\n Director,\r\n type DirectorSessionFactory,\r\n EventBus,\r\n type MultiAgentCoordinator,\r\n type Provider,\r\n type ProviderRegistry,\r\n type SessionWriter,\r\n type SystemPromptBuilder,\r\n TOKENS,\r\n type TaskResult,\r\n type TokenCounter,\r\n type Tool,\r\n type ToolRegistry,\r\n createDefaultPipelines,\r\n makeAgentSubagentRunner,\r\n makeDirectorSessionFactory,\r\n} from '@wrongstack/core';\r\nimport type { TextBlock } from '@wrongstack/core';\r\nimport { makeProviderFromConfig } from '@wrongstack/providers';\r\n\r\nexport interface MultiAgentDeps {\r\n container: Container;\r\n toolRegistry: ToolRegistry;\r\n providerRegistry: ProviderRegistry;\r\n configStore: ConfigStore;\r\n events: EventBus;\r\n systemPromptBuilder: SystemPromptBuilder;\r\n session: SessionWriter;\r\n tokenCounter: TokenCounter;\r\n projectRoot: string;\r\n cwd: string;\r\n}\r\n\r\n/**\r\n * Per-session options that flip the orchestration mode. Director mode\r\n * routes lifecycle through a `Director`, which unlocks manifest writing\r\n * and (later) FleetBus observability — at the cost of building a slightly\r\n * heavier wrapper around the same coordinator. Default mode is the plain\r\n * coordinator path that existing `/spawn` users already rely on.\r\n */\r\nexport interface MultiAgentHostOptions {\r\n /**\r\n * Enable Director-backed orchestration. The host still exposes the same\r\n * `spawn` / `status` / `usage` / `kill` API; under the hood, calls flow\r\n * through a `Director` so manifest writing works and the FleetBus is\r\n * available for future observability hooks.\r\n */\r\n directorMode?: boolean;\r\n /**\r\n * Absolute file path the director writes its fleet manifest to on\r\n * shutdown (and on-demand via `manifest()`). Only meaningful when\r\n * `directorMode` is true; ignored otherwise.\r\n */\r\n manifestPath?: string;\r\n /**\r\n * Absolute path to the fleet's shared scratchpad directory. When set,\r\n * subagent system prompts are augmented with a \"Shared notes\" block\r\n * pointing here so agents can pass conclusions through the filesystem\r\n * without going through the bridge. Directory is created on first\r\n * spawn. Only meaningful in director mode.\r\n */\r\n sharedScratchpadPath?: string;\r\n /**\r\n * Absolute path to the directory under which per-subagent JSONL\r\n * transcripts land — typically `<projectSessions>/<sessionId>/subagents/`.\r\n * When set, the host builds a `DirectorSessionFactory` rooted there and\r\n * each spawned subagent gets its own session writer (instead of sharing\r\n * the parent session). Director mode only.\r\n */\r\n sessionsRoot?: string;\r\n /**\r\n * Director run id for namespacing per-subagent JSONLs. Defaults to the\r\n * coordinator id when omitted. Pass an explicit id when resuming from a\r\n * prior fleet manifest.\r\n */\r\n directorRunId?: string;\r\n /**\r\n * Base directory for fleet artifacts (manifest, shared scratchpad,\r\n * subagent sessions). When set and director mode is promoted at runtime\r\n * (via /director), paths are derived as:\r\n * <fleetRoot>/fleet.json (manifest)\r\n * <fleetRoot>/shared/ (scratchpad)\r\n * <fleetRoot>/subagents/ (per-subagent JSONL)\r\n */\r\n fleetRoot?: string;\r\n /**\r\n * Absolute path the director writes its live state checkpoint to. Distinct\r\n * from `manifestPath` (final record) — the checkpoint mirrors pending /\r\n * running / completed tasks on every mutation so `wstack resume` can show\r\n * a \"you had N tasks in flight\" banner after a crash. Only meaningful in\r\n * director mode.\r\n */\r\n stateCheckpointPath?: string;\r\n /**\r\n * Session writer the director forwards task lifecycle events to\r\n * (agent_spawned, task_created, task_completed, task_failed). The CLI\r\n * passes the same writer the host Agent uses so all events land in one\r\n * JSONL. Optional — when omitted, those events stay in-memory.\r\n */\r\n sessionWriter?: import('@wrongstack/core').SessionWriter;\r\n}\r\n\r\n/**\r\n * Lazy holder — created on first /spawn call, reused across the session\r\n * so /agents can list everyone running.\r\n */\r\nexport class MultiAgentHost {\r\n private coordinator?: MultiAgentCoordinator;\r\n /** Lazily built when `opts.directorMode` is set. Owns its own internal\r\n * coordinator; the host's `coordinator` field still points at it so\r\n * the rest of the methods don't need to branch. */\r\n private director?: Director;\r\n /** Lazily built alongside the director — produces per-subagent JSONL\r\n * writers under `<sessionsRoot>/<runId>/`. Null in non-director mode. */\r\n private sessionFactory?: DirectorSessionFactory;\r\n private readonly pending = new Map<string, { description: string; subagentId: string }>();\r\n private readonly results: TaskResult[] = [];\r\n private readonly opts: MultiAgentHostOptions;\r\n /**\r\n * Populated by `promoteToDirector` when it refuses to promote (typically\r\n * because a non-director coordinator is already running). The delegate\r\n * tool reads this through `getPromotionBlockReason` to render an\r\n * actionable error instead of a generic \"could not activate director\".\r\n */\r\n private promotionBlockReason: string | null = null;\r\n\r\n constructor(\r\n private readonly deps: MultiAgentDeps,\r\n opts: MultiAgentHostOptions = {},\r\n ) {\r\n this.opts = opts;\r\n }\r\n\r\n /**\r\n * Force the lazy build path to run *now* and return the live Director,\r\n * or null when director mode is off. Used by the CLI to register the\r\n * fleet's LLM-callable orchestration tools (spawn_subagent,\r\n * assign_task, await_tasks, ask_subagent, roll_up, terminate_subagent,\r\n * fleet_status, fleet_usage) into the leader's ToolRegistry before the\r\n * agent starts — without this, the leader literally cannot see the\r\n * orchestration tools and `--director` becomes a no-op.\r\n */\r\n async ensureDirector(): Promise<Director | null> {\r\n if (!this.opts.directorMode) return null;\r\n await this.ensureCoordinator();\r\n return this.director ?? null;\r\n }\r\n\r\n private async ensureCoordinator(): Promise<MultiAgentCoordinator> {\r\n if (this.coordinator) return this.coordinator;\r\n const config: Config = this.deps.configStore.get() as Config;\r\n\r\n // Build the per-subagent session factory when both director mode and\r\n // a sessions root are configured.\r\n if (this.opts.directorMode && this.opts.sessionsRoot && !this.sessionFactory) {\r\n this.sessionFactory = makeDirectorSessionFactory({\r\n sessionsRoot: this.opts.sessionsRoot,\r\n directorRunId: this.opts.directorRunId,\r\n });\r\n }\r\n\r\n // Phase 1: Build coordinator/Director WITHOUT a runner. The runner\r\n // needs FleetBus which only exists after the Director is created.\r\n //\r\n // Default budget intentionally generous (4 hours / 200 iter / 1000 tools)\r\n // so a subagent doesn't get cut off mid-audit just because nobody\r\n // remembered to override the budget. Per-call overrides ride in\r\n // through `delegate({ timeoutMs, maxIterations, maxToolCalls })` or\r\n // `spawn_subagent({ maxIterations, ... })`. If a worker truly hangs,\r\n // the user can ctrl+C or `/fleet kill <id>` — that's a better\r\n // failure mode than \"fleet looked busy, finished nothing\".\r\n const coordinatorConfig = {\r\n coordinatorId: randomUUID(),\r\n doneCondition: { type: 'all_tasks_done' as const },\r\n maxConcurrent: 8,\r\n // No defaultBudget. Caps land on a subagent ONLY when the\r\n // orchestrator (delegate-tool / spawn_subagent) or the user\r\n // (CLI flag) sets them explicitly. The prior defaults\r\n // (1000 tools / 200 iter / 4h) silently killed long autonomous\r\n // runs; for a \"work until done\" director we want no implicit\r\n // ceilings. The orchestrator can still cap a single subagent\r\n // by passing maxToolCalls/maxIterations through the spawn tool.\r\n };\r\n\r\n if (this.opts.directorMode) {\r\n this.director = new Director({\r\n config: coordinatorConfig,\r\n manifestPath: this.opts.manifestPath,\r\n sharedScratchpadPath: this.opts.sharedScratchpadPath,\r\n stateCheckpointPath: this.opts.stateCheckpointPath,\r\n sessionWriter: this.opts.sessionWriter,\r\n // Autonomy: allow nested directors a few levels deep. Default\r\n // is 2 (root + one tier of workers), which trips the moment a\r\n // worker tries to recurse into \"let me delegate the parser\r\n // analysis to a tighter specialist\". 5 lets the director\r\n // structure work as deeply as the task requires without us\r\n // having to pass a flag every time.\r\n maxSpawnDepth: 5,\r\n });\r\n this.director.on('task.completed', ({ task, result }) => {\r\n this.results.push(result);\r\n this.pending.delete(task.id);\r\n this.emitLifecycleCompleted(task.id, result);\r\n });\r\n // Relay budget pressure events so the TUI can show real-time feedback.\r\n // \"⚡ agent#audit-log hitting tool_call limit (350/400) — extending...\"\r\n this.director.fleet.filter('budget.threshold_reached', (e) => {\r\n const payload = e.payload as {\r\n kind: string;\r\n used: number;\r\n limit: number;\r\n };\r\n this.deps.events.emit('subagent.budget_warning', {\r\n subagentId: e.subagentId,\r\n kind: payload.kind,\r\n used: payload.used,\r\n limit: payload.limit,\r\n });\r\n });\r\n this.coordinator = (\r\n this.director as unknown as { coordinator: MultiAgentCoordinator }\r\n ).coordinator;\r\n } else {\r\n this.coordinator = new DefaultMultiAgentCoordinator(coordinatorConfig, {});\r\n (this.coordinator as unknown as { on: Function }).on(\r\n 'task.completed',\r\n ({ task, result }: { task: { id: string }; result: TaskResult }) => {\r\n this.results.push(result);\r\n this.pending.delete(task.id);\r\n this.emitLifecycleCompleted(task.id, result);\r\n },\r\n );\r\n }\r\n // Coordinator's `task.assigned` fires once per dispatch — relay it\r\n // as a `subagent.task_started` so UIs can show \"▶ AGENT#N started\r\n // <description>\" the instant work begins. The director path uses\r\n // the same underlying coordinator so a single subscription covers\r\n // both modes (director just wraps it without intercepting this\r\n // event).\r\n (this.coordinator as unknown as { on: Function }).on(\r\n 'task.assigned',\r\n ({ task, subagentId }: { task: { id: string; description?: string }; subagentId: string }) => {\r\n this.deps.events.emit('subagent.task_started', {\r\n subagentId,\r\n taskId: task.id,\r\n description: task.description,\r\n });\r\n },\r\n );\r\n\r\n // Phase 2: Build the runner — FleetBus is now available via\r\n // this.director?.fleet (set in Phase 1 for director mode).\r\n const runner = this.buildSubagentRunner(config);\r\n\r\n // Phase 3: Inject the runner into the coordinator.\r\n const innerCoord: DefaultMultiAgentCoordinator = this.opts.directorMode\r\n ? (this.director as unknown as { coordinator: DefaultMultiAgentCoordinator }).coordinator\r\n : (this.coordinator as DefaultMultiAgentCoordinator);\r\n innerCoord.setRunner(runner);\r\n\r\n return this.coordinator;\r\n }\r\n\r\n /**\r\n * Build the per-subagent runner: agent factory → runner. Extracted so\r\n * ensureCoordinator stays focused on orchestration setup.\r\n */\r\n private buildSubagentRunner(config: Config): ReturnType<typeof makeAgentSubagentRunner> {\r\n const factory = async (subCfg: {\r\n id?: string;\r\n name?: string;\r\n model?: string;\r\n provider?: string;\r\n tools?: string[];\r\n }) => {\r\n const events = new EventBus();\r\n const provider = await this.buildSubagentProvider(config, subCfg.provider);\r\n\r\n const baseSystem: TextBlock[] = await this.deps.systemPromptBuilder.build({\r\n cwd: this.deps.cwd,\r\n projectRoot: this.deps.projectRoot,\r\n tools: this.filterTools(subCfg.tools),\r\n model: subCfg.model ?? config.model,\r\n provider: subCfg.provider ?? config.provider,\r\n // Tell the builder this is a subagent build — skips the host's\r\n // plan injection so each subagent gets a clean, task-scoped\r\n // prompt instead of inheriting strategic context that's\r\n // meaningless to a single delegated subtask.\r\n subagent: true,\r\n });\r\n\r\n let subSession: SessionWriter;\r\n if (this.sessionFactory) {\r\n const subagentName = subCfg.id ?? subCfg.name ?? `sub_${randomUUID().slice(0, 8)}`;\r\n subSession = await this.sessionFactory.createSubagentSession({\r\n subagentId: subagentName,\r\n provider: subCfg.provider ?? config.provider,\r\n model: subCfg.model ?? config.model,\r\n title: `subagent: ${subagentName}`,\r\n });\r\n } else {\r\n const parentSession = this.deps.session;\r\n subSession = {\r\n id: parentSession.id,\r\n append: (ev) => parentSession.append({ ...ev }),\r\n } as SessionWriter;\r\n }\r\n\r\n const ctx = new Context({\r\n systemPrompt: baseSystem,\r\n provider,\r\n session: subSession,\r\n signal: new AbortController().signal,\r\n tokenCounter: this.deps.tokenCounter,\r\n cwd: this.deps.cwd,\r\n projectRoot: this.deps.projectRoot,\r\n model: subCfg.model ?? config.model,\r\n tools: this.filterTools(subCfg.tools),\r\n });\r\n\r\n const agent = new Agent({\r\n container: this.deps.container,\r\n tools: this.subagentToolRegistry(subCfg.tools),\r\n providers: this.deps.providerRegistry,\r\n events,\r\n pipelines: createDefaultPipelines(),\r\n context: ctx,\r\n // Subagents cannot answer interactive permission prompts — they\r\n // run under a director, not the user. Auto-approve everything\r\n // (except tool-level hard denies); the user already authorized\r\n // the work when they invoked the leader.\r\n permissionPolicy: new AutoApprovePermissionPolicy(),\r\n });\r\n\r\n // Close the per-subagent JSONL writer when the task ends. Without\r\n // this each completed task leaks one open file descriptor; over a\r\n // long fleet run (1000+ tasks) the process eventually hits the OS\r\n // limit. We only close writers we created via `sessionFactory` —\r\n // the fallback path forwards into the parent's session, which the\r\n // host owns and must not close here. The shim writer in the\r\n // fallback branch has no `close()`, so the null-guard handles\r\n // both cases.\r\n // Bridge per-subagent tool.executed to the host EventBus so the\r\n // TUI can update its compact live agent surfaces regardless of\r\n // director mode. The FleetBus path (director-only) covers the\r\n // richer FleetPanel stream; this bridge gives baseline visibility\r\n // for plain /spawn without forcing tool calls into chat history.\r\n // Capture the subagentId from the caller-supplied config — the\r\n // factory itself doesn't know the id until spawn() assigns one,\r\n // but director.spawn/coord.spawn both pass it back via subCfg.id\r\n // when in director mode; in legacy non-director mode the id is\r\n // discovered post-spawn, so we wire the bridge lazily with a\r\n // mutable holder and let the legacy emit path fill it.\r\n const hostEvents = this.deps.events;\r\n const offToolBridge = events.on('tool.executed', (e) => {\r\n // subCfg.id is populated by Director.spawn before this factory\r\n // is invoked, and by coord.spawn for the non-director path\r\n // (the runner re-uses the same config object). When it's\r\n // missing we still emit with a fallback so the bridge never\r\n // drops events — observability is more useful than perfect\r\n // attribution in that edge case.\r\n hostEvents.emit('subagent.tool_executed', {\r\n subagentId: subCfg.id ?? subCfg.name ?? 'subagent',\r\n name: e.name,\r\n durationMs: e.durationMs,\r\n ok: e.ok,\r\n input: e.input,\r\n outputBytes: e.outputBytes,\r\n });\r\n });\r\n\r\n const dispose = async () => {\r\n offToolBridge();\r\n try {\r\n await subSession.close?.();\r\n } catch {\r\n // see runner-side comment — cleanup must not mask the result\r\n }\r\n };\r\n\r\n return { agent, events, dispose };\r\n };\r\n\r\n return makeAgentSubagentRunner({ factory, fleetBus: this.director?.fleet });\r\n }\r\n\r\n /**\r\n * Build a Provider for a subagent. When `overrideId` is supplied (from\r\n * `SubagentConfig.provider`), looks that provider up in\r\n * `config.providers` and constructs it with its own apiKey/baseUrl.\r\n * Falls back to the leader's provider when `overrideId` is absent or\r\n * not configured (so a typo doesn't crash the whole run — we just\r\n * use the leader and the calling code can decide to error later).\r\n */\r\n private async buildSubagentProvider(config: Config, overrideId?: string): Promise<Provider> {\r\n const providerId = overrideId && config.providers?.[overrideId] ? overrideId : config.provider;\r\n const newCfg = config.providers?.[providerId] ?? {\r\n type: providerId,\r\n apiKey: config.apiKey,\r\n baseUrl: config.baseUrl,\r\n };\r\n return makeProviderFromConfig(providerId, {\r\n ...newCfg,\r\n type: providerId,\r\n });\r\n }\r\n\r\n /** Returns a tool slice for the subagent — full set unless restricted. */\r\n private filterTools(allow?: string[]): Tool[] {\r\n const all = this.deps.toolRegistry.list();\r\n if (!allow || allow.length === 0) return all;\r\n const allowSet = new Set(allow);\r\n return all.filter((t) => allowSet.has(t.name));\r\n }\r\n\r\n private subagentToolRegistry(allow?: string[]): ToolRegistry {\r\n if (!allow || allow.length === 0) return this.deps.toolRegistry;\r\n // Build a filtered registry by cloning entries.\r\n const cloneCtor = this.deps.toolRegistry.constructor as new () => ToolRegistry;\r\n const sub = new cloneCtor();\r\n for (const t of this.filterTools(allow)) sub.register(t);\r\n return sub;\r\n }\r\n\r\n /**\r\n * Spawn a fresh subagent and assign a single task. Returns task id.\r\n *\r\n * Optional `opts` lets the caller (a `/spawn` slash command or the\r\n * future director surface) override the subagent's provider, model,\r\n * and tool slice on a per-spawn basis. Without options, the legacy\r\n * behavior holds: the subagent uses the leader's provider/model and\r\n * the full tool registry.\r\n */\r\n async spawn(\r\n description: string,\r\n opts?: { provider?: string; model?: string; tools?: string[]; name?: string },\r\n ): Promise<{ subagentId: string; taskId: string }> {\r\n await this.ensureCoordinator();\r\n // No implicit budget caps. The orchestrator (when it spawns\r\n // through delegate / spawn_subagent) passes budgets sized to the\r\n // task; the human-driven /spawn entrypoint defaults to \"run\r\n // until the work is done\", because the human is right here and\r\n // can interrupt with Esc / /steer / Ctrl+C. Setting maxToolCalls=20\r\n // here would kill any non-trivial audit at iteration 21.\r\n const subagentConfig = {\r\n name: opts?.name ?? 'adhoc',\r\n role: 'general',\r\n provider: opts?.provider,\r\n model: opts?.model,\r\n tools: opts?.tools,\r\n };\r\n // Pre-compute the transcript path before any spawn so the very first\r\n // `subagent.spawned` event the TUI / observability layer sees already\r\n // carries it. The factory uses the same naming rule\r\n // (`name ?? id ?? sub_<random>`); for the legacy `/spawn` path the\r\n // name is always set, so the path is deterministic.\r\n const transcriptPath = this.sessionFactory\r\n ? path.join(this.sessionFactory.dir, `${subagentConfig.name}.jsonl`)\r\n : undefined;\r\n\r\n // In director mode we route through `Director.spawn` / `Director.assign`\r\n // so the director's manifest entries get populated. Calling the\r\n // underlying coordinator directly would still execute the task, but\r\n // the manifest would be empty — that surprised the first test.\r\n if (this.director) {\r\n const subagentId = await this.director.spawn(subagentConfig);\r\n const taskId = randomUUID();\r\n this.pending.set(taskId, { description, subagentId });\r\n this.deps.events.emit('subagent.spawned', {\r\n subagentId,\r\n taskId,\r\n name: subagentConfig.name,\r\n provider: opts?.provider,\r\n model: opts?.model,\r\n description,\r\n transcriptPath,\r\n });\r\n await this.director.assign({\r\n id: taskId,\r\n description,\r\n subagentId,\r\n // No maxToolCalls — same reasoning as the spawn config above.\r\n // The director / orchestrator owns the budget decision.\r\n });\r\n return { subagentId, taskId };\r\n }\r\n const coord = this.coordinator!;\r\n const spawned = await coord.spawn(subagentConfig);\r\n const taskId = randomUUID();\r\n this.pending.set(taskId, { description, subagentId: spawned.subagentId });\r\n this.deps.events.emit('subagent.spawned', {\r\n subagentId: spawned.subagentId,\r\n taskId,\r\n name: subagentConfig.name,\r\n provider: opts?.provider,\r\n model: opts?.model,\r\n description,\r\n transcriptPath,\r\n });\r\n await coord.assign({\r\n id: taskId,\r\n description,\r\n subagentId: spawned.subagentId,\r\n // No maxToolCalls — see comment on the director branch above.\r\n });\r\n return { subagentId: spawned.subagentId, taskId };\r\n }\r\n\r\n /**\r\n * Relay a `task.completed` notification (from either the Director or\r\n * the raw coordinator) to the EventBus so non-director TUIs and any\r\n * other observer can react. We forward the full result shape rather\r\n * than mutating the existing `task.completed` schema — coordination\r\n * code already binds to that event, and adding subscribers there\r\n * would change ordering semantics for those listeners.\r\n */\r\n private emitLifecycleCompleted(taskId: string, result: TaskResult): void {\r\n this.deps.events.emit('subagent.task_completed', {\r\n subagentId: result.subagentId,\r\n taskId,\r\n status: result.status,\r\n iterations: result.iterations,\r\n toolCalls: result.toolCalls,\r\n durationMs: result.durationMs,\r\n error: result.error,\r\n });\r\n }\r\n\r\n status(): {\r\n pending: { taskId: string; description: string; subagentId: string }[];\r\n completed: TaskResult[];\r\n live: { subagentId: string; status: string; task?: string }[];\r\n summary: string;\r\n } {\r\n const pending = Array.from(this.pending.entries()).map(([taskId, v]) => ({\r\n taskId,\r\n description: v.description,\r\n subagentId: v.subagentId,\r\n }));\r\n // Include live subagent statuses from the coordinator so /agents shows\r\n // running agents even when they haven't produced a TaskResult yet.\r\n const live: { subagentId: string; status: string; task?: string }[] = [];\r\n if (this.coordinator) {\r\n const s = this.coordinator.getStatus();\r\n for (const a of s.subagents) {\r\n live.push({ subagentId: a.id, status: a.status, task: a.currentTask });\r\n }\r\n }\r\n const liveCount = live.filter((s) => s.status === 'running' || s.status === 'idle').length;\r\n const summary = !this.coordinator\r\n ? 'No subagents have been spawned.'\r\n : liveCount > 0\r\n ? `${pending.length} pending, ${liveCount} active, ${this.results.length} completed.`\r\n : `${pending.length} pending, ${this.results.length} completed.`;\r\n return { pending, completed: this.results, live, summary };\r\n }\r\n\r\n /**\r\n * Roll up per-subagent runtime cost from completed TaskResults. We don't\r\n * yet have FleetUsageAggregator wired into the simple MultiAgentHost\r\n * path (that lives on `Director`), so this aggregates iterations / tool\r\n * calls / duration which we *do* have — enough to spot a thrashing\r\n * worker without paying for a heavier orchestrator on every /spawn.\r\n *\r\n * Returns rows sorted by total duration descending (slowest first) so\r\n * the table renders the most interesting subagent at the top.\r\n */\r\n usage(): {\r\n rows: Array<{\r\n subagentId: string;\r\n tasks: number;\r\n iterations: number;\r\n toolCalls: number;\r\n durationMs: number;\r\n status: string;\r\n }>;\r\n totals: { tasks: number; iterations: number; toolCalls: number; durationMs: number };\r\n } {\r\n const bySubagent = new Map<\r\n string,\r\n {\r\n tasks: number;\r\n iterations: number;\r\n toolCalls: number;\r\n durationMs: number;\r\n lastStatus: string;\r\n }\r\n >();\r\n for (const r of this.results) {\r\n const cur = bySubagent.get(r.subagentId) ?? {\r\n tasks: 0,\r\n iterations: 0,\r\n toolCalls: 0,\r\n durationMs: 0,\r\n lastStatus: 'unknown',\r\n };\r\n cur.tasks += 1;\r\n cur.iterations += r.iterations;\r\n cur.toolCalls += r.toolCalls;\r\n cur.durationMs += r.durationMs;\r\n cur.lastStatus = r.status;\r\n bySubagent.set(r.subagentId, cur);\r\n }\r\n const rows = Array.from(bySubagent.entries())\r\n .map(([subagentId, v]) => ({\r\n subagentId,\r\n tasks: v.tasks,\r\n iterations: v.iterations,\r\n toolCalls: v.toolCalls,\r\n durationMs: v.durationMs,\r\n status: v.lastStatus,\r\n }))\r\n .sort((a, b) => b.durationMs - a.durationMs);\r\n const totals = rows.reduce(\r\n (acc, r) => ({\r\n tasks: acc.tasks + r.tasks,\r\n iterations: acc.iterations + r.iterations,\r\n toolCalls: acc.toolCalls + r.toolCalls,\r\n durationMs: acc.durationMs + r.durationMs,\r\n }),\r\n { tasks: 0, iterations: 0, toolCalls: 0, durationMs: 0 },\r\n );\r\n return { rows, totals };\r\n }\r\n\r\n /**\r\n * Force the director to write its manifest to disk and return the path,\r\n * or `null` when director mode is off (the simple coordinator path has\r\n * no manifest). Callers should fall back to a friendly user message\r\n * when `null` is returned — e.g. `/fleet manifest` does this already.\r\n *\r\n * The returned string is the absolute path of the manifest file. The\r\n * file contents are JSON; readers can `JSON.parse(fs.readFileSync(...))`\r\n * to consume.\r\n */\r\n async manifest(): Promise<string | null> {\r\n if (!this.director) return null;\r\n return this.director.writeManifest();\r\n }\r\n\r\n /**\r\n * Promote a non-director session to director mode at runtime. Only\r\n * succeeds when no subagents have been spawned yet — once a coordinator\r\n * is running, the state cannot be migrated. Returns the live Director\r\n * so the caller can register orchestration tools into the ToolRegistry.\r\n *\r\n * Idempotent: calling promoteToDirector on an already-promoted host\r\n * returns the existing director without side effects.\r\n */\r\n async promoteToDirector(): Promise<Director | null> {\r\n if (this.director) return this.director;\r\n if (this.coordinator) {\r\n // A coordinator already exists (subagents were spawned). Cannot\r\n // safely replace a running coordinator with a Director wrapper.\r\n // Record WHY so callers (delegate tool) can render an actionable\r\n // message instead of the prior opaque \"Director could not be\r\n // activated\" — the user wants to know what to do, not just that\r\n // a thing failed.\r\n const status = this.coordinator.getStatus();\r\n const running = status.subagents.filter((s) => s.status === 'running').length;\r\n const idle = status.subagents.filter((s) => s.status === 'idle').length;\r\n this.promotionBlockReason =\r\n `Cannot promote to director: a non-director coordinator is already in use ` +\r\n `(${running} running, ${idle} idle, ${status.pendingTasks} pending tasks). ` +\r\n `Stop the existing subagents with /fleet kill <id> or wait for them to finish, ` +\r\n `then retry — or restart wstack with --director to start in director mode.`;\r\n return null;\r\n }\r\n // Force director mode on so ensureCoordinator builds a Director.\r\n this.opts.directorMode = true;\r\n // Derive fleet paths from fleetRoot when available.\r\n if (this.opts.fleetRoot && !this.opts.manifestPath) {\r\n this.opts.manifestPath = path.join(this.opts.fleetRoot, 'fleet.json');\r\n }\r\n if (this.opts.fleetRoot && !this.opts.sharedScratchpadPath) {\r\n this.opts.sharedScratchpadPath = path.join(this.opts.fleetRoot, 'shared');\r\n }\r\n if (this.opts.fleetRoot && !this.opts.sessionsRoot) {\r\n this.opts.sessionsRoot = path.join(this.opts.fleetRoot, 'subagents');\r\n }\r\n if (this.opts.fleetRoot && !this.opts.stateCheckpointPath) {\r\n this.opts.stateCheckpointPath = path.join(this.opts.fleetRoot, 'director-state.json');\r\n }\r\n await this.ensureDirector();\r\n return this.director ?? null;\r\n }\r\n\r\n /**\r\n * True when this host is running in director mode. Surfaces the mode\r\n * to slash commands and tests without exposing the underlying Director\r\n * (which would let callers bypass the host's coordination layer).\r\n */\r\n isDirectorMode(): boolean {\r\n return !!this.director;\r\n }\r\n\r\n /**\r\n * Why the most recent `promoteToDirector` call returned null. Cleared\r\n * implicitly on the next successful promotion. The delegate tool reads\r\n * this so the LLM sees the actual blocker (e.g. \"3 running subagents,\r\n * wait or /fleet kill\") instead of a generic \"Director could not be\r\n * activated\" message that gives no path forward.\r\n */\r\n getPromotionBlockReason(): string | null {\r\n return this.promotionBlockReason;\r\n }\r\n\r\n /**\r\n * Terminate a single subagent. Returns true when the subagent existed\r\n * (regardless of whether stop() succeeded or it was already idle),\r\n * false when no coordinator has been created yet — meaning the user\r\n * called /fleet kill before any /spawn, and there's nothing to do.\r\n */\r\n async kill(subagentId: string): Promise<boolean> {\r\n if (!this.coordinator) return false;\r\n await this.coordinator.stop(subagentId);\r\n return true;\r\n }\r\n\r\n async stopAll(): Promise<void> {\r\n if (this.coordinator) {\r\n await this.coordinator.stopAll();\r\n }\r\n }\r\n}\r\n// Workaround: TOKENS reference satisfies unused-import lint without being\r\n// active runtime usage — included for clarity that the coordinator\r\n// shares the container's permission policy etc. via the agent factory.\r\nvoid TOKENS;\r\n","import type { InputReader, Tool } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport { renderDiff } from './diff-renderer.js';\nimport { theme } from './theme.js';\n\nexport type PromptDecision = 'yes' | 'no' | 'always' | 'deny';\n\n/** Signature the Agent expects for confirming tool calls. */\nexport type ConfirmAwaiter = (\n tool: Tool,\n input: unknown,\n toolUseId: string,\n suggestedPattern: string,\n) => Promise<'yes' | 'no' | 'always' | 'deny'>;\n\nexport function makePromptDelegate(reader: InputReader) {\n return async (tool: Tool, input: unknown, suggestedPattern: string): Promise<PromptDecision> => {\n // Terminal bell (\\x07) to alert the user that action is required.\n // Without this, the prompt can be easily missed when output is\n // scrolling or the user has switched to another window.\n process.stdout.write('\\x07');\n process.stdout.write(`\\n${theme.warn('⚠ APPROVAL REQUIRED')} ${theme.primary('│')} ${theme.bold(tool.name)}\\n`);\n process.stdout.write(`${color.dim(stringifyInput(input))}\\n`);\n\n if (tool.name === 'edit' && hasDiff(input)) {\n const inp = input as { diff?: unknown };\n const diff = typeof inp.diff === 'string' ? inp.diff : '';\n if (diff) process.stdout.write(`${renderDiff(diff)}\\n`);\n }\n\n process.stdout.write(color.dim('─────────────────\\n'));\n const answer = await reader.readKey(\n `${theme.bold('[y]')}es ${theme.bold('[n]')}o ${theme.bold('[a]')}lways allow (${suggestedPattern}) ${theme.bold('[d]')}eny: `,\n [\n { key: 'y', label: 'yes', value: 'yes' },\n { key: 'n', label: 'no', value: 'no' },\n { key: 'a', label: 'always', value: 'always' },\n { key: 'd', label: 'deny', value: 'deny' },\n ],\n );\n return answer as PromptDecision;\n };\n}\n\n/**\n * Create a ConfirmAwaiter for the CLI path. Wraps makePromptDelegate\n * with the ConfirmAwaiter type signature expected by the Agent.\n */\nexport function makeConfirmAwaiter(reader: InputReader): ConfirmAwaiter {\n const delegate = makePromptDelegate(reader);\n return async (tool: Tool, input: unknown, _toolUseId: string, suggestedPattern: string) => {\n const result = await delegate(tool, input, suggestedPattern);\n return result as 'yes' | 'no' | 'always' | 'deny';\n };\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","import type { EventBus, TokenCounter } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.js';\nimport { fmtTok } from './utils.js';\n\ninterface ToolStat {\n ok: number;\n fail: number;\n totalMs: number;\n}\n\n/**\n * Accumulates per-session stats by listening to EventBus events. Designed\n * to be created once in main(), live for the whole CLI invocation (single-shot\n * or REPL), and produce the closing report when asked.\n *\n * Cost is intentionally not tracked here — TokenCounter is the authority.\n */\nexport class SessionStats {\n private readonly tokenCounter: TokenCounter;\n private readonly startedAt = Date.now();\n\n private apiRequests = 0;\n private iterations = 0;\n private errors = 0;\n\n private readonly toolStats = new Map<string, ToolStat>();\n private readonly readPaths = new Set<string>();\n private readonly editedPaths = new Set<string>();\n private readonly writtenPaths = new Set<string>();\n private bytesWritten = 0;\n private bashCommands = 0;\n private fetches = 0;\n\n constructor(events: EventBus, tokenCounter: TokenCounter) {\n this.tokenCounter = tokenCounter;\n events.on('provider.response', () => {\n this.apiRequests++;\n });\n events.on('iteration.completed', () => {\n this.iterations++;\n });\n events.on('error', () => {\n this.errors++;\n });\n events.on('tool.executed', (e) => {\n const slot = this.toolStats.get(e.name) ?? { ok: 0, fail: 0, totalMs: 0 };\n if (e.ok) slot.ok++;\n else slot.fail++;\n slot.totalMs += e.durationMs;\n this.toolStats.set(e.name, slot);\n\n const input = e.input as Record<string, unknown> | undefined;\n // Side-effect counts are attempt-based (count failed shells / fetches too —\n // the user wants to see \"the agent tried to run 4 commands\").\n if (e.name === 'bash') this.bashCommands++;\n else if (e.name === 'fetch') this.fetches++;\n\n // File-path tracking is success-only: a failed read or edit didn't\n // actually touch the file, so don't claim it did.\n if (!e.ok) return;\n const path = typeof input?.path === 'string' ? (input.path as string) : undefined;\n if (e.name === 'read' && path) this.readPaths.add(path);\n else if (e.name === 'edit' && path) this.editedPaths.add(path);\n else if (e.name === 'write' && path) {\n this.writtenPaths.add(path);\n const content = typeof input?.content === 'string' ? (input.content as string) : '';\n this.bytesWritten += Buffer.byteLength(content, 'utf8');\n }\n });\n }\n\n hasActivity(): boolean {\n return (\n this.apiRequests > 0 ||\n this.iterations > 0 ||\n this.toolStats.size > 0 ||\n this.tokenCounter.total().input > 0\n );\n }\n\n /**\n * Build the report string. Returns null when there's no recorded\n * activity yet — caller decides whether to emit a placeholder or stay\n * silent. Splitting `format()` out of `render()` lets the TUI's slash\n * dispatcher take the string and turn it into a history entry, while\n * REPL keeps the old direct-write path.\n */\n format(): string | null {\n if (!this.hasActivity()) return null;\n const u = this.tokenCounter.total();\n const cost = this.tokenCounter.estimateCost();\n const elapsedSec = ((Date.now() - this.startedAt) / 1000).toFixed(1);\n\n const lines: string[] = [];\n lines.push('');\n lines.push(color.bold('Session report'));\n lines.push(color.dim('─'.repeat(40)));\n lines.push(` Elapsed: ${elapsedSec}s`);\n lines.push(` Iterations: ${this.iterations}`);\n lines.push(` API requests: ${this.apiRequests}`);\n if (this.errors > 0) {\n lines.push(` Errors: ${color.yellow(String(this.errors))}`);\n }\n lines.push('');\n lines.push(\n ` Tokens: in ${fmtTok(u.input)} out ${fmtTok(u.output)}${u.cacheRead ? ` cacheR ${fmtTok(u.cacheRead)}` : ''}${u.cacheWrite ? ` cacheW ${fmtTok(u.cacheWrite)}` : ''}`,\n );\n const cache = this.tokenCounter.cacheStats();\n if (cache.readTokens > 0 || cache.writeTokens > 0) {\n const pct = (cache.hitRatio * 100).toFixed(1);\n lines.push(\n ` Prompt cache: ${pct}% hit ${color.dim(`(${fmtTok(cache.readTokens)} read / ${fmtTok(cache.writeTokens)} write)`)}`,\n );\n }\n if (cost.total > 0) {\n lines.push(\n ` Cost: $${cost.total.toFixed(4)}${color.dim(` (in $${cost.input.toFixed(4)} / out $${cost.output.toFixed(4)})`)}`,\n );\n } else {\n lines.push(` Cost: ${color.dim('$0 (no pricing on this plan)')}`);\n }\n\n if (this.toolStats.size > 0) {\n lines.push('');\n lines.push(` ${color.bold('Tool calls')}`);\n const sorted = [...this.toolStats.entries()].sort(\n (a, b) => b[1].ok + b[1].fail - (a[1].ok + a[1].fail),\n );\n for (const [name, s] of sorted) {\n const total = s.ok + s.fail;\n const failPart = s.fail > 0 ? color.yellow(` (${s.fail} failed)`) : '';\n const avgMs = total > 0 ? Math.round(s.totalMs / total) : 0;\n lines.push(\n ` ${name.padEnd(12)} ${String(total).padStart(3)}× ${color.dim(`avg ${avgMs}ms`)}${failPart}`,\n );\n }\n }\n\n const fileActivity =\n this.readPaths.size > 0 ||\n this.editedPaths.size > 0 ||\n this.writtenPaths.size > 0 ||\n this.bytesWritten > 0;\n if (fileActivity) {\n lines.push('');\n lines.push(` ${color.bold('Files')}`);\n if (this.readPaths.size > 0)\n lines.push(\n ` read: ${this.readPaths.size} ${color.dim(samplePaths(this.readPaths))}`,\n );\n if (this.editedPaths.size > 0)\n lines.push(\n ` edited: ${this.editedPaths.size} ${color.dim(samplePaths(this.editedPaths))}`,\n );\n if (this.writtenPaths.size > 0) {\n const bytes = this.bytesWritten;\n const byteStr = bytes > 1024 ? `${(bytes / 1024).toFixed(1)}KB` : `${bytes}B`;\n lines.push(\n ` written: ${this.writtenPaths.size} (${byteStr}) ${color.dim(samplePaths(this.writtenPaths))}`,\n );\n }\n }\n\n if (this.bashCommands > 0 || this.fetches > 0) {\n lines.push('');\n if (this.bashCommands > 0) lines.push(` Shell commands: ${this.bashCommands}`);\n if (this.fetches > 0) lines.push(` Web fetches: ${this.fetches}`);\n }\n\n lines.push('');\n return lines.join('\\n');\n }\n\n render(renderer: TerminalRenderer): void {\n const text = this.format();\n if (text === null) return;\n renderer.write(`${text}\\n`);\n }\n}\n\nfunction samplePaths(set: Set<string>): string {\n const arr = [...set];\n if (arr.length <= 2) return arr.join(', ');\n return `${arr[0]}, … (+${arr.length - 1} more)`;\n}\n","import { color } from '@wrongstack/core';\nimport { fmtTok } from './utils.js';\n\nconst FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\nconst FILLED = '█';\nconst EMPTY = '░';\n\nexport interface ContextInfo {\n used: number;\n max: number;\n}\n\n/**\n * Minimal single-line spinner. Writes to stderr so it doesn't get mixed with\n * the agent's stdout output (assistant text, tool diffs). Auto-no-ops outside\n * a TTY so logs don't get spammed with control codes.\n *\n * When a {@link ContextInfo} is set via {@link setContext}, the spinner line\n * appends a compact `ctx ████░░ 42% (12k/200k)` chip so the user can see\n * how full the model's context window is while waiting for a response.\n */\nexport class Spinner {\n private timer?: NodeJS.Timeout;\n private frame = 0;\n private active = false;\n private label = '';\n private startedAt = 0;\n private context?: ContextInfo;\n private readonly out: NodeJS.WriteStream;\n private readonly enabled: boolean;\n\n constructor(out: NodeJS.WriteStream = process.stderr) {\n this.out = out;\n this.enabled = Boolean(out.isTTY) && !process.env.NO_COLOR;\n }\n\n start(label: string): void {\n if (!this.enabled || this.active) return;\n this.label = label;\n this.frame = 0;\n this.active = true;\n this.startedAt = Date.now();\n this.render();\n this.timer = setInterval(() => {\n this.frame = (this.frame + 1) % FRAMES.length;\n this.render();\n }, 80);\n this.timer.unref?.();\n }\n\n stop(): void {\n if (!this.active) return;\n this.active = false;\n if (this.timer) clearInterval(this.timer);\n this.timer = undefined;\n this.clearLine();\n }\n\n /** Stop and persist a one-line note where the spinner was (e.g. \"✓ done in 1.4s\"). */\n stopWith(note: string): void {\n this.stop();\n this.out.write(`${note}\\n`);\n }\n\n /** Update the live context-window chip shown on the spinner line. */\n setContext(ctx: ContextInfo | undefined): void {\n this.context = ctx;\n }\n\n private render(): void {\n const elapsed = ((Date.now() - this.startedAt) / 1000).toFixed(1);\n let line = `${color.amber(FRAMES[this.frame] ?? '')} ${this.label} ${color.dim(`${elapsed}s`)}`;\n if (this.context && this.context.max > 0) {\n line += ' ' + renderContextChip(this.context);\n }\n this.clearLine();\n this.out.write(line);\n }\n\n private clearLine(): void {\n if (!this.enabled) return;\n this.out.write('\\r\\x1b[2K');\n }\n}\n\nfunction renderContextChip(ctx: ContextInfo): string {\n const ratio = Math.max(0, Math.min(1, ctx.used / ctx.max));\n const pct = Math.round(ratio * 100);\n const chipColor = ratio >= 0.85 ? color.red : ratio >= 0.65 ? color.yellow : color.cyan;\n const bar = renderProgress(ratio, 8);\n return (\n color.dim('ctx ') +\n chipColor(bar) +\n chipColor(` ${pct}%`) +\n color.dim(` (${fmtTok(ctx.used)}/${fmtTok(ctx.max)})`)\n );\n}\n\nfunction 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","import {\r\n Agent,\r\n AutoCompactionMiddleware,\r\n type AgentPipelines,\r\n type Context,\r\n type EventBus,\r\n type Logger,\r\n type ModelsRegistry,\r\n type Provider,\r\n type ProviderRegistry,\r\n type ToolRegistry,\r\n createDefaultPipelines,\r\n estimateRequestTokens,\r\n} from '@wrongstack/core';\r\nimport { capabilitiesFor } from '@wrongstack/providers';\r\n\r\ntype CompactionDriver = ConstructorParameters<typeof AutoCompactionMiddleware>[0];\r\n\r\nexport function setupPipelines(params: {\r\n events: EventBus;\r\n logger: Logger;\r\n}): AgentPipelines {\r\n const { events, logger } = params;\r\n const pipelines = createDefaultPipelines();\r\n\r\n const installBoundary = <T>(p: {\r\n setErrorHandler: (\r\n h: (ev: { middleware: string; owner?: string; err: unknown }) => 'rethrow' | 'swallow',\r\n ) => unknown;\r\n }) => {\r\n p.setErrorHandler((ev) => {\r\n const fromPlugin = !!ev.owner && ev.owner !== 'core';\r\n logger.error(\r\n `Pipeline middleware \"${ev.middleware}\" crashed (owner=${ev.owner ?? 'unknown'}); ${fromPlugin ? 'swallowed' : 'rethrown'}`,\r\n ev.err,\r\n );\r\n events.emit('error', {\r\n err: ev.err instanceof Error ? ev.err : new Error(String(ev.err)),\r\n phase: `pipeline:${ev.middleware}`,\r\n });\r\n return fromPlugin ? 'swallow' : 'rethrow';\r\n });\r\n };\r\n installBoundary(pipelines.request);\r\n installBoundary(pipelines.response);\r\n installBoundary(pipelines.toolCall);\r\n installBoundary(pipelines.userInput);\r\n installBoundary(pipelines.assistantOutput);\r\n installBoundary(pipelines.contextWindow);\r\n return pipelines;\r\n}\r\n\r\nexport async function setupCompaction(params: {\r\n compactor: CompactionDriver;\r\n events: EventBus;\r\n modelsRegistry: ModelsRegistry;\r\n context: Context;\r\n config: {\r\n context: {\r\n autoCompact?: boolean;\r\n warnThreshold: number;\r\n softThreshold: number;\r\n hardThreshold: number;\r\n effectiveMaxContext?: number;\r\n };\r\n };\r\n provider: Provider;\r\n pipelines: AgentPipelines;\r\n}): Promise<{ effectiveMaxContext: number; autoCompactor: AutoCompactionMiddleware | undefined }> {\r\n const { compactor, events, modelsRegistry, context, config, provider, pipelines } = params;\r\n const resolvedCaps = await capabilitiesFor(modelsRegistry, provider.id, context.model).catch(() => undefined);\r\n const effectiveMaxContext =\r\n config.context.effectiveMaxContext ??\r\n (resolvedCaps as { maxContext?: number } | undefined)?.maxContext ??\r\n provider.capabilities.maxContext;\r\n let autoCompactor: AutoCompactionMiddleware | undefined;\r\n if (config.context.autoCompact !== false) {\r\n autoCompactor = new AutoCompactionMiddleware(\r\n compactor,\r\n effectiveMaxContext,\r\n // Use the full API request estimator: messages + system prompt + tool definitions.\r\n // This matches what the provider actually counts as input tokens.\r\n (ctx) => estimateRequestTokens(ctx.messages, ctx.systemPrompt, ctx.tools ?? []).total,\r\n {\r\n warn: config.context.warnThreshold,\r\n soft: config.context.softThreshold,\r\n hard: config.context.hardThreshold,\r\n },\r\n { aggressiveOn: 'soft', failureMode: 'throw_on_hard', events },\r\n );\r\n pipelines.contextWindow.use({ name: 'AutoCompaction', handler: autoCompactor.handler() });\r\n }\r\n return { effectiveMaxContext, autoCompactor };\r\n}\r\n\r\nexport function createAgent(params: {\r\n container: import('@wrongstack/core').Container;\r\n tools: ToolRegistry;\r\n providers: ProviderRegistry;\r\n events: EventBus;\r\n pipelines: AgentPipelines;\r\n context: Context;\r\n config: {\r\n tools: {\r\n maxIterations: number;\r\n iterationTimeoutMs: number;\r\n defaultExecutionStrategy: 'parallel' | 'sequential' | 'smart';\r\n perIterationOutputCapBytes: number;\r\n };\r\n };\r\n confirmAwaiter: import('@wrongstack/core').AgentInit['confirmAwaiter'];\r\n}): Agent {\r\n return new Agent({\r\n container: params.container,\r\n tools: params.tools,\r\n providers: params.providers,\r\n events: params.events,\r\n pipelines: params.pipelines,\r\n context: params.context,\r\n maxIterations: params.config.tools.maxIterations,\r\n iterationTimeoutMs: params.config.tools.iterationTimeoutMs,\r\n executionStrategy: params.config.tools.defaultExecutionStrategy,\r\n perIterationOutputCapBytes: params.config.tools.perIterationOutputCapBytes,\r\n confirmAwaiter: params.confirmAwaiter,\r\n });\r\n}\r\n","import { ProviderRegistry, type Config, type Logger, type ModelsRegistry } from '@wrongstack/core';\nimport type { ResolvedProvider } from '@wrongstack/core';\nimport {\n buildProviderFactoriesFromRegistry,\n makeProviderFromConfig,\n} from '@wrongstack/providers';\n\nexport interface ProviderSetupResult {\n resolvedProvider: ResolvedProvider | undefined;\n provider: ReturnType<ProviderRegistry['create']>;\n providerRegistry: ProviderRegistry;\n}\n\nexport async function setupProvider(params: {\n config: Config;\n modelsRegistry: ModelsRegistry;\n logger: Logger;\n}): Promise<ProviderSetupResult> {\n const { config, modelsRegistry, logger } = params;\n\n // Resolve provider details from models.dev.\n const savedProviderCfg = config.providers?.[config.provider];\n let resolvedProvider = await modelsRegistry.getProvider(config.provider).catch(() => undefined);\n if (!resolvedProvider && savedProviderCfg?.type && savedProviderCfg.type !== config.provider) {\n resolvedProvider = await modelsRegistry\n .getProvider(savedProviderCfg.type)\n .catch(() => undefined);\n }\n if (!resolvedProvider) {\n if (!savedProviderCfg?.family) {\n logger.warn(\n `Provider \"${config.provider}\" not found in models.dev. Continuing with raw config.`,\n );\n }\n } else if (resolvedProvider.family === 'unsupported' && !savedProviderCfg?.family) {\n throw Object.assign(\n new Error(\n `Provider \"${config.provider}\" uses an unsupported wire family (${resolvedProvider.npm}). ` +\n `Install a plugin to enable it, or pick a different provider.`,\n ),\n { code: 'UNSUPPORTED_PROVIDER' },\n );\n }\n\n // Provider registry — populated dynamically from models.dev catalog.\n const providerRegistry = new ProviderRegistry();\n if (config.features.modelsRegistry) {\n try {\n const factories = await buildProviderFactoriesFromRegistry({\n registry: modelsRegistry,\n log: logger,\n });\n for (const f of factories) providerRegistry.register(f);\n } catch (err) {\n throw new Error(\n `Failed to load models.dev registry: ${err instanceof Error ? err.message : err}\\n` +\n `Try \\`wstack models refresh\\` once you have network access, or run with --no-features.`,\n );\n }\n }\n\n // Provider instance — registry-driven by default, falls through to config-only.\n const providerConfig = config.providers?.[config.provider] ?? {\n type: config.provider,\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n };\n let provider: ReturnType<ProviderRegistry['create']>;\n try {\n const cfgWithType = { ...providerConfig, type: config.provider };\n if (config.features.modelsRegistry && providerRegistry.has(config.provider)) {\n provider = providerRegistry.create(cfgWithType);\n } else {\n provider = makeProviderFromConfig(config.provider, cfgWithType);\n }\n } catch (err) {\n throw new Error(\n `Failed to create provider: ${err instanceof Error ? err.message : err}`,\n );\n }\n\n return { resolvedProvider, provider, providerRegistry };\n}\n","import * as path from 'node:path';\nimport {\n Context,\n DefaultAttachmentStore,\n QueueStore,\n RecoveryLock,\n type AbandonedSession,\n type SessionStore,\n type SessionWriter,\n type WstackPaths,\n attachTodosCheckpoint,\n loadDirectorState,\n loadPlan,\n loadTodosCheckpoint,\n} from '@wrongstack/core';\n\nexport interface SessionResult {\n session: SessionWriter;\n sessionRef: { current?: SessionWriter };\n context: Context;\n restoredMessages: import('@wrongstack/core').Message[];\n attachments: DefaultAttachmentStore;\n recoveryLock: RecoveryLock;\n queueStore: QueueStore;\n planPath: string;\n detachTodosCheckpoint: () => void;\n}\n\nexport async function setupSession(params: {\n config: { model: string; provider: string };\n wpaths: WstackPaths;\n projectRoot: string;\n cwd: string;\n sessionStore: SessionStore;\n systemPrompt: import('@wrongstack/core').TextBlock[];\n provider: import('@wrongstack/core').Provider;\n tokenCounter: import('@wrongstack/core').TokenCounter;\n renderer: { writeInfo(msg: string): void; writeError(msg: string): void };\n flags: Record<string, unknown>;\n onRecovery: (\n abandoned: AbandonedSession,\n autoRecover: boolean,\n ) => Promise<'resume' | 'delete' | 'skip'>;\n}): Promise<SessionResult> {\n const { config, wpaths, projectRoot, cwd, sessionStore, systemPrompt, provider, tokenCounter, renderer, flags, onRecovery } = params;\n\n let resumeId = typeof flags['resume'] === 'string' ? (flags['resume'] as string) : undefined;\n\n const recoveryLock = new RecoveryLock({ dir: wpaths.projectSessions, sessionStore });\n if (!resumeId && !flags['no-recovery']) {\n const abandoned = await recoveryLock.checkAbandoned();\n if (abandoned && abandoned.messageCount > 0) {\n const choice = await onRecovery(abandoned, !!flags['recover']);\n if (choice === 'resume') resumeId = abandoned.sessionId;\n else if (choice === 'delete') { await sessionStore.delete(abandoned.sessionId).catch(() => undefined); await recoveryLock.clear(); }\n else await recoveryLock.clear();\n } else if (abandoned) {\n await sessionStore.delete(abandoned.sessionId).catch(() => undefined);\n await recoveryLock.clear();\n }\n }\n\n let session: SessionWriter | undefined;\n let restoredMessages: import('@wrongstack/core').Message[] = [];\n if (resumeId) {\n try {\n const resumed = await sessionStore.resume(resumeId);\n session = resumed.writer;\n restoredMessages = resumed.data.messages;\n renderer.writeInfo(`Resumed session ${resumed.data.metadata.id} — ${restoredMessages.length} messages, ${resumed.data.usage.input + resumed.data.usage.output} tokens used previously.`);\n } catch (err) {\n renderer.writeError(`Resume failed: ${err instanceof Error ? err.message : String(err)}`);\n throw Object.assign(new Error('RESUME_FAILED'), { exitCode: 2 });\n }\n } else {\n session = await sessionStore.create({ id: '', title: '', model: config.model, provider: config.provider });\n }\n\n const sessionRef: { current?: SessionWriter } = { current: session };\n await recoveryLock.write(session!.id).catch(() => undefined);\n\n const attachments = new DefaultAttachmentStore({ spoolDir: path.join(wpaths.projectSessions, session!.id, 'attachments') });\n const queueStore = new QueueStore({ dir: path.join(wpaths.projectSessions, session!.id) });\n\n const ctxSignal = new AbortController().signal;\n const context = new Context({ systemPrompt, provider, session: session!, signal: ctxSignal, tokenCounter, cwd, projectRoot, model: config.model });\n if (restoredMessages.length > 0) context.state.replaceMessages(restoredMessages);\n\n const todosCheckpointPath = path.join(wpaths.projectSessions, `${session!.id}.todos.json`);\n if (resumeId) {\n try {\n const restoredTodos = await loadTodosCheckpoint(todosCheckpointPath);\n if (restoredTodos && restoredTodos.length > 0) {\n context.state.replaceTodos(restoredTodos);\n renderer.writeInfo(`Restored ${restoredTodos.length} todo${restoredTodos.length === 1 ? '' : 's'} from previous run.`);\n }\n } catch { /* best-effort */ }\n }\n const detachTodosCheckpoint = attachTodosCheckpoint(context.state, todosCheckpointPath, session!.id);\n\n const planPath = path.join(wpaths.projectSessions, `${session!.id}.plan.json`);\n context.state.setMeta('plan.path', planPath);\n\n if (resumeId) {\n try {\n const fleetRoot = path.join(wpaths.projectSessions, session!.id);\n const dirState = await loadDirectorState(path.join(fleetRoot, 'director-state.json'));\n if (dirState) {\n const tCounts: Record<string, number> = {};\n for (const t of dirState.tasks) tCounts[t.status] = (tCounts[t.status] ?? 0) + 1;\n const summary = Object.entries(tCounts).map(([k, v]) => `${v} ${k}`).join(', ');\n renderer.writeInfo(`Prior fleet state: ${dirState.subagents.length} subagent${dirState.subagents.length === 1 ? '' : 's'}, tasks ${summary || '(none)'}.`);\n }\n } catch { /* ignore */ }\n try {\n const plan = await loadPlan(planPath);\n if (plan && plan.items.length > 0) {\n const open = plan.items.filter((p) => p.status !== 'done').length;\n const done = plan.items.length - open;\n renderer.writeInfo(`Plan: ${plan.items.length} item${plan.items.length === 1 ? '' : 's'} (${open} open, ${done} done). Use /plan to review.`);\n }\n } catch { /* ignore */ }\n }\n\n return { session: session!, sessionRef, context, restoredMessages, attachments, recoveryLock, queueStore, planPath, detachTodosCheckpoint };\n}\n","import { writeFileSync } from 'node:fs';\r\nimport * as fs from 'node:fs/promises';\r\nimport { createRequire } from 'node:module';\r\nimport * as path from 'node:path';\r\nimport {\r\n Agent,\r\n AutoCompactionMiddleware,\r\n type Config,\r\n Container,\r\n Context,\r\n DefaultAttachmentStore,\r\n DefaultConfigStore,\r\n DefaultErrorHandler,\r\n DefaultHealthRegistry,\r\n DefaultLogger,\r\n DefaultMemoryStore,\r\n DefaultModeStore,\r\n DefaultModelsRegistry,\r\n DefaultPathResolver,\r\n type DefaultPermissionPolicy,\r\n DefaultRetryPolicy,\r\n DefaultSecretScrubber,\r\n DefaultSessionStore,\r\n DefaultSkillLoader,\r\n DefaultSystemPromptBuilder,\r\n DefaultTokenCounter,\r\n type Director,\r\n EventBus,\r\n FLEET_ROSTER,\r\n type HealthRegistry,\r\n HybridCompactor,\r\n InMemoryMetricsSink,\r\n type MetricsServerHandle,\r\n type MetricsSink,\r\n type Plugin,\r\n type ProviderRegistry,\r\n QueueStore,\r\n RecoveryLock,\r\n SlashCommandRegistry,\r\n type SystemPromptBuilder,\r\n TOKENS,\r\n ToolRegistry,\r\n attachTodosCheckpoint,\r\n color,\r\n createContextManagerTool,\r\n createDefaultPipelines,\r\n createDelegateTool,\r\n loadDirectorState,\r\n loadPlan,\r\n loadPlugins,\r\n loadTodosCheckpoint,\r\n startMetricsServer,\r\n wireMetricsToEvents,\r\n} from '@wrongstack/core';\r\nimport { MCPRegistry } from '@wrongstack/mcp';\r\nimport { capabilitiesFor, makeProviderFromConfig } from '@wrongstack/providers';\r\nimport { createDefaultContainer } from '@wrongstack/runtime';\r\nimport { builtinToolsPack, forgetTool, rememberTool } from '@wrongstack/tools';\r\nimport { boot } from './boot.js';\r\nimport { type ExecutionDeps, execute } from './execution.js';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport { MultiAgentHost } from './multi-agent.js';\r\nimport { makeConfirmAwaiter, makePromptDelegate } from './permission-prompt.js';\r\nimport { runPluginManagementCommand } from './plugin-management.js';\r\nimport { buildPickableProviders } from './provider-helpers.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\nimport { SessionStats } from './session-stats.js';\r\nimport { buildBuiltinSlashCommands } from './slash-commands/index.js';\r\nimport { Spinner } from './spinner.js';\r\nimport { fmtTaskResultLine, fmtTok, patchConfig } from './utils.js';\r\nimport { createAgent, setupCompaction, setupPipelines } from './wiring/pipeline.js';\r\nimport { setupProvider } from './wiring/provider.js';\r\nimport { setupSession } from './wiring/session.js';\r\n\r\nfunction resolveBundledSkillsDir(): string | undefined {\r\n try {\r\n const req = createRequire(import.meta.url);\r\n const corePkg = req.resolve('@wrongstack/core/package.json');\r\n return path.join(path.dirname(corePkg), 'skills');\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nimport { CLI_VERSION } from './version.js';\r\nexport { CLI_VERSION };\r\n\r\ntype ContainerPromptDelegate = (\r\n tool: unknown,\r\n input: unknown,\r\n suggestedPattern: string,\r\n) => Promise<'yes' | 'no' | 'always' | 'deny'>;\r\n\r\nfunction buildPluginOptions(config: Config): Record<string, Record<string, unknown>> {\r\n const options: Record<string, Record<string, unknown>> = {};\r\n for (const entry of config.plugins ?? []) {\r\n if (typeof entry !== 'object') continue;\r\n if (entry.options) options[entry.name] = { ...entry.options };\r\n }\r\n for (const [name, value] of Object.entries(config.extensions ?? {})) {\r\n options[name] = { ...(options[name] ?? {}), ...value };\r\n }\r\n return options;\r\n}\r\n\r\nexport async function main(argv: string[]): Promise<number> {\r\n const ctx = await boot(argv);\r\n if (typeof ctx === 'number') return ctx;\r\n let {\r\n config,\r\n vault,\r\n wpaths,\r\n cwd,\r\n projectRoot,\r\n userHome,\r\n flags,\r\n positional,\r\n modelsRegistry,\r\n renderer,\r\n reader,\r\n logger,\r\n } = ctx;\r\n // PathResolver is created from the resolved projectRoot\r\n const pathResolver = new DefaultPathResolver(cwd);\r\n\r\n // Build container via shared factory\r\n const container = createDefaultContainer({\r\n config, wpaths, logger, modelsRegistry,\r\n permission: {\r\n yolo: config.yolo,\r\n promptDelegate: makePromptDelegate(reader) as unknown as ContainerPromptDelegate,\r\n },\r\n compactor: { preserveK: config.context.preserveK, eliseThreshold: config.context.eliseThreshold },\r\n bundledSkillsDir: config.features.skills ? resolveBundledSkillsDir() : undefined,\r\n });\r\n const configStore = container.resolve(TOKENS.ConfigStore);\r\n container.bind(TOKENS.PathResolver, () => pathResolver);\r\n container.bind(TOKENS.Renderer, () => renderer);\r\n container.bind(TOKENS.InputReader, () => reader);\r\n\r\n // Resolve modeId and modelCapabilities before building system prompt.\r\n const modeStore = container.resolve(TOKENS.ModeStore);\r\n const activeMode = await modeStore.getActiveMode();\r\n let resolvedProvider: import('@wrongstack/core').ResolvedProvider | undefined;\r\n let providerRegistry: ProviderRegistry;\r\n let provider: ReturnType<ProviderRegistry['create']>;\r\n try {\r\n const result = await setupProvider({ config, modelsRegistry, logger });\r\n resolvedProvider = result.resolvedProvider;\r\n providerRegistry = result.providerRegistry;\r\n provider = result.provider;\r\n } catch (err) {\r\n process.stderr.write(`${err instanceof Error ? err.message : err}\\n`);\r\n await reader.close();\r\n return 2;\r\n }\r\n const modeId = activeMode?.id ?? 'default';\r\n const modePrompt = activeMode?.prompt ?? '';\r\n const resolvedModel = await modelsRegistry.getModel(config.provider, config.model);\r\n const modelCapabilities = resolvedModel?.capabilities\r\n ? {\r\n maxContextTokens: resolvedModel.capabilities.maxContext,\r\n supportsTools: resolvedModel.capabilities.tools,\r\n supportsVision: resolvedModel.capabilities.vision,\r\n supportsReasoning: resolvedModel.capabilities.reasoning,\r\n }\r\n : undefined;\r\n\r\n const memoryStore = container.resolve(TOKENS.MemoryStore);\r\n const skillLoader = container.resolve(TOKENS.SkillLoader);\r\n const sessionRef: { current?: import('@wrongstack/core').SessionWriter } = {};\r\n container.bind(TOKENS.SystemPromptBuilder, () =>\r\n new DefaultSystemPromptBuilder({\r\n memoryStore,\r\n skillLoader: config.features.skills ? skillLoader : undefined,\r\n modeStore,\r\n modeId,\r\n modePrompt,\r\n modelCapabilities,\r\n planPath: () =>\r\n sessionRef.current\r\n ? path.join(wpaths.projectSessions, `${sessionRef.current.id}.plan.json`)\r\n : undefined,\r\n }),\r\n );\r\n\r\n // Tool registry\r\n const toolRegistry = new ToolRegistry();\r\n toolRegistry.registerAllOrThrow([...(builtinToolsPack.tools ?? [])], builtinToolsPack.name);\r\n toolRegistry.registerDefault(\r\n createContextManagerTool({ compactor: container.resolve(TOKENS.Compactor) }),\r\n );\r\n if (config.features.memory) {\r\n toolRegistry.register(rememberTool(memoryStore));\r\n toolRegistry.register(forgetTool(memoryStore));\r\n }\r\n\r\n const events = new EventBus();\r\n events.setLogger(logger);\r\n\r\n // Observability — opt-in via --metrics. Writes a snapshot to\r\n // <session-dir>/metrics.json on shutdown so users get a post-run summary\r\n // without standing up a scrape endpoint. The sink is also exposed via the\r\n // /metrics slash command for live inspection mid-session.\r\n let metricsSink: MetricsSink | undefined;\r\n let healthRegistry: HealthRegistry | undefined;\r\n let metricsServerHandle: MetricsServerHandle | undefined;\r\n // --metrics-port implies --metrics (you can't scrape what isn't recorded).\r\n const metricsPortFlag = flags['metrics-port'];\r\n const metricsPort =\r\n typeof metricsPortFlag === 'string' && metricsPortFlag.length > 0\r\n ? Number.parseInt(metricsPortFlag, 10)\r\n : undefined;\r\n if (metricsPort !== undefined && !flags.metrics) flags.metrics = true;\r\n if (flags.metrics) {\r\n metricsSink = new InMemoryMetricsSink();\r\n wireMetricsToEvents(events, metricsSink);\r\n healthRegistry = new DefaultHealthRegistry();\r\n healthRegistry.register({\r\n name: 'session-store',\r\n check: async () => {\r\n try {\r\n await fs.access(wpaths.projectSessions);\r\n return { status: 'healthy' };\r\n } catch (e) {\r\n return { status: 'unhealthy', detail: e instanceof Error ? e.message : 'access denied' };\r\n }\r\n },\r\n });\r\n healthRegistry.register({\r\n name: 'provider',\r\n check: async () => ({\r\n status: 'healthy',\r\n data: { id: config.provider, model: config.model },\r\n }),\r\n });\r\n\r\n const dumpMetrics = () => {\r\n if (!metricsSink) return;\r\n try {\r\n const out = path.join(wpaths.projectSessions, 'metrics.json');\r\n const snap = metricsSink.snapshot();\r\n // Sync write — async fs APIs can't survive process.exit().\r\n writeFileSync(out, JSON.stringify(snap, null, 2));\r\n } catch {\r\n // Snapshot is best-effort — never block shutdown on it.\r\n }\r\n };\r\n process.on('exit', dumpMetrics);\r\n process.on('SIGINT', () => {\r\n dumpMetrics();\r\n process.exit(130);\r\n });\r\n\r\n // L3-C: optional Prometheus scrape endpoint. Bound to 127.0.0.1 by\r\n // default — operators who want network-visible metrics set\r\n // METRICS_HOST=0.0.0.0 explicitly. Failure to bind is logged but does\r\n // not fail the run; the in-process sink keeps recording.\r\n if (metricsPort !== undefined && Number.isFinite(metricsPort)) {\r\n try {\r\n metricsServerHandle = await startMetricsServer({\r\n port: metricsPort,\r\n host: process.env.METRICS_HOST ?? '127.0.0.1',\r\n sink: metricsSink,\r\n // V2-C: mount /healthz on the same listener so k8s probes can\r\n // hit one endpoint per pod for both observability and liveness.\r\n healthRegistry,\r\n });\r\n logger.info(\r\n `metrics endpoint listening on ${metricsServerHandle.url} (healthz on same port)`,\r\n );\r\n process.on('exit', () => {\r\n void metricsServerHandle?.close().catch(() => {});\r\n });\r\n } catch (err) {\r\n logger.warn(\r\n `metrics endpoint failed to start: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Spinner: visible \"thinking…\" line during each model request.\r\n const spinner = new Spinner();\r\n // Track the latest provider request's input-token count so the spinner\r\n // can render a live context-window fullness bar (TUI parity).\r\n let lastInputTokens = 0;\r\n events.on('provider.response', (e) => {\r\n lastInputTokens = e.usage?.input ?? 0;\r\n updateSpinnerContext();\r\n });\r\n events.on('iteration.started', () => {\r\n updateSpinnerContext();\r\n spinner.start(color.dim(`${config.provider}/${config.model} thinking…`));\r\n });\r\n events.on('provider.response', () => {\r\n spinner.stop();\r\n });\r\n events.on('error', () => {\r\n spinner.stop();\r\n });\r\n\r\n // Live streaming output: first text_delta stops the spinner and starts\r\n // writing tokens directly so the user sees the model \"type\".\r\n let streamingActive = false;\r\n events.on('provider.text_delta', (p) => {\r\n if (!streamingActive) {\r\n spinner.stop();\r\n streamingActive = true;\r\n }\r\n renderer.write(p.text);\r\n });\r\n events.on('iteration.completed', () => {\r\n if (streamingActive) {\r\n renderer.write('\\n');\r\n streamingActive = false;\r\n }\r\n });\r\n\r\n // Provider hiccups — render a single friendly line instead of leaving the\r\n // raw JSON body in logger output. retry events show a countdown; error\r\n // events surface a final failure that won't be retried.\r\n events.on('provider.retry', (p) => {\r\n spinner.stop();\r\n if (streamingActive) {\r\n renderer.write('\\n');\r\n streamingActive = false;\r\n }\r\n const secs = (p.delayMs / 1000).toFixed(p.delayMs >= 1000 ? 1 : 2);\r\n process.stderr.write(color.yellow(` ⟳ retry ${p.attempt} in ${secs}s — ${p.description}\\n`));\r\n spinner.start(color.dim(`${config.provider}/${config.model} thinking…`));\r\n });\r\n events.on('provider.error', (p) => {\r\n spinner.stop();\r\n if (streamingActive) {\r\n renderer.write('\\n');\r\n streamingActive = false;\r\n }\r\n process.stderr.write(color.red(` ✗ ${p.description}\\n`));\r\n });\r\n\r\n // Provider instance — registry-driven by default, but falls through to\r\n // Build system prompt\r\n const promptBuilder = container.resolve(TOKENS.SystemPromptBuilder) as SystemPromptBuilder;\r\n const systemPrompt = await promptBuilder.build({\r\n cwd,\r\n projectRoot,\r\n tools: toolRegistry.list(),\r\n provider: config.provider,\r\n model: config.model,\r\n });\r\n\r\n // Session — extracted to wiring/session\r\n const sessionStore = container.resolve(TOKENS.SessionStore);\r\n const tokenCounter = container.resolve(TOKENS.TokenCounter);\r\n const sessResult = await setupSession({\r\n config: { model: config.model, provider: config.provider },\r\n wpaths,\r\n projectRoot,\r\n cwd,\r\n sessionStore,\r\n systemPrompt,\r\n provider,\r\n tokenCounter,\r\n renderer,\r\n flags,\r\n onRecovery: (abandoned, autoRecover) => promptRecovery(reader, renderer, abandoned, autoRecover),\r\n });\r\n const session = sessResult.session;\r\n sessionRef.current = session;\r\n const restoredMessages = sessResult.restoredMessages;\r\n const context = sessResult.context;\r\n const attachments = sessResult.attachments;\r\n const recoveryLock = sessResult.recoveryLock;\r\n const queueStore = sessResult.queueStore;\r\n const planPath = sessResult.planPath;\r\n const detachTodosCheckpoint = sessResult.detachTodosCheckpoint;\r\n\r\n const stats = new SessionStats(events, tokenCounter);\r\n\r\n // Last-N error ring buffer surfaced by /diag.\r\n const errorRing: { ts: string; phase: string; code: string; message: string }[] = [];\r\n events.on('error', (e) => {\r\n const err = e.err as unknown;\r\n const code =\r\n err && typeof err === 'object' && 'code' in err && typeof (err as { code: unknown }).code === 'string'\r\n ? (err as { code: string }).code\r\n : 'UNKNOWN';\r\n const message = e.err instanceof Error ? e.err.message : String(e.err);\r\n errorRing.push({ ts: new Date().toISOString(), phase: e.phase, code, message });\r\n if (errorRing.length > 5) errorRing.shift();\r\n });\r\n\r\n const pipelines = setupPipelines({ events, logger });\r\n const compactor = container.resolve(TOKENS.Compactor);\r\n const { effectiveMaxContext, autoCompactor } = await setupCompaction({ compactor, events, modelsRegistry, context, config, provider, pipelines });\r\n\r\n // Refresh AutoCompactionMiddleware denominator when the active model changes.\r\n const refreshMaxContext = async (providerId: string, modelId: string) => {\r\n if (!autoCompactor) return;\r\n const cap = await capabilitiesFor(modelsRegistry, providerId, modelId).catch(() => undefined);\r\n const mc = (cap as { maxContext?: number } | undefined)?.maxContext ?? config.context.effectiveMaxContext ?? 200_000;\r\n autoCompactor.setMaxContext(mc);\r\n };\r\n\r\n // Helper: keep the spinner's context chip in sync\r\n const updateSpinnerContext = () => {\r\n if (effectiveMaxContext > 0 && lastInputTokens > 0) {\r\n spinner.setContext({ used: lastInputTokens, max: effectiveMaxContext });\r\n } else spinner.setContext(undefined);\r\n };\r\n\r\n const agent = createAgent({ container, tools: toolRegistry, providers: providerRegistry, events, pipelines, context, config, confirmAwaiter: makeConfirmAwaiter(reader) });\r\n\r\n // MCP servers\r\n const mcpRegistry = new MCPRegistry({ toolRegistry, events, log: logger });\r\n if (config.features.mcp) {\r\n for (const cfg of Object.values(config.mcpServers ?? {})) {\r\n try {\r\n await mcpRegistry.start(cfg);\r\n } catch (err) {\r\n logger.warn(`MCP server \"${cfg.name}\" failed to start`, err);\r\n }\r\n }\r\n }\r\n\r\n // Slash registry — created before plugins so plugins can register commands.\r\n const slashRegistry = new SlashCommandRegistry();\r\n\r\n // Plugins\r\n if (config.features.plugins && config.plugins && config.plugins.length > 0) {\r\n const resolvedPlugins: Plugin[] = [];\r\n for (const p of config.plugins) {\r\n if (typeof p === 'object' && p.enabled === false) continue;\r\n const spec = typeof p === 'string' ? p : p.name;\r\n try {\r\n const mod = (await import(spec)) as { default?: Plugin };\r\n if (mod.default) resolvedPlugins.push(mod.default);\r\n } catch (err) {\r\n logger.warn(`Plugin \"${spec}\" failed to load`, err);\r\n }\r\n }\r\n if (resolvedPlugins.length > 0) {\r\n const { default: createApi } = await import('./plugin-api-factory.js');\r\n const pluginOptions = buildPluginOptions(config);\r\n const pluginConfig =\r\n Object.keys(pluginOptions).length > 0\r\n ? patchConfig(config, { extensions: pluginOptions } as Partial<Config>)\r\n : config;\r\n await loadPlugins(resolvedPlugins, {\r\n log: logger,\r\n // Each plugin's `configSchema` is validated against merged\r\n // options from `plugins[].options` and `extensions[name]`.\r\n // The merged view is also exposed as `api.config.extensions`.\r\n pluginOptions,\r\n apiFactory: (plugin) =>\r\n createApi(plugin.name, {\r\n container,\r\n events,\r\n pipelines: pipelines as unknown as Parameters<typeof createApi>[1]['pipelines'],\r\n toolRegistry,\r\n providerRegistry,\r\n slashCommandRegistry: slashRegistry,\r\n mcpRegistry,\r\n config: pluginConfig,\r\n log: logger,\r\n extensions: agent.extensions,\r\n sessionWriter: {\r\n transcriptPath: context.session.transcriptPath,\r\n append: (e: Record<string, unknown> & { type: string; ts: string }) =>\r\n context.session.append(e as Parameters<typeof context.session.append>[0]),\r\n },\r\n metricsSink,\r\n configStore,\r\n }),\r\n });\r\n }\r\n }\r\n\r\n // Build provider+model switch as a single callback. The TUI picker\r\n // calls this after the user confirms a (provider, model) pair; we\r\n // construct a fresh Provider instance, swap it onto the live context,\r\n // and rebuild the frozen config so other consumers see the new ids.\r\n const switchProviderAndModel = (providerId: string, modelId: string): string | null => {\r\n try {\r\n const savedCfg = config.providers?.[providerId];\r\n const resolvedProviderId = savedCfg?.type ?? providerId;\r\n const newCfg = savedCfg ?? {\r\n type: providerId,\r\n apiKey: config.apiKey,\r\n baseUrl: config.baseUrl,\r\n };\r\n const cfgWithType = { ...newCfg, type: resolvedProviderId };\r\n const newProvider =\r\n config.features.modelsRegistry && providerRegistry.has(resolvedProviderId)\r\n ? providerRegistry.create(cfgWithType)\r\n : makeProviderFromConfig(resolvedProviderId, cfgWithType);\r\n context.provider = newProvider;\r\n context.model = modelId;\r\n config = patchConfig(config, { provider: providerId, model: modelId });\r\n // L1-B: propagate the change to the ConfigStore so any subsystem\r\n // that subscribed via .watch() re-renders. Crucially, /diag now\r\n // reads the live provider via the store.\r\n configStore.update({ provider: providerId, model: modelId });\r\n // Refresh AutoCompactionMiddleware denominator for the new model's\r\n // maxContext so threshold triggers (warn/soft/hard) use the correct denominator.\r\n void refreshMaxContext(resolvedProviderId, modelId);\r\n return null;\r\n } catch (err) {\r\n return err instanceof Error ? err.message : String(err);\r\n }\r\n };\r\n\r\n // L1-E: lazily-instantiated multi-agent host. Wired into /spawn and\r\n // /agents slash commands; constructed on first invocation so users\r\n // who never spawn subagents pay nothing.\r\n //\r\n // `--director` upgrades the host to Director mode — same external API,\r\n // but task lifecycle flows through a `Director` so manifest writing\r\n // works and the FleetBus is available for observability hooks. Manifest\r\n // path defaults to `<projectSessions>/<sessionId>/fleet.json`; users can\r\n // override via `WRONGSTACK_FLEET_MANIFEST` if they want a fixed path.\r\n const directorMode = flags['director'] === true;\r\n let director: Director | null = null;\r\n // Autonomy mode: 'off' (default), 'suggest' (show next steps), 'auto' (self-driving)\r\n let autonomyMode: import('./slash-commands/autonomy.js').AutonomyMode = 'off';\r\n // Convention: director artifacts all live under the same fleet root —\r\n // <projectSessions>/<sessionId>/\r\n // ├─ fleet.json (manifest)\r\n // ├─ shared/ (cross-agent scratchpad)\r\n // └─ subagents/ (per-subagent JSONL transcripts)\r\n // The user can override the manifest path with WRONGSTACK_FLEET_MANIFEST\r\n // but the scratchpad + transcripts always sit relative to the session.\r\n const fleetRoot = directorMode ? path.join(wpaths.projectSessions, session.id) : undefined;\r\n const manifestPath = directorMode\r\n ? typeof process.env['WRONGSTACK_FLEET_MANIFEST'] === 'string'\r\n ? process.env['WRONGSTACK_FLEET_MANIFEST']\r\n : path.join(fleetRoot!, 'fleet.json')\r\n : undefined;\r\n const sharedScratchpadPath = directorMode ? path.join(fleetRoot!, 'shared') : undefined;\r\n const subagentSessionsRoot = directorMode ? path.join(fleetRoot!, 'subagents') : undefined;\r\n // Live director state checkpoint — written incrementally to disk on\r\n // every spawn/assign/complete event so a crashed director leaves a\r\n // recoverable snapshot. Distinct from manifestPath (final record).\r\n const stateCheckpointPath = directorMode\r\n ? path.join(fleetRoot!, 'director-state.json')\r\n : undefined;\r\n // Always derive a fleetRoot for runtime promotion — /director needs\r\n // a base dir to write manifest + scratchpad + per-subagent JSONLs into.\r\n const fleetRootForPromotion = path.join(wpaths.projectSessions, session.id);\r\n const multiAgentHost = new MultiAgentHost(\r\n {\r\n container,\r\n toolRegistry,\r\n providerRegistry,\r\n configStore,\r\n events,\r\n systemPromptBuilder: promptBuilder,\r\n session,\r\n tokenCounter,\r\n projectRoot,\r\n cwd,\r\n },\r\n {\r\n directorMode,\r\n manifestPath,\r\n sharedScratchpadPath,\r\n sessionsRoot: subagentSessionsRoot,\r\n directorRunId: session.id,\r\n fleetRoot: fleetRootForPromotion,\r\n stateCheckpointPath,\r\n sessionWriter: session,\r\n },\r\n );\r\n // ALWAYS register the `delegate` tool, even in non-director mode. It\r\n // auto-promotes the host to director mode on first call so the LLM\r\n // never has to know upfront whether multi-agent is \"on\" — it just\r\n // calls `delegate({ role, task })` when it judges a subtask warrants\r\n // a dedicated subagent. The system-prompt builder picks up this tool\r\n // and surfaces a \"Delegation\" section teaching the model when to use\r\n // it; without that block, the tool sits idle.\r\n toolRegistry.register(\r\n createDelegateTool({\r\n host: multiAgentHost,\r\n roster: FLEET_ROSTER,\r\n // Wire the per-subagent transcript location so the tool can\r\n // extract partial output on timeout / budget exhaustion. Without\r\n // this, a subagent that hit its iteration cap returns an empty\r\n // result and the host LLM has no idea what work was done.\r\n sessionsRoot: subagentSessionsRoot,\r\n directorRunId: session.id,\r\n }),\r\n );\r\n\r\n if (directorMode) {\r\n // Eagerly build the director so its 8 LLM-callable orchestration\r\n // tools (`spawn_subagent`, `assign_task`, `await_tasks`,\r\n // `ask_subagent`, `roll_up`, `terminate_subagent`, `fleet_status`,\r\n // `fleet_usage`) get registered into the leader's ToolRegistry\r\n // *before* the agent starts streaming. Without this the leader has\r\n // no way to discover the fleet surface and `--director` ends up as\r\n // a manifest-only flag with no orchestration. Pass `FLEET_ROSTER`\r\n // so `spawn_subagent` can accept `role: 'bug-hunter'` shortcuts.\r\n director = await multiAgentHost.ensureDirector();\r\n if (director) {\r\n for (const tool of director.tools(FLEET_ROSTER)) {\r\n toolRegistry.register(tool);\r\n }\r\n renderer.writeInfo(`Director mode enabled. Roster: ${Object.keys(FLEET_ROSTER).join(', ')}`);\r\n renderer.writeInfo(` fleet root → ${fleetRoot}`);\r\n renderer.writeInfo(` manifest → ${manifestPath}`);\r\n renderer.writeInfo(` scratchpad → ${sharedScratchpadPath}`);\r\n renderer.writeInfo(` subagents → ${subagentSessionsRoot}`);\r\n } else {\r\n renderer.writeInfo(`Director mode enabled. Fleet manifest → ${manifestPath}`);\r\n }\r\n }\r\n\r\n // Shared controller for the `/fleet stream on|off` toggle. The TUI\r\n // replaces `setEnabled` with a dispatch-backed setter on mount; before\r\n // that the no-op setter just keeps `enabled` in sync so callers see a\r\n // stable view even when invoked from a non-TUI surface.\r\n const fleetStreamController = {\r\n enabled: true,\r\n setEnabled(enabled: boolean) {\r\n this.enabled = enabled;\r\n },\r\n };\r\n\r\n const slashCmds = buildBuiltinSlashCommands({\r\n registry: slashRegistry,\r\n toolRegistry,\r\n compactor: container.resolve(TOKENS.Compactor),\r\n sessionStore,\r\n skillLoader,\r\n tokenCounter,\r\n renderer,\r\n memoryStore,\r\n context,\r\n metricsSink,\r\n healthRegistry,\r\n planPath,\r\n modeStore,\r\n fleetStreamController,\r\n onSpawn: async (description, spawnOpts) => {\r\n const { subagentId, taskId } = await multiAgentHost.spawn(description, spawnOpts);\r\n const tags: string[] = [];\r\n if (spawnOpts?.provider) tags.push(spawnOpts.provider);\r\n if (spawnOpts?.model) tags.push(spawnOpts.model);\r\n if (spawnOpts?.name) tags.push(`\"${spawnOpts.name}\"`);\r\n const tag = tags.length > 0 ? ` (${tags.join(' / ')})` : '';\r\n return `Spawned subagent ${subagentId}${tag} for task ${taskId}. Use /agents to track progress.`;\r\n },\r\n onAgents: () => {\r\n const s = multiAgentHost.status();\r\n const lines = [s.summary];\r\n const STATUS_ICON: Record<string, string> = {\r\n running: '●',\r\n idle: '○',\r\n stopped: '⊘',\r\n };\r\n for (const a of s.live) {\r\n if (a.status === 'running' || a.status === 'idle') {\r\n const task = a.task ? ` — ${a.task.slice(0, 60)}` : '';\r\n lines.push(` ${STATUS_ICON[a.status] ?? '?'} ${a.subagentId.slice(0, 8)} ${a.status}${task}`);\r\n }\r\n }\r\n for (const p of s.pending) {\r\n lines.push(` · pending ${p.taskId.slice(0, 8)} → ${p.description.slice(0, 60)}`);\r\n }\r\n for (const r of s.completed) {\r\n const fmt = fmtTaskResultLine(r, color);\r\n lines.push(` ${fmt.mark} ${r.taskId.slice(0, 8)} ${fmt.stats}${fmt.tail}`);\r\n }\r\n return lines.join('\\n');\r\n },\r\n onFleet: async (action, target) => {\r\n if (action === 'status') {\r\n const s = multiAgentHost.status();\r\n const lines = [color.bold('Fleet status'), ` ${s.summary}`];\r\n const STATUS_ICON: Record<string, string> = {\r\n running: '●',\r\n idle: '○',\r\n stopped: '⊘',\r\n };\r\n const liveActive = s.live.filter((a) => a.status === 'running' || a.status === 'idle');\r\n if (liveActive.length > 0) {\r\n lines.push('', color.dim(' Active'));\r\n for (const a of liveActive) {\r\n const task = a.task ? ` · ${a.task.slice(0, 50)}` : '';\r\n lines.push(\r\n ` ${STATUS_ICON[a.status] ?? '?'} ${a.subagentId.slice(0, 8)} ${a.status}${task}`,\r\n );\r\n }\r\n }\r\n if (s.pending.length > 0) {\r\n lines.push('', color.dim(' Pending'));\r\n for (const p of s.pending) {\r\n lines.push(\r\n ` · ${p.taskId.slice(0, 8)} → ${p.subagentId.slice(0, 8)} · ${p.description.slice(0, 60)}`,\r\n );\r\n }\r\n }\r\n if (s.completed.length > 0) {\r\n lines.push('', color.dim(' Completed'));\r\n for (const r of s.completed) {\r\n const fmt = fmtTaskResultLine(r, color);\r\n lines.push(\r\n ` ${fmt.mark} ${r.taskId.slice(0, 8)} → ${r.subagentId.slice(0, 8)} · ${fmt.stats}${fmt.tail}`,\r\n );\r\n }\r\n }\r\n return lines.join('\\n');\r\n }\r\n if (action === 'usage') {\r\n const u = multiAgentHost.usage();\r\n if (u.rows.length === 0) return 'No completed subagent tasks yet.';\r\n const lines = [\r\n color.bold('Fleet usage'),\r\n color.dim(' subagent tasks iter tools ms status'),\r\n ];\r\n for (const r of u.rows) {\r\n lines.push(\r\n ` ${r.subagentId.slice(0, 14).padEnd(14)} ${String(r.tasks).padStart(5)} ${String(r.iterations).padStart(4)} ${String(r.toolCalls).padStart(5)} ${String(r.durationMs).padStart(5)} ${r.status}`,\r\n );\r\n }\r\n lines.push(\r\n color.dim(' ─'.repeat(28)),\r\n ` ${'TOTAL'.padEnd(14)} ${String(u.totals.tasks).padStart(5)} ${String(u.totals.iterations).padStart(4)} ${String(u.totals.toolCalls).padStart(5)} ${String(u.totals.durationMs).padStart(5)}`,\r\n );\r\n return lines.join('\\n');\r\n }\r\n if (action === 'kill') {\r\n if (!target) return 'Usage: /fleet kill <subagent-id>';\r\n const ok = await multiAgentHost.kill(target);\r\n return ok\r\n ? `Sent stop signal to ${target}.`\r\n : 'No coordinator is running yet — nothing to kill.';\r\n }\r\n if (action === 'manifest') {\r\n if (!multiAgentHost.isDirectorMode()) {\r\n return 'Manifest is only available when the run was started with --director.';\r\n }\r\n const p = await multiAgentHost.manifest();\r\n if (!p) {\r\n return 'Director is active but no subagents have been spawned — nothing to record yet.';\r\n }\r\n return `Manifest written → ${p}`;\r\n }\r\n return `Unknown fleet action: ${action}`;\r\n },\r\n onFleetLog: async (subagentId, mode) => {\r\n // Per-subagent JSONLs live under <fleetRoot>/subagents/<runId>/<subagentId>.jsonl\r\n // and the runId is namespace-stable (session id by default), so we\r\n // walk the subagents dir to discover both runs and subagents.\r\n const subagentsRoot = path.join(fleetRootForPromotion, 'subagents');\r\n let runDirs: string[];\r\n try {\r\n runDirs = await fs.readdir(subagentsRoot);\r\n } catch {\r\n return 'No fleet transcripts on disk — no subagents have been spawned for this session.';\r\n }\r\n // Collect every transcript across every run-dir for this session.\r\n const found: Array<{ runId: string; subagentId: string; file: string; size: number }> = [];\r\n for (const runId of runDirs) {\r\n const runDir = path.join(subagentsRoot, runId);\r\n let files: string[];\r\n try {\r\n files = await fs.readdir(runDir);\r\n } catch {\r\n continue;\r\n }\r\n for (const f of files) {\r\n if (!f.endsWith('.jsonl')) continue;\r\n const full = path.join(runDir, f);\r\n try {\r\n const stat = await fs.stat(full);\r\n found.push({\r\n runId,\r\n subagentId: f.replace(/\\.jsonl$/, ''),\r\n file: full,\r\n size: stat.size,\r\n });\r\n } catch {\r\n // skip\r\n }\r\n }\r\n }\r\n if (found.length === 0) {\r\n return 'No subagent transcripts found on disk.';\r\n }\r\n // Listing mode (no id provided).\r\n if (!subagentId) {\r\n const lines = [\r\n `${found.length} subagent transcript${found.length === 1 ? '' : 's'} on disk:`,\r\n ];\r\n for (const t of found) {\r\n lines.push(\r\n ` ${color.cyan(t.subagentId.padEnd(18))} ${color.dim(t.runId.slice(0, 18))} ${color.dim(`${(t.size / 1024).toFixed(1)} KB`)}`,\r\n );\r\n }\r\n lines.push('Use `/fleet log <subagentId>` for a summary, or append `raw` for the full JSONL.');\r\n return lines.join('\\n');\r\n }\r\n // Match by exact id or prefix; ambiguous matches return the list.\r\n const matches = found.filter(\r\n (t) => t.subagentId === subagentId || t.subagentId.startsWith(subagentId),\r\n );\r\n if (matches.length === 0) {\r\n return `No transcript matched \"${subagentId}\". Run \\`/fleet log\\` to list available ids.`;\r\n }\r\n if (matches.length > 1) {\r\n return [\r\n `Ambiguous id \"${subagentId}\" — ${matches.length} matches:`,\r\n ...matches.map((m) => ` ${m.subagentId} (${m.runId})`),\r\n ].join('\\n');\r\n }\r\n const t = matches[0]!;\r\n const raw = await fs.readFile(t.file, 'utf8');\r\n if (mode === 'raw') return raw;\r\n\r\n // Summary: walk JSONL events, count types, list the first user/llm\r\n // pair + the last few iterations. Designed to fit in one terminal\r\n // screen even for verbose transcripts.\r\n const lines = raw.split('\\n').filter((l) => l.trim());\r\n const counts: Record<string, number> = {};\r\n let firstUser: string | null = null;\r\n let lastResponse: string | null = null;\r\n let totalIterations = 0;\r\n const toolNames = new Map<string, number>();\r\n for (const line of lines) {\r\n try {\r\n const ev = JSON.parse(line) as { type: string; content?: unknown; name?: string };\r\n counts[ev.type] = (counts[ev.type] ?? 0) + 1;\r\n if (ev.type === 'user_input' && !firstUser) {\r\n const txt =\r\n typeof ev.content === 'string'\r\n ? ev.content\r\n : Array.isArray(ev.content)\r\n ? ev.content\r\n .filter((b): b is { type: 'text'; text: string } => (b as { type?: string }).type === 'text')\r\n .map((b) => b.text)\r\n .join(' ')\r\n : '';\r\n firstUser = txt.slice(0, 120);\r\n }\r\n if (ev.type === 'llm_response') {\r\n if (Array.isArray(ev.content)) {\r\n const txt = (ev.content as Array<{ type?: string; text?: string }>)\r\n .filter((b) => b.type === 'text')\r\n .map((b) => b.text ?? '')\r\n .join(' ');\r\n if (txt) lastResponse = txt.slice(0, 240);\r\n }\r\n totalIterations += 1;\r\n }\r\n if (ev.type === 'tool_use' && typeof ev.name === 'string') {\r\n toolNames.set(ev.name, (toolNames.get(ev.name) ?? 0) + 1);\r\n }\r\n } catch {\r\n // skip malformed\r\n }\r\n }\r\n const toolBreakdown =\r\n toolNames.size > 0\r\n ? Array.from(toolNames.entries())\r\n .sort((a, b) => b[1] - a[1])\r\n .map(([n, c]) => `${n}×${c}`)\r\n .join(', ')\r\n : '(none)';\r\n const out: string[] = [\r\n color.bold(`Subagent ${t.subagentId}`) + color.dim(` (run ${t.runId})`),\r\n ` ${lines.length} events · ${totalIterations} llm iterations · ${(t.size / 1024).toFixed(1)} KB`,\r\n ` tools: ${toolBreakdown}`,\r\n ];\r\n if (firstUser) out.push('', color.dim(' task:'), ` ${firstUser}`);\r\n if (lastResponse) out.push('', color.dim(' last response:'), ` ${lastResponse}`);\r\n out.push('', color.dim(' event mix:'));\r\n for (const [type, count] of Object.entries(counts).sort((a, b) => b[1] - a[1])) {\r\n out.push(` ${type.padEnd(20)} ${count}`);\r\n }\r\n out.push('', color.dim('Use `/fleet log <id> raw` for the full JSONL.'));\r\n return out.join('\\n');\r\n },\r\n onFleetRetry: async (taskId) => {\r\n if (!multiAgentHost.isDirectorMode()) {\r\n const promoted = await multiAgentHost.promoteToDirector();\r\n if (!promoted) {\r\n return 'Cannot retry: a coordinator already exists in non-director mode.';\r\n }\r\n for (const tool of promoted.tools(FLEET_ROSTER)) {\r\n toolRegistry.register(tool);\r\n }\r\n }\r\n const dir = await multiAgentHost.ensureDirector();\r\n if (!dir) return 'Director is not available.';\r\n const dirStatePath = path.join(fleetRootForPromotion, 'director-state.json');\r\n const prior = await loadDirectorState(dirStatePath);\r\n if (!prior) {\r\n return 'No prior director-state.json found — nothing to retry.';\r\n }\r\n // \"Interrupted\" = whatever was running/pending when the previous\r\n // process died. Completed/failed/timeout/stopped tasks are final.\r\n const interrupted = prior.tasks.filter(\r\n (t) => t.status === 'running' || t.status === 'pending',\r\n );\r\n if (interrupted.length === 0) {\r\n return 'No interrupted tasks: every prior task reached a terminal state.';\r\n }\r\n\r\n // List mode — no target given.\r\n if (!taskId) {\r\n const lines = [\r\n `${interrupted.length} interrupted task${interrupted.length === 1 ? '' : 's'} from prior run:`,\r\n ];\r\n for (const t of interrupted) {\r\n const owner = t.subagentId\r\n ? prior.subagents.find((s) => s.id === t.subagentId)\r\n : undefined;\r\n const tag = owner ? `${owner.name ?? owner.id} (${owner.role ?? 'no-role'})` : 'no-owner';\r\n lines.push(\r\n ` ${t.taskId.slice(0, 12)} ${t.status.padEnd(8)} ${tag} ${(t.description ?? '').slice(0, 60)}`,\r\n );\r\n }\r\n lines.push('Run `/fleet retry <taskId>` or `/fleet retry all` to re-assign.');\r\n return lines.join('\\n');\r\n }\r\n\r\n const targets =\r\n taskId === 'all'\r\n ? interrupted\r\n : interrupted.filter(\r\n (t) => t.taskId === taskId || t.taskId.startsWith(taskId),\r\n );\r\n if (targets.length === 0) {\r\n return `No interrupted task matched \"${taskId}\".`;\r\n }\r\n\r\n const results: string[] = [];\r\n for (const t of targets) {\r\n const owner = t.subagentId\r\n ? prior.subagents.find((s) => s.id === t.subagentId)\r\n : undefined;\r\n if (!owner) {\r\n results.push(` - ${t.taskId.slice(0, 12)}: no owner record, skipped.`);\r\n continue;\r\n }\r\n // Re-spawn from the roster when role is set (preferred path —\r\n // role-based spawns get their full prompt/tool slice). Otherwise\r\n // synthesize a minimal SubagentConfig from the prior record.\r\n const rosterCfg = owner.role ? FLEET_ROSTER[owner.role] : undefined;\r\n const cfg = rosterCfg\r\n ? { ...rosterCfg }\r\n : {\r\n name: owner.name ?? owner.id,\r\n role: owner.role,\r\n provider: owner.provider,\r\n model: owner.model,\r\n };\r\n try {\r\n const newSubId = await dir.spawn(cfg);\r\n const newTaskId = await dir.assign({\r\n id: '',\r\n description: t.description ?? '(no description)',\r\n subagentId: newSubId,\r\n });\r\n results.push(\r\n ` ${color.green('✓')} ${t.taskId.slice(0, 12)} → re-spawned ${newSubId.slice(0, 12)} (task ${newTaskId.slice(0, 12)})`,\r\n );\r\n } catch (err) {\r\n results.push(\r\n ` ${color.red('✗')} ${t.taskId.slice(0, 12)} → ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n }\r\n return [`Retried ${targets.length} task${targets.length === 1 ? '' : 's'}:`, ...results].join(\r\n '\\n',\r\n );\r\n },\r\n onDirector: async () => {\r\n const director = await multiAgentHost.promoteToDirector();\r\n if (!director) return null;\r\n // Register the 8 LLM-callable orchestration tools into the leader's\r\n // ToolRegistry so the agent can discover fleet surface mid-session.\r\n for (const tool of director.tools(FLEET_ROSTER)) {\r\n toolRegistry.register(tool);\r\n }\r\n const mp = path.join(fleetRootForPromotion, 'fleet.json');\r\n const sp = path.join(fleetRootForPromotion, 'shared');\r\n const ss = path.join(fleetRootForPromotion, 'subagents');\r\n const lines = [\r\n `${color.green('✓')} Promoted to director mode.`,\r\n ` Roster: ${Object.keys(FLEET_ROSTER).join(', ')}`,\r\n ` Manifest → ${mp}`,\r\n ` Scratchpad → ${sp}`,\r\n ` Subagents → ${ss}`,\r\n ];\r\n return lines.join('\\n');\r\n },\r\n onPlugin: async (args) => {\r\n const parsed = args.length === 0 ? [] : args.split(/\\s+/).filter(Boolean);\r\n const result = await runPluginManagementCommand(parsed, {\r\n config,\r\n configPath: wpaths.globalConfig,\r\n });\r\n if (result.patch) {\r\n const patch = result.patch as Partial<Config>;\r\n config = patchConfig(config, patch);\r\n configStore.update(patch);\r\n }\r\n if (result.restartRequired && result.code === 0) {\r\n return `${result.message}\\nRestart WrongStack to load or unload plugin code in this session.`;\r\n }\r\n return result.message;\r\n },\r\n onYolo: (setTo?: boolean) => {\r\n const policy = container.resolve(TOKENS.PermissionPolicy) as DefaultPermissionPolicy;\r\n if (setTo !== undefined) {\r\n policy.setYolo(setTo);\r\n config = patchConfig(config, { yolo: setTo });\r\n return setTo;\r\n }\r\n return policy.getYolo();\r\n },\r\n onAutonomy: (setTo?) => {\r\n if (setTo !== undefined) {\r\n autonomyMode = setTo;\r\n return setTo;\r\n }\r\n return autonomyMode;\r\n },\r\n onExit: () => {\r\n void mcpRegistry.stopAll();\r\n },\r\n onClear: () => {\r\n // In TUI mode Ink owns the live area; writing `\\x1b[2J` here would\r\n // fight Ink's cursor math and leave the status bar smeared. The\r\n // context/memory reset inside /clear is enough — the user can\r\n // scroll up to see prior turns in scrollback. In REPL we erase\r\n // the visible screen + scrollback (`\\x1b[3J`) so the next prompt\r\n // starts on a fresh terminal.\r\n if (flags.tui && !flags['no-tui']) return;\r\n try {\r\n process.stdout.write('\\x1b[2J\\x1b[3J\\x1b[H');\r\n } catch {\r\n // stdout may be closed during shutdown — ignore.\r\n }\r\n },\r\n onDiag: () => {\r\n const u = tokenCounter.total();\r\n const cost = tokenCounter.estimateCost();\r\n const errSection =\r\n errorRing.length === 0\r\n ? []\r\n : [\r\n '',\r\n `${color.bold('Recent errors')} (last ${errorRing.length}):`,\r\n ...errorRing.map((e) => ` [${e.ts}] ${e.phase} ${e.code} — ${e.message}`),\r\n ];\r\n // Read current provider from the ConfigStore so /diag always shows\r\n // the live value, even if /model swapped it mid-session (L1-B).\r\n const liveCfg = configStore.get();\r\n return [\r\n `${color.bold('WrongStack diag')}`,\r\n ` provider: ${liveCfg.provider} / ${context.model}`,\r\n ` projectRoot: ${projectRoot}`,\r\n ` tokens: in ${u.input} out ${u.output} cacheR ${u.cacheRead ?? 0}`,\r\n ` cost: $${cost.total.toFixed(4)}`,\r\n ` tools: ${toolRegistry.list().length}`,\r\n ` mcpServers: ${mcpRegistry.list().length}`,\r\n ...errSection,\r\n ].join('\\n');\r\n },\r\n onStats: () => stats.format(),\r\n });\r\n for (const cmd of slashCmds) slashRegistry.register(cmd);\r\n\r\n // Dispatch to execution phase — single-shot, TUI, REPL, or WebUI.\r\n const savedProviderCfg = config.providers?.[config.provider];\r\n return execute({\r\n agent,\r\n events,\r\n slashRegistry,\r\n attachments,\r\n tokenCounter,\r\n config,\r\n renderer,\r\n reader,\r\n session,\r\n mcpRegistry,\r\n recoveryLock,\r\n wpaths,\r\n modelsRegistry,\r\n projectRoot,\r\n flags,\r\n positional,\r\n effectiveMaxContext,\r\n queueStore,\r\n context,\r\n stats,\r\n detachTodosCheckpoint,\r\n savedProviderCfg: savedProviderCfg as ExecutionDeps['savedProviderCfg'],\r\n resolvedProvider: resolvedProvider ?? undefined,\r\n getPickableProviders: () => buildPickableProviders(modelsRegistry, config),\r\n switchProviderAndModel,\r\n director: director ?? null,\r\n fleetRoster: FLEET_ROSTER as Record<string, { name: string }>,\r\n fleetStreamController,\r\n getYolo: () => {\r\n const policy = container.resolve(TOKENS.PermissionPolicy) as DefaultPermissionPolicy;\r\n return policy.getYolo();\r\n },\r\n getAutonomy: () => autonomyMode,\r\n skillLoader: config.features.skills ? skillLoader : undefined,\r\n });\r\n}\r\n\r\n/**\r\n * Prompt the user about an abandoned session. The lockfile lifecycle\r\n * guarantees we only get here when the previous instance died without\r\n * writing `session_end` AND there's real work on disk (≥1 message).\r\n *\r\n * `--recover` short-circuits to \"resume\" without asking; piped/non-TTY\r\n * input degrades to the same — the alternative is hanging on stdin or\r\n * forcing the user to remember a flag they never typed.\r\n */\r\nasync function promptRecovery(\r\n reader: ReadlineInputReader,\r\n renderer: TerminalRenderer,\r\n abandoned: import('@wrongstack/core').AbandonedSession,\r\n autoRecover: boolean,\r\n): Promise<'resume' | 'delete' | 'skip'> {\r\n const minutes = Math.round(abandoned.ageMs / 60_000);\r\n const ageLabel =\r\n minutes < 1\r\n ? `${Math.round(abandoned.ageMs / 1000)}s ago`\r\n : minutes < 60\r\n ? `${minutes} min ago`\r\n : `${Math.round(minutes / 60)}h ago`;\r\n const summary = `Previous session was killed mid-run: ${abandoned.sessionId} (${abandoned.messageCount} messages, ${ageLabel}).`;\r\n if (autoRecover) {\r\n renderer.writeInfo(`${summary} Auto-resuming (--recover).`);\r\n return 'resume';\r\n }\r\n if (!process.stdin.isTTY) {\r\n renderer.writeInfo(\r\n `${summary} Non-interactive — leaving as-is. Use \\`wstack resume ${abandoned.sessionId}\\` or pass \\`--recover\\` to auto-resume.`,\r\n );\r\n return 'skip';\r\n }\r\n renderer.writeInfo(summary);\r\n const answer = await reader.readKey(\r\n `${color.amber('?')} Recover it? ${color.dim('[')}${color.bold('Y')}es / ${color.bold('n')}o / ${color.bold('d')}elete${color.dim(']')} `,\r\n [\r\n { key: 'y', label: 'yes', value: 'resume' },\r\n { key: 'Y', label: 'yes', value: 'resume' },\r\n { key: '\\r', label: 'yes', value: 'resume' },\r\n { key: '\\n', label: 'yes', value: 'resume' },\r\n { key: 'n', label: 'no', value: 'skip' },\r\n { key: 'N', label: 'no', value: 'skip' },\r\n { key: 'd', label: 'delete', value: 'delete' },\r\n { key: 'D', label: 'delete', value: 'delete' },\r\n ],\r\n );\r\n return answer as 'resume' | 'delete' | 'skip';\r\n}\r\n\r\nconst isMain =\r\n import.meta.url === `file://${process.argv[1]?.replace(/\\\\/g, '/')}` ||\r\n process.argv[1]?.endsWith('/cli/dist/index.js') ||\r\n process.argv[1]?.endsWith('\\\\cli\\\\dist\\\\index.js');\r\nif (isMain) {\r\n main(process.argv.slice(2)).then(\r\n (c) => {\r\n // Set exitCode and let Node drain async handles (undici TLS, log file\r\n // flushes) naturally. Force-exit after a brief grace period so we don't\r\n // hang if a plugin or MCP server leaks. Avoids libuv UV_HANDLE_CLOSING\r\n // assertions seen on Windows when process.exit() races with handle teardown.\r\n process.exitCode = c;\r\n setTimeout(() => process.exit(c), 200).unref();\r\n },\r\n (err) => {\r\n process.stderr.write((err instanceof Error ? err.stack : String(err)) + '\\n');\r\n process.exitCode = 1;\r\n setTimeout(() => process.exit(1), 200).unref();\r\n },\r\n );\r\n}\r\n"]}
1
+ {"version":3,"sources":["../src/slash-commands/sdd.ts","../src/provider-config-utils.ts","../src/webui-server.ts","../src/plugin-api-factory.ts","../src/arg-parser.ts","../src/boot-config.ts","../src/input-reader.ts","../src/provider-helpers.ts","../src/picker.ts","../src/slash-commands/helpers.ts","../src/slash-commands/clear.ts","../src/slash-commands/commit.ts","../src/slash-commands/compact.ts","../src/slash-commands/context.ts","../src/slash-commands/diag-stats.ts","../src/slash-commands/fleet.ts","../src/slash-commands/health.ts","../src/slash-commands/help.ts","../src/slash-commands/init.ts","../src/slash-commands/memory.ts","../src/slash-commands/metrics.ts","../src/slash-commands/plan.ts","../src/slash-commands/plugin.ts","../src/slash-commands/session.ts","../src/slash-commands/skill.ts","../src/slash-commands/spawn-agents.ts","../src/slash-commands/todos.ts","../src/slash-commands/tools.ts","../src/slash-commands/yolo.ts","../src/slash-commands/autonomy.ts","../src/slash-commands/mode.ts","../src/slash-commands/index.ts","../src/slash-commands/skill-generator.ts","../src/slash-commands/skill-install.ts","../src/pre-launch.ts","../src/diff-renderer.ts","../src/theme.ts","../src/renderer.ts","../src/auth-menu.ts","../src/subcommands/handlers/auth.ts","../src/version.ts","../src/subcommands/handlers/diag-doctor.ts","../src/subcommands/handlers/export.ts","../src/subcommands/handlers/init.ts","../src/subcommands/handlers/mcp.ts","../src/plugin-management.ts","../src/subcommands/handlers/plugin-usage.ts","../src/subcommands/handlers/projects.ts","../src/subcommands/handlers/providers-models.ts","../src/subcommands/handlers/helpers.ts","../src/subcommands/handlers/sessions-config.ts","../src/subcommands/handlers/rewind.ts","../src/subcommands/handlers/tools-skills.ts","../src/subcommands/handlers/version-help.ts","../src/subcommands/index.ts","../src/utils.ts","../src/boot.ts","../src/repl.ts","../src/execution.ts","../src/multi-agent.ts","../src/permission-prompt.ts","../src/session-stats.ts","../src/spinner.ts","../src/wiring/pipeline.ts","../src/wiring/provider.ts","../src/wiring/session.ts","../src/index.ts"],"names":["path5","projectContext","color","resolve","req","fs13","path14","DefaultSecretVault","decryptConfigSecrets","encryptConfigSecrets","atomicWrite","path","os","fs","path2","os2","fs2","fs3","path3","summary","msg","policy","path4","fs4","labels","path6","os3","installer","path7","answer","spawn","theme","baseUrl","fs6","fs7","path8","fs8","path9","fs9","path10","detected","fs10","fs11","path11","fs12","resolveWstackPaths","path12","os5","createRequire","path13","runCtrl","sddPhase","pct","getActiveSDDContext","trySaveSpecFromAIOutput","trySaveImplementationPlan","trySaveTasksFromAIOutput","autoDetectTaskCompletion","getTaskProgress","getActiveSDDPhase","runWebUI","path15","randomUUID","path16","taskId","FILLED","EMPTY","renderContextChip","renderProgress","createDefaultPipelines","capabilitiesFor","Agent","makeProviderFromConfig","path17","Context","loadPlan","resolveBundledSkillsDir","DefaultPathResolver","createDefaultContainer","TOKENS","ToolRegistry","builtinToolsPack","EventBus","fs14","createApi","stat","lines","t","loadDirectorState","director","cwd"],"mappings":"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","file":"index.js","sourcesContent":["import * as path from 'node:path';\nimport type { SlashCommand, SpecRequirement } from '@wrongstack/core';\nimport {\n SpecParser,\n SpecStore,\n TaskGraphStore,\n AISpecBuilder,\n SpecVersioning,\n analyzeCriticalPath,\n renderTaskGraph,\n renderTaskList,\n renderSpecAnalysis,\n listTemplates,\n templateToMarkdown,\n getTemplate,\n TaskGenerator,\n TaskTracker,\n TaskFlow,\n DefaultTaskStore,\n type SpecIndexEntry,\n type TaskGraphIndexEntry,\n type SpecVersion,\n type AISpecPhase,\n} from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\n/** Active AI spec builder session held in memory. */\nlet activeBuilder: AISpecBuilder | null = null;\n\n/** Active task graph and tracker for the current SDD session. */\nlet activeTaskStore: DefaultTaskStore | null = null;\nlet activeTaskTracker: TaskTracker | null = null;\nlet activeTaskGraphId: string | null = null;\n\n/**\n * Get the active SDD session context for injection into the AI conversation.\n * Returns null if no active session. Called by the REPL before agent.run().\n */\nexport function getActiveSDDContext(): string | null {\n if (!activeBuilder) return null;\n const session = activeBuilder.getSession();\n if (session.phase === 'done') return null;\n\n return activeBuilder.getAIPrompt();\n}\n\n/**\n * Get the active SDD session phase. Returns null if no active session.\n */\nexport function getActiveSDDPhase(): AISpecPhase | null {\n if (!activeBuilder) return null;\n return activeBuilder.getPhase();\n}\n\n/**\n * Parse a spec from AI output text and save it to the active session.\n * Returns true if a spec was found and saved.\n */\nexport async function trySaveSpecFromAIOutput(aiOutput: string): Promise<boolean> {\n if (!activeBuilder) return false;\n const spec = activeBuilder.tryParseSpecFromOutput(aiOutput);\n if (!spec) return false;\n activeBuilder.setSpec(spec);\n return true;\n}\n\n/**\n * Parse tasks from AI output and save them to the task graph.\n * Returns true if tasks were found and saved.\n */\nexport async function trySaveTasksFromAIOutput(aiOutput: string): Promise<boolean> {\n if (!activeBuilder) return false;\n const session = activeBuilder.getSession();\n if (!session.spec) return false;\n\n const json = activeBuilder.extractJSONArray(aiOutput);\n if (!json) return false;\n\n let tasks: Array<Record<string, unknown>>;\n try {\n tasks = JSON.parse(json);\n } catch {\n return false;\n }\n\n if (!Array.isArray(tasks) || tasks.length === 0) return false;\n\n // Validate each task has at least a title\n const validTasks = tasks.filter(t => t && typeof t === 'object' && typeof t.title === 'string' && t.title.length > 0);\n if (validTasks.length === 0) return false;\n\n // Create task graph from parsed tasks\n const store = new DefaultTaskStore();\n const tracker = new TaskTracker({ store });\n const graph = await tracker.createGraph(session.spec.id, session.spec.title);\n\n for (const task of validTasks) {\n const title = String(task.title);\n const description = String(task.description ?? '');\n const type = (['feature', 'bugfix', 'refactor', 'docs', 'test', 'chore']\n .includes(String(task.type)) ? String(task.type) : 'feature') as 'feature' | 'bugfix' | 'refactor' | 'docs' | 'test' | 'chore';\n const priority = (['critical', 'high', 'medium', 'low']\n .includes(String(task.priority)) ? String(task.priority) : 'medium') as 'critical' | 'high' | 'medium' | 'low';\n const estimateHours = Number(task.estimateHours) || 2;\n const tags = Array.isArray(task.tags) ? task.tags.map(String) : [];\n\n tracker.addNode({\n title,\n description,\n type,\n priority,\n status: 'pending',\n estimateHours,\n tags,\n });\n }\n\n activeTaskStore = store;\n activeTaskTracker = tracker;\n activeTaskGraphId = graph.id;\n\n // Save task graph ID to session for persistence\n activeBuilder.setTaskGraphId(graph.id);\n\n return true;\n}\n\n/**\n * Get the current task progress. Returns null if no tasks.\n */\nexport function getTaskProgress(): { total: number; completed: number; pending: number; percent: number } | null {\n if (!activeTaskTracker) return null;\n const progress = activeTaskTracker.getProgress();\n return {\n total: progress.total,\n completed: progress.completed,\n pending: progress.pending,\n percent: progress.percentComplete,\n };\n}\n\n/**\n * Get the current task list as text for AI context.\n */\nexport function getTaskListText(): string | null {\n if (!activeTaskTracker) return null;\n const nodes = activeTaskTracker.getAllNodes();\n if (nodes.length === 0) return null;\n\n const lines = nodes.map((n, i) => {\n const status = n.status === 'completed' ? '✅' : n.status === 'in_progress' ? '🔄' : '⏳';\n return `${i + 1}. ${status} [${n.priority}] ${n.title}`;\n });\n\n return lines.join('\\n');\n}\n\n/**\n * Mark a task as completed by title (fuzzy match).\n * Returns true if a task was found and marked.\n */\nexport function markTaskCompleted(taskTitle: string): boolean {\n if (!activeTaskTracker) return false;\n const nodes = activeTaskTracker.getAllNodes({ status: ['pending', 'in_progress'] });\n const match = nodes.find(n =>\n n.title.toLowerCase().includes(taskTitle.toLowerCase()) ||\n taskTitle.toLowerCase().includes(n.title.toLowerCase())\n );\n if (!match) return false;\n activeTaskTracker.updateNodeStatus(match.id, 'completed');\n return true;\n}\n\n/**\n * Auto-detect task completion patterns in AI output and mark tasks.\n * Returns the number of tasks marked as completed.\n *\n * Patterns detected:\n * - \"Task N: complete\" / \"Task N complete\" / \"Task N done\"\n * - \"✅ Task: <title>\" / \"✅ <title>\"\n * - \"/sdd done N\" / \"/sdd done <title>\"\n * - \"Completed: <title>\" / \"Done: <title>\"\n */\nexport function autoDetectTaskCompletion(aiOutput: string): number {\n if (!activeTaskTracker) return 0;\n const pending = activeTaskTracker.getAllNodes({ status: ['pending', 'in_progress'] });\n if (pending.length === 0) return 0;\n\n let completed = 0;\n const lines = aiOutput.split('\\n');\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Pattern: /sdd done N or /sdd done <title>\n const sddDoneMatch = trimmed.match(/\\/sdd\\s+done\\s+(.+)/i);\n if (sddDoneMatch?.[1]) {\n const target = sddDoneMatch[1].trim();\n const num = Number(target);\n if (!Number.isNaN(num) && num >= 1 && num <= pending.length) {\n const node = pending[num - 1];\n if (node && node.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(node.id, 'completed');\n completed++;\n }\n } else {\n const match = pending.find(n =>\n n.title.toLowerCase().includes(target.toLowerCase()) ||\n target.toLowerCase().includes(n.title.toLowerCase())\n );\n if (match && match.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(match.id, 'completed');\n completed++;\n }\n }\n continue;\n }\n\n // Pattern: ✅ followed by task title\n const checkmarkMatch = trimmed.match(/^✅\\s*(?:Task:\\s*)?(.+)/i);\n if (checkmarkMatch?.[1]) {\n const title = checkmarkMatch[1].trim();\n const match = pending.find(n =>\n n.title.toLowerCase().includes(title.toLowerCase()) ||\n title.toLowerCase().includes(n.title.toLowerCase())\n );\n if (match && match.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(match.id, 'completed');\n completed++;\n }\n continue;\n }\n\n // Pattern: Task N: complete/done/finished\n const taskNumMatch = trimmed.match(/Task\\s+(\\d+)\\s*[:]\\s*(?:complete|done|finished)/i);\n if (taskNumMatch?.[1]) {\n const num = Number(taskNumMatch[1]);\n if (num >= 1 && num <= pending.length) {\n const node = pending[num - 1];\n if (node && node.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(node.id, 'completed');\n completed++;\n }\n }\n continue;\n }\n\n // Pattern: Completed: <title> or Done: <title>\n const completedMatch = trimmed.match(/^(?:Completed|Done|Finished)\\s*[:]\\s*(.+)/i);\n if (completedMatch?.[1]) {\n const title = completedMatch[1].trim();\n const match = pending.find(n =>\n n.title.toLowerCase().includes(title.toLowerCase()) ||\n title.toLowerCase().includes(n.title.toLowerCase())\n );\n if (match && match.status !== 'completed') {\n activeTaskTracker!.updateNodeStatus(match.id, 'completed');\n completed++;\n }\n }\n }\n\n return completed;\n}\n\n/**\n * Try to save implementation plan from AI output during implementation phase.\n * Extracts the text before the JSON task array as the implementation plan.\n * Returns true if a plan was saved.\n */\nexport function trySaveImplementationPlan(aiOutput: string): boolean {\n if (!activeBuilder) return false;\n const session = activeBuilder.getSession();\n if (session.phase !== 'implementation') return false;\n\n // Try to find the JSON array and extract text before it\n const jsonMatch = aiOutput.match(/```json\\s*\\[/);\n if (jsonMatch?.index && jsonMatch.index > 0) {\n const plan = aiOutput.substring(0, jsonMatch.index).trim();\n if (plan.length > 50) { // Must be substantial\n activeBuilder.setImplementation(plan);\n return true;\n }\n }\n\n // If no JSON found, save the whole output as the plan\n if (aiOutput.length > 100 && !aiOutput.includes('```json')) {\n activeBuilder.setImplementation(aiOutput.trim());\n return true;\n }\n\n return false;\n}\n\n/**\n * Get the active builder instance (for advanced integration).\n */\nexport function getActiveBuilder(): AISpecBuilder | null {\n return activeBuilder;\n}\n\n/**\n * `/sdd` — AI-driven Specification-Driven Development workflow.\n *\n * Workflow:\n * /sdd new [title] — Start AI-driven spec session (AI asks questions)\n * /sdd approve — Approve current phase (spec → impl → tasks → done)\n * /sdd execute — Execute generated tasks\n * /sdd cancel — Cancel current session\n * /sdd status — Show current session status\n *\n * Also:\n * /sdd list — List saved specs\n * /sdd show <id> — Show a spec\n * /sdd templates — List available templates\n */\nexport function buildSddCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'sdd',\n description:\n 'AI-driven SDD: /sdd [new|approve|execute|cancel|status|list|show|templates]',\n async run(args) {\n const ctx = opts.context;\n const projectRoot = ctx?.projectRoot ?? process.cwd();\n const specsDir = path.join(projectRoot, '.wrongstack', 'specs');\n const graphsDir = path.join(projectRoot, '.wrongstack', 'task-graphs');\n\n const specStore = new SpecStore({ baseDir: specsDir });\n const graphStore = new TaskGraphStore({ baseDir: graphsDir });\n const versioning = new SpecVersioning();\n\n const [verb, ...rest] = args.trim().split(/\\s+/);\n const restJoined = rest.join(' ').trim();\n\n switch (verb) {\n case '':\n case 'help':\n return { message: sddHelp() };\n\n // ── AI-Driven Spec Session ─────────────────────────────────────────\n\n case 'new':\n case 'create': {\n const forceFlag = rest.includes('--force') || rest.includes('-f');\n const title = rest.filter(a => !a.startsWith('-')).join(' ').trim() || 'Untitled Feature';\n\n // Check for existing session and offer to resume (unless --force)\n if (!activeBuilder && !forceFlag) {\n const sessionPath = path.join(projectRoot, '.wrongstack', 'sdd-session.json');\n try {\n const fsp = await import('node:fs/promises');\n await fsp.access(sessionPath);\n // Session file exists — try to load it\n const projectContext = await gatherProjectContext(projectRoot);\n const tempBuilder = new AISpecBuilder({\n store: specStore,\n projectContext,\n sessionPath,\n });\n const loaded = await tempBuilder.loadSession();\n if (loaded) {\n const existing = tempBuilder.getSession();\n if (existing.phase !== 'done') {\n return {\n message: [\n `An existing SDD session was found:`,\n ` Feature: \"${existing.title}\"`,\n ` Phase: ${existing.phase}`,\n ` Questions: ${existing.questionCount}`,\n '',\n 'Use /sdd resume to continue, or /sdd new --force to start fresh.',\n ].join('\\n'),\n };\n }\n }\n } catch {\n // No existing session — continue\n }\n }\n\n // Reset task state from previous session\n activeTaskStore = null;\n activeTaskTracker = null;\n activeTaskGraphId = null;\n\n // Gather project context for smarter AI questions\n const projectContext = await gatherProjectContext(projectRoot);\n\n activeBuilder = new AISpecBuilder({\n store: specStore,\n projectContext,\n minQuestions: 2,\n maxQuestions: 10,\n sessionPath: path.join(projectRoot, '.wrongstack', 'sdd-session.json'),\n });\n activeBuilder.startSession(title);\n\n const aiPrompt = activeBuilder.getAIPrompt();\n\n return {\n message: [\n `╔═══ SDD: AI Spec Builder ═══╗`,\n '',\n `Feature: \"${title}\"`,\n '',\n 'The AI will now ask you contextual questions.',\n 'Answer naturally — it will generate the spec when ready.',\n '',\n 'Commands: /sdd approve · /sdd status · /sdd cancel',\n ].join('\\n'),\n runText: `[SDD SESSION ACTIVE]\\n${aiPrompt}\\n\\n---\\nUser message:\\nStart the specification interview for \"${title}\". Ask your first contextual question.`,\n };\n }\n\n // ── Phase Transitions ──────────────────────────────────────────────\n\n case 'approve':\n case 'ok':\n case 'confirm': {\n if (!activeBuilder) {\n return {\n message: 'No active SDD session. Use /sdd new to start one.',\n };\n }\n\n const phase = activeBuilder.getSession().phase;\n\n if (phase === 'questioning') {\n // AI hasn't generated spec yet — tell it to generate now\n const sddCtx = activeBuilder.getAIPrompt();\n return {\n message: 'No spec generated yet. Generating now...',\n runText: `[SDD SESSION ACTIVE]\\n${sddCtx}\\n\\n---\\nUser message:\\nGenerate the complete specification now based on the conversation so far.`,\n };\n }\n\n if (phase === 'spec_review') {\n const spec = activeBuilder.getSession().spec;\n if (!spec) {\n return { message: 'No spec to approve.' };\n }\n\n // Save spec and move to implementation phase\n await activeBuilder.saveSpec();\n versioning.recordVersion(spec, 'Initial spec approved');\n activeBuilder.approve(); // spec_review → implementation\n\n const implPrompt = activeBuilder.getAIPrompt();\n return {\n message: [\n `✅ Spec \"${spec.title}\" approved and saved!`,\n `ID: ${spec.id}`,\n `Requirements: ${spec.requirements.length}`,\n '',\n 'The AI will now generate an implementation plan and tasks.',\n ].join('\\n'),\n runText: `[SDD SESSION ACTIVE]\\n${implPrompt}\\n\\n---\\nUser message:\\nGenerate the implementation plan and tasks for the approved spec.`,\n };\n }\n\n if (phase === 'task_review') {\n activeBuilder.approve(); // task_review → executing\n\n const execPrompt = activeBuilder.getAIPrompt();\n return {\n message: '✅ Tasks approved! The AI will now execute them one by one.',\n runText: `[SDD SESSION ACTIVE]\\n${execPrompt}\\n\\n---\\nUser message:\\nStart executing the tasks one by one.`,\n };\n }\n\n return {\n message: `Current phase is \"${phase}\". Use /sdd status to see details.`,\n };\n }\n\n // ── Task Execution ─────────────────────────────────────────────────\n\n case 'execute':\n case 'run': {\n if (!activeBuilder) {\n return {\n message: 'No active SDD session. Use /sdd new to start one.',\n };\n }\n\n const session = activeBuilder.getSession();\n if (session.phase !== 'executing' && session.phase !== 'task_review') {\n return {\n message: `Cannot execute in phase \"${session.phase}\". Use /sdd approve first.`,\n };\n }\n\n const execPrompt = activeBuilder.getAIPrompt();\n return {\n message: '⚡ Starting task execution. The AI will execute tasks one by one.',\n runText: `[SDD SESSION ACTIVE]\\n${execPrompt}\\n\\n---\\nUser message:\\nStart executing the tasks one by one.`,\n };\n }\n\n case 'plan':\n case 'impl': {\n if (!activeBuilder) {\n return { message: 'No active SDD session. Use /sdd new to start one.' };\n }\n\n const session = activeBuilder.getSession();\n if (!session.implementation) {\n return {\n message: session.phase === 'implementation'\n ? 'No implementation plan yet. The AI will generate it after /sdd approve.'\n : 'No implementation plan in this session.',\n };\n }\n\n return {\n message: [\n '═══ Implementation Plan ═══',\n '',\n session.implementation,\n ].join('\\n'),\n };\n }\n\n case 'spec': {\n if (!activeBuilder) {\n return { message: 'No active SDD session. Use /sdd new to start one.' };\n }\n\n const session = activeBuilder.getSession();\n if (!session.spec) {\n return {\n message: session.phase === 'questioning'\n ? 'No spec generated yet. Keep answering the AI\\'s questions.'\n : 'No spec in this session.',\n };\n }\n\n const spec = session.spec;\n const lines = [\n `═══ Current Spec ═══`,\n '',\n `Title: ${spec.title}`,\n `Version: ${spec.version}`,\n `Status: ${spec.status}`,\n '',\n '## Overview',\n spec.overview,\n ];\n\n if (spec.requirements.length > 0) {\n lines.push('', `## Requirements (${spec.requirements.length})`);\n for (const r of spec.requirements) {\n const ac = r.acceptanceCriteria.length > 0 ? ` → ${r.acceptanceCriteria.join(', ')}` : '';\n lines.push(` [${r.priority}] ${r.description}${ac}`);\n }\n }\n\n return { message: lines.join('\\n') };\n }\n\n case 'tasks':\n case 'task': {\n if (!activeTaskTracker) {\n return { message: 'No tasks generated yet. Use /sdd new to start.' };\n }\n\n const nodes = activeTaskTracker.getAllNodes();\n if (nodes.length === 0) {\n return { message: 'No tasks in the current graph.' };\n }\n\n const progress = activeTaskTracker.getProgress();\n const lines = [\n `═══ Task List (${progress.completed}/${progress.total} done) ═══`,\n '',\n ];\n\n for (let i = 0; i < nodes.length; i++) {\n const n = nodes[i]!;\n const status = n.status === 'completed' ? '✅' : n.status === 'in_progress' ? '🔄' : n.status === 'failed' ? '❌' : '⏳';\n lines.push(`${i + 1}. ${status} [${n.priority}] ${n.title}`);\n if (n.description) {\n lines.push(` ${n.description.split('\\n')[0]}`);\n }\n }\n\n return { message: lines.join('\\n') };\n }\n\n case 'done':\n case 'complete': {\n if (!activeTaskTracker) {\n return { message: 'No tasks to complete.' };\n }\n\n if (!restJoined) {\n return { message: 'Usage: /sdd done <task title or number>' };\n }\n\n // Try to match by number first\n const nodes = activeTaskTracker.getAllNodes({ status: ['pending', 'in_progress'] });\n const num = Number(restJoined);\n let matched = false;\n\n if (!Number.isNaN(num) && num >= 1 && num <= nodes.length) {\n const node = nodes[num - 1];\n if (node) {\n activeTaskTracker.updateNodeStatus(node.id, 'completed');\n matched = true;\n }\n }\n\n // Try fuzzy title match\n if (!matched) {\n const match = nodes.find(n =>\n n.title.toLowerCase().includes(restJoined.toLowerCase()) ||\n restJoined.toLowerCase().includes(n.title.toLowerCase())\n );\n if (match) {\n activeTaskTracker.updateNodeStatus(match.id, 'completed');\n matched = true;\n }\n }\n\n if (!matched) {\n return { message: `No pending task matching \"${restJoined}\".` };\n }\n\n const remaining = activeTaskTracker.getProgress();\n return {\n message: `✅ Task completed! ${remaining.completed}/${remaining.total} done (${remaining.percentComplete}%)`,\n };\n }\n\n // ── Session Management ─────────────────────────────────────────────\n\n case 'status': {\n if (!activeBuilder) {\n return { message: 'No active SDD session.' };\n }\n\n const session = activeBuilder.getSession();\n const phaseEmoji: Record<AISpecPhase, string> = {\n questioning: '❓',\n spec_review: '📋',\n implementation: '🏗️',\n task_review: '📝',\n executing: '⚡',\n done: '✅',\n };\n\n const progress = getTaskProgress();\n const lines = [\n '═══ SDD Session Status ═══',\n '',\n `Feature: \"${session.title}\"`,\n `Phase: ${phaseEmoji[session.phase]} ${session.phase}`,\n `Questions asked: ${session.questionCount}`,\n ];\n\n if (session.spec) {\n lines.push(`Spec: ${session.spec.title} (${session.spec.requirements.length} requirements)`);\n lines.push(` Requirements: ${session.spec.requirements.map(r => r.description).join(', ')}`);\n }\n\n if (session.implementation) {\n const planPreview = session.implementation.split('\\n').slice(0, 3).join(' ');\n lines.push(`Implementation: ${planPreview}${session.implementation.length > 100 ? '...' : ''}`);\n }\n\n if (progress && progress.total > 0) {\n lines.push(`Tasks: ${progress.completed}/${progress.total} (${progress.percent}%)`);\n }\n\n lines.push('', `Session ID: ${session.id}`);\n lines.push('Commands: /sdd plan · /sdd tasks · /sdd approve · /sdd cancel');\n\n return {\n message: lines.join('\\n'),\n };\n }\n\n case 'cancel': {\n // Always try to delete the session file from disk\n const sessionPath = path.join(projectRoot, '.wrongstack', 'sdd-session.json');\n let deletedFromDisk = false;\n try {\n const fsp = await import('node:fs/promises');\n await fsp.unlink(sessionPath);\n deletedFromDisk = true;\n } catch {\n // No file on disk\n }\n\n if (activeBuilder) {\n const title = activeBuilder.getSession().title;\n await activeBuilder.deleteSession();\n activeBuilder = null;\n activeTaskStore = null;\n activeTaskTracker = null;\n activeTaskGraphId = null;\n return { message: `SDD session for \"${title}\" cancelled.` };\n }\n\n if (deletedFromDisk) {\n return { message: 'Stale SDD session file deleted. You can now use /sdd new.' };\n }\n\n return { message: 'No active SDD session.' };\n }\n\n case 'resume': {\n if (activeBuilder) {\n return { message: 'An SDD session is already active. Use /sdd cancel first.' };\n }\n\n const sessionPath = path.join(projectRoot, '.wrongstack', 'sdd-session.json');\n const projectContext = await gatherProjectContext(projectRoot);\n\n activeBuilder = new AISpecBuilder({\n store: specStore,\n projectContext,\n minQuestions: 2,\n maxQuestions: 10,\n sessionPath,\n });\n\n const loaded = await activeBuilder.loadSession();\n if (!loaded) {\n activeBuilder = null;\n return { message: 'No saved SDD session found. Use /sdd new to start one.' };\n }\n\n const session = activeBuilder.getSession();\n\n // Restore task graph if it exists\n let taskCount = 0;\n let completedCount = 0;\n const taskGraphId = activeBuilder.getTaskGraphId();\n if (taskGraphId) {\n try {\n const store = new DefaultTaskStore();\n const tracker = new TaskTracker({ store });\n const graph = await tracker.loadGraph(taskGraphId);\n if (graph) {\n activeTaskStore = store;\n activeTaskTracker = tracker;\n activeTaskGraphId = taskGraphId;\n const progress = tracker.getProgress();\n taskCount = progress.total;\n completedCount = progress.completed;\n }\n } catch {\n // Task graph not found — continue without it\n }\n }\n\n const resumePrompt = activeBuilder.getAIPrompt();\n return {\n message: [\n `╔═══ SDD Session Resumed ═══╗`,\n '',\n `Feature: \"${session.title}\"`,\n `Phase: ${session.phase}`,\n `Questions asked: ${session.questionCount}`,\n session.spec ? `Spec: ${session.spec.title}` : '',\n taskCount > 0 ? `Tasks: ${completedCount}/${taskCount} completed` : '',\n '',\n 'The AI will continue from where you left off.',\n ].filter(Boolean).join('\\n'),\n runText: `[SDD SESSION ACTIVE]\\n${resumePrompt}\\n\\n---\\nUser message:\\nContinue from where we left off. Check the session status and proceed.`,\n };\n }\n\n // ── Spec Browsing ──────────────────────────────────────────────────\n\n case 'list':\n case 'ls': {\n const entries = await specStore.list();\n if (entries.length === 0) {\n return { message: 'No specs saved. Use /sdd new to create one.' };\n }\n\n const lines = entries.map((e: SpecIndexEntry, i: number) => {\n const status =\n e.status === 'draft'\n ? '📝'\n : e.status === 'approved'\n ? '✅'\n : '📋';\n return `${i + 1}. ${status} ${e.title} (${e.version}) — ${e.id.slice(0, 8)}...`;\n });\n\n return { message: `Saved Specs:\\n${lines.join('\\n')}` };\n }\n\n case 'show':\n case 'view': {\n const spec = await findSpec(specStore, restJoined);\n if (!spec) return { message: `Spec \"${restJoined}\" not found.` };\n\n const parser = new SpecParser();\n const analysis = parser.analyze(spec);\n\n return {\n message: [\n `# ${spec.title}`,\n `Version: ${spec.version} | Status: ${spec.status}`,\n '',\n '## Overview',\n spec.overview,\n '',\n `## Requirements (${spec.requirements.length})`,\n ...spec.requirements.map((r: SpecRequirement) => {\n const tags = `[${r.type}][${r.priority}]`;\n const ac =\n r.acceptanceCriteria.length > 0\n ? `\\n AC: ${r.acceptanceCriteria.join(', ')}`\n : '';\n return `- ${tags} ${r.description}${ac}`;\n }),\n '',\n renderSpecAnalysis(spec, {\n completeness: analysis.completeness,\n gaps: analysis.gaps,\n risks: analysis.risks.map((r) => r.risk),\n suggestions: analysis.suggestions,\n }),\n ].join('\\n'),\n };\n }\n\n case 'templates': {\n const templates = listTemplates();\n const lines = templates.map(\n (t: { id: string; name: string; description: string }) =>\n ` ${t.id}: ${t.name} — ${t.description}`,\n );\n return {\n message: `Available Templates:\\n${lines.join('\\n')}`,\n };\n }\n\n case 'from': {\n const templateId = restJoined || 'feature';\n const template = getTemplate(templateId);\n if (!template) {\n return {\n message: `Template \"${templateId}\" not found.\\nAvailable: ${listTemplates().map((t: { id: string }) => t.id).join(', ')}`,\n };\n }\n\n const skeleton = templateToMarkdown(template, 'New Specification');\n const spec = await specStore.createDraft('New Specification');\n await specStore.update(spec.id, { sections: [] });\n\n return {\n message: [\n `Created draft spec from template \"${template.name}\".`,\n `ID: ${spec.id}`,\n '',\n 'Edit the spec through the AI conversation or /sdd show to review.',\n '',\n skeleton,\n ].join('\\n'),\n };\n }\n\n case 'version':\n case 'history': {\n const spec = await findSpec(specStore, restJoined);\n if (!spec)\n return { message: `Spec \"${restJoined}\" not found.` };\n\n const history = versioning.getHistory(spec.id);\n if (history.length === 0) {\n return {\n message: `No version history for \"${spec.title}\".`,\n };\n }\n\n const lines = history.map(\n (v: SpecVersion, i: number) =>\n `${i + 1}. v${v.version} — ${new Date(v.timestamp).toISOString()}${v.changeDescription ? ` (${v.changeDescription})` : ''}`,\n );\n return {\n message: `Version History for \"${spec.title}\":\\n${lines.join('\\n')}`,\n };\n }\n\n default:\n return {\n message: `Unknown command \"${verb}\".\\n\\n${sddHelp()}`,\n };\n }\n },\n };\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction sddHelp(): string {\n return [\n '',\n '╔══════════════════════════════════════════════════════════════╗',\n '║ 🚀 SDD — AI-Driven Spec Builder ║',\n '╚══════════════════════════════════════════════════════════════╝',\n '',\n ' ┌─ 🆕 Start ──────────────────────────────────────────────┐',\n ' │ /sdd new [title] Start a new spec session │',\n ' │ /sdd new --force Start fresh (skip resume check) │',\n ' │ /sdd resume Resume a saved session │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 🔄 Flow ───────────────────────────────────────────────┐',\n ' │ /sdd approve Approve current phase │',\n ' │ /sdd spec Show current session\\'s spec │',\n ' │ /sdd plan Show implementation plan │',\n ' │ /sdd execute Execute generated tasks │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 📋 Task Management ────────────────────────────────────┐',\n ' │ /sdd tasks Show current task list │',\n ' │ /sdd done <N> Mark task complete (by # or name) │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 📊 Info ───────────────────────────────────────────────┐',\n ' │ /sdd status Show session status │',\n ' │ /sdd cancel Cancel session │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 📁 Spec History ───────────────────────────────────────┐',\n ' │ /sdd list List saved specs │',\n ' │ /sdd show <id> Show spec details │',\n ' │ /sdd templates List available templates │',\n ' │ /sdd from <tmpl> Create from template │',\n ' │ /sdd version <id> Show version history │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ' ┌─ 💡 Quick Start ────────────────────────────────────────┐',\n ' │ │',\n ' │ 1. /sdd new Auth System │',\n ' │ → AI starts asking questions │',\n ' │ │',\n ' │ 2. Just type your answers naturally │',\n ' │ → AI continues the interview │',\n ' │ │',\n ' │ 3. AI generates spec (auto-detected) │',\n ' │ → /sdd approve │',\n ' │ │',\n ' │ 3. AI generates implementation + tasks │',\n ' │ → /sdd approve │',\n ' │ │',\n ' │ 4. AI executes tasks one by one │',\n ' │ → /sdd tasks (view progress) │',\n ' │ → /sdd done 1 (manual completion) │',\n ' │ │',\n ' └──────────────────────────────────────────────────────────┘',\n '',\n ].join('\\n');\n}\n\n/**\n * Gather project context to help the AI ask smarter questions.\n * Reads package.json, file structure, and other indicators.\n */\nasync function gatherProjectContext(projectRoot: string): Promise<string> {\n const parts: string[] = [];\n\n try {\n const fsp = await import('node:fs/promises');\n const pkgPath = path.join(projectRoot, 'package.json');\n const pkgRaw = await fsp.readFile(pkgPath, 'utf8');\n const pkg = JSON.parse(pkgRaw) as Record<string, unknown>;\n parts.push(`Project: ${String(pkg.name ?? 'unknown')}`);\n parts.push(`Description: ${String(pkg.description ?? 'none')}`);\n if (pkg.dependencies) {\n const deps = Object.keys(pkg.dependencies as Record<string, unknown>);\n parts.push(`Dependencies: ${deps.slice(0, 20).join(', ')}${deps.length > 20 ? '...' : ''}`);\n }\n if (pkg.devDependencies) {\n const devDeps = Object.keys(pkg.devDependencies as Record<string, unknown>);\n parts.push(`Dev Dependencies: ${devDeps.slice(0, 15).join(', ')}${devDeps.length > 15 ? '...' : ''}`);\n }\n } catch {\n // no package.json — skip\n }\n\n try {\n const fsp = await import('node:fs/promises');\n const tsconfigPath = path.join(projectRoot, 'tsconfig.json');\n await fsp.access(tsconfigPath);\n parts.push('Language: TypeScript');\n } catch {\n // no tsconfig\n }\n\n try {\n const fsp = await import('node:fs/promises');\n const srcDir = path.join(projectRoot, 'src');\n const entries = await fsp.readdir(srcDir, { withFileTypes: true });\n const dirs = entries.filter((e) => e.isDirectory()).map((e) => e.name);\n if (dirs.length > 0) {\n parts.push(`Source structure: src/${dirs.join(', src/')}`);\n }\n } catch {\n // no src dir\n }\n\n return parts.join('\\n');\n}\n\nasync function findSpec(store: SpecStore, idOrTitle: string) {\n if (!idOrTitle) return null;\n const byId = await store.load(idOrTitle);\n if (byId) return byId;\n const all = await store.list();\n const match = all.find(\n (e: SpecIndexEntry) =>\n e.id.startsWith(idOrTitle) ||\n e.title.toLowerCase().includes(idOrTitle.toLowerCase()),\n );\n if (match) return store.load(match.id);\n return null;\n}\n\nasync function findGraph(store: TaskGraphStore, idOrTitle: string) {\n if (!idOrTitle) {\n const all = await store.list();\n if (all.length === 0) return null;\n const first = all[0];\n return first ? store.load(first.id) : null;\n }\n const byId = await store.load(idOrTitle);\n if (byId) return byId;\n const all = await store.list();\n const match = all.find(\n (e: TaskGraphIndexEntry) =>\n e.id.startsWith(idOrTitle) ||\n e.title.toLowerCase().includes(idOrTitle.toLowerCase()),\n );\n if (match) return store.load(match.id);\n return null;\n}\n","/**\n * Pure helpers for ProviderConfig shape normalisation, key masking, and\n * timestamp generation. Shared between auth-menu.ts, webui-server.ts, and\n * any future code that touches the config `providers` map.\n *\n * These are intentionally side-effect-free — config I/O (vault encrypt/decrypt,\n * atomic writes) lives closer to the call sites where the vault is available.\n */\nimport type { ProviderApiKey, ProviderConfig } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\n\n/**\n * Normalize a ProviderConfig to the canonical `apiKeys[]` form.\n * Migrates the legacy single-key `apiKey` field on the fly so every\n * consumer sees a uniform shape. Does NOT mutate the input.\n */\nexport function normalizeKeys(cfg: ProviderConfig): ProviderApiKey[] {\n if (Array.isArray(cfg.apiKeys) && cfg.apiKeys.length > 0) {\n return cfg.apiKeys.map((k) => ({ ...k }));\n }\n if (typeof cfg.apiKey === 'string' && cfg.apiKey.length > 0) {\n return [{ label: 'default', apiKey: cfg.apiKey, createdAt: '' }];\n }\n return [];\n}\n\n/**\n * Write a normalized key list back into a ProviderConfig. Keeps the\n * legacy `apiKey` field mirrored to the active entry so code that\n * bypasses the config loader still sees a usable key.\n */\nexport function writeKeysBack(cfg: ProviderConfig, keys: ProviderApiKey[]): void {\n if (keys.length === 0) {\n delete cfg.apiKeys;\n delete cfg.apiKey;\n delete cfg.activeKey;\n return;\n }\n cfg.apiKeys = keys;\n const active = keys.find((k) => k.label === cfg.activeKey) ?? keys[0]!;\n cfg.apiKey = active.apiKey;\n if (!cfg.activeKey || !keys.some((k) => k.label === cfg.activeKey)) {\n cfg.activeKey = active.label;\n }\n}\n\n/**\n * Return the label of the active key, or the first key's label if no\n * active is pinned. Returns `undefined` when there are no keys at all.\n */\nexport function activeLabel(cfg: ProviderConfig, keys: ProviderApiKey[]): string | undefined {\n if (cfg.activeKey && keys.some((k) => k.label === cfg.activeKey)) return cfg.activeKey;\n return keys[0]?.label;\n}\n\n/** Mask an API key for display: show first 4 + last 4 chars. */\nexport function maskedKey(key: string): string {\n if (!key) return color.dim('—');\n if (key.length <= 8) return color.dim('•'.repeat(key.length));\n const head = key.slice(0, 4);\n const tail = key.slice(-4);\n return `${color.dim(head + '…')}${tail}`;\n}\n\n/** ISO-8601 timestamp for key `createdAt` fields. */\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n","import * as crypto from 'node:crypto';\r\nimport * as fs from 'node:fs/promises';\r\nimport * as path from 'node:path';\r\nimport type { Agent, EventBus, ModelsRegistry, SessionWriter } from '@wrongstack/core';\r\nimport { type ProviderConfig, atomicWrite } from '@wrongstack/core';\r\nimport {\r\n DefaultSecretVault,\r\n decryptConfigSecrets,\r\n encryptConfigSecrets,\r\n} from '@wrongstack/core/security';\r\nimport { WebSocket, WebSocketServer } from 'ws';\r\nimport { maskedKey, normalizeKeys, nowIso, writeKeysBack } from './provider-config-utils.js';\r\n\r\n// Re-export types from webui for type checking\r\n// At runtime, the actual types are resolved via workspace resolution\r\n\r\n// WSServerMessage and WSClientMessage types (mirrors packages/webui/src/types.ts)\r\nexport interface WSServerMessage {\r\n type: string;\r\n payload: unknown;\r\n}\r\n\r\nexport interface WSClientMessage {\r\n type: string;\r\n payload?: unknown;\r\n}\r\n\r\ninterface WebUIOptions {\r\n agent: Agent;\r\n events: EventBus;\r\n session: SessionWriter;\r\n port?: number;\r\n modelsRegistry?: ModelsRegistry;\r\n globalConfigPath?: string;\r\n}\r\n\r\ninterface ConnectedClient {\r\n ws: WebSocket;\r\n sessionId: string | null;\r\n}\r\n\r\nexport async function runWebUI(opts: WebUIOptions): Promise<void> {\r\n const port = opts.port ?? 3457;\r\n const clients = new Map<WebSocket, ConnectedClient>();\r\n let abortController: AbortController | null = null;\r\n\r\n // Generate a random auth token to prevent unauthorized local connections.\r\n // The WebUI frontend reads this from the session.start payload and uses it\r\n // for subsequent reconnections. Loopback connections are exempt for\r\n // convenience (matches standalone WebUI server behavior).\r\n const authToken = crypto.randomBytes(16).toString('hex');\r\n\r\n const wss = new WebSocketServer({ port, host: '127.0.0.1', maxPayload: 1 * 1024 * 1024 });\r\n\r\n console.log(`[WebUI] WebSocket server starting on ws://localhost:${port}`);\r\n\r\n // Subscribe to events once\r\n const eventUnsubscribers: Array<() => void> = [];\r\n\r\n function setupEvents() {\r\n // Clear any existing subscriptions\r\n for (const unsub of eventUnsubscribers) unsub();\r\n eventUnsubscribers.length = 0;\r\n\r\n // iteration.started\r\n eventUnsubscribers.push(\r\n opts.events.on('iteration.started', (e) => {\r\n broadcast({\r\n type: 'iteration.started',\r\n payload: { index: e.index },\r\n });\r\n }),\r\n );\r\n\r\n // provider.text_delta\r\n eventUnsubscribers.push(\r\n opts.events.on('provider.text_delta', (e) => {\r\n broadcast({\r\n type: 'provider.text_delta',\r\n payload: { text: e.text, messageId: 'current' },\r\n });\r\n }),\r\n );\r\n\r\n // provider.thinking_delta — extended-thinking deltas. The WebUI renders a\r\n // transient \"Thinking…\" chip from these; clears the moment text_delta /\r\n // tool.started / provider.response / run.result lands so the chip never\r\n // pollutes the persisted transcript.\r\n eventUnsubscribers.push(\r\n opts.events.on('provider.thinking_delta', (e) => {\r\n broadcast({\r\n type: 'provider.thinking_delta',\r\n payload: { text: e.text },\r\n });\r\n }),\r\n );\r\n\r\n // tool.started\r\n eventUnsubscribers.push(\r\n opts.events.on('tool.started', (e) => {\r\n broadcast({\r\n type: 'tool.started',\r\n payload: {\r\n id: e.id,\r\n name: e.name,\r\n input: e.input,\r\n messageId: `tool_${e.id}`,\r\n },\r\n });\r\n }),\r\n );\r\n\r\n // tool.progress\r\n eventUnsubscribers.push(\r\n opts.events.on('tool.progress', (e) => {\r\n broadcast({\r\n type: 'tool.progress',\r\n payload: {\r\n name: e.name,\r\n id: e.id,\r\n event: e.event,\r\n },\r\n });\r\n }),\r\n );\r\n\r\n // tool.executed\r\n eventUnsubscribers.push(\r\n opts.events.on('tool.executed', (e) => {\r\n broadcast({\r\n type: 'tool.executed',\r\n payload: {\r\n // Forward the tool_use id so the WebUI can correlate this with\r\n // the matching tool.started bubble for parallel tool calls.\r\n id: e.id,\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 },\r\n });\r\n }),\r\n );\r\n\r\n // provider.response\r\n eventUnsubscribers.push(\r\n opts.events.on('provider.response', (e) => {\r\n broadcast({\r\n type: 'provider.response',\r\n payload: {\r\n usage: e.usage,\r\n stopReason: e.stopReason,\r\n messageId: 'current',\r\n },\r\n });\r\n }),\r\n );\r\n\r\n // error\r\n eventUnsubscribers.push(\r\n opts.events.on('error', (e) => {\r\n broadcast({\r\n type: 'error',\r\n payload: {\r\n phase: e.phase,\r\n message: e.err instanceof Error ? e.err.message : String(e.err),\r\n },\r\n });\r\n }),\r\n );\r\n }\r\n\r\n return new Promise<void>((resolve) => {\r\n wss.on('listening', () => {\r\n console.log(`[WebUI] WebSocket server running on ws://localhost:${port}`);\r\n setupEvents();\r\n });\r\n\r\n wss.on('connection', (ws, req) => {\r\n // --- Auth token + Origin validation ---\r\n // Loopback connections (from the WebUI frontend on localhost) are\r\n // allowed without a token for convenience. Non-loopback connections\r\n // require the token passed as ?token=<authToken>.\r\n const isLoopback = (hostname: string) =>\r\n hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1' || hostname === '[::1]';\r\n\r\n try {\r\n const url = new URL(req.url ?? '/', `http://localhost:${port}`);\r\n const token = url.searchParams.get('token');\r\n const tokenOk = token === authToken;\r\n\r\n // Origin validation\r\n const origin = req.headers.origin;\r\n if (origin) {\r\n try {\r\n const { hostname } = new URL(origin);\r\n if (!isLoopback(hostname) && !tokenOk) {\r\n ws.close(4003, 'Forbidden: non-loopback origin requires auth token');\r\n return;\r\n }\r\n } catch {\r\n ws.close(4003, 'Forbidden: invalid origin');\r\n return;\r\n }\r\n } else {\r\n // Non-browser client (no origin header): require token for\r\n // defense-in-depth. Even though we bind to 127.0.0.1, a\r\n // compromised local process or DNS rebinding attack could\r\n // connect without an origin.\r\n if (!tokenOk) {\r\n ws.close(4003, 'Forbidden: auth token required for non-browser clients');\r\n return;\r\n }\r\n }\r\n } catch {\r\n ws.close(4001, 'Unauthorized: malformed request');\r\n return;\r\n }\r\n\r\n const client: ConnectedClient = { ws, sessionId: opts.session.id };\r\n clients.set(ws, client);\r\n console.log('[WebUI] Client connected');\r\n\r\n ws.on('message', async (data) => {\r\n try {\r\n const msg = JSON.parse(data.toString()) as WSClientMessage;\r\n await handleMessage(ws, client, msg);\r\n } catch (err) {\r\n console.error('[WebUI] Failed to parse message', err);\r\n }\r\n });\r\n\r\n ws.on('close', () => {\r\n console.log('[WebUI] Client disconnected');\r\n clients.delete(ws);\r\n });\r\n\r\n // Send session.start to the new client (includes wsToken for reconnection)\r\n send(ws, {\r\n type: 'session.start',\r\n payload: {\r\n sessionId: opts.session.id,\r\n model: opts.agent.ctx.model,\r\n provider: (opts.agent.ctx.provider as { id: string }).id,\r\n wsToken: authToken,\r\n },\r\n });\r\n });\r\n\r\n wss.on('error', (err) => {\r\n console.error('[WebUI] Server error:', err);\r\n });\r\n\r\n // Graceful shutdown\r\n function shutdown() {\r\n console.log('[WebUI] Shutting down...');\r\n for (const unsub of eventUnsubscribers) unsub();\r\n for (const [ws] of clients) {\r\n ws.close();\r\n }\r\n clients.clear();\r\n wss.close(() => {\r\n console.log('[WebUI] Server stopped');\r\n resolve();\r\n });\r\n }\r\n\r\n process.on('SIGINT', shutdown);\r\n process.on('SIGTERM', shutdown);\r\n });\r\n\r\n async function handleMessage(\r\n ws: WebSocket,\r\n client: ConnectedClient,\r\n msg: WSClientMessage,\r\n ): Promise<void> {\r\n switch (msg.type) {\r\n case 'user_message':\r\n await handleUserMessage(\r\n ws,\r\n client,\r\n (msg as { payload: { content: string } }).payload.content,\r\n );\r\n break;\r\n\r\n case 'abort':\r\n abortController?.abort();\r\n broadcast({\r\n type: 'error',\r\n payload: { phase: 'abort', message: 'User aborted' },\r\n });\r\n break;\r\n\r\n case 'ping':\r\n send(ws, { type: 'pong', payload: {} });\r\n break;\r\n\r\n case 'providers.list':\r\n await handleProvidersList(ws);\r\n break;\r\n\r\n case 'provider.models':\r\n await handleProviderModels(\r\n ws,\r\n (msg as { payload: { providerId: string } }).payload.providerId,\r\n );\r\n break;\r\n\r\n case 'providers.saved':\r\n await handleProvidersSaved(ws);\r\n break;\r\n\r\n case 'key.add':\r\n case 'key.update': {\r\n const m = msg as { payload: { providerId: string; label: string; apiKey: string } };\r\n await handleKeyUpsert(ws, m.payload.providerId, m.payload.label, m.payload.apiKey);\r\n break;\r\n }\r\n\r\n case 'key.delete': {\r\n const m = msg as { payload: { providerId: string; label: string } };\r\n await handleKeyDelete(ws, m.payload.providerId, m.payload.label);\r\n break;\r\n }\r\n\r\n case 'key.set_active': {\r\n const m = msg as { payload: { providerId: string; label: string } };\r\n await handleKeySetActive(ws, m.payload.providerId, m.payload.label);\r\n break;\r\n }\r\n\r\n case 'provider.add': {\r\n const m = msg as {\r\n payload: { id: string; family: string; baseUrl?: string; apiKey?: string };\r\n };\r\n await handleProviderAdd(ws, m.payload);\r\n break;\r\n }\r\n\r\n case 'provider.remove': {\r\n const m = msg as { payload: { providerId: string } };\r\n await handleProviderRemove(ws, m.payload.providerId);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n async function handleUserMessage(\r\n ws: WebSocket,\r\n client: ConnectedClient,\r\n content: string,\r\n ): Promise<void> {\r\n // Guard against overlapping runs on the same Agent instance. Two\r\n // rapid user messages would otherwise start a second agent.run()\r\n // before the first one's cleanup settles, corrupting context state.\r\n if (abortController) {\r\n send(ws, {\r\n type: 'error',\r\n payload: { phase: 'agent.run', message: 'A run is already in progress. Abort it first.' },\r\n });\r\n return;\r\n }\r\n\r\n // Abort any existing run (safety net; the guard above makes this\r\n // unreachable in the overlapping case, but direct abort requests\r\n // from the client still need the controller reference).\r\n abortController = new AbortController();\r\n\r\n try {\r\n const result = await opts.agent.run(content, {\r\n signal: abortController.signal,\r\n });\r\n\r\n send(ws, {\r\n type: 'run.result',\r\n payload: {\r\n status: result.status,\r\n iterations: result.iterations,\r\n finalText: result.finalText,\r\n error: result.error\r\n ? {\r\n code: result.error.code,\r\n message: result.error.message,\r\n recoverable: result.error.recoverable,\r\n }\r\n : undefined,\r\n },\r\n });\r\n } catch (err) {\r\n send(ws, {\r\n type: 'error',\r\n payload: {\r\n phase: 'agent.run',\r\n message: err instanceof Error ? err.message : String(err),\r\n },\r\n });\r\n } finally {\r\n abortController = null;\r\n }\r\n }\r\n\r\n function send(ws: WebSocket, msg: WSServerMessage): void {\r\n if (ws.readyState === WebSocket.OPEN) {\r\n ws.send(JSON.stringify(msg));\r\n }\r\n }\r\n\r\n function broadcast(msg: WSServerMessage): void {\r\n const data = JSON.stringify(msg);\r\n for (const [ws] of clients) {\r\n if (ws.readyState === WebSocket.OPEN) {\r\n try {\r\n ws.send(data);\r\n } catch {\r\n // Client disconnected between the readyState check and the send\r\n // — let the 'close' handler remove it from the map naturally.\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ---- Provider/Model/Key management handlers ----\r\n\r\n async function handleProvidersList(ws: WebSocket): Promise<void> {\r\n if (!opts.modelsRegistry) {\r\n sendResult(ws, false, 'Models registry not available');\r\n return;\r\n }\r\n try {\r\n const providers = await opts.modelsRegistry.listProviders();\r\n const savedProviders = await loadSavedProviders();\r\n const savedIds = new Set(Object.keys(savedProviders));\r\n\r\n send(ws, {\r\n type: 'provider.catalog',\r\n payload: {\r\n providers: providers.map((p) => ({\r\n id: p.id,\r\n name: p.name,\r\n family: p.family,\r\n apiBase: p.apiBase,\r\n envVars: p.envVars,\r\n modelCount: p.models.length,\r\n hasApiKey: savedIds.has(p.id) || p.envVars.some((v) => !!process.env[v]),\r\n })),\r\n },\r\n });\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleProviderModels(ws: WebSocket, providerId: string): Promise<void> {\r\n if (!opts.modelsRegistry) {\r\n sendResult(ws, false, 'Models registry not available');\r\n return;\r\n }\r\n try {\r\n const provider = await opts.modelsRegistry.getProvider(providerId);\r\n if (!provider) {\r\n sendResult(ws, false, `Provider \"${providerId}\" not found in catalog`);\r\n return;\r\n }\r\n send(ws, {\r\n type: 'provider.models',\r\n payload: {\r\n provider: providerId,\r\n models: provider.models.map((m) => ({\r\n id: m.id,\r\n name: m.name,\r\n releaseDate: m.release_date,\r\n contextWindow: m.limit?.context,\r\n inputCost: m.cost?.input,\r\n outputCost: m.cost?.output,\r\n capabilities: [\r\n ...(m.tool_call ? ['tools'] : []),\r\n ...(m.reasoning ? ['reasoning'] : []),\r\n ...(m.modalities?.input?.includes('image') ? ['vision'] : []),\r\n ...(m.open_weights ? ['open_weights'] : []),\r\n ],\r\n })),\r\n },\r\n });\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleProvidersSaved(ws: WebSocket): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n send(ws, {\r\n type: 'providers.saved',\r\n payload: {\r\n providers: Object.entries(providers).map(([id, cfg]) => ({\r\n id,\r\n family: cfg.family,\r\n baseUrl: cfg.baseUrl,\r\n apiKeys: normalizeKeys(cfg).map((k) => ({\r\n label: k.label,\r\n maskedKey: maskedKey(k.apiKey),\r\n isActive: k.label === cfg.activeKey,\r\n createdAt: k.createdAt,\r\n })),\r\n })),\r\n },\r\n });\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleKeyUpsert(\r\n ws: WebSocket,\r\n providerId: string,\r\n label: string,\r\n apiKey: string,\r\n ): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n const existing = providers[providerId] ?? { type: providerId };\r\n const keys = normalizeKeys(existing);\r\n\r\n // Check if label exists\r\n const existingIdx = keys.findIndex((k) => k.label === label);\r\n if (existingIdx >= 0) {\r\n keys[existingIdx] = { ...keys[existingIdx]!, apiKey, createdAt: nowIso() };\r\n } else {\r\n keys.push({ label, apiKey, createdAt: nowIso() });\r\n }\r\n\r\n writeKeysBack(existing, keys);\r\n if (!existing.activeKey) existing.activeKey = label;\r\n providers[providerId] = existing;\r\n\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Key \"${label}\" saved for ${providerId}`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleKeyDelete(ws: WebSocket, providerId: string, label: string): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n const existing = providers[providerId];\r\n if (!existing) {\r\n sendResult(ws, false, `Provider \"${providerId}\" not found`);\r\n return;\r\n }\r\n const keys = normalizeKeys(existing).filter((k) => k.label !== label);\r\n if (keys.length === 0) {\r\n delete providers[providerId];\r\n } else {\r\n writeKeysBack(existing, keys);\r\n if (existing.activeKey === label) {\r\n existing.activeKey = keys[0]!.label;\r\n }\r\n providers[providerId] = existing;\r\n }\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Key \"${label}\" deleted from ${providerId}`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleKeySetActive(\r\n ws: WebSocket,\r\n providerId: string,\r\n label: string,\r\n ): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n const existing = providers[providerId];\r\n if (!existing) {\r\n sendResult(ws, false, `Provider \"${providerId}\" not found`);\r\n return;\r\n }\r\n existing.activeKey = label;\r\n writeKeysBack(existing, normalizeKeys(existing));\r\n providers[providerId] = existing;\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Active key for ${providerId} set to \"${label}\"`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleProviderAdd(\r\n ws: WebSocket,\r\n payload: { id: string; family: string; baseUrl?: string; apiKey?: string },\r\n ): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n if (providers[payload.id]) {\r\n sendResult(ws, false, `Provider \"${payload.id}\" already exists. Use key.add to add a key.`);\r\n return;\r\n }\r\n const newProv: ProviderConfig = {\r\n type: payload.id,\r\n family: payload.family as ProviderConfig['family'],\r\n baseUrl: payload.baseUrl,\r\n };\r\n if (payload.apiKey) {\r\n newProv.apiKeys = [{ label: 'default', apiKey: payload.apiKey, createdAt: nowIso() }];\r\n newProv.activeKey = 'default';\r\n }\r\n providers[payload.id] = newProv;\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Provider \"${payload.id}\" added`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n async function handleProviderRemove(ws: WebSocket, providerId: string): Promise<void> {\r\n try {\r\n const providers = await loadSavedProviders();\r\n if (!providers[providerId]) {\r\n sendResult(ws, false, `Provider \"${providerId}\" not found`);\r\n return;\r\n }\r\n delete providers[providerId];\r\n await saveProviders(providers);\r\n sendResult(ws, true, `Provider \"${providerId}\" removed`);\r\n } catch (err) {\r\n sendResult(ws, false, err instanceof Error ? err.message : String(err));\r\n }\r\n }\r\n\r\n // ---- Config I/O helpers (mirrors auth-menu.ts patterns) ----\r\n\r\n async function loadSavedProviders(): Promise<Record<string, ProviderConfig>> {\r\n if (!opts.globalConfigPath) return {};\r\n let raw: string;\r\n try {\r\n raw = await fs.readFile(opts.globalConfigPath, 'utf8');\r\n } catch {\r\n return {};\r\n }\r\n let parsed: { providers?: Record<string, ProviderConfig> } = {};\r\n try {\r\n parsed = JSON.parse(raw) as { providers?: Record<string, ProviderConfig> };\r\n } catch {\r\n return {};\r\n }\r\n if (!parsed.providers) return {};\r\n // Decrypt encrypted secret-bearing fields so callers operate on plaintext.\r\n const keyFile = path.join(path.dirname(opts.globalConfigPath), '.key');\r\n const vault = new DefaultSecretVault({ keyFile });\r\n return decryptConfigSecrets(parsed.providers, vault);\r\n }\r\n\r\n async function saveProviders(providers: Record<string, ProviderConfig>): Promise<void> {\r\n if (!opts.globalConfigPath) return;\r\n let raw: string;\r\n try {\r\n raw = await fs.readFile(opts.globalConfigPath, 'utf8');\r\n } catch {\r\n raw = '{}';\r\n }\r\n let parsed: Record<string, unknown>;\r\n try {\r\n parsed = JSON.parse(raw) as Record<string, unknown>;\r\n } catch {\r\n parsed = {};\r\n }\r\n parsed.providers = providers;\r\n // Encrypt any plaintext secret-bearing fields before writing to disk.\r\n const keyFile = path.join(path.dirname(opts.globalConfigPath), '.key');\r\n const vault = new DefaultSecretVault({ keyFile });\r\n const encrypted = encryptConfigSecrets(parsed, vault);\r\n await atomicWrite(opts.globalConfigPath, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\r\n }\r\n\r\n function sendResult(ws: WebSocket, success: boolean, message: string): void {\r\n send(ws, { type: 'key.operation_result', payload: { success, message } });\r\n }\r\n} // end of runWebUI\r\n","import { DefaultPluginAPI, type PluginAPI, type PluginAPIInit } from '@wrongstack/core';\n\nexport default function createApi(\n ownerName: string,\n base: Omit<PluginAPIInit, 'ownerName'>,\n): PluginAPI {\n return new DefaultPluginAPI({ ownerName, ...base });\n}\n","/**\n * Unified CLI argument parsing. Three parsers that were previously\n * spread across index.ts, subcommands/index.ts, and slash-commands/index.ts.\n */\n\n/** Flags that are boolean-only (no value expected after them). */\nexport const BOOLEAN_FLAGS = new Set([\n 'yolo',\n 'verbose',\n 'trace',\n 'help',\n 'version',\n 'no-banner',\n 'no-features',\n 'tui',\n 'no-tui',\n 'no-recovery',\n 'recover',\n 'no-alt-screen',\n 'alt-screen',\n 'output-json',\n 'prompt',\n 'metrics',\n 'webui',\n]);\n\n// ------------------------------------------------------------------ main args\n\nexport interface ParsedArgs {\n flags: Record<string, string | boolean>;\n positional: string[];\n}\n\n/** Parse top-level `wstack` CLI args. */\nexport function parseArgs(argv: string[]): ParsedArgs {\n const flags: Record<string, string | boolean> = {};\n const positional: string[] = [];\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (!a) continue;\n if (a === '--') {\n positional.push(...argv.slice(i + 1));\n break;\n }\n if (a.startsWith('--')) {\n const eq = a.indexOf('=');\n if (eq !== -1) {\n flags[a.slice(2, eq)] = a.slice(eq + 1);\n continue;\n }\n const name = a.slice(2);\n if (BOOLEAN_FLAGS.has(name)) {\n flags[name] = true;\n continue;\n }\n if (i + 1 < argv.length && !(argv[i + 1] ?? '').startsWith('-')) {\n flags[name] = argv[++i] ?? '';\n } else {\n flags[name] = true;\n }\n } else if (a.startsWith('-') && a.length === 2) {\n const short = a.slice(1);\n const expand: Record<string, string> = { v: 'verbose' };\n flags[expand[short] ?? short] = true;\n } else {\n positional.push(a);\n }\n }\n return { flags, positional };\n}\n\n// --------------------------------------------------------------- auth flags\n\nexport interface AuthFlags {\n positional: string[];\n label?: string;\n family?: import('@wrongstack/core').WireFamily;\n baseUrl?: string;\n envVars?: string[];\n}\n\n/** Parse `wstack auth <provider> [--label ...] [--family ...] [...]` flags. */\nexport function parseAuthFlags(args: string[]): AuthFlags {\n const out: AuthFlags = { positional: [] };\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a === '--label') {\n const v = args[++i];\n if (v) out.label = v;\n } else if (a === '--family') {\n const v = args[++i];\n if (v) out.family = v as AuthFlags['family'];\n } else if (a === '--base-url') {\n const v = args[++i];\n if (v) out.baseUrl = v;\n } else if (a === '--env') {\n const v = args[++i];\n if (v)\n out.envVars = v\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean);\n } else if (a && !a.startsWith('--')) {\n out.positional.push(a);\n }\n }\n return out;\n}\n\n// -------------------------------------------------------------- spawn flags\n\nexport interface SpawnFlags {\n description: string;\n opts: { provider?: string; model?: string; tools?: string[]; name?: string };\n}\n\n/**\n * Parse `/spawn` flags from the args head. Supported:\n * --provider=<id> / -p <id> override the subagent's provider id\n * --model=<id> / -m <id> override the subagent's model\n * --name=<label> / -n <label> display name\n * --tools=a,b,c restrict the subagent's tool slice\n *\n * Anything after the last flag is the task description.\n */\nexport function parseSpawnFlags(input: string): SpawnFlags {\n const opts: SpawnFlags['opts'] = {};\n let rest = input;\n const consume = (re: RegExp): RegExpMatchArray | null => {\n const m = rest.match(re);\n if (m) {\n rest = rest.slice(m[0].length).replace(/^\\s+/, '');\n return m;\n }\n return null;\n };\n while (rest.length > 0) {\n let m: RegExpMatchArray | null;\n m = consume(/^--provider=(\\S+)\\s*/);\n if (m) opts.provider = m[1];\n else {\n m = consume(/^--model=(\\S+)\\s*/);\n if (m) opts.model = m[1];\n else {\n m = consume(/^--name=(\"([^\"]+)\"|(\\S+))\\s*/);\n if (m) opts.name = m[2] ?? m[3];\n else {\n m = consume(/^--tools=(\\S+)\\s*/);\n if (m)\n opts.tools = m[1]!\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean);\n else {\n m = consume(/^-p\\s+(\\S+)\\s*/);\n if (m) opts.provider = m[1];\n else {\n m = consume(/^-m\\s+(\\S+)\\s*/);\n if (m) opts.model = m[1];\n else {\n m = consume(/^-n\\s+(\"([^\"]+)\"|(\\S+))\\s*/);\n if (m) opts.name = m[2] ?? m[3];\n else break;\n }\n }\n }\n }\n }\n }\n }\n return { description: rest.trim(), opts };\n}\n","import * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport {\n type Config,\n DefaultConfigLoader,\n DefaultPathResolver,\n DefaultSecretVault,\n type WstackPaths,\n migratePlaintextSecrets,\n resolveWstackPaths,\n} from '@wrongstack/core';\n\nexport interface BootPaths {\n cwd: string;\n projectRoot: string;\n userHome: string;\n wpaths: WstackPaths;\n pathResolver: DefaultPathResolver;\n}\n\nexport interface BootConfigResult {\n paths: BootPaths;\n config: Config;\n vault: DefaultSecretVault;\n}\n\n/**\n * Resolve paths and load config. This covers:\n * - cwd/project resolution\n * - wstack paths\n * - secret vault creation + plaintext migration\n * - config loading with CLI flag overrides\n */\nexport async function bootConfig(\n flags: Record<string, string | boolean>,\n): Promise<BootConfigResult> {\n const cwd = typeof flags['cwd'] === 'string' ? path.resolve(flags['cwd']) : process.cwd();\n const pathResolver = new DefaultPathResolver(cwd);\n const projectRoot = pathResolver.projectRoot;\n const userHome = os.homedir();\n const wpaths = resolveWstackPaths({ projectRoot, userHome });\n await ensureProjectMeta(wpaths, projectRoot);\n\n // Vault must come first so the config loader can decrypt apiKey-like\n // fields. It lazily creates ~/.wrongstack/.key on first encrypt/decrypt.\n const vault = new DefaultSecretVault({ keyFile: wpaths.secretsKey });\n\n // Auto-encrypt any plaintext secrets users still have in their config\n // files (left over from before the vault existed, or hand-written).\n // Silent no-op for already-encrypted configs.\n for (const file of [wpaths.globalConfig, wpaths.projectLocalConfig]) {\n try {\n const { migrated } = await migratePlaintextSecrets(file, vault);\n if (migrated > 0) {\n process.stderr.write(`[wstack] Encrypted ${migrated} plaintext secret(s) in ${file}\\n`);\n }\n } catch {\n // best-effort — never block boot on migration issues\n }\n }\n\n const configLoader = new DefaultConfigLoader({ paths: wpaths, vault });\n const config = await configLoader.load({ cliFlags: flagsToConfigPatch(flags) });\n\n return {\n paths: { cwd, projectRoot, userHome, wpaths, pathResolver },\n config,\n vault,\n };\n}\n\nfunction flagsToConfigPatch(flags: Record<string, string | boolean>): Partial<Config> {\n const patch: Partial<Config> = {};\n if (typeof flags['provider'] === 'string') patch.provider = flags['provider'];\n if (typeof flags['model'] === 'string') patch.model = flags['model'];\n if (typeof flags['cwd'] === 'string') patch.cwd = flags['cwd'];\n if (typeof flags['log-level'] === 'string') {\n patch.log = { level: flags['log-level'] as Config['log']['level'] };\n } else if (flags['verbose']) {\n patch.log = { level: 'debug' };\n } else if (flags['trace']) {\n patch.log = { level: 'trace' };\n }\n if (flags['yolo']) patch.yolo = true;\n if (flags['no-features']) {\n patch.features = {\n mcp: false,\n plugins: false,\n memory: false,\n modelsRegistry: false,\n skills: false,\n };\n }\n return patch;\n}\n\nasync function ensureProjectMeta(paths: WstackPaths, projectRoot: string): Promise<void> {\n try {\n await fs.mkdir(paths.projectDir, { recursive: true });\n const meta = {\n hash: paths.projectHash,\n root: projectRoot,\n lastSeen: new Date().toISOString(),\n };\n await fs.writeFile(paths.projectMeta, JSON.stringify(meta, null, 2));\n } catch {\n // best-effort\n }\n}\n","import * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport * as readline from 'node:readline';\nimport type { InputReader, PromptOption } from '@wrongstack/core';\n\nexport interface ReadlineInputReaderOptions {\n historyFile?: string;\n prompt?: string;\n}\n\nexport class ReadlineInputReader implements InputReader {\n private rl?: readline.Interface;\n private readonly historyFile: string;\n private history: string[] = [];\n private pending = false;\n\n constructor(opts: ReadlineInputReaderOptions = {}) {\n this.historyFile = opts.historyFile ?? path.join(os.homedir(), '.wrongstack', 'history');\n }\n\n private async loadHistory(): Promise<void> {\n try {\n const raw = await fs.readFile(this.historyFile, 'utf8');\n this.history = raw.split('\\n').filter(Boolean).slice(-1000);\n } catch {\n this.history = [];\n }\n }\n\n private async saveHistory(): Promise<void> {\n try {\n await fs.mkdir(path.dirname(this.historyFile), { recursive: true });\n await fs.writeFile(this.historyFile, this.history.slice(-1000).join('\\n'));\n } catch {\n // ignore\n }\n }\n\n private ensure(): readline.Interface {\n if (!this.rl) {\n this.rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n history: this.history,\n terminal: process.stdin.isTTY,\n });\n }\n return this.rl;\n }\n\n async readLine(prompt?: string): Promise<string> {\n if (this.history.length === 0) await this.loadHistory();\n while (this.pending) {\n // Wait for the current read to settle before accepting another.\n await new Promise<void>((resolve) => setTimeout(resolve, 50));\n }\n this.pending = true;\n try {\n const rl = this.ensure();\n if (\n (rl as unknown as { closed?: boolean }).closed ||\n (rl as unknown as { _flushed?: boolean })._flushed\n ) {\n rl.close();\n this.rl = undefined;\n }\n const fresh = this.ensure();\n return new Promise<string>((resolve) => {\n fresh.question(prompt ?? '> ', (line) => {\n if (line.trim()) {\n this.history.push(line);\n void this.saveHistory();\n }\n resolve(line);\n });\n // Ctrl+C closes the readline interface — resolve with empty\n // string so callers treat it as cancel instead of crashing with\n // an unhandled EOF error.\n fresh.once('close', () => resolve(''));\n }).then((result) => {\n // Tear down after each prompt so the next call always starts\n // fresh. On Windows / Node ≥ 24 the interface can enter an\n // internally-closed state after question() resolves; reusing it\n // throws ERR_USE_AFTER_CLOSE.\n this.rl?.close();\n this.rl = undefined;\n return result;\n });\n } finally {\n this.pending = false;\n }\n }\n\n async readKey(prompt: string, options: PromptOption[]): Promise<string> {\n process.stdout.write(prompt);\n return new Promise<string>((resolve) => {\n const stdin = process.stdin;\n const wasRaw = stdin.isRaw;\n const wasPaused = stdin.isPaused();\n if (stdin.isTTY) stdin.setRawMode(true);\n stdin.resume();\n const onData = (buf: Buffer) => {\n const key = buf.toString();\n // Ctrl+C — treat as cancel (resolve with empty string).\n if (key === '\\x03') {\n cleanup();\n process.stdout.write('\\n');\n resolve('');\n return;\n }\n const opt = options.find(\n (o) => o.key.toLowerCase() === key.toLowerCase() || o.value === key,\n );\n if (opt) {\n cleanup();\n process.stdout.write(`${opt.key}\\n`);\n resolve(opt.value);\n }\n };\n const onClose = () => {\n cleanup();\n resolve('');\n };\n const cleanup = () => {\n stdin.off('data', onData);\n stdin.off('close', onClose);\n if (stdin.isTTY) stdin.setRawMode(wasRaw);\n if (wasPaused) stdin.pause();\n };\n stdin.on('data', onData);\n stdin.on('close', onClose);\n });\n }\n\n /**\n * Read a line of input while masking each character with a bullet so the\n * user gets visual confirmation that bytes are arriving (especially on\n * paste, which previously felt like nothing happened). Pasted chunks\n * are echoed as a run of bullets, Backspace/DEL erases one bullet, and\n * Ctrl+U / Ctrl+W are honored. Non-TTY input is read normally — there's\n * nothing to hide when piped, and echoing bullets to a file is noise.\n *\n * Returns the raw entered string (no trim — caller decides).\n */\n async readSecret(prompt: string): Promise<string> {\n const stdin = process.stdin;\n if (!stdin.isTTY) return this.readLine(prompt);\n // Tear down the active readline so we can take over stdin.\n this.rl?.close();\n this.rl = undefined;\n process.stdout.write(prompt);\n return new Promise<string>((resolve) => {\n let buf = '';\n const wasRaw = stdin.isRaw;\n stdin.setRawMode(true);\n stdin.resume();\n stdin.setEncoding('utf8');\n\n const eraseChar = () => {\n // Move cursor back, overwrite with space, move back again.\n process.stdout.write('\\b \\b');\n };\n const eraseAll = () => {\n for (let i = 0; i < buf.length; i++) eraseChar();\n };\n\n const onData = (chunk: string) => {\n // Process the whole chunk at once — paste arrives as one event.\n // We walk char-by-char so embedded control bytes (e.g. a stray\n // CR inside a paste) terminate input cleanly.\n for (const ch of chunk) {\n if (ch === '\\r' || ch === '\\n') {\n cleanup();\n process.stdout.write(` ${dim(`[${buf.length} chars]`)}\\n`);\n resolve(buf);\n return;\n }\n if (ch === '\u0003') {\n // Ctrl+C\n cleanup();\n process.stdout.write('\\n');\n process.exit(130);\n }\n if (ch === '\u0015') {\n // Ctrl+U — clear line\n eraseAll();\n buf = '';\n continue;\n }\n if (ch === '\u0017') {\n // Ctrl+W — erase last whitespace-delimited token\n const m = buf.match(/(\\S+\\s*)$/);\n const drop = m ? m[0].length : buf.length;\n for (let i = 0; i < drop; i++) eraseChar();\n buf = buf.slice(0, buf.length - drop);\n continue;\n }\n if (ch === '' || ch === '\\b') {\n if (buf.length > 0) {\n buf = buf.slice(0, -1);\n eraseChar();\n }\n continue;\n }\n // Skip other control bytes silently (escape sequences, etc.).\n if (ch < ' ') continue;\n buf += ch;\n process.stdout.write('•');\n }\n };\n const cleanup = () => {\n stdin.off('data', onData);\n stdin.setRawMode(wasRaw);\n stdin.pause();\n };\n stdin.on('data', onData);\n });\n }\n\n async close(): Promise<void> {\n await this.saveHistory();\n this.rl?.close();\n this.rl = undefined;\n }\n}\n\n// Local ANSI dim — kept inline so this module has no @wrongstack/core\n// dependency for its single visual flourish.\nfunction dim(s: string): string {\n if (!process.stdout.isTTY) return s;\n return `\u001b[2m${s}\u001b[22m`;\n}\n","/**\n * Shared provider-config helpers used by the picker, main boot sequence,\n * and subcommands. Keeps provider key detection and alias resolution in\n * one place so the logic doesn't drift between call sites.\n */\nimport type { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core';\n\n/**\n * Does this provider have an API key available — either in the\n * environment (via one of its known env vars) or stored in config\n * (encrypted or plaintext)? Used to filter the picker to providers\n * the user can actually use right now.\n */\nexport function hasApiKey(provider: ResolvedProvider, config?: Config): boolean {\n if (provider.envVars.some((v) => !!process.env[v])) return true;\n const entry = config?.providers?.[provider.id];\n if (!entry) return false;\n if (typeof entry.apiKey === 'string' && entry.apiKey.length > 0) return true;\n if (Array.isArray(entry.apiKeys) && entry.apiKeys.some((k) => k?.apiKey)) return true;\n return false;\n}\n\n/**\n * Build the list of providers the user can switch to mid-session.\n * Only includes providers that have an API key available (env var or\n * stored config). Falls back to the full catalog when no keys are found.\n *\n * Models are inlined from the catalog (or from `cfg.models` for custom\n * entries) so the picker can show a real selection.\n */\nexport async function buildPickableProviders(\n modelsRegistry: ModelsRegistry,\n config: Config,\n): Promise<Array<{ id: string; family: string; models: string[] }>> {\n const overlay = config.providers ?? {};\n let catalog: Awaited<ReturnType<typeof modelsRegistry.listProviders>> = [];\n try {\n catalog = await modelsRegistry.listProviders();\n } catch {\n // catalog unavailable — keyed-by-config-only path still works\n }\n const catalogById = new Map(catalog.map((p) => [p.id, p]));\n const hasKey = (id: string): boolean => {\n const entry = overlay[id];\n const envHit = catalogById.get(id)?.envVars.some((v) => !!process.env[v]);\n if (envHit) return true;\n if (!entry) return false;\n if (typeof entry.apiKey === 'string' && entry.apiKey.length > 0) return true;\n if (Array.isArray(entry.apiKeys) && entry.apiKeys.some((k) => k?.apiKey)) return true;\n return false;\n };\n const seen = new Set<string>();\n const out: Array<{ id: string; family: string; models: string[] }> = [];\n for (const [id, cfg] of Object.entries(overlay)) {\n if (!hasKey(id)) continue;\n seen.add(id);\n const catalogType = cfg.type && cfg.type !== id ? cfg.type : id;\n const inherited = catalogById.get(catalogType);\n const family = cfg.family ?? inherited?.family ?? 'unsupported';\n if (family === 'unsupported') continue;\n const models =\n cfg.models && cfg.models.length > 0\n ? [...cfg.models]\n : (inherited?.models ?? []).map((m) => m.id);\n out.push({ id, family, models });\n }\n for (const p of catalog) {\n if (seen.has(p.id)) continue;\n if (p.family === 'unsupported') continue;\n if (!hasKey(p.id)) continue;\n out.push({ id: p.id, family: p.family, models: p.models.map((m) => m.id) });\n }\n return out;\n}\n\n/**\n * Resolve a provider id that may be an alias. When the user has\n * `providers[id].type` pointing at a different catalog entry, return\n * the catalog id so downstream lookups still work. Returns the\n * original id unchanged when it's a direct catalog match.\n */\nexport function resolveProviderAlias(providerId: string, config: Config): string {\n const savedAlias = config.providers?.[providerId];\n if (savedAlias?.type && savedAlias.type !== providerId) {\n return savedAlias.type;\n }\n return providerId;\n}\n","import type { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport { hasApiKey } from './provider-helpers.js';\nimport type { TerminalRenderer } from './renderer.js';\n\nexport interface PickerResult {\n provider: string;\n model: string;\n}\n\n/**\n * Interactive provider + model picker. Lists supported providers grouped\n * by wire family — by default only those with an API key (env or stored\n * config), so you see only what you can actually launch into. Falls back\n * to the full catalog when no keys are found anywhere.\n *\n * When `defaultProvider`/`defaultModel` are passed, they're pre-selected\n * so the user can press Enter to accept the previous choice.\n */\nexport async function runPicker(deps: {\n modelsRegistry: ModelsRegistry;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n config?: Config;\n defaultProvider?: string;\n defaultModel?: string;\n}): Promise<PickerResult | undefined> {\n const { modelsRegistry, renderer, reader, config, defaultProvider, defaultModel } = deps;\n\n renderer.write(\n `\\n${color.bold(theme.primary('WrongStack') + color.dim(' — Provider & Model Selection'))}\\n`,\n );\n renderer.write(color.dim('Loading provider catalog…\\n'));\n\n let providers: ResolvedProvider[];\n try {\n providers = await modelsRegistry.listProviders();\n } catch {\n renderer.writeError(\n 'Failed to load provider catalog. Pass --provider and --model to skip the picker.',\n );\n return undefined;\n }\n\n // Drop unsupported wire families — they need a plugin and can't be\n // selected through this path.\n const supported = providers.filter((p) => p.family !== 'unsupported');\n\n // Build the display list by overlaying saved config on top of the\n // catalog. Two kinds of saved entries matter:\n // 1. The map key matches a catalog id (`zai-coding-plan`) — the\n // user may have overridden family/baseUrl. We MUST honor those\n // overrides for grouping/display, otherwise an entry the user\n // saved as `family: \"anthropic\"` would still appear under the\n // catalog's `openai-compatible` group.\n // 2. The map key is an alias not in the catalog. Its `cfg.type` may\n // still point at a catalog id, in which case we inherit the\n // model list and display name from there.\n const catalogById = new Map(supported.map((p) => [p.id, p]));\n const overlay = config?.providers ?? {};\n const seen = new Set<string>();\n const merged: ResolvedProvider[] = [];\n for (const p of supported) {\n const cfg = overlay[p.id];\n seen.add(p.id);\n if (cfg) {\n merged.push({\n ...p,\n family: cfg.family ?? p.family,\n apiBase: cfg.baseUrl ?? p.apiBase,\n envVars: cfg.envVars && cfg.envVars.length > 0 ? cfg.envVars : p.envVars,\n // When the user has saved an explicit model list, it wins — they\n // know which models their endpoint actually serves (e.g. LM\n // Studio, vLLM, or a proxy with custom model ids). Otherwise the\n // catalog list keeps providing suggestions.\n models:\n cfg.models && cfg.models.length > 0\n ? cfg.models.map((m) => ({ id: m, name: m }))\n : p.models,\n });\n } else {\n merged.push(p);\n }\n }\n for (const [id, cfg] of Object.entries(overlay)) {\n if (seen.has(id)) continue;\n if (!cfg?.family || cfg.family === 'unsupported') continue;\n const catalogType = cfg.type && cfg.type !== id ? cfg.type : undefined;\n const inherited = catalogType ? catalogById.get(catalogType) : undefined;\n merged.push({\n id,\n name: inherited ? `${inherited.name} ${color.dim('(alias)')}` : id,\n family: cfg.family,\n apiBase: cfg.baseUrl ?? inherited?.apiBase,\n envVars: cfg.envVars ?? inherited?.envVars ?? [],\n models:\n cfg.models && cfg.models.length > 0\n ? cfg.models.map((m) => ({ id: m, name: m }))\n : (inherited?.models ?? []),\n npm: inherited?.npm,\n });\n }\n\n if (merged.length === 0) {\n renderer.writeError('No supported providers found in catalog.');\n return undefined;\n }\n\n // Filter to keyed providers. If none are keyed (fresh install, no env\n // vars set), fall back to the full list and prompt the user to add a\n // key — picking a keyless provider here is still useful because the\n // very next step (`wstack auth <prov>`) needs to know which provider.\n const keyed = merged.filter((p) => hasApiKey(p, config));\n let displayList = keyed;\n let showingFallback = false;\n if (keyed.length === 0) {\n displayList = merged;\n showingFallback = true;\n }\n\n // Group by family for nicer display\n const families = new Map<string, ResolvedProvider[]>();\n for (const p of displayList) {\n const list = families.get(p.family) ?? [];\n list.push(p);\n families.set(p.family, list);\n }\n\n // Build a flat numbered list (family → providers). Track which entry\n // matches the current default so we can highlight + accept Enter.\n const ordered: Array<{ provider: ResolvedProvider; index: number }> = [];\n const familyOrder = ['anthropic', 'openai', 'google', 'openai-compatible'];\n let idx = 1;\n let defaultIdx: number | undefined;\n renderer.write('\\n');\n for (const fam of familyOrder) {\n const list = families.get(fam);\n if (!list || list.length === 0) continue;\n renderer.write(` ${color.bold(fam)}\\n`);\n for (const p of list) {\n const envFound = p.envVars.some((v) => !!process.env[v]);\n const entry = config?.providers?.[p.id];\n const configKey =\n (typeof entry?.apiKey === 'string' && entry.apiKey.length > 0) ||\n (Array.isArray(entry?.apiKeys) && entry!.apiKeys!.some((k) => k?.apiKey));\n // ● green = env key, ◉ cyan = stored in config, ○ dim = no key\n const marker = envFound ? color.green('●') : configKey ? color.cyan('◉') : color.dim('○');\n const isDefault = p.id === defaultProvider;\n if (isDefault) defaultIdx = idx;\n const idLabel = isDefault ? color.bold(p.id) : p.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n ` ${color.dim(`${idx}.`.padStart(4))} ${marker} ${idLabel.padEnd(22)} ${color.dim(p.name)}${suffix}\\n`,\n );\n ordered.push({ provider: p, index: idx });\n idx++;\n }\n }\n\n if (showingFallback) {\n renderer.write(\n `\\n ${color.yellow('⚠ No API keys detected.')} ${color.dim('Pick a provider, then run `wstack auth <provider>` to add one.')}\\n`,\n );\n } else {\n renderer.write(`\\n ${color.dim('● = env key ◉ = stored in config ○ = no key')}\\n`);\n }\n\n // Provider prompt. Enter on an empty line accepts the default when one\n // is present; otherwise we treat it as cancel.\n const defaultHint =\n defaultIdx !== undefined && defaultProvider\n ? ` ${color.dim(`[Enter = ${defaultProvider}]`)}`\n : '';\n const providerAnswer = (\n await reader.readLine(\n `\\n${color.amber('?')} Select provider (1-${ordered.length})${defaultHint}: `,\n )\n ).trim();\n\n if (!providerAnswer) {\n if (defaultIdx !== undefined) {\n const def = ordered[defaultIdx - 1];\n if (def) return pickModel(def.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n\n const providerIdx = Number.parseInt(providerAnswer, 10);\n if (Number.isNaN(providerIdx) || providerIdx < 1 || providerIdx > ordered.length) {\n // Try matching by id\n const byId = ordered.find((o) => o.provider.id.toLowerCase() === providerAnswer.toLowerCase());\n if (!byId) {\n renderer.writeError(`Invalid selection: \"${providerAnswer}\"`);\n return undefined;\n }\n return pickModel(byId.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n\n const chosen = ordered[providerIdx - 1];\n if (!chosen) return undefined;\n // Only honor the default-model hint when the user picked the default\n // provider; switching providers invalidates it.\n const modelHint = chosen.provider.id === defaultProvider ? defaultModel : undefined;\n return pickModel(chosen.provider, modelsRegistry, renderer, reader, modelHint);\n}\n\nasync function pickModel(\n provider: ResolvedProvider,\n registry: ModelsRegistry,\n renderer: TerminalRenderer,\n reader: ReadlineInputReader,\n defaultModel?: string,\n): Promise<PickerResult | undefined> {\n renderer.write(`\\n ${color.bold(provider.name)} ${color.dim(`(${provider.id})`)} models:\\n\\n`);\n\n const models = [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n\n if (models.length === 0) {\n renderer.writeError(' No models listed for this provider in the catalog.');\n return undefined;\n }\n\n // Find default-model index for the \"Enter = default\" hint.\n const defaultIdxInModels =\n defaultModel !== undefined ? models.findIndex((m) => m.id === defaultModel) : -1;\n\n // Show paginated — up to 30 at a time\n const pageSize = 30;\n let offset = 0;\n\n while (offset < models.length) {\n const page = models.slice(offset, offset + pageSize);\n for (let i = 0; i < page.length; i++) {\n const m = page[i]!;\n const num = offset + i + 1;\n const ctx = m.limit?.context\n ? `${(m.limit.context / 1000).toFixed(0)}k`.padStart(6)\n : ' ?';\n const cost = m.cost?.input !== undefined ? `$${m.cost.input}/$${m.cost.output ?? '?'}` : '';\n const caps: string[] = [];\n if (m.tool_call) caps.push('tools');\n if (m.reasoning) caps.push('reason');\n if (m.modalities?.input?.includes('image')) caps.push('vision');\n const capStr = caps.length > 0 ? color.dim(caps.join(',')) : '';\n const isDefault = m.id === defaultModel;\n const idLabel = isDefault ? color.bold(m.id) : m.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n ` ${color.dim(`${num}.`.padStart(5))} ${idLabel.padEnd(44)} ${color.dim(ctx)} ${color.dim(cost.padEnd(14))} ${capStr}${suffix}\\n`,\n );\n }\n offset += pageSize;\n\n if (offset < models.length) {\n const more = (\n await reader.readLine(\n `\\n${color.amber('?')} Showing ${Math.min(offset, models.length)}/${models.length} — Enter number or ${color.dim('Enter')} for more: `,\n )\n ).trim();\n if (!more) continue; // show next page\n return resolveModelSelection(more, models, provider, registry, renderer, reader);\n }\n }\n\n // All shown — final prompt. Enter accepts the default model when present.\n const defaultHint =\n defaultIdxInModels >= 0 && defaultModel ? ` ${color.dim(`[Enter = ${defaultModel}]`)}` : '';\n const answer = (\n await reader.readLine(`\\n${color.amber('?')} Select model (1-${models.length})${defaultHint}: `)\n ).trim();\n if (!answer) {\n if (defaultIdxInModels >= 0 && defaultModel) {\n renderer.write(\n `\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(defaultModel)}\\n\\n`,\n );\n return { provider: provider.id, model: defaultModel };\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n return resolveModelSelection(answer, models, provider, registry, renderer, reader);\n}\n\nasync function resolveModelSelection(\n answer: string,\n models: {\n id: string;\n name: string;\n release_date?: string;\n limit?: { context?: number };\n cost?: { input?: number; output?: number };\n tool_call?: boolean;\n reasoning?: boolean;\n modalities?: { input?: string[] };\n }[],\n provider: ResolvedProvider,\n _registry: ModelsRegistry,\n renderer: TerminalRenderer,\n _reader: ReadlineInputReader,\n): Promise<PickerResult | undefined> {\n const idx = Number.parseInt(answer, 10);\n let modelId: string | undefined;\n\n if (!Number.isNaN(idx) && idx >= 1 && idx <= models.length) {\n modelId = models[idx - 1]!.id;\n } else {\n // Try fuzzy matching by id\n const lower = answer.toLowerCase();\n const match = models.find((m) => m.id.toLowerCase() === lower);\n if (match) {\n modelId = match.id;\n } else {\n // Partial match\n const partial = models.filter((m) => m.id.toLowerCase().includes(lower));\n if (partial.length === 1) {\n modelId = partial[0]!.id;\n } else if (partial.length > 1) {\n renderer.writeError(`\"${answer}\" matches multiple models. Be more specific.`);\n return undefined;\n }\n }\n }\n\n if (!modelId) {\n // Use as-is (user might know the exact model string)\n modelId = answer;\n }\n\n renderer.write(`\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(modelId)}\\n\\n`);\n\n return { provider: provider.id, model: modelId };\n}\n\n// --- Helpers ---\n\n// Simple theme alias (avoids importing the full theme module just for one color)\nconst theme = { primary: color.amber };\n\n/**\n * Save provider + model to the global config file.\n * Returns true if saved successfully.\n */\nexport async function saveToGlobalConfig(\n configPath: string,\n provider: string,\n model: string,\n): Promise<boolean> {\n try {\n const { atomicWrite } = await import('@wrongstack/core');\n const fs = await import('node:fs/promises');\n\n let existing: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(configPath, 'utf8');\n existing = JSON.parse(raw) as Record<string, unknown>;\n } catch {\n // No existing config\n }\n\n existing.provider = provider;\n existing.model = model;\n await atomicWrite(configPath, JSON.stringify(existing, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { Context } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\n\nexport interface ProjectFacts {\n build?: string;\n test?: string;\n lint?: string;\n run?: string;\n hints: string[];\n}\n\nasync function pathExists(file: string): Promise<boolean> {\n try {\n await fs.access(file);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function detectPackageManager(root: string, declared?: string): Promise<string> {\n if (declared) {\n const name = declared.split('@')[0];\n if (name) return name;\n }\n if (await pathExists(path.join(root, 'pnpm-lock.yaml'))) return 'pnpm';\n if (await pathExists(path.join(root, 'bun.lockb'))) return 'bun';\n if (await pathExists(path.join(root, 'bun.lock'))) return 'bun';\n if (await pathExists(path.join(root, 'yarn.lock'))) return 'yarn';\n return 'npm';\n}\n\nfunction hasUsableScript(scripts: Record<string, string>, name: string): boolean {\n const script = scripts[name];\n if (typeof script !== 'string' || script.trim() === '') return false;\n if (name === 'test' && /no test specified/i.test(script)) return false;\n return true;\n}\n\nfunction parseMakeTargets(makefile: string): Set<string> {\n const targets = new Set<string>();\n for (const line of makefile.split(/\\r?\\n/)) {\n if (line.startsWith('\\t') || line.trimStart().startsWith('#')) continue;\n const match = /^([A-Za-z0-9_.-]+)\\s*:(?![=])/.exec(line);\n if (match?.[1]) targets.add(match[1]);\n }\n return targets;\n}\n\nexport async function detectProjectFacts(root: string): Promise<ProjectFacts> {\n const facts: ProjectFacts = { hints: [] };\n try {\n const pkg = JSON.parse(await fs.readFile(path.join(root, 'package.json'), 'utf8')) as {\n scripts?: Record<string, string>;\n packageManager?: string;\n };\n const scripts = pkg.scripts ?? {};\n const pm = await detectPackageManager(root, pkg.packageManager);\n if (hasUsableScript(scripts, 'build')) facts.build = `${pm} run build`;\n if (hasUsableScript(scripts, 'test')) facts.test = `${pm} test`;\n if (hasUsableScript(scripts, 'lint')) facts.lint = `${pm} run lint`;\n const runScript = ['dev', 'start', 'serve', 'preview'].find((name) =>\n hasUsableScript(scripts, name),\n );\n if (runScript) facts.run = `${pm} run ${runScript}`;\n facts.hints.push(Object.keys(scripts).length > 0 ? 'package.json scripts' : 'package.json');\n } catch {\n /* not node */\n }\n try {\n if (!(await pathExists(path.join(root, 'pyproject.toml')))) throw new Error('not python');\n facts.test ??= 'pytest';\n facts.lint ??= 'ruff check .';\n facts.hints.push('pyproject.toml');\n } catch {\n /* not python */\n }\n try {\n if (!(await pathExists(path.join(root, 'go.mod')))) throw new Error('not go');\n facts.build ??= 'go build ./...';\n facts.test ??= 'go test ./...';\n facts.run ??= 'go run .';\n facts.hints.push('go.mod');\n } catch {\n /* not go */\n }\n try {\n if (!(await pathExists(path.join(root, 'Cargo.toml')))) throw new Error('not rust');\n facts.build ??= 'cargo build';\n facts.test ??= 'cargo test';\n facts.lint ??= 'cargo clippy';\n facts.run ??= 'cargo run';\n facts.hints.push('Cargo.toml');\n } catch {\n /* not rust */\n }\n try {\n const makefile = await fs.readFile(path.join(root, 'Makefile'), 'utf8');\n const targets = parseMakeTargets(makefile);\n facts.build ??= targets.has('build') ? 'make build' : 'make';\n if (targets.has('test')) facts.test ??= 'make test';\n if (targets.has('lint')) facts.lint ??= 'make lint';\n const runTarget = ['run', 'dev', 'start', 'serve'].find((name) => targets.has(name));\n if (runTarget) facts.run ??= `make ${runTarget}`;\n facts.hints.push('Makefile');\n } catch {\n /* no make */\n }\n return facts;\n}\n\nexport function renderAgentsTemplate(f: ProjectFacts): string {\n const cmd = (s?: string) => (s ? `\\`${s}\\`` : '_TODO_');\n return `# AGENTS.md\n\nThis file is loaded into WrongStack's system prompt as project context.\nKeep it concise, factual, and durable: write the information future agents\nneed before they touch this codebase.\n\n## Project brief\n\n- **Purpose:** _What does this project do, and why does it exist?_\n- **Primary users:** _Who uses it: developers, operators, customers, internal systems?_\n- **Runtime/deployment:** _Where does it run: CLI, server, browser, worker, library, package?_\n- **Main entry points:** _Which files or commands should an agent inspect first?_\n\n## How to work safely\n\n- _Project-specific rules the agent should always follow._\n- _Files, generated artifacts, migrations, or config the agent should not edit without asking._\n- _Preferred style or architecture choices that are not obvious from the code._\n\n## Commands\n\n- **Build:** ${cmd(f.build)}\n- **Test:** ${cmd(f.test)}\n- **Lint:** ${cmd(f.lint)}\n- **Run locally:** ${cmd(f.run)}\n\n## Architecture notes\n\n_Summarize the important modules, data flow, boundaries, and ownership rules.\nMention anything a newcomer might misread._\n\n## Domain knowledge\n\n_Business rules, acronyms, invariants, external services, and notes where the\ncode looks unusual but is intentional._\n\n## Verification checklist\n\n- _What should be run after code changes?_\n- _What manual smoke test proves the common path still works?_\n- _What failure modes deserve extra attention?_\n\n## Useful pointers\n\n- _Docs, dashboards, runbooks, issue trackers, design notes, or owner contacts._\n`;\n}\n\nexport function countTurnPairs(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n if (m.role === 'user' || m.role === 'assistant') count++;\n }\n return Math.floor(count / 2);\n}\n\nexport function countToolUses(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n if (Array.isArray(m.content)) count += m.content.filter((b) => b.type === 'tool_use').length;\n }\n return count;\n}\n\nexport function countToolResults(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n if (Array.isArray(m.content)) count += m.content.filter((b) => b.type === 'tool_result').length;\n }\n return count;\n}\n\nexport function estimateTokens(messages: Context['messages']): number {\n let total = 0;\n for (const m of messages) {\n const content = m.content;\n if (typeof content === 'string') {\n total += Math.ceil(content.length / 4);\n } else if (Array.isArray(content)) {\n for (const b of content) {\n if (b.type === 'text') total += Math.ceil(b.text.length / 4);\n else if (b.type === 'tool_use' || b.type === 'tool_result')\n total += Math.ceil(JSON.stringify(b).length / 4);\n }\n }\n }\n return total;\n}\n\nexport function statusIcon(status: string): string {\n if (status === 'healthy') return color.green('\\u25cf');\n if (status === 'degraded') return color.yellow('\\u25cf');\n return color.red('\\u25cf');\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildClearCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'clear',\n description: 'Reset the session and start a new one.',\n help: [\n 'Usage:',\n ' /clear',\n '',\n 'Wipes everything in the current REPL state: messages, todos, read-file tracking,',\n 'file mtimes, meta. Memory store entries (all scopes) are cleared too. The terminal',\n 'is wiped. Use this when you want a fresh conversation without restarting `wstack`.',\n ].join('\\n'),\n async run(_args, ctx) {\n if (ctx) {\n ctx.state.replaceMessages([]);\n ctx.state.replaceTodos([]);\n ctx.readFiles.clear();\n ctx.fileMtimes.clear();\n for (const key of Object.keys(ctx.meta)) ctx.state.deleteMeta(key);\n }\n await opts.memoryStore?.clear();\n opts.onClear?.();\n opts.renderer.clear();\n const msg = 'Session cleared (context, memory, and history reset).';\n opts.renderer.writeInfo(msg);\n return { message: msg };\n },\n };\n}\n","import { spawn } from 'node:child_process';\nimport { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\n/**\n * Run git commands.\n */\nasync function runGit(args: string[], cwd: string): Promise<{ stdout: string; stderr: string; code: number }> {\n return new Promise((resolve) => {\n const child = spawn('git', args, {\n cwd,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n let stdout = '';\n let stderr = '';\n child.stdout?.on('data', (d) => (stdout += d));\n child.stderr?.on('data', (d) => (stderr += d));\n child.on('close', (code) => resolve({ stdout, stderr, code: code ?? 0 }));\n });\n}\n\n/**\n * Detect conventional commit type from diff stats.\n */\nfunction detectCommitType(stats: string): string {\n const lines = stats.split('\\n');\n const hasTestFiles = lines.some(\n (l) => l.includes('_test.') || l.includes('.test.') || l.includes('.spec.'),\n );\n const hasDocs = lines.some(\n (l) =>\n l.includes('README') || l.includes('CHANGELOG') || l.includes('docs/') || l.includes('.md'),\n );\n const hasConfig = lines.some(\n (l) => l.includes('config') || l.includes('tsconfig') || l.includes('.json'),\n );\n\n if (hasTestFiles) return 'test';\n if (hasDocs) return 'docs';\n if (hasConfig) return 'chore';\n return 'feat';\n}\n\n/**\n * Generate a conventional commit message from git diff.\n */\nasync function generateCommitMessage(cwd: string): Promise<string> {\n // Get diff stats\n const statsResult = await runGit(['diff', '--stat'], cwd);\n if (statsResult.code !== 0) return 'chore: update';\n\n // Get list of changed files\n const nameResult = await runGit(['diff', '--name-only'], cwd);\n const files = nameResult.stdout.split('\\n').filter(Boolean);\n\n // Detect commit type\n const commitType = detectCommitType(statsResult.stdout);\n\n // Generate scope from primary directory\n let scope = '';\n if (files.length > 0) {\n const primary = files[0]!.split('/')[0];\n if (primary && primary !== 'packages' && primary !== 'apps' && primary !== 'node_modules') {\n scope = `(${primary})`;\n }\n }\n\n // Generate message\n if (files.length === 0) {\n return `${commitType}${scope}: update`;\n }\n\n if (files.length <= 3) {\n const summary = files.map((f) => f.split('/').pop()).join(', ');\n return `${commitType}${scope}: ${summary}`;\n }\n\n const summary =\n files.slice(0, 3).map((f) => f.split('/').pop()).join(', ') + ` and ${files.length - 3} more`;\n return `${commitType}${scope}: ${summary}`;\n}\n\n/**\n * Check if there are uncommitted changes.\n */\nasync function hasUncommittedChanges(cwd: string): Promise<boolean> {\n const result = await runGit(['status', '--porcelain'], cwd);\n return result.stdout.trim().length > 0;\n}\n\n/**\n * Check if git repo exists.\n */\nasync function isGitRepo(cwd: string): Promise<boolean> {\n const result = await runGit(['rev-parse', '--git-dir'], cwd);\n return result.code === 0;\n}\n\nexport function buildCommitCommand(_opts: SlashCommandContext): SlashCommand {\n return {\n name: 'commit',\n description: 'Stage all changes and commit with auto-generated message.',\n aliases: ['gc'],\n async run(args, ctx) {\n const cwd = ctx?.cwd ?? process.cwd();\n\n // Check if git repo\n if (!(await isGitRepo(cwd))) {\n return { message: 'Not a git repository.' };\n }\n\n // Check for uncommitted changes\n if (!(await hasUncommittedChanges(cwd))) {\n return { message: 'Nothing to commit (working tree clean).' };\n }\n\n // Parse flags\n const dryRun = args.includes('--dry-run') || args.includes('-n');\n\n // Generate commit message\n const message = await generateCommitMessage(cwd);\n\n if (dryRun) {\n return {\n message: `Would commit:\\n\\n ${color.green(message)}\\n\\n${color.dim('(dry-run — no actual commit)')}`,\n };\n }\n\n // Stage all changes\n const stageResult = await runGit(['add', '.'], cwd);\n if (stageResult.code !== 0) {\n return { message: `Stage failed: ${stageResult.stderr}` };\n }\n\n // Commit\n const commitResult = await runGit(['commit', '-m', message], cwd);\n if (commitResult.code !== 0) {\n return { message: `Commit failed: ${commitResult.stderr}` };\n }\n\n // Get commit hash\n const hashResult = await runGit(['rev-parse', '--short', 'HEAD'], cwd);\n const hash = hashResult.stdout.trim();\n\n // Ask about push\n const pushResult = await runGit(['remote'], cwd);\n const hasRemote = pushResult.stdout.trim().length > 0;\n\n let pushMsg = '';\n if (hasRemote) {\n pushMsg = `\\n\\n${color.dim('Tip: Run /push to push to remote')}`;\n }\n\n return {\n message: `${color.green('✓')} Committed: ${color.bold(message)}\\n ${color.dim(hash)}${pushMsg}`,\n };\n },\n };\n}\n\nexport function buildGitcheckCommand(_opts: SlashCommandContext): SlashCommand {\n return {\n name: 'gitcheck',\n description: 'Check for uncommitted changes (for system prompt integration).',\n aliases: ['gcstatus'],\n async run(_args, ctx) {\n const cwd = ctx?.cwd ?? process.cwd();\n\n if (!(await isGitRepo(cwd))) {\n return { message: '' };\n }\n\n if (!(await hasUncommittedChanges(cwd))) {\n return { message: '' };\n }\n\n const statusResult = await runGit(['status', '--porcelain'], cwd);\n const lines = statusResult.stdout.split('\\n').filter(Boolean);\n const count = lines.length;\n\n if (count === 0) return { message: '' };\n\n return {\n message: `⚠ ${color.yellow(`${count} uncommitted change${count > 1 ? 's' : ''}`)} — consider /commit`,\n };\n },\n };\n}\n\nexport function buildPushCommand(_opts: SlashCommandContext): SlashCommand {\n return {\n name: 'push',\n description: 'Push to remote after commit.',\n async run(args, ctx) {\n const cwd = ctx?.cwd ?? process.cwd();\n\n if (!(await isGitRepo(cwd))) {\n return { message: 'Not a git repository.' };\n }\n\n const dryRun = args.includes('--dry-run') || args.includes('-n');\n const force = args.includes('--force') || args.includes('-f');\n\n const remoteResult = await runGit(['remote'], cwd);\n const remotes = remoteResult.stdout.split('\\n').filter(Boolean);\n\n if (remotes.length === 0) {\n return { message: 'No remote configured. Add one with: git remote add origin <url>' };\n }\n\n if (dryRun) {\n return {\n message: `Would push to ${remotes.join(', ')}${force ? ' (force)' : ''}\\n${color.dim('(dry-run)')}`,\n };\n }\n\n const branchResult = await runGit(['rev-parse', '--abbrev-ref', 'HEAD'], cwd);\n const branch = branchResult.stdout.trim() || 'main';\n\n const pushArgs = ['push'];\n if (force) pushArgs.push('--force');\n pushArgs.push(...remotes, branch);\n\n const pushResult = await runGit(pushArgs, cwd);\n if (pushResult.code !== 0) {\n return { message: `Push failed: ${pushResult.stderr}` };\n }\n\n return {\n message: `${color.green('✓')} Pushed to ${remotes.join(', ')} (${branch})`,\n };\n },\n };\n}","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildCompactCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'compact',\n description: 'Compact the context window.',\n help: [\n 'Usage:',\n ' /compact Run the configured compactor with default settings.',\n ' /compact aggressive Compact more aggressively.',\n '',\n 'The compactor summarizes older turns to reclaim tokens.',\n ].join('\\n'),\n async run(args, ctx) {\n if (!opts.compactor) {\n const msg = 'No compactor configured.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n const aggressive = args.trim() === 'aggressive';\n const report = await opts.compactor.compact(ctx, { aggressive });\n const reductions = report.reductions\n .map((r: { phase: string; saved: number }) => `${r.phase}: ${r.saved}`)\n .join(', ');\n const repaired = report.repaired\n ? `; repaired ${report.repaired.removedToolUses.length} tool_use, ${report.repaired.removedToolResults.length} tool_result, ${report.repaired.removedMessages} empty messages`\n : '';\n const msg = `Compaction: ${report.before} -> ${report.after} tokens (${reductions})${repaired}`;\n opts.renderer.writeInfo(msg);\n return { message: msg };\n },\n };\n}\n","import {\n color,\n formatContextWindowModeList,\n getContextWindowMode,\n repairToolUseAdjacency,\n resolveContextWindowPolicy,\n type ContextWindowPolicy,\n} from '@wrongstack/core';\nimport type { Context, SlashCommand } from '@wrongstack/core';\nimport { countToolResults, countToolUses, countTurnPairs, estimateTokens } from './helpers.js';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildContextCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'context',\n aliases: ['ctx'],\n description: 'Show context window summary.',\n help: [\n 'Usage:',\n ' /context Show counts: messages, est. tokens, tool calls, todos, read files.',\n ' /context detail As above, plus model, cwd, projectRoot, and the file list.',\n ' /context repair Repair orphan tool_use/tool_result blocks after manual compaction.',\n ' /context mode List context-window modes.',\n ' /context mode <id> Switch context-window mode for this session.',\n ].join('\\n'),\n async run(args, ctx) {\n const trimmed = args.trim();\n\n if (trimmed === 'mode' || trimmed === 'modes') {\n const active = readPolicy(ctx)?.id ?? 'balanced';\n const msg = `${color.bold('Context Window Modes')}\\n${formatContextWindowModeList(active)}`;\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n }\n\n if (trimmed === 'repair') {\n const before = ctx.messages.length;\n const repaired = repairToolUseAdjacency(ctx.messages);\n if (repaired.report.changed) {\n ctx.state.replaceMessages(repaired.messages);\n }\n const msg = repaired.report.changed\n ? [\n `${color.green('Context repaired')}`,\n ` messages: ${before} -> ${ctx.messages.length}`,\n ` tool_use: removed ${repaired.report.removedToolUses.length}`,\n ` tool_result: removed ${repaired.report.removedToolResults.length}`,\n ` empty msgs: removed ${repaired.report.removedMessages}`,\n ].join('\\n')\n : 'Context repair: no orphan tool_use/tool_result blocks found.';\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n }\n\n if (trimmed.startsWith('mode ')) {\n const id = trimmed.slice('mode '.length).trim();\n const mode = getContextWindowMode(id);\n if (!mode) {\n const msg = `Unknown context mode \"${id}\". Use /context mode to list modes.`;\n opts.renderer.write(`${color.red(msg)}\\n`);\n return { message: msg };\n }\n const policy = resolveContextWindowPolicy({}, mode.id);\n ctx.meta['contextWindowMode'] = policy.id;\n ctx.meta['contextWindowPolicy'] = policy;\n const msg = [\n `${color.green('Context mode set:')} ${policy.id} (${policy.name})`,\n ` thresholds: warn ${pct(policy.thresholds.warn)}, soft ${pct(policy.thresholds.soft)}, hard ${pct(policy.thresholds.hard)}`,\n ` preserve: last ${policy.preserveK} user/assistant messages`,\n ` elide: old tool results >= ${policy.eliseThreshold.toLocaleString()} tokens`,\n ].join('\\n');\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n }\n\n const messages = ctx.messages;\n const detailed = trimmed === 'detail';\n const policy = readPolicy(ctx);\n const lines = [\n `${color.bold('Context Window')}`,\n ` messages: ${messages.length} total (${countTurnPairs(messages)} user+assistant pairs)`,\n ` tokens (est): ${estimateTokens(messages).toLocaleString()} (chars / 4 estimate)`,\n ` mode: ${policy ? `${policy.id} (${policy.name})` : 'balanced'}`,\n ` system prompt: ${ctx.systemPrompt.length} block${ctx.systemPrompt.length !== 1 ? 's' : ''}`,\n ` tools: ${countToolUses(messages)} calls made, ${countToolResults(messages)} results in history`,\n ` read files: ${ctx.readFiles.size} files`,\n ` todos: ${ctx.todos.filter((t) => t.status === 'in_progress').length} in_progress / ${ctx.todos.filter((t) => t.status === 'pending').length} pending / ${ctx.todos.filter((t) => t.status === 'completed').length} completed`,\n ];\n if (detailed) {\n lines.push(\n ` thresholds: warn ${pct(policy?.thresholds.warn ?? 0.6)}, soft ${pct(policy?.thresholds.soft ?? 0.75)}, hard ${pct(policy?.thresholds.hard ?? 0.9)}`,\n ` model: ${ctx.model}`,\n ` cwd: ${ctx.cwd}`,\n ` projectRoot: ${ctx.projectRoot}`,\n ` file mtimes: ${ctx.fileMtimes.size} tracked`,\n );\n if (ctx.readFiles.size > 0) lines.push(` file list: ${[...ctx.readFiles].join(', ')}`);\n }\n const msg = lines.join('\\n');\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n },\n };\n}\n\nfunction readPolicy(ctx: Context): ContextWindowPolicy | null {\n const policy = ctx.meta?.['contextWindowPolicy'];\n return policy && typeof policy === 'object' ? (policy as ContextWindowPolicy) : null;\n}\n\nfunction pct(n: number): string {\n return `${Math.round(n * 100)}%`;\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildDiagCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'diag',\n description: 'Show runtime diagnostics (provider, tokens, tools, MCP).',\n async run() {\n if (!opts.onDiag) return { message: 'Diag not available in this context.' };\n return { message: opts.onDiag() };\n },\n };\n}\n\nexport function buildStatsCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'stats',\n description: 'Show session report: tokens, requests, tools, files, cost.',\n async run() {\n if (!opts.onStats) return { message: 'Stats not available in this context.' };\n const text = opts.onStats();\n return { message: text ?? 'No session activity recorded yet.' };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildFleetCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'fleet',\n description:\n 'Inspect or control the subagent fleet: /fleet [status|usage|kill <id>|manifest|retry [taskId]|log <id>|stream on|off|help]',\n help: [\n 'Usage:',\n ' /fleet Show fleet status (alias for /fleet status).',\n ' /fleet status Pending + completed subagent task table.',\n ' /fleet usage Per-subagent runtime cost.',\n ' /fleet kill <id> Terminate a running subagent.',\n ' /fleet manifest Print the director manifest.',\n ' /fleet retry List interrupted tasks from the last run.',\n ' /fleet retry <taskId> Re-spawn the matching subagent and re-assign the task.',\n ' /fleet retry all Re-assign every interrupted task at once.',\n ' /fleet log List subagent transcripts available on disk.',\n ' /fleet log <id> Print a compact summary of a subagent transcript.',\n ' /fleet log <id> raw Dump the full per-subagent JSONL.',\n ' /fleet stream on|off Show/hide subagent activity in the main history.',\n ' /fleet help Show this help.',\n ].join('\\n'),\n async run(args) {\n if (!opts.onFleet) return { message: 'Multi-agent is not enabled in this session.' };\n const trimmed = args.trim();\n const [verb, ...rest] = trimmed.length === 0 ? ['status'] : trimmed.split(/\\s+/);\n const target = rest.join(' ').trim() || undefined;\n switch (verb) {\n case 'status':\n case 'usage':\n case 'manifest': {\n const out = await opts.onFleet(verb, undefined);\n return { message: out };\n }\n case 'kill': {\n if (!target) return { message: 'Usage: /fleet kill <subagent-id>' };\n return { message: await opts.onFleet('kill', target) };\n }\n case 'retry': {\n if (!opts.onFleetRetry) {\n return { message: 'Retry is only available when director mode is active.' };\n }\n const msg = await opts.onFleetRetry(target);\n return { message: msg };\n }\n case 'log': {\n if (!opts.onFleetLog) {\n return { message: 'Log inspection is only available when a fleet root is configured.' };\n }\n // Second word after the id, if any, picks the rendering mode\n // (raw vs summary). Default: summary.\n const [id, ...modeRest] = rest;\n const mode = modeRest.join(' ').trim() === 'raw' ? 'raw' : 'summary';\n return { message: await opts.onFleetLog(id, mode) };\n }\n case 'stream': {\n const ctrl = opts.fleetStreamController;\n if (!ctrl) {\n return { message: 'Stream toggle is only available in the TUI.' };\n }\n const arg = (target ?? '').toLowerCase();\n if (arg === '' || arg === 'status') {\n return { message: `Fleet streaming is ${ctrl.enabled ? 'on' : 'off'}.` };\n }\n if (arg !== 'on' && arg !== 'off') {\n return { message: 'Usage: /fleet stream on|off' };\n }\n const enabled = arg === 'on';\n ctrl.setEnabled(enabled);\n ctrl.enabled = enabled;\n return { message: `Fleet streaming ${enabled ? 'enabled' : 'disabled'}.` };\n }\n case 'help':\n case '?':\n return {\n message: [\n '/fleet — inspect or control the subagent fleet',\n '',\n ' /fleet → status (default)',\n ' /fleet status pending + completed tasks per subagent',\n ' /fleet usage iterations, tool calls, duration roll-up',\n ' /fleet kill <id> terminate a subagent',\n ' /fleet manifest director manifest (requires --director)',\n ].join('\\n'),\n };\n default:\n return {\n message: `Unknown subcommand \"${verb}\". Try: status | usage | kill <id> | manifest | help`,\n };\n }\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport { statusIcon } from './helpers.js';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildHealthCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'health',\n description: 'Run health checks (requires --metrics flag).',\n async run() {\n if (!opts.healthRegistry)\n return { message: 'Health checks not enabled. Restart with --metrics.' };\n const result = await opts.healthRegistry.run();\n const lines = [\n `${statusIcon(result.status)} overall: ${result.status}`,\n ...result.checks.map((c) => {\n const detail = c.detail ? color.dim(` — ${c.detail}`) : '';\n return ` ${statusIcon(c.status)} ${c.name}: ${c.status}${detail}`;\n }),\n ];\n return { message: lines.join('\\n') };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildHelpCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'help',\n description: 'Show available slash commands. Pass a name for detailed help.',\n help: [\n 'Usage:',\n ' /help List every command with its one-line description.',\n ' /help <name> Show detailed help for one command (falls back to the description).',\n '',\n 'Examples:',\n ' /help',\n ' /help context',\n ' /help model',\n ].join('\\n'),\n async run(args) {\n const query = args.trim();\n if (query) {\n const needle = query.startsWith('/') ? query.slice(1) : query;\n let match: { cmd: SlashCommand; owner: string; fullName: string } | undefined;\n for (const entry of opts.registry.listWithOwner()) {\n const aliases = entry.cmd.aliases ?? [];\n const candidates = [\n entry.cmd.name,\n entry.fullName,\n ...aliases,\n ...aliases.map((a) => (entry.owner === 'core' ? a : `${entry.owner}:${a}`)),\n ];\n if (candidates.includes(needle)) {\n match = entry;\n break;\n }\n }\n if (!match) return { message: `Unknown command: /${needle}. Run /help to list commands.` };\n const prefix = match.owner === 'core' ? '' : `${match.owner}:`;\n const header = `/${prefix}${match.cmd.name}`;\n const aliasLine = match.cmd.aliases?.length\n ? `Aliases: ${match.cmd.aliases.map((a) => `/${prefix}${a}`).join(', ')}\\n`\n : '';\n const body = match.cmd.help ?? match.cmd.description;\n return {\n message: [\n header,\n '─'.repeat(header.length),\n aliasLine + (match.cmd.help ? '' : `${match.cmd.description}\\n`),\n body,\n ]\n .filter(Boolean)\n .join('\\n'),\n };\n }\n const lines = ['Available slash commands:'];\n for (const { cmd, owner } of opts.registry.listWithOwner()) {\n const prefix = owner === 'core' ? '' : `${owner}:`;\n const aliases = cmd.aliases ? cmd.aliases.map((a) => `/${prefix}${a}`).join(', ') : '';\n const aliasStr = aliases ? ` (${aliases})` : '';\n lines.push(` /${prefix}${cmd.name}${aliasStr} — ${cmd.description}`);\n }\n lines.push('', 'Run `/help <name>` for detailed help on a specific command.');\n return { message: lines.join('\\n') };\n },\n };\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { SlashCommand } from '@wrongstack/core';\nimport { detectProjectFacts, renderAgentsTemplate } from './helpers.js';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildInitCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'init',\n description: 'Create .wrongstack/AGENTS.md project context for the system prompt.',\n async run(args, ctx) {\n const force = args.trim() === '--force';\n const dir = path.join(ctx.projectRoot, '.wrongstack');\n const file = path.join(dir, 'AGENTS.md');\n try {\n await fs.access(file);\n if (!force) {\n const msg = `AGENTS.md already exists at ${file}. Use \"/init --force\" to overwrite.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n } catch {\n /* proceed */\n }\n const detected = await detectProjectFacts(ctx.projectRoot);\n const body = renderAgentsTemplate(detected);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(file, body, 'utf8');\n if (detected.hints.length > 0) {\n const msg = `Wrote ${file}\\nPre-filled: ${detected.hints.join(', ')}. Edit the file with project context and instructions the system prompt should carry.`;\n opts.renderer.writeInfo(`Wrote ${file}`);\n opts.renderer.writeInfo(\n `Pre-filled: ${detected.hints.join(', ')}. Edit the file with project context and instructions the system prompt should carry.`,\n );\n return { message: msg };\n }\n const msg = `Wrote ${file}\\nNo project type auto-detected. Edit the file with project context and instructions the system prompt should carry.`;\n opts.renderer.writeInfo(`Wrote ${file}`);\n return { message: msg };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildMemoryCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'memory',\n description:\n 'Inspect or edit persistent memory: /memory [show|remember <text>|forget <query>|clear]',\n async run(args) {\n const store = opts.memoryStore;\n if (!store) return { message: 'No memory store configured.' };\n const [verb, ...rest] = args.trim().split(/\\s+/);\n const restJoined = rest.join(' ').trim();\n switch (verb) {\n case '':\n case 'show':\n case 'list': {\n const text = await store.readAll();\n return {\n message:\n text.trim().length === 0\n ? 'Memory is empty. Add an entry with `/memory remember <text>`.'\n : text,\n };\n }\n case 'remember':\n case 'add': {\n if (!restJoined) return { message: 'Usage: /memory remember <text>' };\n await store.remember(restJoined);\n return { message: `Remembered: ${restJoined}` };\n }\n case 'forget':\n case 'rm': {\n if (!restJoined) return { message: 'Usage: /memory forget <query>' };\n const n = await store.forget(restJoined);\n return {\n message: n === 0 ? `No entries matched \"${restJoined}\".` : `Forgot ${n} entries.`,\n };\n }\n case 'clear': {\n await store.clear();\n return { message: 'Cleared all memory scopes.' };\n }\n default:\n return {\n message: `Unknown subcommand \"${verb}\". Try: show | remember <text> | forget <query> | clear`,\n };\n }\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildMetricsCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'metrics',\n description: 'Show metrics snapshot (requires --metrics flag).',\n async run() {\n if (!opts.metricsSink)\n return { message: 'Metrics not enabled. Restart with --metrics to collect.' };\n const snap = opts.metricsSink.snapshot();\n if (snap.series.length === 0) return { message: 'No metrics recorded yet.' };\n const lines: string[] = [];\n const byName = new Map<string, typeof snap.series>();\n for (const s of snap.series) {\n const bucket = byName.get(s.name) ?? [];\n bucket.push(s);\n byName.set(s.name, bucket);\n }\n for (const [name, series] of [...byName.entries()].sort()) {\n lines.push(color.dim(`# ${name}`));\n for (const s of series) {\n const labels = Object.entries(s.labels)\n .map(([k, v]) => `${k}=${v}`)\n .join(' ');\n const labelStr = labels ? color.dim(` {${labels}}`) : '';\n if (s.type === 'histogram')\n lines.push(\n ` count=${s.values.count} sum=${s.values.sum} min=${s.values.min} max=${s.values.max} p50=${s.values.p50} p95=${s.values.p95} p99=${s.values.p99}${labelStr}`,\n );\n else lines.push(` ${s.values.value}${labelStr}`);\n }\n }\n return { message: lines.join('\\n') };\n },\n };\n}\n","import {\n addPlanItem,\n clearPlan,\n emptyPlan,\n formatPlan,\n loadPlan,\n type PlanFile,\n removePlanItem,\n savePlan,\n setPlanItemStatus,\n} from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\n/**\n * `/plan` — strategic counterpart to `/todos`.\n *\n * Plans are higher-level than todos: a plan captures the overall approach\n * before any work begins, surviving session resume by default. Todos are\n * the moment-to-moment task board the LLM mutates per-turn.\n *\n * Storage: `<session-dir>/<session-id>.plan.json` — atomic-written on\n * every mutation, read on session resume so a banner can surface\n * \"you have N open plan items\".\n */\nexport function buildPlanCommand(opts: SlashCommandContext & { planPath?: string }): SlashCommand {\n return {\n name: 'plan',\n description: 'Strategic plan board: /plan [show|add <title>|done <id|#>|remove <id|#>|clear]',\n async run(args) {\n const planPath = opts.planPath;\n if (!planPath) return { message: 'Plan storage is not configured for this session.' };\n const ctx = opts.context;\n const sessionId = ctx?.session.id ?? 'unknown';\n const [verb, ...rest] = args.trim().split(/\\s+/);\n const restJoined = rest.join(' ').trim();\n\n const plan: PlanFile = (await loadPlan(planPath)) ?? emptyPlan(sessionId);\n\n switch (verb) {\n case '':\n case 'show':\n case 'list': {\n return { message: formatPlan(plan) };\n }\n case 'add': {\n if (!restJoined) return { message: 'Usage: /plan add <title>' };\n const { plan: updated, item } = addPlanItem(plan, restJoined);\n await savePlan(planPath, updated);\n return { message: `Added: ${item.title}\\n${formatPlan(updated)}` };\n }\n case 'start':\n case 'progress': {\n if (!restJoined) return { message: 'Usage: /plan start <id|index>' };\n const updated = setPlanItemStatus(plan, restJoined, 'in_progress');\n await savePlan(planPath, updated);\n return { message: formatPlan(updated) };\n }\n case 'done':\n case 'complete': {\n if (!restJoined) return { message: 'Usage: /plan done <id|index>' };\n const updated = setPlanItemStatus(plan, restJoined, 'done');\n await savePlan(planPath, updated);\n return { message: formatPlan(updated) };\n }\n case 'remove':\n case 'delete':\n case 'rm': {\n if (!restJoined) return { message: 'Usage: /plan remove <id|index>' };\n const updated = removePlanItem(plan, restJoined);\n await savePlan(planPath, updated);\n return { message: formatPlan(updated) };\n }\n case 'clear': {\n const updated = clearPlan(plan);\n await savePlan(planPath, updated);\n return { message: 'Plan cleared.' };\n }\n default:\n return {\n message: `Unknown subcommand \"${verb}\". Try: show | add <title> | start <id|#> | done <id|#> | remove <id|#> | clear`,\n };\n }\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildPluginCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'plugin',\n aliases: ['plugins'],\n description:\n 'Manage plugins: /plugin [list|status|official|install <alias>|enable <name>|disable <name>|remove <name>]',\n argsHint: '[list|status|official|install <alias>|enable <name>|disable <name>|remove <name>]',\n help: [\n 'Usage:',\n ' /plugin List configured plugins.',\n ' /plugin status Alias for list.',\n ' /plugin official List official bundled plugins and aliases.',\n ' /plugin install <alias|package> Add and enable a plugin.',\n ' /plugin add <alias|package> Alias for install.',\n ' /plugin enable <alias|package> Enable a configured plugin.',\n ' /plugin disable <alias|package> Disable a configured plugin.',\n ' /plugin remove <alias|package> Remove a plugin from config.',\n '',\n 'Examples:',\n ' /plugin official',\n ' /plugin install telegram',\n ' /plugin disable lsp',\n ].join('\\n'),\n async run(args) {\n if (!opts.onPlugin) {\n return { message: 'Plugin management is not available in this session.' };\n }\n return { message: await opts.onPlugin(args.trim()) };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildSaveCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'save',\n description: 'Save current session (auto by default; this forces flush).',\n async run(_args, ctx) {\n await ctx.session.append({\n type: 'session_end',\n ts: new Date().toISOString(),\n usage: opts.tokenCounter.total(),\n });\n return { message: `Session ${ctx.session.id} flushed.` };\n },\n };\n}\n\nexport function buildLoadCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'resume',\n aliases: ['load', 'sessions'],\n description: 'List recent sessions.',\n async run() {\n if (!opts.sessionStore) return { message: 'No session store configured.' };\n const list = await opts.sessionStore.list(10);\n if (list.length === 0) return { message: 'No saved sessions.' };\n const lines = list.map(\n (s) =>\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}`,\n );\n const msg = `Recent sessions:\\n${lines.join('\\n')}\\n\\n${color.dim(`Resume one with: wstack resume ${list[0]?.id ?? '<id>'}\\n`)}`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n\nexport function buildExitCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'exit',\n aliases: ['quit', 'q'],\n description: 'Exit the REPL.',\n async run() {\n // Check for uncommitted changes before exit\n if (opts.onBeforeExit) {\n const result = await opts.onBeforeExit();\n if (result?.abort) {\n // warn but allow exit anyway\n opts.onExit?.();\n return { message: result.message ?? '', exit: true };\n }\n }\n opts.onExit?.();\n return { exit: true };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildSkillCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill',\n description: 'Show skill details or list available skills. Use /skill-gen to create new skills.',\n async run(args) {\n if (!opts.skillLoader) return { message: 'No skill loader configured.' };\n if (!args.trim()) {\n const entries = await opts.skillLoader.listEntries();\n if (entries.length === 0) return { message: 'No skills found.' };\n const lines = entries.map((e) => {\n const scopeTag =\n e.scope.length > 0 ? ` ${color.dim(`(${e.scope.slice(0, 3).join(', ')})`)}` : '';\n return ` ${color.bold(e.name)}${scopeTag}\\n Use when: ${e.trigger}`;\n });\n return { message: `Available skills:\\n${lines.join('\\n\\n')}\\n` };\n }\n const skill = await opts.skillLoader.find(args.trim());\n if (!skill) return { message: `Skill \"${args.trim()}\" not found.` };\n return { message: await opts.skillLoader.readBody(skill.name) };\n },\n };\n}\n","import type { SlashCommand } from '@wrongstack/core';\nimport { parseSpawnFlags } from '../arg-parser.js';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildSpawnCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'spawn',\n description: 'Spawn an isolated subagent to handle a task.',\n async run(args) {\n const { description, opts: parsed } = parseSpawnFlags(args.trim());\n if (!description)\n return {\n message:\n 'Usage: /spawn [--provider=<id>] [--model=<id>] [--name=<label>] [--tools=a,b,c] <task description>',\n };\n if (!opts.onSpawn) return { message: 'Multi-agent is not enabled in this session.' };\n try {\n const summary =\n Object.keys(parsed).length > 0\n ? await opts.onSpawn(description, parsed)\n : await opts.onSpawn(description);\n return { message: summary };\n } catch (err) {\n return { message: `Spawn failed: ${err instanceof Error ? err.message : String(err)}` };\n }\n },\n };\n}\n\nexport function buildAgentsCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'agents',\n description: 'Show status of spawned subagents.',\n async run() {\n if (!opts.onAgents) return { message: 'Multi-agent is not enabled in this session.' };\n return { message: opts.onAgents() };\n },\n };\n}\n\nexport function buildDirectorCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'director',\n description:\n 'Promote this session to director mode, enabling fleet orchestration tools. Only works before any subagents are spawned.',\n async run() {\n if (!opts.onDirector) return { message: 'Director promotion is not available in this session.' };\n const result = await opts.onDirector();\n if (result === null) {\n return {\n message:\n 'Cannot promote to director mode: subagents have already been spawned. Promote before using /spawn, or restart with --director.',\n };\n }\n return { message: result };\n },\n };\n}\n","import { randomUUID } from 'node:crypto';\nimport { formatTodosList } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildTodosCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'todos',\n description:\n 'Inspect or edit the live todo list: /todos [show|clear|add <text>|done <id|index>]',\n async run(args) {\n const ctx = opts.context;\n if (!ctx) return { message: 'No active context.' };\n const [verb, ...rest] = args.trim().split(/\\s+/);\n const restJoined = rest.join(' ').trim();\n switch (verb) {\n case '':\n case 'show':\n case 'list': {\n return { message: formatTodosList(ctx.todos) };\n }\n case 'clear': {\n const n = ctx.todos.length;\n ctx.todos.length = 0;\n return {\n message:\n n === 0 ? 'Todos were already empty.' : `Cleared ${n} todo${n === 1 ? '' : 's'}.`,\n };\n }\n case 'add': {\n if (!restJoined) return { message: 'Usage: /todos add <text>' };\n ctx.todos.push({\n id: `todo_${Date.now()}_${randomUUID().slice(0, 7)}`,\n content: restJoined,\n status: 'pending',\n });\n return { message: `Added: ${restJoined}` };\n }\n case 'done':\n case 'complete': {\n if (!restJoined) return { message: 'Usage: /todos done <id|index>' };\n const asIndex = Number.parseInt(restJoined, 10);\n let target = !Number.isNaN(asIndex)\n ? ctx.todos[asIndex - 1]\n : ctx.todos.find((t) => t.id === restJoined);\n if (!target)\n target = ctx.todos.find((t) =>\n t.content.toLowerCase().includes(restJoined.toLowerCase()),\n );\n if (!target) return { message: `No todo matched \"${restJoined}\".` };\n target.status = 'completed';\n return { message: `Marked done: ${target.content}` };\n }\n default:\n return {\n message: `Unknown subcommand \"${verb}\". Try: show | clear | add <text> | done <id|index>`,\n };\n }\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildToolsCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'tools',\n description: 'List registered tools.',\n async run() {\n const all = opts.toolRegistry.listWithOwner();\n const lines = all.map(\n ({ tool, owner }) =>\n ` ${tool.name.padEnd(28)} ${color.dim(`[${owner}]`)} ${tool.mutating ? color.yellow('mut') : color.cyan('ro')} ${color.dim(tool.permission)}`,\n );\n const msg = `${color.bold('Tools')} (${all.length}):\\n${lines.join('\\n')}\\n`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildYoloCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'yolo',\n description: 'Toggle or query YOLO (auto-approve) mode.',\n help: [\n 'Usage:',\n ' /yolo Show current YOLO status',\n ' /yolo on Enable YOLO mode (auto-approve every tool call)',\n ' /yolo off Disable YOLO mode (restore permission prompts)',\n ' /yolo toggle Toggle YOLO mode',\n '',\n 'YOLO mode skips all permission prompts and auto-approves every tool call.',\n 'Use with caution — the agent can execute any tool without asking.',\n ].join('\\n'),\n async run(args) {\n const arg = args.trim().toLowerCase();\n\n if (!opts.onYolo) {\n const msg = 'YOLO toggle is not available in this session.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n // No argument — show current status\n if (!arg) {\n const current = opts.onYolo();\n const status = current\n ? `${color.yellow('ON')} ${color.dim('(auto-approving all tool calls)')}`\n : `${color.green('OFF')} ${color.dim('(permission prompts active)')}`;\n const msg = `YOLO mode: ${status}`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n // Explicit set\n let newState: boolean;\n if (arg === 'on' || arg === 'enable' || arg === 'true' || arg === '1') {\n newState = true;\n } else if (arg === 'off' || arg === 'disable' || arg === 'false' || arg === '0') {\n newState = false;\n } else if (arg === 'toggle') {\n newState = !opts.onYolo();\n } else {\n const msg = `Unknown argument: ${arg}. Use /yolo on, /yolo off, or /yolo toggle.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n opts.onYolo(newState);\n const label = newState\n ? `${color.yellow('ENABLED')} — all tool calls will be auto-approved`\n : `${color.green('DISABLED')} — permission prompts are active`;\n const msg = `YOLO mode: ${label}`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport type AutonomyMode = 'off' | 'suggest' | 'auto';\n\nexport function buildAutonomyCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'autonomy',\n description: 'Toggle or query autonomy mode (self-driving agent).',\n help: [\n 'Usage:',\n ' /autonomy Show current autonomy status',\n ' /autonomy off Disabled — agent stops after each turn (default)',\n ' /autonomy suggest Show next-step suggestions after each turn',\n ' /autonomy on Auto-continue — agent picks next step and proceeds',\n ' /autonomy toggle Cycle: off → suggest → auto → off',\n '',\n 'Modes:',\n ' off — Normal interactive mode. Agent stops and waits.',\n ' suggest — After each turn, agent suggests next steps. You pick.',\n ' auto — After each turn, agent picks the best next step and continues.',\n ' Runs indefinitely until you press Esc or Ctrl+C.',\n '',\n 'In auto mode the agent works autonomously. Press Esc to redirect,',\n 'Ctrl+C to stop. The agent suggests context-aware next steps based on',\n 'the conversation history.',\n ].join('\\n'),\n async run(args) {\n const arg = args.trim().toLowerCase();\n\n if (!opts.onAutonomy) {\n const msg = 'Autonomy mode is not available in this session.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n // No argument — show current status\n if (!arg) {\n const current = opts.onAutonomy();\n const labels: Record<AutonomyMode, string> = {\n off: `${color.green('OFF')} ${color.dim('(agent stops after each turn)')}`,\n suggest: `${color.cyan('SUGGEST')} ${color.dim('(shows next-step suggestions)')}`,\n auto: `${color.yellow('AUTO')} ${color.dim('(self-driving — Esc to redirect, Ctrl+C to stop)')}`,\n };\n const msg = `Autonomy mode: ${labels[current]}`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n // Explicit set\n let newMode: AutonomyMode;\n if (arg === 'on' || arg === 'enable' || arg === 'true' || arg === 'auto') {\n newMode = 'auto';\n } else if (arg === 'off' || arg === 'disable' || arg === 'false') {\n newMode = 'off';\n } else if (arg === 'suggest' || arg === 'suggestions') {\n newMode = 'suggest';\n } else if (arg === 'toggle' || arg === 'cycle') {\n const current = opts.onAutonomy() ?? 'off';\n const cycle: AutonomyMode[] = ['off', 'suggest', 'auto'];\n newMode = cycle[(cycle.indexOf(current) + 1) % cycle.length] ?? 'off';\n } else {\n const msg = `Unknown argument: ${arg}. Use /autonomy on, /autonomy off, /autonomy suggest, or /autonomy toggle.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n opts.onAutonomy(newMode);\n const labels: Record<AutonomyMode, string> = {\n off: `${color.green('OFF')} — agent stops after each turn`,\n suggest: `${color.cyan('SUGGEST')} — shows next-step suggestions after each turn`,\n auto: `${color.yellow('AUTO')} — self-driving, agent continues automatically`,\n };\n const msg = `Autonomy mode: ${labels[newMode]}`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n","import type { ModeStore } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport function buildModeCommand(\n opts: SlashCommandContext & { modeStore?: ModeStore },\n): SlashCommand {\n return {\n name: 'mode',\n description: 'Switch or view the current mode',\n help: [\n 'Usage:',\n ' /mode Show current mode and available modes',\n ' /mode <id> Switch to a different mode',\n '',\n 'Available modes:',\n ' default General-purpose coding assistant',\n ' brief Fast, no-nonsense — get to the point',\n ' teach Mentor mode — explains why, not just what',\n ' code-reviewer, code-auditor, architect, debugger, tester, devops, refactorer',\n '',\n 'Example:',\n ' /mode brief Switch to brief mode',\n ' /mode teach Switch to teach mode',\n ].join('\\n'),\n async run(args) {\n const modeStore = opts.modeStore;\n if (!modeStore) {\n return { message: 'Mode store not available in this context.' };\n }\n\n const modes = await modeStore.listModes();\n const active = await modeStore.getActiveMode();\n\n if (!args.trim()) {\n const lines = [`Current mode: ${active?.name ?? 'none'}`, '', 'Available modes:'];\n for (const m of modes) {\n const mark = m.id === active?.id ? ' [active]' : '';\n lines.push(` ${m.id} — ${m.description}${mark}`);\n }\n return { message: lines.join('\\n') };\n }\n\n const target = args.trim().toLowerCase();\n const targetMode = modes.find((m) => m.id === target);\n\n if (!targetMode) {\n const available = modes.map((m) => m.id).join(', ');\n return { message: `Unknown mode \"${target}\". Available: ${available}` };\n }\n\n await modeStore.setActiveMode(targetMode.id);\n return {\n message: `Switched to \"${targetMode.name}\" mode.\\n${targetMode.description}`,\n };\n },\n };\n}","import type {\r\n CompactReport,\r\n Context,\r\n HealthRegistry,\r\n MemoryStore,\r\n MetricsSink,\r\n ModeStore,\r\n Renderer,\r\n SessionStore,\r\n SkillLoader,\r\n SlashCommand,\r\n SlashCommandRegistry,\r\n TokenCounter,\r\n ToolRegistry,\r\n} from '@wrongstack/core';\r\n\r\nexport interface SlashCommandContext {\r\n registry: SlashCommandRegistry;\r\n toolRegistry: ToolRegistry;\r\n compactor?: {\r\n compact(ctx: Context, opts?: { aggressive?: boolean }): Promise<CompactReport>;\r\n };\r\n sessionStore?: SessionStore;\r\n skillLoader?: SkillLoader;\r\n tokenCounter: TokenCounter;\r\n renderer: Renderer;\r\n memoryStore?: MemoryStore;\r\n context?: Context;\r\n metricsSink?: MetricsSink;\r\n healthRegistry?: HealthRegistry;\r\n modeStore?: ModeStore;\r\n onExit?: () => void;\r\n onBeforeExit?: () => Promise<{ abort?: boolean; message?: string } | void>;\r\n onClear?: () => void;\r\n onDiag?: () => string;\r\n onStats?: () => string | null;\r\n onSpawn?: (\r\n description: string,\r\n opts?: { provider?: string; model?: string; tools?: string[]; name?: string },\r\n ) => Promise<string>;\r\n onAgents?: () => string;\r\n onFleet?: (action: 'status' | 'usage' | 'kill' | 'manifest', target?: string) => Promise<string>;\r\n /**\r\n * Toggle subagent activity streaming into the leader's history. The\r\n * TUI installs the actual setter on mount via a shared controller;\r\n * before that, calls are buffered into the initial-value field so\r\n * `/fleet stream off` issued before mount still takes effect.\r\n */\r\n fleetStreamController?: {\r\n /** Current state, readable for the slash command's reply. */\r\n enabled: boolean;\r\n /** Replaced by the TUI on mount with a dispatch-backed setter. */\r\n setEnabled: (enabled: boolean) => void;\r\n };\r\n /**\r\n * Re-run interrupted tasks from a prior director-state.json. Pass `undefined`\r\n * to list them, a specific task id to retry one, or 'all' to retry every\r\n * interrupted task. Returns a human-readable summary. Only wired when\r\n * director mode is enabled.\r\n */\r\n onFleetRetry?: (taskId?: string) => Promise<string>;\r\n /**\r\n * Inspect per-subagent JSONL transcripts under `<fleetRoot>/subagents/`.\r\n * Pass `undefined` to list available transcripts, a subagent id to show\r\n * a compact event summary, or a subagent id with `mode='raw'` to dump\r\n * the full JSONL. Only wired when a fleet root exists for this session.\r\n */\r\n onFleetLog?: (subagentId: string | undefined, mode: 'summary' | 'raw') => Promise<string>;\r\n /** Promote to director mode at runtime. Returns success message or null on failure. */\r\n onDirector?: () => Promise<string | null>;\r\n /** Manage plugin config from the interactive slash menu. */\r\n onPlugin?: (args: string) => Promise<string>;\r\n /** Toggle or query YOLO mode at runtime. Pass undefined to query, boolean to set. */\r\n onYolo?: (setTo?: boolean) => boolean;\r\n /** Toggle or query autonomy mode. Pass undefined to query, AutonomyMode to set. */\r\n onAutonomy?: (setTo?: import('./autonomy.js').AutonomyMode) => import('./autonomy.js').AutonomyMode;\r\n /**\r\n * Absolute path to the per-session plan JSON file. Read+written by the\r\n * `/plan` slash command. Optional — when omitted, `/plan` short-circuits\r\n * with a \"not configured\" message instead of crashing.\r\n */\r\n planPath?: string;\r\n}\r\n\r\n// Re-export helpers for external consumers (pre-launch.ts)\r\nexport type { ProjectFacts } from './helpers.js';\r\nexport { detectProjectFacts, renderAgentsTemplate } from './helpers.js';\r\n\r\nimport { buildClearCommand } from './clear.js';\r\nimport { buildCommitCommand, buildGitcheckCommand, buildPushCommand } from './commit.js';\r\nimport { buildCompactCommand } from './compact.js';\r\nimport { buildContextCommand } from './context.js';\r\nimport { buildDiagCommand, buildStatsCommand } from './diag-stats.js';\r\nimport { buildFleetCommand } from './fleet.js';\r\nimport { buildHealthCommand } from './health.js';\r\nimport { buildHelpCommand } from './help.js';\r\nimport { buildInitCommand } from './init.js';\r\nimport { buildMemoryCommand } from './memory.js';\r\nimport { buildMetricsCommand } from './metrics.js';\r\nimport { buildPlanCommand } from './plan.js';\r\nimport { buildPluginCommand } from './plugin.js';\r\nimport { buildExitCommand, buildLoadCommand, buildSaveCommand } from './session.js';\r\nimport { buildSkillCommand } from './skill.js';\r\nimport { buildAgentsCommand, buildDirectorCommand, buildSpawnCommand } from './spawn-agents.js';\r\nimport { buildTodosCommand } from './todos.js';\r\nimport { buildToolsCommand } from './tools.js';\r\nimport { buildYoloCommand } from './yolo.js';\r\nimport { buildAutonomyCommand } from './autonomy.js';\r\nimport { buildModeCommand } from './mode.js';\r\nimport { buildSddCommand } from './sdd.js';\r\nimport { buildSkillGeneratorCommand } from './skill-generator.js';\r\nimport {\r\n buildSkillInstallCommand,\r\n buildSkillUpdateCommand,\r\n buildSkillUninstallCommand,\r\n} from './skill-install.js';\r\n\r\nexport function buildBuiltinSlashCommands(opts: SlashCommandContext): SlashCommand[] {\r\n return [\r\n buildHelpCommand(opts),\r\n buildInitCommand(opts),\r\n buildClearCommand(opts),\r\n buildCompactCommand(opts),\r\n buildContextCommand(opts),\r\n buildToolsCommand(opts),\r\n buildSkillCommand(opts),\r\n buildSkillGeneratorCommand(opts),\r\n buildSkillInstallCommand(opts),\r\n buildSkillUpdateCommand(opts),\r\n buildSkillUninstallCommand(opts),\r\n buildPluginCommand(opts),\r\n buildDiagCommand(opts),\r\n buildStatsCommand(opts),\r\n buildSpawnCommand(opts),\r\n buildAgentsCommand(opts),\r\n buildDirectorCommand(opts),\r\n buildFleetCommand(opts),\r\n buildMetricsCommand(opts),\r\n buildHealthCommand(opts),\r\n buildMemoryCommand(opts),\r\n buildTodosCommand(opts),\r\n buildPlanCommand(opts),\r\n buildSddCommand(opts),\r\n buildSaveCommand(opts),\r\n buildLoadCommand(opts),\r\n buildYoloCommand(opts),\r\n buildAutonomyCommand(opts),\r\n buildModeCommand(opts),\r\n buildExitCommand(opts),\r\n buildCommitCommand(opts),\r\n buildGitcheckCommand(opts),\r\n buildPushCommand(opts),\r\n ];\r\n}\r\n","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\n/**\n * `/skill-gen` — Create a new AI skill interactively.\n *\n * The AI reads the skill-creator skill and guides the user through\n * creating a new SKILL.md file. No wizard needed — the LLM handles\n * the conversation, validation, and file writing.\n *\n * Usage:\n * /skill-gen — Start skill creation (AI guides you)\n * /skill-gen list — List existing skills\n * /skill-gen edit <name> — View an existing skill\n */\nexport function buildSkillGeneratorCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill-gen',\n description: 'Create a new AI skill interactively. The AI will guide you.',\n help: [\n '╔═══ Skill Generator ═══╗',\n '',\n 'Create new AI skills with AI guidance.',\n '',\n 'Usage:',\n ' /skill-gen Start skill creation',\n ' /skill-gen list List existing skills',\n ' /skill-gen edit <name> View an existing skill',\n '',\n 'The AI will ask you questions and create the skill file.',\n 'Skills are saved to .wrongstack/skills/<name>/SKILL.md',\n ].join('\\n'),\n async run(args) {\n const trimmed = args.trim();\n\n // ── Subcommands ──────────────────────────────────────────────────\n\n if (trimmed === 'list' || trimmed === 'ls') {\n if (!opts.skillLoader) return { message: 'No skill loader configured.' };\n const entries = await opts.skillLoader.listEntries();\n if (entries.length === 0) return { message: 'No skills found.' };\n const lines = entries.map((e) => {\n const src = e.source === 'project' ? '📁' : e.source === 'user' ? '👤' : '📦';\n return ` ${src} ${e.name}\\n ${e.trigger}`;\n });\n return { message: `Available Skills:\\n${lines.join('\\n\\n')}\\n` };\n }\n\n if (trimmed.startsWith('edit ')) {\n const skillName = trimmed.slice(5).trim();\n if (!opts.skillLoader) return { message: 'No skill loader configured.' };\n const skill = await opts.skillLoader.find(skillName);\n if (!skill) return { message: `Skill \"${skillName}\" not found.` };\n const body = await opts.skillLoader.readBody(skillName);\n return {\n message: [\n `Skill: ${skillName}`,\n `Path: ${skill.path}`,\n '',\n body,\n ].join('\\n'),\n };\n }\n\n // ── Start AI-guided creation ─────────────────────────────────────\n // Return runText so the AI reads the skill-creator skill and\n // guides the user through creating a new skill.\n return {\n message: '╔═══ Skill Generator ═══╗\\n\\nThe AI will guide you through creating a new skill.\\nAnswer its questions naturally.',\n runText: 'I want to create a new AI skill. Read the skill-creator skill and guide me through the process. Ask me questions one at a time — name, description, what to cover — then create the SKILL.md file.',\n };\n },\n };\n}\n","import * as os from 'node:os';\nimport * as path from 'node:path';\nimport { SkillInstaller } from '@wrongstack/core/skills';\nimport { projectHash } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nfunction makeInstaller(opts: SlashCommandContext, projectRoot: string, global?: boolean) {\n const globalRoot = path.join(os.homedir(), '.wrongstack');\n return new SkillInstaller({\n manifestPath: path.join(globalRoot, 'installed-skills.json'),\n projectSkillsDir: path.join(projectRoot, '.wrongstack', 'skills'),\n globalSkillsDir: path.join(globalRoot, 'skills'),\n projectHash: projectHash(projectRoot),\n skillLoader: opts.skillLoader,\n });\n}\n\nexport function buildSkillInstallCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill-install',\n description: 'Install skills from a GitHub repository.',\n argsHint: '<user/repo[@ref]> [--global]',\n help: [\n '╔═══ Skill Install ═══╗',\n '',\n 'Install skills from a GitHub repository.',\n '',\n 'Usage:',\n ' /skill-install <user/repo> Install from default branch (main)',\n ' /skill-install <user/repo@ref> Install specific tag/branch/commit',\n ' /skill-install <user/repo> --global Install to user-global skills',\n '',\n 'Supports both single-skill repos (SKILL.md at root)',\n 'and multi-skill repos (skills/ subdirectory).',\n '',\n 'Examples:',\n ' /skill-install wrongstack/awesome-skills',\n ' /skill-install wrongstack/skills@v1.0',\n ' /skill-install user/my-skills --global',\n ].join('\\n'),\n async run(args, ctx) {\n const parts = args.trim().split(/\\s+/);\n const ref = parts.find((p) => !p.startsWith('--'));\n const isGlobal = parts.includes('--global');\n\n if (!ref) {\n return { message: 'Usage: /skill-install <user/repo[@ref]> [--global]' };\n }\n\n const installer = makeInstaller(opts, ctx.projectRoot, isGlobal);\n\n try {\n const results = await installer.install(ref, { global: isGlobal });\n\n if (results.length === 0) {\n return { message: 'No skills found in the repository.' };\n }\n\n const scope = isGlobal ? 'user-global' : 'project';\n const lines = [`Installed ${results.length} skill(s) [${scope}]:`];\n for (const r of results) {\n lines.push(` ✓ ${r.name} (${r.source}@${r.ref})`);\n lines.push(` → ${r.path}`);\n }\n return { message: lines.join('\\n') };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n opts.renderer.writeError(`Install failed: ${msg}`);\n return { message: `✗ Install failed: ${msg}` };\n }\n },\n };\n}\n\nexport function buildSkillUpdateCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill-update',\n description: 'Update installed skills from their GitHub source.',\n argsHint: '[name|ref] [--global]',\n help: [\n '╔═══ Skill Update ═══╗',\n '',\n 'Update installed skills from their GitHub source.',\n '',\n 'Usage:',\n ' /skill-update Update all installed skills',\n ' /skill-update <name> Update a specific skill',\n ' /skill-update <user/repo@ref> Update to a different ref',\n ' /skill-update <name> --global Update a global skill',\n ].join('\\n'),\n async run(args, ctx) {\n const parts = args.trim().split(/\\s+/);\n const nameOrRef = parts.find((p) => !p.startsWith('--'));\n const isGlobal = parts.includes('--global');\n\n const installer = makeInstaller(opts, ctx.projectRoot, isGlobal);\n\n try {\n const result = await installer.update(nameOrRef, { global: isGlobal });\n\n const lines: string[] = [];\n\n if (result.updated.length > 0) {\n lines.push(`Updated ${result.updated.length} skill(s):`);\n for (const u of result.updated) {\n if (u.oldRef !== u.newRef) {\n lines.push(` ✓ ${u.name} (${u.oldRef} → ${u.newRef})`);\n } else {\n lines.push(` ✓ ${u.name} (refreshed)`);\n }\n }\n }\n\n if (result.unchanged.length > 0) {\n lines.push(`Up to date: ${result.unchanged.join(', ')}`);\n }\n\n if (result.errors.length > 0) {\n for (const e of result.errors) {\n lines.push(` ✗ ${e.name}: ${e.error}`);\n }\n }\n\n if (lines.length === 0) {\n return { message: 'No installed skills to update.' };\n }\n\n return { message: lines.join('\\n') };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return { message: `✗ Update failed: ${msg}` };\n }\n },\n };\n}\n\nexport function buildSkillUninstallCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill-uninstall',\n description: 'Remove an installed skill.',\n argsHint: '<name> [--global]',\n help: [\n '╔═══ Skill Uninstall ═══╗',\n '',\n 'Remove an installed skill and its files.',\n '',\n 'Usage:',\n ' /skill-uninstall <name> Remove from project skills',\n ' /skill-uninstall <name> --global Remove from user-global skills',\n ].join('\\n'),\n async run(args, ctx) {\n const parts = args.trim().split(/\\s+/);\n const name = parts.find((p) => !p.startsWith('--'));\n const isGlobal = parts.includes('--global');\n\n if (!name) {\n // List installed skills when no name given\n const installer = makeInstaller(opts, ctx.projectRoot, isGlobal);\n const installed = await installer.listInstalled();\n if (installed.length === 0) {\n return { message: 'No installed skills found.' };\n }\n const scope = isGlobal ? 'user' : 'project';\n const filtered = installed.filter((s) => s.scope === scope);\n if (filtered.length === 0) {\n return { message: `No installed skills found (${scope} scope).` };\n }\n const lines = [`Installed skills (${scope}):`];\n for (const s of filtered) {\n lines.push(` ${s.name} ${s.source}@${s.ref} (${s.installedAt.slice(0, 10)})`);\n }\n lines.push('', 'Use /skill-uninstall <name> to remove.');\n return { message: lines.join('\\n') };\n }\n\n const installer = makeInstaller(opts, ctx.projectRoot, isGlobal);\n\n try {\n await installer.uninstall(name, { global: isGlobal });\n return { message: `✓ Skill \"${name}\" uninstalled.` };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return { message: `✗ Uninstall failed: ${msg}` };\n }\n },\n };\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport type { TerminalRenderer } from './renderer.js';\nimport { detectProjectFacts, renderAgentsTemplate } from './slash-commands/index.js';\n\nexport type ProjectKind =\n /** `.wrongstack/AGENTS.md` exists — fully set up. */\n | 'initialized'\n /** Has a recognizable manifest (package.json, pyproject.toml, etc.) but no AGENTS.md yet. */\n | 'project'\n /** No manifest, no AGENTS.md — probably an empty/scratch directory. */\n | 'empty';\n\nconst MANIFESTS = [\n 'package.json',\n 'pyproject.toml',\n 'Cargo.toml',\n 'go.mod',\n 'Makefile',\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n 'composer.json',\n 'Gemfile',\n];\n\nexport async function detectProjectKind(projectRoot: string): Promise<ProjectKind> {\n try {\n await fs.access(path.join(projectRoot, '.wrongstack', 'AGENTS.md'));\n return 'initialized';\n } catch {\n // not initialized\n }\n for (const m of MANIFESTS) {\n try {\n await fs.access(path.join(projectRoot, m));\n return 'project';\n } catch {\n // try next\n }\n }\n return 'empty';\n}\n\nasync function scaffoldAgentsMd(projectRoot: string): Promise<string> {\n const dir = path.join(projectRoot, '.wrongstack');\n const file = path.join(dir, 'AGENTS.md');\n const facts = await detectProjectFacts(projectRoot);\n const body = renderAgentsTemplate(facts);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(file, body, 'utf8');\n return file;\n}\n\n/**\n * Print a one-line project status banner and, when relevant, prompt the\n * user about scaffolding `AGENTS.md` or continuing in a directory that\n * doesn't look like a project. Returns `false` if the user bailed out.\n */\nexport async function runProjectCheck(opts: {\n projectRoot: string;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n}): Promise<boolean> {\n const { projectRoot, renderer, reader } = opts;\n const kind = await detectProjectKind(projectRoot);\n\n if (kind === 'initialized') {\n renderer.write(\n `\\n ${color.green('✓')} Project initialized ${color.dim(`(${path.join(projectRoot, '.wrongstack', 'AGENTS.md')})`)}\\n`,\n );\n return true;\n }\n\n if (kind === 'project') {\n renderer.write(\n `\\n ${color.amber('●')} Project detected ${color.dim(`(${projectRoot})`)} but ${color.bold('.wrongstack/AGENTS.md')} is missing.\\n`,\n );\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} Scaffold ${color.bold('AGENTS.md')} now? ${color.dim('[y/N]')} `,\n )\n )\n .trim()\n .toLowerCase();\n if (answer === 'y' || answer === 'yes') {\n try {\n const file = await scaffoldAgentsMd(projectRoot);\n renderer.write(` ${color.green('✓')} Wrote ${color.dim(file)}\\n`);\n } catch (err) {\n renderer.writeError(\n `Failed to scaffold AGENTS.md: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n return true;\n }\n\n // 'empty' — no manifest, no AGENTS.md, possibly no git\n const gitDir = path.join(projectRoot, '.git');\n let hasGit = false;\n try {\n await fs.access(gitDir);\n hasGit = true;\n } catch {\n // no git\n }\n\n if (!hasGit) {\n renderer.write(\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\n );\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} No git repo found. ${color.bold('Initialize git?')} ${color.dim('[y/N]')} `,\n )\n )\n .trim()\n .toLowerCase();\n if (answer === 'y' || answer === 'yes') {\n try {\n const { spawn } = await import('node:child_process');\n await new Promise<void>((resolve, reject) => {\n const child = spawn('git', ['init'], { cwd: projectRoot });\n child.on('close', (code) => (code === 0 ? resolve() : reject(new Error(`git init failed with ${code}`))));\n });\n renderer.write(` ${color.green('✓')} Git repository initialized\\n`);\n } catch (err) {\n renderer.writeError(`git init failed: ${err instanceof Error ? err.message : String(err)}\\n`);\n }\n }\n } else {\n renderer.write(\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\n );\n }\n\n const answer = (\n await reader.readLine(` ${color.amber('?')} Continue anyway? ${color.dim('[Y/n]')} `)\n )\n .trim()\n .toLowerCase();\n if (answer === 'n' || answer === 'no') {\n renderer.write(color.dim(' Cancelled.\\n'));\n return false;\n }\n return true;\n}\n\nexport interface LaunchModeChoices {\n /** TUI or plain REPL. */\n mode: 'tui' | 'repl';\n /** Auto-approve every tool call (no permission prompts). */\n yolo: boolean;\n}\n\n/**\n * Ask for interactive mode (TUI vs REPL) and YOLO. Either prompt is\n * skipped when the corresponding CLI flag was already pinned. Returns\n * the resolved pair.\n */\nexport async function runLaunchPrompts(opts: {\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n modePinned?: 'tui' | 'repl';\n yoloPinned?: boolean;\n}): Promise<LaunchModeChoices> {\n const { renderer, reader, modePinned, yoloPinned } = opts;\n\n let mode: 'tui' | 'repl';\n if (modePinned) {\n mode = modePinned;\n } else {\n const answer = (\n await reader.readLine(\n `\\n ${color.amber('?')} Interactive mode: ${color.bold('T')}UI / ${color.bold('R')}EPL ${color.dim('[T/r]')} `,\n )\n )\n .trim()\n .toLowerCase();\n mode = answer === 'r' || answer === 'repl' ? 'repl' : 'tui';\n }\n\n let yolo: boolean;\n if (yoloPinned !== undefined) {\n yolo = yoloPinned;\n } else {\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} YOLO mode ${color.dim('(auto-approve every tool call)')} ${color.dim('[Y/n]')} `,\n )\n )\n .trim()\n .toLowerCase();\n yolo = answer !== 'n' && answer !== 'no';\n }\n\n renderer.write(\n `\\n ${color.green('▶')} Launching in ${color.bold(mode.toUpperCase())} mode${yolo ? color.yellow(' (YOLO)') : ''}\\n\\n`,\n );\n\n return { mode, yolo };\n}\n","import { color } from '@wrongstack/core';\n\nexport function renderDiff(diff: string): string {\n if (!diff) return '';\n const lines = diff.split('\\n');\n return lines\n .map((line) => {\n if (line.startsWith('+++') || line.startsWith('---')) return color.bold(line);\n if (line.startsWith('@@')) return color.cyan(line);\n if (line.startsWith('+')) return color.green(line);\n if (line.startsWith('-')) return color.red(line);\n return color.dim(line);\n })\n .join('\\n');\n}\n","import { color } from '@wrongstack/core';\n\nexport const theme = {\n primary: color.amber,\n accent: color.pink,\n muted: color.dim,\n success: color.green,\n warn: color.yellow,\n error: color.red,\n info: color.cyan,\n bold: color.bold,\n underline: color.underline,\n};\n","import type { ContentBlock, Renderer, TextBlock } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport { renderDiff } from './diff-renderer.js';\nimport { theme } from './theme.js';\n\nexport interface TerminalRendererOptions {\n out?: NodeJS.WriteStream;\n err?: NodeJS.WriteStream;\n}\n\nexport class TerminalRenderer implements Renderer {\n private readonly out: NodeJS.WriteStream;\n private readonly err: NodeJS.WriteStream;\n private lineStart = true;\n /**\n * When true, every stdout-bound method is a no-op. This is the only\n * safe state to be in while Ink owns the terminal (TUI mode):\n * raw writes to stdout interleave with Ink's cursor math and cause\n * the input + status bar to be reprinted as scrollback junk.\n * Stderr-bound methods (writeInfo/Warning/Error) still flow — they\n * go to a different stream Ink does not manage.\n */\n private silent = false;\n\n constructor(opts: TerminalRendererOptions = {}) {\n this.out = opts.out ?? process.stdout;\n this.err = opts.err ?? process.stderr;\n }\n\n /**\n * Toggle stdout suppression. Call `setSilent(true)` right before\n * handing the terminal to Ink, and `setSilent(false)` after Ink\n * exits. Idempotent.\n */\n setSilent(silent: boolean): void {\n this.silent = silent;\n }\n\n isSilent(): boolean {\n return this.silent;\n }\n\n write(input: string | TextBlock): void {\n if (this.silent) return;\n const text = typeof input === 'string' ? input : input.text;\n if (!text) return;\n const rendered = renderMarkdown(text);\n this.out.write(rendered);\n this.lineStart = rendered.endsWith('\\n');\n }\n\n writeLine(text = ''): void {\n if (this.silent) return;\n if (!this.lineStart) this.out.write('\\n');\n if (text) this.out.write(`${text}\\n`);\n else this.out.write('\\n');\n this.lineStart = true;\n }\n\n writeBlock(block: ContentBlock): void {\n if (this.silent) return;\n if (block.type === 'text') {\n this.write(block);\n } else if (block.type === 'tool_use') {\n this.writeToolCall(block.name, block.input);\n } else if (block.type === 'tool_result') {\n const text =\n typeof block.content === 'string' ? block.content : JSON.stringify(block.content);\n this.writeToolResult('result', text, !!block.is_error);\n }\n }\n\n writeToolCall(name: string, input: unknown): void {\n if (this.silent) return;\n if (!this.lineStart) this.out.write('\\n');\n const arrow = theme.primary('→');\n const display = formatInputSummary(input);\n this.out.write(`${arrow} ${theme.bold(name)}${display ? color.dim(` ${display}`) : ''}\\n`);\n this.lineStart = true;\n }\n\n writeToolResult(name: string, content: unknown, isError: boolean): void {\n if (this.silent) return;\n const txt = typeof content === 'string' ? content : safeStringify(content);\n const prefix = isError ? theme.error('✘') : theme.success('✓');\n\n if (isError) {\n const firstLine = txt.split('\\n')[0] ?? '';\n const truncated = firstLine.length > 200 ? `${firstLine.slice(0, 197)}…` : firstLine;\n this.out.write(` ${prefix} ${color.dim(truncated)}\\n`);\n this.lineStart = true;\n return;\n }\n\n // Tool-specific rendering.\n const isEditLike = name === 'edit' || name === 'write';\n const isReadLike = name === 'read' || name === 'grep' || name === 'glob' || name === 'bash';\n const previewLines = isEditLike ? 0 : isReadLike ? 6 : 2;\n\n // Edit-like tools: pull the embedded diff if present.\n const diff = extractDiff(content);\n if (isEditLike && diff) {\n this.out.write(` ${prefix} ${color.dim(summarize(content, name))}\\n`);\n const rendered = renderDiff(diff)\n .split('\\n')\n .map((l) => ` ${l}`)\n .join('\\n');\n this.out.write(`${rendered}\\n`);\n this.lineStart = true;\n return;\n }\n\n // Generic preview: show up to N lines, then \"+X more\" if truncated.\n const lines = txt.split('\\n');\n const head = lines.slice(0, previewLines).map((l: string) => l.replace(/\\s+$/, ''));\n const moreCount = Math.max(0, lines.length - head.length);\n this.out.write(` ${prefix} ${color.dim(summarize(content, name))}\\n`);\n for (const l of head) {\n const capped = l.length > 200 ? `${l.slice(0, 197)}…` : l;\n this.out.write(` ${color.dim(capped)}\\n`);\n }\n if (moreCount > 0) {\n this.out.write(\n ` ${color.dim(`+${moreCount} more line${moreCount === 1 ? '' : 's'}`)}\\n`,\n );\n }\n this.lineStart = true;\n }\n\n writeDiff(diff: string): void {\n if (this.silent) return;\n if (!this.lineStart) this.out.write('\\n');\n this.out.write(`${renderDiff(diff)}\\n`);\n this.lineStart = true;\n }\n\n writeWarning(text: string): void {\n this.err.write(`${theme.warn('⚠')} ${text}\\n`);\n }\n writeError(text: string): void {\n this.err.write(`${theme.error('✘')} ${text}\\n`);\n }\n writeInfo(text: string): void {\n this.err.write(`${theme.info('ℹ')} ${text}\\n`);\n }\n\n clear(): void {\n if (this.silent) return;\n this.out.write('\\x1b[2J\\x1b[H');\n this.lineStart = true;\n }\n}\n\nfunction renderMarkdown(s: string): string {\n let out = s;\n // Headings\n out = out.replace(/^(#{1,6}) (.+)$/gm, (_m, hashes, text) => {\n return theme.primary(theme.bold(`${hashes} ${text}`));\n });\n // Fenced code\n out = out.replace(/```([a-zA-Z0-9_+-]*)\\n([\\s\\S]*?)```/g, (_m, _lang, code) => {\n return color.gray(`\\n┌─\\n${code.replace(/^/gm, '│ ')}└─`);\n });\n // Inline code\n out = out.replace(/`([^`\\n]+)`/g, (_m, code) => theme.accent(code));\n // Bold\n out = out.replace(/\\*\\*([^*]+)\\*\\*/g, (_m, text) => theme.bold(text));\n // Italic — single-asterisk\n out = out.replace(\n /(^|[^*])\\*([^*\\n]+)\\*([^*]|$)/g,\n (_m, l, t, r) => `${l}${color.italic(t)}${r}`,\n );\n return out;\n}\n\nfunction formatInputSummary(input: unknown): string {\n if (!input || typeof input !== 'object') return '';\n const obj = input as Record<string, unknown>;\n if (typeof obj['path'] === 'string') return obj['path'] as string;\n if (typeof obj['url'] === 'string') return obj['url'] as string;\n if (typeof obj['command'] === 'string') {\n const cmd = obj['command'] as string;\n return cmd.length > 60 ? cmd.slice(0, 57) + '...' : cmd;\n }\n if (typeof obj['pattern'] === 'string') return obj['pattern'] as string;\n return '';\n}\n\nfunction safeStringify(value: unknown): string {\n if (typeof value === 'string') return value;\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\n/**\n * If the tool result is an object with a `diff` field (e.g. from the edit\n * tool), return that. If it's a string containing a unified diff header,\n * return it as-is. Otherwise return null and the caller falls back to a\n * generic preview.\n */\nfunction extractDiff(value: unknown): string | null {\n if (typeof value === 'object' && value !== null) {\n const d = (value as { diff?: unknown }).diff;\n if (typeof d === 'string' && d.length > 0) return d;\n }\n if (typeof value === 'string') {\n // The agent serialises tool results to JSON before handing them to the\n // renderer, so a string `{\"diff\": \"...\"}` is the common case. Try parsing.\n const trimmed = value.trimStart();\n if (trimmed.startsWith('{')) {\n try {\n const parsed = JSON.parse(value) as { diff?: unknown };\n if (typeof parsed.diff === 'string' && parsed.diff.length > 0) {\n return parsed.diff;\n }\n } catch {\n // fall through\n }\n }\n if (/^---[^\\n]*\\n\\+\\+\\+/m.test(value)) return value;\n }\n return null;\n}\n\n/**\n * Short summary shown next to the ✓: file path + count for edit, line count\n * for read/grep, etc. Falls back to nothing if the shape isn't recognised.\n */\nfunction summarize(value: unknown, name: string): string {\n // Tool results arrive at the renderer already serialised to a JSON string.\n // Re-parse so we can pull out structured fields. Falls back to the raw value\n // for tools that return plain strings.\n let v: unknown = value;\n if (typeof value === 'string') {\n const trimmed = value.trimStart();\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n v = JSON.parse(value);\n } catch {\n // not JSON — leave as string\n }\n }\n }\n if (typeof v === 'object' && v !== null) {\n const o = v as Record<string, unknown>;\n if (name === 'edit') {\n const path = typeof o['path'] === 'string' ? (o['path'] as string) : '';\n const reps = typeof o['replacements'] === 'number' ? (o['replacements'] as number) : 0;\n return `${path} ${reps} replacement${reps === 1 ? '' : 's'}`.trim();\n }\n if (name === 'write') {\n const path = typeof o['path'] === 'string' ? (o['path'] as string) : '';\n const bytes = typeof o['bytes'] === 'number' ? (o['bytes'] as number) : undefined;\n return bytes !== undefined ? `${path} ${bytes}B` : path;\n }\n if (typeof o['count'] === 'number') {\n return `${o['count']} match${o['count'] === 1 ? '' : 'es'}`;\n }\n }\n return '';\n}\n","import * as fs from 'node:fs/promises';\nimport {\n type ModelsRegistry,\n type ProviderConfig,\n type ResolvedProvider,\n type SecretVault,\n type WireFamily,\n atomicWrite,\n color,\n decryptConfigSecrets,\n encryptConfigSecrets,\n} from '@wrongstack/core';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport {\n activeLabel,\n maskedKey,\n normalizeKeys,\n nowIso,\n writeKeysBack,\n} from './provider-config-utils.js';\nimport type { TerminalRenderer } from './renderer.js';\n\nexport interface AuthMenuDeps {\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n modelsRegistry: ModelsRegistry;\n vault: SecretVault;\n globalConfigPath: string;\n}\n\n/**\n * Interactive auth manager. Shows saved providers + keys, lets the user\n * add/update/delete keys, set the active key per provider, or add a key\n * for any provider in the models.dev catalog. Loops until the user exits.\n *\n * The legacy single-key `apiKey` field is migrated to `apiKeys[]` lazily\n * on first edit, so users who set up under the old schema upgrade\n * transparently the first time they open this menu.\n */\nexport async function runAuthMenu(deps: AuthMenuDeps): Promise<number> {\n for (;;) {\n const providers = await loadProviders(deps);\n renderTopMenu(deps.renderer, providers);\n\n const ids = Object.keys(providers).sort();\n const choice = (await deps.reader.readLine(`\\n${color.amber('?')} Pick: `))\n .trim()\n .toLowerCase();\n\n if (!choice || choice === 'q' || choice === 'quit' || choice === 'exit') {\n deps.renderer.write(color.dim('Done.\\n'));\n return 0;\n }\n\n if (choice === 'a' || choice === 'add') {\n await addForNewProvider(deps);\n continue;\n }\n\n if (choice === 'c' || choice === 'custom') {\n await addCustomProvider(deps);\n continue;\n }\n\n const idx = Number.parseInt(choice, 10);\n if (!Number.isNaN(idx) && idx >= 1 && idx <= ids.length) {\n const pid = ids[idx - 1]!;\n await manageProvider(pid, deps);\n continue;\n }\n\n // Try matching by provider id directly.\n const byId = ids.find((id) => id.toLowerCase() === choice);\n if (byId) {\n await manageProvider(byId, deps);\n continue;\n }\n\n deps.renderer.writeError(`Unknown selection: \"${choice}\"`);\n }\n}\n\nfunction renderTopMenu(\n renderer: TerminalRenderer,\n providers: Record<string, ProviderConfig>,\n): void {\n renderer.write(`\\n${color.bold('WrongStack')} ${color.dim('— API keys')}\\n\\n`);\n const ids = Object.keys(providers).sort();\n if (ids.length === 0) {\n renderer.write(color.dim(' No providers configured yet.\\n'));\n } else {\n renderer.write(` ${color.dim('Saved providers:')}\\n`);\n let idx = 1;\n for (const id of ids) {\n const cfg = providers[id]!;\n const keys = normalizeKeys(cfg);\n const active = activeLabel(cfg, keys);\n const summary =\n keys.length === 0\n ? color.dim('(no keys)')\n : keys.length === 1\n ? maskedKey(keys[0]!.apiKey)\n : `${color.dim(`${keys.length} keys`)} ${color.dim('active:')} ${color.bold(active ?? '?')} ${maskedKey(keys.find((k) => k.label === active)?.apiKey ?? keys[0]!.apiKey)}`;\n const fam = cfg.family ? color.dim(`[${cfg.family}]`) : '';\n const aliasHint = cfg.type && cfg.type !== id ? color.dim(`→ ${cfg.type}`) : '';\n renderer.write(\n ` ${color.dim(`${idx}.`.padStart(4))} ${id.padEnd(22)} ${fam} ${aliasHint} ${summary}\\n`,\n );\n idx++;\n }\n }\n renderer.write(`\\n ${color.dim('Actions:')}\\n`);\n renderer.write(` ${color.bold('a')} Add key for a new provider (from catalog)\\n`);\n renderer.write(` ${color.bold('c')} Add custom provider (type + family + baseUrl)\\n`);\n renderer.write(` ${color.bold('q')} Quit\\n`);\n if (ids.length > 0) {\n renderer.write(color.dim(`\\n Pick a number to manage that provider's keys.\\n`));\n }\n}\n\nasync function manageProvider(providerId: string, deps: AuthMenuDeps): Promise<void> {\n for (;;) {\n const providers = await loadProviders(deps);\n const cfg = providers[providerId];\n if (!cfg) {\n deps.renderer.writeError(`Provider \"${providerId}\" no longer in config.`);\n return;\n }\n const keys = normalizeKeys(cfg);\n const active = activeLabel(cfg, keys);\n\n deps.renderer.write(\n `\\n${color.bold(providerId)} ${cfg.family ? color.dim(`[${cfg.family}]`) : color.amber('[no family]')}\\n`,\n );\n deps.renderer.write(\n color.dim(` type: ${cfg.type ?? providerId}\\n`) +\n color.dim(\n ` family: ${cfg.family ?? '(unset → resolved from models.dev when type matches)'}\\n`,\n ) +\n color.dim(` baseUrl: ${cfg.baseUrl ?? '(unset → catalog default)'}\\n`),\n );\n if (cfg.envVars && cfg.envVars.length > 0) {\n deps.renderer.write(color.dim(` envVars: ${cfg.envVars.join(', ')}\\n`));\n }\n if (cfg.models && cfg.models.length > 0) {\n deps.renderer.write(color.dim(` models: ${cfg.models.join(', ')}\\n`));\n }\n if (keys.length === 0) {\n deps.renderer.write(color.dim(' (no keys saved)\\n'));\n } else {\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i]!;\n const marker = k.label === active ? color.green('●') : color.dim('○');\n deps.renderer.write(\n ` ${color.dim(`${i + 1}.`.padStart(4))} ${marker} ${k.label.padEnd(20)} ${maskedKey(k.apiKey)} ${color.dim(k.createdAt)}\\n`,\n );\n }\n }\n\n deps.renderer.write(`\\n ${color.dim('Actions:')}\\n`);\n deps.renderer.write(` ${color.bold('a')} Add another key\\n`);\n if (keys.length > 0) {\n deps.renderer.write(` ${color.bold('u')} <n> Update key <n>\\n`);\n deps.renderer.write(` ${color.bold('d')} <n> Delete key <n>\\n`);\n deps.renderer.write(` ${color.bold('s')} <n> Set key <n> as active\\n`);\n }\n deps.renderer.write(` ${color.bold('f')} Edit family\\n`);\n deps.renderer.write(` ${color.bold('B')} Edit baseUrl\\n`);\n deps.renderer.write(` ${color.bold('m')} Edit visible model list\\n`);\n deps.renderer.write(` ${color.bold('x')} Remove this provider entirely\\n`);\n deps.renderer.write(` ${color.bold('b')} Back\\n`);\n\n const raw = (await deps.reader.readLine(`\\n${color.amber('?')} ${providerId} > `)).trim();\n if (!raw || raw === 'b' || raw === 'back') return;\n\n const [verb, argRaw] = raw.split(/\\s+/, 2);\n const arg = argRaw ? Number.parseInt(argRaw, 10) : Number.NaN;\n\n if (verb === 'a' || verb === 'add') {\n await addKeyForProvider(providerId, deps, cfg);\n continue;\n }\n if (verb === 'x' || verb === 'remove') {\n const confirm = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Remove provider \"${providerId}\" and ${keys.length} key(s)? ${color.dim('[y/N]')} `,\n )\n )\n .trim()\n .toLowerCase();\n if (confirm === 'y' || confirm === 'yes') {\n await mutateProviders(deps, (all) => {\n delete all[providerId];\n });\n deps.renderer.write(` ${color.green('✓')} Removed ${providerId}.\\n`);\n return;\n }\n continue;\n }\n if (verb === 'u' || verb === 'update') {\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\n deps.renderer.writeError(`Usage: u <1-${keys.length}>`);\n continue;\n }\n const target = keys[arg - 1]!;\n const newKey = await readKeyInput(deps, `Updated key for ${target.label}`);\n if (!newKey) continue;\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n const list = normalizeKeys(p).map((k) =>\n k.label === target.label ? { ...k, apiKey: newKey, createdAt: nowIso() } : k,\n );\n writeKeysBack(p, list);\n });\n deps.renderer.write(` ${color.green('✓')} Updated ${providerId}/${target.label}.\\n`);\n continue;\n }\n if (verb === 'd' || verb === 'delete' || verb === 'rm') {\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\n deps.renderer.writeError(`Usage: d <1-${keys.length}>`);\n continue;\n }\n const target = keys[arg - 1]!;\n const confirm = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Delete key \"${target.label}\" (${maskedKey(target.apiKey)})? ${color.dim('[y/N]')} `,\n )\n )\n .trim()\n .toLowerCase();\n if (confirm !== 'y' && confirm !== 'yes') continue;\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n const list = normalizeKeys(p).filter((k) => k.label !== target.label);\n writeKeysBack(p, list);\n if (p.activeKey === target.label) {\n p.activeKey = list[0]?.label;\n }\n });\n deps.renderer.write(` ${color.green('✓')} Deleted ${providerId}/${target.label}.\\n`);\n continue;\n }\n if (verb === 'f' || verb === 'family') {\n const current = cfg.family ?? '';\n const ans = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Family ${color.dim(`(anthropic | openai | openai-compatible | google, empty = unset, current: ${current || 'unset'})`)}: `,\n )\n ).trim() as WireFamily | '';\n if (ans !== '' && !['anthropic', 'openai', 'openai-compatible', 'google'].includes(ans)) {\n deps.renderer.writeError(`Invalid family: \"${ans}\"`);\n continue;\n }\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n if (ans === '') delete p.family;\n else p.family = ans;\n });\n deps.renderer.write(` ${color.green('✓')} family → ${ans || '(unset)'}\\n`);\n continue;\n }\n if (verb === 'B' || verb === 'baseurl' || verb === 'base-url') {\n const current = cfg.baseUrl ?? '';\n const ans = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Base URL ${color.dim(`(empty = unset, current: ${current || 'unset'})`)}: `,\n )\n ).trim();\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n if (ans === '') delete p.baseUrl;\n else p.baseUrl = ans;\n });\n deps.renderer.write(` ${color.green('✓')} baseUrl → ${ans || '(unset)'}\\n`);\n continue;\n }\n if (verb === 'm' || verb === 'models') {\n const current = (cfg.models ?? []).join(', ');\n const ans = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Model ids ${color.dim(`(comma-separated, empty = catalog default, current: ${current || 'none'})`)}: `,\n )\n ).trim();\n const list = ans\n ? ans\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : [];\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n if (list.length === 0) delete p.models;\n else p.models = list;\n });\n deps.renderer.write(\n ` ${color.green('✓')} models → ${list.length === 0 ? '(catalog default)' : list.join(', ')}\\n`,\n );\n continue;\n }\n if (verb === 's' || verb === 'set' || verb === 'active') {\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\n deps.renderer.writeError(`Usage: s <1-${keys.length}>`);\n continue;\n }\n const target = keys[arg - 1]!;\n await mutateProviders(deps, (all) => {\n const p = all[providerId];\n if (!p) return;\n // Make sure the apiKeys[] form is canonical before flipping active.\n const list = normalizeKeys(p);\n writeKeysBack(p, list);\n p.activeKey = target.label;\n });\n deps.renderer.write(\n ` ${color.green('✓')} Active key for ${providerId} → ${color.bold(target.label)}.\\n`,\n );\n continue;\n }\n deps.renderer.writeError(`Unknown action: \"${raw}\"`);\n }\n}\n\n/**\n * Pick a provider from the models.dev catalog (grouped by family) and add\n * a key for it. Catalog lookup populates family/baseUrl/envVars defaults.\n * When the catalog is unavailable we still let the user type a provider\n * id and family manually so the offline path keeps working.\n */\nasync function addForNewProvider(deps: AuthMenuDeps): Promise<void> {\n let catalog: ResolvedProvider[] = [];\n try {\n catalog = (await deps.modelsRegistry.listProviders()).filter((p) => p.family !== 'unsupported');\n } catch {\n deps.renderer.writeWarning('Catalog unavailable — falling back to manual entry.');\n }\n\n if (catalog.length === 0) {\n // Manual entry path\n const pid = (await deps.reader.readLine(` ${color.amber('?')} Provider id: `)).trim();\n if (!pid) return;\n const fam = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Family (anthropic/openai/openai-compatible/google): `,\n )\n ).trim() as WireFamily;\n const baseUrl = (\n await deps.reader.readLine(` ${color.amber('?')} Base URL ${color.dim('(optional)')}: `)\n ).trim();\n await addKeyForProvider(pid, deps, {\n type: pid,\n family: fam || undefined,\n ...(baseUrl ? { baseUrl } : {}),\n });\n return;\n }\n\n // Group catalog by family, optionally narrowed by a substring filter\n // and/or hiding already-saved entries. The catalog has 120+ entries —\n // without a filter the openai-compatible list alone scrolls off-screen,\n // so types like \"zai-coding-plan\" get easy to miss.\n const saved = new Set(Object.keys(await loadProviders(deps)));\n deps.renderer.write(\n color.dim(\n ` Catalog has ${catalog.length} providers. Filter by name to narrow, or \"s\" for unsaved-only.\\n`,\n ),\n );\n const filterRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Filter ${color.dim('(substring of id/name, \"s\" for unsaved-only, empty = all)')}: `,\n )\n ).trim();\n const filterLc = filterRaw.toLowerCase();\n const showUnsavedOnly = filterLc === 's' || filterLc === 'unsaved';\n const matches = (p: ResolvedProvider): boolean => {\n if (showUnsavedOnly) return !saved.has(p.id);\n if (!filterLc) return true;\n return p.id.toLowerCase().includes(filterLc) || p.name.toLowerCase().includes(filterLc);\n };\n\n const byFamily = new Map<WireFamily, ResolvedProvider[]>();\n let filteredCount = 0;\n for (const p of catalog) {\n if (!matches(p)) continue;\n filteredCount++;\n const list = byFamily.get(p.family) ?? [];\n list.push(p);\n byFamily.set(p.family, list);\n }\n\n if (filteredCount === 0) {\n deps.renderer.writeError(\n `No providers match \"${filterRaw}\". Try a shorter substring or check \\`wstack providers\\` for valid ids.`,\n );\n return;\n }\n if (filterRaw && !showUnsavedOnly) {\n deps.renderer.write(\n color.dim(` ${filteredCount} match${filteredCount === 1 ? '' : 'es'} for \"${filterRaw}\".\\n`),\n );\n }\n\n const ordered: ResolvedProvider[] = [];\n const familyOrder: WireFamily[] = ['anthropic', 'openai', 'google', 'openai-compatible'];\n let idx = 1;\n deps.renderer.write('\\n');\n for (const fam of familyOrder) {\n const list = byFamily.get(fam);\n if (!list || list.length === 0) continue;\n deps.renderer.write(` ${color.bold(fam)}\\n`);\n for (const p of list) {\n const savedMark = saved.has(p.id) ? color.cyan('◉') : color.dim('○');\n const env = p.envVars[0] ? color.dim(`[${p.envVars[0]}]`) : '';\n deps.renderer.write(\n ` ${color.dim(`${idx}.`.padStart(4))} ${savedMark} ${p.id.padEnd(22)} ${color.dim(p.name)} ${env}\\n`,\n );\n ordered.push(p);\n idx++;\n }\n }\n deps.renderer.write(`\\n ${color.dim('◉ already saved ○ no key yet')}\\n`);\n\n const answer = (\n await deps.reader.readLine(\n `\\n${color.amber('?')} Pick (1-${ordered.length}) or type provider id: `,\n )\n ).trim();\n if (!answer) return;\n\n let chosen: ResolvedProvider | undefined;\n const num = Number.parseInt(answer, 10);\n if (!Number.isNaN(num) && num >= 1 && num <= ordered.length) {\n chosen = ordered[num - 1];\n } else {\n chosen =\n ordered.find((p) => p.id.toLowerCase() === answer.toLowerCase()) ??\n catalog.find((p) => p.id.toLowerCase() === answer.toLowerCase());\n }\n if (!chosen) {\n deps.renderer.writeError(`No such provider: \"${answer}\"`);\n return;\n }\n\n // Always show family + baseUrl as inline prompts with catalog defaults\n // so the user can override either one without a separate confirmation\n // step. Press Enter to accept the catalog value, or type a new one to\n // change it. Useful for routing a catalog-known id through a custom\n // proxy or a different wire family (e.g. \"anthropic\"-id provider\n // through an openai-compatible gateway).\n deps.renderer.write(\n color.dim(`\\n Defaults from models.dev — press Enter to keep, or type a new value.\\n`),\n );\n const famRaw = (\n await deps.reader.readLine(` ${color.amber('?')} Family ${color.dim(`[${chosen.family}]`)}: `)\n ).trim();\n let family: WireFamily = chosen.family;\n if (famRaw) {\n if (!['anthropic', 'openai', 'openai-compatible', 'google'].includes(famRaw)) {\n deps.renderer.writeError(\n `Invalid family: \"${famRaw}\" (must be anthropic | openai | openai-compatible | google).`,\n );\n return;\n }\n family = famRaw as WireFamily;\n }\n const baseRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Base URL ${color.dim(`[${chosen.apiBase ?? 'unset'}]`)}: `,\n )\n ).trim();\n const baseUrl: string | undefined = baseRaw || chosen.apiBase;\n\n // Pick the storage alias (= map key under `providers`). Two reasons to\n // make this distinct from the catalog id:\n // 1. The user may want the SAME catalog provider saved twice with\n // different family/baseUrl (e.g. zai-coding-plan once as\n // openai-compatible, once as anthropic) — different aliases let\n // both entries coexist.\n // 2. The CLI launches via `--provider <alias>`, so a short custom\n // name like \"zai-claude\" is friendlier than \"zai-coding-plan-anthropic\".\n // Auto-suggest a disambiguated alias when family diverges from the\n // catalog default, since that's the signal the user is creating a\n // second variant — not just adding another key to the same profile.\n const providersNow = await loadProviders(deps);\n let suggestedAlias = chosen.id;\n if (family !== chosen.family) {\n let candidate = `${chosen.id}-${family}`;\n let n = 2;\n while (providersNow[candidate]) {\n candidate = `${chosen.id}-${family}-${n}`;\n n++;\n }\n suggestedAlias = candidate;\n }\n const aliasRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Save under alias ${color.dim(`[${suggestedAlias}]`)} ${color.dim('(used as `--provider <alias>`)')}: `,\n )\n ).trim();\n const alias = aliasRaw || suggestedAlias;\n\n // Block clobbering an unrelated existing entry. Same alias is fine if\n // the user is intentionally adding another KEY to the same profile —\n // but only when family + baseUrl match what's already saved. Otherwise\n // we'd silently overwrite their settings and pile a key into the wrong\n // place (exactly the bug that motivated the alias prompt).\n const existing = providersNow[alias];\n if (existing) {\n const sameFamily = (existing.family ?? chosen.family) === family;\n const sameBase = (existing.baseUrl ?? chosen.apiBase) === baseUrl;\n if (!sameFamily || !sameBase) {\n deps.renderer.writeError(\n `Alias \"${alias}\" already exists with different family/baseUrl.\\n ` +\n `Existing: family=${existing.family ?? '(unset)'}, baseUrl=${existing.baseUrl ?? '(unset)'}\\n ` +\n `New: family=${family}, baseUrl=${baseUrl ?? '(unset)'}\\n ` +\n `Pick a different alias to keep them separate.`,\n );\n return;\n }\n }\n\n await addKeyForProvider(alias, deps, {\n type: chosen.id,\n family,\n baseUrl,\n envVars: chosen.envVars,\n });\n}\n\n/**\n * Add a fully user-defined provider that bypasses the models.dev catalog.\n * The user picks the type (registry id), wire family, and base URL — all\n * three are stored on the entry so the CLI can construct the provider\n * via `makeProviderFromConfig` at boot without a catalog lookup.\n */\nasync function addCustomProvider(deps: AuthMenuDeps): Promise<void> {\n deps.renderer.write(\n `\\n${color.bold('Custom provider')} ${color.dim('— for local models or proxies not in the models.dev catalog.')}\\n`,\n );\n const type = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Provider id ${color.dim('(e.g. \"local-llama\", \"my-proxy\")')}: `,\n )\n ).trim();\n if (!type) return;\n\n const existing = (await loadProviders(deps))[type];\n if (existing) {\n deps.renderer.writeWarning(`\"${type}\" already exists. Pick it from the main menu to edit.`);\n return;\n }\n\n const familyRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Wire family ${color.dim('(anthropic | openai | openai-compatible | google)')}: `,\n )\n ).trim();\n if (!['anthropic', 'openai', 'openai-compatible', 'google'].includes(familyRaw)) {\n deps.renderer.writeError(`Invalid family: \"${familyRaw}\"`);\n return;\n }\n const family = familyRaw as WireFamily;\n\n const baseUrl = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Base URL ${color.dim('(e.g. http://localhost:11434/v1, leave empty if not needed)')}: `,\n )\n ).trim();\n\n const modelsRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Model ids ${color.dim('(comma-separated, optional)')}: `,\n )\n ).trim();\n const models = modelsRaw\n ? modelsRaw\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined;\n\n const envVarsRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Env var names ${color.dim('(comma-separated, optional fallback for the key)')}: `,\n )\n ).trim();\n const envVars = envVarsRaw\n ? envVarsRaw\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : undefined;\n\n await addKeyForProvider(type, deps, {\n type,\n family,\n ...(baseUrl ? { baseUrl } : {}),\n ...(models ? { models } : {}),\n ...(envVars ? { envVars } : {}),\n });\n}\n\nasync function addKeyForProvider(\n providerId: string,\n deps: AuthMenuDeps,\n template: Partial<ProviderConfig>,\n): Promise<void> {\n const providers = await loadProviders(deps);\n const existing = providers[providerId];\n const existingKeys = existing ? normalizeKeys(existing) : [];\n const usedLabels = new Set(existingKeys.map((k) => k.label));\n\n // Suggest a sensible default label\n let defaultLabel = 'default';\n if (usedLabels.has(defaultLabel)) {\n let n = 2;\n while (usedLabels.has(`key${n}`)) n++;\n defaultLabel = `key${n}`;\n }\n\n const labelRaw = (\n await deps.reader.readLine(\n ` ${color.amber('?')} Label for this key ${color.dim(`[${defaultLabel}]`)}: `,\n )\n ).trim();\n const label = labelRaw || defaultLabel;\n if (usedLabels.has(label)) {\n deps.renderer.writeError(\n `Label \"${label}\" already used for ${providerId}. Use update (u) instead.`,\n );\n return;\n }\n\n const apiKey = await readKeyInput(deps, `API key for ${providerId}/${label}`);\n if (!apiKey) {\n deps.renderer.writeError('No key entered. Nothing saved.');\n return;\n }\n\n await mutateProviders(deps, (all) => {\n const existingProv = all[providerId] ?? { type: providerId, ...template };\n // Backfill type/family/baseUrl from template when absent.\n if (!existingProv.type) existingProv.type = providerId;\n if (!existingProv.family && template.family) existingProv.family = template.family;\n if (!existingProv.baseUrl && template.baseUrl) existingProv.baseUrl = template.baseUrl;\n if (!existingProv.envVars && template.envVars) existingProv.envVars = template.envVars;\n const list = normalizeKeys(existingProv);\n list.push({ label, apiKey, createdAt: nowIso() });\n writeKeysBack(existingProv, list);\n if (!existingProv.activeKey) existingProv.activeKey = label;\n all[providerId] = existingProv;\n });\n\n deps.renderer.write(\n ` ${color.green('✓')} Saved ${color.bold(providerId)}/${color.bold(label)}. ${color.dim('Use `wstack --provider ' + providerId + ' \"<task>\"` to launch.')}\\n`,\n );\n}\n\n/**\n * One-shot add: used by `wstack auth <provider>` to skip the menu and\n * append a single key. Honors --label / --family / --base-url / --env\n * flags. If the label collides, we suffix with a counter.\n */\nexport async function runAuthDirect(\n deps: AuthMenuDeps,\n opts: {\n providerId: string;\n label?: string;\n family?: WireFamily;\n baseUrl?: string;\n envVars?: string[];\n },\n): Promise<number> {\n const { providerId } = opts;\n const providers = await loadProviders(deps);\n const existing = providers[providerId];\n\n if (!existing && !opts.family) {\n // Try the catalog before giving up.\n let knownFamily: WireFamily | undefined;\n let knownBase: string | undefined;\n let knownEnv: string[] | undefined;\n try {\n const k = await deps.modelsRegistry.getProvider(providerId);\n if (k) {\n knownFamily = k.family;\n knownBase = k.apiBase;\n knownEnv = k.envVars;\n }\n } catch {\n // catalog unavailable\n }\n if (!knownFamily || knownFamily === 'unsupported') {\n deps.renderer.writeError(\n `Provider \"${providerId}\" not in catalog. Pass --family <anthropic|openai|openai-compatible|google>.`,\n );\n return 1;\n }\n opts.family = knownFamily;\n opts.baseUrl ??= knownBase;\n opts.envVars ??= knownEnv;\n }\n\n const usedLabels = new Set(existing ? normalizeKeys(existing).map((k) => k.label) : []);\n let label = opts.label ?? 'default';\n if (usedLabels.has(label)) {\n let n = 2;\n while (usedLabels.has(`${label}-${n}`)) n++;\n label = `${label}-${n}`;\n deps.renderer.writeInfo(`Label collided; saving as \"${label}\".`);\n }\n\n const apiKey = await readKeyInput(deps, `API key for ${providerId}/${label}`);\n if (!apiKey) return 1;\n\n await mutateProviders(deps, (all) => {\n const p = all[providerId] ?? { type: providerId };\n if (!p.type) p.type = providerId;\n if (!p.family && opts.family) p.family = opts.family;\n if (!p.baseUrl && opts.baseUrl) p.baseUrl = opts.baseUrl;\n if (!p.envVars && opts.envVars) p.envVars = opts.envVars;\n const list = normalizeKeys(p);\n list.push({ label, apiKey, createdAt: nowIso() });\n writeKeysBack(p, list);\n if (!p.activeKey) p.activeKey = label;\n all[providerId] = p;\n });\n\n deps.renderer.writeInfo(`Stored encrypted key for ${providerId} (label \"${label}\").`);\n deps.renderer.writeInfo(`Use: wstack --provider ${providerId} \"<task>\"`);\n return 0;\n}\n\nasync function readKeyInput(deps: AuthMenuDeps, intent: string): Promise<string | undefined> {\n const key = (\n await deps.reader.readSecret(\n ` ${color.amber('?')} ${intent} ${color.dim('(hidden, paste OK)')}: `,\n )\n ).trim();\n if (!key) {\n deps.renderer.writeError('No key entered.');\n return undefined;\n }\n return key;\n}\n\n/* ----------------------------- I/O helpers ----------------------------- */\n\n/**\n * Read the on-disk config file and return its `providers` map, fully\n * decrypted. We don't use `deps.config` here because it's a frozen\n * snapshot taken at startup — and once we start mutating keys we want to\n * see our own writes on the next iteration.\n */\nasync function loadProviders(deps: AuthMenuDeps): Promise<Record<string, ProviderConfig>> {\n let raw: string;\n try {\n raw = await fs.readFile(deps.globalConfigPath, 'utf8');\n } catch {\n return {};\n }\n let parsed: { providers?: Record<string, ProviderConfig> } = {};\n try {\n parsed = JSON.parse(raw) as { providers?: Record<string, ProviderConfig> };\n } catch {\n return {};\n }\n const decrypted = decryptConfigSecrets(parsed, deps.vault);\n return decrypted.providers ?? {};\n}\n\n/**\n * Load → mutate → encrypt → atomic-write. Operates on the FULL config\n * file so we don't truncate anything the user has set up elsewhere; only\n * the `providers` key gets replaced wholesale with the post-mutation\n * value (so deletions actually take effect).\n */\nasync function mutateProviders(\n deps: AuthMenuDeps,\n mutator: (providers: Record<string, ProviderConfig>) => void,\n): Promise<void> {\n let raw: string;\n try {\n raw = await fs.readFile(deps.globalConfigPath, 'utf8');\n } catch {\n raw = '{}';\n }\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(raw) as Record<string, unknown>;\n } catch {\n parsed = {};\n }\n const decrypted = decryptConfigSecrets(parsed, deps.vault) as Record<string, unknown>;\n const providers = (decrypted.providers as Record<string, ProviderConfig>) ?? {};\n mutator(providers);\n decrypted.providers = providers;\n const encrypted = encryptConfigSecrets(decrypted, deps.vault);\n await atomicWrite(deps.globalConfigPath, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\n}\n","import { parseAuthFlags } from '../../arg-parser.js';\nimport { runAuthDirect, runAuthMenu } from '../../auth-menu.js';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const authCmd: SubcommandHandler = async (args, deps) => {\n const flags = parseAuthFlags(args);\n const menuDeps = {\n renderer: deps.renderer,\n reader: deps.reader,\n modelsRegistry: deps.modelsRegistry,\n vault: deps.vault,\n globalConfigPath: deps.paths.globalConfig,\n };\n if (flags.positional.length === 0) return runAuthMenu(menuDeps);\n return runAuthDirect(menuDeps, {\n providerId: flags.positional[0]!,\n label: flags.label,\n family: flags.family,\n baseUrl: flags.baseUrl,\n envVars: flags.envVars,\n });\n};\n","import { createRequire } from 'node:module';\n\nconst req = createRequire(import.meta.url);\n\nfunction readOwnVersion(): string {\n const candidates = ['../package.json', '../../package.json'];\n for (const rel of candidates) {\n try {\n const pkg = req(rel) as { version?: unknown };\n if (typeof pkg.version === 'string' && pkg.version.length > 0) return pkg.version;\n } catch {\n // try next\n }\n }\n return 'dev';\n}\n\nexport const CLI_VERSION = readOwnVersion();\n\nlet API_VERSION = '0.0.0';\ntry {\n const corePkg = req('@wrongstack/core/package.json') as { wrongstackApiVersion?: string };\n if (corePkg.wrongstackApiVersion) API_VERSION = corePkg.wrongstackApiVersion;\n} catch {\n /* fallback */\n}\n\nexport { API_VERSION };\n","import * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport { API_VERSION } from '../../version.js';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const diagCmd: SubcommandHandler = async (_args, deps) => {\n const cfg = deps.config;\n const age = await deps.modelsRegistry.ageSeconds();\n const lines = [\n color.bold('WrongStack diagnostics'),\n ` apiVersion: ${API_VERSION}`,\n ` cwd: ${deps.cwd}`,\n ` projectRoot: ${deps.projectRoot}`,\n ` projectHash: ${deps.paths.projectHash}`,\n ` projectDir: ${deps.paths.projectDir}`,\n ` globalRoot: ${deps.paths.globalRoot}`,\n ` modelsCache: ${deps.paths.modelsCache}`,\n ` cacheAge: ${isFinite(age) ? `${Math.round(age / 60)}m` : 'never'}`,\n ` node: ${process.version}`,\n ` os: ${os.platform()} ${os.release()}`,\n ` provider: ${cfg.provider ?? '<unset>'}`,\n ` model: ${cfg.model ?? '<unset>'}`,\n ` tools: ${deps.toolRegistry?.list().length ?? 0}`,\n ` plugins: ${cfg.plugins?.length ?? 0}`,\n ` mcpServers: ${Object.keys(cfg.mcpServers ?? {}).length}`,\n ];\n deps.renderer.write(lines.join('\\n') + '\\n');\n return 0;\n};\n\nexport const doctorCmd: SubcommandHandler = async (_args, deps) => {\n type CheckResult = { name: string; status: 'ok' | 'warn' | 'fail'; detail: string };\n const checks: CheckResult[] = [];\n const cfg = deps.config;\n if (!cfg.provider)\n checks.push({\n name: 'provider',\n status: 'fail',\n detail: 'no provider configured — run `wstack init` or `wstack auth`',\n });\n else checks.push({ name: 'provider', status: 'ok', detail: cfg.provider });\n if (!cfg.model)\n checks.push({\n name: 'model',\n status: 'fail',\n detail: 'no model configured — run `wstack init`',\n });\n else checks.push({ name: 'model', status: 'ok', detail: cfg.model });\n if (cfg.provider) {\n const providerCfg = (\n cfg.providers as Record<string, { apiKey?: string; envVars?: string[] }> | undefined\n )?.[cfg.provider];\n const hasVaultKey = typeof providerCfg?.apiKey === 'string' && providerCfg.apiKey.length > 0;\n const envHit = providerCfg?.envVars?.some((v) => process.env[v]) ?? false;\n if (hasVaultKey || envHit)\n checks.push({\n name: 'api key',\n status: 'ok',\n detail: hasVaultKey ? 'found in vault' : 'found in env',\n });\n else\n checks.push({\n name: 'api key',\n status: 'fail',\n detail: `no key for \"${cfg.provider}\" in vault or env — run \\`wstack auth ${cfg.provider}\\``,\n });\n }\n try {\n const age = await deps.modelsRegistry.ageSeconds();\n if (!isFinite(age))\n checks.push({\n name: 'models cache',\n status: 'warn',\n detail: 'never fetched — run `wstack models refresh`',\n });\n else if (age > 7 * 24 * 3600)\n checks.push({\n name: 'models cache',\n status: 'warn',\n detail: `${Math.round(age / 86400)} days old — run \\`wstack models refresh\\``,\n });\n else\n checks.push({ name: 'models cache', status: 'ok', detail: `${Math.round(age / 60)}m old` });\n } catch (err) {\n checks.push({\n name: 'models cache',\n status: 'warn',\n detail: `read failed: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n try {\n await fs.access(deps.paths.secretsKey);\n checks.push({ name: 'secret vault', status: 'ok', detail: deps.paths.secretsKey });\n } catch {\n checks.push({\n name: 'secret vault',\n status: 'warn',\n detail: 'not yet initialized (created lazily on first encrypt)',\n });\n }\n try {\n await fs.mkdir(deps.paths.projectSessions, { recursive: true });\n const probe = path.join(deps.paths.projectSessions, `.probe-${Date.now()}`);\n await fs.writeFile(probe, '');\n await fs.unlink(probe);\n checks.push({ name: 'sessions writable', status: 'ok', detail: deps.paths.projectSessions });\n } catch (err) {\n checks.push({\n name: 'sessions writable',\n status: 'fail',\n detail: `cannot write to ${deps.paths.projectSessions}: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n const mcpEntries = Object.entries(cfg.mcpServers ?? {}) as [\n string,\n { enabled?: boolean; transport?: string; command?: string; url?: string },\n ][];\n for (const [name, srv] of mcpEntries) {\n if (!srv.enabled) continue;\n if ((srv.transport === 'sse' || srv.transport === 'streamable-http') && !srv.url)\n checks.push({ name: `mcp:${name}`, status: 'fail', detail: 'transport requires url' });\n else if (srv.transport === 'stdio' && !srv.command)\n checks.push({\n name: `mcp:${name}`,\n status: 'fail',\n detail: 'stdio transport requires command',\n });\n else\n checks.push({\n name: `mcp:${name}`,\n status: 'ok',\n detail: `${srv.transport} ${srv.command ?? srv.url ?? ''}`.trim(),\n });\n }\n const major = Number.parseInt(process.version.replace(/^v/, '').split('.')[0] ?? '0', 10);\n if (major < 22)\n checks.push({ name: 'node', status: 'fail', detail: `${process.version} (need ≥22)` });\n else checks.push({ name: 'node', status: 'ok', detail: process.version });\n deps.renderer.write(color.bold('WrongStack doctor\\n\\n'));\n let failed = 0;\n let warned = 0;\n for (const c of checks) {\n const icon =\n c.status === 'ok'\n ? color.green('✓')\n : c.status === 'warn'\n ? color.amber('●')\n : color.red('✗');\n deps.renderer.write(` ${icon} ${c.name.padEnd(20)} ${color.dim(c.detail)}\\n`);\n if (c.status === 'fail') failed++;\n if (c.status === 'warn') warned++;\n }\n deps.renderer.write('\\n');\n if (failed > 0) {\n deps.renderer.write(\n color.red(`${failed} failed, ${warned} warning${warned === 1 ? '' : 's'}\\n`),\n );\n return 1;\n }\n if (warned > 0) {\n deps.renderer.write(\n color.amber(`All checks passed (${warned} warning${warned === 1 ? '' : 's'})\\n`),\n );\n return 0;\n }\n deps.renderer.write(color.green('All checks passed.\\n'));\n return 0;\n};\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { DefaultSessionReader } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const exportCmd: SubcommandHandler = async (args, deps) => {\n if (!deps.sessionStore) {\n deps.renderer.writeError('No session store configured.');\n return 1;\n }\n let format: 'markdown' | 'json' | 'text' = 'markdown';\n let output: string | undefined;\n let includeTools = true;\n let includeDiagnostics = true;\n let sessionId: string | undefined;\n for (let i = 0; i < args.length; i++) {\n const a = args[i]!;\n if (a === '--format' || a === '-f') {\n const v = args[++i];\n if (v !== 'markdown' && v !== 'json' && v !== 'text') {\n deps.renderer.writeError(`Unknown --format ${v}. Use markdown, json, or text.`);\n return 1;\n }\n format = v;\n } else if (a === '--out' || a === '-o') output = args[++i];\n else if (a === '--no-tools') includeTools = false;\n else if (a === '--no-diagnostics') includeDiagnostics = false;\n else if (a.startsWith('-')) {\n deps.renderer.writeError(`Unknown flag: ${a}`);\n return 1;\n } else if (!sessionId) sessionId = a;\n }\n if (!sessionId) {\n deps.renderer.writeError(\n 'Usage: wstack export <sessionId> [--format markdown|json|text] [--out <file>] [--no-tools] [--no-diagnostics]',\n );\n return 1;\n }\n const reader = new DefaultSessionReader({ store: deps.sessionStore });\n let rendered: string;\n try {\n rendered = await reader.export(sessionId, { format, includeTools, includeDiagnostics });\n } catch (err) {\n deps.renderer.writeError(`Export failed: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n if (output) {\n await fs.mkdir(path.dirname(path.resolve(deps.cwd, output)), { recursive: true });\n await fs.writeFile(path.resolve(deps.cwd, output), rendered, 'utf8');\n deps.renderer.write(`Wrote ${rendered.length} bytes to ${output}\\n`);\n } else {\n deps.renderer.write(rendered);\n if (!rendered.endsWith('\\n')) deps.renderer.write('\\n');\n }\n return 0;\n};\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { type Config, atomicWrite, color } from '@wrongstack/core';\nimport {\n DefaultSecretVault,\n encryptConfigSecrets,\n} from '@wrongstack/core/security';\nimport { detectProjectFacts, renderAgentsTemplate } from '../../slash-commands/helpers.js';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const initCmd: SubcommandHandler = async (_args, deps) => {\n deps.renderer.write(color.bold('WrongStack init\\n'));\n deps.renderer.writeInfo('Loading provider catalog from models.dev (cached locally)…');\n let providers;\n try {\n providers = await deps.modelsRegistry.listProviders();\n } catch (err) {\n deps.renderer.writeError(\n `Failed to load provider catalog: ${err instanceof Error ? err.message : err}`,\n );\n return 1;\n }\n const detected = providers\n .filter((p: { family: string; envVars: string[] }) => p.family !== 'unsupported')\n .filter((p: { envVars: string[] }) => p.envVars.some((v: string) => process.env[v]));\n const ranked =\n detected.length > 0\n ? detected\n : providers.filter((p: { id: string }) => ['anthropic', 'openai', 'google'].includes(p.id));\n if (detected.length > 0)\n deps.renderer.write(\n `Detected API keys for: ${detected.map((p: { name: string }) => p.name).join(', ')}\\n`,\n );\n const defaultId = ranked[0]?.id ?? 'anthropic';\n const providerId = (await deps.reader.readLine(`Provider [${defaultId}]: `)).trim() || defaultId;\n const provider = await deps.modelsRegistry.getProvider(providerId);\n if (!provider) {\n deps.renderer.writeError(`Provider \"${providerId}\" not found in models.dev catalog.`);\n return 1;\n }\n if (provider.family === 'unsupported') {\n deps.renderer.writeError(\n `Provider \"${providerId}\" uses ${provider.npm} which has no built-in transport. Install a plugin to enable it.`,\n );\n return 1;\n }\n const suggestedModel = (await deps.modelsRegistry.suggestModel(providerId)) ?? '';\n const modelHint = suggestedModel ? ` [${suggestedModel}]` : '';\n const modelId = (await deps.reader.readLine(`Model${modelHint}: `)).trim() || suggestedModel;\n if (!modelId) {\n deps.renderer.writeError('No model selected. Aborting.');\n return 1;\n }\n const envHit = provider.envVars.map((v: string) => process.env[v]).find(Boolean);\n let apiKey = '';\n if (!envHit) {\n apiKey = (\n await deps.reader.readLine(\n `API key (stored in ${deps.paths.globalConfig}; empty = expect ${provider.envVars[0] ?? 'env var'}): `,\n )\n ).trim();\n } else {\n deps.renderer.writeInfo(`Found API key in env (${provider.envVars.join(' / ')}).`);\n }\n await fs.mkdir(deps.paths.globalRoot, { recursive: true });\n const config: Partial<Config> = { version: 1, provider: providerId, model: modelId };\n if (apiKey) config.apiKey = apiKey;\n // Encrypt secret fields before writing to disk.\n const keyFile = path.join(path.dirname(deps.paths.globalConfig), '.key');\n const vault = new DefaultSecretVault({ keyFile });\n const encrypted = encryptConfigSecrets(config, vault);\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(encrypted, null, 2));\n await fs.mkdir(path.join(deps.projectRoot, '.wrongstack'), { recursive: true });\n const agentsFile = path.join(deps.projectRoot, '.wrongstack', 'AGENTS.md');\n try {\n await fs.access(agentsFile);\n } catch {\n const detected = await detectProjectFacts(deps.projectRoot);\n await atomicWrite(agentsFile, renderAgentsTemplate(detected));\n }\n deps.renderer.writeInfo(`Wrote ${deps.paths.globalConfig}`);\n deps.renderer.writeInfo(`Project state lives in ${deps.paths.projectDir}`);\n deps.renderer.writeInfo('Try: wstack \"<task>\" or wstack');\n return 0;\n};\n","import * as fs from 'node:fs/promises';\nimport { allServers, atomicWrite } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nconst BUILT_IN_MCP = allServers();\n\nexport const mcpCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n if (!sub || sub === 'list') {\n const servers = deps.config.mcpServers ?? {};\n if (Object.keys(servers).length === 0) {\n deps.renderer.write('No MCP servers configured.\\n');\n deps.renderer.write('Use `wstack mcp add <name>` or set mcpServers in your config.\\n');\n return 0;\n }\n for (const [name, cfg] of Object.entries(servers)) {\n const status = cfg.enabled === false ? 'disabled' : 'enabled';\n const desc = cfg.description ? ` # ${cfg.description}` : '';\n deps.renderer.write(` ${name.padEnd(20)} ${cfg.transport.padEnd(16)} ${status}${desc}\\n`);\n }\n return 0;\n }\n if (sub === 'add') {\n return addMcpServer(args, deps);\n }\n if (sub === 'remove') {\n const name = args[1];\n if (!name) {\n deps.renderer.writeError('Usage: wstack mcp remove <name>\\n');\n return 1;\n }\n return removeMcpServer(name, deps);\n }\n if (sub === 'restart') {\n deps.renderer.writeWarning('mcp restart is only available in REPL mode.');\n return 0;\n }\n deps.renderer.writeError(`Unknown mcp subcommand: ${sub}`);\n return 1;\n};\n\nasync function addMcpServer(args: string[], deps: SubcommandDeps): Promise<number> {\n const name = args[1]!;\n const enable = args.includes('--enable') || args.includes('-e');\n if (!name) {\n deps.renderer.writeError('Usage: wstack mcp add <name>\\n');\n deps.renderer.write('Available servers:\\n');\n for (const [sname, scfg] of Object.entries(deps.config.mcpServers ?? {}))\n deps.renderer.write(` ${sname.padEnd(20)} ${scfg.description ?? scfg.transport}\\n`);\n if (Object.keys(deps.config.mcpServers ?? {}).length === 0)\n for (const k of Object.keys(BUILT_IN_MCP)) {\n const s = BUILT_IN_MCP[k]!;\n deps.renderer.write(` ${k.padEnd(20)} ${s.description}\\n`);\n }\n deps.renderer.write('\\nRun `wstack mcp add <name> --enable` to enable immediately.\\n');\n return 1;\n }\n const factory = BUILT_IN_MCP[name];\n if (!factory) {\n deps.renderer.writeError(\n `Unknown server \"${name}\". Run \\`wstack mcp add\\` without args to see available servers.\\n`,\n );\n return 1;\n }\n const serverCfg = { ...factory };\n serverCfg.enabled = enable;\n let existing: Record<string, unknown> = {};\n try {\n existing = JSON.parse(await fs.readFile(deps.paths.globalConfig, 'utf8'));\n } catch {\n /* fine */\n }\n const mcpServers =\n (existing.mcpServers as Record<string, Record<string, unknown>> | undefined) ?? {};\n if (mcpServers[name])\n deps.renderer.writeWarning(`Server \"${name}\" already in config. Updating.\\n`);\n mcpServers[name] = serverCfg as unknown as Record<string, unknown>;\n existing.mcpServers = mcpServers;\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(existing, null, 2));\n const verb = enable ? 'Enabled' : 'Added (disabled — set enabled:true to activate)';\n deps.renderer.writeInfo(\n `${verb} \"${name}\" (${serverCfg.transport}). Config written to ${deps.paths.globalConfig}.\\n`,\n );\n return 0;\n}\n\nasync function removeMcpServer(name: string, deps: SubcommandDeps): Promise<number> {\n let existing: Record<string, unknown> = {};\n try {\n existing = JSON.parse(await fs.readFile(deps.paths.globalConfig, 'utf8'));\n } catch {\n deps.renderer.writeError('No config file found.\\n');\n return 1;\n }\n const mcpServers =\n (existing.mcpServers as Record<string, Record<string, unknown>> | undefined) ?? {};\n if (!mcpServers[name]) {\n deps.renderer.writeError(`Server \"${name}\" not in config.\\n`);\n return 1;\n }\n delete mcpServers[name];\n existing.mcpServers = mcpServers;\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(existing, null, 2));\n deps.renderer.writeInfo(`Removed \"${name}\" from config.\\n`);\n return 0;\n}\n","import * as fs from 'node:fs/promises';\nimport { type Config, type PluginConfig, atomicWrite } from '@wrongstack/core';\n\nexport const OFFICIAL_PLUGINS = [\n {\n alias: 'telegram',\n specifier: '@wrongstack/telegram',\n description: 'Telegram bridge for prompts, notifications, and slash commands.',\n },\n {\n alias: 'lsp',\n specifier: '@wrongstack/plug-lsp',\n description: 'Language Server Protocol tools for code intelligence.',\n },\n] as const;\n\nexport interface PluginManagementDeps {\n config: Config;\n configPath: string;\n}\n\nexport interface PluginManagementResult {\n code: number;\n level: 'output' | 'info' | 'error';\n message: string;\n patch?: {\n plugins?: (string | PluginConfig)[];\n features?: Record<string, unknown>;\n };\n restartRequired?: boolean;\n}\n\nconst OFFICIAL_ALIASES = new Map<string, string>(\n OFFICIAL_PLUGINS.flatMap((p) => [\n [p.alias, p.specifier],\n [p.specifier, p.specifier],\n ]),\n);\n\nexport async function runPluginManagementCommand(\n args: string[],\n deps: PluginManagementDeps,\n): Promise<PluginManagementResult> {\n const sub = args[0];\n if (!sub || sub === 'list' || sub === 'status') {\n return {\n code: 0,\n level: 'output',\n message: renderConfiguredPlugins(deps.config),\n };\n }\n if (sub === 'official' || sub === 'officials') {\n return {\n code: 0,\n level: 'output',\n message: renderOfficialPlugins(deps.config),\n };\n }\n if (sub === 'add' || sub === 'install') {\n const spec = args[1];\n if (!spec) {\n return errorResult('Usage: wstack plugin add <specifier|official-alias> [--disabled]');\n }\n return upsertPlugin(\n resolvePluginSpecifier(spec),\n { enabled: !args.includes('--disabled') },\n deps,\n 'Added',\n );\n }\n if (sub === 'remove' || sub === 'rm' || sub === 'uninstall') {\n const spec = args[1];\n if (!spec) {\n return errorResult('Usage: wstack plugin remove <specifier|official-alias>');\n }\n return removePlugin(resolvePluginSpecifier(spec), deps);\n }\n if (sub === 'enable' || sub === 'disable') {\n const spec = args[1];\n if (!spec) {\n return errorResult(`Usage: wstack plugin ${sub} <specifier|official-alias>`);\n }\n return upsertPlugin(\n resolvePluginSpecifier(spec),\n { enabled: sub === 'enable' },\n deps,\n sub === 'enable' ? 'Enabled' : 'Disabled',\n );\n }\n return errorResult(\n `Unknown plugin subcommand: ${sub}\\nUsage: wstack plugin [list|status|official|add|install|remove|enable|disable]`,\n );\n}\n\nexport function resolvePluginSpecifier(input: string): string {\n return OFFICIAL_ALIASES.get(input.toLowerCase()) ?? input;\n}\n\nexport function renderOfficialPlugins(config?: Config): string {\n return [\n 'Official plugins:',\n ...OFFICIAL_PLUGINS.map((p) => {\n const state = config ? officialPluginState(config, p.specifier) : '';\n const status = state ? `${state.padEnd(14)} ` : '';\n return ` ${p.alias.padEnd(12)} ${status}${p.specifier.padEnd(24)} ${p.description}`;\n }),\n '',\n 'Use `wstack plugin add <alias>` or `/plugin install <alias>`.',\n ].join('\\n');\n}\n\nexport function renderConfiguredPlugins(config: Config): string {\n const plugins = config.plugins ?? [];\n if (plugins.length === 0) {\n return [\n 'No plugins configured.',\n 'Use `wstack plugin add <specifier>` or `/plugin install <official-alias>`.',\n ].join('\\n');\n }\n return plugins\n .map((p) => {\n const name = pluginName(p);\n const enabled = typeof p === 'object' && p.enabled === false ? 'disabled' : 'enabled';\n const official = OFFICIAL_PLUGINS.find((entry) => entry.specifier === name);\n const suffix = official ? ` (${official.alias})` : '';\n return ` ${`${name}${suffix}`.padEnd(44)} ${enabled}`;\n })\n .join('\\n');\n}\n\nasync function readConfig(file: string): Promise<Record<string, unknown>> {\n try {\n return JSON.parse(await fs.readFile(file, 'utf8')) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\nfunction pluginName(p: string | PluginConfig): string {\n return typeof p === 'string' ? p : p.name;\n}\n\nfunction pluginEntry(spec: string, enabled: boolean): string | PluginConfig {\n return enabled ? spec : { name: spec, enabled: false };\n}\n\nfunction officialPluginState(\n config: Config,\n spec: string,\n): 'enabled' | 'disabled' | 'not configured' {\n const match = (config.plugins ?? []).find((p) => pluginName(p) === spec);\n if (!match) return 'not configured';\n return typeof match === 'object' && match.enabled === false ? 'disabled' : 'enabled';\n}\n\nasync function upsertPlugin(\n spec: string,\n opts: { enabled: boolean },\n deps: PluginManagementDeps,\n verb: string,\n): Promise<PluginManagementResult> {\n const existing = await readConfig(deps.configPath);\n const plugins = Array.isArray(existing.plugins)\n ? (existing.plugins as Array<string | PluginConfig>)\n : [];\n const idx = plugins.findIndex((p) => pluginName(p) === spec);\n const nextEntry = pluginEntry(spec, opts.enabled);\n if (idx >= 0) plugins[idx] = nextEntry;\n else plugins.push(nextEntry);\n const features = {\n ...(isRecord(deps.config.features) ? deps.config.features : {}),\n ...(isRecord(existing.features) ? existing.features : {}),\n plugins: true,\n };\n existing.plugins = plugins;\n existing.features = features;\n await atomicWrite(deps.configPath, JSON.stringify(existing, null, 2));\n return {\n code: 0,\n level: 'info',\n message: `${verb} \"${spec}\" (${opts.enabled ? 'enabled' : 'disabled'}). Config written to ${deps.configPath}.`,\n patch: { plugins, features },\n restartRequired: true,\n };\n}\n\nasync function removePlugin(\n spec: string,\n deps: PluginManagementDeps,\n): Promise<PluginManagementResult> {\n const existing = await readConfig(deps.configPath);\n const plugins = Array.isArray(existing.plugins)\n ? (existing.plugins as Array<string | PluginConfig>)\n : [];\n const next = plugins.filter((p) => pluginName(p) !== spec);\n if (next.length === plugins.length) {\n return errorResult(`Plugin \"${spec}\" not in config.`);\n }\n existing.plugins = next;\n await atomicWrite(deps.configPath, JSON.stringify(existing, null, 2));\n return {\n code: 0,\n level: 'info',\n message: `Removed \"${spec}\" from config.`,\n patch: { plugins: next },\n restartRequired: true,\n };\n}\n\nfunction errorResult(message: string): PluginManagementResult {\n return { code: 1, level: 'error', message };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value);\n}\n","import { runPluginManagementCommand } from '../../plugin-management.js';\r\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\r\n\r\nexport const pluginCmd: SubcommandHandler = async (args, deps) => {\r\n const result = await runPluginManagementCommand(args, {\r\n config: deps.config,\r\n configPath: deps.paths.globalConfig,\r\n });\r\n if (result.level === 'error') {\r\n deps.renderer.writeError(`${result.message}\\n`);\r\n } else if (result.level === 'info') {\r\n deps.renderer.writeInfo(`${result.message}\\n`);\r\n } else {\r\n deps.renderer.write(`${result.message}\\n`);\r\n }\r\n return result.code;\r\n};\r\n\r\nexport const usageCmd: SubcommandHandler = async (_args, deps) => {\r\n if (!deps.sessionStore) return 0;\r\n const list = await deps.sessionStore.list(100);\r\n let totalIn = 0;\r\n for (const s of list) totalIn += s.tokenTotal;\r\n deps.renderer.write(`Sessions: ${list.length} total tokens: ${totalIn}\\n`);\r\n return 0;\r\n};\r\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const projectsCmd: SubcommandHandler = async (_args, deps) => {\n const projectsRoot = path.join(deps.paths.globalRoot, 'projects');\n try {\n const entries = await fs.readdir(projectsRoot);\n if (entries.length === 0) {\n deps.renderer.write('No projects tracked.\\n');\n return 0;\n }\n for (const hash of entries) {\n try {\n const meta = JSON.parse(\n await fs.readFile(path.join(projectsRoot, hash, 'meta.json'), 'utf8'),\n ) as { root?: string; lastSeen?: string };\n deps.renderer.write(\n ` ${color.dim(hash)} ${color.dim(meta.lastSeen ?? '')} ${meta.root ?? '?'}\\n`,\n );\n } catch {\n deps.renderer.write(` ${color.dim(hash)} ${color.dim('(no meta)')}\\n`);\n }\n }\n return 0;\n } catch {\n deps.renderer.write('No projects directory.\\n');\n return 0;\n }\n};\n","import { type WireFamily, color } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const providersCmd: SubcommandHandler = async (args, deps) => {\n const showAll = args.includes('--all');\n const showUnsupported = args.includes('--unsupported');\n try {\n const all = await deps.modelsRegistry.listProviders();\n const byFamily: Record<WireFamily, typeof all> = {\n anthropic: [],\n openai: [],\n 'openai-compatible': [],\n google: [],\n unsupported: [],\n };\n for (const p of all) byFamily[p.family].push(p);\n const families: WireFamily[] = showUnsupported\n ? ['unsupported']\n : showAll\n ? ['anthropic', 'openai', 'google', 'openai-compatible', 'unsupported']\n : ['anthropic', 'openai', 'google', 'openai-compatible'];\n for (const family of families) {\n const list = byFamily[family];\n if (list.length === 0) continue;\n deps.renderer.write(`\\n${color.bold(family)} (${list.length}):\\n`);\n for (const p of list) {\n const envFound = p.envVars.some((v) => process.env[v]);\n const marker = envFound ? color.green('●') : color.dim('○');\n const envHint = p.envVars[0] ? color.dim(`[${p.envVars[0]}]`) : '';\n const note = family === 'unsupported' ? color.dim('(needs plugin)') : '';\n deps.renderer.write(\n ` ${marker} ${p.id.padEnd(20)} ${p.name.padEnd(28)} ${envHint} ${note}\\n`,\n );\n }\n }\n deps.renderer.write(\n `\\n${color.dim(`Current: ${deps.config.provider ?? '<unset>'} / ${deps.config.model ?? '<unset>'}. Use --all to include unsupported families.`)}\\n`,\n );\n return 0;\n } catch (err) {\n deps.renderer.writeError(\n `Failed to list providers: ${err instanceof Error ? err.message : err}`,\n );\n return 1;\n }\n};\n\nexport const modelsCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n if (sub === 'refresh') {\n deps.renderer.writeInfo('Refreshing models.dev cache…');\n try {\n const payload = await deps.modelsRegistry.refresh();\n deps.renderer.writeInfo(\n `Cached ${Object.keys(payload).length} providers to ${deps.paths.modelsCache}`,\n );\n return 0;\n } catch (err) {\n deps.renderer.writeError(`Refresh failed: ${err instanceof Error ? err.message : err}`);\n return 1;\n }\n }\n const providerId = sub ?? deps.config.provider;\n if (!providerId) {\n deps.renderer.writeError('Usage: wstack models <provider> | refresh');\n return 1;\n }\n let lookupId = providerId;\n const savedAlias = deps.config.providers?.[providerId];\n if (savedAlias?.type && savedAlias.type !== providerId) lookupId = savedAlias.type;\n const provider = await deps.modelsRegistry.getProvider(lookupId);\n if (!provider) {\n deps.renderer.writeError(\n lookupId !== providerId\n ? `Alias \"${providerId}\" points at catalog id \"${lookupId}\" which is not in the cache.`\n : `Provider \"${providerId}\" not in catalog.`,\n );\n return 1;\n }\n if (lookupId !== providerId)\n deps.renderer.write(\n color.dim(`(showing catalog models for \"${lookupId}\" via alias \"${providerId}\")\\n`),\n );\n deps.renderer.write(`${color.bold(provider.name)} ${color.dim(`(${provider.id})`)}\\n`);\n if (provider.doc) deps.renderer.write(color.dim(`Docs: ${provider.doc}\\n`));\n const userModels = deps.config.providers?.[providerId]?.models;\n const catalogById = new Map(provider.models.map((m) => [m.id, m]));\n const sorted =\n userModels && userModels.length > 0\n ? userModels.map((id) => catalogById.get(id) ?? { id, name: id })\n : [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n if (userModels && userModels.length > 0)\n deps.renderer.write(color.dim(`(${userModels.length} model(s) from your saved config)\\n`));\n for (const m of sorted) {\n const caps: string[] = [];\n if ('tool_call' in m && m.tool_call) caps.push('tools');\n if ('reasoning' in m && m.reasoning) caps.push('reasoning');\n if ('modalities' in m && m.modalities?.input?.includes('image')) caps.push('vision');\n const ctx = 'limit' in m && m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k` : '?';\n const cost =\n 'cost' in m && m.cost?.input !== undefined ? `$${m.cost.input}/$${m.cost.output ?? '?'}` : '';\n deps.renderer.write(\n ` ${m.id.padEnd(40)} ${color.dim(ctx.padStart(6))} ${color.dim(cost.padEnd(14))} ${color.dim(caps.join(','))}\\n`,\n );\n }\n const age = await deps.modelsRegistry.ageSeconds();\n deps.renderer.write(\n color.dim(\n `\\nCache age: ${isFinite(age) ? `${Math.round(age / 60)}m` : 'never fetched'}. Run \\`wstack models refresh\\` to update.\\n`,\n ),\n );\n return 0;\n};\n","export function redactKeys(obj: unknown): unknown {\n if (!obj || typeof obj !== 'object') return obj;\n if (Array.isArray(obj)) return obj.map(redactKeys);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {\n if (/api.?key|secret|token|pass/i.test(k) && typeof v === 'string' && v.length > 0)\n out[k] = '[REDACTED]';\n else out[k] = redactKeys(v);\n }\n return out;\n}\n","import { color } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\nimport { redactKeys } from './helpers.js';\n\nexport const sessionsCmd: SubcommandHandler = async (_args, deps) => {\n if (!deps.sessionStore) {\n deps.renderer.writeError('No session store available.');\n return 1;\n }\n const list = await deps.sessionStore.list(20);\n if (list.length === 0) {\n deps.renderer.write('No sessions found.\\n');\n return 0;\n }\n for (const s of list)\n deps.renderer.write(\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}\\n`,\n );\n return 0;\n};\n\nexport const configCmd: SubcommandHandler = async (args, deps) => {\n const sub = args[0];\n if (!sub || sub === 'show') {\n deps.renderer.write(JSON.stringify(redactKeys(deps.config), null, 2) + '\\n');\n return 0;\n }\n if (sub === 'edit') {\n const editor = process.env['EDITOR'] ?? 'vi';\n deps.renderer.write(`Run: ${editor} ${deps.paths.globalConfig}\\n`);\n return 0;\n }\n deps.renderer.writeError(`Unknown config subcommand: ${sub}`);\n return 1;\n};\n","import * as path from 'node:path';\nimport {\n DefaultSessionRewinder,\n DefaultSessionStore,\n type CheckpointInfo,\n color,\n resolveWstackPaths,\n} from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\ninterface RewindFlags {\n all?: boolean;\n last?: string;\n to?: string;\n list?: boolean;\n resume?: boolean;\n}\n\nfunction parseRewindFlags(args: string[]): RewindFlags {\n const flags: RewindFlags = {};\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a === '--all') flags.all = true;\n else if (a === '--last') flags.last = args[++i] ?? '1';\n else if (a === '--to') flags.to = args[++i] ?? '';\n else if (a === '--list') flags.list = true;\n else if (a === '--resume') flags.resume = true;\n }\n return flags;\n}\n\nexport const rewindCmd: SubcommandHandler = async (args, deps) => {\n const flags = parseRewindFlags(args);\n\n // Use global sessions path: ~/.wrongstack/sessions/\n const wpaths = resolveWstackPaths({ projectRoot: deps.projectRoot });\n const sessionsDir = path.join(wpaths.globalRoot, 'sessions');\n\n const rewind = new DefaultSessionRewinder(sessionsDir);\n\n // Get session ID — either from --to argument or latest session\n let sessionId = args.find((a) => !a.startsWith('--'));\n if (!sessionId) {\n if (!deps.sessionStore) {\n deps.renderer.writeError('No session store available.');\n return 1;\n }\n const sessions = await deps.sessionStore.list(1);\n if (sessions.length === 0) {\n deps.renderer.writeError('No sessions found.');\n return 1;\n }\n sessionId = sessions[0]!.id;\n }\n\n // List checkpoints\n if (flags.list) {\n deps.renderer.write(`Session: ${color.bold(sessionId)}\\n\\n`);\n const checkpoints = await rewind.listCheckpoints(sessionId);\n if (checkpoints.length === 0) {\n deps.renderer.write('No checkpoints in this session.\\n');\n return 0;\n }\n for (const cp of checkpoints) {\n deps.renderer.write(\n ` [${cp.promptIndex}] ${color.dim(cp.ts)} ${cp.promptPreview}${cp.fileCount > 0 ? color.dim(` (${cp.fileCount} file${cp.fileCount === 1 ? '' : 's'})`) : ''}\\n`,\n );\n }\n return 0;\n }\n\n // Perform rewind\n try {\n let result;\n if (flags.all) {\n deps.renderer.write('Rewinding to session start...\\n');\n result = await rewind.rewindToStart(sessionId);\n } else if (flags.last) {\n const n = parseInt(flags.last, 10);\n if (isNaN(n) || n < 1) {\n deps.renderer.writeError('--last requires a positive number');\n return 1;\n }\n deps.renderer.write(`Rewinding last ${n} prompt(s)...\\n`);\n result = await rewind.rewindLastN(sessionId, n);\n } else if (flags.to) {\n const idx = parseInt(flags.to, 10);\n if (isNaN(idx) || idx < 0) {\n deps.renderer.writeError('--to requires a non-negative number');\n return 1;\n }\n deps.renderer.write(`Rewinding to checkpoint ${idx}...\\n`);\n result = await rewind.rewindToCheckpoint(sessionId, idx);\n } else {\n deps.renderer.write('Usage: ws rewind --all | --last N | --to <index> [--list] [--resume]\\n');\n deps.renderer.write(' --all Rewind to session start\\n');\n deps.renderer.write(' --last N Rewind last N prompts\\n');\n deps.renderer.write(' --to N Rewind to checkpoint N\\n');\n deps.renderer.write(' --list List checkpoints\\n');\n deps.renderer.write(' --resume After rewind, truncate session history at checkpoint\\n');\n return 1;\n }\n\n if (result.revertedFiles.length === 0) {\n deps.renderer.write('No files to revert.\\n');\n if (flags.resume) {\n // Still truncate even if no files changed\n const store = new DefaultSessionStore({ dir: sessionsDir });\n const resumed = await store.resume(sessionId);\n const toIdx = (result as unknown as { toPromptIndex: number }).toPromptIndex;\n await (resumed.writer as unknown as { truncateToCheckpoint(n: number): Promise<number> }).truncateToCheckpoint(toIdx);\n await resumed.writer.close();\n deps.renderer.write(` ${color.green('✓')} Session truncated at checkpoint ${toIdx}\\n`);\n }\n return 0;\n }\n\n deps.renderer.write(`\\nReverted ${result.revertedFiles.length} file(s):\\n`);\n for (const f of result.revertedFiles) {\n deps.renderer.write(` ${color.green('✓')} ${f}\\n`);\n }\n\n if (flags.resume) {\n const store = new DefaultSessionStore({ dir: sessionsDir });\n const resumed = await store.resume(sessionId);\n const toIdx = (result as unknown as { toPromptIndex: number }).toPromptIndex;\n const removed = await (resumed.writer as unknown as { truncateToCheckpoint(n: number): Promise<number> }).truncateToCheckpoint(toIdx);\n await resumed.writer.close();\n deps.renderer.write(`\\n ${color.green('✓')} Session truncated — ${removed} event(s) removed\\n`);\n }\n\n if (result.errors.length > 0) {\n deps.renderer.write(`\\n${result.errors.length} error(s):\\n`);\n for (const e of result.errors) {\n deps.renderer.write(` ${color.red('✗')} ${e}\\n`);\n }\n return 1;\n }\n return 0;\n } catch (err) {\n deps.renderer.writeError(err instanceof Error ? err.message : String(err));\n return 1;\n }\n};","import { color } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\nexport const toolsCmd: SubcommandHandler = async (_args, deps) => {\n const reg = deps.toolRegistry;\n if (!reg) return 0;\n for (const { tool, owner } of reg.listWithOwner())\n deps.renderer.write(\n ` ${tool.name.padEnd(28)} ${color.dim(`[${owner}]`)} ${tool.permission}\\n`,\n );\n return 0;\n};\n\nexport const skillsCmd: SubcommandHandler = async (_args, deps) => {\n if (!deps.skillLoader) return 0;\n const list = await deps.skillLoader.list();\n for (const s of list)\n deps.renderer.write(\n ` ${s.name.padEnd(24)} ${color.dim(`[${s.source}]`)} ${s.description.split('\\n')[0]}\\n`,\n );\n return 0;\n};\n","import * as os from 'node:os';\r\nimport { color } from '@wrongstack/core';\r\nimport { API_VERSION, CLI_VERSION } from '../../version.js';\r\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\r\n\r\nexport const versionCmd: SubcommandHandler = async (_args, deps) => {\r\n deps.renderer.write(\r\n `WrongStack ${CLI_VERSION} (apiVersion ${API_VERSION}, node ${process.version}, ${os.platform()})\\n`,\r\n );\r\n return 0;\r\n};\r\n\r\nexport const helpCmd: SubcommandHandler = async (_args, deps) => {\r\n const lines = [\r\n color.bold('WrongStack — usage'),\r\n '',\r\n ' wstack Start REPL',\r\n ' wstack \"<task>\" Run task and exit',\r\n ' wstack resume [<id>] Resume a session',\r\n ' wstack sessions List recent sessions',\r\n ' wstack init Pick provider + model from models.dev',\r\n ' wstack auth Interactive key manager (list/add/update/delete)',\r\n ' wstack config [show|edit] Show or edit effective config',\r\n ' wstack tools List registered tools',\r\n ' wstack skills List discovered skills',\r\n ' wstack providers [--all] List providers from models.dev',\r\n ' wstack models [<provider>] List models',\r\n ' wstack models refresh Force-refresh cache',\r\n ' wstack mcp [list] List MCP servers',\r\n ' wstack plugin [list|status|official|install|add|remove|enable|disable] Manage plugins',\r\n ' wstack projects List tracked projects',\r\n ' wstack diag Full diagnostics',\r\n ' wstack doctor Health checks',\r\n ' wstack export <id> [opts] Render a session',\r\n ' wstack usage Token + cost summary',\r\n ' wstack version Print version',\r\n ];\r\n deps.renderer.write(lines.join('\\n') + '\\n');\r\n return 0;\r\n};\r\n","import type {\r\n Config,\r\n ModelsRegistry,\r\n SecretVault,\r\n SessionStore,\r\n SkillLoader,\r\n ToolRegistry,\r\n WstackPaths,\r\n} from '@wrongstack/core';\r\nimport type { ReadlineInputReader } from '../input-reader.js';\r\nimport type { TerminalRenderer } from '../renderer.js';\r\n\r\nexport type SubcommandHandler = (args: string[], deps: SubcommandDeps) => Promise<number>;\r\n\r\nexport interface SubcommandDeps {\r\n config: Config;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n sessionStore?: SessionStore;\r\n skillLoader?: SkillLoader;\r\n toolRegistry?: ToolRegistry;\r\n modelsRegistry: ModelsRegistry;\r\n paths: WstackPaths;\r\n vault: SecretVault;\r\n cwd: string;\r\n projectRoot: string;\r\n userHome: string;\r\n}\r\n\r\nimport { authCmd } from './handlers/auth.js';\r\nimport { diagCmd, doctorCmd } from './handlers/diag-doctor.js';\r\nimport { exportCmd } from './handlers/export.js';\r\nimport { initCmd } from './handlers/init.js';\r\nimport { mcpCmd } from './handlers/mcp.js';\r\nimport { pluginCmd, usageCmd } from './handlers/plugin-usage.js';\r\nimport { projectsCmd } from './handlers/projects.js';\r\nimport { modelsCmd, providersCmd } from './handlers/providers-models.js';\r\nimport { configCmd, sessionsCmd } from './handlers/sessions-config.js';\r\nimport { rewindCmd } from './handlers/rewind.js';\r\nimport { skillsCmd, toolsCmd } from './handlers/tools-skills.js';\r\nimport { helpCmd, versionCmd } from './handlers/version-help.js';\r\n\r\nexport const subcommands: Record<string, SubcommandHandler> = {\r\n init: initCmd,\r\n auth: authCmd,\r\n sessions: sessionsCmd,\r\n config: configCmd,\r\n rewind: rewindCmd,\r\n tools: toolsCmd,\r\n skills: skillsCmd,\r\n providers: providersCmd,\r\n models: modelsCmd,\r\n mcp: mcpCmd,\r\n plugin: pluginCmd,\r\n plugins: pluginCmd,\r\n diag: diagCmd,\r\n doctor: doctorCmd,\r\n export: exportCmd,\r\n usage: usageCmd,\r\n version: versionCmd,\r\n help: helpCmd,\r\n projects: projectsCmd,\r\n};\r\n","/**\n * Format a token count for human-readable display.\n * 999 → \"999\"\n * 1_200 → \"1.2k\"\n * 12_000 → \"12k\"\n * 1_500_000 → \"1.5M\"\n */\nexport function 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\n/**\n * Return a new frozen config object with the given patch applied.\n * Config objects are frozen by the config loader — direct mutation\n * silently fails at runtime. This helper spreads + re-freezes safely.\n */\nexport function patchConfig<T extends object>(base: T, patch: Partial<T>): T {\n return Object.freeze({ ...base, ...patch }) as T;\n}\n\n/**\n * Human-readable duration: 999 → \"999ms\", 12_500 → \"12.5s\",\n * 160_016 → \"2m40s\", 7_200_000 → \"2h0m\". Used by `/agents` and\n * `/fleet status` so users don't have to read \"160016ms\" and do the\n * conversion in their head.\n */\nexport function fmtDuration(ms: number): string {\n if (ms < 1000) return `${ms}ms`;\n const s = ms / 1000;\n if (s < 60) return `${s.toFixed(s < 10 ? 1 : 0)}s`;\n const m = Math.floor(s / 60);\n const remSec = Math.round(s - m * 60);\n if (m < 60) return remSec === 0 ? `${m}m` : `${m}m${remSec}s`;\n const h = Math.floor(m / 60);\n const remMin = m - h * 60;\n return `${h}h${remMin}m`;\n}\n\n/**\n * Render a completed TaskResult into a single line for `/agents` and\n * `/fleet status`. Distinguishes all four terminal statuses with\n * separate icons + colors so users can tell a timeout from a real\n * failure at a glance, and surfaces both the failure kind (e.g.\n * `provider_rate_limit`, `tool_failed`) and a truncated error tail\n * (previously dropped on the floor).\n *\n * Accepts either the structured `SubagentError` envelope (current) or\n * a legacy string error — the field shape is widened to keep older\n * callers compiling while migrations roll through.\n *\n * The caller passes the color helper (it lives in @wrongstack/core)\n * to avoid a circular import from this utility module.\n */\nexport function fmtTaskResultLine(\n r: {\n status: 'success' | 'failed' | 'timeout' | 'stopped';\n error?:\n | string\n | { kind?: string; message?: string; retryable?: boolean; backoffMs?: number };\n iterations: number;\n toolCalls: number;\n durationMs: number;\n },\n color: {\n green(s: string): string;\n red(s: string): string;\n yellow(s: string): string;\n dim(s: string): string;\n },\n): { mark: string; stats: string; tail: string } {\n const stats = `${r.iterations}it ${r.toolCalls}tc ${fmtDuration(r.durationMs)}`;\n // Error tails are unbounded provider strings — collapse whitespace and\n // truncate so a 2KB stack trace can't blow up the chat line. Lift the\n // structured `kind` chip in front of the tail so the user reads\n // `✗ failed [provider_rate_limit] — server overloaded` instead of\n // raw verbose body.\n const errMsg = typeof r.error === 'string' ? r.error : r.error?.message;\n const errKind = typeof r.error === 'object' ? r.error?.kind : undefined;\n const errTail = errMsg\n ? ` — ${errMsg.replace(/\\s+/g, ' ').slice(0, 80)}${errMsg.length > 80 ? '…' : ''}`\n : '';\n const errKindChip = errKind ? color.dim(` [${errKind}]`) : '';\n const errSnip = errMsg || errKind ? `${errKindChip}${color.dim(errTail)}` : '';\n switch (r.status) {\n case 'success':\n return { mark: color.green('✓'), stats, tail: '' };\n case 'timeout':\n return { mark: color.yellow('⏱'), stats: `${color.yellow('timeout')} ${stats}`, tail: errSnip };\n case 'stopped':\n return { mark: color.dim('⊘'), stats: `${color.dim('stopped')} ${stats}`, tail: errSnip };\n case 'failed':\n return { mark: color.red('✗'), stats: `${color.red('failed')} ${stats}`, tail: errSnip };\n }\n}\n","import { createRequire } from 'node:module';\nimport * as path from 'node:path';\n/**\n * Boot phase — everything before the DI container wiring.\n * Extracted from index.ts so main() focuses on wire → execute.\n */\nimport {\n type Config,\n DefaultLogger,\n DefaultModelsRegistry,\n DefaultSessionStore,\n DefaultSkillLoader,\n type ModelsRegistry,\n type SecretVault,\n ToolRegistry,\n type WstackPaths,\n TOKENS,\n} from '@wrongstack/core';\nimport { builtinToolsPack } from '@wrongstack/tools';\nimport { parseArgs } from './arg-parser.js';\nimport { bootConfig } from './boot-config.js';\nimport { ReadlineInputReader } from './input-reader.js';\nimport { runPicker, saveToGlobalConfig } from './picker.js';\nimport { runLaunchPrompts, runProjectCheck } from './pre-launch.js';\nimport { TerminalRenderer } from './renderer.js';\nimport { subcommands } from './subcommands/index.js';\nimport { patchConfig } from './utils.js';\nimport { createDefaultContainer } from '@wrongstack/runtime';\n\nexport interface BootContext {\n config: Config;\n vault: SecretVault;\n wpaths: WstackPaths;\n cwd: string;\n projectRoot: string;\n userHome: string;\n flags: Record<string, string | boolean>;\n positional: string[];\n modelsRegistry: ModelsRegistry;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n logger: DefaultLogger;\n}\n\nfunction resolveBundledSkillsDir(): string | undefined {\n try {\n const req = createRequire(import.meta.url);\n const corePkg = req.resolve('@wrongstack/core/package.json');\n return path.join(path.dirname(corePkg), 'skills');\n } catch {\n return undefined;\n }\n}\n\n/**\n * Boot the CLI: parse args, load config, handle subcommand dispatch\n * (early exit), run interactive prompts (project check, provider picker,\n * mode/yolo). Returns a BootContext for the wiring phase, or an exit\n * code when the run should stop here.\n */\nexport async function boot(argv: string[]): Promise<BootContext | number> {\n const { flags, positional } = parseArgs(argv);\n\n // `wstack resume <id>` is sugar for `wstack --resume <id>`.\n if (positional[0] === 'resume' && positional[1] && !subcommands['__noop_resume_marker']) {\n flags['resume'] = positional[1];\n positional.splice(0, 2);\n }\n\n let bootResult;\n try {\n bootResult = await bootConfig(flags);\n } catch (err) {\n process.stderr.write(`Config error: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 2;\n }\n const { paths, config: _config, vault } = bootResult;\n let config = _config;\n const { cwd, projectRoot, userHome, wpaths, pathResolver } = paths;\n void pathResolver; // used by callers via container binding\n\n const logger = new DefaultLogger({ level: config.log.level, file: wpaths.logFile });\n const renderer = new TerminalRenderer();\n const reader = new ReadlineInputReader({ historyFile: wpaths.historyFile });\n const modelsRegistry = new DefaultModelsRegistry({\n cacheFile: wpaths.modelsCache,\n ttlSeconds: 24 * 3600,\n });\n\n // Quick path: subcommand dispatch\n const first = positional[0];\n if (first && subcommands[first]) {\n // Create container to get the SAME skillLoader instance that the main\n // interactive CLI uses. This ensures cache invalidation after\n // /skill-install propagates correctly to /skill and other commands.\n const container = createDefaultContainer({\n config,\n wpaths,\n logger,\n modelsRegistry,\n bundledSkillsDir: config.features.skills ? resolveBundledSkillsDir() : undefined,\n });\n const sessionStore = container.resolve(TOKENS.SessionStore);\n const skillLoader = container.resolve(TOKENS.SkillLoader);\n const toolRegistryForSubcmd = new ToolRegistry();\n toolRegistryForSubcmd.registerAllOrThrow(\n [...(builtinToolsPack.tools ?? [])],\n builtinToolsPack.name,\n );\n const code = await subcommands[first]!(positional.slice(1), {\n config,\n renderer,\n reader,\n sessionStore,\n skillLoader,\n toolRegistry: toolRegistryForSubcmd,\n modelsRegistry,\n paths: wpaths,\n vault,\n cwd,\n projectRoot,\n userHome,\n });\n await reader.close();\n return code;\n }\n\n const isSingleShot = positional.length > 0 || typeof flags['prompt'] === 'string';\n const isInteractiveTTY = !!process.stdin.isTTY && !isSingleShot;\n\n if (isInteractiveTTY) {\n const cont = await runProjectCheck({ projectRoot, renderer, reader });\n if (!cont) {\n await reader.close();\n return 0;\n }\n }\n\n // Provider + model selection\n const providerFlag = typeof flags['provider'] === 'string' ? flags['provider'] : undefined;\n const modelFlag = typeof flags['model'] === 'string' ? flags['model'] : undefined;\n if (!(!!providerFlag && !!modelFlag)) {\n if (process.stdin.isTTY) {\n const picked = await runPicker({\n modelsRegistry,\n renderer,\n reader,\n config,\n defaultProvider: providerFlag ?? config.provider,\n defaultModel: modelFlag ?? config.model,\n });\n if (!picked) {\n if (!config.provider || !config.model) {\n await reader.close();\n return 2;\n }\n } else {\n const prevProvider = config.provider;\n const prevModel = config.model;\n config = patchConfig(config, { provider: picked.provider, model: picked.model });\n if (picked.provider !== prevProvider || picked.model !== prevModel) {\n const saved = await saveToGlobalConfig(\n wpaths.globalConfig,\n picked.provider,\n picked.model,\n );\n if (saved) renderer.writeInfo(`Saved ${picked.provider}/${picked.model} as default.\\n`);\n }\n }\n } else if (!config.provider || !config.model) {\n process.stderr.write(\n 'No provider or model configured. Run `wrongstack init` first, or pass --provider <id> --model <id>.\\n',\n );\n await reader.close();\n return 2;\n }\n }\n\n // Mode + YOLO prompts\n if (isInteractiveTTY) {\n let modePinned: 'tui' | 'repl' | undefined;\n if (flags['no-tui']) modePinned = 'repl';\n else if (flags['tui']) modePinned = 'tui';\n const yoloPinned: boolean | undefined = flags['yolo'] === true ? true : undefined;\n const choices = await runLaunchPrompts({ renderer, reader, modePinned, yoloPinned });\n if (choices.mode === 'tui') {\n flags['tui'] = true;\n flags['no-tui'] = false;\n } else {\n flags['tui'] = false;\n flags['no-tui'] = true;\n }\n if (choices.yolo !== config.yolo) config = patchConfig(config, { yolo: choices.yolo });\n }\n\n return {\n config,\n vault,\n wpaths,\n cwd,\n projectRoot,\n userHome,\n flags,\n positional,\n modelsRegistry,\n renderer,\n reader,\n logger,\n };\n}\n","import type { Agent, AttachmentStore, SlashCommandRegistry, TokenCounter } from '@wrongstack/core';\nimport { InputBuilder, color } from '@wrongstack/core';\nimport {\n readClipboardImage,\n routeImagesForModel,\n type VisionAdapters,\n} from '@wrongstack/runtime';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport type { TerminalRenderer } from './renderer.js';\nimport { getActiveSDDContext, trySaveSpecFromAIOutput, trySaveTasksFromAIOutput, getTaskListText, getTaskProgress, autoDetectTaskCompletion, getActiveSDDPhase, trySaveImplementationPlan } from './slash-commands/sdd.js';\nimport { theme } from './theme.js';\nimport { fmtTok } from './utils.js';\nimport { CLI_VERSION } from './version.js';\n\nexport interface ReplOptions {\n agent: Agent;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n slashRegistry: SlashCommandRegistry;\n attachments: AttachmentStore;\n banner?: boolean;\n tokenCounter?: TokenCounter;\n visionAdapters?: VisionAdapters;\n /** Autonomy mode state getter. */\n getAutonomy?: () => import('./slash-commands/autonomy.js').AutonomyMode;\n /** Model-specific max context window (tokens). Used for the context bar in turn summaries. */\n effectiveMaxContext?: number;\n /** Project / folder name shown in the banner. Usually `path.basename(projectRoot)`. */\n projectName?: string;\n /** Resolve current model vision support. Falls back to provider capability when omitted. */\n supportsVision?: () => boolean | Promise<boolean>;\n /** Skill loader for the skill generator wizard. */\n skillLoader?: import('@wrongstack/core').SkillLoader;\n}\n\nexport async function runRepl(opts: ReplOptions): Promise<number> {\n if (opts.banner !== false) printBanner(opts.renderer, opts.projectName);\n\n // Per-iteration abort controller — assigned each loop so a Ctrl+C that\n // cancels turn N doesn't leak into turn N+1. `activeCtrl` is updated\n // before each agent.run so the SIGINT handler can target it.\n let activeCtrl: AbortController | undefined;\n let interrupts = 0;\n const onSigint = () => {\n interrupts++;\n if (interrupts >= 2) {\n opts.renderer.writeWarning('Exiting.');\n process.exit(130);\n }\n if (activeCtrl) {\n activeCtrl.abort();\n opts.renderer.writeWarning('Iteration cancelled. Press Ctrl+C again to exit.');\n } else {\n opts.renderer.writeWarning('Press Ctrl+C again to exit.');\n }\n };\n process.on('SIGINT', onSigint);\n\n const builder = new InputBuilder({ store: opts.attachments });\n\n // Wrap the entire loop so SIGINT and reader teardown run on every exit\n // path — exceptions, EOF, breakouts. Previously a throw between `on`\n // and the final `off` left the listener installed across REPL restarts.\n try {\n for (;;) {\n let raw: string;\n try {\n raw = await readPossiblyMultiline(opts);\n } catch {\n break; // EOF (Ctrl+D)\n }\n const trimmed = raw.trim();\n if (!trimmed) {\n interrupts = 0;\n continue;\n }\n interrupts = 0;\n\n if (trimmed === '/image' || trimmed === '/paste-image' || raw === '\\x1bv') {\n await pasteClipboardImage(builder, opts);\n continue;\n }\n\n if (trimmed.startsWith('/')) {\n try {\n const res = await opts.slashRegistry.dispatch(trimmed, opts.agent.ctx);\n if (res?.message) opts.renderer.write(`${res.message}\\n`);\n if (res?.exit) break;\n\n // ── runText: Auto-trigger AI after slash command ─────────────────\n // When a slash command returns runText (e.g. /sdd new, /sdd approve),\n // automatically send it to the AI agent so the conversation continues\n // without the user having to type anything extra.\n if (res?.runText) {\n const runBlocks = [{ type: 'text' as const, text: res.runText }];\n const runCtrl = new AbortController();\n activeCtrl = runCtrl;\n try {\n const runResult = await opts.agent.run(runBlocks, { signal: runCtrl.signal });\n if (runResult.status === 'done' && runResult.finalText) {\n // SDD auto-detection: spec, implementation plan, tasks\n const specSaved = await trySaveSpecFromAIOutput(runResult.finalText);\n if (specSaved) {\n opts.renderer.write(\n `\\n${color.cyan(' ✓ Spec detected and saved! Use /sdd approve to continue.')}\\n`,\n );\n }\n const planSaved = trySaveImplementationPlan(runResult.finalText);\n if (planSaved) {\n opts.renderer.write(\n `\\n${color.cyan(' ✓ Implementation plan saved!')}\\n`,\n );\n }\n const tasksSaved = await trySaveTasksFromAIOutput(runResult.finalText);\n if (tasksSaved) {\n const progress = getTaskProgress();\n const count = progress?.total ?? 0;\n opts.renderer.write(\n `\\n${color.cyan(` ✓ ${count} tasks detected and saved! Use /sdd approve to execute.`)}\\n`,\n );\n }\n // Auto-detect task completion during execution phase\n const sddPhase = getActiveSDDPhase();\n if (sddPhase === 'executing') {\n const autoCompleted = autoDetectTaskCompletion(runResult.finalText);\n if (autoCompleted > 0) {\n const progress = getTaskProgress();\n if (progress) {\n opts.renderer.write(\n `\\n${color.cyan(` ✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`)}\\n`,\n );\n }\n }\n }\n }\n } catch (runErr) {\n // Non-fatal — user can continue manually\n opts.renderer.writeWarning('AI auto-trigger failed. You can continue manually.');\n }\n }\n } catch (err) {\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\n }\n continue;\n }\n\n // Route through InputBuilder so big pastes collapse to placeholders.\n const ph = await builder.appendPaste(raw);\n if (ph) {\n const lineCount = raw.split('\\n').length;\n opts.renderer.write(color.dim(` ↳ ${ph} (${lineCount} lines)\\n`));\n }\n const blocks = await builder.submit();\n\n // ── SDD Session Integration ─────────────────────────────────────────\n // When an SDD session is active, inject the session context so the AI\n // knows to ask questions, generate specs, etc.\n const sddContext = getActiveSDDContext();\n const taskList = getTaskListText();\n const taskProgress = getTaskProgress();\n const sddPhase = getActiveSDDPhase();\n\n let sddPrefix = '';\n if (sddContext) {\n sddPrefix = `[SDD SESSION ACTIVE]\\n${sddContext}`;\n if (taskList) {\n sddPrefix += `\\n\\n**Current Task List:**\\n${taskList}`;\n }\n if (taskProgress && taskProgress.total > 0) {\n sddPrefix += `\\n**Progress:** ${taskProgress.completed}/${taskProgress.total} (${taskProgress.percent}%)`;\n }\n if (sddPhase === 'executing' && taskProgress && taskProgress.percent === 100) {\n sddPrefix += '\\n\\n**All tasks completed! Provide a summary of everything implemented.**';\n }\n sddPrefix += '\\n\\n---\\nUser message:\\n';\n }\n\n const effectiveBlocks = sddPrefix\n ? [\n { type: 'text' as const, text: sddPrefix },\n ...blocks,\n ]\n : blocks;\n\n const runCtrl = new AbortController();\n activeCtrl = runCtrl;\n try {\n const startedAt = Date.now();\n const before = opts.tokenCounter?.total();\n const costBefore = opts.tokenCounter?.estimateCost().total ?? 0;\n const routed = effectiveBlocks.some((block) => block.type === 'image')\n ? await routeImagesForModel(effectiveBlocks, {\n supportsVision: opts.supportsVision\n ? await opts.supportsVision()\n : opts.agent.ctx.provider.capabilities.vision,\n adapters: opts.visionAdapters ?? [],\n ctx: opts.agent.ctx,\n signal: runCtrl.signal,\n providerId: opts.agent.ctx.provider.id,\n model: opts.agent.ctx.model,\n })\n : { blocks: effectiveBlocks, route: 'none' as const, convertedImages: 0 };\n if (routed.route === 'adapter') {\n opts.renderer.write(\n color.dim(\n ` ↳ image analyzed via ${routed.adapterName ?? 'vision adapter'} (${routed.convertedImages} image${routed.convertedImages === 1 ? '' : 's'})\\n`,\n ),\n );\n }\n const result = await opts.agent.run(routed.blocks, { signal: runCtrl.signal });\n if (result.status === 'aborted') {\n opts.renderer.writeWarning('Aborted.');\n } else if (result.status === 'failed') {\n const err = result.error;\n if (err) {\n const tag = err.recoverable ? ' (recoverable)' : '';\n opts.renderer.writeError(`Failed [${err.severity}]${tag}: ${err.describe()}`);\n } else {\n opts.renderer.writeError('Failed.');\n }\n } else if (result.status === 'max_iterations') {\n opts.renderer.writeWarning(`Hit max iterations (${result.iterations}).`);\n }\n\n // ── SDD Auto-Detection ──────────────────────────────────────────\n // When an SDD session is active, auto-detect spec and task JSON\n // in the AI output and save them to the session.\n if (result.status === 'done' && result.finalText && sddContext) {\n // Try to detect and save a spec\n const specSaved = await trySaveSpecFromAIOutput(result.finalText);\n if (specSaved) {\n opts.renderer.write(\n `\\n${color.cyan(' ✓ Spec detected and saved! Use /sdd approve to continue.')}\\n`,\n );\n }\n\n // Try to save implementation plan (text before task JSON)\n const planSaved = trySaveImplementationPlan(result.finalText);\n if (planSaved) {\n opts.renderer.write(\n `\\n${color.cyan(' ✓ Implementation plan saved!')}\\n`,\n );\n }\n\n // Try to detect and save tasks\n const tasksSaved = await trySaveTasksFromAIOutput(result.finalText);\n if (tasksSaved) {\n const progress = getTaskProgress();\n const count = progress?.total ?? 0;\n opts.renderer.write(\n `\\n${color.cyan(` ✓ ${count} tasks detected and saved! Use /sdd approve to execute.`)}\\n`,\n );\n }\n\n // Auto-detect task completion during execution phase\n const phase = getActiveSDDPhase();\n if (phase === 'executing') {\n const autoCompleted = autoDetectTaskCompletion(result.finalText);\n if (autoCompleted > 0) {\n const progress = getTaskProgress();\n if (progress) {\n opts.renderer.write(\n `\\n${color.cyan(` ✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`)}\\n`,\n );\n if (progress.percent === 100) {\n opts.renderer.write(\n `\\n${color.green(' 🎉 All tasks completed! Use /sdd cancel to end the session.')}\\n`,\n );\n }\n }\n }\n }\n }\n if (opts.tokenCounter && before) {\n const after = opts.tokenCounter.total();\n const costAfter = opts.tokenCounter.estimateCost().total;\n const ctxChip =\n opts.effectiveMaxContext && opts.effectiveMaxContext > 0\n ? ` ctx: ${renderContextChip(after.input, opts.effectiveMaxContext)}`\n : '';\n opts.renderer.write(\n `\\n${color.dim(\n `[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]${ctxChip}`,\n )}\\n`,\n );\n }\n\n // Autonomy loop: after a successful run, if autonomy is active,\n // ask the agent to suggest next steps and optionally auto-continue.\n if (result.status === 'done' && opts.getAutonomy) {\n const autonomy = opts.getAutonomy();\n if (autonomy === 'auto') {\n // Self-driving: ask the agent to continue with the next logical step.\n const nextPrompt =\n 'Based on what you just did, what is the single most important next step? ' +\n 'Just do it — execute the next logical step without asking for confirmation. ' +\n 'If there is nothing meaningful left to do, say \"DONE\" and nothing else.';\n opts.renderer.write(color.dim('\\n ↳ [autonomy] continuing…\\n'));\n const nextBlocks = [{ type: 'text' as const, text: nextPrompt }];\n const nextCtrl = new AbortController();\n activeCtrl = nextCtrl;\n try {\n const nextResult = await opts.agent.run(nextBlocks, { signal: nextCtrl.signal });\n if (nextResult.status === 'done' && nextResult.finalText?.trim() === 'DONE') {\n opts.renderer.write(color.dim('\\n ↳ [autonomy] agent reports task complete.\\n'));\n }\n // Loop continues — the for(;;) will read next input, but since\n // we're in auto mode, we need to re-trigger. We use a flag.\n if (opts.getAutonomy() === 'auto' && nextResult.status === 'done') {\n // Re-trigger: the outer loop will continue and we'll hit this\n // block again on the next iteration. But we need user input...\n // Instead, we just continue the loop with the next prompt.\n }\n } catch (err) {\n opts.renderer.writeError(\n `[autonomy] ${err instanceof Error ? err.message : String(err)}`,\n );\n } finally {\n activeCtrl = undefined;\n }\n } else if (autonomy === 'suggest') {\n // Suggest mode: ask the agent what to do next, show to user.\n const suggestPrompt =\n 'Based on what you just did, suggest 3 concrete next steps. ' +\n 'Format: numbered list, one line each, no explanation. ' +\n 'If there is nothing meaningful left, say \"No further steps needed.\"';\n const suggestBlocks = [{ type: 'text' as const, text: suggestPrompt }];\n const suggestCtrl = new AbortController();\n activeCtrl = suggestCtrl;\n try {\n const suggestResult = await opts.agent.run(suggestBlocks, { signal: suggestCtrl.signal });\n if (suggestResult.status === 'done' && suggestResult.finalText) {\n opts.renderer.write(\n `\\n${color.cyan(' Suggested next steps:')}\\n${suggestResult.finalText}\\n`,\n );\n }\n } catch {\n // Silently skip suggestion errors\n } finally {\n activeCtrl = undefined;\n }\n }\n }\n } catch (err) {\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\n } finally {\n activeCtrl = undefined;\n }\n }\n\n return 0;\n } finally {\n // Ensure listener + reader cleanup happens on every exit path: normal\n // EOF, /quit, an uncaught throw, etc. Without this, a thrown exception\n // mid-loop would leave the SIGINT handler attached for the rest of\n // the process lifetime (and the reader's terminal handle open).\n process.off('SIGINT', onSigint);\n await opts.reader.close().catch(() => {\n /* best-effort */\n });\n }\n}\n\nasync function pasteClipboardImage(builder: InputBuilder, opts: ReplOptions): Promise<void> {\n try {\n const img = await readClipboardImage();\n if (!img) {\n opts.renderer.write(color.dim(' no image on clipboard\\n'));\n return;\n }\n const placeholder = await builder.appendImage(img.base64, img.mediaType);\n const kb = (img.bytes / 1024).toFixed(0);\n opts.renderer.write(color.dim(` ↳ ${placeholder} (PNG ${kb}KB)\\n`));\n } catch (err) {\n opts.renderer.writeError(\n `Clipboard image error: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n}\n\n/**\n * Read a line, but support two multiline patterns:\n * 1. Trailing `\\` → continue on the next line (shell-style line continuation).\n * 2. A line that is exactly `\"\"\"` → start a heredoc; keep reading until\n * another bare `\"\"\"`. Useful for pasting code snippets.\n * Returns the assembled text and whether it came from a heredoc block (so\n * the caller can decide to always collapse heredocs as pastes).\n */\nasync function readPossiblyMultiline(opts: ReplOptions): Promise<string> {\n const firstPrompt = theme.primary('› ');\n const contPrompt = color.dim('· ');\n const first = await opts.reader.readLine(firstPrompt);\n\n if (first.trim() === '\"\"\"') {\n const parts: string[] = [];\n try {\n for (;;) {\n const next = await opts.reader.readLine(contPrompt);\n if (next.trim() === '\"\"\"') break;\n parts.push(next);\n }\n } catch {\n // EOF (Ctrl+D) during heredoc — user typed \"\"\" then quit.\n // Return what we have; the outer catch breaks the main loop.\n return parts.join('\\n');\n }\n return parts.join('\\n');\n }\n\n let buf = first;\n while (buf.endsWith('\\\\')) {\n buf = buf.slice(0, -1); // drop the trailing backslash\n const cont = await opts.reader.readLine(contPrompt);\n buf += '\\n' + cont;\n }\n return buf;\n}\n\nconst FILLED = '█';\nconst EMPTY = '░';\n\nfunction renderContextChip(used: number, max: number): string {\n const ratio = Math.max(0, Math.min(1, used / max));\n const pct = Math.round(ratio * 100);\n const bar = renderProgress(ratio, 6);\n return `${bar} ${pct}% (${fmtTok(used)}/${fmtTok(max)})`;\n}\n\nfunction 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 printBanner(renderer: TerminalRenderer, projectName?: string): void {\n const lines = [\n theme.primary(theme.bold('WrongStack')) + color.dim(` v${CLI_VERSION}`),\n color.dim('Built on the wrong stack. Shipped anyway.'),\n ];\n if (projectName && projectName.length > 0) {\n lines.push(color.dim('Project: ') + theme.bold(projectName));\n }\n lines.push(color.dim('Type /help for commands, /exit to quit.'), '');\n renderer.write(`${lines.join('\\n')}\\n`);\n}\n","/**\n * Execution phase — single-shot, TUI, REPL, and WebUI dispatch.\n * Extracted from index.ts so the main() function focuses on\n * boot + wiring; this file owns the three run modes and cleanup.\n */\nimport * as path from 'node:path';\nimport type {\n Agent,\n AttachmentStore,\n Config,\n Director,\n EventBus,\n ModelsRegistry,\n RecoveryLock,\n SessionWriter,\n SlashCommandRegistry,\n TokenCounter,\n} from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { ProviderConfig, ResolvedProvider, WstackPaths } from '@wrongstack/core';\nimport type { MCPRegistry } from '@wrongstack/mcp';\nimport { createToolVisionAdapters } from '@wrongstack/runtime/vision';\nimport { capabilitiesFor } from '@wrongstack/providers';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport type { TerminalRenderer } from './renderer.js';\nimport { runRepl } from './repl.js';\nimport type { SessionStats } from './session-stats.js';\nimport { fmtTok } from './utils.js';\nimport { CLI_VERSION } from './version.js';\n\nexport interface ExecutionDeps {\n agent: Agent;\n events: EventBus;\n slashRegistry: SlashCommandRegistry;\n attachments: AttachmentStore;\n tokenCounter: TokenCounter;\n config: Config;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n session: SessionWriter;\n mcpRegistry: MCPRegistry;\n recoveryLock: RecoveryLock;\n wpaths: WstackPaths;\n modelsRegistry: ModelsRegistry;\n projectRoot: string;\n flags: Record<string, string | boolean>;\n positional: string[];\n effectiveMaxContext: number;\n queueStore: import('@wrongstack/core').QueueStore;\n context: import('@wrongstack/core').Context;\n stats: SessionStats;\n detachTodosCheckpoint?: () => void | Promise<void>;\n savedProviderCfg: ProviderConfig | undefined;\n resolvedProvider: ResolvedProvider | undefined;\n getPickableProviders: () => Promise<Array<{ id: string; family: string; models: string[] }>>;\n switchProviderAndModel: (providerId: string, modelId: string) => string | null;\n /** Live director instance for the TUI fleet panel. Null when director mode is off. */\n director: Director | null;\n /** Fleet roster for human-readable subagent names. */\n fleetRoster?: Record<string, { name: string }>;\n /**\n * Shared controller object for the `/fleet stream on|off` toggle. The\n * TUI installs a dispatch-backed setter on mount; the slash command\n * reads/writes via this object so both surfaces stay synchronized.\n */\n fleetStreamController?: {\n enabled: boolean;\n setEnabled: (enabled: boolean) => void;\n };\n /** Query the live YOLO state from the permission policy. */\n getYolo?: () => boolean;\n /** Query the live autonomy mode. */\n getAutonomy?: () => import('./slash-commands/autonomy.js').AutonomyMode;\n /** Skill loader for the skill generator wizard. */\n skillLoader?: import('@wrongstack/core').SkillLoader;\n}\n\nexport async function execute(deps: ExecutionDeps): Promise<number> {\n const {\n agent,\n events,\n slashRegistry,\n attachments,\n tokenCounter,\n config,\n renderer,\n reader,\n session,\n mcpRegistry,\n recoveryLock,\n wpaths,\n modelsRegistry,\n projectRoot,\n flags,\n positional,\n effectiveMaxContext,\n queueStore,\n context,\n stats,\n detachTodosCheckpoint,\n savedProviderCfg,\n resolvedProvider,\n getPickableProviders,\n switchProviderAndModel,\n director,\n fleetRoster,\n fleetStreamController,\n getYolo,\n getAutonomy,\n skillLoader,\n } = deps;\n\n let code = 0;\n try {\n const visionAdapters = () => createToolVisionAdapters(agent.tools);\n const supportsVision = async (): Promise<boolean> => {\n try {\n const caps = await capabilitiesFor(modelsRegistry, context.provider.id, context.model);\n return caps.vision;\n } catch {\n return context.provider.capabilities.vision;\n }\n };\n // --prompt flag takes precedence: treat it like a positional query\n const promptFlag = typeof flags['prompt'] === 'string' ? flags['prompt'] : undefined;\n if (promptFlag) {\n positional.unshift(promptFlag);\n }\n // --goal / --ask boot directly into the TUI in goal/ask mode. The TUI is\n // the only surface with the steering + fleet panel + Esc-redirect wiring\n // that goal mode depends on, so if the user passed a goal but forgot\n // --tui, we flip --tui on for them. Single-shot positional invocation\n // still wins: `wstack --goal X \"literal prompt\"` runs the positional as\n // a normal single-shot (positional is non-empty), which is consistent\n // with --prompt's existing semantics.\n const goalFlag = typeof flags['goal'] === 'string' ? flags['goal'] : undefined;\n const askFlag = typeof flags['ask'] === 'string' ? flags['ask'] : undefined;\n if ((goalFlag || askFlag) && positional.length === 0 && !promptFlag) {\n flags.tui = true;\n }\n if (positional.length > 0 || promptFlag) {\n const query = positional.join(' ');\n const ctrl = new AbortController();\n const onSigint = () => ctrl.abort();\n process.on('SIGINT', onSigint);\n const startedAt = Date.now();\n const before = tokenCounter.total();\n const costBefore = tokenCounter.estimateCost().total;\n let result: import('@wrongstack/core').RunResult;\n try {\n result = await agent.run(query, { signal: ctrl.signal });\n } finally {\n process.off('SIGINT', onSigint);\n }\n const after = tokenCounter.total();\n const costAfter = tokenCounter.estimateCost().total;\n const usage = {\n input: after.input - before.input,\n output: after.output - before.output,\n iterations: result.iterations,\n cost: costAfter - costBefore,\n elapsedMs: Date.now() - startedAt,\n };\n if (flags['output-json']) {\n const json = JSON.stringify({\n status: result.status,\n finalText: result.finalText ?? null,\n error: result.error\n ? {\n code: result.error.code,\n subsystem: result.error.subsystem,\n severity: result.error.severity,\n recoverable: result.error.recoverable,\n message: result.error.message,\n context: result.error.context ?? null,\n }\n : null,\n usage,\n });\n process.stdout.write(json + '\\n');\n } else {\n if (result.status === 'failed') {\n code = 1;\n const err = result.error;\n if (err) {\n const tag = err.recoverable ? ' (recoverable)' : '';\n renderer.writeError(`Failed [${err.severity}]${tag}: ${err.describe()}`);\n } else {\n renderer.writeError('Failed.');\n }\n } else if (result.status === 'aborted') {\n code = 130;\n renderer.writeWarning('Aborted.');\n } else if (result.status === 'max_iterations') {\n code = 1;\n renderer.writeWarning(`Hit max iterations (${result.iterations}).`);\n }\n if (result.finalText) renderer.write('\\n' + result.finalText + '\\n');\n renderer.write(\n '\\n' +\n color.dim(\n `[in: ${fmtTok(usage.input)} out: ${fmtTok(usage.output)} iters: ${usage.iterations} cost: ${usage.cost.toFixed(4)} ${(usage.elapsedMs / 1000).toFixed(1)}s]`,\n ) +\n '\\n',\n );\n }\n } else if (flags.tui && !flags['no-tui']) {\n // Switch from inline CLI prompts to event-driven confirmation.\n // Without this, the permission prompt writes to stdout and blocks\n // on stdin — both owned by Ink — making the prompt invisible and\n // the input deadlocked. After this call, tool.confirm_needed events\n // fire instead, which the TUI's ConfirmPrompt component handles.\n agent.disableInteractiveConfirmation();\n const { runTui } = await import('@wrongstack/tui');\n renderer.setSilent(true);\n const banneredFamily = savedProviderCfg?.family ?? resolvedProvider?.family;\n const banneredKey =\n savedProviderCfg?.apiKey ??\n config.apiKey ??\n (resolvedProvider?.envVars ?? savedProviderCfg?.envVars ?? [])\n .map((v) => process.env[v])\n .find((v): v is string => !!v);\n const banneredKeyTail =\n banneredKey && banneredKey.length >= 3 ? banneredKey.slice(-3) : undefined;\n try {\n code = await runTui({\n agent,\n events,\n slashRegistry,\n attachments,\n tokenCounter,\n visionAdapters,\n supportsVision,\n model: context.model,\n banner: !flags['no-banner'],\n queueStore,\n yolo: !!config.yolo,\n getYolo,\n appVersion: CLI_VERSION,\n provider: config.provider,\n family: banneredFamily,\n keyTail: banneredKeyTail,\n getPickableProviders,\n switchProviderAndModel,\n effectiveMaxContext,\n // Default OFF so the terminal's native scrollback works for chat\n // history out of the box (mouse wheel / Shift+PgUp). Users who hit\n // resize/overlay-leak artifacts can opt back into alt-screen with\n // `--alt-screen` or `/altscreen on`. `--no-alt-screen` still wins\n // when both are passed.\n altScreen: flags['alt-screen'] === true && flags['no-alt-screen'] !== true,\n director,\n fleetRoster,\n onAfterExit: () => {\n process.stdout.write(\n color.dim(`Session saved: ${session.id} — resume with `) +\n color.cyan(`wstack resume ${session.id}`) +\n '\\n',\n );\n },\n onClearHistory: (dispatch) => {\n dispatch({ type: 'clearHistory' });\n dispatch({ type: 'resetContextChip' });\n },\n fleetStreamController,\n initialGoal: goalFlag,\n initialAsk: askFlag,\n getSDDContext: () => {\n const { getActiveSDDContext } = require('./slash-commands/sdd.js');\n return getActiveSDDContext();\n },\n onSDDOutput: async (output: string) => {\n const { trySaveSpecFromAIOutput, trySaveImplementationPlan, trySaveTasksFromAIOutput, autoDetectTaskCompletion, getTaskProgress, getActiveSDDPhase } = require('./slash-commands/sdd.js');\n const messages: string[] = [];\n const specSaved = await trySaveSpecFromAIOutput(output);\n if (specSaved) messages.push('✓ Spec detected and saved! Use /sdd approve to continue.');\n const planSaved = trySaveImplementationPlan(output);\n if (planSaved) messages.push('✓ Implementation plan saved!');\n const tasksSaved = await trySaveTasksFromAIOutput(output);\n if (tasksSaved) {\n const progress = getTaskProgress();\n const count = progress?.total ?? 0;\n messages.push(`✓ ${count} tasks detected and saved! Use /sdd approve to execute.`);\n }\n const sddPhase = getActiveSDDPhase();\n if (sddPhase === 'executing') {\n const autoCompleted = autoDetectTaskCompletion(output);\n if (autoCompleted > 0) {\n const progress = getTaskProgress();\n if (progress) {\n messages.push(`✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`);\n }\n }\n }\n return messages;\n },\n });\n } finally {\n renderer.setSilent(false);\n }\n } else if (flags.webui) {\n const { runWebUI } = await import('./webui-server.js');\n const webuiPromise = runWebUI({\n agent,\n events,\n session,\n port: Number.parseInt(String(flags.port ?? '3457'), 10),\n modelsRegistry,\n globalConfigPath: wpaths.globalConfig,\n });\n try {\n code = await runRepl({\n agent,\n renderer,\n reader,\n slashRegistry,\n tokenCounter,\n visionAdapters,\n supportsVision,\n attachments,\n effectiveMaxContext,\n projectName: path.basename(projectRoot) || undefined,\n getAutonomy,\n skillLoader,\n });\n } finally {\n // webuiPromise must be awaited regardless of whether runRepl threw,\n // so the HTTP/WS server can shut down cleanly.\n await webuiPromise.catch(() => undefined);\n }\n } else {\n code = await runRepl({\n agent,\n renderer,\n reader,\n slashRegistry,\n tokenCounter,\n visionAdapters,\n supportsVision,\n attachments,\n effectiveMaxContext,\n projectName: path.basename(projectRoot) || undefined,\n getAutonomy,\n skillLoader,\n });\n }\n } finally {\n // stats.render is synchronous but can throw — isolate it so cleanup\n // always runs regardless.\n try { stats.render(renderer); } catch (err) { /* best-effort */ }\n await Promise.resolve(detachTodosCheckpoint?.()).catch(() => undefined);\n await mcpRegistry.stopAll();\n await session.append({\n type: 'session_end',\n ts: new Date().toISOString(),\n usage: tokenCounter.total(),\n });\n await session.close();\n await recoveryLock.clear().catch(() => undefined);\n await reader.close();\n }\n return code;\n}\n","/**\r\n * L1-E: Multi-agent CLI integration. The coordinator + per-task agent\r\n * factory is created lazily on the first `/spawn` so users who never use\r\n * subagents don't pay the construction cost.\r\n */\r\nimport { randomUUID } from 'node:crypto';\r\nimport * as path from 'node:path';\r\nimport {\r\n Agent,\r\n AutoApprovePermissionPolicy,\r\n type Config,\r\n type ConfigStore,\r\n type Container,\r\n Context,\r\n DefaultMultiAgentCoordinator,\r\n Director,\r\n type DirectorSessionFactory,\r\n EventBus,\r\n type MultiAgentCoordinator,\r\n type Provider,\r\n type ProviderRegistry,\r\n type SessionWriter,\r\n type SystemPromptBuilder,\r\n TOKENS,\r\n type TaskResult,\r\n type TokenCounter,\r\n type Tool,\r\n type ToolRegistry,\r\n createDefaultPipelines,\r\n makeAgentSubagentRunner,\r\n makeDirectorSessionFactory,\r\n} from '@wrongstack/core';\r\nimport type { TextBlock } from '@wrongstack/core';\r\nimport { makeProviderFromConfig } from '@wrongstack/providers';\r\n\r\nexport interface MultiAgentDeps {\r\n container: Container;\r\n toolRegistry: ToolRegistry;\r\n providerRegistry: ProviderRegistry;\r\n configStore: ConfigStore;\r\n events: EventBus;\r\n systemPromptBuilder: SystemPromptBuilder;\r\n session: SessionWriter;\r\n tokenCounter: TokenCounter;\r\n projectRoot: string;\r\n cwd: string;\r\n}\r\n\r\n/**\r\n * Per-session options that flip the orchestration mode. Director mode\r\n * routes lifecycle through a `Director`, which unlocks manifest writing\r\n * and (later) FleetBus observability — at the cost of building a slightly\r\n * heavier wrapper around the same coordinator. Default mode is the plain\r\n * coordinator path that existing `/spawn` users already rely on.\r\n */\r\nexport interface MultiAgentHostOptions {\r\n /**\r\n * Enable Director-backed orchestration. The host still exposes the same\r\n * `spawn` / `status` / `usage` / `kill` API; under the hood, calls flow\r\n * through a `Director` so manifest writing works and the FleetBus is\r\n * available for future observability hooks.\r\n */\r\n directorMode?: boolean;\r\n /**\r\n * Absolute file path the director writes its fleet manifest to on\r\n * shutdown (and on-demand via `manifest()`). Only meaningful when\r\n * `directorMode` is true; ignored otherwise.\r\n */\r\n manifestPath?: string;\r\n /**\r\n * Absolute path to the fleet's shared scratchpad directory. When set,\r\n * subagent system prompts are augmented with a \"Shared notes\" block\r\n * pointing here so agents can pass conclusions through the filesystem\r\n * without going through the bridge. Directory is created on first\r\n * spawn. Only meaningful in director mode.\r\n */\r\n sharedScratchpadPath?: string;\r\n /**\r\n * Absolute path to the directory under which per-subagent JSONL\r\n * transcripts land — typically `<projectSessions>/<sessionId>/subagents/`.\r\n * When set, the host builds a `DirectorSessionFactory` rooted there and\r\n * each spawned subagent gets its own session writer (instead of sharing\r\n * the parent session). Director mode only.\r\n */\r\n sessionsRoot?: string;\r\n /**\r\n * Director run id for namespacing per-subagent JSONLs. Defaults to the\r\n * coordinator id when omitted. Pass an explicit id when resuming from a\r\n * prior fleet manifest.\r\n */\r\n directorRunId?: string;\r\n /**\r\n * Base directory for fleet artifacts (manifest, shared scratchpad,\r\n * subagent sessions). When set and director mode is promoted at runtime\r\n * (via /director), paths are derived as:\r\n * <fleetRoot>/fleet.json (manifest)\r\n * <fleetRoot>/shared/ (scratchpad)\r\n * <fleetRoot>/subagents/ (per-subagent JSONL)\r\n */\r\n fleetRoot?: string;\r\n /**\r\n * Absolute path the director writes its live state checkpoint to. Distinct\r\n * from `manifestPath` (final record) — the checkpoint mirrors pending /\r\n * running / completed tasks on every mutation so `wstack resume` can show\r\n * a \"you had N tasks in flight\" banner after a crash. Only meaningful in\r\n * director mode.\r\n */\r\n stateCheckpointPath?: string;\r\n /**\r\n * Session writer the director forwards task lifecycle events to\r\n * (agent_spawned, task_created, task_completed, task_failed). The CLI\r\n * passes the same writer the host Agent uses so all events land in one\r\n * JSONL. Optional — when omitted, those events stay in-memory.\r\n */\r\n sessionWriter?: import('@wrongstack/core').SessionWriter;\r\n}\r\n\r\n/**\r\n * Lazy holder — created on first /spawn call, reused across the session\r\n * so /agents can list everyone running.\r\n */\r\nexport class MultiAgentHost {\r\n private coordinator?: MultiAgentCoordinator;\r\n /** Lazily built when `opts.directorMode` is set. Owns its own internal\r\n * coordinator; the host's `coordinator` field still points at it so\r\n * the rest of the methods don't need to branch. */\r\n private director?: Director;\r\n /** Lazily built alongside the director — produces per-subagent JSONL\r\n * writers under `<sessionsRoot>/<runId>/`. Null in non-director mode. */\r\n private sessionFactory?: DirectorSessionFactory;\r\n private readonly pending = new Map<string, { description: string; subagentId: string }>();\r\n private readonly results: TaskResult[] = [];\r\n private readonly opts: MultiAgentHostOptions;\r\n /**\r\n * Populated by `promoteToDirector` when it refuses to promote (typically\r\n * because a non-director coordinator is already running). The delegate\r\n * tool reads this through `getPromotionBlockReason` to render an\r\n * actionable error instead of a generic \"could not activate director\".\r\n */\r\n private promotionBlockReason: string | null = null;\r\n\r\n constructor(\r\n private readonly deps: MultiAgentDeps,\r\n opts: MultiAgentHostOptions = {},\r\n ) {\r\n this.opts = opts;\r\n }\r\n\r\n /**\r\n * Force the lazy build path to run *now* and return the live Director,\r\n * or null when director mode is off. Used by the CLI to register the\r\n * fleet's LLM-callable orchestration tools (spawn_subagent,\r\n * assign_task, await_tasks, ask_subagent, roll_up, terminate_subagent,\r\n * fleet_status, fleet_usage) into the leader's ToolRegistry before the\r\n * agent starts — without this, the leader literally cannot see the\r\n * orchestration tools and `--director` becomes a no-op.\r\n */\r\n async ensureDirector(): Promise<Director | null> {\r\n if (!this.opts.directorMode) return null;\r\n await this.ensureCoordinator();\r\n return this.director ?? null;\r\n }\r\n\r\n private async ensureCoordinator(): Promise<MultiAgentCoordinator> {\r\n if (this.coordinator) return this.coordinator;\r\n const config: Config = this.deps.configStore.get() as Config;\r\n\r\n // Build the per-subagent session factory when both director mode and\r\n // a sessions root are configured.\r\n if (this.opts.directorMode && this.opts.sessionsRoot && !this.sessionFactory) {\r\n this.sessionFactory = makeDirectorSessionFactory({\r\n sessionsRoot: this.opts.sessionsRoot,\r\n directorRunId: this.opts.directorRunId,\r\n });\r\n }\r\n\r\n // Phase 1: Build coordinator/Director WITHOUT a runner. The runner\r\n // needs FleetBus which only exists after the Director is created.\r\n //\r\n // Default budget intentionally generous (4 hours / 200 iter / 1000 tools)\r\n // so a subagent doesn't get cut off mid-audit just because nobody\r\n // remembered to override the budget. Per-call overrides ride in\r\n // through `delegate({ timeoutMs, maxIterations, maxToolCalls })` or\r\n // `spawn_subagent({ maxIterations, ... })`. If a worker truly hangs,\r\n // the user can ctrl+C or `/fleet kill <id>` — that's a better\r\n // failure mode than \"fleet looked busy, finished nothing\".\r\n const coordinatorConfig = {\r\n coordinatorId: randomUUID(),\r\n doneCondition: { type: 'all_tasks_done' as const },\r\n maxConcurrent: 8,\r\n // No defaultBudget. Caps land on a subagent ONLY when the\r\n // orchestrator (delegate-tool / spawn_subagent) or the user\r\n // (CLI flag) sets them explicitly. The prior defaults\r\n // (1000 tools / 200 iter / 4h) silently killed long autonomous\r\n // runs; for a \"work until done\" director we want no implicit\r\n // ceilings. The orchestrator can still cap a single subagent\r\n // by passing maxToolCalls/maxIterations through the spawn tool.\r\n };\r\n\r\n if (this.opts.directorMode) {\r\n this.director = new Director({\r\n config: coordinatorConfig,\r\n manifestPath: this.opts.manifestPath,\r\n sharedScratchpadPath: this.opts.sharedScratchpadPath,\r\n stateCheckpointPath: this.opts.stateCheckpointPath,\r\n sessionWriter: this.opts.sessionWriter,\r\n // Autonomy: allow nested directors a few levels deep. Default\r\n // is 2 (root + one tier of workers), which trips the moment a\r\n // worker tries to recurse into \"let me delegate the parser\r\n // analysis to a tighter specialist\". 5 lets the director\r\n // structure work as deeply as the task requires without us\r\n // having to pass a flag every time.\r\n maxSpawnDepth: 5,\r\n });\r\n this.director.on('task.completed', ({ task, result }) => {\r\n this.results.push(result);\r\n this.pending.delete(task.id);\r\n this.emitLifecycleCompleted(task.id, result);\r\n });\r\n // Relay budget pressure events so the TUI can show real-time feedback.\r\n // \"⚡ agent#audit-log hitting tool_call limit (350/400) — extending...\"\r\n this.director.fleet.filter('budget.threshold_reached', (e) => {\r\n const payload = e.payload as {\r\n kind: string;\r\n used: number;\r\n limit: number;\r\n };\r\n this.deps.events.emit('subagent.budget_warning', {\r\n subagentId: e.subagentId,\r\n kind: payload.kind,\r\n used: payload.used,\r\n limit: payload.limit,\r\n });\r\n });\r\n this.coordinator = (\r\n this.director as unknown as { coordinator: MultiAgentCoordinator }\r\n ).coordinator;\r\n } else {\r\n this.coordinator = new DefaultMultiAgentCoordinator(coordinatorConfig, {});\r\n (this.coordinator as unknown as { on: Function }).on(\r\n 'task.completed',\r\n ({ task, result }: { task: { id: string }; result: TaskResult }) => {\r\n this.results.push(result);\r\n this.pending.delete(task.id);\r\n this.emitLifecycleCompleted(task.id, result);\r\n },\r\n );\r\n }\r\n // Coordinator's `task.assigned` fires once per dispatch — relay it\r\n // as a `subagent.task_started` so UIs can show \"▶ AGENT#N started\r\n // <description>\" the instant work begins. The director path uses\r\n // the same underlying coordinator so a single subscription covers\r\n // both modes (director just wraps it without intercepting this\r\n // event).\r\n (this.coordinator as unknown as { on: Function }).on(\r\n 'task.assigned',\r\n ({ task, subagentId }: { task: { id: string; description?: string }; subagentId: string }) => {\r\n this.deps.events.emit('subagent.task_started', {\r\n subagentId,\r\n taskId: task.id,\r\n description: task.description,\r\n });\r\n },\r\n );\r\n\r\n // Phase 2: Build the runner — FleetBus is now available via\r\n // this.director?.fleet (set in Phase 1 for director mode).\r\n const runner = this.buildSubagentRunner(config);\r\n\r\n // Phase 3: Inject the runner into the coordinator.\r\n const innerCoord: DefaultMultiAgentCoordinator = this.opts.directorMode\r\n ? (this.director as unknown as { coordinator: DefaultMultiAgentCoordinator }).coordinator\r\n : (this.coordinator as DefaultMultiAgentCoordinator);\r\n innerCoord.setRunner(runner);\r\n\r\n return this.coordinator;\r\n }\r\n\r\n /**\r\n * Build the per-subagent runner: agent factory → runner. Extracted so\r\n * ensureCoordinator stays focused on orchestration setup.\r\n */\r\n private buildSubagentRunner(config: Config): ReturnType<typeof makeAgentSubagentRunner> {\r\n const factory = async (subCfg: {\r\n id?: string;\r\n name?: string;\r\n model?: string;\r\n provider?: string;\r\n tools?: string[];\r\n }) => {\r\n const events = new EventBus();\r\n const provider = await this.buildSubagentProvider(config, subCfg.provider);\r\n\r\n const baseSystem: TextBlock[] = await this.deps.systemPromptBuilder.build({\r\n cwd: this.deps.cwd,\r\n projectRoot: this.deps.projectRoot,\r\n tools: this.filterTools(subCfg.tools),\r\n model: subCfg.model ?? config.model,\r\n provider: subCfg.provider ?? config.provider,\r\n // Tell the builder this is a subagent build — skips the host's\r\n // plan injection so each subagent gets a clean, task-scoped\r\n // prompt instead of inheriting strategic context that's\r\n // meaningless to a single delegated subtask.\r\n subagent: true,\r\n });\r\n\r\n let subSession: SessionWriter;\r\n if (this.sessionFactory) {\r\n const subagentName = subCfg.id ?? subCfg.name ?? `sub_${randomUUID().slice(0, 8)}`;\r\n subSession = await this.sessionFactory.createSubagentSession({\r\n subagentId: subagentName,\r\n provider: subCfg.provider ?? config.provider,\r\n model: subCfg.model ?? config.model,\r\n title: `subagent: ${subagentName}`,\r\n });\r\n } else {\r\n const parentSession = this.deps.session;\r\n subSession = {\r\n id: parentSession.id,\r\n append: (ev) => parentSession.append({ ...ev }),\r\n } as SessionWriter;\r\n }\r\n\r\n const ctx = new Context({\r\n systemPrompt: baseSystem,\r\n provider,\r\n session: subSession,\r\n signal: new AbortController().signal,\r\n tokenCounter: this.deps.tokenCounter,\r\n cwd: this.deps.cwd,\r\n projectRoot: this.deps.projectRoot,\r\n model: subCfg.model ?? config.model,\r\n tools: this.filterTools(subCfg.tools),\r\n });\r\n\r\n const agent = new Agent({\r\n container: this.deps.container,\r\n tools: this.subagentToolRegistry(subCfg.tools),\r\n providers: this.deps.providerRegistry,\r\n events,\r\n pipelines: createDefaultPipelines(),\r\n context: ctx,\r\n // Subagents cannot answer interactive permission prompts — they\r\n // run under a director, not the user. Auto-approve everything\r\n // (except tool-level hard denies); the user already authorized\r\n // the work when they invoked the leader.\r\n permissionPolicy: new AutoApprovePermissionPolicy(),\r\n });\r\n\r\n // Close the per-subagent JSONL writer when the task ends. Without\r\n // this each completed task leaks one open file descriptor; over a\r\n // long fleet run (1000+ tasks) the process eventually hits the OS\r\n // limit. We only close writers we created via `sessionFactory` —\r\n // the fallback path forwards into the parent's session, which the\r\n // host owns and must not close here. The shim writer in the\r\n // fallback branch has no `close()`, so the null-guard handles\r\n // both cases.\r\n // Bridge per-subagent tool.executed to the host EventBus so the\r\n // TUI can update its compact live agent surfaces regardless of\r\n // director mode. The FleetBus path (director-only) covers the\r\n // richer FleetPanel stream; this bridge gives baseline visibility\r\n // for plain /spawn without forcing tool calls into chat history.\r\n // Capture the subagentId from the caller-supplied config — the\r\n // factory itself doesn't know the id until spawn() assigns one,\r\n // but director.spawn/coord.spawn both pass it back via subCfg.id\r\n // when in director mode; in legacy non-director mode the id is\r\n // discovered post-spawn, so we wire the bridge lazily with a\r\n // mutable holder and let the legacy emit path fill it.\r\n const hostEvents = this.deps.events;\r\n const offToolBridge = events.on('tool.executed', (e) => {\r\n // subCfg.id is populated by Director.spawn before this factory\r\n // is invoked, and by coord.spawn for the non-director path\r\n // (the runner re-uses the same config object). When it's\r\n // missing we still emit with a fallback so the bridge never\r\n // drops events — observability is more useful than perfect\r\n // attribution in that edge case.\r\n hostEvents.emit('subagent.tool_executed', {\r\n subagentId: subCfg.id ?? subCfg.name ?? 'subagent',\r\n name: e.name,\r\n durationMs: e.durationMs,\r\n ok: e.ok,\r\n input: e.input,\r\n outputBytes: e.outputBytes,\r\n });\r\n });\r\n\r\n const dispose = async () => {\r\n offToolBridge();\r\n try {\r\n await subSession.close?.();\r\n } catch {\r\n // see runner-side comment — cleanup must not mask the result\r\n }\r\n };\r\n\r\n return { agent, events, dispose };\r\n };\r\n\r\n return makeAgentSubagentRunner({ factory, fleetBus: this.director?.fleet });\r\n }\r\n\r\n /**\r\n * Build a Provider for a subagent. When `overrideId` is supplied (from\r\n * `SubagentConfig.provider`), looks that provider up in\r\n * `config.providers` and constructs it with its own apiKey/baseUrl.\r\n * Falls back to the leader's provider when `overrideId` is absent or\r\n * not configured (so a typo doesn't crash the whole run — we just\r\n * use the leader and the calling code can decide to error later).\r\n */\r\n private async buildSubagentProvider(config: Config, overrideId?: string): Promise<Provider> {\r\n const providerId = overrideId && config.providers?.[overrideId] ? overrideId : config.provider;\r\n const newCfg = config.providers?.[providerId] ?? {\r\n type: providerId,\r\n apiKey: config.apiKey,\r\n baseUrl: config.baseUrl,\r\n };\r\n return makeProviderFromConfig(providerId, {\r\n ...newCfg,\r\n type: providerId,\r\n });\r\n }\r\n\r\n /** Returns a tool slice for the subagent — full set unless restricted. */\r\n private filterTools(allow?: string[]): Tool[] {\r\n const all = this.deps.toolRegistry.list();\r\n if (!allow || allow.length === 0) return all;\r\n const allowSet = new Set(allow);\r\n return all.filter((t) => allowSet.has(t.name));\r\n }\r\n\r\n private subagentToolRegistry(allow?: string[]): ToolRegistry {\r\n if (!allow || allow.length === 0) return this.deps.toolRegistry;\r\n // Build a filtered registry by cloning entries.\r\n const cloneCtor = this.deps.toolRegistry.constructor as new () => ToolRegistry;\r\n const sub = new cloneCtor();\r\n for (const t of this.filterTools(allow)) sub.register(t);\r\n return sub;\r\n }\r\n\r\n /**\r\n * Spawn a fresh subagent and assign a single task. Returns task id.\r\n *\r\n * Optional `opts` lets the caller (a `/spawn` slash command or the\r\n * future director surface) override the subagent's provider, model,\r\n * and tool slice on a per-spawn basis. Without options, the legacy\r\n * behavior holds: the subagent uses the leader's provider/model and\r\n * the full tool registry.\r\n */\r\n async spawn(\r\n description: string,\r\n opts?: { provider?: string; model?: string; tools?: string[]; name?: string },\r\n ): Promise<{ subagentId: string; taskId: string }> {\r\n await this.ensureCoordinator();\r\n // No implicit budget caps. The orchestrator (when it spawns\r\n // through delegate / spawn_subagent) passes budgets sized to the\r\n // task; the human-driven /spawn entrypoint defaults to \"run\r\n // until the work is done\", because the human is right here and\r\n // can interrupt with Esc / /steer / Ctrl+C. Setting maxToolCalls=20\r\n // here would kill any non-trivial audit at iteration 21.\r\n const subagentConfig = {\r\n name: opts?.name ?? 'adhoc',\r\n role: 'general',\r\n provider: opts?.provider,\r\n model: opts?.model,\r\n tools: opts?.tools,\r\n };\r\n // Pre-compute the transcript path before any spawn so the very first\r\n // `subagent.spawned` event the TUI / observability layer sees already\r\n // carries it. The factory uses the same naming rule\r\n // (`name ?? id ?? sub_<random>`); for the legacy `/spawn` path the\r\n // name is always set, so the path is deterministic.\r\n const transcriptPath = this.sessionFactory\r\n ? path.join(this.sessionFactory.dir, `${subagentConfig.name}.jsonl`)\r\n : undefined;\r\n\r\n // In director mode we route through `Director.spawn` / `Director.assign`\r\n // so the director's manifest entries get populated. Calling the\r\n // underlying coordinator directly would still execute the task, but\r\n // the manifest would be empty — that surprised the first test.\r\n if (this.director) {\r\n const subagentId = await this.director.spawn(subagentConfig);\r\n const taskId = randomUUID();\r\n this.pending.set(taskId, { description, subagentId });\r\n this.deps.events.emit('subagent.spawned', {\r\n subagentId,\r\n taskId,\r\n name: subagentConfig.name,\r\n provider: opts?.provider,\r\n model: opts?.model,\r\n description,\r\n transcriptPath,\r\n });\r\n await this.director.assign({\r\n id: taskId,\r\n description,\r\n subagentId,\r\n // No maxToolCalls — same reasoning as the spawn config above.\r\n // The director / orchestrator owns the budget decision.\r\n });\r\n return { subagentId, taskId };\r\n }\r\n const coord = this.coordinator!;\r\n const spawned = await coord.spawn(subagentConfig);\r\n const taskId = randomUUID();\r\n this.pending.set(taskId, { description, subagentId: spawned.subagentId });\r\n this.deps.events.emit('subagent.spawned', {\r\n subagentId: spawned.subagentId,\r\n taskId,\r\n name: subagentConfig.name,\r\n provider: opts?.provider,\r\n model: opts?.model,\r\n description,\r\n transcriptPath,\r\n });\r\n await coord.assign({\r\n id: taskId,\r\n description,\r\n subagentId: spawned.subagentId,\r\n // No maxToolCalls — see comment on the director branch above.\r\n });\r\n return { subagentId: spawned.subagentId, taskId };\r\n }\r\n\r\n /**\r\n * Relay a `task.completed` notification (from either the Director or\r\n * the raw coordinator) to the EventBus so non-director TUIs and any\r\n * other observer can react. We forward the full result shape rather\r\n * than mutating the existing `task.completed` schema — coordination\r\n * code already binds to that event, and adding subscribers there\r\n * would change ordering semantics for those listeners.\r\n */\r\n private emitLifecycleCompleted(taskId: string, result: TaskResult): void {\r\n this.deps.events.emit('subagent.task_completed', {\r\n subagentId: result.subagentId,\r\n taskId,\r\n status: result.status,\r\n iterations: result.iterations,\r\n toolCalls: result.toolCalls,\r\n durationMs: result.durationMs,\r\n error: result.error,\r\n });\r\n }\r\n\r\n status(): {\r\n pending: { taskId: string; description: string; subagentId: string }[];\r\n completed: TaskResult[];\r\n live: { subagentId: string; status: string; task?: string }[];\r\n summary: string;\r\n } {\r\n const pending = Array.from(this.pending.entries()).map(([taskId, v]) => ({\r\n taskId,\r\n description: v.description,\r\n subagentId: v.subagentId,\r\n }));\r\n // Include live subagent statuses from the coordinator so /agents shows\r\n // running agents even when they haven't produced a TaskResult yet.\r\n const live: { subagentId: string; status: string; task?: string }[] = [];\r\n if (this.coordinator) {\r\n const s = this.coordinator.getStatus();\r\n for (const a of s.subagents) {\r\n live.push({ subagentId: a.id, status: a.status, task: a.currentTask });\r\n }\r\n }\r\n const liveCount = live.filter((s) => s.status === 'running' || s.status === 'idle').length;\r\n const summary = !this.coordinator\r\n ? 'No subagents have been spawned.'\r\n : liveCount > 0\r\n ? `${pending.length} pending, ${liveCount} active, ${this.results.length} completed.`\r\n : `${pending.length} pending, ${this.results.length} completed.`;\r\n return { pending, completed: this.results, live, summary };\r\n }\r\n\r\n /**\r\n * Roll up per-subagent runtime cost from completed TaskResults. We don't\r\n * yet have FleetUsageAggregator wired into the simple MultiAgentHost\r\n * path (that lives on `Director`), so this aggregates iterations / tool\r\n * calls / duration which we *do* have — enough to spot a thrashing\r\n * worker without paying for a heavier orchestrator on every /spawn.\r\n *\r\n * Returns rows sorted by total duration descending (slowest first) so\r\n * the table renders the most interesting subagent at the top.\r\n */\r\n usage(): {\r\n rows: Array<{\r\n subagentId: string;\r\n tasks: number;\r\n iterations: number;\r\n toolCalls: number;\r\n durationMs: number;\r\n status: string;\r\n }>;\r\n totals: { tasks: number; iterations: number; toolCalls: number; durationMs: number };\r\n } {\r\n const bySubagent = new Map<\r\n string,\r\n {\r\n tasks: number;\r\n iterations: number;\r\n toolCalls: number;\r\n durationMs: number;\r\n lastStatus: string;\r\n }\r\n >();\r\n for (const r of this.results) {\r\n const cur = bySubagent.get(r.subagentId) ?? {\r\n tasks: 0,\r\n iterations: 0,\r\n toolCalls: 0,\r\n durationMs: 0,\r\n lastStatus: 'unknown',\r\n };\r\n cur.tasks += 1;\r\n cur.iterations += r.iterations;\r\n cur.toolCalls += r.toolCalls;\r\n cur.durationMs += r.durationMs;\r\n cur.lastStatus = r.status;\r\n bySubagent.set(r.subagentId, cur);\r\n }\r\n const rows = Array.from(bySubagent.entries())\r\n .map(([subagentId, v]) => ({\r\n subagentId,\r\n tasks: v.tasks,\r\n iterations: v.iterations,\r\n toolCalls: v.toolCalls,\r\n durationMs: v.durationMs,\r\n status: v.lastStatus,\r\n }))\r\n .sort((a, b) => b.durationMs - a.durationMs);\r\n const totals = rows.reduce(\r\n (acc, r) => ({\r\n tasks: acc.tasks + r.tasks,\r\n iterations: acc.iterations + r.iterations,\r\n toolCalls: acc.toolCalls + r.toolCalls,\r\n durationMs: acc.durationMs + r.durationMs,\r\n }),\r\n { tasks: 0, iterations: 0, toolCalls: 0, durationMs: 0 },\r\n );\r\n return { rows, totals };\r\n }\r\n\r\n /**\r\n * Force the director to write its manifest to disk and return the path,\r\n * or `null` when director mode is off (the simple coordinator path has\r\n * no manifest). Callers should fall back to a friendly user message\r\n * when `null` is returned — e.g. `/fleet manifest` does this already.\r\n *\r\n * The returned string is the absolute path of the manifest file. The\r\n * file contents are JSON; readers can `JSON.parse(fs.readFileSync(...))`\r\n * to consume.\r\n */\r\n async manifest(): Promise<string | null> {\r\n if (!this.director) return null;\r\n return this.director.writeManifest();\r\n }\r\n\r\n /**\r\n * Promote a non-director session to director mode at runtime. Only\r\n * succeeds when no subagents have been spawned yet — once a coordinator\r\n * is running, the state cannot be migrated. Returns the live Director\r\n * so the caller can register orchestration tools into the ToolRegistry.\r\n *\r\n * Idempotent: calling promoteToDirector on an already-promoted host\r\n * returns the existing director without side effects.\r\n */\r\n async promoteToDirector(): Promise<Director | null> {\r\n if (this.director) return this.director;\r\n if (this.coordinator) {\r\n // A coordinator already exists (subagents were spawned). Cannot\r\n // safely replace a running coordinator with a Director wrapper.\r\n // Record WHY so callers (delegate tool) can render an actionable\r\n // message instead of the prior opaque \"Director could not be\r\n // activated\" — the user wants to know what to do, not just that\r\n // a thing failed.\r\n const status = this.coordinator.getStatus();\r\n const running = status.subagents.filter((s) => s.status === 'running').length;\r\n const idle = status.subagents.filter((s) => s.status === 'idle').length;\r\n this.promotionBlockReason =\r\n `Cannot promote to director: a non-director coordinator is already in use ` +\r\n `(${running} running, ${idle} idle, ${status.pendingTasks} pending tasks). ` +\r\n `Stop the existing subagents with /fleet kill <id> or wait for them to finish, ` +\r\n `then retry — or restart wstack with --director to start in director mode.`;\r\n return null;\r\n }\r\n // Force director mode on so ensureCoordinator builds a Director.\r\n this.opts.directorMode = true;\r\n // Derive fleet paths from fleetRoot when available.\r\n if (this.opts.fleetRoot && !this.opts.manifestPath) {\r\n this.opts.manifestPath = path.join(this.opts.fleetRoot, 'fleet.json');\r\n }\r\n if (this.opts.fleetRoot && !this.opts.sharedScratchpadPath) {\r\n this.opts.sharedScratchpadPath = path.join(this.opts.fleetRoot, 'shared');\r\n }\r\n if (this.opts.fleetRoot && !this.opts.sessionsRoot) {\r\n this.opts.sessionsRoot = path.join(this.opts.fleetRoot, 'subagents');\r\n }\r\n if (this.opts.fleetRoot && !this.opts.stateCheckpointPath) {\r\n this.opts.stateCheckpointPath = path.join(this.opts.fleetRoot, 'director-state.json');\r\n }\r\n await this.ensureDirector();\r\n return this.director ?? null;\r\n }\r\n\r\n /**\r\n * True when this host is running in director mode. Surfaces the mode\r\n * to slash commands and tests without exposing the underlying Director\r\n * (which would let callers bypass the host's coordination layer).\r\n */\r\n isDirectorMode(): boolean {\r\n return !!this.director;\r\n }\r\n\r\n /**\r\n * Why the most recent `promoteToDirector` call returned null. Cleared\r\n * implicitly on the next successful promotion. The delegate tool reads\r\n * this so the LLM sees the actual blocker (e.g. \"3 running subagents,\r\n * wait or /fleet kill\") instead of a generic \"Director could not be\r\n * activated\" message that gives no path forward.\r\n */\r\n getPromotionBlockReason(): string | null {\r\n return this.promotionBlockReason;\r\n }\r\n\r\n /**\r\n * Terminate a single subagent. Returns true when the subagent existed\r\n * (regardless of whether stop() succeeded or it was already idle),\r\n * false when no coordinator has been created yet — meaning the user\r\n * called /fleet kill before any /spawn, and there's nothing to do.\r\n */\r\n async kill(subagentId: string): Promise<boolean> {\r\n if (!this.coordinator) return false;\r\n await this.coordinator.stop(subagentId);\r\n return true;\r\n }\r\n\r\n async stopAll(): Promise<void> {\r\n if (this.coordinator) {\r\n await this.coordinator.stopAll();\r\n }\r\n }\r\n}\r\n// Workaround: TOKENS reference satisfies unused-import lint without being\r\n// active runtime usage — included for clarity that the coordinator\r\n// shares the container's permission policy etc. via the agent factory.\r\nvoid TOKENS;\r\n","import type { InputReader, Tool } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport { renderDiff } from './diff-renderer.js';\nimport { theme } from './theme.js';\n\nexport type PromptDecision = 'yes' | 'no' | 'always' | 'deny';\n\n/** Signature the Agent expects for confirming tool calls. */\nexport type ConfirmAwaiter = (\n tool: Tool,\n input: unknown,\n toolUseId: string,\n suggestedPattern: string,\n) => Promise<'yes' | 'no' | 'always' | 'deny'>;\n\nexport function makePromptDelegate(reader: InputReader) {\n return async (tool: Tool, input: unknown, suggestedPattern: string): Promise<PromptDecision> => {\n // Terminal bell (\\x07) to alert the user that action is required.\n // Without this, the prompt can be easily missed when output is\n // scrolling or the user has switched to another window.\n process.stdout.write('\\x07');\n process.stdout.write(`\\n${theme.warn('⚠ APPROVAL REQUIRED')} ${theme.primary('│')} ${theme.bold(tool.name)}\\n`);\n process.stdout.write(`${color.dim(stringifyInput(input))}\\n`);\n\n if (tool.name === 'edit' && hasDiff(input)) {\n const inp = input as { diff?: unknown };\n const diff = typeof inp.diff === 'string' ? inp.diff : '';\n if (diff) process.stdout.write(`${renderDiff(diff)}\\n`);\n }\n\n process.stdout.write(color.dim('─────────────────\\n'));\n const answer = await reader.readKey(\n `${theme.bold('[y]')}es ${theme.bold('[n]')}o ${theme.bold('[a]')}lways allow (${suggestedPattern}) ${theme.bold('[d]')}eny: `,\n [\n { key: 'y', label: 'yes', value: 'yes' },\n { key: 'n', label: 'no', value: 'no' },\n { key: 'a', label: 'always', value: 'always' },\n { key: 'd', label: 'deny', value: 'deny' },\n ],\n );\n return answer as PromptDecision;\n };\n}\n\n/**\n * Create a ConfirmAwaiter for the CLI path. Wraps makePromptDelegate\n * with the ConfirmAwaiter type signature expected by the Agent.\n */\nexport function makeConfirmAwaiter(reader: InputReader): ConfirmAwaiter {\n const delegate = makePromptDelegate(reader);\n return async (tool: Tool, input: unknown, _toolUseId: string, suggestedPattern: string) => {\n const result = await delegate(tool, input, suggestedPattern);\n return result as 'yes' | 'no' | 'always' | 'deny';\n };\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","import type { EventBus, TokenCounter } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.js';\nimport { fmtTok } from './utils.js';\n\ninterface ToolStat {\n ok: number;\n fail: number;\n totalMs: number;\n}\n\n/**\n * Accumulates per-session stats by listening to EventBus events. Designed\n * to be created once in main(), live for the whole CLI invocation (single-shot\n * or REPL), and produce the closing report when asked.\n *\n * Cost is intentionally not tracked here — TokenCounter is the authority.\n */\nexport class SessionStats {\n private readonly tokenCounter: TokenCounter;\n private readonly startedAt = Date.now();\n\n private apiRequests = 0;\n private iterations = 0;\n private errors = 0;\n\n private readonly toolStats = new Map<string, ToolStat>();\n private readonly readPaths = new Set<string>();\n private readonly editedPaths = new Set<string>();\n private readonly writtenPaths = new Set<string>();\n private bytesWritten = 0;\n private bashCommands = 0;\n private fetches = 0;\n\n constructor(events: EventBus, tokenCounter: TokenCounter) {\n this.tokenCounter = tokenCounter;\n events.on('provider.response', () => {\n this.apiRequests++;\n });\n events.on('iteration.completed', () => {\n this.iterations++;\n });\n events.on('error', () => {\n this.errors++;\n });\n events.on('tool.executed', (e) => {\n const slot = this.toolStats.get(e.name) ?? { ok: 0, fail: 0, totalMs: 0 };\n if (e.ok) slot.ok++;\n else slot.fail++;\n slot.totalMs += e.durationMs;\n this.toolStats.set(e.name, slot);\n\n const input = e.input as Record<string, unknown> | undefined;\n // Side-effect counts are attempt-based (count failed shells / fetches too —\n // the user wants to see \"the agent tried to run 4 commands\").\n if (e.name === 'bash') this.bashCommands++;\n else if (e.name === 'fetch') this.fetches++;\n\n // File-path tracking is success-only: a failed read or edit didn't\n // actually touch the file, so don't claim it did.\n if (!e.ok) return;\n const path = typeof input?.path === 'string' ? (input.path as string) : undefined;\n if (e.name === 'read' && path) this.readPaths.add(path);\n else if (e.name === 'edit' && path) this.editedPaths.add(path);\n else if (e.name === 'write' && path) {\n this.writtenPaths.add(path);\n const content = typeof input?.content === 'string' ? (input.content as string) : '';\n this.bytesWritten += Buffer.byteLength(content, 'utf8');\n }\n });\n }\n\n hasActivity(): boolean {\n return (\n this.apiRequests > 0 ||\n this.iterations > 0 ||\n this.toolStats.size > 0 ||\n this.tokenCounter.total().input > 0\n );\n }\n\n /**\n * Build the report string. Returns null when there's no recorded\n * activity yet — caller decides whether to emit a placeholder or stay\n * silent. Splitting `format()` out of `render()` lets the TUI's slash\n * dispatcher take the string and turn it into a history entry, while\n * REPL keeps the old direct-write path.\n */\n format(): string | null {\n if (!this.hasActivity()) return null;\n const u = this.tokenCounter.total();\n const cost = this.tokenCounter.estimateCost();\n const elapsedSec = ((Date.now() - this.startedAt) / 1000).toFixed(1);\n\n const lines: string[] = [];\n lines.push('');\n lines.push(color.bold('Session report'));\n lines.push(color.dim('─'.repeat(40)));\n lines.push(` Elapsed: ${elapsedSec}s`);\n lines.push(` Iterations: ${this.iterations}`);\n lines.push(` API requests: ${this.apiRequests}`);\n if (this.errors > 0) {\n lines.push(` Errors: ${color.yellow(String(this.errors))}`);\n }\n lines.push('');\n lines.push(\n ` Tokens: in ${fmtTok(u.input)} out ${fmtTok(u.output)}${u.cacheRead ? ` cacheR ${fmtTok(u.cacheRead)}` : ''}${u.cacheWrite ? ` cacheW ${fmtTok(u.cacheWrite)}` : ''}`,\n );\n const cache = this.tokenCounter.cacheStats();\n if (cache.readTokens > 0 || cache.writeTokens > 0) {\n const pct = (cache.hitRatio * 100).toFixed(1);\n lines.push(\n ` Prompt cache: ${pct}% hit ${color.dim(`(${fmtTok(cache.readTokens)} read / ${fmtTok(cache.writeTokens)} write)`)}`,\n );\n }\n if (cost.total > 0) {\n lines.push(\n ` Cost: $${cost.total.toFixed(4)}${color.dim(` (in $${cost.input.toFixed(4)} / out $${cost.output.toFixed(4)})`)}`,\n );\n } else {\n lines.push(` Cost: ${color.dim('$0 (no pricing on this plan)')}`);\n }\n\n if (this.toolStats.size > 0) {\n lines.push('');\n lines.push(` ${color.bold('Tool calls')}`);\n const sorted = [...this.toolStats.entries()].sort(\n (a, b) => b[1].ok + b[1].fail - (a[1].ok + a[1].fail),\n );\n for (const [name, s] of sorted) {\n const total = s.ok + s.fail;\n const failPart = s.fail > 0 ? color.yellow(` (${s.fail} failed)`) : '';\n const avgMs = total > 0 ? Math.round(s.totalMs / total) : 0;\n lines.push(\n ` ${name.padEnd(12)} ${String(total).padStart(3)}× ${color.dim(`avg ${avgMs}ms`)}${failPart}`,\n );\n }\n }\n\n const fileActivity =\n this.readPaths.size > 0 ||\n this.editedPaths.size > 0 ||\n this.writtenPaths.size > 0 ||\n this.bytesWritten > 0;\n if (fileActivity) {\n lines.push('');\n lines.push(` ${color.bold('Files')}`);\n if (this.readPaths.size > 0)\n lines.push(\n ` read: ${this.readPaths.size} ${color.dim(samplePaths(this.readPaths))}`,\n );\n if (this.editedPaths.size > 0)\n lines.push(\n ` edited: ${this.editedPaths.size} ${color.dim(samplePaths(this.editedPaths))}`,\n );\n if (this.writtenPaths.size > 0) {\n const bytes = this.bytesWritten;\n const byteStr = bytes > 1024 ? `${(bytes / 1024).toFixed(1)}KB` : `${bytes}B`;\n lines.push(\n ` written: ${this.writtenPaths.size} (${byteStr}) ${color.dim(samplePaths(this.writtenPaths))}`,\n );\n }\n }\n\n if (this.bashCommands > 0 || this.fetches > 0) {\n lines.push('');\n if (this.bashCommands > 0) lines.push(` Shell commands: ${this.bashCommands}`);\n if (this.fetches > 0) lines.push(` Web fetches: ${this.fetches}`);\n }\n\n lines.push('');\n return lines.join('\\n');\n }\n\n render(renderer: TerminalRenderer): void {\n const text = this.format();\n if (text === null) return;\n renderer.write(`${text}\\n`);\n }\n}\n\nfunction samplePaths(set: Set<string>): string {\n const arr = [...set];\n if (arr.length <= 2) return arr.join(', ');\n return `${arr[0]}, … (+${arr.length - 1} more)`;\n}\n","import { color } from '@wrongstack/core';\nimport { fmtTok } from './utils.js';\n\nconst FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\nconst FILLED = '█';\nconst EMPTY = '░';\n\nexport interface ContextInfo {\n used: number;\n max: number;\n}\n\n/**\n * Minimal single-line spinner. Writes to stderr so it doesn't get mixed with\n * the agent's stdout output (assistant text, tool diffs). Auto-no-ops outside\n * a TTY so logs don't get spammed with control codes.\n *\n * When a {@link ContextInfo} is set via {@link setContext}, the spinner line\n * appends a compact `ctx ████░░ 42% (12k/200k)` chip so the user can see\n * how full the model's context window is while waiting for a response.\n */\nexport class Spinner {\n private timer?: NodeJS.Timeout;\n private frame = 0;\n private active = false;\n private label = '';\n private startedAt = 0;\n private context?: ContextInfo;\n private readonly out: NodeJS.WriteStream;\n private readonly enabled: boolean;\n\n constructor(out: NodeJS.WriteStream = process.stderr) {\n this.out = out;\n this.enabled = Boolean(out.isTTY) && !process.env.NO_COLOR;\n }\n\n start(label: string): void {\n if (!this.enabled || this.active) return;\n this.label = label;\n this.frame = 0;\n this.active = true;\n this.startedAt = Date.now();\n this.render();\n this.timer = setInterval(() => {\n this.frame = (this.frame + 1) % FRAMES.length;\n this.render();\n }, 80);\n this.timer.unref?.();\n }\n\n stop(): void {\n if (!this.active) return;\n this.active = false;\n if (this.timer) clearInterval(this.timer);\n this.timer = undefined;\n this.clearLine();\n }\n\n /** Stop and persist a one-line note where the spinner was (e.g. \"✓ done in 1.4s\"). */\n stopWith(note: string): void {\n this.stop();\n this.out.write(`${note}\\n`);\n }\n\n /** Update the live context-window chip shown on the spinner line. */\n setContext(ctx: ContextInfo | undefined): void {\n this.context = ctx;\n }\n\n private render(): void {\n const elapsed = ((Date.now() - this.startedAt) / 1000).toFixed(1);\n let line = `${color.amber(FRAMES[this.frame] ?? '')} ${this.label} ${color.dim(`${elapsed}s`)}`;\n if (this.context && this.context.max > 0) {\n line += ' ' + renderContextChip(this.context);\n }\n this.clearLine();\n this.out.write(line);\n }\n\n private clearLine(): void {\n if (!this.enabled) return;\n this.out.write('\\r\\x1b[2K');\n }\n}\n\nfunction renderContextChip(ctx: ContextInfo): string {\n const ratio = Math.max(0, Math.min(1, ctx.used / ctx.max));\n const pct = Math.round(ratio * 100);\n const chipColor = ratio >= 0.85 ? color.red : ratio >= 0.65 ? color.yellow : color.cyan;\n const bar = renderProgress(ratio, 8);\n return (\n color.dim('ctx ') +\n chipColor(bar) +\n chipColor(` ${pct}%`) +\n color.dim(` (${fmtTok(ctx.used)}/${fmtTok(ctx.max)})`)\n );\n}\n\nfunction 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","import {\r\n Agent,\r\n AutoCompactionMiddleware,\r\n type AgentPipelines,\r\n type Context,\r\n type EventBus,\r\n type Logger,\r\n type ModelsRegistry,\r\n type Provider,\r\n type ProviderRegistry,\r\n type ToolRegistry,\r\n createDefaultPipelines,\r\n estimateRequestTokens,\r\n} from '@wrongstack/core';\r\nimport { capabilitiesFor } from '@wrongstack/providers';\r\n\r\ntype CompactionDriver = ConstructorParameters<typeof AutoCompactionMiddleware>[0];\r\n\r\nexport function setupPipelines(params: {\r\n events: EventBus;\r\n logger: Logger;\r\n}): AgentPipelines {\r\n const { events, logger } = params;\r\n const pipelines = createDefaultPipelines();\r\n\r\n const installBoundary = <T>(p: {\r\n setErrorHandler: (\r\n h: (ev: { middleware: string; owner?: string; err: unknown }) => 'rethrow' | 'swallow',\r\n ) => unknown;\r\n }) => {\r\n p.setErrorHandler((ev) => {\r\n const fromPlugin = !!ev.owner && ev.owner !== 'core';\r\n logger.error(\r\n `Pipeline middleware \"${ev.middleware}\" crashed (owner=${ev.owner ?? 'unknown'}); ${fromPlugin ? 'swallowed' : 'rethrown'}`,\r\n ev.err,\r\n );\r\n events.emit('error', {\r\n err: ev.err instanceof Error ? ev.err : new Error(String(ev.err)),\r\n phase: `pipeline:${ev.middleware}`,\r\n });\r\n return fromPlugin ? 'swallow' : 'rethrow';\r\n });\r\n };\r\n installBoundary(pipelines.request);\r\n installBoundary(pipelines.response);\r\n installBoundary(pipelines.toolCall);\r\n installBoundary(pipelines.userInput);\r\n installBoundary(pipelines.assistantOutput);\r\n installBoundary(pipelines.contextWindow);\r\n return pipelines;\r\n}\r\n\r\nexport async function setupCompaction(params: {\r\n compactor: CompactionDriver;\r\n events: EventBus;\r\n modelsRegistry: ModelsRegistry;\r\n context: Context;\r\n config: {\r\n context: {\r\n autoCompact?: boolean;\r\n warnThreshold: number;\r\n softThreshold: number;\r\n hardThreshold: number;\r\n effectiveMaxContext?: number;\r\n };\r\n };\r\n provider: Provider;\r\n pipelines: AgentPipelines;\r\n}): Promise<{ effectiveMaxContext: number; autoCompactor: AutoCompactionMiddleware | undefined }> {\r\n const { compactor, events, modelsRegistry, context, config, provider, pipelines } = params;\r\n const resolvedCaps = await capabilitiesFor(modelsRegistry, provider.id, context.model).catch(() => undefined);\r\n const effectiveMaxContext =\r\n config.context.effectiveMaxContext ??\r\n (resolvedCaps as { maxContext?: number } | undefined)?.maxContext ??\r\n provider.capabilities.maxContext;\r\n let autoCompactor: AutoCompactionMiddleware | undefined;\r\n if (config.context.autoCompact !== false) {\r\n autoCompactor = new AutoCompactionMiddleware(\r\n compactor,\r\n effectiveMaxContext,\r\n // Use the full API request estimator: messages + system prompt + tool definitions.\r\n // This matches what the provider actually counts as input tokens.\r\n (ctx) => estimateRequestTokens(ctx.messages, ctx.systemPrompt, ctx.tools ?? []).total,\r\n {\r\n warn: config.context.warnThreshold,\r\n soft: config.context.softThreshold,\r\n hard: config.context.hardThreshold,\r\n },\r\n { aggressiveOn: 'soft', failureMode: 'throw_on_hard', events },\r\n );\r\n pipelines.contextWindow.use({ name: 'AutoCompaction', handler: autoCompactor.handler() });\r\n }\r\n return { effectiveMaxContext, autoCompactor };\r\n}\r\n\r\nexport function createAgent(params: {\r\n container: import('@wrongstack/core').Container;\r\n tools: ToolRegistry;\r\n providers: ProviderRegistry;\r\n events: EventBus;\r\n pipelines: AgentPipelines;\r\n context: Context;\r\n config: {\r\n tools: {\r\n maxIterations: number;\r\n iterationTimeoutMs: number;\r\n defaultExecutionStrategy: 'parallel' | 'sequential' | 'smart';\r\n perIterationOutputCapBytes: number;\r\n };\r\n };\r\n confirmAwaiter: import('@wrongstack/core').AgentInit['confirmAwaiter'];\r\n}): Agent {\r\n return new Agent({\r\n container: params.container,\r\n tools: params.tools,\r\n providers: params.providers,\r\n events: params.events,\r\n pipelines: params.pipelines,\r\n context: params.context,\r\n maxIterations: params.config.tools.maxIterations,\r\n iterationTimeoutMs: params.config.tools.iterationTimeoutMs,\r\n executionStrategy: params.config.tools.defaultExecutionStrategy,\r\n perIterationOutputCapBytes: params.config.tools.perIterationOutputCapBytes,\r\n confirmAwaiter: params.confirmAwaiter,\r\n });\r\n}\r\n","import { ProviderRegistry, type Config, type Logger, type ModelsRegistry } from '@wrongstack/core';\nimport type { ResolvedProvider } from '@wrongstack/core';\nimport {\n buildProviderFactoriesFromRegistry,\n makeProviderFromConfig,\n} from '@wrongstack/providers';\n\nexport interface ProviderSetupResult {\n resolvedProvider: ResolvedProvider | undefined;\n provider: ReturnType<ProviderRegistry['create']>;\n providerRegistry: ProviderRegistry;\n}\n\nexport async function setupProvider(params: {\n config: Config;\n modelsRegistry: ModelsRegistry;\n logger: Logger;\n}): Promise<ProviderSetupResult> {\n const { config, modelsRegistry, logger } = params;\n\n // Resolve provider details from models.dev.\n const savedProviderCfg = config.providers?.[config.provider];\n let resolvedProvider = await modelsRegistry.getProvider(config.provider).catch(() => undefined);\n if (!resolvedProvider && savedProviderCfg?.type && savedProviderCfg.type !== config.provider) {\n resolvedProvider = await modelsRegistry\n .getProvider(savedProviderCfg.type)\n .catch(() => undefined);\n }\n if (!resolvedProvider) {\n if (!savedProviderCfg?.family) {\n logger.warn(\n `Provider \"${config.provider}\" not found in models.dev. Continuing with raw config.`,\n );\n }\n } else if (resolvedProvider.family === 'unsupported' && !savedProviderCfg?.family) {\n throw Object.assign(\n new Error(\n `Provider \"${config.provider}\" uses an unsupported wire family (${resolvedProvider.npm}). ` +\n `Install a plugin to enable it, or pick a different provider.`,\n ),\n { code: 'UNSUPPORTED_PROVIDER' },\n );\n }\n\n // Provider registry — populated dynamically from models.dev catalog.\n const providerRegistry = new ProviderRegistry();\n if (config.features.modelsRegistry) {\n try {\n const factories = await buildProviderFactoriesFromRegistry({\n registry: modelsRegistry,\n log: logger,\n });\n for (const f of factories) providerRegistry.register(f);\n } catch (err) {\n throw new Error(\n `Failed to load models.dev registry: ${err instanceof Error ? err.message : err}\\n` +\n `Try \\`wstack models refresh\\` once you have network access, or run with --no-features.`,\n );\n }\n }\n\n // Provider instance — registry-driven by default, falls through to config-only.\n const providerConfig = config.providers?.[config.provider] ?? {\n type: config.provider,\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n };\n let provider: ReturnType<ProviderRegistry['create']>;\n try {\n const cfgWithType = { ...providerConfig, type: config.provider };\n if (config.features.modelsRegistry && providerRegistry.has(config.provider)) {\n provider = providerRegistry.create(cfgWithType);\n } else {\n provider = makeProviderFromConfig(config.provider, cfgWithType);\n }\n } catch (err) {\n throw new Error(\n `Failed to create provider: ${err instanceof Error ? err.message : err}`,\n );\n }\n\n return { resolvedProvider, provider, providerRegistry };\n}\n","import * as path from 'node:path';\nimport {\n Context,\n DefaultAttachmentStore,\n QueueStore,\n RecoveryLock,\n type AbandonedSession,\n type SessionStore,\n type SessionWriter,\n type WstackPaths,\n attachTodosCheckpoint,\n loadDirectorState,\n loadPlan,\n loadTodosCheckpoint,\n} from '@wrongstack/core';\n\nexport interface SessionResult {\n session: SessionWriter;\n sessionRef: { current?: SessionWriter };\n context: Context;\n restoredMessages: import('@wrongstack/core').Message[];\n attachments: DefaultAttachmentStore;\n recoveryLock: RecoveryLock;\n queueStore: QueueStore;\n planPath: string;\n detachTodosCheckpoint: () => void;\n}\n\nexport async function setupSession(params: {\n config: { model: string; provider: string };\n wpaths: WstackPaths;\n projectRoot: string;\n cwd: string;\n sessionStore: SessionStore;\n systemPrompt: import('@wrongstack/core').TextBlock[];\n provider: import('@wrongstack/core').Provider;\n tokenCounter: import('@wrongstack/core').TokenCounter;\n renderer: { writeInfo(msg: string): void; writeError(msg: string): void };\n flags: Record<string, unknown>;\n onRecovery: (\n abandoned: AbandonedSession,\n autoRecover: boolean,\n ) => Promise<'resume' | 'delete' | 'skip'>;\n}): Promise<SessionResult> {\n const { config, wpaths, projectRoot, cwd, sessionStore, systemPrompt, provider, tokenCounter, renderer, flags, onRecovery } = params;\n\n let resumeId = typeof flags['resume'] === 'string' ? (flags['resume'] as string) : undefined;\n\n const recoveryLock = new RecoveryLock({ dir: wpaths.projectSessions, sessionStore });\n if (!resumeId && !flags['no-recovery']) {\n const abandoned = await recoveryLock.checkAbandoned();\n if (abandoned && abandoned.messageCount > 0) {\n const choice = await onRecovery(abandoned, !!flags['recover']);\n if (choice === 'resume') resumeId = abandoned.sessionId;\n else if (choice === 'delete') { await sessionStore.delete(abandoned.sessionId).catch(() => undefined); await recoveryLock.clear(); }\n else await recoveryLock.clear();\n } else if (abandoned) {\n await sessionStore.delete(abandoned.sessionId).catch(() => undefined);\n await recoveryLock.clear();\n }\n }\n\n let session: SessionWriter | undefined;\n let restoredMessages: import('@wrongstack/core').Message[] = [];\n if (resumeId) {\n try {\n const resumed = await sessionStore.resume(resumeId);\n session = resumed.writer;\n restoredMessages = resumed.data.messages;\n renderer.writeInfo(`Resumed session ${resumed.data.metadata.id} — ${restoredMessages.length} messages, ${resumed.data.usage.input + resumed.data.usage.output} tokens used previously.`);\n } catch (err) {\n renderer.writeError(`Resume failed: ${err instanceof Error ? err.message : String(err)}`);\n throw Object.assign(new Error('RESUME_FAILED'), { exitCode: 2 });\n }\n } else {\n session = await sessionStore.create({ id: '', title: '', model: config.model, provider: config.provider });\n }\n\n const sessionRef: { current?: SessionWriter } = { current: session };\n await recoveryLock.write(session!.id).catch(() => undefined);\n\n const attachments = new DefaultAttachmentStore({ spoolDir: path.join(wpaths.projectSessions, session!.id, 'attachments') });\n const queueStore = new QueueStore({ dir: path.join(wpaths.projectSessions, session!.id) });\n\n const ctxSignal = new AbortController().signal;\n const context = new Context({ systemPrompt, provider, session: session!, signal: ctxSignal, tokenCounter, cwd, projectRoot, model: config.model });\n if (restoredMessages.length > 0) context.state.replaceMessages(restoredMessages);\n\n const todosCheckpointPath = path.join(wpaths.projectSessions, `${session!.id}.todos.json`);\n if (resumeId) {\n try {\n const restoredTodos = await loadTodosCheckpoint(todosCheckpointPath);\n if (restoredTodos && restoredTodos.length > 0) {\n context.state.replaceTodos(restoredTodos);\n renderer.writeInfo(`Restored ${restoredTodos.length} todo${restoredTodos.length === 1 ? '' : 's'} from previous run.`);\n }\n } catch { /* best-effort */ }\n }\n const detachTodosCheckpoint = attachTodosCheckpoint(context.state, todosCheckpointPath, session!.id);\n\n const planPath = path.join(wpaths.projectSessions, `${session!.id}.plan.json`);\n context.state.setMeta('plan.path', planPath);\n\n if (resumeId) {\n try {\n const fleetRoot = path.join(wpaths.projectSessions, session!.id);\n const dirState = await loadDirectorState(path.join(fleetRoot, 'director-state.json'));\n if (dirState) {\n const tCounts: Record<string, number> = {};\n for (const t of dirState.tasks) tCounts[t.status] = (tCounts[t.status] ?? 0) + 1;\n const summary = Object.entries(tCounts).map(([k, v]) => `${v} ${k}`).join(', ');\n renderer.writeInfo(`Prior fleet state: ${dirState.subagents.length} subagent${dirState.subagents.length === 1 ? '' : 's'}, tasks ${summary || '(none)'}.`);\n }\n } catch { /* ignore */ }\n try {\n const plan = await loadPlan(planPath);\n if (plan && plan.items.length > 0) {\n const open = plan.items.filter((p) => p.status !== 'done').length;\n const done = plan.items.length - open;\n renderer.writeInfo(`Plan: ${plan.items.length} item${plan.items.length === 1 ? '' : 's'} (${open} open, ${done} done). Use /plan to review.`);\n }\n } catch { /* ignore */ }\n }\n\n return { session: session!, sessionRef, context, restoredMessages, attachments, recoveryLock, queueStore, planPath, detachTodosCheckpoint };\n}\n","import { writeFileSync } from 'node:fs';\r\nimport * as fs from 'node:fs/promises';\r\nimport { createRequire } from 'node:module';\r\nimport * as path from 'node:path';\r\nimport {\r\n Agent,\r\n AutoCompactionMiddleware,\r\n type Config,\r\n Container,\r\n Context,\r\n DefaultAttachmentStore,\r\n DefaultConfigStore,\r\n DefaultErrorHandler,\r\n DefaultHealthRegistry,\r\n DefaultLogger,\r\n DefaultMemoryStore,\r\n DefaultModeStore,\r\n DefaultModelsRegistry,\r\n DefaultPathResolver,\r\n type DefaultPermissionPolicy,\r\n DefaultRetryPolicy,\r\n DefaultSecretScrubber,\r\n DefaultSessionStore,\r\n DefaultSkillLoader,\r\n DefaultSystemPromptBuilder,\r\n DefaultTokenCounter,\r\n type Director,\r\n EventBus,\r\n FLEET_ROSTER,\r\n type HealthRegistry,\r\n HybridCompactor,\r\n InMemoryMetricsSink,\r\n type MetricsServerHandle,\r\n type MetricsSink,\r\n type Plugin,\r\n type ProviderRegistry,\r\n QueueStore,\r\n RecoveryLock,\r\n SlashCommandRegistry,\r\n type SystemPromptBuilder,\r\n TOKENS,\r\n ToolRegistry,\r\n attachTodosCheckpoint,\r\n color,\r\n createContextManagerTool,\r\n createDefaultPipelines,\r\n createDelegateTool,\r\n loadDirectorState,\r\n loadPlan,\r\n loadPlugins,\r\n loadTodosCheckpoint,\r\n startMetricsServer,\r\n wireMetricsToEvents,\r\n} from '@wrongstack/core';\r\nimport { MCPRegistry } from '@wrongstack/mcp';\r\nimport { capabilitiesFor, makeProviderFromConfig } from '@wrongstack/providers';\r\nimport { createDefaultContainer } from '@wrongstack/runtime';\r\nimport { builtinToolsPack, forgetTool, rememberTool } from '@wrongstack/tools';\r\nimport { boot } from './boot.js';\r\nimport { type ExecutionDeps, execute } from './execution.js';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport { MultiAgentHost } from './multi-agent.js';\r\nimport { makeConfirmAwaiter, makePromptDelegate } from './permission-prompt.js';\r\nimport { runPluginManagementCommand } from './plugin-management.js';\r\nimport { buildPickableProviders } from './provider-helpers.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\nimport { SessionStats } from './session-stats.js';\r\nimport { buildBuiltinSlashCommands } from './slash-commands/index.js';\r\nimport { Spinner } from './spinner.js';\r\nimport { fmtTaskResultLine, fmtTok, patchConfig } from './utils.js';\r\nimport { createAgent, setupCompaction, setupPipelines } from './wiring/pipeline.js';\r\nimport { setupProvider } from './wiring/provider.js';\r\nimport { setupSession } from './wiring/session.js';\r\n\r\nfunction resolveBundledSkillsDir(): string | undefined {\r\n try {\r\n const req = createRequire(import.meta.url);\r\n const corePkg = req.resolve('@wrongstack/core/package.json');\r\n return path.join(path.dirname(corePkg), 'skills');\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nimport { CLI_VERSION } from './version.js';\r\nexport { CLI_VERSION };\r\n\r\ntype ContainerPromptDelegate = (\r\n tool: unknown,\r\n input: unknown,\r\n suggestedPattern: string,\r\n) => Promise<'yes' | 'no' | 'always' | 'deny'>;\r\n\r\nfunction buildPluginOptions(config: Config): Record<string, Record<string, unknown>> {\r\n const options: Record<string, Record<string, unknown>> = {};\r\n for (const entry of config.plugins ?? []) {\r\n if (typeof entry !== 'object') continue;\r\n if (entry.options) options[entry.name] = { ...entry.options };\r\n }\r\n for (const [name, value] of Object.entries(config.extensions ?? {})) {\r\n options[name] = { ...(options[name] ?? {}), ...value };\r\n }\r\n return options;\r\n}\r\n\r\nexport async function main(argv: string[]): Promise<number> {\r\n const ctx = await boot(argv);\r\n if (typeof ctx === 'number') return ctx;\r\n let {\r\n config,\r\n vault,\r\n wpaths,\r\n cwd,\r\n projectRoot,\r\n userHome,\r\n flags,\r\n positional,\r\n modelsRegistry,\r\n renderer,\r\n reader,\r\n logger,\r\n } = ctx;\r\n // PathResolver is created from the resolved projectRoot\r\n const pathResolver = new DefaultPathResolver(cwd);\r\n\r\n // Build container via shared factory\r\n const container = createDefaultContainer({\r\n config, wpaths, logger, modelsRegistry,\r\n permission: {\r\n yolo: config.yolo,\r\n promptDelegate: makePromptDelegate(reader) as unknown as ContainerPromptDelegate,\r\n },\r\n compactor: { preserveK: config.context.preserveK, eliseThreshold: config.context.eliseThreshold },\r\n bundledSkillsDir: config.features.skills ? resolveBundledSkillsDir() : undefined,\r\n });\r\n const configStore = container.resolve(TOKENS.ConfigStore);\r\n container.bind(TOKENS.PathResolver, () => pathResolver);\r\n container.bind(TOKENS.Renderer, () => renderer);\r\n container.bind(TOKENS.InputReader, () => reader);\r\n\r\n // Resolve modeId and modelCapabilities before building system prompt.\r\n const modeStore = container.resolve(TOKENS.ModeStore);\r\n const activeMode = await modeStore.getActiveMode();\r\n let resolvedProvider: import('@wrongstack/core').ResolvedProvider | undefined;\r\n let providerRegistry: ProviderRegistry;\r\n let provider: ReturnType<ProviderRegistry['create']>;\r\n try {\r\n const result = await setupProvider({ config, modelsRegistry, logger });\r\n resolvedProvider = result.resolvedProvider;\r\n providerRegistry = result.providerRegistry;\r\n provider = result.provider;\r\n } catch (err) {\r\n process.stderr.write(`${err instanceof Error ? err.message : err}\\n`);\r\n await reader.close();\r\n return 2;\r\n }\r\n const modeId = activeMode?.id ?? 'default';\r\n const modePrompt = activeMode?.prompt ?? '';\r\n const resolvedModel = await modelsRegistry.getModel(config.provider, config.model);\r\n const modelCapabilities = resolvedModel?.capabilities\r\n ? {\r\n maxContextTokens: resolvedModel.capabilities.maxContext,\r\n supportsTools: resolvedModel.capabilities.tools,\r\n supportsVision: resolvedModel.capabilities.vision,\r\n supportsReasoning: resolvedModel.capabilities.reasoning,\r\n }\r\n : undefined;\r\n\r\n const memoryStore = container.resolve(TOKENS.MemoryStore);\r\n const skillLoader = container.resolve(TOKENS.SkillLoader);\r\n const sessionRef: { current?: import('@wrongstack/core').SessionWriter } = {};\r\n container.bind(TOKENS.SystemPromptBuilder, () =>\r\n new DefaultSystemPromptBuilder({\r\n memoryStore,\r\n skillLoader: config.features.skills ? skillLoader : undefined,\r\n modeStore,\r\n modeId,\r\n modePrompt,\r\n modelCapabilities,\r\n planPath: () =>\r\n sessionRef.current\r\n ? path.join(wpaths.projectSessions, `${sessionRef.current.id}.plan.json`)\r\n : undefined,\r\n }),\r\n );\r\n\r\n // Tool registry\r\n const toolRegistry = new ToolRegistry();\r\n toolRegistry.registerAllOrThrow([...(builtinToolsPack.tools ?? [])], builtinToolsPack.name);\r\n toolRegistry.registerDefault(\r\n createContextManagerTool({ compactor: container.resolve(TOKENS.Compactor) }),\r\n );\r\n if (config.features.memory) {\r\n toolRegistry.register(rememberTool(memoryStore));\r\n toolRegistry.register(forgetTool(memoryStore));\r\n }\r\n\r\n const events = new EventBus();\r\n events.setLogger(logger);\r\n\r\n // Observability — opt-in via --metrics. Writes a snapshot to\r\n // <session-dir>/metrics.json on shutdown so users get a post-run summary\r\n // without standing up a scrape endpoint. The sink is also exposed via the\r\n // /metrics slash command for live inspection mid-session.\r\n let metricsSink: MetricsSink | undefined;\r\n let healthRegistry: HealthRegistry | undefined;\r\n let metricsServerHandle: MetricsServerHandle | undefined;\r\n // --metrics-port implies --metrics (you can't scrape what isn't recorded).\r\n const metricsPortFlag = flags['metrics-port'];\r\n const metricsPort =\r\n typeof metricsPortFlag === 'string' && metricsPortFlag.length > 0\r\n ? Number.parseInt(metricsPortFlag, 10)\r\n : undefined;\r\n if (metricsPort !== undefined && !flags.metrics) flags.metrics = true;\r\n if (flags.metrics) {\r\n metricsSink = new InMemoryMetricsSink();\r\n wireMetricsToEvents(events, metricsSink);\r\n healthRegistry = new DefaultHealthRegistry();\r\n healthRegistry.register({\r\n name: 'session-store',\r\n check: async () => {\r\n try {\r\n await fs.access(wpaths.projectSessions);\r\n return { status: 'healthy' };\r\n } catch (e) {\r\n return { status: 'unhealthy', detail: e instanceof Error ? e.message : 'access denied' };\r\n }\r\n },\r\n });\r\n healthRegistry.register({\r\n name: 'provider',\r\n check: async () => ({\r\n status: 'healthy',\r\n data: { id: config.provider, model: config.model },\r\n }),\r\n });\r\n\r\n const dumpMetrics = () => {\r\n if (!metricsSink) return;\r\n try {\r\n const out = path.join(wpaths.projectSessions, 'metrics.json');\r\n const snap = metricsSink.snapshot();\r\n // Sync write — async fs APIs can't survive process.exit().\r\n writeFileSync(out, JSON.stringify(snap, null, 2));\r\n } catch {\r\n // Snapshot is best-effort — never block shutdown on it.\r\n }\r\n };\r\n process.on('exit', dumpMetrics);\r\n process.on('SIGINT', () => {\r\n dumpMetrics();\r\n process.exit(130);\r\n });\r\n\r\n // L3-C: optional Prometheus scrape endpoint. Bound to 127.0.0.1 by\r\n // default — operators who want network-visible metrics set\r\n // METRICS_HOST=0.0.0.0 explicitly. Failure to bind is logged but does\r\n // not fail the run; the in-process sink keeps recording.\r\n if (metricsPort !== undefined && Number.isFinite(metricsPort)) {\r\n try {\r\n metricsServerHandle = await startMetricsServer({\r\n port: metricsPort,\r\n host: process.env.METRICS_HOST ?? '127.0.0.1',\r\n sink: metricsSink,\r\n // V2-C: mount /healthz on the same listener so k8s probes can\r\n // hit one endpoint per pod for both observability and liveness.\r\n healthRegistry,\r\n });\r\n logger.info(\r\n `metrics endpoint listening on ${metricsServerHandle.url} (healthz on same port)`,\r\n );\r\n process.on('exit', () => {\r\n void metricsServerHandle?.close().catch(() => {});\r\n });\r\n } catch (err) {\r\n logger.warn(\r\n `metrics endpoint failed to start: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Spinner: visible \"thinking…\" line during each model request.\r\n const spinner = new Spinner();\r\n // Track the latest provider request's input-token count so the spinner\r\n // can render a live context-window fullness bar (TUI parity).\r\n let lastInputTokens = 0;\r\n events.on('provider.response', (e) => {\r\n lastInputTokens = e.usage?.input ?? 0;\r\n updateSpinnerContext();\r\n });\r\n events.on('iteration.started', () => {\r\n updateSpinnerContext();\r\n spinner.start(color.dim(`${config.provider}/${config.model} thinking…`));\r\n });\r\n events.on('provider.response', () => {\r\n spinner.stop();\r\n });\r\n events.on('error', () => {\r\n spinner.stop();\r\n });\r\n\r\n // Live streaming output: first text_delta stops the spinner and starts\r\n // writing tokens directly so the user sees the model \"type\".\r\n let streamingActive = false;\r\n events.on('provider.text_delta', (p) => {\r\n if (!streamingActive) {\r\n spinner.stop();\r\n streamingActive = true;\r\n }\r\n renderer.write(p.text);\r\n });\r\n events.on('iteration.completed', () => {\r\n if (streamingActive) {\r\n renderer.write('\\n');\r\n streamingActive = false;\r\n }\r\n });\r\n\r\n // Provider hiccups — render a single friendly line instead of leaving the\r\n // raw JSON body in logger output. retry events show a countdown; error\r\n // events surface a final failure that won't be retried.\r\n events.on('provider.retry', (p) => {\r\n spinner.stop();\r\n if (streamingActive) {\r\n renderer.write('\\n');\r\n streamingActive = false;\r\n }\r\n const secs = (p.delayMs / 1000).toFixed(p.delayMs >= 1000 ? 1 : 2);\r\n process.stderr.write(color.yellow(` ⟳ retry ${p.attempt} in ${secs}s — ${p.description}\\n`));\r\n spinner.start(color.dim(`${config.provider}/${config.model} thinking…`));\r\n });\r\n events.on('provider.error', (p) => {\r\n spinner.stop();\r\n if (streamingActive) {\r\n renderer.write('\\n');\r\n streamingActive = false;\r\n }\r\n process.stderr.write(color.red(` ✗ ${p.description}\\n`));\r\n });\r\n\r\n // Provider instance — registry-driven by default, but falls through to\r\n // Build system prompt\r\n const promptBuilder = container.resolve(TOKENS.SystemPromptBuilder) as SystemPromptBuilder;\r\n const systemPrompt = await promptBuilder.build({\r\n cwd,\r\n projectRoot,\r\n tools: toolRegistry.list(),\r\n provider: config.provider,\r\n model: config.model,\r\n });\r\n\r\n // Session — extracted to wiring/session\r\n const sessionStore = container.resolve(TOKENS.SessionStore);\r\n const tokenCounter = container.resolve(TOKENS.TokenCounter);\r\n const sessResult = await setupSession({\r\n config: { model: config.model, provider: config.provider },\r\n wpaths,\r\n projectRoot,\r\n cwd,\r\n sessionStore,\r\n systemPrompt,\r\n provider,\r\n tokenCounter,\r\n renderer,\r\n flags,\r\n onRecovery: (abandoned, autoRecover) => promptRecovery(reader, renderer, abandoned, autoRecover),\r\n });\r\n const session = sessResult.session;\r\n sessionRef.current = session;\r\n const restoredMessages = sessResult.restoredMessages;\r\n const context = sessResult.context;\r\n const attachments = sessResult.attachments;\r\n const recoveryLock = sessResult.recoveryLock;\r\n const queueStore = sessResult.queueStore;\r\n const planPath = sessResult.planPath;\r\n const detachTodosCheckpoint = sessResult.detachTodosCheckpoint;\r\n\r\n const stats = new SessionStats(events, tokenCounter);\r\n\r\n // Last-N error ring buffer surfaced by /diag.\r\n const errorRing: { ts: string; phase: string; code: string; message: string }[] = [];\r\n events.on('error', (e) => {\r\n const err = e.err as unknown;\r\n const code =\r\n err && typeof err === 'object' && 'code' in err && typeof (err as { code: unknown }).code === 'string'\r\n ? (err as { code: string }).code\r\n : 'UNKNOWN';\r\n const message = e.err instanceof Error ? e.err.message : String(e.err);\r\n errorRing.push({ ts: new Date().toISOString(), phase: e.phase, code, message });\r\n if (errorRing.length > 5) errorRing.shift();\r\n });\r\n\r\n const pipelines = setupPipelines({ events, logger });\r\n const compactor = container.resolve(TOKENS.Compactor);\r\n const { effectiveMaxContext, autoCompactor } = await setupCompaction({ compactor, events, modelsRegistry, context, config, provider, pipelines });\r\n\r\n // Refresh AutoCompactionMiddleware denominator when the active model changes.\r\n const refreshMaxContext = async (providerId: string, modelId: string) => {\r\n if (!autoCompactor) return;\r\n const cap = await capabilitiesFor(modelsRegistry, providerId, modelId).catch(() => undefined);\r\n const mc = (cap as { maxContext?: number } | undefined)?.maxContext ?? config.context.effectiveMaxContext ?? 200_000;\r\n autoCompactor.setMaxContext(mc);\r\n };\r\n\r\n // Helper: keep the spinner's context chip in sync\r\n const updateSpinnerContext = () => {\r\n if (effectiveMaxContext > 0 && lastInputTokens > 0) {\r\n spinner.setContext({ used: lastInputTokens, max: effectiveMaxContext });\r\n } else spinner.setContext(undefined);\r\n };\r\n\r\n const agent = createAgent({ container, tools: toolRegistry, providers: providerRegistry, events, pipelines, context, config, confirmAwaiter: makeConfirmAwaiter(reader) });\r\n\r\n // MCP servers\r\n const mcpRegistry = new MCPRegistry({ toolRegistry, events, log: logger });\r\n if (config.features.mcp) {\r\n for (const cfg of Object.values(config.mcpServers ?? {})) {\r\n try {\r\n await mcpRegistry.start(cfg);\r\n } catch (err) {\r\n logger.warn(`MCP server \"${cfg.name}\" failed to start`, err);\r\n }\r\n }\r\n }\r\n\r\n // Slash registry — created before plugins so plugins can register commands.\r\n const slashRegistry = new SlashCommandRegistry();\r\n\r\n // Plugins\r\n if (config.features.plugins && config.plugins && config.plugins.length > 0) {\r\n const resolvedPlugins: Plugin[] = [];\r\n for (const p of config.plugins) {\r\n if (typeof p === 'object' && p.enabled === false) continue;\r\n const spec = typeof p === 'string' ? p : p.name;\r\n try {\r\n const mod = (await import(spec)) as { default?: Plugin };\r\n if (mod.default) resolvedPlugins.push(mod.default);\r\n } catch (err) {\r\n logger.warn(`Plugin \"${spec}\" failed to load`, err);\r\n }\r\n }\r\n if (resolvedPlugins.length > 0) {\r\n const { default: createApi } = await import('./plugin-api-factory.js');\r\n const pluginOptions = buildPluginOptions(config);\r\n const pluginConfig =\r\n Object.keys(pluginOptions).length > 0\r\n ? patchConfig(config, { extensions: pluginOptions } as Partial<Config>)\r\n : config;\r\n await loadPlugins(resolvedPlugins, {\r\n log: logger,\r\n // Each plugin's `configSchema` is validated against merged\r\n // options from `plugins[].options` and `extensions[name]`.\r\n // The merged view is also exposed as `api.config.extensions`.\r\n pluginOptions,\r\n apiFactory: (plugin) =>\r\n createApi(plugin.name, {\r\n container,\r\n events,\r\n pipelines: pipelines as unknown as Parameters<typeof createApi>[1]['pipelines'],\r\n toolRegistry,\r\n providerRegistry,\r\n slashCommandRegistry: slashRegistry,\r\n mcpRegistry,\r\n config: pluginConfig,\r\n log: logger,\r\n extensions: agent.extensions,\r\n sessionWriter: {\r\n transcriptPath: context.session.transcriptPath,\r\n append: (e: Record<string, unknown> & { type: string; ts: string }) =>\r\n context.session.append(e as Parameters<typeof context.session.append>[0]),\r\n },\r\n metricsSink,\r\n configStore,\r\n }),\r\n });\r\n }\r\n }\r\n\r\n // Build provider+model switch as a single callback. The TUI picker\r\n // calls this after the user confirms a (provider, model) pair; we\r\n // construct a fresh Provider instance, swap it onto the live context,\r\n // and rebuild the frozen config so other consumers see the new ids.\r\n const switchProviderAndModel = (providerId: string, modelId: string): string | null => {\r\n try {\r\n const savedCfg = config.providers?.[providerId];\r\n const resolvedProviderId = savedCfg?.type ?? providerId;\r\n const newCfg = savedCfg ?? {\r\n type: providerId,\r\n apiKey: config.apiKey,\r\n baseUrl: config.baseUrl,\r\n };\r\n const cfgWithType = { ...newCfg, type: resolvedProviderId };\r\n const newProvider =\r\n config.features.modelsRegistry && providerRegistry.has(resolvedProviderId)\r\n ? providerRegistry.create(cfgWithType)\r\n : makeProviderFromConfig(resolvedProviderId, cfgWithType);\r\n context.provider = newProvider;\r\n context.model = modelId;\r\n config = patchConfig(config, { provider: providerId, model: modelId });\r\n // L1-B: propagate the change to the ConfigStore so any subsystem\r\n // that subscribed via .watch() re-renders. Crucially, /diag now\r\n // reads the live provider via the store.\r\n configStore.update({ provider: providerId, model: modelId });\r\n // Refresh AutoCompactionMiddleware denominator for the new model's\r\n // maxContext so threshold triggers (warn/soft/hard) use the correct denominator.\r\n void refreshMaxContext(resolvedProviderId, modelId);\r\n return null;\r\n } catch (err) {\r\n return err instanceof Error ? err.message : String(err);\r\n }\r\n };\r\n\r\n // L1-E: lazily-instantiated multi-agent host. Wired into /spawn and\r\n // /agents slash commands; constructed on first invocation so users\r\n // who never spawn subagents pay nothing.\r\n //\r\n // `--director` upgrades the host to Director mode — same external API,\r\n // but task lifecycle flows through a `Director` so manifest writing\r\n // works and the FleetBus is available for observability hooks. Manifest\r\n // path defaults to `<projectSessions>/<sessionId>/fleet.json`; users can\r\n // override via `WRONGSTACK_FLEET_MANIFEST` if they want a fixed path.\r\n const directorMode = flags['director'] === true;\r\n let director: Director | null = null;\r\n // Autonomy mode: 'off' (default), 'suggest' (show next steps), 'auto' (self-driving)\r\n let autonomyMode: import('./slash-commands/autonomy.js').AutonomyMode = 'off';\r\n // Convention: director artifacts all live under the same fleet root —\r\n // <projectSessions>/<sessionId>/\r\n // ├─ fleet.json (manifest)\r\n // ├─ shared/ (cross-agent scratchpad)\r\n // └─ subagents/ (per-subagent JSONL transcripts)\r\n // The user can override the manifest path with WRONGSTACK_FLEET_MANIFEST\r\n // but the scratchpad + transcripts always sit relative to the session.\r\n const fleetRoot = directorMode ? path.join(wpaths.projectSessions, session.id) : undefined;\r\n const manifestPath = directorMode\r\n ? typeof process.env['WRONGSTACK_FLEET_MANIFEST'] === 'string'\r\n ? process.env['WRONGSTACK_FLEET_MANIFEST']\r\n : path.join(fleetRoot!, 'fleet.json')\r\n : undefined;\r\n const sharedScratchpadPath = directorMode ? path.join(fleetRoot!, 'shared') : undefined;\r\n const subagentSessionsRoot = directorMode ? path.join(fleetRoot!, 'subagents') : undefined;\r\n // Live director state checkpoint — written incrementally to disk on\r\n // every spawn/assign/complete event so a crashed director leaves a\r\n // recoverable snapshot. Distinct from manifestPath (final record).\r\n const stateCheckpointPath = directorMode\r\n ? path.join(fleetRoot!, 'director-state.json')\r\n : undefined;\r\n // Always derive a fleetRoot for runtime promotion — /director needs\r\n // a base dir to write manifest + scratchpad + per-subagent JSONLs into.\r\n const fleetRootForPromotion = path.join(wpaths.projectSessions, session.id);\r\n const multiAgentHost = new MultiAgentHost(\r\n {\r\n container,\r\n toolRegistry,\r\n providerRegistry,\r\n configStore,\r\n events,\r\n systemPromptBuilder: promptBuilder,\r\n session,\r\n tokenCounter,\r\n projectRoot,\r\n cwd,\r\n },\r\n {\r\n directorMode,\r\n manifestPath,\r\n sharedScratchpadPath,\r\n sessionsRoot: subagentSessionsRoot,\r\n directorRunId: session.id,\r\n fleetRoot: fleetRootForPromotion,\r\n stateCheckpointPath,\r\n sessionWriter: session,\r\n },\r\n );\r\n // ALWAYS register the `delegate` tool, even in non-director mode. It\r\n // auto-promotes the host to director mode on first call so the LLM\r\n // never has to know upfront whether multi-agent is \"on\" — it just\r\n // calls `delegate({ role, task })` when it judges a subtask warrants\r\n // a dedicated subagent. The system-prompt builder picks up this tool\r\n // and surfaces a \"Delegation\" section teaching the model when to use\r\n // it; without that block, the tool sits idle.\r\n toolRegistry.register(\r\n createDelegateTool({\r\n host: multiAgentHost,\r\n roster: FLEET_ROSTER,\r\n // Wire the per-subagent transcript location so the tool can\r\n // extract partial output on timeout / budget exhaustion. Without\r\n // this, a subagent that hit its iteration cap returns an empty\r\n // result and the host LLM has no idea what work was done.\r\n sessionsRoot: subagentSessionsRoot,\r\n directorRunId: session.id,\r\n }),\r\n );\r\n\r\n if (directorMode) {\r\n // Eagerly build the director so its 8 LLM-callable orchestration\r\n // tools (`spawn_subagent`, `assign_task`, `await_tasks`,\r\n // `ask_subagent`, `roll_up`, `terminate_subagent`, `fleet_status`,\r\n // `fleet_usage`) get registered into the leader's ToolRegistry\r\n // *before* the agent starts streaming. Without this the leader has\r\n // no way to discover the fleet surface and `--director` ends up as\r\n // a manifest-only flag with no orchestration. Pass `FLEET_ROSTER`\r\n // so `spawn_subagent` can accept `role: 'bug-hunter'` shortcuts.\r\n director = await multiAgentHost.ensureDirector();\r\n if (director) {\r\n for (const tool of director.tools(FLEET_ROSTER)) {\r\n toolRegistry.register(tool);\r\n }\r\n renderer.writeInfo(`Director mode enabled. Roster: ${Object.keys(FLEET_ROSTER).join(', ')}`);\r\n renderer.writeInfo(` fleet root → ${fleetRoot}`);\r\n renderer.writeInfo(` manifest → ${manifestPath}`);\r\n renderer.writeInfo(` scratchpad → ${sharedScratchpadPath}`);\r\n renderer.writeInfo(` subagents → ${subagentSessionsRoot}`);\r\n } else {\r\n renderer.writeInfo(`Director mode enabled. Fleet manifest → ${manifestPath}`);\r\n }\r\n }\r\n\r\n // Shared controller for the `/fleet stream on|off` toggle. The TUI\r\n // replaces `setEnabled` with a dispatch-backed setter on mount; before\r\n // that the no-op setter just keeps `enabled` in sync so callers see a\r\n // stable view even when invoked from a non-TUI surface.\r\n const fleetStreamController = {\r\n enabled: true,\r\n setEnabled(enabled: boolean) {\r\n this.enabled = enabled;\r\n },\r\n };\r\n\r\n const slashCmds = buildBuiltinSlashCommands({\r\n registry: slashRegistry,\r\n toolRegistry,\r\n compactor: container.resolve(TOKENS.Compactor),\r\n sessionStore,\r\n skillLoader,\r\n tokenCounter,\r\n renderer,\r\n memoryStore,\r\n context,\r\n metricsSink,\r\n healthRegistry,\r\n planPath,\r\n modeStore,\r\n fleetStreamController,\r\n onSpawn: async (description, spawnOpts) => {\r\n const { subagentId, taskId } = await multiAgentHost.spawn(description, spawnOpts);\r\n const tags: string[] = [];\r\n if (spawnOpts?.provider) tags.push(spawnOpts.provider);\r\n if (spawnOpts?.model) tags.push(spawnOpts.model);\r\n if (spawnOpts?.name) tags.push(`\"${spawnOpts.name}\"`);\r\n const tag = tags.length > 0 ? ` (${tags.join(' / ')})` : '';\r\n return `Spawned subagent ${subagentId}${tag} for task ${taskId}. Use /agents to track progress.`;\r\n },\r\n onAgents: () => {\r\n const s = multiAgentHost.status();\r\n const lines = [s.summary];\r\n const STATUS_ICON: Record<string, string> = {\r\n running: '●',\r\n idle: '○',\r\n stopped: '⊘',\r\n };\r\n for (const a of s.live) {\r\n if (a.status === 'running' || a.status === 'idle') {\r\n const task = a.task ? ` — ${a.task.slice(0, 60)}` : '';\r\n lines.push(` ${STATUS_ICON[a.status] ?? '?'} ${a.subagentId.slice(0, 8)} ${a.status}${task}`);\r\n }\r\n }\r\n for (const p of s.pending) {\r\n lines.push(` · pending ${p.taskId.slice(0, 8)} → ${p.description.slice(0, 60)}`);\r\n }\r\n for (const r of s.completed) {\r\n const fmt = fmtTaskResultLine(r, color);\r\n lines.push(` ${fmt.mark} ${r.taskId.slice(0, 8)} ${fmt.stats}${fmt.tail}`);\r\n }\r\n return lines.join('\\n');\r\n },\r\n onFleet: async (action, target) => {\r\n if (action === 'status') {\r\n const s = multiAgentHost.status();\r\n const lines = [color.bold('Fleet status'), ` ${s.summary}`];\r\n const STATUS_ICON: Record<string, string> = {\r\n running: '●',\r\n idle: '○',\r\n stopped: '⊘',\r\n };\r\n const liveActive = s.live.filter((a) => a.status === 'running' || a.status === 'idle');\r\n if (liveActive.length > 0) {\r\n lines.push('', color.dim(' Active'));\r\n for (const a of liveActive) {\r\n const task = a.task ? ` · ${a.task.slice(0, 50)}` : '';\r\n lines.push(\r\n ` ${STATUS_ICON[a.status] ?? '?'} ${a.subagentId.slice(0, 8)} ${a.status}${task}`,\r\n );\r\n }\r\n }\r\n if (s.pending.length > 0) {\r\n lines.push('', color.dim(' Pending'));\r\n for (const p of s.pending) {\r\n lines.push(\r\n ` · ${p.taskId.slice(0, 8)} → ${p.subagentId.slice(0, 8)} · ${p.description.slice(0, 60)}`,\r\n );\r\n }\r\n }\r\n if (s.completed.length > 0) {\r\n lines.push('', color.dim(' Completed'));\r\n for (const r of s.completed) {\r\n const fmt = fmtTaskResultLine(r, color);\r\n lines.push(\r\n ` ${fmt.mark} ${r.taskId.slice(0, 8)} → ${r.subagentId.slice(0, 8)} · ${fmt.stats}${fmt.tail}`,\r\n );\r\n }\r\n }\r\n return lines.join('\\n');\r\n }\r\n if (action === 'usage') {\r\n const u = multiAgentHost.usage();\r\n if (u.rows.length === 0) return 'No completed subagent tasks yet.';\r\n const lines = [\r\n color.bold('Fleet usage'),\r\n color.dim(' subagent tasks iter tools ms status'),\r\n ];\r\n for (const r of u.rows) {\r\n lines.push(\r\n ` ${r.subagentId.slice(0, 14).padEnd(14)} ${String(r.tasks).padStart(5)} ${String(r.iterations).padStart(4)} ${String(r.toolCalls).padStart(5)} ${String(r.durationMs).padStart(5)} ${r.status}`,\r\n );\r\n }\r\n lines.push(\r\n color.dim(' ─'.repeat(28)),\r\n ` ${'TOTAL'.padEnd(14)} ${String(u.totals.tasks).padStart(5)} ${String(u.totals.iterations).padStart(4)} ${String(u.totals.toolCalls).padStart(5)} ${String(u.totals.durationMs).padStart(5)}`,\r\n );\r\n return lines.join('\\n');\r\n }\r\n if (action === 'kill') {\r\n if (!target) return 'Usage: /fleet kill <subagent-id>';\r\n const ok = await multiAgentHost.kill(target);\r\n return ok\r\n ? `Sent stop signal to ${target}.`\r\n : 'No coordinator is running yet — nothing to kill.';\r\n }\r\n if (action === 'manifest') {\r\n if (!multiAgentHost.isDirectorMode()) {\r\n return 'Manifest is only available when the run was started with --director.';\r\n }\r\n const p = await multiAgentHost.manifest();\r\n if (!p) {\r\n return 'Director is active but no subagents have been spawned — nothing to record yet.';\r\n }\r\n return `Manifest written → ${p}`;\r\n }\r\n return `Unknown fleet action: ${action}`;\r\n },\r\n onFleetLog: async (subagentId, mode) => {\r\n // Per-subagent JSONLs live under <fleetRoot>/subagents/<runId>/<subagentId>.jsonl\r\n // and the runId is namespace-stable (session id by default), so we\r\n // walk the subagents dir to discover both runs and subagents.\r\n const subagentsRoot = path.join(fleetRootForPromotion, 'subagents');\r\n let runDirs: string[];\r\n try {\r\n runDirs = await fs.readdir(subagentsRoot);\r\n } catch {\r\n return 'No fleet transcripts on disk — no subagents have been spawned for this session.';\r\n }\r\n // Collect every transcript across every run-dir for this session.\r\n const found: Array<{ runId: string; subagentId: string; file: string; size: number }> = [];\r\n for (const runId of runDirs) {\r\n const runDir = path.join(subagentsRoot, runId);\r\n let files: string[];\r\n try {\r\n files = await fs.readdir(runDir);\r\n } catch {\r\n continue;\r\n }\r\n for (const f of files) {\r\n if (!f.endsWith('.jsonl')) continue;\r\n const full = path.join(runDir, f);\r\n try {\r\n const stat = await fs.stat(full);\r\n found.push({\r\n runId,\r\n subagentId: f.replace(/\\.jsonl$/, ''),\r\n file: full,\r\n size: stat.size,\r\n });\r\n } catch {\r\n // skip\r\n }\r\n }\r\n }\r\n if (found.length === 0) {\r\n return 'No subagent transcripts found on disk.';\r\n }\r\n // Listing mode (no id provided).\r\n if (!subagentId) {\r\n const lines = [\r\n `${found.length} subagent transcript${found.length === 1 ? '' : 's'} on disk:`,\r\n ];\r\n for (const t of found) {\r\n lines.push(\r\n ` ${color.cyan(t.subagentId.padEnd(18))} ${color.dim(t.runId.slice(0, 18))} ${color.dim(`${(t.size / 1024).toFixed(1)} KB`)}`,\r\n );\r\n }\r\n lines.push('Use `/fleet log <subagentId>` for a summary, or append `raw` for the full JSONL.');\r\n return lines.join('\\n');\r\n }\r\n // Match by exact id or prefix; ambiguous matches return the list.\r\n const matches = found.filter(\r\n (t) => t.subagentId === subagentId || t.subagentId.startsWith(subagentId),\r\n );\r\n if (matches.length === 0) {\r\n return `No transcript matched \"${subagentId}\". Run \\`/fleet log\\` to list available ids.`;\r\n }\r\n if (matches.length > 1) {\r\n return [\r\n `Ambiguous id \"${subagentId}\" — ${matches.length} matches:`,\r\n ...matches.map((m) => ` ${m.subagentId} (${m.runId})`),\r\n ].join('\\n');\r\n }\r\n const t = matches[0]!;\r\n const raw = await fs.readFile(t.file, 'utf8');\r\n if (mode === 'raw') return raw;\r\n\r\n // Summary: walk JSONL events, count types, list the first user/llm\r\n // pair + the last few iterations. Designed to fit in one terminal\r\n // screen even for verbose transcripts.\r\n const lines = raw.split('\\n').filter((l) => l.trim());\r\n const counts: Record<string, number> = {};\r\n let firstUser: string | null = null;\r\n let lastResponse: string | null = null;\r\n let totalIterations = 0;\r\n const toolNames = new Map<string, number>();\r\n for (const line of lines) {\r\n try {\r\n const ev = JSON.parse(line) as { type: string; content?: unknown; name?: string };\r\n counts[ev.type] = (counts[ev.type] ?? 0) + 1;\r\n if (ev.type === 'user_input' && !firstUser) {\r\n const txt =\r\n typeof ev.content === 'string'\r\n ? ev.content\r\n : Array.isArray(ev.content)\r\n ? ev.content\r\n .filter((b): b is { type: 'text'; text: string } => (b as { type?: string }).type === 'text')\r\n .map((b) => b.text)\r\n .join(' ')\r\n : '';\r\n firstUser = txt.slice(0, 120);\r\n }\r\n if (ev.type === 'llm_response') {\r\n if (Array.isArray(ev.content)) {\r\n const txt = (ev.content as Array<{ type?: string; text?: string }>)\r\n .filter((b) => b.type === 'text')\r\n .map((b) => b.text ?? '')\r\n .join(' ');\r\n if (txt) lastResponse = txt.slice(0, 240);\r\n }\r\n totalIterations += 1;\r\n }\r\n if (ev.type === 'tool_use' && typeof ev.name === 'string') {\r\n toolNames.set(ev.name, (toolNames.get(ev.name) ?? 0) + 1);\r\n }\r\n } catch {\r\n // skip malformed\r\n }\r\n }\r\n const toolBreakdown =\r\n toolNames.size > 0\r\n ? Array.from(toolNames.entries())\r\n .sort((a, b) => b[1] - a[1])\r\n .map(([n, c]) => `${n}×${c}`)\r\n .join(', ')\r\n : '(none)';\r\n const out: string[] = [\r\n color.bold(`Subagent ${t.subagentId}`) + color.dim(` (run ${t.runId})`),\r\n ` ${lines.length} events · ${totalIterations} llm iterations · ${(t.size / 1024).toFixed(1)} KB`,\r\n ` tools: ${toolBreakdown}`,\r\n ];\r\n if (firstUser) out.push('', color.dim(' task:'), ` ${firstUser}`);\r\n if (lastResponse) out.push('', color.dim(' last response:'), ` ${lastResponse}`);\r\n out.push('', color.dim(' event mix:'));\r\n for (const [type, count] of Object.entries(counts).sort((a, b) => b[1] - a[1])) {\r\n out.push(` ${type.padEnd(20)} ${count}`);\r\n }\r\n out.push('', color.dim('Use `/fleet log <id> raw` for the full JSONL.'));\r\n return out.join('\\n');\r\n },\r\n onFleetRetry: async (taskId) => {\r\n if (!multiAgentHost.isDirectorMode()) {\r\n const promoted = await multiAgentHost.promoteToDirector();\r\n if (!promoted) {\r\n return 'Cannot retry: a coordinator already exists in non-director mode.';\r\n }\r\n for (const tool of promoted.tools(FLEET_ROSTER)) {\r\n toolRegistry.register(tool);\r\n }\r\n }\r\n const dir = await multiAgentHost.ensureDirector();\r\n if (!dir) return 'Director is not available.';\r\n const dirStatePath = path.join(fleetRootForPromotion, 'director-state.json');\r\n const prior = await loadDirectorState(dirStatePath);\r\n if (!prior) {\r\n return 'No prior director-state.json found — nothing to retry.';\r\n }\r\n // \"Interrupted\" = whatever was running/pending when the previous\r\n // process died. Completed/failed/timeout/stopped tasks are final.\r\n const interrupted = prior.tasks.filter(\r\n (t) => t.status === 'running' || t.status === 'pending',\r\n );\r\n if (interrupted.length === 0) {\r\n return 'No interrupted tasks: every prior task reached a terminal state.';\r\n }\r\n\r\n // List mode — no target given.\r\n if (!taskId) {\r\n const lines = [\r\n `${interrupted.length} interrupted task${interrupted.length === 1 ? '' : 's'} from prior run:`,\r\n ];\r\n for (const t of interrupted) {\r\n const owner = t.subagentId\r\n ? prior.subagents.find((s) => s.id === t.subagentId)\r\n : undefined;\r\n const tag = owner ? `${owner.name ?? owner.id} (${owner.role ?? 'no-role'})` : 'no-owner';\r\n lines.push(\r\n ` ${t.taskId.slice(0, 12)} ${t.status.padEnd(8)} ${tag} ${(t.description ?? '').slice(0, 60)}`,\r\n );\r\n }\r\n lines.push('Run `/fleet retry <taskId>` or `/fleet retry all` to re-assign.');\r\n return lines.join('\\n');\r\n }\r\n\r\n const targets =\r\n taskId === 'all'\r\n ? interrupted\r\n : interrupted.filter(\r\n (t) => t.taskId === taskId || t.taskId.startsWith(taskId),\r\n );\r\n if (targets.length === 0) {\r\n return `No interrupted task matched \"${taskId}\".`;\r\n }\r\n\r\n const results: string[] = [];\r\n for (const t of targets) {\r\n const owner = t.subagentId\r\n ? prior.subagents.find((s) => s.id === t.subagentId)\r\n : undefined;\r\n if (!owner) {\r\n results.push(` - ${t.taskId.slice(0, 12)}: no owner record, skipped.`);\r\n continue;\r\n }\r\n // Re-spawn from the roster when role is set (preferred path —\r\n // role-based spawns get their full prompt/tool slice). Otherwise\r\n // synthesize a minimal SubagentConfig from the prior record.\r\n const rosterCfg = owner.role ? FLEET_ROSTER[owner.role] : undefined;\r\n const cfg = rosterCfg\r\n ? { ...rosterCfg }\r\n : {\r\n name: owner.name ?? owner.id,\r\n role: owner.role,\r\n provider: owner.provider,\r\n model: owner.model,\r\n };\r\n try {\r\n const newSubId = await dir.spawn(cfg);\r\n const newTaskId = await dir.assign({\r\n id: '',\r\n description: t.description ?? '(no description)',\r\n subagentId: newSubId,\r\n });\r\n results.push(\r\n ` ${color.green('✓')} ${t.taskId.slice(0, 12)} → re-spawned ${newSubId.slice(0, 12)} (task ${newTaskId.slice(0, 12)})`,\r\n );\r\n } catch (err) {\r\n results.push(\r\n ` ${color.red('✗')} ${t.taskId.slice(0, 12)} → ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n }\r\n return [`Retried ${targets.length} task${targets.length === 1 ? '' : 's'}:`, ...results].join(\r\n '\\n',\r\n );\r\n },\r\n onDirector: async () => {\r\n const director = await multiAgentHost.promoteToDirector();\r\n if (!director) return null;\r\n // Register the 8 LLM-callable orchestration tools into the leader's\r\n // ToolRegistry so the agent can discover fleet surface mid-session.\r\n for (const tool of director.tools(FLEET_ROSTER)) {\r\n toolRegistry.register(tool);\r\n }\r\n const mp = path.join(fleetRootForPromotion, 'fleet.json');\r\n const sp = path.join(fleetRootForPromotion, 'shared');\r\n const ss = path.join(fleetRootForPromotion, 'subagents');\r\n const lines = [\r\n `${color.green('✓')} Promoted to director mode.`,\r\n ` Roster: ${Object.keys(FLEET_ROSTER).join(', ')}`,\r\n ` Manifest → ${mp}`,\r\n ` Scratchpad → ${sp}`,\r\n ` Subagents → ${ss}`,\r\n ];\r\n return lines.join('\\n');\r\n },\r\n onPlugin: async (args) => {\r\n const parsed = args.length === 0 ? [] : args.split(/\\s+/).filter(Boolean);\r\n const result = await runPluginManagementCommand(parsed, {\r\n config,\r\n configPath: wpaths.globalConfig,\r\n });\r\n if (result.patch) {\r\n const patch = result.patch as Partial<Config>;\r\n config = patchConfig(config, patch);\r\n configStore.update(patch);\r\n }\r\n if (result.restartRequired && result.code === 0) {\r\n return `${result.message}\\nRestart WrongStack to load or unload plugin code in this session.`;\r\n }\r\n return result.message;\r\n },\r\n onYolo: (setTo?: boolean) => {\r\n const policy = container.resolve(TOKENS.PermissionPolicy) as DefaultPermissionPolicy;\r\n if (setTo !== undefined) {\r\n policy.setYolo(setTo);\r\n config = patchConfig(config, { yolo: setTo });\r\n return setTo;\r\n }\r\n return policy.getYolo();\r\n },\r\n onAutonomy: (setTo?) => {\r\n if (setTo !== undefined) {\r\n autonomyMode = setTo;\r\n return setTo;\r\n }\r\n return autonomyMode;\r\n },\r\n onExit: () => {\r\n void mcpRegistry.stopAll();\r\n },\r\n onBeforeExit: async () => {\r\n // Check for uncommitted changes directly\r\n const { spawn } = await import('node:child_process');\r\n const cwd = projectRoot;\r\n\r\n const statusResult = await new Promise<{ stdout: string; code: number }>((resolve) => {\r\n const child = spawn('git', ['status', '--porcelain'], { cwd, stdio: ['ignore', 'pipe', 'pipe'] });\r\n let stdout = '';\r\n child.stdout?.on('data', (d) => (stdout += d));\r\n child.on('close', (code) => resolve({ stdout, code: code ?? 0 }));\r\n });\r\n\r\n if (statusResult.stdout.trim().length > 0) {\r\n const lines = statusResult.stdout.split('\\n').filter(Boolean);\r\n return {\r\n abort: true, // signals there are uncommitted changes (used only for the message)\r\n message: `⚠ ${color.yellow(`${lines.length} uncommitted change${lines.length > 1 ? 's' : ''}`)} — session ended without commit`,\r\n };\r\n }\r\n },\r\n onClear: () => {\r\n // In TUI mode Ink owns the live area; writing `\\x1b[2J` here would\r\n // fight Ink's cursor math and leave the status bar smeared. The\r\n // context/memory reset inside /clear is enough — the user can\r\n // scroll up to see prior turns in scrollback. In REPL we erase\r\n // the visible screen + scrollback (`\\x1b[3J`) so the next prompt\r\n // starts on a fresh terminal.\r\n if (flags.tui && !flags['no-tui']) return;\r\n try {\r\n process.stdout.write('\\x1b[2J\\x1b[3J\\x1b[H');\r\n } catch {\r\n // stdout may be closed during shutdown — ignore.\r\n }\r\n },\r\n onDiag: () => {\r\n const u = tokenCounter.total();\r\n const cost = tokenCounter.estimateCost();\r\n const errSection =\r\n errorRing.length === 0\r\n ? []\r\n : [\r\n '',\r\n `${color.bold('Recent errors')} (last ${errorRing.length}):`,\r\n ...errorRing.map((e) => ` [${e.ts}] ${e.phase} ${e.code} — ${e.message}`),\r\n ];\r\n // Read current provider from the ConfigStore so /diag always shows\r\n // the live value, even if /model swapped it mid-session (L1-B).\r\n const liveCfg = configStore.get();\r\n return [\r\n `${color.bold('WrongStack diag')}`,\r\n ` provider: ${liveCfg.provider} / ${context.model}`,\r\n ` projectRoot: ${projectRoot}`,\r\n ` tokens: in ${u.input} out ${u.output} cacheR ${u.cacheRead ?? 0}`,\r\n ` cost: $${cost.total.toFixed(4)}`,\r\n ` tools: ${toolRegistry.list().length}`,\r\n ` mcpServers: ${mcpRegistry.list().length}`,\r\n ...errSection,\r\n ].join('\\n');\r\n },\r\n onStats: () => stats.format(),\r\n });\r\n for (const cmd of slashCmds) slashRegistry.register(cmd);\r\n\r\n // Dispatch to execution phase — single-shot, TUI, REPL, or WebUI.\r\n const savedProviderCfg = config.providers?.[config.provider];\r\n return execute({\r\n agent,\r\n events,\r\n slashRegistry,\r\n attachments,\r\n tokenCounter,\r\n config,\r\n renderer,\r\n reader,\r\n session,\r\n mcpRegistry,\r\n recoveryLock,\r\n wpaths,\r\n modelsRegistry,\r\n projectRoot,\r\n flags,\r\n positional,\r\n effectiveMaxContext,\r\n queueStore,\r\n context,\r\n stats,\r\n detachTodosCheckpoint,\r\n savedProviderCfg: savedProviderCfg as ExecutionDeps['savedProviderCfg'],\r\n resolvedProvider: resolvedProvider ?? undefined,\r\n getPickableProviders: () => buildPickableProviders(modelsRegistry, config),\r\n switchProviderAndModel,\r\n director: director ?? null,\r\n fleetRoster: FLEET_ROSTER as Record<string, { name: string }>,\r\n fleetStreamController,\r\n getYolo: () => {\r\n const policy = container.resolve(TOKENS.PermissionPolicy) as DefaultPermissionPolicy;\r\n return policy.getYolo();\r\n },\r\n getAutonomy: () => autonomyMode,\r\n skillLoader: config.features.skills ? skillLoader : undefined,\r\n });\r\n}\r\n\r\n/**\r\n * Prompt the user about an abandoned session. The lockfile lifecycle\r\n * guarantees we only get here when the previous instance died without\r\n * writing `session_end` AND there's real work on disk (≥1 message).\r\n *\r\n * `--recover` short-circuits to \"resume\" without asking; piped/non-TTY\r\n * input degrades to the same — the alternative is hanging on stdin or\r\n * forcing the user to remember a flag they never typed.\r\n */\r\nasync function promptRecovery(\r\n reader: ReadlineInputReader,\r\n renderer: TerminalRenderer,\r\n abandoned: import('@wrongstack/core').AbandonedSession,\r\n autoRecover: boolean,\r\n): Promise<'resume' | 'delete' | 'skip'> {\r\n const minutes = Math.round(abandoned.ageMs / 60_000);\r\n const ageLabel =\r\n minutes < 1\r\n ? `${Math.round(abandoned.ageMs / 1000)}s ago`\r\n : minutes < 60\r\n ? `${minutes} min ago`\r\n : `${Math.round(minutes / 60)}h ago`;\r\n const summary = `Previous session was killed mid-run: ${abandoned.sessionId} (${abandoned.messageCount} messages, ${ageLabel}).`;\r\n if (autoRecover) {\r\n renderer.writeInfo(`${summary} Auto-resuming (--recover).`);\r\n return 'resume';\r\n }\r\n if (!process.stdin.isTTY) {\r\n renderer.writeInfo(\r\n `${summary} Non-interactive — leaving as-is. Use \\`wstack resume ${abandoned.sessionId}\\` or pass \\`--recover\\` to auto-resume.`,\r\n );\r\n return 'skip';\r\n }\r\n renderer.writeInfo(summary);\r\n const answer = await reader.readKey(\r\n `${color.amber('?')} Recover it? ${color.dim('[')}${color.bold('Y')}es / ${color.bold('n')}o / ${color.bold('d')}elete${color.dim(']')} `,\r\n [\r\n { key: 'y', label: 'yes', value: 'resume' },\r\n { key: 'Y', label: 'yes', value: 'resume' },\r\n { key: '\\r', label: 'yes', value: 'resume' },\r\n { key: '\\n', label: 'yes', value: 'resume' },\r\n { key: 'n', label: 'no', value: 'skip' },\r\n { key: 'N', label: 'no', value: 'skip' },\r\n { key: 'd', label: 'delete', value: 'delete' },\r\n { key: 'D', label: 'delete', value: 'delete' },\r\n ],\r\n );\r\n return answer as 'resume' | 'delete' | 'skip';\r\n}\r\n\r\nconst isMain =\r\n import.meta.url === `file://${process.argv[1]?.replace(/\\\\/g, '/')}` ||\r\n process.argv[1]?.endsWith('/cli/dist/index.js') ||\r\n process.argv[1]?.endsWith('\\\\cli\\\\dist\\\\index.js');\r\nif (isMain) {\r\n main(process.argv.slice(2)).then(\r\n (c) => {\r\n // Set exitCode and let Node drain async handles (undici TLS, log file\r\n // flushes) naturally. Force-exit after a brief grace period so we don't\r\n // hang if a plugin or MCP server leaks. Avoids libuv UV_HANDLE_CLOSING\r\n // assertions seen on Windows when process.exit() races with handle teardown.\r\n process.exitCode = c;\r\n setTimeout(() => process.exit(c), 200).unref();\r\n },\r\n (err) => {\r\n process.stderr.write((err instanceof Error ? err.stack : String(err)) + '\\n');\r\n process.exitCode = 1;\r\n setTimeout(() => process.exit(1), 200).unref();\r\n },\r\n );\r\n}\r\n"]}