@wrongstack/cli 0.6.0 → 0.6.3

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/update-check.ts","../src/webui-server.ts","../src/slash-commands/commit-llm.ts","../src/arg-parser.ts","../src/boot-config.ts","../src/input-reader.ts","../src/provider-helpers.ts","../src/config-history.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/goal.ts","../src/slash-commands/mode.ts","../src/slash-commands/index.ts","../src/slash-commands/skill-generator.ts","../src/slash-commands/security.ts","../src/slash-commands/statusline.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/subcommands/handlers/update.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-fleet.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/metrics.ts","../src/plugin-api-factory.ts","../src/wiring/plugins.ts","../src/wiring/provider.ts","../src/wiring/session.ts","../src/index.ts"],"names":["path6","fsp","projectContext","color","defaultHomeDir","path10","req","fs9","os5","resolve","fs16","path18","DefaultSecretVault","decryptConfigSecrets","encryptConfigSecrets","atomicWrite","path","os","fs","path2","os2","fs2","path3","fs3","configPath","fs4","path4","summary","msg","policy","path5","fs5","formatTodosList","labels","goalFilePath","loadGoal","unlink","parseArgs","readdir","readFile","join","path7","fs6","path8","os4","installer","fs7","path9","answer","spawn","theme","baseUrl","fs8","createRequire","fs10","path11","fs11","path12","fs12","path13","detected","fs13","fs14","path14","fs15","path15","stat","result","resolveWstackPaths","path16","os7","path17","runCtrl","sddPhase","pct","getActiveSDDContext","trySaveSpecFromAIOutput","trySaveImplementationPlan","trySaveTasksFromAIOutput","autoDetectTaskCompletion","getTaskProgress","getActiveSDDPhase","runWebUI","path19","randomUUID","path20","FILLED","EMPTY","renderContextChip","renderProgress","createDefaultPipelines","capabilitiesFor","TOKENS","ToolExecutor","Agent","fs17","path21","makeProviderFromConfig","path22","Context","loadPlan","resolveBundledSkillsDir","checkForUpdate","DefaultPathResolver","createDefaultContainer","ToolRegistry","builtinToolsPack","EventBus","fs18","lines","t","loadDirectorState","director","cwd","saveGoal","emptyGoal"],"mappings":"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","file":"index.js","sourcesContent":["import * as path from 'node:path';\nimport * as fsp from 'node:fs/promises';\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/** Key used to store SDD session state in ctx.meta for session isolation. */\nconst SDD_META_KEY = 'sdd.state';\n\n/**\n * Get or create the SDD state for the current session.\n * Uses ctx.meta so each concurrent browser/REPL session has isolated state.\n */\nfunction getSessionState(ctx: SlashCommandContext['context']): SDDState {\n if (!ctx) {\n // No Context — fall back to a process-lifetime singleton (CLI-only, single session)\n return sddState;\n }\n let state = ctx.meta[SDD_META_KEY] as SDDState | undefined;\n if (!state) {\n state = new SDDState();\n ctx.meta[SDD_META_KEY] = state;\n }\n return state;\n}\n\n/** Single shared SDD session state for the process lifetime. */\nclass SDDState {\n private builder: AISpecBuilder | null = null;\n private taskStore: DefaultTaskStore | null = null;\n private taskTracker: TaskTracker | null = null;\n private taskGraphId: string | null = null;\n\n getBuilder(): AISpecBuilder | null { return this.builder; }\n setBuilder(b: AISpecBuilder | null) { this.builder = b; }\n getTaskStore(): DefaultTaskStore | null { return this.taskStore; }\n setTaskStore(s: DefaultTaskStore | null) { this.taskStore = s; }\n getTaskTracker(): TaskTracker | null { return this.taskTracker; }\n setTaskTracker(t: TaskTracker | null) { this.taskTracker = t; }\n getTaskGraphId(): string | null { return this.taskGraphId; }\n setTaskGraphId(id: string | null) { this.taskGraphId = id; }\n\n clearTaskState(): void {\n this.taskStore = null;\n this.taskTracker = null;\n this.taskGraphId = null;\n }\n\n getContext(): string | null {\n if (!this.builder) return null;\n const session = this.builder.getSession();\n if (session.phase === 'done') return null;\n return this.builder.getAIPrompt();\n }\n\n getPhase(): AISpecPhase | null {\n return this.builder?.getPhase() ?? null;\n }\n}\n\n/** Process-lifetime singleton — used when no Context is available (CLI single-session mode). */\nconst sddState = new SDDState();\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 return sddState.getContext();\n}\n\n/**\n * Get the active SDD session phase. Returns null if no active session.\n */\nexport function getActiveSDDPhase(): AISpecPhase | null {\n return sddState.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 const builder = sddState.getBuilder();\n if (!builder) return false;\n const spec = builder.tryParseSpecFromOutput(aiOutput);\n if (!spec) return false;\n builder.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 const builder = sddState.getBuilder();\n if (!builder) return false;\n const session = builder.getSession();\n if (!session.spec) return false;\n\n const json = builder.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 sddState.setTaskStore(store);\n sddState.setTaskTracker(tracker);\n sddState.setTaskGraphId(graph.id);\n\n // Save task graph ID to session for persistence\n builder.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 const tracker = sddState.getTaskTracker();\n if (!tracker) return null;\n const progress = tracker.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 const tracker = sddState.getTaskTracker();\n if (!tracker) return null;\n const nodes = tracker.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 const tracker = sddState.getTaskTracker();\n if (!tracker) return false;\n const nodes = tracker.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 tracker.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 const tracker = sddState.getTaskTracker();\n if (!tracker) return 0;\n const pending = tracker.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 tracker.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 tracker.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 tracker.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 tracker.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 tracker.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 const builder = sddState.getBuilder();\n if (!builder) return false;\n const session = builder.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 builder.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 builder.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 sddState.getBuilder();\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 // All state accesses in this command go through sessionState so that\n // concurrent REPL/browser sessions are fully isolated.\n const sessionState = getSessionState(opts.context);\n\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 (!sddState.getBuilder() && !forceFlag) {\n const sessionPath = path.join(projectRoot, '.wrongstack', 'sdd-session.json');\n try {\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 sddState.clearTaskState();\n\n // Gather project context for smarter AI questions\n const projectContext = await gatherProjectContext(projectRoot);\n\n sddState.setBuilder(new AISpecBuilder({\n store: specStore,\n projectContext,\n minQuestions: 2,\n maxQuestions: 10,\n sessionPath: path.join(projectRoot, '.wrongstack', 'sdd-session.json'),\n }));\n const builder = sddState.getBuilder()!;\n builder.startSession(title);\n\n const aiPrompt = builder.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 const builder = sddState.getBuilder();\n if (!builder) {\n return {\n message: 'No active SDD session. Use /sdd new to start one.',\n };\n }\n\n const phase = builder.getSession().phase;\n\n if (phase === 'questioning') {\n // AI hasn't generated spec yet — tell it to generate now\n const sddCtx = builder.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 = builder.getSession().spec;\n if (!spec) {\n return { message: 'No spec to approve.' };\n }\n\n // Save spec and move to implementation phase\n await builder.saveSpec();\n versioning.recordVersion(spec, 'Initial spec approved');\n builder.approve(); // spec_review → implementation\n\n const implPrompt = builder.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 builder.approve(); // task_review → executing\n\n const execPrompt = builder.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 const runBuilder = sddState.getBuilder();\n if (!runBuilder) {\n return {\n message: 'No active SDD session. Use /sdd new to start one.',\n };\n }\n\n const session = runBuilder.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 = runBuilder.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 const planBuilder = sddState.getBuilder();\n if (!planBuilder) {\n return { message: 'No active SDD session. Use /sdd new to start one.' };\n }\n\n const planSession = planBuilder.getSession();\n if (!planSession.implementation) {\n return {\n message: planSession.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 planSession.implementation,\n ].join('\\n'),\n };\n }\n\n case 'spec': {\n const specBuilder = sddState.getBuilder();\n if (!specBuilder) {\n return { message: 'No active SDD session. Use /sdd new to start one.' };\n }\n\n const specSession = specBuilder.getSession();\n if (!specSession.spec) {\n return {\n message: specSession.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 = specSession.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 const taskTracker = sddState.getTaskTracker();\n if (!taskTracker) {\n return { message: 'No tasks generated yet. Use /sdd new to start.' };\n }\n\n const nodes = taskTracker.getAllNodes();\n if (nodes.length === 0) {\n return { message: 'No tasks in the current graph.' };\n }\n\n const progress = taskTracker.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 const doneTracker = sddState.getTaskTracker();\n if (!doneTracker) {\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 = doneTracker.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 doneTracker.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 doneTracker.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 = doneTracker.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 const statusBuilder = sddState.getBuilder();\n if (!statusBuilder) {\n return { message: 'No active SDD session.' };\n }\n\n const session = statusBuilder.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 await fsp.unlink(sessionPath);\n deletedFromDisk = true;\n } catch {\n // No file on disk\n }\n\n const cancelBuilder = sddState.getBuilder();\n if (cancelBuilder) {\n const title = cancelBuilder.getSession().title;\n await cancelBuilder.deleteSession();\n sddState.setBuilder(null);\n sddState.clearTaskState();\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 (sddState.getBuilder()) {\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 sddState.setBuilder(new AISpecBuilder({\n store: specStore,\n projectContext,\n minQuestions: 2,\n maxQuestions: 10,\n sessionPath,\n }));\n const resumeBuilder = sddState.getBuilder()!;\n const loaded = await resumeBuilder.loadSession();\n if (!loaded) {\n sddState.setBuilder(null);\n return { message: 'No saved SDD session found. Use /sdd new to start one.' };\n }\n\n const session = resumeBuilder.getSession();\n\n // Restore task graph if it exists\n let taskCount = 0;\n let completedCount = 0;\n const taskGraphId = resumeBuilder.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 sddState.setTaskStore(store);\n sddState.setTaskTracker(tracker);\n sddState.setTaskGraphId(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 = resumeBuilder.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 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 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 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 { createRequire } from 'node:module';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\n\nexport interface UpdateInfo {\n current: string;\n latest: string;\n outdated: boolean;\n checkFailed: boolean;\n}\n\ntype HomeDirFn = () => string;\nconst defaultHomeDir: HomeDirFn = () => os.homedir();\n\n/** Cache dosyasının path'i — test için inject edilebilir homeFn */\nexport function cachePath(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'update-cache.json');\n}\n\n/** 24 saat TTL */\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000;\n\ninterface CacheEntry {\n timestamp: number;\n latestVersion: string;\n error?: string;\n}\n\n/** Mevcut CLI versiyonunu package.json'den oku */\nexport function currentVersion(): string {\n const req = createRequire(import.meta.url);\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\n/** Semver comparison — returns true if a > b */\nfunction isNewer(a: string, b: string): boolean {\n const parse = (v: string) =>\n v\n .replace(/^v/i, '')\n .split('.')\n .map((p) => parseInt(p, 10) || 0);\n const [ap, bp] = [parse(a), parse(b)];\n for (let i = 0; i < Math.max(ap.length, bp.length); i++) {\n const ai = ap[i] ?? 0;\n const bi = bp[i] ?? 0;\n if (ai > bi) return true;\n if (ai < bi) return false;\n }\n return false;\n}\n\n/** Cache oku — süresi geçmişse null döner */\nasync function readCache(homeFn: HomeDirFn = defaultHomeDir): Promise<CacheEntry | null> {\n try {\n const raw = await fs.readFile(cachePath(homeFn), 'utf8');\n const entry = JSON.parse(raw) as CacheEntry;\n if (Date.now() - entry.timestamp > CACHE_TTL_MS) return null;\n return entry;\n } catch {\n return null;\n }\n}\n\n/** Cache yaz */\nasync function writeCache(entry: CacheEntry, homeFn: HomeDirFn = defaultHomeDir): Promise<void> {\n try {\n const dir = path.dirname(cachePath(homeFn));\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(cachePath(homeFn), JSON.stringify(entry, null, 2), 'utf8');\n } catch {\n // best-effort\n }\n}\n\n/** npm registry'den latest versiyonu çek */\nasync function fetchLatestFromNpm(timeoutMs = 3000): Promise<string> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const res = await fetch('https://registry.npmjs.org/wrongstack/latest', {\n signal: controller.signal,\n headers: { 'Accept': 'application/json' },\n });\n clearTimeout(timer);\n\n if (!res.ok) throw new Error(`npm registry responded ${res.status}`);\n const data = await res.json() as { version?: unknown };\n if (typeof data.version === 'string') return data.version;\n throw new Error('No version field in npm response');\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Update bilgisini döner — cache-first, network fallback */\nexport async function checkForUpdate(\n signal?: AbortSignal,\n homeFn?: HomeDirFn,\n): Promise<UpdateInfo> {\n const current = currentVersion();\n const aborted = () => signal?.aborted ?? false;\n const hf = homeFn ?? defaultHomeDir;\n\n // Already aborted before we even start — skip network entirely\n if (aborted()) {\n return { current, latest: current, outdated: false, checkFailed: true };\n }\n\n // Cache'e bak\n const cached = await readCache(hf);\n if (cached && !cached.error) {\n return {\n current,\n latest: cached.latestVersion,\n outdated: isNewer(cached.latestVersion, current),\n checkFailed: false,\n };\n }\n\n // Network kontrolü\n try {\n const latest = await fetchLatestFromNpm();\n await writeCache({ timestamp: Date.now(), latestVersion: latest }, hf);\n\n return {\n current,\n latest,\n outdated: isNewer(latest, current),\n checkFailed: false,\n };\n } catch (err) {\n // Network hatası — sessiz devam, cache'e yazma\n if (aborted()) {\n return { current, latest: current, outdated: false, checkFailed: true };\n }\n\n // Prior cache varsa onu kullan (eski data ama en azından birşey var)\n if (cached?.latestVersion) {\n return {\n current,\n latest: cached.latestVersion,\n outdated: isNewer(cached.latestVersion, current),\n checkFailed: true,\n };\n }\n\n return { current, latest: current, outdated: false, checkFailed: true };\n }\n}\n\n/** Update varsa notification string'i döner, yoksa null */\nexport async function getUpdateNotification(\n signal?: AbortSignal,\n homeFn?: HomeDirFn,\n): Promise<string | null> {\n const info = await checkForUpdate(signal, homeFn);\n if (info.outdated) {\n return `Update available: v${info.current} → v${info.latest}`;\n }\n return null;\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 * Subscribe to live per-iteration events from the eternal-autonomy\r\n * engine. When provided, the WebUI broadcasts each iteration to every\r\n * connected client. Observability-only — starting the loop still goes\r\n * through REPL/TUI or the `--eternal` flag (the WebUI has no slash\r\n * command dispatch surface yet).\r\n */\r\n subscribeEternalIteration?: (\r\n fn: (entry: import('@wrongstack/core').JournalEntry) => void,\r\n ) => () => void;\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 // eternal-autonomy iteration events. Each iteration the engine\r\n // completes lands here and is fanned out to every connected client\r\n // so the frontend can render a live timeline of the autonomous loop.\r\n // The unsubscribe is collected into eventUnsubscribers so a reconnect\r\n // or shutdown tears it down cleanly with the rest of the subscriptions.\r\n if (opts.subscribeEternalIteration) {\r\n eventUnsubscribers.push(\r\n opts.subscribeEternalIteration((entry) => {\r\n broadcast({\r\n type: 'eternal.iteration',\r\n payload: {\r\n iteration: entry.iteration,\r\n at: entry.at,\r\n source: entry.source,\r\n task: entry.task,\r\n status: entry.status,\r\n note: entry.note,\r\n tokens: entry.tokens,\r\n costUsd: entry.costUsd,\r\n },\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 let fileExists = true;\r\n try {\r\n raw = await fs.readFile(opts.globalConfigPath, 'utf8');\r\n } catch (err) {\r\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\r\n // Permissions / IO error — refuse to overwrite blindly.\r\n throw new Error(\r\n `Refusing to mutate ${opts.globalConfigPath}: ${(err as Error).message}`,\r\n { cause: err },\r\n );\r\n }\r\n fileExists = false;\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 (err) {\r\n // Refuse to clobber a corrupt-but-existing config (mirrors auth-menu.ts).\r\n if (fileExists) {\r\n throw new Error(\r\n `Refusing to overwrite corrupt config at ${opts.globalConfigPath} ` +\r\n `(${(err as Error).message}). Fix or move the file aside before retrying.`,\r\n { cause: err },\r\n );\r\n }\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","/**\n * LLM-powered commit message generation.\n * Generates proper commit messages by analyzing git diffs via the configured LLM provider.\n */\n\nexport interface CommitLLMProvider {\n complete(\n req: {\n model: string;\n system?: { type: 'text'; text: string }[];\n messages: { role: string; content: { type: 'text'; text: string }[] }[];\n maxTokens: number;\n temperature?: number;\n },\n opts: { signal: AbortSignal },\n ): Promise<{\n /** Normalized content blocks (Anthropic/OpenAI compatible) */\n content: { type: 'text'; text: string }[];\n model: string;\n }>;\n}\n\nexport interface CommitLLMOpts {\n provider: CommitLLMProvider;\n model: string;\n}\n\n/**\n * Generate a proper commit message by asking the LLM to analyze the diff.\n * Falls back to heuristics on failure.\n */\nexport async function generateCommitMessageWithLLM(\n diff: string,\n opts: CommitLLMOpts,\n): Promise<string> {\n const systemPrompt =\n 'You are a helpful assistant that generates concise, conventional-commit-formatted git commit messages. ' +\n 'Analyze the provided diff and output ONLY the commit message (no explanation, no quotes). ' +\n 'Format: <type>(<scope>): <short description> — <type> is one of: feat, fix, docs, style, refactor, test, chore, perf, ci, build, temp. ' +\n 'If the diff contains multiple unrelated changes, pick the most important one. ' +\n 'Keep the description under 72 characters. Example: feat(cli): add /commit LLM integration';\n\n const userPrompt = `Here is the git diff:\\n\\n${diff}`;\n\n try {\n const signal = new AbortController();\n const timeout = setTimeout(() => signal.abort(), 15_000);\n\n const resp = await opts.provider.complete(\n {\n model: opts.model,\n system: [{ type: 'text', text: systemPrompt }],\n messages: [{ role: 'user', content: [{ type: 'text', text: userPrompt }] }],\n maxTokens: 80,\n temperature: 0.3,\n },\n { signal: signal.signal },\n );\n clearTimeout(timeout);\n\n const rawContent = resp.content;\n const text =\n Array.isArray(rawContent)\n ? (rawContent[0] as { type: string; text?: string })?.text ?? ''\n : typeof rawContent === 'object' && rawContent !== null\n ? (rawContent as { type: string; text?: string }).text ?? ''\n : String(rawContent);\n const message = text.trim().split('\\n')[0]!;\n\n if (message.length > 0 && message.length < 200) {\n return message;\n }\n } catch {\n // LLM call failed — fall through to heuristics\n }\n\n // Fallback: use heuristics via the existing function\n return 'chore: update';\n}","/**\r\n * Unified CLI argument parsing. Three parsers that were previously\r\n * spread across index.ts, subcommands/index.ts, and slash-commands/index.ts.\r\n */\r\n\r\n/** Flags that are boolean-only (no value expected after them). */\r\nexport const BOOLEAN_FLAGS = new Set([\r\n 'yolo',\r\n 'verbose',\r\n 'trace',\r\n 'help',\r\n 'version',\r\n 'no-banner',\r\n 'no-features',\r\n 'tui',\r\n 'no-tui',\r\n 'no-recovery',\r\n 'recover',\r\n 'no-alt-screen',\r\n 'alt-screen',\r\n 'output-json',\r\n 'prompt',\r\n 'metrics',\r\n 'webui',\r\n 'no-check',\r\n 'director',\r\n]);\r\n\r\n// ------------------------------------------------------------------ main args\r\n\r\nexport interface ParsedArgs {\r\n flags: Record<string, string | boolean>;\r\n positional: string[];\r\n}\r\n\r\n/** Parse top-level `wstack` CLI args. */\r\nexport function parseArgs(argv: string[]): ParsedArgs {\r\n const flags: Record<string, string | boolean> = {};\r\n const positional: string[] = [];\r\n for (let i = 0; i < argv.length; i++) {\r\n const a = argv[i];\r\n if (!a) continue;\r\n if (a === '--') {\r\n positional.push(...argv.slice(i + 1));\r\n break;\r\n }\r\n if (a.startsWith('--')) {\r\n const eq = a.indexOf('=');\r\n if (eq !== -1) {\r\n flags[a.slice(2, eq)] = a.slice(eq + 1);\r\n continue;\r\n }\r\n const name = a.slice(2);\r\n if (BOOLEAN_FLAGS.has(name)) {\r\n flags[name] = true;\r\n continue;\r\n }\r\n if (i + 1 < argv.length && !(argv[i + 1] ?? '').startsWith('-')) {\r\n flags[name] = argv[++i] ?? '';\r\n } else {\r\n flags[name] = true;\r\n }\r\n } else if (a.startsWith('-') && a.length === 2) {\r\n const short = a.slice(1);\r\n const expand: Record<string, string> = { v: 'verbose' };\r\n flags[expand[short] ?? short] = true;\r\n } else {\r\n positional.push(a);\r\n }\r\n }\r\n return { flags, positional };\r\n}\r\n\r\n// --------------------------------------------------------------- auth flags\r\n\r\nexport interface AuthFlags {\r\n positional: string[];\r\n label?: string;\r\n family?: import('@wrongstack/core').WireFamily;\r\n baseUrl?: string;\r\n envVars?: string[];\r\n}\r\n\r\n/** Parse `wstack auth <provider> [--label ...] [--family ...] [...]` flags. */\r\nexport function parseAuthFlags(args: string[]): AuthFlags {\r\n const out: AuthFlags = { positional: [] };\r\n for (let i = 0; i < args.length; i++) {\r\n const a = args[i];\r\n if (a === '--label') {\r\n const v = args[++i];\r\n if (v) out.label = v;\r\n } else if (a === '--family') {\r\n const v = args[++i];\r\n if (v) out.family = v as AuthFlags['family'];\r\n } else if (a === '--base-url') {\r\n const v = args[++i];\r\n if (v) out.baseUrl = v;\r\n } else if (a === '--env') {\r\n const v = args[++i];\r\n if (v)\r\n out.envVars = v\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean);\r\n } else if (a && !a.startsWith('--')) {\r\n out.positional.push(a);\r\n }\r\n }\r\n return out;\r\n}\r\n\r\n// -------------------------------------------------------------- spawn flags\r\n\r\nexport interface SpawnFlags {\r\n description: string;\r\n opts: { provider?: string; model?: string; tools?: string[]; name?: string };\r\n}\r\n\r\n/**\r\n * Parse `/spawn` flags from the args head. Supported:\r\n * --provider=<id> / -p <id> override the subagent's provider id\r\n * --model=<id> / -m <id> override the subagent's model\r\n * --name=<label> / -n <label> display name\r\n * --tools=a,b,c restrict the subagent's tool slice\r\n *\r\n * Anything after the last flag is the task description.\r\n */\r\nexport function parseSpawnFlags(input: string): SpawnFlags {\r\n const opts: SpawnFlags['opts'] = {};\r\n let rest = input;\r\n const consume = (re: RegExp): RegExpMatchArray | null => {\r\n const m = rest.match(re);\r\n if (m) {\r\n rest = rest.slice(m[0].length).replace(/^\\s+/, '');\r\n return m;\r\n }\r\n return null;\r\n };\r\n while (rest.length > 0) {\r\n let m: RegExpMatchArray | null;\r\n m = consume(/^--provider=(\\S+)\\s*/);\r\n if (m) opts.provider = m[1];\r\n else {\r\n m = consume(/^--model=(\\S+)\\s*/);\r\n if (m) opts.model = m[1];\r\n else {\r\n m = consume(/^--name=(\"([^\"]+)\"|(\\S+))\\s*/);\r\n if (m) opts.name = m[2] ?? m[3];\r\n else {\r\n m = consume(/^--tools=(\\S+)\\s*/);\r\n if (m)\r\n opts.tools = m[1]!\r\n .split(',')\r\n .map((t) => t.trim())\r\n .filter(Boolean);\r\n else {\r\n m = consume(/^-p\\s+(\\S+)\\s*/);\r\n if (m) opts.provider = m[1];\r\n else {\r\n m = consume(/^-m\\s+(\\S+)\\s*/);\r\n if (m) opts.model = m[1];\r\n else {\r\n m = consume(/^-n\\s+(\"([^\"]+)\"|(\\S+))\\s*/);\r\n if (m) opts.name = m[2] ?? m[3];\r\n else break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return { description: rest.trim(), opts };\r\n}\r\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 * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport os from 'node:os';\nimport { atomicWrite } from '@wrongstack/core';\n\n// ── Protected files/directories ────────────────────────────────────\n// These are NEVER touched by any operation in this module.\n// Guards against bugs (glob patterns, typos, race conditions)\n// accidentally deleting critical user data.\nconst PROTECTED_BASENAMES = new Set([\n 'config.json',\n '.key',\n 'index.json',\n]);\n\n// Top-level directories that should never be deleted even if a prune\n// pattern accidentally widens. These are absolute directory names\n// relative to the .wrongstack root.\nconst PROTECTED_DIRS = new Set([\n 'cache', // models.dev.json cache\n 'logs', // runtime logs\n 'history', // REPL history\n 'memory.md', // global memory\n 'skills', // global skills\n 'projects', // per-project state\n]);\n\n/**\n * Guard: throw if `filename` is a protected file or lives inside a protected\n * directory. Used before any unlink / rm call to make accidentally deleting\n * critical files impossible.\n */\nfunction assertSafeToDelete(filename: string, parentDir: string): void {\n // 1. Exact-match protected files\n if (PROTECTED_BASENAMES.has(filename)) {\n throw new Error(`Refusing to delete protected file: ${filename}`);\n }\n // 2. No path traversal\n if (filename !== path.basename(filename)) {\n throw new Error(`Refusing to delete path with traversal: ${filename}`);\n }\n // 3. Validate it's a timestamped config backup (config.json.{ts}.bak)\n // before we ever consider deleting it.\n if (!filename.startsWith('config.json.') || !filename.endsWith('.bak')) {\n // Unknown files — be conservative, refuse\n throw new Error(`Refusing to delete unknown file: ${filename}`);\n }\n // 4. Check parent is the .wrongstack root and the target is not a dir\n const resolvedParent = path.resolve(parentDir);\n if (!resolvedParent.endsWith('.wrongstack')) {\n throw new Error(`Unexpected parent directory for bak prune: ${resolvedParent}`);\n }\n}\n\n/**\n * Safely delete a file only if it passes safety checks.\n * Never throws — errors are swallowed (best-effort).\n */\nasync function safeDelete(filePath: string): Promise<void> {\n const dir = path.dirname(filePath);\n const filename = path.basename(filePath);\n try {\n assertSafeToDelete(filename, dir);\n await fs.unlink(filePath);\n } catch (err) {\n // Log but don't crash — safety check violations are logged for debugging\n if (err instanceof Error && err.message.startsWith('Refusing')) {\n process.stderr.write(`[config-history] SAFETY: ${err.message}\\n`);\n }\n // Best-effort — ignore other errors (file doesn't exist, etc.)\n }\n}\n\nexport interface HistoryEntry {\n id: string;\n timestamp: string;\n description: string;\n snapshotMasked: Record<string, unknown>;\n diffSummary: string;\n}\n\ninterface HistoryIndex {\n version: 1;\n entries: Array<{ id: string; timestamp: string; description: string }>;\n}\n\nfunction maskConfigSecrets(cfg: Record<string, unknown>): Record<string, unknown> {\n if (typeof cfg !== 'object' || cfg === null) return {};\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(cfg)) {\n if (k === 'apiKey' || k === 'apiKeys' || k === 'secret' || k === 'secrets') {\n out[k] = '[REDACTED]';\n } else if (typeof v === 'object' && v !== null && !Array.isArray(v)) {\n out[k] = maskConfigSecrets(v as Record<string, unknown>);\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n\nfunction diffSummary(oldCfg: Record<string, unknown>, newCfg: Record<string, unknown>): string {\n const changes: string[] = [];\n const allKeys = new Set([...Object.keys(oldCfg), ...Object.keys(newCfg)]);\n for (const k of allKeys) {\n const o = JSON.stringify(oldCfg[k]);\n const n = JSON.stringify(newCfg[k]);\n if (o !== n) {\n if (k === 'apiKey' || k === 'apiKeys' || k === 'secret') {\n changes.push(`${k}: [CHANGED]`);\n } else if (typeof newCfg[k] !== 'object') {\n changes.push(`${k}: ${oldCfg[k] ?? '(unset)'} → ${newCfg[k]}`);\n } else {\n changes.push(`${k}: [CHANGED]`);\n }\n }\n }\n return changes.length > 0 ? changes.slice(0, 5).join(', ') : 'no changes';\n}\n\ntype HomeDirFn = () => string;\nconst defaultHomeDir: HomeDirFn = () => os.homedir();\n\nfunction historyDir(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'config.history', 'entries');\n}\n\nfunction historyIndexPath(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'config.history', 'index.json');\n}\n\n// NOTE: config.json is the canonical path (defined in wstack-paths.ts).\n// backupCurrent() and restore*() all operate on config.json.\nfunction configPath(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'config.json');\n}\n\nfunction backupLastPath(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'config.json.last');\n}\n\nfunction entryId(ts: string): string {\n return ts.replace(/[:.]/g, '-').slice(0, 19);\n}\n\nasync function ensureHistoryDir(homeFn: HomeDirFn = defaultHomeDir): Promise<void> {\n await fs.mkdir(historyDir(homeFn), { recursive: true });\n}\n\nasync function readIndex(homeFn: HomeDirFn = defaultHomeDir): Promise<HistoryIndex> {\n try {\n const raw = await fs.readFile(historyIndexPath(homeFn), 'utf8');\n return JSON.parse(raw) as HistoryIndex;\n } catch {\n return { version: 1, entries: [] };\n }\n}\n\nasync function writeIndex(idx: HistoryIndex, homeFn: HomeDirFn = defaultHomeDir): Promise<void> {\n await ensureHistoryDir(homeFn);\n // atomicWrite: torn write here would wipe the entire config-history\n // index, hiding the user's prior backups behind a \"no history\" UI.\n await atomicWrite(historyIndexPath(homeFn), JSON.stringify(idx, null, 2));\n}\n\n/**\n * Backup current config.json → config.json.last and timestamped .bak files.\n * Safe to call even if config.json doesn't exist. Never throws.\n *\n * IMPORTANT: config.json and .key are never deleted by this function.\n * Only config.json.*.bak timestamped snapshots are pruned.\n */\nexport async function backupCurrent(homeFn: HomeDirFn = defaultHomeDir): Promise<void> {\n const cfg = configPath(homeFn);\n const last = backupLastPath(homeFn);\n const ts = Date.now();\n\n // Read existing config content for .last backup\n let content: string | undefined;\n try {\n content = await fs.readFile(cfg, 'utf8');\n } catch {\n // May not exist yet — that's fine, we just skip the backup\n }\n\n if (content !== undefined) {\n try {\n await atomicWrite(last, content);\n } catch {\n // Best-effort — .last backup is nice to have but not critical\n }\n }\n\n // Create timestamped snapshot\n if (content !== undefined) {\n try {\n const bakPath = path.join(homeFn(), '.wrongstack', `config.json.${ts}.bak`);\n await atomicWrite(bakPath, content);\n } catch {\n // Best-effort\n }\n }\n\n // Prune old .bak files — keep last 10\n try {\n const dir = path.join(homeFn(), '.wrongstack');\n const files = await fs.readdir(dir);\n const baks = files\n .filter((f) => f.startsWith('config.json.') && f.endsWith('.bak'))\n .sort()\n .reverse();\n for (const f of baks.slice(10)) {\n await safeDelete(path.join(dir, f));\n }\n } catch {\n // Best-effort\n }\n}\n\n/**\n * Append a history entry for a config change.\n */\nexport async function appendHistory(\n oldCfg: Record<string, unknown>,\n newCfg: Record<string, unknown>,\n description: string,\n homeFn: HomeDirFn = defaultHomeDir,\n): Promise<string> {\n const timestamp = new Date().toISOString();\n const id = entryId(timestamp);\n\n await ensureHistoryDir(homeFn);\n\n const entry: HistoryEntry = {\n id,\n timestamp,\n description,\n snapshotMasked: maskConfigSecrets(newCfg) as Record<string, unknown>,\n diffSummary: diffSummary(oldCfg, newCfg),\n };\n\n await fs.writeFile(\n path.join(historyDir(homeFn), `${id}.json`),\n JSON.stringify(entry, null, 2),\n 'utf8',\n );\n\n const idx = await readIndex(homeFn);\n idx.entries.unshift({ id, timestamp, description });\n await writeIndex(idx, homeFn);\n\n return id;\n}\n\n/**\n * List all history entries (newest first).\n */\nexport async function listHistory(homeFn: HomeDirFn = defaultHomeDir): Promise<HistoryIndex['entries']> {\n const idx = await readIndex(homeFn);\n return idx.entries;\n}\n\n/**\n * Get a specific history entry by ID.\n */\nexport async function getHistoryEntry(id: string, homeFn: HomeDirFn = defaultHomeDir): Promise<HistoryEntry | null> {\n try {\n const raw = await fs.readFile(path.join(historyDir(homeFn), `${id}.json`), 'utf8');\n return JSON.parse(raw) as HistoryEntry;\n } catch {\n return null;\n }\n}\n\n/**\n * Restore config.json to a given history entry's snapshot.\n */\nexport async function restoreFromHistory(\n id: string,\n homeFn: HomeDirFn = defaultHomeDir,\n): Promise<{ ok: boolean; backupId: string | null; error?: string }> {\n const entry = await getHistoryEntry(id, homeFn);\n if (!entry) return { ok: false, backupId: null, error: 'History entry not found' };\n\n await backupCurrent(homeFn);\n\n let oldCfg: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(configPath(homeFn), 'utf8');\n oldCfg = JSON.parse(raw);\n } catch {\n // No config to restore from\n }\n\n try {\n await atomicWrite(configPath(homeFn), JSON.stringify(entry.snapshotMasked, null, 2));\n } catch (err) {\n return { ok: false, backupId: null, error: String(err) };\n }\n\n const backupId = await appendHistory(\n oldCfg,\n entry.snapshotMasked as Record<string, unknown>,\n `Restored from history ${id}`,\n homeFn,\n );\n\n return { ok: true, backupId };\n}\n\n/**\n * Restore config.json to the .last backup.\n */\nexport async function restoreLast(homeFn: HomeDirFn = defaultHomeDir): Promise<{ ok: boolean; error?: string }> {\n const last = backupLastPath(homeFn);\n const cfg = configPath(homeFn);\n\n let oldCfg: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(cfg, 'utf8');\n oldCfg = JSON.parse(raw);\n } catch {\n // Ignore\n }\n\n let lastCfg: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(last, 'utf8');\n lastCfg = JSON.parse(raw);\n } catch {\n return { ok: false, error: 'No prior backup found' };\n }\n\n await backupCurrent(homeFn);\n\n try {\n await atomicWrite(cfg, JSON.stringify(lastCfg, null, 2));\n } catch (err) {\n return { ok: false, error: String(err) };\n }\n\n await appendHistory(oldCfg, lastCfg, 'Restored from config.json.last', homeFn);\n\n return { ok: true };\n}","import type { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core';\r\nimport { color } from '@wrongstack/core';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport { hasApiKey } from './provider-helpers.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\nimport { backupCurrent, appendHistory } from './config-history.js';\r\n\r\n// Simple theme alias (avoids importing the full theme module just for one color)\r\nconst theme = { primary: color.amber };\r\n\r\n/**\r\n * Save provider + model to the global config file.\r\n * Creates backups + history entries before writing.\r\n * Returns true if saved successfully.\r\n */\r\nexport async function saveToGlobalConfig(\r\n configPath: string,\r\n provider: string,\r\n model: string,\r\n homeFn: () => string = () => process.env.HOME ?? require('node:os').homedir(),\r\n): Promise<boolean> {\r\n try {\r\n const { atomicWrite } = await import('@wrongstack/core');\r\n const fs = await import('node:fs/promises');\r\n\r\n let existing: Record<string, unknown> = {};\r\n try {\r\n const raw = await fs.readFile(configPath, 'utf8');\r\n existing = JSON.parse(raw) as Record<string, unknown>;\r\n } catch {\r\n // No existing config\r\n }\r\n\r\n const oldCfg = { ...existing };\r\n existing.provider = provider;\r\n existing.model = model;\r\n\r\n // Backup before writing — pass homeFn so it backs up the right config\r\n await backupCurrent(homeFn);\r\n\r\n await atomicWrite(configPath, JSON.stringify(existing, null, 2));\r\n\r\n // Record in history — best-effort (never blocks save)\r\n try {\r\n await appendHistory(\r\n oldCfg,\r\n existing,\r\n `Provider/model changed: ${oldCfg.provider ?? '(none)'} → ${provider}, ${oldCfg.model ?? '(none)'} → ${model}`,\r\n homeFn,\r\n );\r\n } catch {\r\n // best-effort\r\n }\r\n\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport interface PickerResult {\r\n provider: string;\r\n model: string;\r\n}\r\n\r\n/**\r\n * Interactive provider + model picker. Lists supported providers grouped\r\n * by wire family — by default only those with an API key (env or stored\r\n * config), so you see only what you can actually launch into. Falls back\r\n * to the full catalog when no keys are found anywhere.\r\n *\r\n * When `defaultProvider`/`defaultModel` are passed, they're pre-selected\r\n * so the user can press Enter to accept the previous choice.\r\n */\r\nexport async function runPicker(deps: {\r\n modelsRegistry: ModelsRegistry;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n config?: Config;\r\n defaultProvider?: string;\r\n defaultModel?: string;\r\n}): Promise<PickerResult | undefined> {\r\n const { modelsRegistry, renderer, reader, config, defaultProvider, defaultModel } = deps;\r\n\r\n renderer.write(\r\n `\\n${color.bold(theme.primary('WrongStack') + color.dim(' — Provider & Model Selection'))}\\n`,\r\n );\r\n renderer.write(color.dim('Loading provider catalog…\\n'));\r\n\r\n let providers: ResolvedProvider[];\r\n try {\r\n providers = await modelsRegistry.listProviders();\r\n } catch {\r\n renderer.writeError(\r\n 'Failed to load provider catalog. Pass --provider and --model to skip the picker.',\r\n );\r\n return undefined;\r\n }\r\n\r\n // Drop unsupported wire families — they need a plugin and can't be\r\n // selected through this path.\r\n const supported = providers.filter((p) => p.family !== 'unsupported');\r\n\r\n // Build the display list by overlaying saved config on top of the\r\n // catalog. Two kinds of saved entries matter:\r\n // 1. The map key matches a catalog id (`zai-coding-plan`) — the\r\n // user may have overridden family/baseUrl. We MUST honor those\r\n // overrides for grouping/display, otherwise an entry the user\r\n // saved as `family: \"anthropic\"` would still appear under the\r\n // catalog's `openai-compatible` group.\r\n // 2. The map key is an alias not in the catalog. Its `cfg.type` may\r\n // still point at a catalog id, in which case we inherit the\r\n // model list and display name from there.\r\n const catalogById = new Map(supported.map((p) => [p.id, p]));\r\n const overlay = config?.providers ?? {};\r\n const seen = new Set<string>();\r\n const merged: ResolvedProvider[] = [];\r\n for (const p of supported) {\r\n const cfg = overlay[p.id];\r\n seen.add(p.id);\r\n if (cfg) {\r\n merged.push({\r\n ...p,\r\n family: cfg.family ?? p.family,\r\n apiBase: cfg.baseUrl ?? p.apiBase,\r\n envVars: cfg.envVars && cfg.envVars.length > 0 ? cfg.envVars : p.envVars,\r\n // When the user has saved an explicit model list, it wins — they\r\n // know which models their endpoint actually serves (e.g. LM\r\n // Studio, vLLM, or a proxy with custom model ids). Otherwise the\r\n // catalog list keeps providing suggestions.\r\n models:\r\n cfg.models && cfg.models.length > 0\r\n ? cfg.models.map((m) => ({ id: m, name: m }))\r\n : p.models,\r\n });\r\n } else {\r\n merged.push(p);\r\n }\r\n }\r\n for (const [id, cfg] of Object.entries(overlay)) {\r\n if (seen.has(id)) continue;\r\n if (!cfg?.family || cfg.family === 'unsupported') continue;\r\n const catalogType = cfg.type && cfg.type !== id ? cfg.type : undefined;\r\n const inherited = catalogType ? catalogById.get(catalogType) : undefined;\r\n merged.push({\r\n id,\r\n name: inherited ? `${inherited.name} ${color.dim('(alias)')}` : id,\r\n family: cfg.family,\r\n apiBase: cfg.baseUrl ?? inherited?.apiBase,\r\n envVars: cfg.envVars ?? inherited?.envVars ?? [],\r\n models:\r\n cfg.models && cfg.models.length > 0\r\n ? cfg.models.map((m) => ({ id: m, name: m }))\r\n : (inherited?.models ?? []),\r\n npm: inherited?.npm,\r\n });\r\n }\r\n\r\n if (merged.length === 0) {\r\n renderer.writeError('No supported providers found in catalog.');\r\n return undefined;\r\n }\r\n\r\n // Filter to keyed providers. If none are keyed (fresh install, no env\r\n // vars set), fall back to the full list and prompt the user to add a\r\n // key — picking a keyless provider here is still useful because the\r\n // very next step (`wstack auth <prov>`) needs to know which provider.\r\n const keyed = merged.filter((p) => hasApiKey(p, config));\r\n let displayList = keyed;\r\n let showingFallback = false;\r\n if (keyed.length === 0) {\r\n displayList = merged;\r\n showingFallback = true;\r\n }\r\n\r\n // Group by family for nicer display\r\n const families = new Map<string, ResolvedProvider[]>();\r\n for (const p of displayList) {\r\n const list = families.get(p.family) ?? [];\r\n list.push(p);\r\n families.set(p.family, list);\r\n }\r\n\r\n // Build a flat numbered list (family → providers). Track which entry\r\n // matches the current default so we can highlight + accept Enter.\r\n const ordered: Array<{ provider: ResolvedProvider; index: number }> = [];\r\n const familyOrder = ['anthropic', 'openai', 'google', 'openai-compatible'];\r\n let idx = 1;\r\n let defaultIdx: number | undefined;\r\n renderer.write('\\n');\r\n for (const fam of familyOrder) {\r\n const list = families.get(fam);\r\n if (!list || list.length === 0) continue;\r\n renderer.write(` ${color.bold(fam)}\\n`);\r\n for (const p of list) {\r\n const envFound = p.envVars.some((v) => !!process.env[v]);\r\n const entry = config?.providers?.[p.id];\r\n const configKey =\r\n (typeof entry?.apiKey === 'string' && entry.apiKey.length > 0) ||\r\n (Array.isArray(entry?.apiKeys) && entry!.apiKeys!.some((k) => k?.apiKey));\r\n // ● green = env key, ◉ cyan = stored in config, ○ dim = no key\r\n const marker = envFound ? color.green('●') : configKey ? color.cyan('◉') : color.dim('○');\r\n const isDefault = p.id === defaultProvider;\r\n if (isDefault) defaultIdx = idx;\r\n const idLabel = isDefault ? color.bold(p.id) : p.id;\r\n const suffix = isDefault ? color.dim(' (default)') : '';\r\n renderer.write(\r\n ` ${color.dim(`${idx}.`.padStart(4))} ${marker} ${idLabel.padEnd(22)} ${color.dim(p.name)}${suffix}\\n`,\r\n );\r\n ordered.push({ provider: p, index: idx });\r\n idx++;\r\n }\r\n }\r\n\r\n if (showingFallback) {\r\n renderer.write(\r\n `\\n ${color.yellow('⚠ No API keys detected.')} ${color.dim('Pick a provider, then run `wstack auth <provider>` to add one.')}\\n`,\r\n );\r\n } else {\r\n renderer.write(`\\n ${color.dim('● = env key ◉ = stored in config ○ = no key')}\\n`);\r\n }\r\n\r\n // Provider prompt. Enter on an empty line accepts the default when one\r\n // is present; otherwise we treat it as cancel.\r\n const defaultHint =\r\n defaultIdx !== undefined && defaultProvider\r\n ? ` ${color.dim(`[Enter = ${defaultProvider}]`)}`\r\n : '';\r\n const providerAnswer = (\r\n await reader.readLine(\r\n `\\n${color.amber('?')} Select provider (1-${ordered.length})${defaultHint} ${color.dim('[q to quit]')}: `,\r\n )\r\n ).trim();\r\n\r\n if (providerAnswer.toLowerCase() === 'q') {\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n\r\n if (!providerAnswer) {\r\n if (defaultIdx !== undefined) {\r\n const def = ordered[defaultIdx - 1];\r\n if (def) return pickModel(def.provider, modelsRegistry, renderer, reader, defaultModel);\r\n }\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n\r\n const providerIdx = Number.parseInt(providerAnswer, 10);\r\n if (Number.isNaN(providerIdx) || providerIdx < 1 || providerIdx > ordered.length) {\r\n // Try matching by id\r\n const byId = ordered.find((o) => o.provider.id.toLowerCase() === providerAnswer.toLowerCase());\r\n if (!byId) {\r\n renderer.writeError(`Invalid selection: \"${providerAnswer}\"`);\r\n return undefined;\r\n }\r\n return pickModel(byId.provider, modelsRegistry, renderer, reader, defaultModel);\r\n }\r\n\r\n const chosen = ordered[providerIdx - 1];\r\n if (!chosen) return undefined;\r\n // Only honor the default-model hint when the user picked the default\r\n // provider; switching providers invalidates it.\r\n const modelHint = chosen.provider.id === defaultProvider ? defaultModel : undefined;\r\n return pickModel(chosen.provider, modelsRegistry, renderer, reader, modelHint);\r\n}\r\n\r\nasync function pickModel(\r\n provider: ResolvedProvider,\r\n registry: ModelsRegistry,\r\n renderer: TerminalRenderer,\r\n reader: ReadlineInputReader,\r\n defaultModel?: string,\r\n): Promise<PickerResult | undefined> {\r\n renderer.write(`\\n ${color.bold(provider.name)} ${color.dim(`(${provider.id})`)} models:\\n\\n`);\r\n\r\n const models = [...provider.models].sort((a, b) =>\r\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\r\n );\r\n\r\n if (models.length === 0) {\r\n renderer.writeError(' No models listed for this provider in the catalog.');\r\n return undefined;\r\n }\r\n\r\n // Find default-model index for the \"Enter = default\" hint.\r\n const defaultIdxInModels =\r\n defaultModel !== undefined ? models.findIndex((m) => m.id === defaultModel) : -1;\r\n\r\n // Show paginated — up to 30 at a time\r\n const pageSize = 30;\r\n let offset = 0;\r\n\r\n while (offset < models.length) {\r\n const page = models.slice(offset, offset + pageSize);\r\n for (let i = 0; i < page.length; i++) {\r\n const m = page[i]!;\r\n const num = offset + i + 1;\r\n const ctx = m.limit?.context\r\n ? `${(m.limit.context / 1000).toFixed(0)}k`.padStart(6)\r\n : ' ?';\r\n const cost = m.cost?.input !== undefined ? `$${m.cost.input}/$${m.cost.output ?? '?'}` : '';\r\n const caps: string[] = [];\r\n if (m.tool_call) caps.push('tools');\r\n if (m.reasoning) caps.push('reason');\r\n if (m.modalities?.input?.includes('image')) caps.push('vision');\r\n const capStr = caps.length > 0 ? color.dim(caps.join(',')) : '';\r\n const isDefault = m.id === defaultModel;\r\n const idLabel = isDefault ? color.bold(m.id) : m.id;\r\n const suffix = isDefault ? color.dim(' (default)') : '';\r\n renderer.write(\r\n ` ${color.dim(`${num}.`.padStart(5))} ${idLabel.padEnd(44)} ${color.dim(ctx)} ${color.dim(cost.padEnd(14))} ${capStr}${suffix}\\n`,\r\n );\r\n }\r\n offset += pageSize;\r\n\r\n if (offset < models.length) {\r\n const more = (\r\n await reader.readLine(\r\n `\\n${color.amber('?')} Showing ${Math.min(offset, models.length)}/${models.length} — Enter number, ${color.dim('Enter')} for more, or ${color.dim('q')} to quit: `,\r\n )\r\n ).trim();\r\n if (more.toLowerCase() === 'q') {\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n if (!more) continue; // show next page\r\n return resolveModelSelection(more, models, provider, registry, renderer, reader);\r\n }\r\n }\r\n\r\n // All shown — final prompt. Enter accepts the default model when present.\r\n const defaultHint =\r\n defaultIdxInModels >= 0 && defaultModel ? ` ${color.dim(`[Enter = ${defaultModel}]`)}` : '';\r\n const answer = (\r\n await reader.readLine(`\\n${color.amber('?')} Select model (1-${models.length})${defaultHint} ${color.dim('[q to quit]')}: `)\r\n ).trim();\r\n if (answer.toLowerCase() === 'q') {\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n if (!answer) {\r\n if (defaultIdxInModels >= 0 && defaultModel) {\r\n renderer.write(\r\n `\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(defaultModel)}\\n\\n`,\r\n );\r\n return { provider: provider.id, model: defaultModel };\r\n }\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n return resolveModelSelection(answer, models, provider, registry, renderer, reader);\r\n}\r\n\r\nasync function resolveModelSelection(\r\n answer: string,\r\n models: {\r\n id: string;\r\n name: string;\r\n release_date?: string;\r\n limit?: { context?: number };\r\n cost?: { input?: number; output?: number };\r\n tool_call?: boolean;\r\n reasoning?: boolean;\r\n modalities?: { input?: string[] };\r\n }[],\r\n provider: ResolvedProvider,\r\n _registry: ModelsRegistry,\r\n renderer: TerminalRenderer,\r\n _reader: ReadlineInputReader,\r\n): Promise<PickerResult | undefined> {\r\n const idx = Number.parseInt(answer, 10);\r\n let modelId: string | undefined;\r\n\r\n if (!Number.isNaN(idx) && idx >= 1 && idx <= models.length) {\r\n modelId = models[idx - 1]!.id;\r\n } else {\r\n // Try fuzzy matching by id\r\n const lower = answer.toLowerCase();\r\n const match = models.find((m) => m.id.toLowerCase() === lower);\r\n if (match) {\r\n modelId = match.id;\r\n } else {\r\n // Partial match\r\n const partial = models.filter((m) => m.id.toLowerCase().includes(lower));\r\n if (partial.length === 1) {\r\n modelId = partial[0]!.id;\r\n } else if (partial.length > 1) {\r\n renderer.writeError(`\"${answer}\" matches multiple models. Be more specific.`);\r\n return undefined;\r\n }\r\n }\r\n }\r\n\r\n if (!modelId) {\r\n // Use as-is (user might know the exact model string)\r\n modelId = answer;\r\n }\r\n\r\n renderer.write(`\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(modelId)}\\n\\n`);\r\n\r\n return { provider: provider.id, model: modelId };\r\n}\r\n\r\n// --- Helpers ---\r\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\nexport { generateCommitMessageWithLLM } from './commit-llm.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// ── LLM-powered commit message generation ──────────────────────────\n\ninterface CommitLLMOpts {\n provider: { complete(req: unknown, opts: { signal: AbortSignal }): Promise<{ content: unknown[] }> };\n model: string;\n}\n\n/**\n * Generate a proper commit message by asking the LLM to analyze the diff.\n * Falls back to heuristics on failure.\n */\nasync function generateCommitMessageWithLLM(\n diff: string,\n opts: CommitLLMOpts,\n): Promise<string> {\n const systemPrompt =\n 'You are a helpful assistant that generates concise, conventional-commit-formatted git commit messages. ' +\n 'Analyze the provided diff and output ONLY the commit message (no explanation, no quotes). ' +\n 'Format: <type>(<scope>): <short description> — <type> is one of: feat, fix, docs, style, refactor, test, chore, perf, ci, build, temp. ' +\n 'If the diff contains multiple unrelated changes, pick the most important one. ' +\n 'Keep the description under 72 characters. Example: feat(cli): add /commit LLM integration';\n\n const userPrompt = `Here is the git diff:\\n\\n${diff}`;\n\n try {\n const signal = new AbortController();\n const timeout = setTimeout(() => signal.abort(), 15_000);\n\n const resp = await opts.provider.complete(\n {\n model: opts.model,\n system: [{ type: 'text', text: systemPrompt }],\n messages: [{ role: 'user', content: [{ type: 'text', text: userPrompt }] }],\n maxTokens: 80,\n temperature: 0.3,\n },\n { signal: signal.signal },\n );\n clearTimeout(timeout);\n\n const contentBlocks = resp.content as Array<{ type: string; text?: string }>;\n const text = contentBlocks.find((b) => b.type === 'text')?.text ?? '';\n const message = text.trim().split('\\n')[0]!;\n\n if (message.length > 0 && message.length < 200) {\n return message;\n }\n } catch {\n // LLM call failed — fall through to heuristics\n }\n\n // Fallback: use heuristics via the existing function\n return 'chore: update';\n}\n\n// ── Heuristics ──────────────────────────────────────────────────────\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 (heuristics only).\n */\nasync function generateCommitMessageHeuristics(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(\n _opts: SlashCommandContext,\n generateCommitMessage?: (diff: string) => Promise<string>,\n): 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 const noLlm = args.includes('--no-llm');\n\n // Generate commit message — try LLM first, then fall back to heuristics\n let message: string;\n if (!noLlm && generateCommitMessage) {\n const diffResult = await runGit(['diff'], cwd);\n const diff = diffResult.stdout;\n try {\n message = await generateCommitMessage(diff);\n } catch {\n // LLM failed — silently fall back to heuristics\n message = await generateCommitMessageHeuristics(cwd);\n }\n } else {\n message = await generateCommitMessageHeuristics(cwd);\n }\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 deriveTodosFromPlanItem,\n emptyPlan,\n formatPlan,\n formatPlanTemplates,\n formatTodosList,\n getPlanTemplate,\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:\n 'Strategic plan board: /plan [show|add <title>|start <id|#>|done <id|#>|remove <id|#>|promote <id|#> [subtask ...]|derive <id|#>|template [list|use <name>]|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 'promote': {\n if (!restJoined) return { message: 'Usage: /plan promote <id|index> [subtask ...]' };\n const [target, ...subtasks] = restJoined.split(/\\s+/);\n if (!target) return { message: 'Usage: /plan promote <id|index> [subtask ...]' };\n const derived = deriveTodosFromPlanItem(plan, target, subtasks.length > 0 ? subtasks : undefined);\n if (!derived) return { message: `No plan item matched \"${target}\".` };\n await savePlan(planPath, derived.plan);\n if (ctx) {\n ctx.state.replaceTodos(derived.todos);\n }\n return {\n message: `Promoted to ${derived.todos.length} todo(s):\\n${formatTodosList(derived.todos)}\\n\\n${formatPlan(derived.plan)}`,\n };\n }\n case 'derive': {\n if (!restJoined) return { message: 'Usage: /plan derive <id|index>' };\n const derived = deriveTodosFromPlanItem(plan, restJoined);\n if (!derived) return { message: `No plan item matched \"${restJoined}\".` };\n await savePlan(planPath, derived.plan);\n if (ctx) {\n ctx.state.replaceTodos(derived.todos);\n }\n return {\n message: `Derived ${derived.todos.length} todo(s):\\n${formatTodosList(derived.todos)}\\n\\n${formatPlan(derived.plan)}`,\n };\n }\n case 'template': {\n const subVerb = rest[0] ?? '';\n const subRest = rest.slice(1).join(' ').trim();\n if (subVerb === '' || subVerb === 'list') {\n return { message: formatPlanTemplates() };\n }\n if (subVerb === 'use') {\n if (!subRest) return { message: 'Usage: /plan template use <template-name>' };\n const template = getPlanTemplate(subRest);\n if (!template) return { message: `Unknown template \"${subRest}\". Use /plan template list to see available templates.` };\n let updated = plan;\n for (const item of template.items) {\n ({ plan: updated } = addPlanItem(updated, item.title, item.details));\n }\n await savePlan(planPath, updated);\n return { message: `Applied template \"${template.name}\" (${template.items.length} items):\\n${formatPlan(updated)}` };\n }\n return { message: `Unknown template subcommand \"${subVerb}\". Try: list | use <name>` };\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|#> | promote <id|#> | derive <id|#> | template [list|use <name>] | 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 { goalFilePath, loadGoal, summarizeUsage } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport type AutonomyMode = 'off' | 'suggest' | 'auto' | 'eternal';\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 eternal Sittin-sene mode — runs forever against /goal',\n ' /autonomy stop Stop eternal mode (no-op for other modes)',\n ' /autonomy toggle Cycle: off → suggest → auto → eternal → 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 ' eternal — Goal-driven sense/decide/execute/reflect loop. Requires /goal.',\n ' Force-enables YOLO. Runs until /autonomy stop or Ctrl+C twice.',\n '',\n 'In auto/eternal modes the agent works autonomously. Press Esc to redirect,',\n 'Ctrl+C to stop the active iteration. /autonomy stop ends the eternal loop.',\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 (mode + engine + goal snapshot)\n if (!arg || arg === 'status') {\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 eternal: `${color.red('ETERNAL')} ${color.dim('(sittin-sene — goal-driven, YOLO, until /autonomy stop)')}`,\n };\n const lines: string[] = [`Autonomy mode: ${labels[current]}`];\n // Surface engine + goal context when relevant — when current mode\n // is eternal, or when a goal exists (so the user sees the state\n // even after a /autonomy stop without re-typing /goal status).\n try {\n const goal = await loadGoal(goalFilePath(opts.projectRoot));\n if (goal) {\n const u = summarizeUsage(goal);\n lines.push(color.dim(` Goal: ${goal.goal.length > 80 ? `${goal.goal.slice(0, 77)}…` : goal.goal}`));\n lines.push(color.dim(` Engine state: ${goal.engineState} · iterations: ${goal.iterations} · journal: ${goal.journal.length}`));\n if (u.iterationsWithUsage > 0) {\n lines.push(\n color.dim(\n ` Spent: $${u.totalCostUsd.toFixed(4)} · ${u.totalInputTokens} in / ${u.totalOutputTokens} out tokens`,\n ),\n );\n }\n // Recent failure pulse — useful to see if the loop is stuck.\n const recent = goal.journal.slice(-10);\n const failed = recent.filter((e) => e.status === 'failure').length;\n if (failed > 0) {\n lines.push(color.amber(` Recent failures: ${failed} of last ${recent.length} iterations`));\n }\n }\n } catch {\n // best-effort; suppress\n }\n const msg = lines.join('\\n');\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n // Stop is a separate action, not a mode set.\n if (arg === 'stop' || arg === 'halt' || arg === 'kill') {\n if (!opts.onEternalStop) {\n const msg = 'No eternal-mode controller wired in this session.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n opts.onEternalStop();\n opts.onAutonomy('off');\n // Read the goal post-stop to compute a \"what did this loop spend\"\n // summary. The engine's last in-flight iteration may still write\n // one more journal entry after this returns, but the user wants\n // an immediate readout — better a slightly stale summary than no\n // summary. Failures here are non-fatal; the stop signal already\n // landed regardless of whether the summary renders.\n let summaryLine = '';\n try {\n const goal = await loadGoal(goalFilePath(opts.projectRoot));\n if (goal) {\n const u = summarizeUsage(goal);\n if (u.iterationsWithUsage > 0) {\n summaryLine =\n '\\n' +\n color.dim(\n ` Spent so far: $${u.totalCostUsd.toFixed(4)} · ${u.totalInputTokens} in / ${u.totalOutputTokens} out tokens · ${goal.iterations} total iterations.`,\n );\n } else if (goal.iterations > 0) {\n summaryLine = '\\n' + color.dim(` Total iterations: ${goal.iterations}.`);\n }\n }\n } catch {\n // best-effort summary; suppress\n }\n const msg = `${color.amber('Eternal mode stop requested.')} The current iteration will finish, then the loop exits.${summaryLine}`;\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 === 'eternal' || arg === 'forever' || arg === 'infinite' || arg === 'sittinsene') {\n newMode = 'eternal';\n } else if (arg === 'toggle' || arg === 'cycle') {\n const current = opts.onAutonomy() ?? 'off';\n const cycle: AutonomyMode[] = ['off', 'suggest', 'auto', 'eternal'];\n newMode = cycle[(cycle.indexOf(current) + 1) % cycle.length] ?? 'off';\n } else {\n const msg = `Unknown argument: ${arg}. Use /autonomy on, off, suggest, eternal, stop, or toggle.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n // Eternal mode requires a goal — fail loudly before flipping the switch.\n if (newMode === 'eternal') {\n const goal = await loadGoal(goalFilePath(opts.projectRoot));\n if (!goal) {\n const msg = `${color.red('Eternal mode requires a goal.')} Run \\`/goal set <mission>\\` first.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n if (!opts.onEternalStart) {\n const msg = 'Eternal mode controller is not wired in this session.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n // Force YOLO on for destructive ops (push, delete, etc.) — user opted into \"sittin sene\".\n if (opts.onYolo) opts.onYolo(true);\n opts.onAutonomy(newMode);\n opts.onEternalStart();\n const msg =\n `${color.red('Autonomy mode: ETERNAL')} — engine launching against goal: ${color.bold(goal.goal)}\\n` +\n `${color.dim('YOLO forced ON. Use /autonomy stop to end. Journal at /goal journal.')}`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n // Leaving eternal mode (or switching modes) should stop a running engine.\n // Cast through AutonomyMode — circular type resolution between this file\n // and ./index.js (which references AutonomyMode) can mask the 'eternal'\n // arm during typecheck. The runtime value is always correct.\n const previous = opts.onAutonomy() as AutonomyMode;\n if (previous === 'eternal' && opts.onEternalStop) {\n opts.onEternalStop();\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 eternal: `${color.red('ETERNAL')} — goal-driven sittin-sene loop`,\n };\n const msg = `Autonomy mode: ${labels[newMode]}`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport {\n emptyGoal,\n formatGoal,\n goalFilePath,\n loadGoal,\n saveGoal,\n} from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport { buildGoalPreamble } from '@wrongstack/tui';\nimport type { SlashCommandContext } from './index.js';\n\nconst KNOWN_VERBS = new Set([\n '',\n 'show',\n 'status',\n 'set',\n 'new',\n 'clear',\n 'reset',\n 'journal',\n 'log',\n]);\n\nexport function buildGoalCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'goal',\n description:\n 'Set, inspect, or clear the long-running autonomous mission used by /autonomy eternal.',\n help: [\n 'Usage:',\n ' /goal Show current goal + recent journal',\n ' /goal set <text> Set a new goal (overwrites previous)',\n ' /goal clear Clear the goal (stops eternal mode if running)',\n ' /goal status Same as /goal (alias)',\n ' /goal journal [N] Show last N journal entries (default 25)',\n '',\n 'Goals live in <projectRoot>/.wrongstack/goal.json and persist across sessions.',\n 'A goal is the prerequisite for /autonomy eternal — the engine consults it on',\n 'every iteration to decide what to do next.',\n ].join('\\n'),\n async run(args) {\n const trimmed = args.trim();\n const [verbRaw, ...rest] = trimmed.split(/\\s+/);\n const verb = (verbRaw ?? '').toLowerCase();\n const restJoined = rest.join(' ').trim();\n const goalPath = goalFilePath(opts.projectRoot);\n\n // If the first token isn't a known verb, treat the entire args\n // string as the goal text — `/goal rewrite the auth module` should\n // work the same as `/goal set rewrite the auth module`. This makes\n // the merged /goal compatible with the TUI's former plain-text form.\n const verbForDispatch = verb && !KNOWN_VERBS.has(verb) ? 'set' : verb;\n const setText = verbForDispatch === 'set' && !KNOWN_VERBS.has(verb) ? trimmed : restJoined;\n\n switch (verbForDispatch) {\n case '':\n case 'show':\n case 'status': {\n const current = await loadGoal(goalPath);\n if (!current) {\n const msg = 'No goal set. Use `/goal set <mission text>` to create one.';\n opts.renderer.write(msg);\n return { message: msg };\n }\n const msg = formatGoal(current);\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n case 'set':\n case 'new': {\n if (!setText) {\n const msg = 'Usage: /goal set <mission text>';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n const existing = await loadGoal(goalPath);\n // Preserve journal across goal replacement — useful as audit trail.\n // The new mission gets a fresh setAt but keeps the prior iterations\n // count so journal entries remain sequentially numbered.\n const next = existing\n ? { ...existing, goal: setText, setAt: new Date().toISOString(), lastActivityAt: new Date().toISOString() }\n : emptyGoal(setText);\n await saveGoal(goalPath, next);\n const shortGoal = setText.length > 80 ? `${setText.slice(0, 80)}…` : setText;\n const msg = `🎯 ${color.green('Goal locked:')} ${shortGoal}\\n${color.dim(`Stored in ${goalPath} — Esc / /steer to redirect, Ctrl+C to stop.`)}`;\n opts.renderer.write(msg);\n // Inject the lock-in preamble so the next turn runs with full-\n // autonomy framing — same behavior the TUI's former /goal had.\n return { message: msg, runText: buildGoalPreamble(setText) };\n }\n\n case 'clear':\n case 'reset': {\n const existing = await loadGoal(goalPath);\n if (!existing) {\n const msg = 'No goal to clear.';\n opts.renderer.write(msg);\n return { message: msg };\n }\n // Soft-clear: mark engine stopped so any running engine exits next cycle,\n // and write a sentinel goal that the engine treats as \"no work\".\n // We *delete* the file rather than zero it out so loadGoal() returns null\n // and the engine's runOneIteration() short-circuits to stopRequested.\n const { unlink } = await import('node:fs/promises');\n try {\n await unlink(goalPath);\n } catch {\n // best-effort\n }\n if (opts.onEternalStop) opts.onEternalStop();\n const msg = `${color.amber('Goal cleared.')} Eternal mode will stop on next cycle.`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n case 'journal':\n case 'log': {\n const current = await loadGoal(goalPath);\n if (!current) {\n const msg = 'No goal set.';\n opts.renderer.write(msg);\n return { message: msg };\n }\n const n = restJoined ? Math.max(1, Number.parseInt(restJoined, 10) || 25) : 25;\n if (current.journal.length === 0) {\n const msg = 'Journal is empty.';\n opts.renderer.write(msg);\n return { message: msg };\n }\n const tail = current.journal.slice(-n);\n const lines = tail.map((e) => {\n const mark = e.status === 'success' ? color.green('✓') : e.status === 'failure' ? color.red('✗') : e.status === 'aborted' ? color.amber('⊘') : color.dim('·');\n const note = e.note ? color.dim(` — ${e.note}`) : '';\n return `${color.dim(`#${e.iteration}`)} ${mark} ${color.dim(`[${e.source}]`)} ${e.task}${note}`;\n });\n const header = `Journal (last ${tail.length} of ${current.journal.length}):`;\n const msg = `${header}\\n${lines.join('\\n')}`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n default: {\n // Unreachable — verbForDispatch is either '' (show), a known\n // verb, or 'set' (when the first token isn't a known verb).\n const msg = `Unknown subcommand \"${verb}\". Try: show | set <text> | clear | journal [N]`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n }\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 /** Working directory for the current session. */\r\n cwd: string;\r\n /** Project root (typically resolved from cwd). */\r\n projectRoot: string;\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 /**\r\n * Generate a commit message by calling the LLM with the git diff.\r\n * Receives the raw diff, returns a commit message string.\r\n * When omitted /commit falls back to heuristics-only messages.\r\n */\r\n generateCommitMessage?: (diff: string) => Promise<string>;\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 * Start the eternal-autonomy engine. Called after `/autonomy eternal`\r\n * confirms a goal exists and YOLO has been forced on. The REPL drives\r\n * iterations from its main loop — this hook only flips the flag and\r\n * primes the engine; the actual iteration scheduling lives in the REPL.\r\n */\r\n onEternalStart?: () => void;\r\n /** Stop the eternal-autonomy engine (mid-iteration abort + flag flip). */\r\n onEternalStop?: () => void;\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 /** Direct access to the session's LLM provider and model, available even before the first agent run. */\r\n llmProvider?: import('@wrongstack/core').Provider;\r\n llmModel?: string;\r\n /** StatusBar visibility config — loaded from ~/.wrongstack/statusline.json */\r\n statuslineConfig?: {\r\n get: () => Promise<import('./statusline.js').StatuslineConfig>;\r\n set: (cfg: import('./statusline.js').StatuslineConfig) => Promise<void>;\r\n };\r\n /**\r\n * Current list of hidden status bar items. Written by the /statusline command\r\n * so the TUI can update without a restart.\r\n */\r\n statuslineHiddenItems?: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\r\n setStatuslineHiddenItems?: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\r\n}\r\n\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 {\r\n buildCommitCommand,\r\n buildGitcheckCommand,\r\n buildPushCommand,\r\n} 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 { buildGoalCommand } from './goal.js';\r\nimport { buildModeCommand } from './mode.js';\r\nimport { buildSddCommand } from './sdd.js';\r\nimport { buildSkillGeneratorCommand } from './skill-generator.js';\r\nimport { buildSecurityCommand } from './security.js';\r\nimport { buildStatuslineCommand } from './statusline.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 buildGoalCommand(opts),\r\n buildModeCommand(opts),\r\n buildExitCommand(opts),\r\n buildCommitCommand(opts),\r\n buildGitcheckCommand(opts),\r\n buildPushCommand(opts),\r\n buildSecurityCommand(opts),\r\n buildStatuslineCommand({\r\n cwd: opts.cwd,\r\n hiddenItems: opts.statuslineHiddenItems ?? [],\r\n setHiddenItems: opts.setStatuslineHiddenItems ?? (() => {}),\r\n getConfig: opts.statuslineConfig?.get ?? (async () => ({})),\r\n setConfig: opts.statuslineConfig?.set ?? (async () => {}),\r\n }),\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 { readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { SlashCommand, Context, Provider } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\nimport { defaultOrchestrator } from '@wrongstack/core';\n\n/** Accepts a full Context (active agent run) or just provider+model (pre-agent session). */\ntype SecurityScannerContext = Context | { provider: Provider; model?: string };\n\nfunction getProviderFromContext(ctx: Context, opts: SlashCommandContext): { provider: Provider; model?: string } | null {\n // Prefer opts.llmProvider (passed from setupProvider in index.ts) over ctx.provider,\n // because ctx.provider may exist on the Context class but not be fully initialized\n // before the first agent run. opts.llmProvider is always the live provider instance.\n if (opts.llmProvider && typeof opts.llmProvider.complete === 'function') {\n return { provider: opts.llmProvider, model: opts.llmModel };\n }\n if (ctx.provider && typeof (ctx.provider as Provider).complete === 'function') {\n return { provider: ctx.provider, model: ctx.model };\n }\n return null;\n}\n\nexport function buildSecurityCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'security',\n description: 'Security scanning: scan, audit, report',\n argsHint: '[scan|audit|report] [options]',\n help: `\n# /security — Security Scanner\n\nAutomated security scanning with tech stack detection.\n\n## Commands\n\n### /security scan [options]\nRun a full security scan on the current project.\nOptions:\n --depth quick|standard|deep Scan depth (default: standard)\n --format markdown|json|html Report format (default: markdown)\n\n### /security audit\nRun dependency audit + security scan.\n\n### /security report [id]\nList or view security reports.\n\n## Examples\n\n/security scan\n/security scan --depth deep --format html\n/security audit\n/security report\n`,\n async run(args: string, ctx: Context) {\n const parts = args.trim().split(/\\s+/);\n const subcommand = parts[0] || '';\n\n switch (subcommand) {\n case 'scan':\n return handleScan(parts.slice(1).join(' '), ctx, opts);\n case 'audit':\n return handleAudit(ctx, opts);\n case 'report':\n return handleReport(parts[1] || '');\n default:\n return { message: getHelpMessage() };\n }\n },\n };\n}\n\nasync function handleScan(args: string, ctx: Context, opts: SlashCommandContext): Promise<{ message?: string; metadata?: Record<string, unknown> }> {\n const options = parseArgs(args);\n const projectRoot = ctx.projectRoot || opts.projectRoot;\n\n try {\n const providerInfo = getProviderFromContext(ctx, opts);\n if (!providerInfo) {\n return { message: '❌ Security scan requires an active LLM provider. No provider configured.' };\n }\n\n const result = await defaultOrchestrator.run(providerInfo, {\n projectRoot,\n scanOptions: {\n depth: (options.depth as 'quick' | 'standard' | 'deep') || 'standard',\n includeSecrets: true,\n includeInjection: true,\n includeConfig: true,\n },\n reportOptions: {\n format: (options.format as 'markdown' | 'json' | 'html') || 'markdown',\n },\n });\n\n const summary = result.scanResult.summary;\n const status = summary.total === 0 ? '✅ No issues found' : `⚠️ Found ${summary.total} issues`;\n\n // Use LLM-synthesized report if available\n const reportContent = result.synthesizedReport || `# Security Scan Complete\n\n**Project:** ${projectRoot}\n**Tech Stack:** ${result.detectionResult.detectedStacks[0]?.stack || 'unknown'}\n**Scanned Files:** ${result.scanResult.scannedFiles}\n**Duration:** ${result.scanResult.scanDurationMs}ms\n\n## Summary\n\n| Severity | Count |\n|----------|-------|\n| 🔴 Critical | ${summary.critical} |\n| 🟠 High | ${summary.high} |\n| 🟡 Medium | ${summary.medium} |\n| 🟢 Low | ${summary.low} |\n\n**Status:** ${status}\n\n**Report:** ${result.reportPath}\n`;\n\n return {\n message: reportContent,\n metadata: {\n scanResult: result.scanResult,\n reportPath: result.reportPath,\n techStack: result.detectionResult.detectedStacks[0],\n },\n };\n } catch (error) {\n return { message: `❌ Scan failed: ${error}` };\n }\n}\n\nasync function handleAudit(ctx: Context, opts: SlashCommandContext): Promise<{ message?: string; metadata?: Record<string, unknown> }> {\n const projectRoot = ctx.projectRoot || opts.projectRoot;\n\n try {\n const providerInfo = getProviderFromContext(ctx, opts);\n if (!providerInfo) {\n return { message: '❌ Security audit requires an active LLM provider. No provider configured.' };\n }\n\n const result = await defaultOrchestrator.run(providerInfo, {\n projectRoot,\n reportOptions: { format: 'markdown' },\n });\n\n const summary = result.scanResult.summary;\n const depIssues = summary.critical + summary.high;\n\n // Use LLM-synthesized report for audit\n const reportContent = result.synthesizedReport || `# Security Audit Complete\n\n**Project:** ${projectRoot}\n**Tech Stack:** ${result.detectionResult.detectedStacks[0]?.stack || 'unknown'}\n\n## Dependency Health\n\n| Status | Count |\n|--------|-------|\n| Critical Issues | ${summary.critical} |\n| High Priority | ${summary.high} |\n| Medium Priority | ${summary.medium} |\n| Low Priority | ${summary.low} |\n\n${depIssues === 0 ? '✅ No known vulnerabilities detected' : `⚠️ ${depIssues} vulnerabilities need attention`}\n\n**Full Report:** ${result.reportPath}\n`;\n\n return {\n message: reportContent,\n metadata: {\n scanResult: result.scanResult,\n reportPath: result.reportPath,\n },\n };\n } catch (error) {\n return { message: `❌ Audit failed: ${error}` };\n }\n}\n\nasync function handleReport(reportId: string): Promise<{ message?: string }> {\n const reportsDir = 'security-reports';\n\n try {\n const files = await readdir(reportsDir);\n const reports = files\n .filter((f) => f.startsWith('security-report-') && (f.endsWith('.md') || f.endsWith('.json')))\n .sort()\n .reverse();\n\n if (!reportId) {\n if (reports.length === 0) {\n return { message: '📭 No security reports found. Run `/security scan` first.' };\n }\n\n const list = reports\n .map((r, i) => {\n const date = r.replace('security-report-', '').replace(/\\.(md|json)$/, '');\n return ` ${i + 1}. ${date}`;\n })\n .join('\\n');\n\n return { message: `# Available Security Reports\\n\\n${list}\\n\\nUse \\`/security report <number>\\` to view a specific report.` };\n }\n\n const index = parseInt(reportId, 10) - 1;\n if (!isNaN(index) && reports[index]) {\n const content = await readFile(join(reportsDir, reports[index]), 'utf-8');\n return { message: `# Security Report\\n\\n${content}` };\n }\n\n const match = reports.find((r) => r.includes(reportId));\n if (match) {\n const content = await readFile(join(reportsDir, match), 'utf-8');\n return { message: `# Security Report\\n\\n${content}` };\n }\n\n return { message: `❌ Report \"${reportId}\" not found. Use \\`/security report\\` to see available reports.` };\n } catch {\n return { message: '📭 No security reports found. Run `/security scan` first.' };\n }\n}\n\nfunction parseArgs(args: string): Record<string, string> {\n const result: Record<string, string> = {};\n const parts = args.split(/\\s+/);\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!part || !part.startsWith('--')) continue;\n\n const key = part.slice(2);\n const next = parts[i + 1];\n if (next && !next.startsWith('--')) {\n result[key] = next;\n i++;\n } else {\n result[key] = 'true';\n }\n }\n\n return result;\n}\n\nfunction getHelpMessage(): string {\n return `# /security — Security Scanner\n\n**Available Commands:**\n\n1. **/security scan** — Run full security scan\n \\`/security scan --depth deep --format html\\`\n\n2. **/security audit** — Run dependency audit + security scan\n\n3. **/security report** — List available reports\n\n**Features:**\n- Automatic tech stack detection\n- Dynamic security skill generation\n- Secrets, injection, and config vulnerability scanning\n- Markdown/JSON/HTML reports\n- .gitignore auto-update\n\nRun \\`/security scan\\` to start.`;\n}","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { atomicWrite, type SlashCommand } from '@wrongstack/core';\n\nconst CONFIG_ENV = 'WRONGSTACK_STATUSLINE_CONFIG';\nconst DEFAULT_PATH = '~/.wrongstack/statusline.json';\n\nexport interface StatuslineConfig {\n todos?: boolean;\n plan?: boolean;\n fleet?: boolean;\n git?: boolean;\n elapsed?: boolean;\n context?: boolean;\n cost?: boolean;\n}\n\nconst DEFAULTS: StatuslineConfig = {\n todos: true,\n plan: true,\n fleet: true,\n git: true,\n elapsed: true,\n context: true,\n cost: true,\n};\n\nfunction resolveConfigPath(): string {\n return process.env[CONFIG_ENV] ?? path.join(process.env.HOME ?? '', '.wrongstack', 'statusline.json');\n}\n\nexport async function loadStatuslineConfig(): Promise<StatuslineConfig> {\n const p = resolveConfigPath();\n try {\n const raw = await fs.readFile(p, 'utf8');\n return { ...DEFAULTS, ...JSON.parse(raw) as Partial<StatuslineConfig> };\n } catch {\n return { ...DEFAULTS };\n }\n}\n\nexport async function saveStatuslineConfig(cfg: StatuslineConfig): Promise<void> {\n const p = resolveConfigPath();\n await fs.mkdir(path.dirname(p), { recursive: true });\n // atomicWrite: torn write would leave statusline.json malformed and the\n // next load would silently fall back to DEFAULTS, losing user preferences.\n await atomicWrite(p, JSON.stringify(cfg, null, 2));\n}\n\nexport interface StatuslineCommandDeps {\n cwd: string;\n /** Current hidden items list. Written by the command when toggling. */\n hiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\n setHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\n getConfig: () => Promise<StatuslineConfig>;\n setConfig: (cfg: StatuslineConfig) => Promise<void>;\n}\n\nexport function buildStatuslineCommand(deps: StatuslineCommandDeps): SlashCommand {\n return {\n name: 'statusline',\n aliases: ['sl'],\n description: 'Customize status bar chips: /statusline [item] [on|off] or /statusline reset',\n help: [\n 'Usage: /statusline [item] [on|off]',\n ' /statusline — show current config',\n ' /statusline <item> on — enable a chip',\n ' /statusline <item> off — disable a chip',\n ' /statusline reset — restore defaults',\n '',\n 'Available items: todos, plan, fleet, git, elapsed, context, cost',\n 'Persistent across sessions (saved to ~/.wrongstack/statusline.json).',\n ].join('\\n'),\n async run(args: string) {\n const cfg = await deps.getConfig();\n const trimmed = args.trim();\n const parts = trimmed.split(/\\s+/);\n const [item, action] = parts;\n\n // No args → show current config\n if (!item) {\n const lines = ['StatusBar chips:'];\n const items: (keyof StatuslineConfig)[] = [\n 'todos', 'plan', 'fleet', 'git', 'elapsed', 'context', 'cost',\n ];\n for (const k of items) {\n const val = cfg[k];\n if (val === undefined) continue;\n lines.push(` ${val ? '●' : '○'} ${k}`);\n }\n return { message: lines.join('\\n') };\n }\n\n // Reset\n if (item === 'reset') {\n await deps.setConfig({ ...DEFAULTS });\n deps.setHiddenItems([]);\n return { message: 'StatusBar config reset to defaults.' };\n }\n\n // Toggle\n const validItems: (keyof StatuslineConfig)[] = [\n 'todos', 'plan', 'fleet', 'git', 'elapsed', 'context', 'cost',\n ];\n if (!validItems.includes(item as keyof StatuslineConfig)) {\n return {\n message: `Unknown item \"${item}\". Available: ${validItems.join(', ')}. Usage: /statusline <item> on|off`,\n };\n }\n\n const onOff = action?.toLowerCase();\n if (!onOff || (onOff !== 'on' && onOff !== 'off')) {\n return { message: `Usage: /statusline ${item} on|off` };\n }\n\n const next = { ...cfg, [item]: onOff === 'on' };\n await deps.setConfig(next);\n\n // Sync hiddenItems list with TUI\n if (onOff === 'off') {\n deps.setHiddenItems([...deps.hiddenItems, item as typeof deps.hiddenItems[number]]);\n } else {\n deps.setHiddenItems(deps.hiddenItems.filter((i) => i !== item));\n }\n\n return { message: `statusline ${item}: ${onOff}` };\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';\r\nimport * as path from 'node:path';\r\nimport { color } from '@wrongstack/core';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\nimport { detectProjectFacts, renderAgentsTemplate } from './slash-commands/index.js';\r\n\r\nexport type ProjectKind =\r\n /** `.wrongstack/AGENTS.md` exists — fully set up. */\r\n | 'initialized'\r\n /** Has a recognizable manifest (package.json, pyproject.toml, etc.) but no AGENTS.md yet. */\r\n | 'project'\r\n /** No manifest, no AGENTS.md — probably an empty/scratch directory. */\r\n | 'empty';\r\n\r\nconst MANIFESTS = [\r\n 'package.json',\r\n 'pyproject.toml',\r\n 'Cargo.toml',\r\n 'go.mod',\r\n 'Makefile',\r\n 'pom.xml',\r\n 'build.gradle',\r\n 'build.gradle.kts',\r\n 'composer.json',\r\n 'Gemfile',\r\n];\r\n\r\nexport async function detectProjectKind(projectRoot: string): Promise<ProjectKind> {\r\n try {\r\n await fs.access(path.join(projectRoot, '.wrongstack', 'AGENTS.md'));\r\n return 'initialized';\r\n } catch {\r\n // not initialized\r\n }\r\n for (const m of MANIFESTS) {\r\n try {\r\n await fs.access(path.join(projectRoot, m));\r\n return 'project';\r\n } catch {\r\n // try next\r\n }\r\n }\r\n return 'empty';\r\n}\r\n\r\nasync function scaffoldAgentsMd(projectRoot: string): Promise<string> {\r\n const dir = path.join(projectRoot, '.wrongstack');\r\n const file = path.join(dir, 'AGENTS.md');\r\n const facts = await detectProjectFacts(projectRoot);\r\n const body = renderAgentsTemplate(facts);\r\n await fs.mkdir(dir, { recursive: true });\r\n await fs.writeFile(file, body, 'utf8');\r\n return file;\r\n}\r\n\r\n/**\r\n * Print a one-line project status banner and, when relevant, prompt the\r\n * user about scaffolding `AGENTS.md` or continuing in a directory that\r\n * doesn't look like a project. Returns `false` if the user bailed out.\r\n */\r\nexport async function runProjectCheck(opts: {\r\n projectRoot: string;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n}): Promise<boolean> {\r\n const { projectRoot, renderer, reader } = opts;\r\n const kind = await detectProjectKind(projectRoot);\r\n\r\n if (kind === 'initialized') {\r\n renderer.write(\r\n `\\n ${color.green('✓')} Project initialized ${color.dim(`(${path.join(projectRoot, '.wrongstack', 'AGENTS.md')})`)}\\n`,\r\n );\r\n return true;\r\n }\r\n\r\n if (kind === 'project') {\r\n renderer.write(\r\n `\\n ${color.amber('●')} Project detected ${color.dim(`(${projectRoot})`)} but ${color.bold('.wrongstack/AGENTS.md')} is missing.\\n`,\r\n );\r\n const answer = (\r\n await reader.readLine(\r\n ` ${color.amber('?')} Scaffold ${color.bold('AGENTS.md')} now? ${color.dim('[y/N/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q') {\r\n renderer.write(color.dim(' Cancelled.\\n'));\r\n return false;\r\n }\r\n if (answer === 'y' || answer === 'yes') {\r\n try {\r\n const file = await scaffoldAgentsMd(projectRoot);\r\n renderer.write(` ${color.green('✓')} Wrote ${color.dim(file)}\\n`);\r\n } catch (err) {\r\n renderer.writeError(\r\n `Failed to scaffold AGENTS.md: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // 'empty' — no manifest, no AGENTS.md, possibly no git\r\n const gitDir = path.join(projectRoot, '.git');\r\n let hasGit = false;\r\n try {\r\n await fs.access(gitDir);\r\n hasGit = true;\r\n } catch {\r\n // no git\r\n }\r\n\r\n if (!hasGit) {\r\n renderer.write(\r\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\r\n );\r\n const answer = (\r\n await reader.readLine(\r\n ` ${color.amber('?')} No git repo found. ${color.bold('Initialize git?')} ${color.dim('[y/N/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q') {\r\n renderer.write(color.dim(' Cancelled.\\n'));\r\n return false;\r\n }\r\n if (answer === 'y' || answer === 'yes') {\r\n try {\r\n const { spawn } = await import('node:child_process');\r\n await new Promise<void>((resolve, reject) => {\r\n const child = spawn('git', ['init'], { cwd: projectRoot });\r\n child.on('close', (code) => (code === 0 ? resolve() : reject(new Error(`git init failed with ${code}`))));\r\n });\r\n renderer.write(` ${color.green('✓')} Git repository initialized\\n`);\r\n } catch (err) {\r\n renderer.writeError(`git init failed: ${err instanceof Error ? err.message : String(err)}\\n`);\r\n }\r\n }\r\n } else {\r\n renderer.write(\r\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\r\n );\r\n }\r\n\r\n const answer = (\r\n await reader.readLine(` ${color.amber('?')} Continue anyway? ${color.dim('[Y/n/q]')} `)\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q' || answer === 'n' || answer === 'no') {\r\n renderer.write(color.dim(' Cancelled.\\n'));\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport interface LaunchModeChoices {\r\n /** TUI or plain REPL. */\r\n mode: 'tui' | 'repl';\r\n /** Auto-approve every tool call (no permission prompts). */\r\n yolo: boolean;\r\n}\r\n\r\n/**\r\n * Ask for interactive mode (TUI vs REPL) and YOLO. Either prompt is\r\n * skipped when the corresponding CLI flag was already pinned. Returns\r\n * the resolved pair.\r\n */\r\nexport async function runLaunchPrompts(opts: {\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n modePinned?: 'tui' | 'repl';\r\n yoloPinned?: boolean;\r\n}): Promise<LaunchModeChoices> {\r\n const { renderer, reader, modePinned, yoloPinned } = opts;\r\n\r\n let mode: 'tui' | 'repl';\r\n if (modePinned) {\r\n mode = modePinned;\r\n } else {\r\n const answer = (\r\n await reader.readLine(\r\n `\\n ${color.amber('?')} Interactive mode: ${color.bold('T')}UI / ${color.bold('R')}EPL ${color.dim('[T/r/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q') {\r\n renderer.write(color.dim(' Goodbye!\\n'));\r\n process.exit(0);\r\n }\r\n mode = answer === 'r' || answer === 'repl' ? 'repl' : 'tui';\r\n }\r\n\r\n let yolo: boolean;\r\n if (yoloPinned !== undefined) {\r\n yolo = yoloPinned;\r\n } else {\r\n const answer = (\r\n await reader.readLine(\r\n ` ${color.amber('?')} YOLO mode ${color.dim('(auto-approve every tool call)')} ${color.dim('[Y/n/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q') {\r\n renderer.write(color.dim(' Goodbye!\\n'));\r\n process.exit(0);\r\n }\r\n yolo = answer !== 'n' && answer !== 'no';\r\n }\r\n\r\n renderer.write(\r\n `\\n ${color.green('▶')} Launching in ${color.bold(mode.toUpperCase())} mode${yolo ? color.yellow(' (YOLO)') : ''}\\n\\n`,\r\n );\r\n\r\n return { mode, yolo };\r\n}\r\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';\r\nimport {\r\n type ModelsRegistry,\r\n type ProviderConfig,\r\n type ResolvedProvider,\r\n type SecretVault,\r\n type WireFamily,\r\n atomicWrite,\r\n color,\r\n decryptConfigSecrets,\r\n encryptConfigSecrets,\r\n} from '@wrongstack/core';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport {\r\n activeLabel,\r\n maskedKey,\r\n normalizeKeys,\r\n nowIso,\r\n writeKeysBack,\r\n} from './provider-config-utils.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\n\r\nexport interface AuthMenuDeps {\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n modelsRegistry: ModelsRegistry;\r\n vault: SecretVault;\r\n globalConfigPath: string;\r\n}\r\n\r\n/**\r\n * Interactive auth manager. Shows saved providers + keys, lets the user\r\n * add/update/delete keys, set the active key per provider, or add a key\r\n * for any provider in the models.dev catalog. Loops until the user exits.\r\n *\r\n * The legacy single-key `apiKey` field is migrated to `apiKeys[]` lazily\r\n * on first edit, so users who set up under the old schema upgrade\r\n * transparently the first time they open this menu.\r\n */\r\nexport async function runAuthMenu(deps: AuthMenuDeps): Promise<number> {\r\n for (;;) {\r\n const providers = await loadProviders(deps);\r\n renderTopMenu(deps.renderer, providers);\r\n\r\n const ids = Object.keys(providers).sort();\r\n const choice = (await deps.reader.readLine(`\\n${color.amber('?')} Pick: `))\r\n .trim()\r\n .toLowerCase();\r\n\r\n if (!choice || choice === 'q' || choice === 'quit' || choice === 'exit') {\r\n deps.renderer.write(color.dim('Done.\\n'));\r\n return 0;\r\n }\r\n\r\n if (choice === 'a' || choice === 'add') {\r\n await addForNewProvider(deps);\r\n continue;\r\n }\r\n\r\n if (choice === 'c' || choice === 'custom') {\r\n await addCustomProvider(deps);\r\n continue;\r\n }\r\n\r\n const idx = Number.parseInt(choice, 10);\r\n if (!Number.isNaN(idx) && idx >= 1 && idx <= ids.length) {\r\n const pid = ids[idx - 1]!;\r\n await manageProvider(pid, deps);\r\n continue;\r\n }\r\n\r\n // Try matching by provider id directly.\r\n const byId = ids.find((id) => id.toLowerCase() === choice);\r\n if (byId) {\r\n await manageProvider(byId, deps);\r\n continue;\r\n }\r\n\r\n deps.renderer.writeError(`Unknown selection: \"${choice}\"`);\r\n }\r\n}\r\n\r\nfunction renderTopMenu(\r\n renderer: TerminalRenderer,\r\n providers: Record<string, ProviderConfig>,\r\n): void {\r\n renderer.write(`\\n${color.bold('WrongStack')} ${color.dim('— API keys')}\\n\\n`);\r\n const ids = Object.keys(providers).sort();\r\n if (ids.length === 0) {\r\n renderer.write(color.dim(' No providers configured yet.\\n'));\r\n } else {\r\n renderer.write(` ${color.dim('Saved providers:')}\\n`);\r\n let idx = 1;\r\n for (const id of ids) {\r\n const cfg = providers[id]!;\r\n const keys = normalizeKeys(cfg);\r\n const active = activeLabel(cfg, keys);\r\n const summary =\r\n keys.length === 0\r\n ? color.dim('(no keys)')\r\n : keys.length === 1\r\n ? maskedKey(keys[0]!.apiKey)\r\n : `${color.dim(`${keys.length} keys`)} ${color.dim('active:')} ${color.bold(active ?? '?')} ${maskedKey(keys.find((k) => k.label === active)?.apiKey ?? keys[0]!.apiKey)}`;\r\n const fam = cfg.family ? color.dim(`[${cfg.family}]`) : '';\r\n const aliasHint = cfg.type && cfg.type !== id ? color.dim(`→ ${cfg.type}`) : '';\r\n renderer.write(\r\n ` ${color.dim(`${idx}.`.padStart(4))} ${id.padEnd(22)} ${fam} ${aliasHint} ${summary}\\n`,\r\n );\r\n idx++;\r\n }\r\n }\r\n renderer.write(`\\n ${color.dim('Actions:')}\\n`);\r\n renderer.write(` ${color.bold('a')} Add key for a new provider (from catalog)\\n`);\r\n renderer.write(` ${color.bold('c')} Add custom provider (type + family + baseUrl)\\n`);\r\n renderer.write(` ${color.bold('q')} Quit\\n`);\r\n if (ids.length > 0) {\r\n renderer.write(color.dim(`\\n Pick a number to manage that provider's keys.\\n`));\r\n }\r\n}\r\n\r\nasync function manageProvider(providerId: string, deps: AuthMenuDeps): Promise<void> {\r\n for (;;) {\r\n const providers = await loadProviders(deps);\r\n const cfg = providers[providerId];\r\n if (!cfg) {\r\n deps.renderer.writeError(`Provider \"${providerId}\" no longer in config.`);\r\n return;\r\n }\r\n const keys = normalizeKeys(cfg);\r\n const active = activeLabel(cfg, keys);\r\n\r\n deps.renderer.write(\r\n `\\n${color.bold(providerId)} ${cfg.family ? color.dim(`[${cfg.family}]`) : color.amber('[no family]')}\\n`,\r\n );\r\n deps.renderer.write(\r\n color.dim(` type: ${cfg.type ?? providerId}\\n`) +\r\n color.dim(\r\n ` family: ${cfg.family ?? '(unset → resolved from models.dev when type matches)'}\\n`,\r\n ) +\r\n color.dim(` baseUrl: ${cfg.baseUrl ?? '(unset → catalog default)'}\\n`),\r\n );\r\n if (cfg.envVars && cfg.envVars.length > 0) {\r\n deps.renderer.write(color.dim(` envVars: ${cfg.envVars.join(', ')}\\n`));\r\n }\r\n if (cfg.models && cfg.models.length > 0) {\r\n deps.renderer.write(color.dim(` models: ${cfg.models.join(', ')}\\n`));\r\n }\r\n if (keys.length === 0) {\r\n deps.renderer.write(color.dim(' (no keys saved)\\n'));\r\n } else {\r\n for (let i = 0; i < keys.length; i++) {\r\n const k = keys[i]!;\r\n const marker = k.label === active ? color.green('●') : color.dim('○');\r\n deps.renderer.write(\r\n ` ${color.dim(`${i + 1}.`.padStart(4))} ${marker} ${k.label.padEnd(20)} ${maskedKey(k.apiKey)} ${color.dim(k.createdAt)}\\n`,\r\n );\r\n }\r\n }\r\n\r\n deps.renderer.write(`\\n ${color.dim('Actions:')}\\n`);\r\n deps.renderer.write(` ${color.bold('a')} Add another key\\n`);\r\n if (keys.length > 0) {\r\n deps.renderer.write(` ${color.bold('u')} <n> Update key <n>\\n`);\r\n deps.renderer.write(` ${color.bold('d')} <n> Delete key <n>\\n`);\r\n deps.renderer.write(` ${color.bold('s')} <n> Set key <n> as active\\n`);\r\n }\r\n deps.renderer.write(` ${color.bold('f')} Edit family\\n`);\r\n deps.renderer.write(` ${color.bold('B')} Edit baseUrl\\n`);\r\n deps.renderer.write(` ${color.bold('m')} Edit visible model list\\n`);\r\n deps.renderer.write(` ${color.bold('x')} Remove this provider entirely\\n`);\r\n deps.renderer.write(` ${color.bold('b')} Back\\n`);\r\n deps.renderer.write(` ${color.bold('q')} Quit\\n`);\r\n\r\n const raw = (await deps.reader.readLine(`\\n${color.amber('?')} ${providerId} > `)).trim();\r\n if (!raw || raw === 'b' || raw === 'back' || raw === 'q' || raw === 'quit') return;\r\n\r\n const [verb, argRaw] = raw.split(/\\s+/, 2);\r\n const arg = argRaw ? Number.parseInt(argRaw, 10) : Number.NaN;\r\n\r\n if (verb === 'a' || verb === 'add') {\r\n await addKeyForProvider(providerId, deps, cfg);\r\n continue;\r\n }\r\n if (verb === 'x' || verb === 'remove') {\r\n const confirm = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Remove provider \"${providerId}\" and ${keys.length} key(s)? ${color.dim('[y/N/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (confirm === 'q') continue;\r\n if (confirm === 'y' || confirm === 'yes') {\r\n await mutateProviders(deps, (all) => {\r\n delete all[providerId];\r\n });\r\n deps.renderer.write(` ${color.green('✓')} Removed ${providerId}.\\n`);\r\n return;\r\n }\r\n continue;\r\n }\r\n if (verb === 'u' || verb === 'update') {\r\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\r\n deps.renderer.writeError(`Usage: u <1-${keys.length}>`);\r\n continue;\r\n }\r\n const target = keys[arg - 1]!;\r\n const newKey = await readKeyInput(deps, `Updated key for ${target.label}`);\r\n if (!newKey) continue;\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n const list = normalizeKeys(p).map((k) =>\r\n k.label === target.label ? { ...k, apiKey: newKey, createdAt: nowIso() } : k,\r\n );\r\n writeKeysBack(p, list);\r\n });\r\n deps.renderer.write(` ${color.green('✓')} Updated ${providerId}/${target.label}.\\n`);\r\n continue;\r\n }\r\n if (verb === 'd' || verb === 'delete' || verb === 'rm') {\r\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\r\n deps.renderer.writeError(`Usage: d <1-${keys.length}>`);\r\n continue;\r\n }\r\n const target = keys[arg - 1]!;\r\n const confirm = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Delete key \"${target.label}\" (${maskedKey(target.apiKey)})? ${color.dim('[y/N/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (confirm === 'q') continue;\r\n if (confirm !== 'y' && confirm !== 'yes') continue;\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n const list = normalizeKeys(p).filter((k) => k.label !== target.label);\r\n writeKeysBack(p, list);\r\n if (p.activeKey === target.label) {\r\n p.activeKey = list[0]?.label;\r\n }\r\n });\r\n deps.renderer.write(` ${color.green('✓')} Deleted ${providerId}/${target.label}.\\n`);\r\n continue;\r\n }\r\n if (verb === 'f' || verb === 'family') {\r\n const current = cfg.family ?? '';\r\n const ans = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Family ${color.dim(`(anthropic | openai | openai-compatible | google, empty = unset, current: ${current || 'unset'})`)}: `,\r\n )\r\n ).trim() as WireFamily | '';\r\n if (ans !== '' && !['anthropic', 'openai', 'openai-compatible', 'google'].includes(ans)) {\r\n deps.renderer.writeError(`Invalid family: \"${ans}\"`);\r\n continue;\r\n }\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n if (ans === '') delete p.family;\r\n else p.family = ans;\r\n });\r\n deps.renderer.write(` ${color.green('✓')} family → ${ans || '(unset)'}\\n`);\r\n continue;\r\n }\r\n if (verb === 'B' || verb === 'baseurl' || verb === 'base-url') {\r\n const current = cfg.baseUrl ?? '';\r\n const ans = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Base URL ${color.dim(`(empty = unset, current: ${current || 'unset'})`)}: `,\r\n )\r\n ).trim();\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n if (ans === '') delete p.baseUrl;\r\n else p.baseUrl = ans;\r\n });\r\n deps.renderer.write(` ${color.green('✓')} baseUrl → ${ans || '(unset)'}\\n`);\r\n continue;\r\n }\r\n if (verb === 'm' || verb === 'models') {\r\n const current = (cfg.models ?? []).join(', ');\r\n const ans = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Model ids ${color.dim(`(comma-separated, empty = catalog default, current: ${current || 'none'})`)}: `,\r\n )\r\n ).trim();\r\n const list = ans\r\n ? ans\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean)\r\n : [];\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n if (list.length === 0) delete p.models;\r\n else p.models = list;\r\n });\r\n deps.renderer.write(\r\n ` ${color.green('✓')} models → ${list.length === 0 ? '(catalog default)' : list.join(', ')}\\n`,\r\n );\r\n continue;\r\n }\r\n if (verb === 's' || verb === 'set' || verb === 'active') {\r\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\r\n deps.renderer.writeError(`Usage: s <1-${keys.length}>`);\r\n continue;\r\n }\r\n const target = keys[arg - 1]!;\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n // Make sure the apiKeys[] form is canonical before flipping active.\r\n const list = normalizeKeys(p);\r\n writeKeysBack(p, list);\r\n p.activeKey = target.label;\r\n });\r\n deps.renderer.write(\r\n ` ${color.green('✓')} Active key for ${providerId} → ${color.bold(target.label)}.\\n`,\r\n );\r\n continue;\r\n }\r\n deps.renderer.writeError(`Unknown action: \"${raw}\"`);\r\n }\r\n}\r\n\r\n/**\r\n * Pick a provider from the models.dev catalog (grouped by family) and add\r\n * a key for it. Catalog lookup populates family/baseUrl/envVars defaults.\r\n * When the catalog is unavailable we still let the user type a provider\r\n * id and family manually so the offline path keeps working.\r\n */\r\nasync function addForNewProvider(deps: AuthMenuDeps): Promise<void> {\r\n let catalog: ResolvedProvider[] = [];\r\n try {\r\n catalog = (await deps.modelsRegistry.listProviders()).filter((p) => p.family !== 'unsupported');\r\n } catch {\r\n deps.renderer.writeWarning('Catalog unavailable — falling back to manual entry.');\r\n }\r\n\r\n if (catalog.length === 0) {\r\n // Manual entry path\r\n const pid = (await deps.reader.readLine(` ${color.amber('?')} Provider id ${color.dim('[q to quit]')}: `)).trim();\r\n if (!pid || pid === 'q') return;\r\n const fam = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Family (anthropic/openai/openai-compatible/google): `,\r\n )\r\n ).trim() as WireFamily;\r\n const baseUrl = (\r\n await deps.reader.readLine(` ${color.amber('?')} Base URL ${color.dim('(optional)')}: `)\r\n ).trim();\r\n await addKeyForProvider(pid, deps, {\r\n type: pid,\r\n family: fam || undefined,\r\n ...(baseUrl ? { baseUrl } : {}),\r\n });\r\n return;\r\n }\r\n\r\n // Group catalog by family, optionally narrowed by a substring filter\r\n // and/or hiding already-saved entries. The catalog has 120+ entries —\r\n // without a filter the openai-compatible list alone scrolls off-screen,\r\n // so types like \"zai-coding-plan\" get easy to miss.\r\n const saved = new Set(Object.keys(await loadProviders(deps)));\r\n deps.renderer.write(\r\n color.dim(\r\n ` Catalog has ${catalog.length} providers. Filter by name to narrow, or \"s\" for unsaved-only.\\n`,\r\n ),\r\n );\r\n const filterRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Filter ${color.dim('(substring, \"s\" for unsaved-only, q to quit)')}: `,\r\n )\r\n ).trim();\r\n if (filterRaw === 'q') return;\r\n const filterLc = filterRaw.toLowerCase();\r\n const showUnsavedOnly = filterLc === 's' || filterLc === 'unsaved';\r\n const matches = (p: ResolvedProvider): boolean => {\r\n if (showUnsavedOnly) return !saved.has(p.id);\r\n if (!filterLc) return true;\r\n return p.id.toLowerCase().includes(filterLc) || p.name.toLowerCase().includes(filterLc);\r\n };\r\n\r\n const byFamily = new Map<WireFamily, ResolvedProvider[]>();\r\n let filteredCount = 0;\r\n for (const p of catalog) {\r\n if (!matches(p)) continue;\r\n filteredCount++;\r\n const list = byFamily.get(p.family) ?? [];\r\n list.push(p);\r\n byFamily.set(p.family, list);\r\n }\r\n\r\n if (filteredCount === 0) {\r\n deps.renderer.writeError(\r\n `No providers match \"${filterRaw}\". Try a shorter substring or check \\`wstack providers\\` for valid ids.`,\r\n );\r\n return;\r\n }\r\n if (filterRaw && !showUnsavedOnly) {\r\n deps.renderer.write(\r\n color.dim(` ${filteredCount} match${filteredCount === 1 ? '' : 'es'} for \"${filterRaw}\".\\n`),\r\n );\r\n }\r\n\r\n const ordered: ResolvedProvider[] = [];\r\n const familyOrder: WireFamily[] = ['anthropic', 'openai', 'google', 'openai-compatible'];\r\n let idx = 1;\r\n deps.renderer.write('\\n');\r\n for (const fam of familyOrder) {\r\n const list = byFamily.get(fam);\r\n if (!list || list.length === 0) continue;\r\n deps.renderer.write(` ${color.bold(fam)}\\n`);\r\n for (const p of list) {\r\n const savedMark = saved.has(p.id) ? color.cyan('◉') : color.dim('○');\r\n const env = p.envVars[0] ? color.dim(`[${p.envVars[0]}]`) : '';\r\n deps.renderer.write(\r\n ` ${color.dim(`${idx}.`.padStart(4))} ${savedMark} ${p.id.padEnd(22)} ${color.dim(p.name)} ${env}\\n`,\r\n );\r\n ordered.push(p);\r\n idx++;\r\n }\r\n }\r\n deps.renderer.write(`\\n ${color.dim('◉ already saved ○ no key yet')}\\n`);\r\n\r\n const answer = (\r\n await deps.reader.readLine(\r\n `\\n${color.amber('?')} Pick (1-${ordered.length}) or type provider id ${color.dim('[q to quit]')}: `,\r\n )\r\n ).trim();\r\n if (!answer || answer === 'q') return;\r\n\r\n let chosen: ResolvedProvider | undefined;\r\n const num = Number.parseInt(answer, 10);\r\n if (!Number.isNaN(num) && num >= 1 && num <= ordered.length) {\r\n chosen = ordered[num - 1];\r\n } else {\r\n chosen =\r\n ordered.find((p) => p.id.toLowerCase() === answer.toLowerCase()) ??\r\n catalog.find((p) => p.id.toLowerCase() === answer.toLowerCase());\r\n }\r\n if (!chosen) {\r\n deps.renderer.writeError(`No such provider: \"${answer}\"`);\r\n return;\r\n }\r\n\r\n // Always show family + baseUrl as inline prompts with catalog defaults\r\n // so the user can override either one without a separate confirmation\r\n // step. Press Enter to accept the catalog value, or type a new one to\r\n // change it. Useful for routing a catalog-known id through a custom\r\n // proxy or a different wire family (e.g. \"anthropic\"-id provider\r\n // through an openai-compatible gateway).\r\n deps.renderer.write(\r\n color.dim(`\\n Defaults from models.dev — press Enter to keep, or type a new value.\\n`),\r\n );\r\n const famRaw = (\r\n await deps.reader.readLine(` ${color.amber('?')} Family ${color.dim(`[${chosen.family}]`)} ${color.dim('(q to quit)')}: `)\r\n ).trim();\r\n if (famRaw === 'q') return;\r\n let family: WireFamily = chosen.family;\r\n if (famRaw) {\r\n if (!['anthropic', 'openai', 'openai-compatible', 'google'].includes(famRaw)) {\r\n deps.renderer.writeError(\r\n `Invalid family: \"${famRaw}\" (must be anthropic | openai | openai-compatible | google).`,\r\n );\r\n return;\r\n }\r\n family = famRaw as WireFamily;\r\n }\r\n const baseRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Base URL ${color.dim(`[${chosen.apiBase ?? 'unset'}]`)} ${color.dim('(q to quit)')}: `,\r\n )\r\n ).trim();\r\n if (baseRaw === 'q') return;\r\n const baseUrl: string | undefined = baseRaw || chosen.apiBase;\r\n\r\n // Pick the storage alias (= map key under `providers`). Two reasons to\r\n // make this distinct from the catalog id:\r\n // 1. The user may want the SAME catalog provider saved twice with\r\n // different family/baseUrl (e.g. zai-coding-plan once as\r\n // openai-compatible, once as anthropic) — different aliases let\r\n // both entries coexist.\r\n // 2. The CLI launches via `--provider <alias>`, so a short custom\r\n // name like \"zai-claude\" is friendlier than \"zai-coding-plan-anthropic\".\r\n // Auto-suggest a disambiguated alias when family diverges from the\r\n // catalog default, since that's the signal the user is creating a\r\n // second variant — not just adding another key to the same profile.\r\n const providersNow = await loadProviders(deps);\r\n let suggestedAlias = chosen.id;\r\n if (family !== chosen.family) {\r\n let candidate = `${chosen.id}-${family}`;\r\n let n = 2;\r\n while (providersNow[candidate]) {\r\n candidate = `${chosen.id}-${family}-${n}`;\r\n n++;\r\n }\r\n suggestedAlias = candidate;\r\n }\r\n const aliasRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Save under alias ${color.dim(`[${suggestedAlias}]`)} ${color.dim('(used as `--provider <alias>`)')}: `,\r\n )\r\n ).trim();\r\n const alias = aliasRaw || suggestedAlias;\r\n\r\n // Block clobbering an unrelated existing entry. Same alias is fine if\r\n // the user is intentionally adding another KEY to the same profile —\r\n // but only when family + baseUrl match what's already saved. Otherwise\r\n // we'd silently overwrite their settings and pile a key into the wrong\r\n // place (exactly the bug that motivated the alias prompt).\r\n const existing = providersNow[alias];\r\n if (existing) {\r\n const sameFamily = (existing.family ?? chosen.family) === family;\r\n const sameBase = (existing.baseUrl ?? chosen.apiBase) === baseUrl;\r\n if (!sameFamily || !sameBase) {\r\n deps.renderer.writeError(\r\n `Alias \"${alias}\" already exists with different family/baseUrl.\\n ` +\r\n `Existing: family=${existing.family ?? '(unset)'}, baseUrl=${existing.baseUrl ?? '(unset)'}\\n ` +\r\n `New: family=${family}, baseUrl=${baseUrl ?? '(unset)'}\\n ` +\r\n `Pick a different alias to keep them separate.`,\r\n );\r\n return;\r\n }\r\n }\r\n\r\n await addKeyForProvider(alias, deps, {\r\n type: chosen.id,\r\n family,\r\n baseUrl,\r\n envVars: chosen.envVars,\r\n });\r\n}\r\n\r\n/**\r\n * Add a fully user-defined provider that bypasses the models.dev catalog.\r\n * The user picks the type (registry id), wire family, and base URL — all\r\n * three are stored on the entry so the CLI can construct the provider\r\n * via `makeProviderFromConfig` at boot without a catalog lookup.\r\n */\r\nasync function addCustomProvider(deps: AuthMenuDeps): Promise<void> {\r\n deps.renderer.write(\r\n `\\n${color.bold('Custom provider')} ${color.dim('— for local models or proxies not in the models.dev catalog.')}\\n`,\r\n );\r\n const type = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Provider id ${color.dim('(e.g. \"local-llama\", \"my-proxy\", q to quit)')}: `,\r\n )\r\n ).trim();\r\n if (!type || type === 'q') return;\r\n\r\n const existing = (await loadProviders(deps))[type];\r\n if (existing) {\r\n deps.renderer.writeWarning(`\"${type}\" already exists. Pick it from the main menu to edit.`);\r\n return;\r\n }\r\n\r\n const familyRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Wire family ${color.dim('(anthropic | openai | openai-compatible | google)')} ${color.dim('(q to quit)')}: `,\r\n )\r\n ).trim();\r\n if (familyRaw === 'q') return;\r\n if (!['anthropic', 'openai', 'openai-compatible', 'google'].includes(familyRaw)) {\r\n deps.renderer.writeError(`Invalid family: \"${familyRaw}\"`);\r\n return;\r\n }\r\n const family = familyRaw as WireFamily;\r\n\r\n const baseUrl = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Base URL ${color.dim('(e.g. http://localhost:11434/v1, leave empty if not needed)')}: `,\r\n )\r\n ).trim();\r\n\r\n const modelsRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Model ids ${color.dim('(comma-separated, optional)')}: `,\r\n )\r\n ).trim();\r\n const models = modelsRaw\r\n ? modelsRaw\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean)\r\n : undefined;\r\n\r\n const envVarsRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Env var names ${color.dim('(comma-separated, optional fallback for the key)')}: `,\r\n )\r\n ).trim();\r\n const envVars = envVarsRaw\r\n ? envVarsRaw\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean)\r\n : undefined;\r\n\r\n await addKeyForProvider(type, deps, {\r\n type,\r\n family,\r\n ...(baseUrl ? { baseUrl } : {}),\r\n ...(models ? { models } : {}),\r\n ...(envVars ? { envVars } : {}),\r\n });\r\n}\r\n\r\nasync function addKeyForProvider(\r\n providerId: string,\r\n deps: AuthMenuDeps,\r\n template: Partial<ProviderConfig>,\r\n): Promise<void> {\r\n const providers = await loadProviders(deps);\r\n const existing = providers[providerId];\r\n const existingKeys = existing ? normalizeKeys(existing) : [];\r\n const usedLabels = new Set(existingKeys.map((k) => k.label));\r\n\r\n // Suggest a sensible default label\r\n let defaultLabel = 'default';\r\n if (usedLabels.has(defaultLabel)) {\r\n let n = 2;\r\n while (usedLabels.has(`key${n}`)) n++;\r\n defaultLabel = `key${n}`;\r\n }\r\n\r\n const labelRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Label for this key ${color.dim(`[${defaultLabel}]`)}: `,\r\n )\r\n ).trim();\r\n const label = labelRaw || defaultLabel;\r\n if (usedLabels.has(label)) {\r\n deps.renderer.writeError(\r\n `Label \"${label}\" already used for ${providerId}. Use update (u) instead.`,\r\n );\r\n return;\r\n }\r\n\r\n const apiKey = await readKeyInput(deps, `API key for ${providerId}/${label}`);\r\n if (!apiKey) {\r\n deps.renderer.writeError('No key entered. Nothing saved.');\r\n return;\r\n }\r\n\r\n await mutateProviders(deps, (all) => {\r\n const existingProv = all[providerId] ?? { type: providerId, ...template };\r\n // Backfill type/family/baseUrl from template when absent.\r\n if (!existingProv.type) existingProv.type = providerId;\r\n if (!existingProv.family && template.family) existingProv.family = template.family;\r\n if (!existingProv.baseUrl && template.baseUrl) existingProv.baseUrl = template.baseUrl;\r\n if (!existingProv.envVars && template.envVars) existingProv.envVars = template.envVars;\r\n const list = normalizeKeys(existingProv);\r\n list.push({ label, apiKey, createdAt: nowIso() });\r\n writeKeysBack(existingProv, list);\r\n if (!existingProv.activeKey) existingProv.activeKey = label;\r\n all[providerId] = existingProv;\r\n });\r\n\r\n deps.renderer.write(\r\n ` ${color.green('✓')} Saved ${color.bold(providerId)}/${color.bold(label)}. ${color.dim('Use `wstack --provider ' + providerId + ' \"<task>\"` to launch.')}\\n`,\r\n );\r\n}\r\n\r\n/**\r\n * One-shot add: used by `wstack auth <provider>` to skip the menu and\r\n * append a single key. Honors --label / --family / --base-url / --env\r\n * flags. If the label collides, we suffix with a counter.\r\n */\r\nexport async function runAuthDirect(\r\n deps: AuthMenuDeps,\r\n opts: {\r\n providerId: string;\r\n label?: string;\r\n family?: WireFamily;\r\n baseUrl?: string;\r\n envVars?: string[];\r\n },\r\n): Promise<number> {\r\n const { providerId } = opts;\r\n const providers = await loadProviders(deps);\r\n const existing = providers[providerId];\r\n\r\n if (!existing && !opts.family) {\r\n // Try the catalog before giving up.\r\n let knownFamily: WireFamily | undefined;\r\n let knownBase: string | undefined;\r\n let knownEnv: string[] | undefined;\r\n try {\r\n const k = await deps.modelsRegistry.getProvider(providerId);\r\n if (k) {\r\n knownFamily = k.family;\r\n knownBase = k.apiBase;\r\n knownEnv = k.envVars;\r\n }\r\n } catch {\r\n // catalog unavailable\r\n }\r\n if (!knownFamily || knownFamily === 'unsupported') {\r\n deps.renderer.writeError(\r\n `Provider \"${providerId}\" not in catalog. Pass --family <anthropic|openai|openai-compatible|google>.`,\r\n );\r\n return 1;\r\n }\r\n opts.family = knownFamily;\r\n opts.baseUrl ??= knownBase;\r\n opts.envVars ??= knownEnv;\r\n }\r\n\r\n const usedLabels = new Set(existing ? normalizeKeys(existing).map((k) => k.label) : []);\r\n let label = opts.label ?? 'default';\r\n if (usedLabels.has(label)) {\r\n let n = 2;\r\n while (usedLabels.has(`${label}-${n}`)) n++;\r\n label = `${label}-${n}`;\r\n deps.renderer.writeInfo(`Label collided; saving as \"${label}\".`);\r\n }\r\n\r\n const apiKey = await readKeyInput(deps, `API key for ${providerId}/${label}`);\r\n if (!apiKey) return 1;\r\n\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId] ?? { type: providerId };\r\n if (!p.type) p.type = providerId;\r\n if (!p.family && opts.family) p.family = opts.family;\r\n if (!p.baseUrl && opts.baseUrl) p.baseUrl = opts.baseUrl;\r\n if (!p.envVars && opts.envVars) p.envVars = opts.envVars;\r\n const list = normalizeKeys(p);\r\n list.push({ label, apiKey, createdAt: nowIso() });\r\n writeKeysBack(p, list);\r\n if (!p.activeKey) p.activeKey = label;\r\n all[providerId] = p;\r\n });\r\n\r\n deps.renderer.writeInfo(`Stored encrypted key for ${providerId} (label \"${label}\").`);\r\n deps.renderer.writeInfo(`Use: wstack --provider ${providerId} \"<task>\"`);\r\n return 0;\r\n}\r\n\r\nasync function readKeyInput(deps: AuthMenuDeps, intent: string): Promise<string | undefined> {\r\n const key = (\r\n await deps.reader.readSecret(\r\n ` ${color.amber('?')} ${intent} ${color.dim('(hidden, paste OK)')}: `,\r\n )\r\n ).trim();\r\n if (!key) {\r\n deps.renderer.writeError('No key entered.');\r\n return undefined;\r\n }\r\n return key;\r\n}\r\n\r\n/* ----------------------------- I/O helpers ----------------------------- */\r\n\r\n/**\r\n * Read the on-disk config file and return its `providers` map, fully\r\n * decrypted. We don't use `deps.config` here because it's a frozen\r\n * snapshot taken at startup — and once we start mutating keys we want to\r\n * see our own writes on the next iteration.\r\n */\r\nasync function loadProviders(deps: AuthMenuDeps): Promise<Record<string, ProviderConfig>> {\r\n let raw: string;\r\n try {\r\n raw = await fs.readFile(deps.globalConfigPath, 'utf8');\r\n } catch (err) {\r\n // ENOENT is normal on first run; anything else (EACCES, EIO) is worth surfacing.\r\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\r\n deps.renderer.writeWarning(\r\n `Could not read ${deps.globalConfigPath}: ${(err as Error).message}. Treating as empty.`,\r\n );\r\n }\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 (err) {\r\n // Corrupt config: surface loudly. We still return {} so the menu remains\r\n // usable, but mutateProviders() will refuse to overwrite (see below).\r\n deps.renderer.writeWarning(\r\n `Config at ${deps.globalConfigPath} is not valid JSON: ${(err as Error).message}`,\r\n );\r\n return {};\r\n }\r\n const decrypted = decryptConfigSecrets(parsed, deps.vault);\r\n return decrypted.providers ?? {};\r\n}\r\n\r\n/**\r\n * Load → mutate → encrypt → atomic-write. Operates on the FULL config\r\n * file so we don't truncate anything the user has set up elsewhere; only\r\n * the `providers` key gets replaced wholesale with the post-mutation\r\n * value (so deletions actually take effect).\r\n */\r\nasync function mutateProviders(\r\n deps: AuthMenuDeps,\r\n mutator: (providers: Record<string, ProviderConfig>) => void,\r\n): Promise<void> {\r\n let raw: string;\r\n let fileExists = true;\r\n try {\r\n raw = await fs.readFile(deps.globalConfigPath, 'utf8');\r\n } catch (err) {\r\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\r\n // Something other than missing file — refuse to overwrite blindly.\r\n throw new Error(\r\n `Refusing to mutate ${deps.globalConfigPath}: ${(err as Error).message}`,\r\n { cause: err },\r\n );\r\n }\r\n fileExists = false;\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 (err) {\r\n // Refuse to clobber a corrupt-but-existing config — the user may still\r\n // have salvageable keys in it. Bail with a clear error.\r\n if (fileExists) {\r\n throw new Error(\r\n `Refusing to overwrite corrupt config at ${deps.globalConfigPath} ` +\r\n `(${(err as Error).message}). Fix or move the file aside before retrying.`,\r\n { cause: err },\r\n );\r\n }\r\n parsed = {};\r\n }\r\n const decrypted = decryptConfigSecrets(parsed, deps.vault) as Record<string, unknown>;\r\n const providers = (decrypted.providers as Record<string, ProviderConfig>) ?? {};\r\n mutator(providers);\r\n decrypted.providers = providers;\r\n const encrypted = encryptConfigSecrets(decrypted, deps.vault);\r\n await atomicWrite(deps.globalConfigPath, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\r\n}\r\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 { spawn } from 'node:child_process';\nimport { checkForUpdate } from '../../update-check.js';\nimport type { SubcommandHandler } from '../index.js';\n\n/** `wrongstack update` — CLI'yi npm üzerinden günceller */\nexport const updateCmd: SubcommandHandler = async (args, deps) => {\n const cwd = deps.cwd;\n\n // --check-only: sadece kontrol et, indirme\n const checkOnly = args.includes('--check-only') || args.includes('-c');\n\n const info = await checkForUpdate();\n\n if (checkOnly) {\n if (info.outdated) {\n deps.renderer.write(`Update available: v${info.current} → v${info.latest}\\n`);\n } else {\n deps.renderer.write(`You are on the latest version: v${info.current}\\n`);\n }\n return 0;\n }\n\n if (!info.outdated) {\n deps.renderer.write(`You are already on the latest version: v${info.current}\\n`);\n return 0;\n }\n\n deps.renderer.write(`Updating wrongstack from v${info.current} to v${info.latest}...\\n`);\n\n // npm install -g wrongstack@latest\n try {\n const result = await new Promise<{ code: number }>((resolve) => {\n const child = spawn('npm', ['install', '-g', 'wrongstack@latest'], {\n cwd,\n stdio: 'pipe',\n });\n let stderr = '';\n child.stderr?.on('data', (d) => { stderr += d; });\n child.on('close', (code) => resolve({ code: code ?? 0 }));\n });\n\n if (result.code === 0) {\n deps.renderer.write(`\\nUpdated to v${info.latest}. Restart wrongstack to use the new version.\\n`);\n } else {\n deps.renderer.write(`\\nUpdate failed with exit code ${result.code}.\\n`);\n }\n return result.code;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('ENOENT')) {\n deps.renderer.write(`\\nUpdate failed: npm not found in PATH.\\n`);\n return 1;\n }\n deps.renderer.write(`\\nUpdate failed: ${msg}\\n`);\n return 1;\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';\r\nimport * as path from 'node:path';\r\nimport { type Config, atomicWrite, color } from '@wrongstack/core';\r\nimport {\r\n DefaultSecretVault,\r\n encryptConfigSecrets,\r\n} from '@wrongstack/core/security';\r\nimport { detectProjectFacts, renderAgentsTemplate } from '../../slash-commands/helpers.js';\r\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\r\n\r\nexport const initCmd: SubcommandHandler = async (_args, deps) => {\r\n deps.renderer.write(color.bold('WrongStack init\\n'));\r\n deps.renderer.writeInfo('Loading provider catalog from models.dev (cached locally)…');\r\n let providers;\r\n try {\r\n providers = await deps.modelsRegistry.listProviders();\r\n } catch (err) {\r\n deps.renderer.writeError(\r\n `Failed to load provider catalog: ${err instanceof Error ? err.message : err}`,\r\n );\r\n return 1;\r\n }\r\n const detected = providers\r\n .filter((p: { family: string; envVars: string[] }) => p.family !== 'unsupported')\r\n .filter((p: { envVars: string[] }) => p.envVars.some((v: string) => process.env[v]));\r\n const ranked =\r\n detected.length > 0\r\n ? detected\r\n : providers.filter((p: { id: string }) => ['anthropic', 'openai', 'google'].includes(p.id));\r\n if (detected.length > 0)\r\n deps.renderer.write(\r\n `Detected API keys for: ${detected.map((p: { name: string }) => p.name).join(', ')}\\n`,\r\n );\r\n const defaultId = ranked[0]?.id ?? 'anthropic';\r\n const providerAnswer = (await deps.reader.readLine(`Provider [${defaultId}]: `)).trim();\r\n if (providerAnswer === 'q') {\r\n deps.renderer.write(color.dim('Cancelled.\\n'));\r\n return 0;\r\n }\r\n const providerId = providerAnswer || defaultId;\r\n const provider = await deps.modelsRegistry.getProvider(providerId);\r\n if (!provider) {\r\n deps.renderer.writeError(`Provider \"${providerId}\" not found in models.dev catalog.`);\r\n return 1;\r\n }\r\n if (provider.family === 'unsupported') {\r\n deps.renderer.writeError(\r\n `Provider \"${providerId}\" uses ${provider.npm} which has no built-in transport. Install a plugin to enable it.`,\r\n );\r\n return 1;\r\n }\r\n const suggestedModel = (await deps.modelsRegistry.suggestModel(providerId)) ?? '';\r\n const modelHint = suggestedModel ? ` [${suggestedModel}]` : '';\r\n const modelAnswer = (await deps.reader.readLine(`Model${modelHint}: `)).trim();\r\n if (modelAnswer === 'q') {\r\n deps.renderer.write(color.dim('Cancelled.\\n'));\r\n return 0;\r\n }\r\n const modelId = modelAnswer || suggestedModel;\r\n if (!modelId) {\r\n deps.renderer.writeError('No model selected. Aborting.');\r\n return 1;\r\n }\r\n const envHit = provider.envVars.map((v: string) => process.env[v]).find(Boolean);\r\n let apiKey = '';\r\n if (!envHit) {\r\n apiKey = (\r\n await deps.reader.readLine(\r\n `API key (stored in ${deps.paths.globalConfig}; empty = expect ${provider.envVars[0] ?? 'env var'}): `,\r\n )\r\n ).trim();\r\n } else {\r\n deps.renderer.writeInfo(`Found API key in env (${provider.envVars.join(' / ')}).`);\r\n }\r\n await fs.mkdir(deps.paths.globalRoot, { recursive: true });\r\n const config: Partial<Config> = { version: 1, provider: providerId, model: modelId };\r\n if (apiKey) config.apiKey = apiKey;\r\n // Encrypt secret fields before writing to disk.\r\n const keyFile = path.join(path.dirname(deps.paths.globalConfig), '.key');\r\n const vault = new DefaultSecretVault({ keyFile });\r\n const encrypted = encryptConfigSecrets(config, vault);\r\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(encrypted, null, 2));\r\n await fs.mkdir(path.join(deps.projectRoot, '.wrongstack'), { recursive: true });\r\n const agentsFile = path.join(deps.projectRoot, '.wrongstack', 'AGENTS.md');\r\n try {\r\n await fs.access(agentsFile);\r\n } catch {\r\n const detected = await detectProjectFacts(deps.projectRoot);\r\n await atomicWrite(agentsFile, renderAgentsTemplate(detected));\r\n }\r\n deps.renderer.writeInfo(`Wrote ${deps.paths.globalConfig}`);\r\n deps.renderer.writeInfo(`Project state lives in ${deps.paths.projectDir}`);\r\n deps.renderer.writeInfo('Try: wstack \"<task>\" or wstack');\r\n return 0;\r\n};\r\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 * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport { loadDirectorState } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\n/**\n * `wrongstack sessions fleet [runId]`\n *\n * Lists fleet run artifacts under `projectSessions/<runId>/`.\n * When runId is omitted, lists all fleet runs discovered under projectSessions.\n *\n * Artifacts shown:\n * - fleet.json (manifest)\n * - checkpoint.json (state snapshot, if present)\n * - shared/ (scratchpad directory)\n * - subagents/ (per-subagent JSONL transcripts)\n */\nexport const sessionsFleetCmd: SubcommandHandler = async (args, deps) => {\n const runId = args.find((a) => !a.startsWith('-'));\n\n if (runId) {\n return showFleetRun(runId, deps);\n }\n return listFleetRuns(deps);\n};\n\nasync function listFleetRuns(deps: SubcommandDeps): Promise<number> {\n let entries: string[] = [];\n try {\n entries = await fsp.readdir(deps.paths.projectSessions);\n } catch {\n deps.renderer.writeError(`Cannot read projectSessions: ${deps.paths.projectSessions}\\n`);\n return 1;\n }\n\n const runs: Array<{ id: string; manifest: boolean; checkpoint: boolean; subagents: number }> = [];\n\n for (const id of entries) {\n const runDir = path.join(deps.paths.projectSessions, id);\n let stat;\n try {\n stat = await fsp.stat(runDir);\n } catch {\n continue; // skip inaccessible entries\n }\n if (!stat.isDirectory()) continue;\n\n let manifest = false;\n let checkpoint = false;\n let subagentCount = 0;\n let subagentsDir: string;\n\n try {\n await fsp.access(path.join(runDir, 'fleet.json'));\n manifest = true;\n } catch {\n // no manifest\n }\n\n try {\n await fsp.access(path.join(runDir, 'checkpoint.json'));\n checkpoint = true;\n } catch {\n // no checkpoint\n }\n\n try {\n subagentsDir = path.join(runDir, 'subagents');\n const files = await fsp.readdir(subagentsDir);\n subagentCount = files.filter((f) => f.endsWith('.jsonl')).length;\n } catch {\n // no subagents dir\n }\n\n runs.push({ id, manifest, checkpoint, subagents: subagentCount });\n }\n\n if (runs.length === 0) {\n deps.renderer.write('No fleet runs found.\\n');\n return 0;\n }\n\n deps.renderer.write(color.bold('\\nFleet Runs\\n') + '\\n');\n for (const r of runs.sort((a, b) => b.id.localeCompare(a.id))) {\n const checkpointFlag = r.checkpoint ? color.green('✓') : color.dim('○');\n const manifestFlag = r.manifest ? color.green('✓') : color.dim('○');\n const subagentInfo = r.subagents > 0 ? color.dim(` ${r.subagents} subagent jsonl`) : '';\n deps.renderer.write(\n ` ${color.bold(r.id)} ${checkpointFlag} checkpoint ${manifestFlag} manifest${subagentInfo}\\n`,\n );\n }\n deps.renderer.write(\n `\\n ${color.dim('Run `wrongstack sessions fleet <runId>` for details.')}\\n`,\n );\n return 0;\n}\n\nasync function showFleetRun(runId: string, deps: SubcommandDeps): Promise<number> {\n const runDir = path.join(deps.paths.projectSessions, runId);\n\n let stat;\n try {\n stat = await fsp.stat(runDir);\n } catch {\n deps.renderer.writeError(`Fleet run not found: ${runId}\\n`);\n return 1;\n }\n\n if (!stat.isDirectory()) {\n deps.renderer.writeError(`Not a directory: ${runId}\\n`);\n return 1;\n }\n\n deps.renderer.write(color.bold(`\\nFleet Run: ${runId}\\n`) + '\\n');\n\n // Manifest\n const manifestPath = path.join(runDir, 'fleet.json');\n let manifestData: string | null = null;\n try {\n manifestData = await fsp.readFile(manifestPath, 'utf8');\n const manifest = JSON.parse(manifestData);\n const subagents = manifest.subagents ?? [];\n const tasks = manifest.tasks ?? [];\n const completed = tasks.filter((t: { status?: string }) => t.status === 'completed' || t.status === 'failed' || t.status === 'timeout' || t.status === 'stopped');\n deps.renderer.write(\n ` ${color.green('✓')} fleet.json — ${subagents.length} subagent(s), ${completed.length}/${tasks.length} tasks done\\n`,\n );\n } catch {\n deps.renderer.write(` ${color.dim('○')} fleet.json — not found\\n`);\n }\n\n // Checkpoint\n const checkpointPath = path.join(runDir, 'checkpoint.json');\n let checkpointData: string | null = null;\n try {\n checkpointData = await fsp.readFile(checkpointPath, 'utf8');\n const snap = JSON.parse(checkpointData);\n const lockPath = `${checkpointPath}.lock`;\n let lockStatus = color.dim('○ no lock');\n try {\n const lockRaw = await fsp.readFile(lockPath, 'utf8');\n const lock = JSON.parse(lockRaw);\n lockStatus = `${color.yellow('▸')} lock held by pid ${lock.pid} on ${lock.hostname} (started ${lock.startedAt})`;\n } catch {\n lockStatus = color.green('✓ no lock (safe to resume)');\n }\n deps.renderer.write(\n ` ${color.green('✓')} checkpoint.json — updated ${snap.updatedAt}, ${snap.spawnCount} spawns, ${snap.tasks?.length ?? 0} tasks tracked\\n ${lockStatus}\\n`,\n );\n } catch {\n deps.renderer.write(` ${color.dim('○')} checkpoint.json — not found\\n`);\n }\n\n // State snapshot\n if (checkpointData) {\n try {\n const snap = JSON.parse(checkpointData);\n if (snap.subagents?.length) {\n deps.renderer.write('\\n Subagents:\\n');\n for (const s of snap.subagents) {\n deps.renderer.write(\n ` ${color.cyan(s.id)} ${s.name ? `${s.name} ` : ''}${s.provider ? `(${s.provider}/${s.model})` : ''} spawned ${s.spawnedAt}\\n`,\n );\n }\n }\n if (snap.tasks?.length) {\n deps.renderer.write('\\n Tasks:\\n');\n for (const t of snap.tasks) {\n deps.renderer.write(\n ` ${color.dim(t.taskId)} ${t.status} ${t.description ? t.description.slice(0, 50) : '(no description)'}\\n`,\n );\n }\n }\n } catch {\n // skip parse errors\n }\n }\n\n // Subagents directory\n const subagentsDir = path.join(runDir, 'subagents');\n let subagentFiles: string[] = [];\n try {\n subagentFiles = await fsp.readdir(subagentsDir);\n subagentFiles = subagentFiles.filter((f) => f.endsWith('.jsonl'));\n } catch {\n // no subagents dir\n }\n\n if (subagentFiles.length > 0) {\n deps.renderer.write(`\\n Subagent transcripts (${subagentFiles.length}):\\n`);\n for (const f of subagentFiles.sort()) {\n const filePath = path.join(subagentsDir, f);\n let size: number;\n try {\n const s = await fsp.stat(filePath);\n size = s.size;\n } catch {\n size = 0;\n }\n const sizeStr = size > 1024 * 1024 ? `${(size / 1024 / 1024).toFixed(1)}MB` : `${(size / 1024).toFixed(0)}KB`;\n deps.renderer.write(` ${color.dim(f)} ${color.dim(sizeStr)}\\n`);\n }\n } else {\n deps.renderer.write(`\\n ${color.dim('○')} No subagent transcripts\\n`);\n }\n\n // Shared directory\n const sharedDir = path.join(runDir, 'shared');\n try {\n const files = await fsp.readdir(sharedDir);\n deps.renderer.write(`\\n Shared scratchpad: ${files.length} file(s)\\n`);\n } catch {\n deps.renderer.write(`\\n ${color.dim('○')} No shared scratchpad\\n`);\n }\n\n deps.renderer.write(\n `\\n ${color.dim('Resume: wrongstack --resume ' + runId)}\\n`,\n );\n return 0;\n}","import { color } from '@wrongstack/core';\r\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\r\nimport { redactKeys } from './helpers.js';\r\nimport { sessionsFleetCmd } from './sessions-fleet.js';\r\nimport {\r\n listHistory,\r\n getHistoryEntry,\r\n restoreFromHistory,\r\n restoreLast,\r\n} from '../../config-history.js';\r\n\r\nexport const sessionsCmd: SubcommandHandler = async (args, deps) => {\r\n const sub = args[0];\r\n // `wrongstack sessions fleet [runId]` — fleet run inspection\r\n if (sub === 'fleet') {\r\n return sessionsFleetCmd(args.slice(1), deps);\r\n }\r\n if (!deps.sessionStore) {\r\n deps.renderer.writeError('No session store available.');\r\n return 1;\r\n }\r\n const list = await deps.sessionStore.list(20);\r\n if (list.length === 0) {\r\n deps.renderer.write('No sessions found.\\n');\r\n return 0;\r\n }\r\n for (const s of list)\r\n deps.renderer.write(\r\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}\\n`,\r\n );\r\n return 0;\r\n};\r\n\r\nexport const configCmd: SubcommandHandler = async (args, deps) => {\r\n const sub = args[0];\r\n if (!sub || sub === 'show') {\r\n deps.renderer.write(JSON.stringify(redactKeys(deps.config), null, 2) + '\\n');\r\n return 0;\r\n }\r\n if (sub === 'edit') {\r\n const editor = process.env['EDITOR'] ?? 'vi';\r\n deps.renderer.write(`Run: ${editor} ${deps.paths.globalConfig}\\n`);\r\n return 0;\r\n }\r\n if (sub === 'history') {\r\n return runHistory(args.slice(1), deps);\r\n }\r\n if (sub === 'restore') {\r\n return runRestore(args.slice(1), deps);\r\n }\r\n deps.renderer.writeError(`Unknown config subcommand: ${sub}\\n`);\r\n return 1;\r\n};\r\n\r\nfunction extractArg(args: string[], key: string): string | null {\r\n const idx = args.indexOf(key);\r\n if (idx !== -1 && args[idx + 1] !== undefined) return args[idx + 1]!;\r\n const eq = key.startsWith('--') ? args.find((a) => a.startsWith(`${key}=`)) : null;\r\n if (eq) return eq.slice(eq.indexOf('=') + 1);\r\n return null;\r\n}\r\n\r\nasync function runHistory(args: string[], deps: SubcommandDeps): Promise<number> {\r\n const idFlag = extractArg(args, '--id');\r\n if (idFlag) {\r\n const entry = await getHistoryEntry(idFlag);\r\n if (!entry) {\r\n deps.renderer.writeError(`History entry '${idFlag}' not found.\\n`);\r\n return 1;\r\n }\r\n deps.renderer.write(\r\n [\r\n `ID: ${entry.id}`,\r\n `Time: ${new Date(entry.timestamp).toLocaleString()}`,\r\n `Change: ${entry.description}`,\r\n `Diff: ${entry.diffSummary}`,\r\n '',\r\n 'Snapshot (secrets masked):',\r\n JSON.stringify(entry.snapshotMasked, null, 2),\r\n ].join('\\n') + '\\n',\r\n );\r\n return 0;\r\n }\r\n\r\n const entries = await listHistory();\r\n if (entries.length === 0) {\r\n deps.renderer.write('No config history yet.\\n');\r\n return 0;\r\n }\r\n\r\n deps.renderer.write(\r\n [\r\n color.bold('Config History'),\r\n '',\r\n ...entries.map((e, i) => {\r\n const ts = new Date(e.timestamp).toLocaleString();\r\n const desc = e.description.length > 60 ? e.description.slice(0, 60) + '…' : e.description;\r\n return ` [${i + 1}] ${e.id} ${color.dim(ts)}\\n ${desc}`;\r\n }),\r\n '',\r\n ' Run `wrongstack config history --id <id>` for details.',\r\n ' Run `wrongstack config restore <id>` to restore.',\r\n ].join('\\n') + '\\n',\r\n );\r\n return 0;\r\n}\r\n\r\nasync function runRestore(args: string[], deps: SubcommandDeps): Promise<number> {\r\n const latest = args.includes('--latest') || args.includes('-l');\r\n const id = extractArg(args, '--id') ?? (args[0] && !args[0]!.startsWith('-') ? args[0] : null);\r\n\r\n if (latest) {\r\n const result = await restoreLast();\r\n if (!result.ok) {\r\n deps.renderer.writeError(`Restore failed: ${result.error}\\n`);\r\n return 1;\r\n }\r\n deps.renderer.write('Restored from config.json.last.\\n');\r\n return 0;\r\n }\r\n\r\n if (!id) {\r\n deps.renderer.write('Usage: wrongstack config restore <id> | --latest\\n');\r\n return 1;\r\n }\r\n\r\n const result = await restoreFromHistory(id);\r\n if (!result.ok) {\r\n deps.renderer.writeError(`Restore failed: ${result.error}\\n`);\r\n return 1;\r\n }\r\n\r\n deps.renderer.write(`Restored to history entry '${id}'. Backup created.\\n`);\r\n return 0;\r\n}\r\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 --eternal \"<mission>\" Launch eternal-autonomy loop against a goal — Ctrl+C to stop',\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 { updateCmd } from './handlers/update.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 update: updateCmd,\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';\r\nimport * as path from 'node:path';\r\n/**\r\n * Boot phase — everything before the DI container wiring.\r\n * Extracted from index.ts so main() focuses on wire → execute.\r\n */\r\nimport {\r\n type Config,\r\n DefaultLogger,\r\n DefaultModelsRegistry,\r\n DefaultSessionStore,\r\n DefaultSkillLoader,\r\n type ModelsRegistry,\r\n type SecretVault,\r\n ToolRegistry,\r\n type WstackPaths,\r\n TOKENS,\r\n} from '@wrongstack/core';\r\nimport { builtinToolsPack } from '@wrongstack/tools';\r\nimport { parseArgs } from './arg-parser.js';\r\nimport { bootConfig } from './boot-config.js';\r\nimport { ReadlineInputReader } from './input-reader.js';\r\nimport { runPicker, saveToGlobalConfig } from './picker.js';\r\nimport { runLaunchPrompts, runProjectCheck } from './pre-launch.js';\r\nimport { TerminalRenderer } from './renderer.js';\r\nimport { subcommands } from './subcommands/index.js';\r\nimport { patchConfig } from './utils.js';\r\nimport { createDefaultContainer } from '@wrongstack/runtime';\r\nimport { checkForUpdate, type UpdateInfo } from './update-check.js';\r\n\r\nexport interface BootContext {\r\n config: Config;\r\n vault: SecretVault;\r\n wpaths: WstackPaths;\r\n cwd: string;\r\n projectRoot: string;\r\n userHome: string;\r\n flags: Record<string, string | boolean>;\r\n positional: string[];\r\n modelsRegistry: ModelsRegistry;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n logger: DefaultLogger;\r\n /** Set by background update check — if outdated, index.ts shows notification */\r\n updateInfo?: UpdateInfo;\r\n}\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\n/**\r\n * Boot the CLI: parse args, load config, handle subcommand dispatch\r\n * (early exit), run interactive prompts (project check, provider picker,\r\n * mode/yolo). Returns a BootContext for the wiring phase, or an exit\r\n * code when the run should stop here.\r\n */\r\nexport async function boot(argv: string[]): Promise<BootContext | number> {\r\n const { flags, positional } = parseArgs(argv);\r\n\r\n // `wstack resume <id>` is sugar for `wstack --resume <id>`.\r\n if (positional[0] === 'resume' && positional[1] && !subcommands['__noop_resume_marker']) {\r\n flags['resume'] = positional[1];\r\n positional.splice(0, 2);\r\n }\r\n\r\n let bootResult;\r\n try {\r\n bootResult = await bootConfig(flags);\r\n } catch (err) {\r\n process.stderr.write(`Config error: ${err instanceof Error ? err.message : String(err)}\\n`);\r\n return 2;\r\n }\r\n const { paths, config: _config, vault } = bootResult;\r\n let config = _config;\r\n const { cwd, projectRoot, userHome, wpaths, pathResolver } = paths;\r\n void pathResolver; // used by callers via container binding\r\n\r\n const logger = new DefaultLogger({ level: config.log.level, file: wpaths.logFile });\r\n const renderer = new TerminalRenderer();\r\n const reader = new ReadlineInputReader({ historyFile: wpaths.historyFile });\r\n const modelsRegistry = new DefaultModelsRegistry({\r\n cacheFile: wpaths.modelsCache,\r\n ttlSeconds: 24 * 3600,\r\n });\r\n\r\n // Background update check — fires async, non-blocking.\r\n // If --no-check flag is set or WRONGSTACK_NO_CHECK=1, skip it.\r\n let updateInfo: UpdateInfo | undefined;\r\n if (!flags['no-check'] && !process.env['WRONGSTACK_NO_CHECK']) {\r\n // Fire-and-forget: boot doesn't wait, result attached to ctx for index.ts\r\n checkForUpdate()\r\n .then((info) => {\r\n updateInfo = info;\r\n })\r\n .catch(() => {\r\n // silent — never blocks boot\r\n });\r\n }\r\n\r\n // Quick path: subcommand dispatch\r\n const first = positional[0];\r\n if (first && subcommands[first]) {\r\n // Create container to get the SAME skillLoader instance that the main\r\n // interactive CLI uses. This ensures cache invalidation after\r\n // /skill-install propagates correctly to /skill and other commands.\r\n const container = createDefaultContainer({\r\n config,\r\n wpaths,\r\n logger,\r\n modelsRegistry,\r\n bundledSkillsDir: config.features.skills ? resolveBundledSkillsDir() : undefined,\r\n });\r\n const sessionStore = container.resolve(TOKENS.SessionStore);\r\n const skillLoader = container.resolve(TOKENS.SkillLoader);\r\n const toolRegistryForSubcmd = new ToolRegistry();\r\n toolRegistryForSubcmd.registerAllOrThrow(\r\n [...(builtinToolsPack.tools ?? [])],\r\n builtinToolsPack.name,\r\n );\r\n const code = await subcommands[first]!(positional.slice(1), {\r\n config,\r\n renderer,\r\n reader,\r\n sessionStore,\r\n skillLoader,\r\n toolRegistry: toolRegistryForSubcmd,\r\n modelsRegistry,\r\n paths: wpaths,\r\n vault,\r\n cwd,\r\n projectRoot,\r\n userHome,\r\n });\r\n await reader.close();\r\n return code;\r\n }\r\n\r\n const isSingleShot = positional.length > 0 || typeof flags['prompt'] === 'string';\r\n const isInteractiveTTY = !!process.stdin.isTTY && !isSingleShot;\r\n\r\n if (isInteractiveTTY) {\r\n const cont = await runProjectCheck({ projectRoot, renderer, reader });\r\n if (!cont) {\r\n await reader.close();\r\n return 0;\r\n }\r\n }\r\n\r\n // Provider + model selection\r\n const providerFlag = typeof flags['provider'] === 'string' ? flags['provider'] : undefined;\r\n const modelFlag = typeof flags['model'] === 'string' ? flags['model'] : undefined;\r\n if (!(!!providerFlag && !!modelFlag)) {\r\n if (process.stdin.isTTY) {\r\n const picked = await runPicker({\r\n modelsRegistry,\r\n renderer,\r\n reader,\r\n config,\r\n defaultProvider: providerFlag ?? config.provider,\r\n defaultModel: modelFlag ?? config.model,\r\n });\r\n if (!picked) {\r\n if (!config.provider || !config.model) {\r\n await reader.close();\r\n return 2;\r\n }\r\n } else {\r\n const prevProvider = config.provider;\r\n const prevModel = config.model;\r\n config = patchConfig(config, { provider: picked.provider, model: picked.model });\r\n if (picked.provider !== prevProvider || picked.model !== prevModel) {\r\n const saved = await saveToGlobalConfig(\r\n wpaths.globalConfig,\r\n picked.provider,\r\n picked.model,\r\n );\r\n if (saved) renderer.writeInfo(`Saved ${picked.provider}/${picked.model} as default.\\n`);\r\n }\r\n }\r\n } else if (!config.provider || !config.model) {\r\n process.stderr.write(\r\n 'No provider or model configured. Run `wrongstack init` first, or pass --provider <id> --model <id>.\\n',\r\n );\r\n await reader.close();\r\n return 2;\r\n }\r\n }\r\n\r\n // Mode + YOLO prompts\r\n if (isInteractiveTTY) {\r\n let modePinned: 'tui' | 'repl' | undefined;\r\n if (flags['no-tui']) modePinned = 'repl';\r\n else if (flags['tui']) modePinned = 'tui';\r\n const yoloPinned: boolean | undefined = flags['yolo'] === true ? true : undefined;\r\n const choices = await runLaunchPrompts({ renderer, reader, modePinned, yoloPinned });\r\n if (choices.mode === 'tui') {\r\n flags['tui'] = true;\r\n flags['no-tui'] = false;\r\n } else {\r\n flags['tui'] = false;\r\n flags['no-tui'] = true;\r\n }\r\n if (choices.yolo !== config.yolo) config = patchConfig(config, { yolo: choices.yolo });\r\n }\r\n\r\n return {\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 updateInfo,\r\n };\r\n}\r\n","import type { Agent, AttachmentStore, GoalFile, SlashCommandRegistry, TokenCounter } from '@wrongstack/core';\r\nimport { InputBuilder, color, goalFilePath, loadGoal } from '@wrongstack/core';\r\nimport {\r\n readClipboardImage,\r\n routeImagesForModel,\r\n type VisionAdapters,\r\n} from '@wrongstack/runtime';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\nimport { getActiveSDDContext, trySaveSpecFromAIOutput, trySaveTasksFromAIOutput, getTaskListText, getTaskProgress, autoDetectTaskCompletion, getActiveSDDPhase, trySaveImplementationPlan } from './slash-commands/sdd.js';\r\nimport { theme } from './theme.js';\r\nimport { fmtTok } from './utils.js';\r\nimport { CLI_VERSION } from './version.js';\r\n\r\nexport interface ReplOptions {\r\n agent: Agent;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n slashRegistry: SlashCommandRegistry;\r\n attachments: AttachmentStore;\r\n banner?: boolean;\r\n tokenCounter?: TokenCounter;\r\n visionAdapters?: VisionAdapters;\r\n /** Autonomy mode state getter. */\r\n getAutonomy?: () => import('./slash-commands/autonomy.js').AutonomyMode;\r\n /**\r\n * Access the eternal-autonomy engine. When autonomy mode is 'eternal'\r\n * the REPL skips reading user input and instead drives engine\r\n * iterations from this loop — so the engine and the REPL never compete\r\n * for the shared Context. Returns null until /autonomy eternal primes it.\r\n */\r\n getEternalEngine?: () => import('@wrongstack/core').EternalAutonomyEngine | null;\r\n /** Model-specific max context window (tokens). Used for the context bar in turn summaries. */\r\n effectiveMaxContext?: number;\r\n /** Project / folder name shown in the banner. Usually `path.basename(projectRoot)`. */\r\n projectName?: string;\r\n /** Absolute project root — used to locate .wrongstack/goal.json for the goal banner. */\r\n projectRoot?: string;\r\n /** Resolve current model vision support. Falls back to provider capability when omitted. */\r\n supportsVision?: () => boolean | Promise<boolean>;\r\n /** Skill loader for the skill generator wizard. */\r\n skillLoader?: import('@wrongstack/core').SkillLoader;\r\n}\r\n\r\nexport async function runRepl(opts: ReplOptions): Promise<number> {\r\n if (opts.banner !== false) printBanner(opts.renderer, opts.projectName);\r\n // Surface active goal + crash-recovery hint right under the banner so the\r\n // user doesn't have to run /goal status to remember what's in flight.\r\n await renderGoalBanner(opts);\r\n\r\n // Per-iteration abort controller — assigned each loop so a Ctrl+C that\r\n // cancels turn N doesn't leak into turn N+1. `activeCtrl` is updated\r\n // before each agent.run so the SIGINT handler can target it.\r\n let activeCtrl: AbortController | undefined;\r\n let interrupts = 0;\r\n const onSigint = () => {\r\n interrupts++;\r\n if (interrupts >= 2) {\r\n opts.renderer.writeWarning('Exiting.');\r\n process.exit(130);\r\n }\r\n // In eternal mode, the first Ctrl+C should stop the engine — aborting\r\n // the in-flight agent.run and flipping autonomy back to 'off' so the\r\n // outer for-loop returns to reading user input on the next tick.\r\n const engine = opts.getEternalEngine?.();\r\n if (engine && opts.getAutonomy?.() === 'eternal') {\r\n engine.stop();\r\n opts.renderer.writeWarning('Eternal mode stop requested. Press Ctrl+C again to exit.');\r\n return;\r\n }\r\n if (activeCtrl) {\r\n activeCtrl.abort();\r\n opts.renderer.writeWarning('Iteration cancelled. Press Ctrl+C again to exit.');\r\n } else {\r\n opts.renderer.writeWarning('Press Ctrl+C again to exit.');\r\n }\r\n };\r\n process.on('SIGINT', onSigint);\r\n\r\n const builder = new InputBuilder({ store: opts.attachments });\r\n\r\n // Wrap the entire loop so SIGINT and reader teardown run on every exit\r\n // path — exceptions, EOF, breakouts. Previously a throw between `on`\r\n // and the final `off` left the listener installed across REPL restarts.\r\n try {\r\n for (;;) {\r\n // ── Eternal autonomy: drive the engine instead of reading input. ──\r\n // While autonomy mode is 'eternal' we own the REPL turn — the engine\r\n // generates its own directive and runs `agent.run` for us. Stop is\r\n // signaled by the engine flipping to 'stopped' (via /autonomy stop or\r\n // SIGINT). On exit from this branch the for-loop continues normally\r\n // and the next iteration reads user input again.\r\n if (opts.getAutonomy?.() === 'eternal') {\r\n const engine = opts.getEternalEngine?.();\r\n if (!engine) {\r\n opts.renderer.writeWarning('Eternal mode set but no engine wired — falling back to off.');\r\n // Best-effort: nothing more to do here; the engine controller\r\n // was supposed to be primed by /autonomy eternal.\r\n } else {\r\n // Snapshot iteration counter before/after so the log line tells\r\n // the user where they are in the goal lifetime — useful when\r\n // the loop runs for hours and the journal scrolls off screen.\r\n const beforeGoal = await loadGoalSafe(opts);\r\n const beforeIter = beforeGoal?.iterations ?? 0;\r\n opts.renderer.write(\r\n color.dim(`\\n ↳ [eternal #${beforeIter + 1}] running iteration…\\n`),\r\n );\r\n interrupts = 0;\r\n try {\r\n const ok = await engine.runOneIteration();\r\n const afterGoal = await loadGoalSafe(opts);\r\n const last = afterGoal?.journal[afterGoal.journal.length - 1];\r\n if (!ok && !last) {\r\n opts.renderer.write(color.dim(' ↳ [eternal] iteration produced no progress.\\n'));\r\n } else if (last) {\r\n const mark = last.status === 'success' ? color.green('✓') : last.status === 'failure' ? color.red('✗') : color.amber('⊘');\r\n const tail = last.note ? color.dim(` — ${last.note.slice(0, 80)}`) : '';\r\n opts.renderer.write(\r\n ` ${mark} ${color.dim(`#${last.iteration}`)} ${color.dim(`[${last.source}]`)} ${last.task}${tail}\\n`,\r\n );\r\n }\r\n } catch (err) {\r\n opts.renderer.writeError(\r\n `[eternal] ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n // Yield to the event loop so a SIGINT delivered during this\r\n // iteration can be processed before the next one fires.\r\n await new Promise((resolve) => setTimeout(resolve, 250));\r\n continue;\r\n }\r\n }\r\n\r\n let raw: string;\r\n try {\r\n raw = await readPossiblyMultiline(opts);\r\n } catch {\r\n break; // EOF (Ctrl+D)\r\n }\r\n const trimmed = raw.trim();\r\n if (!trimmed) {\r\n interrupts = 0;\r\n continue;\r\n }\r\n interrupts = 0;\r\n\r\n // Plain `q` quits immediately without needing a slash.\r\n if (trimmed === 'q') {\r\n opts.renderer.write(color.dim(' Goodbye!\\n'));\r\n break;\r\n }\r\n\r\n if (trimmed === '/image' || trimmed === '/paste-image' || raw === '\\x1bv') {\r\n await pasteClipboardImage(builder, opts);\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith('/')) {\r\n try {\r\n const res = await opts.slashRegistry.dispatch(trimmed, opts.agent.ctx);\r\n if (res?.message) opts.renderer.write(`${res.message}\\n`);\r\n if (res?.exit) break;\r\n\r\n // ── runText: Auto-trigger AI after slash command ─────────────────\r\n // When a slash command returns runText (e.g. /sdd new, /sdd approve),\r\n // automatically send it to the AI agent so the conversation continues\r\n // without the user having to type anything extra.\r\n if (res?.runText) {\r\n const runBlocks = [{ type: 'text' as const, text: res.runText }];\r\n const runCtrl = new AbortController();\r\n activeCtrl = runCtrl;\r\n try {\r\n const runResult = await opts.agent.run(runBlocks, { signal: runCtrl.signal });\r\n if (runResult.status === 'done' && runResult.finalText) {\r\n // SDD auto-detection: spec, implementation plan, tasks\r\n const specSaved = await trySaveSpecFromAIOutput(runResult.finalText);\r\n if (specSaved) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' ✓ Spec detected and saved! Use /sdd approve to continue.')}\\n`,\r\n );\r\n }\r\n const planSaved = trySaveImplementationPlan(runResult.finalText);\r\n if (planSaved) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' ✓ Implementation plan saved!')}\\n`,\r\n );\r\n }\r\n const tasksSaved = await trySaveTasksFromAIOutput(runResult.finalText);\r\n if (tasksSaved) {\r\n const progress = getTaskProgress();\r\n const count = progress?.total ?? 0;\r\n opts.renderer.write(\r\n `\\n${color.cyan(` ✓ ${count} tasks detected and saved! Use /sdd approve to execute.`)}\\n`,\r\n );\r\n }\r\n // Auto-detect task completion during execution phase\r\n const sddPhase = getActiveSDDPhase();\r\n if (sddPhase === 'executing') {\r\n const autoCompleted = autoDetectTaskCompletion(runResult.finalText);\r\n if (autoCompleted > 0) {\r\n const progress = getTaskProgress();\r\n if (progress) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(` ✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`)}\\n`,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n } catch (runErr) {\r\n // Non-fatal — user can continue manually\r\n opts.renderer.writeWarning('AI auto-trigger failed. You can continue manually.');\r\n }\r\n }\r\n } catch (err) {\r\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\r\n }\r\n continue;\r\n }\r\n\r\n // Route through InputBuilder so big pastes collapse to placeholders.\r\n const ph = await builder.appendPaste(raw);\r\n if (ph) {\r\n const lineCount = raw.split('\\n').length;\r\n opts.renderer.write(color.dim(` ↳ ${ph} (${lineCount} lines)\\n`));\r\n }\r\n const blocks = await builder.submit();\r\n\r\n // ── SDD Session Integration ─────────────────────────────────────────\r\n // When an SDD session is active, inject the session context so the AI\r\n // knows to ask questions, generate specs, etc.\r\n const sddContext = getActiveSDDContext();\r\n const taskList = getTaskListText();\r\n const taskProgress = getTaskProgress();\r\n const sddPhase = getActiveSDDPhase();\r\n\r\n let sddPrefix = '';\r\n if (sddContext) {\r\n sddPrefix = `[SDD SESSION ACTIVE]\\n${sddContext}`;\r\n if (taskList) {\r\n sddPrefix += `\\n\\n**Current Task List:**\\n${taskList}`;\r\n }\r\n if (taskProgress && taskProgress.total > 0) {\r\n sddPrefix += `\\n**Progress:** ${taskProgress.completed}/${taskProgress.total} (${taskProgress.percent}%)`;\r\n }\r\n if (sddPhase === 'executing' && taskProgress && taskProgress.percent === 100) {\r\n sddPrefix += '\\n\\n**All tasks completed! Provide a summary of everything implemented.**';\r\n }\r\n sddPrefix += '\\n\\n---\\nUser message:\\n';\r\n }\r\n\r\n const effectiveBlocks = sddPrefix\r\n ? [\r\n { type: 'text' as const, text: sddPrefix },\r\n ...blocks,\r\n ]\r\n : blocks;\r\n\r\n const runCtrl = new AbortController();\r\n activeCtrl = runCtrl;\r\n try {\r\n const startedAt = Date.now();\r\n const before = opts.tokenCounter?.total();\r\n const costBefore = opts.tokenCounter?.estimateCost().total ?? 0;\r\n const routed = effectiveBlocks.some((block) => block.type === 'image')\r\n ? await routeImagesForModel(effectiveBlocks, {\r\n supportsVision: opts.supportsVision\r\n ? await opts.supportsVision()\r\n : opts.agent.ctx.provider.capabilities.vision,\r\n adapters: opts.visionAdapters ?? [],\r\n ctx: opts.agent.ctx,\r\n signal: runCtrl.signal,\r\n providerId: opts.agent.ctx.provider.id,\r\n model: opts.agent.ctx.model,\r\n })\r\n : { blocks: effectiveBlocks, route: 'none' as const, convertedImages: 0 };\r\n if (routed.route === 'adapter') {\r\n opts.renderer.write(\r\n color.dim(\r\n ` ↳ image analyzed via ${routed.adapterName ?? 'vision adapter'} (${routed.convertedImages} image${routed.convertedImages === 1 ? '' : 's'})\\n`,\r\n ),\r\n );\r\n }\r\n const result = await opts.agent.run(routed.blocks, { signal: runCtrl.signal });\r\n if (result.status === 'aborted') {\r\n opts.renderer.writeWarning('Aborted.');\r\n } else if (result.status === 'failed') {\r\n const err = result.error;\r\n if (err) {\r\n const tag = err.recoverable ? ' (recoverable)' : '';\r\n opts.renderer.writeError(`Failed [${err.severity}]${tag}: ${err.describe()}`);\r\n } else {\r\n opts.renderer.writeError('Failed.');\r\n }\r\n } else if (result.status === 'max_iterations') {\r\n opts.renderer.writeWarning(`Hit max iterations (${result.iterations}).`);\r\n }\r\n\r\n // ── SDD Auto-Detection ──────────────────────────────────────────\r\n // When an SDD session is active, auto-detect spec and task JSON\r\n // in the AI output and save them to the session.\r\n if (result.status === 'done' && result.finalText && sddContext) {\r\n // Try to detect and save a spec\r\n const specSaved = await trySaveSpecFromAIOutput(result.finalText);\r\n if (specSaved) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' ✓ Spec detected and saved! Use /sdd approve to continue.')}\\n`,\r\n );\r\n }\r\n\r\n // Try to save implementation plan (text before task JSON)\r\n const planSaved = trySaveImplementationPlan(result.finalText);\r\n if (planSaved) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' ✓ Implementation plan saved!')}\\n`,\r\n );\r\n }\r\n\r\n // Try to detect and save tasks\r\n const tasksSaved = await trySaveTasksFromAIOutput(result.finalText);\r\n if (tasksSaved) {\r\n const progress = getTaskProgress();\r\n const count = progress?.total ?? 0;\r\n opts.renderer.write(\r\n `\\n${color.cyan(` ✓ ${count} tasks detected and saved! Use /sdd approve to execute.`)}\\n`,\r\n );\r\n }\r\n\r\n // Auto-detect task completion during execution phase\r\n const phase = getActiveSDDPhase();\r\n if (phase === 'executing') {\r\n const autoCompleted = autoDetectTaskCompletion(result.finalText);\r\n if (autoCompleted > 0) {\r\n const progress = getTaskProgress();\r\n if (progress) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(` ✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`)}\\n`,\r\n );\r\n if (progress.percent === 100) {\r\n opts.renderer.write(\r\n `\\n${color.green(' 🎉 All tasks completed! Use /sdd cancel to end the session.')}\\n`,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (opts.tokenCounter && before) {\r\n const after = opts.tokenCounter.total();\r\n const costAfter = opts.tokenCounter.estimateCost().total;\r\n const ctxChip =\r\n opts.effectiveMaxContext && opts.effectiveMaxContext > 0\r\n ? ` ctx: ${renderContextChip(after.input, opts.effectiveMaxContext)}`\r\n : '';\r\n opts.renderer.write(\r\n `\\n${color.dim(\r\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}`,\r\n )}\\n`,\r\n );\r\n }\r\n\r\n // Autonomy loop: after a successful run, if autonomy is active,\r\n // ask the agent to suggest next steps and optionally auto-continue.\r\n if (result.status === 'done' && opts.getAutonomy) {\r\n const autonomy = opts.getAutonomy();\r\n if (autonomy === 'auto') {\r\n // Self-driving: ask the agent to continue with the next logical step.\r\n const nextPrompt =\r\n 'Based on what you just did, what is the single most important next step? ' +\r\n 'Just do it — execute the next logical step without asking for confirmation. ' +\r\n 'If there is nothing meaningful left to do, say \"DONE\" and nothing else.';\r\n opts.renderer.write(color.dim('\\n ↳ [autonomy] continuing…\\n'));\r\n const nextBlocks = [{ type: 'text' as const, text: nextPrompt }];\r\n const nextCtrl = new AbortController();\r\n activeCtrl = nextCtrl;\r\n try {\r\n const nextResult = await opts.agent.run(nextBlocks, { signal: nextCtrl.signal });\r\n if (nextResult.status === 'done' && nextResult.finalText?.trim() === 'DONE') {\r\n opts.renderer.write(color.dim('\\n ↳ [autonomy] agent reports task complete.\\n'));\r\n }\r\n // Loop continues — the for(;;) will read next input, but since\r\n // we're in auto mode, we need to re-trigger. We use a flag.\r\n if (opts.getAutonomy() === 'auto' && nextResult.status === 'done') {\r\n // Re-trigger: the outer loop will continue and we'll hit this\r\n // block again on the next iteration. But we need user input...\r\n // Instead, we just continue the loop with the next prompt.\r\n }\r\n } catch (err) {\r\n opts.renderer.writeError(\r\n `[autonomy] ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n } finally {\r\n activeCtrl = undefined;\r\n }\r\n } else if (autonomy === 'suggest') {\r\n // Suggest mode: ask the agent what to do next, show to user.\r\n const suggestPrompt =\r\n 'Based on what you just did, suggest 3 concrete next steps. ' +\r\n 'Format: numbered list, one line each, no explanation. ' +\r\n 'If there is nothing meaningful left, say \"No further steps needed.\"';\r\n const suggestBlocks = [{ type: 'text' as const, text: suggestPrompt }];\r\n const suggestCtrl = new AbortController();\r\n activeCtrl = suggestCtrl;\r\n try {\r\n const suggestResult = await opts.agent.run(suggestBlocks, { signal: suggestCtrl.signal });\r\n if (suggestResult.status === 'done' && suggestResult.finalText) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' Suggested next steps:')}\\n${suggestResult.finalText}\\n`,\r\n );\r\n }\r\n } catch {\r\n // Silently skip suggestion errors\r\n } finally {\r\n activeCtrl = undefined;\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\r\n } finally {\r\n activeCtrl = undefined;\r\n }\r\n }\r\n\r\n return 0;\r\n } finally {\r\n // Ensure listener + reader cleanup happens on every exit path: normal\r\n // EOF, /quit, an uncaught throw, etc. Without this, a thrown exception\r\n // mid-loop would leave the SIGINT handler attached for the rest of\r\n // the process lifetime (and the reader's terminal handle open).\r\n process.off('SIGINT', onSigint);\r\n await opts.reader.close().catch(() => {\r\n /* best-effort */\r\n });\r\n }\r\n}\r\n\r\nasync function pasteClipboardImage(builder: InputBuilder, opts: ReplOptions): Promise<void> {\r\n try {\r\n const img = await readClipboardImage();\r\n if (!img) {\r\n opts.renderer.write(color.dim(' no image on clipboard\\n'));\r\n return;\r\n }\r\n const placeholder = await builder.appendImage(img.base64, img.mediaType);\r\n const kb = (img.bytes / 1024).toFixed(0);\r\n opts.renderer.write(color.dim(` ↳ ${placeholder} (PNG ${kb}KB)\\n`));\r\n } catch (err) {\r\n opts.renderer.writeError(\r\n `Clipboard image error: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Read the persisted goal file safely. Returns null on any error so the\r\n * REPL never crashes because /goal infrastructure is missing.\r\n */\r\nasync function loadGoalSafe(opts: ReplOptions): Promise<GoalFile | null> {\r\n if (!opts.projectRoot) return null;\r\n try {\r\n return await loadGoal(goalFilePath(opts.projectRoot));\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Print a one-line status banner about the active goal — only when a\r\n * goal file exists. If the previous session left the engine in 'running'\r\n * state, prompt the user (y/N) to resume eternal mode directly so they\r\n * don't have to retype the slash command. Default is N (safe path) — a\r\n * stray Enter after an unexpected crash shouldn't auto-burn tokens.\r\n */\r\nasync function renderGoalBanner(opts: ReplOptions): Promise<void> {\r\n const goal = await loadGoalSafe(opts);\r\n if (!goal) return;\r\n const summary = goal.goal.length > 80 ? `${goal.goal.slice(0, 77)}…` : goal.goal;\r\n opts.renderer.write(\r\n color.dim('Goal: ') + color.bold(summary) + color.dim(` (iter ${goal.iterations})`) + '\\n',\r\n );\r\n if (goal.engineState === 'running') {\r\n opts.renderer.write(\r\n color.amber(' ↺ Eternal engine was running when last session ended.') + '\\n',\r\n );\r\n // Try an interactive y/N prompt. If reader is unavailable or throws\r\n // (non-TTY, redirected stdin, etc.) fall back to the static hint.\r\n try {\r\n const answer = (await opts.reader.readLine(color.dim(' Resume eternal mode? [y/N] ')))\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'y' || answer === 'yes') {\r\n // Dispatch /autonomy eternal as if the user typed it. Routes\r\n // through the normal slash path so YOLO force-on, prime(), banner\r\n // semantics all kick in consistently.\r\n try {\r\n await opts.slashRegistry.dispatch('/autonomy eternal', opts.agent.ctx);\r\n } catch (err) {\r\n opts.renderer.writeError(\r\n `Auto-resume failed: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n } else {\r\n opts.renderer.write(\r\n color.dim(' Not resuming. Use `/autonomy eternal` later to continue.') + '\\n',\r\n );\r\n }\r\n } catch {\r\n // Non-interactive path: just hint.\r\n opts.renderer.write(\r\n color.dim(' Use `/autonomy eternal` to resume.') + '\\n',\r\n );\r\n }\r\n }\r\n opts.renderer.write('\\n');\r\n}\r\n\r\n/**\r\n * Read a line, but support two multiline patterns:\r\n * 1. Trailing `\\` → continue on the next line (shell-style line continuation).\r\n * 2. A line that is exactly `\"\"\"` → start a heredoc; keep reading until\r\n * another bare `\"\"\"`. Useful for pasting code snippets.\r\n * Returns the assembled text and whether it came from a heredoc block (so\r\n * the caller can decide to always collapse heredocs as pastes).\r\n */\r\nasync function readPossiblyMultiline(opts: ReplOptions): Promise<string> {\r\n const firstPrompt = theme.primary('› ');\r\n const contPrompt = color.dim('· ');\r\n const first = await opts.reader.readLine(firstPrompt);\r\n\r\n if (first.trim() === '\"\"\"') {\r\n const parts: string[] = [];\r\n try {\r\n for (;;) {\r\n const next = await opts.reader.readLine(contPrompt);\r\n if (next.trim() === '\"\"\"') break;\r\n parts.push(next);\r\n }\r\n } catch {\r\n // EOF (Ctrl+D) during heredoc — user typed \"\"\" then quit.\r\n // Return what we have; the outer catch breaks the main loop.\r\n return parts.join('\\n');\r\n }\r\n return parts.join('\\n');\r\n }\r\n\r\n let buf = first;\r\n while (buf.endsWith('\\\\')) {\r\n buf = buf.slice(0, -1); // drop the trailing backslash\r\n const cont = await opts.reader.readLine(contPrompt);\r\n buf += '\\n' + cont;\r\n }\r\n return buf;\r\n}\r\n\r\nconst FILLED = '█';\r\nconst EMPTY = '░';\r\n\r\nfunction renderContextChip(used: number, max: number): string {\r\n const ratio = Math.max(0, Math.min(1, used / max));\r\n const pct = Math.round(ratio * 100);\r\n const bar = renderProgress(ratio, 6);\r\n return `${bar} ${pct}% (${fmtTok(used)}/${fmtTok(max)})`;\r\n}\r\n\r\nfunction renderProgress(ratio: number, width: number): string {\r\n const clamped = Math.max(0, Math.min(1, ratio));\r\n const filled = clamped === 0 ? 0 : Math.max(1, Math.round(clamped * width));\r\n const capped = Math.min(width, filled);\r\n return FILLED.repeat(capped) + EMPTY.repeat(width - capped);\r\n}\r\n\r\nfunction printBanner(renderer: TerminalRenderer, projectName?: string): void {\r\n const lines = [\r\n theme.primary(theme.bold('WrongStack')) + color.dim(` v${CLI_VERSION}`),\r\n color.dim('Built on the wrong stack. Shipped anyway.'),\r\n ];\r\n if (projectName && projectName.length > 0) {\r\n lines.push(color.dim('Project: ') + theme.bold(projectName));\r\n }\r\n lines.push(color.dim('Type /help for commands, /exit or q to quit.'), '');\r\n renderer.write(`${lines.join('\\n')}\\n`);\r\n}\r\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 /** Status bar hidden items controller (passed to TUI). */\n statuslineHiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\n setStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\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 /**\n * Access the (possibly null) eternal-autonomy engine. The REPL drives\n * `runOneIteration()` from its main loop when autonomy is 'eternal'.\n */\n getEternalEngine?: () => import('@wrongstack/core').EternalAutonomyEngine | null;\n /**\n * Subscribe to live per-iteration events from the eternal engine.\n * Returns an unsubscribe function. The TUI uses this to render each\n * iteration as a live event entry instead of polling goal.json after\n * the fact. REPL doesn't need it (drives iterations sequentially).\n */\n subscribeEternalIteration?: (\n fn: (entry: import('@wrongstack/core').JournalEntry) => void,\n ) => () => void;\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 statuslineHiddenItems,\n setStatuslineHiddenItems,\n getYolo,\n getAutonomy,\n getEternalEngine,\n subscribeEternalIteration,\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 // Clean up any lingering bash/exec processes.\n const { getProcessRegistry } = await import('@wrongstack/tools');\n getProcessRegistry().killAll();\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 getAutonomy,\n getEternalEngine,\n subscribeEternalIteration,\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 statuslineHiddenItems,\n setStatuslineHiddenItems,\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 subscribeEternalIteration,\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 projectRoot,\n getAutonomy,\n getEternalEngine,\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 FleetManager,\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 NULL_FLEET_BUS,\r\n} from '@wrongstack/core';\r\nimport { ToolExecutor } from '@wrongstack/core/execution';\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 secretScrubber: import('@wrongstack/core').SecretScrubber;\r\n renderer?: import('@wrongstack/core').Renderer;\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 * Fleet-wide cost ceiling for the director. When set, the director\r\n * refuses any new spawn that would push total fleet spend above this\r\n * limit. In-flight subagents complete normally; only new spawns are\r\n * blocked. Only meaningful in director mode.\r\n */\r\n directorBudget?: {\r\n maxCostUsd?: number;\r\n };\r\n /**\r\n * Maximum auto-extensions per subagent per budget kind before the\r\n * director denies further extensions. Default: 2. Only meaningful in\r\n * director mode.\r\n */\r\n maxBudgetExtensions?: number;\r\n /**\r\n * Debounce window for state-checkpoint writes in milliseconds.\r\n * Default: 250. Only meaningful in director mode.\r\n */\r\n checkpointDebounceMs?: number;\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 director?: Director;\r\n /** Own FleetManager — created in buildDirector(), used for pending task\r\n * tracking so status() can show descriptions without host-side state. */\r\n private fleetManager?: import('@wrongstack/core').FleetManager;\r\n /** Lazily built alongside the director — produces per-subagent JSONL\r\n * writers under `<sessionsRoot>/<runId>/`. Null without sessionsRoot. */\r\n private sessionFactory?: DirectorSessionFactory;\r\n private readonly opts: MultiAgentHostOptions;\r\n /**\r\n * Populated by `promoteToDirector` when it refuses to promote. The delegate\r\n * tool reads this through `getPromotionBlockReason` to render an\r\n * actionable error instead of a generic \"Director could not be activated\".\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.director) return this.director;\r\n if (!this.opts.directorMode) return null;\r\n await this.buildDirector();\r\n return this.director ?? null;\r\n }\r\n\r\n /** Access the Director's internal coordinator. Returns the concrete\r\n * `DefaultMultiAgentCoordinator` so callers can use class-only surface\r\n * (`on`, `setRunner`) that isn't part of the `MultiAgentCoordinator`\r\n * interface. */\r\n private getCoordinator(): DefaultMultiAgentCoordinator {\r\n return (this.director as unknown as { coordinator: DefaultMultiAgentCoordinator }).coordinator;\r\n }\r\n\r\n private async buildDirector(): Promise<void> {\r\n if (this.director) return; // Already built — idempotent.\r\n const config: Config = this.deps.configStore.get() as Config;\r\n\r\n // Create the FleetManager FIRST so we can pass it to the Director.\r\n // The FleetManager owns pending task tracking (addPendingTask /\r\n // removePendingTask) used by status(), plus manifest + checkpointing.\r\n const fleetManager = new FleetManager({\r\n manifestPath: this.opts.manifestPath,\r\n sessionsRoot: this.opts.sessionsRoot,\r\n directorRunId: this.opts.directorRunId,\r\n stateCheckpointPath: this.opts.stateCheckpointPath,\r\n sessionWriter: this.opts.sessionWriter,\r\n directorBudget: this.opts.directorBudget,\r\n manifestDebounceMs: 2000,\r\n checkpointDebounceMs: this.opts.checkpointDebounceMs ?? 250,\r\n maxSpawnDepth: 5,\r\n });\r\n this.fleetManager = fleetManager;\r\n\r\n if (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 const coordinatorConfig = {\r\n coordinatorId: randomUUID(),\r\n doneCondition: { type: 'all_tasks_done' as const },\r\n maxConcurrent: 8,\r\n };\r\n\r\n const defaultScratchpad: string | undefined =\r\n this.opts.sharedScratchpadPath ||\r\n (this.opts.sessionsRoot && this.opts.directorRunId\r\n ? path.join(this.opts.sessionsRoot, this.opts.directorRunId, 'shared')\r\n : undefined);\r\n this.director = new Director({\r\n config: coordinatorConfig,\r\n manifestPath: this.opts.manifestPath,\r\n sharedScratchpadPath: defaultScratchpad,\r\n stateCheckpointPath: this.opts.stateCheckpointPath,\r\n sessionWriter: this.opts.sessionWriter,\r\n directorBudget: this.opts.directorBudget,\r\n maxBudgetExtensions: this.opts.maxBudgetExtensions,\r\n checkpointDebounceMs: this.opts.checkpointDebounceMs,\r\n sessionsRoot: this.opts.sessionsRoot,\r\n directorRunId: this.opts.directorRunId,\r\n maxSpawnDepth: 5,\r\n fleetManager, // pass so director.fleetManager is never undefined\r\n });\r\n this.director.on('task.completed', ({ task, result }) => {\r\n this.fleetManager?.removePendingTask(task.id);\r\n this.emitLifecycleCompleted(task.id, result);\r\n });\r\n this.director.fleet.filter('budget.threshold_reached', (e) => {\r\n const payload = e.payload as { kind: string; used: number; limit: number };\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.getCoordinator().on('task.assigned', ({ 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 const runner = this.buildSubagentRunner(config);\r\n this.getCoordinator().setRunner(runner);\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 toolExecutor = new ToolExecutor(this.subagentToolRegistry(subCfg.tools), {\r\n permissionPolicy: new AutoApprovePermissionPolicy(),\r\n secretScrubber: this.deps.secretScrubber,\r\n renderer: this.deps.renderer,\r\n events,\r\n confirmAwaiter: undefined,\r\n iterationTimeoutMs: config.tools?.iterationTimeoutMs ?? 120_000,\r\n perIterationOutputCapBytes: config.tools?.perIterationOutputCapBytes ?? 100_000,\r\n tracer: undefined,\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 toolExecutor,\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 ?? NULL_FLEET_BUS });\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 // Always build a Director (directorMode or not) so that spawn routes\r\n // through the same code path. The Director handles all orchestration.\r\n await this.buildDirector();\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 const { subagentId, taskId } = await this._spawnAndAssign(subagentConfig);\r\n // Track the pending task via FleetManager so status() can show descriptions\r\n // without host-side state duplication.\r\n this.fleetManager?.addPendingTask(taskId, subagentId, description);\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 return { subagentId, taskId };\r\n }\r\n\r\n /**\r\n * Common spawn + assign logic shared by both director mode and raw\r\n * coordinator mode. Extracts the identical body from the two branches\r\n * in `spawn()` so future changes (e.g. adding a new field to both\r\n * paths) are made in one place.\r\n *\r\n * Returns `{ subagentId, taskId }`. Caller holds `pending` tracking\r\n * and event emission — the helper only talks to the coordinator.\r\n */\r\n private async _spawnAndAssign(\r\n subagentConfig: { name: string; role?: string; provider?: string; model?: string; tools?: string[] },\r\n ): Promise<{ subagentId: string; taskId: string }> {\r\n const taskId = randomUUID();\r\n // Always goes through the Director — single code path after buildDirector()\r\n const subagentId = await this.director!.spawn(subagentConfig);\r\n await this.director!.assign({ id: taskId, description: '', subagentId });\r\n return { 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 activeSubagentIds = new Set<string>();\r\n const live: { subagentId: string; status: string; task?: string }[] = [];\r\n if (this.director) {\r\n const coord = this.getCoordinator();\r\n const s = coord.getStatus();\r\n for (const a of s.subagents) {\r\n if (a.status === 'running' || a.status === 'idle') {\r\n activeSubagentIds.add(a.id);\r\n }\r\n live.push({ subagentId: a.id, status: a.status, task: a.currentTask });\r\n }\r\n }\r\n // Pending tasks come from the host's FleetManager (passed to Director)\r\n const fleetStatus = this.fleetManager?.getFleetStatus() ?? { pending: [], live: [] };\r\n const pending = fleetStatus.pending.filter((p) => activeSubagentIds.has(p.subagentId));\r\n // Results always from Director (single source of truth)\r\n const completed = this.director ? this.director.completedResults() : [];\r\n const completedCount = completed.length;\r\n const liveCount = live.filter((s) => s.status === 'running' || s.status === 'idle').length;\r\n const summary = !this.director\r\n ? 'No subagents have been spawned.'\r\n : liveCount > 0\r\n ? `${pending.length} pending, ${liveCount} active, ${completedCount} completed.`\r\n : `${pending.length} pending, ${completedCount} completed.`;\r\n return { pending, completed, 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 completed = this.director ? this.director.completedResults() : [];\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 completed) {\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 // Force a synchronous write — bypass the debounce timer so callers\r\n // (including tests) get an immediate snapshot without polling.\r\n // `writeManifest()` returns the absolute path on success, or null\r\n // when no manifest path is configured on the FleetManager.\r\n return (await this.director.fleetManager?.writeManifest()) ?? null;\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 // With the single-path refactoring, spawn() always builds a Director.\r\n // So a \"coordinator without director\" state can no longer occur.\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.director) return false;\r\n await this.getCoordinator().stop(subagentId);\r\n return true;\r\n }\r\n\r\n async stopAll(): Promise<void> {\r\n if (this.director) {\r\n await this.getCoordinator().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 TOKENS,\r\n type ToolRegistry,\r\n createDefaultPipelines,\r\n estimateRequestTokens,\r\n} from '@wrongstack/core';\r\nimport { ToolExecutor } from '@wrongstack/core/execution';\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 permissionPolicy?: import('@wrongstack/core').PermissionPolicy;\r\n tracer?: import('@wrongstack/core').Tracer | undefined;\r\n}): Agent {\r\n const secretScrubber = params.container.resolve(TOKENS.SecretScrubber);\r\n const renderer = params.container.has(TOKENS.Renderer)\r\n ? params.container.resolve(TOKENS.Renderer)\r\n : undefined;\r\n const logger = params.container.resolve(TOKENS.Logger);\r\n const toolExecutor = new ToolExecutor(params.tools, {\r\n permissionPolicy: params.permissionPolicy ?? params.container.resolve(TOKENS.PermissionPolicy),\r\n secretScrubber,\r\n renderer,\r\n events: params.events,\r\n confirmAwaiter: params.confirmAwaiter,\r\n iterationTimeoutMs: params.config.tools.iterationTimeoutMs,\r\n perIterationOutputCapBytes: params.config.tools.perIterationOutputCapBytes,\r\n tracer: params.tracer,\r\n });\r\n\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 toolExecutor,\r\n tracer: params.tracer,\r\n });\r\n}\r\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { writeFileSync } from 'node:fs';\nimport {\n DefaultHealthRegistry,\n InMemoryMetricsSink,\n startMetricsServer,\n wireMetricsToEvents,\n type EventBus,\n type HealthRegistry,\n type MetricsServerHandle,\n type MetricsSink,\n type WstackPaths,\n} from '@wrongstack/core';\n\nexport interface MetricsWiringDeps {\n flags: Record<string, unknown>;\n wpaths: WstackPaths;\n events: EventBus;\n logger: { info(msg: string): void; warn(msg: string): void };\n config: { provider: string; model: string };\n}\n\nexport interface MetricsWiringResult {\n metricsSink: MetricsSink | undefined;\n healthRegistry: HealthRegistry | undefined;\n metricsServerHandle: MetricsServerHandle | undefined;\n}\n\nexport function setupMetrics(params: MetricsWiringDeps): MetricsWiringResult {\n const { flags, wpaths, events, logger, config } = params;\n let metricsSink: MetricsSink | undefined;\n let healthRegistry: HealthRegistry | undefined;\n let metricsServerHandle: MetricsServerHandle | undefined;\n\n const metricsPortFlag = flags['metrics-port'];\n const metricsPort =\n typeof metricsPortFlag === 'string' && metricsPortFlag.length > 0\n ? Number.parseInt(metricsPortFlag, 10)\n : undefined;\n if (metricsPort !== undefined && !flags.metrics) flags.metrics = true;\n\n if (!flags.metrics) return { metricsSink, healthRegistry, metricsServerHandle };\n\n metricsSink = new InMemoryMetricsSink();\n wireMetricsToEvents(events, metricsSink);\n healthRegistry = new DefaultHealthRegistry();\n healthRegistry.register({\n name: 'session-store',\n check: async () => {\n try {\n await fs.access(wpaths.projectSessions);\n return { status: 'healthy' };\n } catch (e) {\n return { status: 'unhealthy', detail: e instanceof Error ? e.message : 'access denied' };\n }\n },\n });\n healthRegistry.register({\n name: 'provider',\n check: async () => ({\n status: 'healthy',\n data: { id: config.provider, model: config.model },\n }),\n });\n\n const dumpMetrics = () => {\n if (!metricsSink) return;\n try {\n const out = path.join(wpaths.projectSessions, 'metrics.json');\n const snap = metricsSink.snapshot();\n writeFileSync(out, JSON.stringify(snap, null, 2));\n } catch {\n // best-effort\n }\n };\n // Dump on natural exit. We deliberately do NOT register a SIGINT\n // handler that calls process.exit() — doing so would preempt the\n // REPL's \"press Ctrl+C twice to exit\" semantics and turn a soft\n // abort (cancel current iteration) into a hard kill of the process.\n // Other SIGINT handlers (repl.ts, execution.ts, tui/app.tsx) own\n // the exit lifecycle; when they ultimately call process.exit the\n // 'exit' event fires and dumpMetrics runs.\n process.on('exit', dumpMetrics);\n\n if (metricsPort !== undefined && Number.isFinite(metricsPort)) {\n try {\n // eslint-disable-next-line no-restricted-syntax\n metricsServerHandle = startMetricsServer({\n port: metricsPort,\n host: process.env['METRICS_HOST'] ?? '127.0.0.1',\n sink: metricsSink,\n healthRegistry,\n }) as unknown as MetricsServerHandle;\n logger.info(\n `metrics endpoint listening on ${(metricsServerHandle as unknown as { url?: string }).url} (healthz on same port)`,\n );\n process.on('exit', () => {\n void metricsServerHandle?.close().catch(() => {});\n });\n } catch (err) {\n logger.warn(\n `metrics endpoint failed to start: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n return { metricsSink, healthRegistry, metricsServerHandle };\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","import { type AgentPipelines, type Config, type Container, type EventBus, type Logger, type ProviderRegistry, type SlashCommandRegistry, type ToolRegistry, type SessionWriter, type ConfigStore, type ExtensionRegistry, type MetricsSinkView } from '@wrongstack/core';\nimport { loadPlugins, type Plugin } from '@wrongstack/core';\nimport { MCPRegistry } from '@wrongstack/mcp';\nimport createApi from '../plugin-api-factory.js';\nimport { patchConfig } from '../utils.js';\n\nexport interface PluginsWiringDeps {\n config: Config;\n container: Container;\n events: EventBus;\n pipelines: AgentPipelines;\n toolRegistry: ToolRegistry;\n providerRegistry: ProviderRegistry;\n slashCommandRegistry: SlashCommandRegistry;\n mcpRegistry: MCPRegistry;\n log: Logger;\n agent: { extensions?: ExtensionRegistry };\n sessionWriter: SessionWriter;\n metricsSink?: MetricsSinkView;\n configStore: ConfigStore;\n}\n\nexport async function setupPlugins(params: PluginsWiringDeps): Promise<void> {\n const { config, container, events, toolRegistry, providerRegistry, slashCommandRegistry,\n mcpRegistry, log, agent, sessionWriter, metricsSink, configStore, pipelines } = params;\n\n if (!config.features.plugins || !config.plugins || config.plugins.length === 0) return;\n\n const resolvedPlugins: Plugin[] = [];\n for (const p of config.plugins) {\n if (typeof p === 'object' && p.enabled === false) continue;\n const spec = typeof p === 'string' ? p : p.name;\n try {\n const mod = (await import(spec)) as { default?: Plugin };\n if (mod.default) resolvedPlugins.push(mod.default);\n } catch (err) {\n log.warn(`Plugin \"${spec}\" failed to load`, err);\n }\n }\n\n if (resolvedPlugins.length === 0) return;\n\n const pluginOptions = buildPluginOptions(config);\n const pluginConfig =\n Object.keys(pluginOptions).length > 0\n ? patchConfig(config, { extensions: pluginOptions } as Partial<Config>)\n : config;\n\n await loadPlugins(resolvedPlugins, {\n log,\n pluginOptions,\n apiFactory: (plugin) =>\n createApi(plugin.name, {\n container,\n events,\n pipelines: pipelines as unknown as Parameters<typeof createApi>[1]['pipelines'],\n toolRegistry,\n providerRegistry,\n slashCommandRegistry,\n mcpRegistry,\n config: pluginConfig,\n log,\n extensions: agent.extensions,\n sessionWriter: {\n transcriptPath: sessionWriter.transcriptPath,\n append: (e: Record<string, unknown> & { type: string; ts: string }) =>\n sessionWriter.append(e as Parameters<typeof sessionWriter.append>[0]),\n },\n metricsSink,\n configStore,\n }),\n });\n}\n\nfunction buildPluginOptions(config: Config): Record<string, Record<string, unknown>> {\n const options: Record<string, Record<string, unknown>> = {};\n for (const entry of config.plugins ?? []) {\n if (typeof entry !== 'object') continue;\n if (entry.options) options[entry.name] = { ...entry.options };\n }\n for (const [name, value] of Object.entries(config.extensions ?? {})) {\n options[name] = { ...(options[name] ?? {}), ...value };\n }\n return options;\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 /** Director state checkpoint from the prior run — null if this is not a resume. */\n priorFleetState?: import('@wrongstack/core').DirectorStateSnapshot;\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 let dirState;\n if (resumeId) {\n try {\n const fleetRoot = path.join(wpaths.projectSessions, session!.id);\n 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, priorFleetState: dirState ?? undefined };\n}\n","import { createRequire } from 'node:module';\r\nimport * as path from 'node:path';\r\nimport * as fs from 'node:fs/promises';\r\nimport { spawn } from 'node:child_process';\r\nimport type { CommitLLMProvider } from './slash-commands/commit-llm.js';\r\nimport { generateCommitMessageWithLLM } from './slash-commands/commit-llm.js';\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 HybridCompactor,\r\n type MetricsSink,\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 EternalAutonomyEngine,\r\n createDefaultPipelines,\r\n createDelegateTool,\r\n loadDirectorState,\r\n loadPlan,\r\n loadPlugins,\r\n loadTodosCheckpoint,\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 { buildStatuslineCommand, loadStatuslineConfig, saveStatuslineConfig } from './slash-commands/statusline.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 { setupMetrics } from './wiring/metrics.js';\r\nimport { setupPlugins } from './wiring/plugins.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\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 updateInfo,\r\n } = ctx;\r\n\r\n // Show update notification if outdated.\r\n // If boot's background check is still running (cache miss), fire a new\r\n // quick check and wait up to 2s — notification is non-critical.\r\n if (!updateInfo?.outdated) {\r\n const ac = new AbortController();\r\n const timer = setTimeout(() => ac.abort(), 2000);\r\n try {\r\n const { checkForUpdate } = await import('./update-check.js');\r\n updateInfo = await checkForUpdate(ac.signal);\r\n } catch {\r\n // best-effort\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n if (updateInfo?.outdated) {\r\n process.stderr.write(\r\n `\\n \\x1b[33m↑ Update available: v${updateInfo.current} → v${updateInfo.latest}\\x1b[0m Run \\`wrongstack update\\` to upgrade.\\n\\n`,\r\n );\r\n }\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 // Metrics wiring — extracted to wiring/metrics.ts\r\n const { metricsSink, healthRegistry, metricsServerHandle } = (() => {\r\n const ms = setupMetrics({ flags, wpaths, events, logger, config: { provider: config.provider, model: config.model } });\r\n return ms;\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 const priorFleetState = sessResult.priorFleetState;\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 — extracted to wiring/plugins.ts\r\n await setupPlugins({\r\n config,\r\n container,\r\n events,\r\n pipelines,\r\n toolRegistry,\r\n providerRegistry,\r\n slashCommandRegistry: slashRegistry,\r\n mcpRegistry,\r\n log: logger,\r\n agent: agent,\r\n sessionWriter: context.session,\r\n metricsSink,\r\n configStore,\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 || typeof flags['resume'] === 'string';\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 // Eternal-autonomy engine instance — lazy, created when /autonomy eternal is invoked.\r\n // Lives at function scope so /autonomy stop and SIGINT handlers can reach it.\r\n let eternalEngine: import('@wrongstack/core').EternalAutonomyEngine | null = null;\r\n // Listeners installed by the TUI / REPL to receive per-iteration events\r\n // from the engine. We support a list (not a single callback) so both\r\n // surfaces can subscribe without overwriting each other — TUI installs\r\n // one on mount, but the underlying engine is owned at CLI scope.\r\n const eternalListeners = new Set<(entry: import('@wrongstack/core').JournalEntry) => void>();\r\n const broadcastEternalIteration = (entry: import('@wrongstack/core').JournalEntry): void => {\r\n for (const fn of eternalListeners) {\r\n try {\r\n fn(entry);\r\n } catch {\r\n // listener failures must never break the engine — swallow\r\n }\r\n }\r\n };\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 secretScrubber: container.resolve(TOKENS.SecretScrubber),\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 // If we resumed a prior run, inject the checkpoint snapshot so the\r\n // director's in-memory state mirrors the pre-crash fleet.\r\n if (priorFleetState) director.setCheckpointState(priorFleetState);\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 // Statusline config — loaded once and shared with /statusline slash command\r\n const statuslineConfigDeps = {\r\n get: () => loadStatuslineConfig(),\r\n set: (cfg: import('./slash-commands/statusline.js').StatuslineConfig) => saveStatuslineConfig(cfg),\r\n };\r\n\r\n // Statusline hidden items — derived from the config file, kept in sync with the TUI\r\n const hiddenItemsFromConfig = await loadStatuslineConfig();\r\n const hiddenItemsList: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'> = [];\r\n const ALL_ITEMS = ['todos', 'plan', 'fleet', 'git', 'elapsed', 'context', 'cost'] as const;\r\n for (const k of ALL_ITEMS) {\r\n if (!hiddenItemsFromConfig[k]) hiddenItemsList.push(k);\r\n }\r\n const statuslineHiddenItems = hiddenItemsList;\r\n let currentHiddenItems = [...statuslineHiddenItems];\r\n const setStatuslineHiddenItems = (items: typeof statuslineHiddenItems) => {\r\n currentHiddenItems = items;\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 cwd,\r\n projectRoot,\r\n metricsSink,\r\n healthRegistry,\r\n planPath,\r\n modeStore,\r\n fleetStreamController,\r\n llmProvider: provider,\r\n llmModel: config.model,\r\n statuslineConfig: statuslineConfigDeps,\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 onEternalStart: () => {\r\n // Lazy-instantiate so the engine doesn't exist (and doesn't hold\r\n // references to the agent) until the user opts in. Re-uses an\r\n // existing instance if the user stops then restarts within the\r\n // same session — state lives on disk anyway.\r\n if (!eternalEngine) {\r\n eternalEngine = new EternalAutonomyEngine({\r\n agent,\r\n projectRoot,\r\n // Wire the same compactor the manual /compact command uses so\r\n // multi-day eternal loops don't overflow the provider's context.\r\n // effectiveMaxContext is set up earlier with a model-specific\r\n // value; pass it through so aggressive-mode compact triggers\r\n // before the next iteration would actually overflow.\r\n compactor: container.resolve(TOKENS.Compactor) as import('@wrongstack/core').Compactor,\r\n maxContextTokens: effectiveMaxContext > 0 ? effectiveMaxContext : undefined,\r\n onIteration: broadcastEternalIteration,\r\n });\r\n }\r\n // Persist engineState='running' so a crash mid-loop leaves a\r\n // forensic breadcrumb in goal.json. Fire-and-forget — the user\r\n // is on the next line waiting to see \"ETERNAL launching\", not\r\n // for a disk write.\r\n void eternalEngine.prime();\r\n },\r\n onEternalStop: () => {\r\n eternalEngine?.stop();\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 generateCommitMessage: async (diff: string) => {\r\n return generateCommitMessageWithLLM(diff, {\r\n provider: context.provider as CommitLLMProvider,\r\n model: context.model,\r\n });\r\n },\r\n });\r\n for (const cmd of slashCmds) slashRegistry.register(cmd);\r\n\r\n // ── --eternal \"<mission>\" flag: one-shot launch into eternal autonomy. ──\r\n // Writes the mission as the goal (overwriting any prior goal), forces\r\n // YOLO on (consistent with /autonomy eternal), instantiates + primes the\r\n // engine, and flips autonomyMode='eternal' so the REPL's main loop drives\r\n // the engine instead of reading user input. The user can still /autonomy\r\n // stop or Ctrl+C to exit the loop normally.\r\n const eternalFlag = typeof flags['eternal'] === 'string' ? (flags['eternal'] as string).trim() : '';\r\n if (eternalFlag.length > 0) {\r\n const { saveGoal, emptyGoal, goalFilePath, loadGoal } = await import('@wrongstack/core');\r\n const goalPath = goalFilePath(projectRoot);\r\n const prior = await loadGoal(goalPath);\r\n // Preserve journal across flag-driven re-launches so the user can run\r\n // `wstack --eternal \"<x>\"`, ctrl-c, then `wstack --eternal \"<y>\"` and\r\n // still see the prior iteration history under /goal journal.\r\n const next = prior\r\n ? { ...prior, goal: eternalFlag, setAt: new Date().toISOString(), lastActivityAt: new Date().toISOString() }\r\n : emptyGoal(eternalFlag);\r\n await saveGoal(goalPath, next);\r\n // Force YOLO on for destructive ops, matching the /autonomy eternal path.\r\n const policy = container.resolve(TOKENS.PermissionPolicy) as DefaultPermissionPolicy;\r\n policy.setYolo(true);\r\n config = patchConfig(config, { yolo: true });\r\n eternalEngine = new EternalAutonomyEngine({\r\n agent,\r\n projectRoot,\r\n compactor: container.resolve(TOKENS.Compactor) as import('@wrongstack/core').Compactor,\r\n maxContextTokens: effectiveMaxContext > 0 ? effectiveMaxContext : undefined,\r\n onIteration: broadcastEternalIteration,\r\n });\r\n await eternalEngine.prime();\r\n autonomyMode = 'eternal';\r\n renderer.write(\r\n color.red('Eternal mode launching from --eternal flag.') +\r\n color.dim(` Goal: ${eternalFlag.slice(0, 80)}${eternalFlag.length > 80 ? '…' : ''}`) +\r\n '\\n',\r\n );\r\n }\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 statuslineHiddenItems,\r\n setStatuslineHiddenItems,\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 getEternalEngine: () => eternalEngine,\r\n subscribeEternalIteration: (fn) => {\r\n eternalListeners.add(fn);\r\n return () => eternalListeners.delete(fn);\r\n },\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/update-check.ts","../src/webui-server.ts","../src/slash-commands/commit-llm.ts","../src/arg-parser.ts","../src/boot-config.ts","../src/input-reader.ts","../src/provider-helpers.ts","../src/config-history.ts","../src/picker.ts","../src/launch-hints.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/mcp-utils.ts","../src/slash-commands/mcp.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/goal.ts","../src/slash-commands/mode.ts","../src/slash-commands/index.ts","../src/slash-commands/skill-generator.ts","../src/slash-commands/security.ts","../src/slash-commands/statusline.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/subcommands/handlers/update.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-fleet.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/metrics.ts","../src/plugin-api-factory.ts","../src/wiring/plugins.ts","../src/wiring/provider.ts","../src/wiring/session.ts","../src/index.ts"],"names":["path6","fsp","projectContext","color","defaultHomeDir","path10","req","fs10","os5","resolve","fs17","path18","DefaultSecretVault","decryptConfigSecrets","encryptConfigSecrets","atomicWrite","path","os","fs","path2","os2","fs2","path3","fs3","configPath","fs4","path4","summary","msg","policy","path5","fs5","full","fs6","formatTodosList","labels","goalFilePath","loadGoal","unlink","parseArgs","readdir","readFile","join","path7","fs7","path8","os4","installer","fs8","path9","answer","spawn","theme","baseUrl","fs9","createRequire","fs11","path11","fs12","path12","fs13","path13","fs14","readConfig","fs15","path14","fs16","path15","stat","result","resolveWstackPaths","path16","os7","path17","runCtrl","sddPhase","pct","getActiveSDDContext","trySaveSpecFromAIOutput","trySaveImplementationPlan","trySaveTasksFromAIOutput","autoDetectTaskCompletion","getTaskProgress","getActiveSDDPhase","runWebUI","path19","randomUUID","path20","FILLED","EMPTY","renderContextChip","renderProgress","createDefaultPipelines","capabilitiesFor","TOKENS","ToolExecutor","Agent","fs18","path21","makeProviderFromConfig","path22","Context","loadPlan","resolveBundledSkillsDir","checkForUpdate","DefaultPathResolver","createDefaultContainer","ToolRegistry","builtinToolsPack","EventBus","STATUS_ICON","lines","fs19","t","loadDirectorState","director","allServers","cwd","saveGoal","emptyGoal"],"mappings":"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","file":"index.js","sourcesContent":["import * as path from 'node:path';\nimport * as fsp from 'node:fs/promises';\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/** Key used to store SDD session state in ctx.meta for session isolation. */\nconst SDD_META_KEY = 'sdd.state';\n\n/**\n * Get or create the SDD state for the current session.\n * Uses ctx.meta so each concurrent browser/REPL session has isolated state.\n */\nfunction getSessionState(ctx: SlashCommandContext['context']): SDDState {\n if (!ctx) {\n // No Context — fall back to a process-lifetime singleton (CLI-only, single session)\n return sddState;\n }\n let state = ctx.meta[SDD_META_KEY] as SDDState | undefined;\n if (!state) {\n state = new SDDState();\n ctx.meta[SDD_META_KEY] = state;\n }\n return state;\n}\n\n/** Single shared SDD session state for the process lifetime. */\nclass SDDState {\n private builder: AISpecBuilder | null = null;\n private taskStore: DefaultTaskStore | null = null;\n private taskTracker: TaskTracker | null = null;\n private taskGraphId: string | null = null;\n\n getBuilder(): AISpecBuilder | null { return this.builder; }\n setBuilder(b: AISpecBuilder | null) { this.builder = b; }\n getTaskStore(): DefaultTaskStore | null { return this.taskStore; }\n setTaskStore(s: DefaultTaskStore | null) { this.taskStore = s; }\n getTaskTracker(): TaskTracker | null { return this.taskTracker; }\n setTaskTracker(t: TaskTracker | null) { this.taskTracker = t; }\n getTaskGraphId(): string | null { return this.taskGraphId; }\n setTaskGraphId(id: string | null) { this.taskGraphId = id; }\n\n clearTaskState(): void {\n this.taskStore = null;\n this.taskTracker = null;\n this.taskGraphId = null;\n }\n\n getContext(): string | null {\n if (!this.builder) return null;\n const session = this.builder.getSession();\n if (session.phase === 'done') return null;\n return this.builder.getAIPrompt();\n }\n\n getPhase(): AISpecPhase | null {\n return this.builder?.getPhase() ?? null;\n }\n}\n\n/** Process-lifetime singleton — used when no Context is available (CLI single-session mode). */\nconst sddState = new SDDState();\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 return sddState.getContext();\n}\n\n/**\n * Get the active SDD session phase. Returns null if no active session.\n */\nexport function getActiveSDDPhase(): AISpecPhase | null {\n return sddState.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 const builder = sddState.getBuilder();\n if (!builder) return false;\n const spec = builder.tryParseSpecFromOutput(aiOutput);\n if (!spec) return false;\n builder.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 const builder = sddState.getBuilder();\n if (!builder) return false;\n const session = builder.getSession();\n if (!session.spec) return false;\n\n const json = builder.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 sddState.setTaskStore(store);\n sddState.setTaskTracker(tracker);\n sddState.setTaskGraphId(graph.id);\n\n // Save task graph ID to session for persistence\n builder.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 const tracker = sddState.getTaskTracker();\n if (!tracker) return null;\n const progress = tracker.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 const tracker = sddState.getTaskTracker();\n if (!tracker) return null;\n const nodes = tracker.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 const tracker = sddState.getTaskTracker();\n if (!tracker) return false;\n const nodes = tracker.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 tracker.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 const tracker = sddState.getTaskTracker();\n if (!tracker) return 0;\n const pending = tracker.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 tracker.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 tracker.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 tracker.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 tracker.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 tracker.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 const builder = sddState.getBuilder();\n if (!builder) return false;\n const session = builder.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 builder.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 builder.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 sddState.getBuilder();\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 // All state accesses in this command go through sessionState so that\n // concurrent REPL/browser sessions are fully isolated.\n const sessionState = getSessionState(opts.context);\n\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 (!sddState.getBuilder() && !forceFlag) {\n const sessionPath = path.join(projectRoot, '.wrongstack', 'sdd-session.json');\n try {\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 sddState.clearTaskState();\n\n // Gather project context for smarter AI questions\n const projectContext = await gatherProjectContext(projectRoot);\n\n sddState.setBuilder(new AISpecBuilder({\n store: specStore,\n projectContext,\n minQuestions: 2,\n maxQuestions: 10,\n sessionPath: path.join(projectRoot, '.wrongstack', 'sdd-session.json'),\n }));\n const builder = sddState.getBuilder()!;\n builder.startSession(title);\n\n const aiPrompt = builder.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 const builder = sddState.getBuilder();\n if (!builder) {\n return {\n message: 'No active SDD session. Use /sdd new to start one.',\n };\n }\n\n const phase = builder.getSession().phase;\n\n if (phase === 'questioning') {\n // AI hasn't generated spec yet — tell it to generate now\n const sddCtx = builder.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 = builder.getSession().spec;\n if (!spec) {\n return { message: 'No spec to approve.' };\n }\n\n // Save spec and move to implementation phase\n await builder.saveSpec();\n versioning.recordVersion(spec, 'Initial spec approved');\n builder.approve(); // spec_review → implementation\n\n const implPrompt = builder.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 builder.approve(); // task_review → executing\n\n const execPrompt = builder.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 const runBuilder = sddState.getBuilder();\n if (!runBuilder) {\n return {\n message: 'No active SDD session. Use /sdd new to start one.',\n };\n }\n\n const session = runBuilder.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 = runBuilder.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 const planBuilder = sddState.getBuilder();\n if (!planBuilder) {\n return { message: 'No active SDD session. Use /sdd new to start one.' };\n }\n\n const planSession = planBuilder.getSession();\n if (!planSession.implementation) {\n return {\n message: planSession.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 planSession.implementation,\n ].join('\\n'),\n };\n }\n\n case 'spec': {\n const specBuilder = sddState.getBuilder();\n if (!specBuilder) {\n return { message: 'No active SDD session. Use /sdd new to start one.' };\n }\n\n const specSession = specBuilder.getSession();\n if (!specSession.spec) {\n return {\n message: specSession.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 = specSession.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 const taskTracker = sddState.getTaskTracker();\n if (!taskTracker) {\n return { message: 'No tasks generated yet. Use /sdd new to start.' };\n }\n\n const nodes = taskTracker.getAllNodes();\n if (nodes.length === 0) {\n return { message: 'No tasks in the current graph.' };\n }\n\n const progress = taskTracker.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 const doneTracker = sddState.getTaskTracker();\n if (!doneTracker) {\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 = doneTracker.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 doneTracker.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 doneTracker.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 = doneTracker.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 const statusBuilder = sddState.getBuilder();\n if (!statusBuilder) {\n return { message: 'No active SDD session.' };\n }\n\n const session = statusBuilder.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 await fsp.unlink(sessionPath);\n deletedFromDisk = true;\n } catch {\n // No file on disk\n }\n\n const cancelBuilder = sddState.getBuilder();\n if (cancelBuilder) {\n const title = cancelBuilder.getSession().title;\n await cancelBuilder.deleteSession();\n sddState.setBuilder(null);\n sddState.clearTaskState();\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 (sddState.getBuilder()) {\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 sddState.setBuilder(new AISpecBuilder({\n store: specStore,\n projectContext,\n minQuestions: 2,\n maxQuestions: 10,\n sessionPath,\n }));\n const resumeBuilder = sddState.getBuilder()!;\n const loaded = await resumeBuilder.loadSession();\n if (!loaded) {\n sddState.setBuilder(null);\n return { message: 'No saved SDD session found. Use /sdd new to start one.' };\n }\n\n const session = resumeBuilder.getSession();\n\n // Restore task graph if it exists\n let taskCount = 0;\n let completedCount = 0;\n const taskGraphId = resumeBuilder.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 sddState.setTaskStore(store);\n sddState.setTaskTracker(tracker);\n sddState.setTaskGraphId(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 = resumeBuilder.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 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 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 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 { createRequire } from 'node:module';\nimport * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\n\nexport interface UpdateInfo {\n current: string;\n latest: string;\n outdated: boolean;\n checkFailed: boolean;\n}\n\ntype HomeDirFn = () => string;\nconst defaultHomeDir: HomeDirFn = () => os.homedir();\n\n/** Cache dosyasının path'i — test için inject edilebilir homeFn */\nexport function cachePath(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'update-cache.json');\n}\n\n/** 24 saat TTL */\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000;\n\ninterface CacheEntry {\n timestamp: number;\n latestVersion: string;\n error?: string;\n}\n\n/** Mevcut CLI versiyonunu package.json'den oku */\nexport function currentVersion(): string {\n const req = createRequire(import.meta.url);\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\n/** Semver comparison — returns true if a > b */\nfunction isNewer(a: string, b: string): boolean {\n const parse = (v: string) =>\n v\n .replace(/^v/i, '')\n .split('.')\n .map((p) => parseInt(p, 10) || 0);\n const [ap, bp] = [parse(a), parse(b)];\n for (let i = 0; i < Math.max(ap.length, bp.length); i++) {\n const ai = ap[i] ?? 0;\n const bi = bp[i] ?? 0;\n if (ai > bi) return true;\n if (ai < bi) return false;\n }\n return false;\n}\n\n/** Cache oku — süresi geçmişse null döner */\nasync function readCache(homeFn: HomeDirFn = defaultHomeDir): Promise<CacheEntry | null> {\n try {\n const raw = await fs.readFile(cachePath(homeFn), 'utf8');\n const entry = JSON.parse(raw) as CacheEntry;\n if (Date.now() - entry.timestamp > CACHE_TTL_MS) return null;\n return entry;\n } catch {\n return null;\n }\n}\n\n/** Cache yaz */\nasync function writeCache(entry: CacheEntry, homeFn: HomeDirFn = defaultHomeDir): Promise<void> {\n try {\n const dir = path.dirname(cachePath(homeFn));\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(cachePath(homeFn), JSON.stringify(entry, null, 2), 'utf8');\n } catch {\n // best-effort\n }\n}\n\n/** npm registry'den latest versiyonu çek */\nasync function fetchLatestFromNpm(timeoutMs = 3000): Promise<string> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n\n try {\n const res = await fetch('https://registry.npmjs.org/wrongstack/latest', {\n signal: controller.signal,\n headers: { 'Accept': 'application/json' },\n });\n clearTimeout(timer);\n\n if (!res.ok) throw new Error(`npm registry responded ${res.status}`);\n const data = await res.json() as { version?: unknown };\n if (typeof data.version === 'string') return data.version;\n throw new Error('No version field in npm response');\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Update bilgisini döner — cache-first, network fallback */\nexport async function checkForUpdate(\n signal?: AbortSignal,\n homeFn?: HomeDirFn,\n): Promise<UpdateInfo> {\n const current = currentVersion();\n const aborted = () => signal?.aborted ?? false;\n const hf = homeFn ?? defaultHomeDir;\n\n // Already aborted before we even start — skip network entirely\n if (aborted()) {\n return { current, latest: current, outdated: false, checkFailed: true };\n }\n\n // Cache'e bak\n const cached = await readCache(hf);\n if (cached && !cached.error) {\n return {\n current,\n latest: cached.latestVersion,\n outdated: isNewer(cached.latestVersion, current),\n checkFailed: false,\n };\n }\n\n // Network kontrolü\n try {\n const latest = await fetchLatestFromNpm();\n await writeCache({ timestamp: Date.now(), latestVersion: latest }, hf);\n\n return {\n current,\n latest,\n outdated: isNewer(latest, current),\n checkFailed: false,\n };\n } catch (err) {\n // Network hatası — sessiz devam, cache'e yazma\n if (aborted()) {\n return { current, latest: current, outdated: false, checkFailed: true };\n }\n\n // Prior cache varsa onu kullan (eski data ama en azından birşey var)\n if (cached?.latestVersion) {\n return {\n current,\n latest: cached.latestVersion,\n outdated: isNewer(cached.latestVersion, current),\n checkFailed: true,\n };\n }\n\n return { current, latest: current, outdated: false, checkFailed: true };\n }\n}\n\n/** Update varsa notification string'i döner, yoksa null */\nexport async function getUpdateNotification(\n signal?: AbortSignal,\n homeFn?: HomeDirFn,\n): Promise<string | null> {\n const info = await checkForUpdate(signal, homeFn);\n if (info.outdated) {\n return `Update available: v${info.current} → v${info.latest}`;\n }\n return null;\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 * Subscribe to live per-iteration events from the eternal-autonomy\r\n * engine. When provided, the WebUI broadcasts each iteration to every\r\n * connected client. Observability-only — starting the loop still goes\r\n * through REPL/TUI or the `--eternal` flag (the WebUI has no slash\r\n * command dispatch surface yet).\r\n */\r\n subscribeEternalIteration?: (\r\n fn: (entry: import('@wrongstack/core').JournalEntry) => void,\r\n ) => () => void;\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://127.0.0.1:${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 // eternal-autonomy iteration events. Each iteration the engine\r\n // completes lands here and is fanned out to every connected client\r\n // so the frontend can render a live timeline of the autonomous loop.\r\n // The unsubscribe is collected into eventUnsubscribers so a reconnect\r\n // or shutdown tears it down cleanly with the rest of the subscriptions.\r\n if (opts.subscribeEternalIteration) {\r\n eventUnsubscribers.push(\r\n opts.subscribeEternalIteration((entry) => {\r\n broadcast({\r\n type: 'eternal.iteration',\r\n payload: {\r\n iteration: entry.iteration,\r\n at: entry.at,\r\n source: entry.source,\r\n task: entry.task,\r\n status: entry.status,\r\n note: entry.note,\r\n tokens: entry.tokens,\r\n costUsd: entry.costUsd,\r\n },\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://127.0.0.1:${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 let fileExists = true;\r\n try {\r\n raw = await fs.readFile(opts.globalConfigPath, 'utf8');\r\n } catch (err) {\r\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\r\n // Permissions / IO error — refuse to overwrite blindly.\r\n throw new Error(\r\n `Refusing to mutate ${opts.globalConfigPath}: ${(err as Error).message}`,\r\n { cause: err },\r\n );\r\n }\r\n fileExists = false;\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 (err) {\r\n // Refuse to clobber a corrupt-but-existing config (mirrors auth-menu.ts).\r\n if (fileExists) {\r\n throw new Error(\r\n `Refusing to overwrite corrupt config at ${opts.globalConfigPath} ` +\r\n `(${(err as Error).message}). Fix or move the file aside before retrying.`,\r\n { cause: err },\r\n );\r\n }\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","/**\n * LLM-powered commit message generation.\n * Generates proper commit messages by analyzing git diffs via the configured LLM provider.\n */\n\nexport interface CommitLLMProvider {\n complete(\n req: {\n model: string;\n system?: { type: 'text'; text: string }[];\n messages: { role: string; content: { type: 'text'; text: string }[] }[];\n maxTokens: number;\n temperature?: number;\n },\n opts: { signal: AbortSignal },\n ): Promise<{\n /** Normalized content blocks (Anthropic/OpenAI compatible) */\n content: { type: 'text'; text: string }[];\n model: string;\n }>;\n}\n\nexport interface CommitLLMOpts {\n provider: CommitLLMProvider;\n model: string;\n}\n\n/**\n * Generate a proper commit message by asking the LLM to analyze the diff.\n * Falls back to heuristics on failure.\n */\nexport async function generateCommitMessageWithLLM(\n diff: string,\n opts: CommitLLMOpts,\n): Promise<string> {\n const systemPrompt =\n 'You are a helpful assistant that generates concise, conventional-commit-formatted git commit messages. ' +\n 'Analyze the provided diff and output ONLY the commit message (no explanation, no quotes). ' +\n 'Format: <type>(<scope>): <short description> — <type> is one of: feat, fix, docs, style, refactor, test, chore, perf, ci, build, temp. ' +\n 'If the diff contains multiple unrelated changes, pick the most important one. ' +\n 'Keep the description under 72 characters. Example: feat(cli): add /commit LLM integration';\n\n const userPrompt = `Here is the git diff:\\n\\n${diff}`;\n\n try {\n const signal = new AbortController();\n const timeout = setTimeout(() => signal.abort(), 15_000);\n\n const resp = await opts.provider.complete(\n {\n model: opts.model,\n system: [{ type: 'text', text: systemPrompt }],\n messages: [{ role: 'user', content: [{ type: 'text', text: userPrompt }] }],\n maxTokens: 80,\n temperature: 0.3,\n },\n { signal: signal.signal },\n );\n clearTimeout(timeout);\n\n const rawContent = resp.content;\n const text =\n Array.isArray(rawContent)\n ? (rawContent[0] as { type: string; text?: string })?.text ?? ''\n : typeof rawContent === 'object' && rawContent !== null\n ? (rawContent as { type: string; text?: string }).text ?? ''\n : String(rawContent);\n const message = text.trim().split('\\n')[0]!;\n\n if (message.length > 0 && message.length < 200) {\n return message;\n }\n } catch {\n // LLM call failed — fall through to heuristics\n }\n\n // Fallback: use heuristics via the existing function\n return 'chore: update';\n}","/**\r\n * Unified CLI argument parsing. Three parsers that were previously\r\n * spread across index.ts, subcommands/index.ts, and slash-commands/index.ts.\r\n */\r\n\r\n/** Flags that are boolean-only (no value expected after them). */\r\nexport const BOOLEAN_FLAGS = new Set([\r\n 'yolo',\r\n 'verbose',\r\n 'trace',\r\n 'help',\r\n 'version',\r\n 'no-banner',\r\n 'no-features',\r\n 'tui',\r\n 'no-tui',\r\n 'no-recovery',\r\n 'recover',\r\n 'no-alt-screen',\r\n 'alt-screen',\r\n 'output-json',\r\n 'prompt',\r\n 'metrics',\r\n 'webui',\r\n 'no-check',\r\n 'director',\r\n 'no-hints',\r\n 'hints',\r\n]);\r\n\r\n// ------------------------------------------------------------------ main args\r\n\r\nexport interface ParsedArgs {\r\n flags: Record<string, string | boolean>;\r\n positional: string[];\r\n}\r\n\r\n/** Parse top-level `wstack` CLI args. */\r\nexport function parseArgs(argv: string[]): ParsedArgs {\r\n const flags: Record<string, string | boolean> = {};\r\n const positional: string[] = [];\r\n for (let i = 0; i < argv.length; i++) {\r\n const a = argv[i];\r\n if (!a) continue;\r\n if (a === '--') {\r\n positional.push(...argv.slice(i + 1));\r\n break;\r\n }\r\n if (a.startsWith('--')) {\r\n const eq = a.indexOf('=');\r\n if (eq !== -1) {\r\n flags[a.slice(2, eq)] = a.slice(eq + 1);\r\n continue;\r\n }\r\n const name = a.slice(2);\r\n if (BOOLEAN_FLAGS.has(name)) {\r\n flags[name] = true;\r\n continue;\r\n }\r\n if (i + 1 < argv.length && !(argv[i + 1] ?? '').startsWith('-')) {\r\n flags[name] = argv[++i] ?? '';\r\n } else {\r\n flags[name] = true;\r\n }\r\n } else if (a.startsWith('-') && a.length === 2) {\r\n const short = a.slice(1);\r\n const expand: Record<string, string> = { v: 'verbose' };\r\n flags[expand[short] ?? short] = true;\r\n } else {\r\n positional.push(a);\r\n }\r\n }\r\n return { flags, positional };\r\n}\r\n\r\n// --------------------------------------------------------------- auth flags\r\n\r\nexport interface AuthFlags {\r\n positional: string[];\r\n label?: string;\r\n family?: import('@wrongstack/core').WireFamily;\r\n baseUrl?: string;\r\n envVars?: string[];\r\n}\r\n\r\n/** Parse `wstack auth <provider> [--label ...] [--family ...] [...]` flags. */\r\nexport function parseAuthFlags(args: string[]): AuthFlags {\r\n const out: AuthFlags = { positional: [] };\r\n for (let i = 0; i < args.length; i++) {\r\n const a = args[i];\r\n if (a === '--label') {\r\n const v = args[++i];\r\n if (v) out.label = v;\r\n } else if (a === '--family') {\r\n const v = args[++i];\r\n if (v) out.family = v as AuthFlags['family'];\r\n } else if (a === '--base-url') {\r\n const v = args[++i];\r\n if (v) out.baseUrl = v;\r\n } else if (a === '--env') {\r\n const v = args[++i];\r\n if (v)\r\n out.envVars = v\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean);\r\n } else if (a && !a.startsWith('--')) {\r\n out.positional.push(a);\r\n }\r\n }\r\n return out;\r\n}\r\n\r\n// -------------------------------------------------------------- spawn flags\r\n\r\nexport interface SpawnFlags {\r\n description: string;\r\n opts: { provider?: string; model?: string; tools?: string[]; name?: string };\r\n}\r\n\r\n/**\r\n * Parse `/spawn` flags from the args head. Supported:\r\n * --provider=<id> / -p <id> override the subagent's provider id\r\n * --model=<id> / -m <id> override the subagent's model\r\n * --name=<label> / -n <label> display name\r\n * --tools=a,b,c restrict the subagent's tool slice\r\n *\r\n * Anything after the last flag is the task description.\r\n */\r\nexport function parseSpawnFlags(input: string): SpawnFlags {\r\n const opts: SpawnFlags['opts'] = {};\r\n let rest = input;\r\n const consume = (re: RegExp): RegExpMatchArray | null => {\r\n const m = rest.match(re);\r\n if (m) {\r\n rest = rest.slice(m[0].length).replace(/^\\s+/, '');\r\n return m;\r\n }\r\n return null;\r\n };\r\n while (rest.length > 0) {\r\n let m: RegExpMatchArray | null;\r\n m = consume(/^--provider=(\\S+)\\s*/);\r\n if (m) opts.provider = m[1];\r\n else {\r\n m = consume(/^--model=(\\S+)\\s*/);\r\n if (m) opts.model = m[1];\r\n else {\r\n m = consume(/^--name=(\"([^\"]+)\"|(\\S+))\\s*/);\r\n if (m) opts.name = m[2] ?? m[3];\r\n else {\r\n m = consume(/^--tools=(\\S+)\\s*/);\r\n if (m)\r\n opts.tools = m[1]!\r\n .split(',')\r\n .map((t) => t.trim())\r\n .filter(Boolean);\r\n else {\r\n m = consume(/^-p\\s+(\\S+)\\s*/);\r\n if (m) opts.provider = m[1];\r\n else {\r\n m = consume(/^-m\\s+(\\S+)\\s*/);\r\n if (m) opts.model = m[1];\r\n else {\r\n m = consume(/^-n\\s+(\"([^\"]+)\"|(\\S+))\\s*/);\r\n if (m) opts.name = m[2] ?? m[3];\r\n else break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return { description: rest.trim(), opts };\r\n}\r\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 * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport os from 'node:os';\nimport { atomicWrite } from '@wrongstack/core';\n\n// ── Protected files/directories ────────────────────────────────────\n// These are NEVER touched by any operation in this module.\n// Guards against bugs (glob patterns, typos, race conditions)\n// accidentally deleting critical user data.\nconst PROTECTED_BASENAMES = new Set([\n 'config.json',\n '.key',\n 'index.json',\n]);\n\n// Top-level directories that should never be deleted even if a prune\n// pattern accidentally widens. These are absolute directory names\n// relative to the .wrongstack root.\nconst PROTECTED_DIRS = new Set([\n 'cache', // models.dev.json cache\n 'logs', // runtime logs\n 'history', // REPL history\n 'memory.md', // global memory\n 'skills', // global skills\n 'projects', // per-project state\n]);\n\n/**\n * Guard: throw if `filename` is a protected file or lives inside a protected\n * directory. Used before any unlink / rm call to make accidentally deleting\n * critical files impossible.\n */\nfunction assertSafeToDelete(filename: string, parentDir: string): void {\n // 1. Exact-match protected files\n if (PROTECTED_BASENAMES.has(filename)) {\n throw new Error(`Refusing to delete protected file: ${filename}`);\n }\n // 2. No path traversal\n if (filename !== path.basename(filename)) {\n throw new Error(`Refusing to delete path with traversal: ${filename}`);\n }\n // 3. Validate it's a timestamped config backup (config.json.{ts}.bak)\n // before we ever consider deleting it.\n if (!filename.startsWith('config.json.') || !filename.endsWith('.bak')) {\n // Unknown files — be conservative, refuse\n throw new Error(`Refusing to delete unknown file: ${filename}`);\n }\n // 4. Check parent is the .wrongstack root and the target is not a dir\n const resolvedParent = path.resolve(parentDir);\n if (!resolvedParent.endsWith('.wrongstack')) {\n throw new Error(`Unexpected parent directory for bak prune: ${resolvedParent}`);\n }\n}\n\n/**\n * Safely delete a file only if it passes safety checks.\n * Never throws — errors are swallowed (best-effort).\n */\nasync function safeDelete(filePath: string): Promise<void> {\n const dir = path.dirname(filePath);\n const filename = path.basename(filePath);\n try {\n assertSafeToDelete(filename, dir);\n await fs.unlink(filePath);\n } catch (err) {\n // Log but don't crash — safety check violations are logged for debugging\n if (err instanceof Error && err.message.startsWith('Refusing')) {\n process.stderr.write(`[config-history] SAFETY: ${err.message}\\n`);\n }\n // Best-effort — ignore other errors (file doesn't exist, etc.)\n }\n}\n\nexport interface HistoryEntry {\n id: string;\n timestamp: string;\n description: string;\n snapshotMasked: Record<string, unknown>;\n diffSummary: string;\n}\n\ninterface HistoryIndex {\n version: 1;\n entries: Array<{ id: string; timestamp: string; description: string }>;\n}\n\nfunction maskConfigSecrets(cfg: Record<string, unknown>): Record<string, unknown> {\n if (typeof cfg !== 'object' || cfg === null) return {};\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(cfg)) {\n if (k === 'apiKey' || k === 'apiKeys' || k === 'secret' || k === 'secrets') {\n out[k] = '[REDACTED]';\n } else if (typeof v === 'object' && v !== null && !Array.isArray(v)) {\n out[k] = maskConfigSecrets(v as Record<string, unknown>);\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n\nfunction diffSummary(oldCfg: Record<string, unknown>, newCfg: Record<string, unknown>): string {\n const changes: string[] = [];\n const allKeys = new Set([...Object.keys(oldCfg), ...Object.keys(newCfg)]);\n for (const k of allKeys) {\n const o = JSON.stringify(oldCfg[k]);\n const n = JSON.stringify(newCfg[k]);\n if (o !== n) {\n if (k === 'apiKey' || k === 'apiKeys' || k === 'secret') {\n changes.push(`${k}: [CHANGED]`);\n } else if (typeof newCfg[k] !== 'object') {\n changes.push(`${k}: ${oldCfg[k] ?? '(unset)'} → ${newCfg[k]}`);\n } else {\n changes.push(`${k}: [CHANGED]`);\n }\n }\n }\n return changes.length > 0 ? changes.slice(0, 5).join(', ') : 'no changes';\n}\n\ntype HomeDirFn = () => string;\nconst defaultHomeDir: HomeDirFn = () => os.homedir();\n\nfunction historyDir(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'config.history', 'entries');\n}\n\nfunction historyIndexPath(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'config.history', 'index.json');\n}\n\n// NOTE: config.json is the canonical path (defined in wstack-paths.ts).\n// backupCurrent() and restore*() all operate on config.json.\nfunction configPath(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'config.json');\n}\n\nfunction backupLastPath(homeFn: HomeDirFn = defaultHomeDir): string {\n return path.join(homeFn(), '.wrongstack', 'config.json.last');\n}\n\nfunction entryId(ts: string): string {\n return ts.replace(/[:.]/g, '-').slice(0, 19);\n}\n\nasync function ensureHistoryDir(homeFn: HomeDirFn = defaultHomeDir): Promise<void> {\n await fs.mkdir(historyDir(homeFn), { recursive: true });\n}\n\nasync function readIndex(homeFn: HomeDirFn = defaultHomeDir): Promise<HistoryIndex> {\n try {\n const raw = await fs.readFile(historyIndexPath(homeFn), 'utf8');\n return JSON.parse(raw) as HistoryIndex;\n } catch {\n return { version: 1, entries: [] };\n }\n}\n\nasync function writeIndex(idx: HistoryIndex, homeFn: HomeDirFn = defaultHomeDir): Promise<void> {\n await ensureHistoryDir(homeFn);\n // atomicWrite: torn write here would wipe the entire config-history\n // index, hiding the user's prior backups behind a \"no history\" UI.\n await atomicWrite(historyIndexPath(homeFn), JSON.stringify(idx, null, 2));\n}\n\n/**\n * Backup current config.json → config.json.last and timestamped .bak files.\n * Safe to call even if config.json doesn't exist. Never throws.\n *\n * IMPORTANT: config.json and .key are never deleted by this function.\n * Only config.json.*.bak timestamped snapshots are pruned.\n */\nexport async function backupCurrent(homeFn: HomeDirFn = defaultHomeDir): Promise<void> {\n const cfg = configPath(homeFn);\n const last = backupLastPath(homeFn);\n const ts = Date.now();\n\n // Read existing config content for .last backup\n let content: string | undefined;\n try {\n content = await fs.readFile(cfg, 'utf8');\n } catch {\n // May not exist yet — that's fine, we just skip the backup\n }\n\n if (content !== undefined) {\n try {\n await atomicWrite(last, content);\n } catch {\n // Best-effort — .last backup is nice to have but not critical\n }\n }\n\n // Create timestamped snapshot\n if (content !== undefined) {\n try {\n const bakPath = path.join(homeFn(), '.wrongstack', `config.json.${ts}.bak`);\n await atomicWrite(bakPath, content);\n } catch {\n // Best-effort\n }\n }\n\n // Prune old .bak files — keep last 10\n try {\n const dir = path.join(homeFn(), '.wrongstack');\n const files = await fs.readdir(dir);\n const baks = files\n .filter((f) => f.startsWith('config.json.') && f.endsWith('.bak'))\n .sort()\n .reverse();\n for (const f of baks.slice(10)) {\n await safeDelete(path.join(dir, f));\n }\n } catch {\n // Best-effort\n }\n}\n\n/**\n * Append a history entry for a config change.\n */\nexport async function appendHistory(\n oldCfg: Record<string, unknown>,\n newCfg: Record<string, unknown>,\n description: string,\n homeFn: HomeDirFn = defaultHomeDir,\n): Promise<string> {\n const timestamp = new Date().toISOString();\n const id = entryId(timestamp);\n\n await ensureHistoryDir(homeFn);\n\n const entry: HistoryEntry = {\n id,\n timestamp,\n description,\n snapshotMasked: maskConfigSecrets(newCfg) as Record<string, unknown>,\n diffSummary: diffSummary(oldCfg, newCfg),\n };\n\n await fs.writeFile(\n path.join(historyDir(homeFn), `${id}.json`),\n JSON.stringify(entry, null, 2),\n 'utf8',\n );\n\n const idx = await readIndex(homeFn);\n idx.entries.unshift({ id, timestamp, description });\n await writeIndex(idx, homeFn);\n\n return id;\n}\n\n/**\n * List all history entries (newest first).\n */\nexport async function listHistory(homeFn: HomeDirFn = defaultHomeDir): Promise<HistoryIndex['entries']> {\n const idx = await readIndex(homeFn);\n return idx.entries;\n}\n\n/**\n * Get a specific history entry by ID.\n */\nexport async function getHistoryEntry(id: string, homeFn: HomeDirFn = defaultHomeDir): Promise<HistoryEntry | null> {\n try {\n const raw = await fs.readFile(path.join(historyDir(homeFn), `${id}.json`), 'utf8');\n return JSON.parse(raw) as HistoryEntry;\n } catch {\n return null;\n }\n}\n\n/**\n * Restore config.json to a given history entry's snapshot.\n */\nexport async function restoreFromHistory(\n id: string,\n homeFn: HomeDirFn = defaultHomeDir,\n): Promise<{ ok: boolean; backupId: string | null; error?: string }> {\n const entry = await getHistoryEntry(id, homeFn);\n if (!entry) return { ok: false, backupId: null, error: 'History entry not found' };\n\n await backupCurrent(homeFn);\n\n let oldCfg: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(configPath(homeFn), 'utf8');\n oldCfg = JSON.parse(raw);\n } catch {\n // No config to restore from\n }\n\n try {\n await atomicWrite(configPath(homeFn), JSON.stringify(entry.snapshotMasked, null, 2));\n } catch (err) {\n return { ok: false, backupId: null, error: String(err) };\n }\n\n const backupId = await appendHistory(\n oldCfg,\n entry.snapshotMasked as Record<string, unknown>,\n `Restored from history ${id}`,\n homeFn,\n );\n\n return { ok: true, backupId };\n}\n\n/**\n * Restore config.json to the .last backup.\n */\nexport async function restoreLast(homeFn: HomeDirFn = defaultHomeDir): Promise<{ ok: boolean; error?: string }> {\n const last = backupLastPath(homeFn);\n const cfg = configPath(homeFn);\n\n let oldCfg: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(cfg, 'utf8');\n oldCfg = JSON.parse(raw);\n } catch {\n // Ignore\n }\n\n let lastCfg: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(last, 'utf8');\n lastCfg = JSON.parse(raw);\n } catch {\n return { ok: false, error: 'No prior backup found' };\n }\n\n await backupCurrent(homeFn);\n\n try {\n await atomicWrite(cfg, JSON.stringify(lastCfg, null, 2));\n } catch (err) {\n return { ok: false, error: String(err) };\n }\n\n await appendHistory(oldCfg, lastCfg, 'Restored from config.json.last', homeFn);\n\n return { ok: true };\n}","import type { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core';\r\nimport { color } from '@wrongstack/core';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport { hasApiKey } from './provider-helpers.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\nimport { backupCurrent, appendHistory } from './config-history.js';\r\n\r\n// Simple theme alias (avoids importing the full theme module just for one color)\r\nconst theme = { primary: color.amber };\r\n\r\n/**\r\n * Save provider + model to the global config file.\r\n * Creates backups + history entries before writing.\r\n * Returns true if saved successfully.\r\n */\r\nexport async function saveToGlobalConfig(\r\n configPath: string,\r\n provider: string,\r\n model: string,\r\n homeFn: () => string = () => process.env.HOME ?? require('node:os').homedir(),\r\n): Promise<boolean> {\r\n try {\r\n const { atomicWrite } = await import('@wrongstack/core');\r\n const fs = await import('node:fs/promises');\r\n\r\n let existing: Record<string, unknown> = {};\r\n try {\r\n const raw = await fs.readFile(configPath, 'utf8');\r\n existing = JSON.parse(raw) as Record<string, unknown>;\r\n } catch {\r\n // No existing config\r\n }\r\n\r\n const oldCfg = { ...existing };\r\n existing.provider = provider;\r\n existing.model = model;\r\n\r\n // Backup before writing — pass homeFn so it backs up the right config\r\n await backupCurrent(homeFn);\r\n\r\n await atomicWrite(configPath, JSON.stringify(existing, null, 2));\r\n\r\n // Record in history — best-effort (never blocks save)\r\n try {\r\n await appendHistory(\r\n oldCfg,\r\n existing,\r\n `Provider/model changed: ${oldCfg.provider ?? '(none)'} → ${provider}, ${oldCfg.model ?? '(none)'} → ${model}`,\r\n homeFn,\r\n );\r\n } catch {\r\n // best-effort\r\n }\r\n\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport interface PickerResult {\r\n provider: string;\r\n model: string;\r\n}\r\n\r\n/**\r\n * Interactive provider + model picker. Lists supported providers grouped\r\n * by wire family — by default only those with an API key (env or stored\r\n * config), so you see only what you can actually launch into. Falls back\r\n * to the full catalog when no keys are found anywhere.\r\n *\r\n * When `defaultProvider`/`defaultModel` are passed, they're pre-selected\r\n * so the user can press Enter to accept the previous choice.\r\n */\r\nexport async function runPicker(deps: {\r\n modelsRegistry: ModelsRegistry;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n config?: Config;\r\n defaultProvider?: string;\r\n defaultModel?: string;\r\n}): Promise<PickerResult | undefined> {\r\n const { modelsRegistry, renderer, reader, config, defaultProvider, defaultModel } = deps;\r\n\r\n renderer.write(\r\n `\\n${color.bold(theme.primary('WrongStack') + color.dim(' — Provider & Model Selection'))}\\n`,\r\n );\r\n renderer.write(color.dim('Loading provider catalog…\\n'));\r\n\r\n let providers: ResolvedProvider[];\r\n try {\r\n providers = await modelsRegistry.listProviders();\r\n } catch {\r\n renderer.writeError(\r\n 'Failed to load provider catalog. Pass --provider and --model to skip the picker.',\r\n );\r\n return undefined;\r\n }\r\n\r\n // Drop unsupported wire families — they need a plugin and can't be\r\n // selected through this path.\r\n const supported = providers.filter((p) => p.family !== 'unsupported');\r\n\r\n // Build the display list by overlaying saved config on top of the\r\n // catalog. Two kinds of saved entries matter:\r\n // 1. The map key matches a catalog id (`zai-coding-plan`) — the\r\n // user may have overridden family/baseUrl. We MUST honor those\r\n // overrides for grouping/display, otherwise an entry the user\r\n // saved as `family: \"anthropic\"` would still appear under the\r\n // catalog's `openai-compatible` group.\r\n // 2. The map key is an alias not in the catalog. Its `cfg.type` may\r\n // still point at a catalog id, in which case we inherit the\r\n // model list and display name from there.\r\n const catalogById = new Map(supported.map((p) => [p.id, p]));\r\n const overlay = config?.providers ?? {};\r\n const seen = new Set<string>();\r\n const merged: ResolvedProvider[] = [];\r\n for (const p of supported) {\r\n const cfg = overlay[p.id];\r\n seen.add(p.id);\r\n if (cfg) {\r\n merged.push({\r\n ...p,\r\n family: cfg.family ?? p.family,\r\n apiBase: cfg.baseUrl ?? p.apiBase,\r\n envVars: cfg.envVars && cfg.envVars.length > 0 ? cfg.envVars : p.envVars,\r\n // When the user has saved an explicit model list, it wins — they\r\n // know which models their endpoint actually serves (e.g. LM\r\n // Studio, vLLM, or a proxy with custom model ids). Otherwise the\r\n // catalog list keeps providing suggestions.\r\n models:\r\n cfg.models && cfg.models.length > 0\r\n ? cfg.models.map((m) => ({ id: m, name: m }))\r\n : p.models,\r\n });\r\n } else {\r\n merged.push(p);\r\n }\r\n }\r\n for (const [id, cfg] of Object.entries(overlay)) {\r\n if (seen.has(id)) continue;\r\n if (!cfg?.family || cfg.family === 'unsupported') continue;\r\n const catalogType = cfg.type && cfg.type !== id ? cfg.type : undefined;\r\n const inherited = catalogType ? catalogById.get(catalogType) : undefined;\r\n merged.push({\r\n id,\r\n name: inherited ? `${inherited.name} ${color.dim('(alias)')}` : id,\r\n family: cfg.family,\r\n apiBase: cfg.baseUrl ?? inherited?.apiBase,\r\n envVars: cfg.envVars ?? inherited?.envVars ?? [],\r\n models:\r\n cfg.models && cfg.models.length > 0\r\n ? cfg.models.map((m) => ({ id: m, name: m }))\r\n : (inherited?.models ?? []),\r\n npm: inherited?.npm,\r\n });\r\n }\r\n\r\n if (merged.length === 0) {\r\n renderer.writeError('No supported providers found in catalog.');\r\n return undefined;\r\n }\r\n\r\n // Filter to keyed providers. If none are keyed (fresh install, no env\r\n // vars set), fall back to the full list and prompt the user to add a\r\n // key — picking a keyless provider here is still useful because the\r\n // very next step (`wstack auth <prov>`) needs to know which provider.\r\n const keyed = merged.filter((p) => hasApiKey(p, config));\r\n let displayList = keyed;\r\n let showingFallback = false;\r\n if (keyed.length === 0) {\r\n displayList = merged;\r\n showingFallback = true;\r\n }\r\n\r\n // Group by family for nicer display\r\n const families = new Map<string, ResolvedProvider[]>();\r\n for (const p of displayList) {\r\n const list = families.get(p.family) ?? [];\r\n list.push(p);\r\n families.set(p.family, list);\r\n }\r\n\r\n // Build a flat numbered list (family → providers). Track which entry\r\n // matches the current default so we can highlight + accept Enter.\r\n const ordered: Array<{ provider: ResolvedProvider; index: number }> = [];\r\n const familyOrder = ['anthropic', 'openai', 'google', 'openai-compatible'];\r\n let idx = 1;\r\n let defaultIdx: number | undefined;\r\n renderer.write('\\n');\r\n for (const fam of familyOrder) {\r\n const list = families.get(fam);\r\n if (!list || list.length === 0) continue;\r\n renderer.write(` ${color.bold(fam)}\\n`);\r\n for (const p of list) {\r\n const envFound = p.envVars.some((v) => !!process.env[v]);\r\n const entry = config?.providers?.[p.id];\r\n const configKey =\r\n (typeof entry?.apiKey === 'string' && entry.apiKey.length > 0) ||\r\n (Array.isArray(entry?.apiKeys) && entry!.apiKeys!.some((k) => k?.apiKey));\r\n // ● green = env key, ◉ cyan = stored in config, ○ dim = no key\r\n const marker = envFound ? color.green('●') : configKey ? color.cyan('◉') : color.dim('○');\r\n const isDefault = p.id === defaultProvider;\r\n if (isDefault) defaultIdx = idx;\r\n const idLabel = isDefault ? color.bold(p.id) : p.id;\r\n const suffix = isDefault ? color.dim(' (default)') : '';\r\n renderer.write(\r\n ` ${color.dim(`${idx}.`.padStart(4))} ${marker} ${idLabel.padEnd(22)} ${color.dim(p.name)}${suffix}\\n`,\r\n );\r\n ordered.push({ provider: p, index: idx });\r\n idx++;\r\n }\r\n }\r\n\r\n if (showingFallback) {\r\n renderer.write(\r\n `\\n ${color.yellow('⚠ No API keys detected.')} ${color.dim('Pick a provider, then run `wstack auth <provider>` to add one.')}\\n`,\r\n );\r\n } else {\r\n renderer.write(`\\n ${color.dim('● = env key ◉ = stored in config ○ = no key')}\\n`);\r\n }\r\n\r\n // Provider prompt. Enter on an empty line accepts the default when one\r\n // is present; otherwise we treat it as cancel.\r\n const defaultHint =\r\n defaultIdx !== undefined && defaultProvider\r\n ? ` ${color.dim(`[Enter = ${defaultProvider}]`)}`\r\n : '';\r\n const providerAnswer = (\r\n await reader.readLine(\r\n `\\n${color.amber('?')} Select provider (1-${ordered.length})${defaultHint} ${color.dim('[q to quit]')}: `,\r\n )\r\n ).trim();\r\n\r\n if (providerAnswer.toLowerCase() === 'q') {\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n\r\n if (!providerAnswer) {\r\n if (defaultIdx !== undefined) {\r\n const def = ordered[defaultIdx - 1];\r\n if (def) return pickModel(def.provider, modelsRegistry, renderer, reader, defaultModel);\r\n }\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n\r\n const providerIdx = Number.parseInt(providerAnswer, 10);\r\n if (Number.isNaN(providerIdx) || providerIdx < 1 || providerIdx > ordered.length) {\r\n // Try matching by id\r\n const byId = ordered.find((o) => o.provider.id.toLowerCase() === providerAnswer.toLowerCase());\r\n if (!byId) {\r\n renderer.writeError(`Invalid selection: \"${providerAnswer}\"`);\r\n return undefined;\r\n }\r\n return pickModel(byId.provider, modelsRegistry, renderer, reader, defaultModel);\r\n }\r\n\r\n const chosen = ordered[providerIdx - 1];\r\n if (!chosen) return undefined;\r\n // Only honor the default-model hint when the user picked the default\r\n // provider; switching providers invalidates it.\r\n const modelHint = chosen.provider.id === defaultProvider ? defaultModel : undefined;\r\n return pickModel(chosen.provider, modelsRegistry, renderer, reader, modelHint);\r\n}\r\n\r\nasync function pickModel(\r\n provider: ResolvedProvider,\r\n registry: ModelsRegistry,\r\n renderer: TerminalRenderer,\r\n reader: ReadlineInputReader,\r\n defaultModel?: string,\r\n): Promise<PickerResult | undefined> {\r\n renderer.write(`\\n ${color.bold(provider.name)} ${color.dim(`(${provider.id})`)} models:\\n\\n`);\r\n\r\n const models = [...provider.models].sort((a, b) =>\r\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\r\n );\r\n\r\n if (models.length === 0) {\r\n renderer.writeError(' No models listed for this provider in the catalog.');\r\n return undefined;\r\n }\r\n\r\n // Find default-model index for the \"Enter = default\" hint.\r\n const defaultIdxInModels =\r\n defaultModel !== undefined ? models.findIndex((m) => m.id === defaultModel) : -1;\r\n\r\n // Show paginated — up to 30 at a time\r\n const pageSize = 30;\r\n let offset = 0;\r\n\r\n while (offset < models.length) {\r\n const page = models.slice(offset, offset + pageSize);\r\n for (let i = 0; i < page.length; i++) {\r\n const m = page[i]!;\r\n const num = offset + i + 1;\r\n const ctx = m.limit?.context\r\n ? `${(m.limit.context / 1000).toFixed(0)}k`.padStart(6)\r\n : ' ?';\r\n const cost = m.cost?.input !== undefined ? `$${m.cost.input}/$${m.cost.output ?? '?'}` : '';\r\n const caps: string[] = [];\r\n if (m.tool_call) caps.push('tools');\r\n if (m.reasoning) caps.push('reason');\r\n if (m.modalities?.input?.includes('image')) caps.push('vision');\r\n const capStr = caps.length > 0 ? color.dim(caps.join(',')) : '';\r\n const isDefault = m.id === defaultModel;\r\n const idLabel = isDefault ? color.bold(m.id) : m.id;\r\n const suffix = isDefault ? color.dim(' (default)') : '';\r\n renderer.write(\r\n ` ${color.dim(`${num}.`.padStart(5))} ${idLabel.padEnd(44)} ${color.dim(ctx)} ${color.dim(cost.padEnd(14))} ${capStr}${suffix}\\n`,\r\n );\r\n }\r\n offset += pageSize;\r\n\r\n if (offset < models.length) {\r\n const more = (\r\n await reader.readLine(\r\n `\\n${color.amber('?')} Showing ${Math.min(offset, models.length)}/${models.length} — Enter number, ${color.dim('Enter')} for more, or ${color.dim('q')} to quit: `,\r\n )\r\n ).trim();\r\n if (more.toLowerCase() === 'q') {\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n if (!more) continue; // show next page\r\n return resolveModelSelection(more, models, provider, registry, renderer, reader);\r\n }\r\n }\r\n\r\n // All shown — final prompt. Enter accepts the default model when present.\r\n const defaultHint =\r\n defaultIdxInModels >= 0 && defaultModel ? ` ${color.dim(`[Enter = ${defaultModel}]`)}` : '';\r\n const answer = (\r\n await reader.readLine(`\\n${color.amber('?')} Select model (1-${models.length})${defaultHint} ${color.dim('[q to quit]')}: `)\r\n ).trim();\r\n if (answer.toLowerCase() === 'q') {\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n if (!answer) {\r\n if (defaultIdxInModels >= 0 && defaultModel) {\r\n renderer.write(\r\n `\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(defaultModel)}\\n\\n`,\r\n );\r\n return { provider: provider.id, model: defaultModel };\r\n }\r\n renderer.write(color.dim('Cancelled.\\n'));\r\n return undefined;\r\n }\r\n return resolveModelSelection(answer, models, provider, registry, renderer, reader);\r\n}\r\n\r\nasync function resolveModelSelection(\r\n answer: string,\r\n models: {\r\n id: string;\r\n name: string;\r\n release_date?: string;\r\n limit?: { context?: number };\r\n cost?: { input?: number; output?: number };\r\n tool_call?: boolean;\r\n reasoning?: boolean;\r\n modalities?: { input?: string[] };\r\n }[],\r\n provider: ResolvedProvider,\r\n _registry: ModelsRegistry,\r\n renderer: TerminalRenderer,\r\n _reader: ReadlineInputReader,\r\n): Promise<PickerResult | undefined> {\r\n const idx = Number.parseInt(answer, 10);\r\n let modelId: string | undefined;\r\n\r\n if (!Number.isNaN(idx) && idx >= 1 && idx <= models.length) {\r\n modelId = models[idx - 1]!.id;\r\n } else {\r\n // Try fuzzy matching by id\r\n const lower = answer.toLowerCase();\r\n const match = models.find((m) => m.id.toLowerCase() === lower);\r\n if (match) {\r\n modelId = match.id;\r\n } else {\r\n // Partial match\r\n const partial = models.filter((m) => m.id.toLowerCase().includes(lower));\r\n if (partial.length === 1) {\r\n modelId = partial[0]!.id;\r\n } else if (partial.length > 1) {\r\n renderer.writeError(`\"${answer}\" matches multiple models. Be more specific.`);\r\n return undefined;\r\n }\r\n }\r\n }\r\n\r\n if (!modelId) {\r\n // Use as-is (user might know the exact model string)\r\n modelId = answer;\r\n }\r\n\r\n renderer.write(`\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(modelId)}\\n\\n`);\r\n\r\n return { provider: provider.id, model: modelId };\r\n}\r\n\r\n// --- Helpers ---\r\n","/**\n * Launch-time feature hints. Shown once per CLI launch — after the\n * provider/model/mode/YOLO prompts have resolved and right before the\n * REPL or TUI starts — to remind users what slash commands, flags, and\n * runtime controls this build ships with. Suppress with `--no-hints` or\n * `WRONGSTACK_NO_HINTS=1`.\n *\n * The list is intentionally hand-curated rather than auto-derived from\n * the slash-command registry: a one-line blurb tuned for each entry\n * lands better than `command.description` boilerplate, and the groups\n * preserve the mental model (autonomy → fleet → steering → mode/context\n * → daily ops).\n */\n\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.js';\n\ninterface Hint {\n readonly key: string;\n readonly blurb: string;\n}\n\ninterface HintGroup {\n readonly title: string;\n readonly items: readonly Hint[];\n}\n\nconst GROUPS: readonly HintGroup[] = [\n {\n title: 'Autonomy',\n items: [\n { key: '/goal <text>', blurb: 'lock in a verifiable mission — only Esc / Ctrl+C interrupt' },\n { key: '/autonomy eternal', blurb: 'sense → decide → execute → reflect loop until you stop it' },\n { key: '--eternal', blurb: 'boot directly into the eternal-autonomy engine' },\n { key: '/autonomy on|suggest', blurb: 'self-driving: auto-pick next step or just suggest it' },\n ],\n },\n {\n title: 'Multi-agent / fleet',\n items: [\n { key: '--director \"<task>\"', blurb: 'one-line LLM-driven fleet kickoff with 8 orchestration tools' },\n { key: '/director', blurb: 'promote the current session to director mode at runtime' },\n { key: '/spawn -p <prov> -m <model> -n <name> <task>', blurb: 'launch a single subagent (any provider/model)' },\n { key: '/fleet status|usage|kill|log|manifest', blurb: 'inspect and control the running subagent fleet' },\n ],\n },\n {\n title: 'Steering',\n items: [\n { key: 'Esc (while busy)', blurb: 'soft interrupt — next message carries a STEERING preamble' },\n { key: '/steer <text>', blurb: 'mid-flight redirect, works when Esc is eaten by tmux' },\n { key: 'Ctrl+C × 1 / × 2 / × 3', blurb: 'cancel iteration · force-exit Ink · hard exit(130)' },\n ],\n },\n {\n title: 'Modes & context',\n items: [\n { key: '/mode', blurb: 'switch persona: code-reviewer, debugger, architect, tester, devops, …' },\n { key: '/model', blurb: 'two-step provider → model picker, hot-swap at runtime' },\n { key: '/yolo on|off|toggle', blurb: 'auto-approve every tool call without restart' },\n { key: '/context mode frugal|balanced|deep|archival', blurb: 'pick how aggressively history is trimmed' },\n { key: '/compact', blurb: 'manually compact the in-flight context window' },\n { key: '/plan show|add|start|done', blurb: 'strategic roadmap, survives /resume across sessions' },\n ],\n },\n {\n title: 'Daily ops',\n items: [\n { key: '@<query> / Alt+V / /image', blurb: 'fuzzy file picker · paste clipboard image (TUI)' },\n { key: '/mcp · wstack mcp add <name>', blurb: 'connect MCP servers (stdio / SSE / streamable-http)' },\n { key: '/plugin install|enable|disable <name>', blurb: 'manage plugins (telegram, lsp, …)' },\n { key: '/skill · /init · /commit', blurb: 'list skills · scaffold AGENTS.md · LLM-drafted git commit' },\n { key: '/diag · /usage · wstack resume <id>', blurb: 'diagnostics · token & cost totals · continue any session' },\n ],\n },\n] as const;\n\n/**\n * Total number of hints across all groups. Exported so callers can\n * assert \"≥ 20\" in tests without re-counting.\n */\nexport const HINT_COUNT: number = GROUPS.reduce((n, g) => n + g.items.length, 0);\n\nfunction shouldSuppress(flags: Record<string, string | boolean>): boolean {\n if (flags['no-hints'] === true) return true;\n if (flags['hints'] === false) return true;\n const env = process.env.WRONGSTACK_NO_HINTS;\n if (env && env !== '0' && env.toLowerCase() !== 'false') return true;\n return false;\n}\n\n/**\n * Print the launch-hints block to `renderer`. No-op when suppressed\n * via `--no-hints` or `WRONGSTACK_NO_HINTS=1`.\n */\nexport function printLaunchHints(\n renderer: Pick<TerminalRenderer, 'write'>,\n flags: Record<string, string | boolean>,\n): void {\n if (shouldSuppress(flags)) return;\n\n const lines: string[] = [];\n lines.push('');\n lines.push(\n ` ${color.cyan('◆')} ${color.bold(`WrongStack — ${HINT_COUNT} things you can do here`)}`,\n );\n for (const group of GROUPS) {\n lines.push(` ${color.dim('─')} ${color.cyan(group.title)}`);\n for (const item of group.items) {\n lines.push(` ${color.bold(item.key)} ${color.dim('—')} ${color.dim(item.blurb)}`);\n }\n }\n lines.push('');\n lines.push(\n ` ${color.dim(`tip: hide this with ${color.bold('--no-hints')} or ${color.bold('WRONGSTACK_NO_HINTS=1')}`)}`,\n );\n lines.push('');\n\n renderer.write(`${lines.join('\\n')}\\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 const hints = f.hints.length > 0 ? `\\n\\n> Auto-detected: ${f.hints.join(', ')}` : '';\n\n return `# AGENTS.md\n\n> **DO NOT DELETE THIS FILE.** It is loaded into WrongStack's system prompt as\n> persistent project context. Previous content here may contain decisions,\n> architecture notes, domain knowledge, or verification history that should be\n> preserved. Merge additions rather than replacing.\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:** _CLI, server, browser, worker, library, package?_${hints}\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 not obvious from the code._\n- _Known fragile areas or historical bugs that deserve extra caution._\n\n## Commands\n\n| Command | Script |\n|---------|--------|\n| Build | ${cmd(f.build)} |\n| Test | ${cmd(f.test)} |\n| Lint | ${cmd(f.lint)} |\n| Run locally | ${cmd(f.run)} |\n\n## Key files and entry points\n\n| File / directory | Role |\n|---|---|\n| _src/_ | _Main source entry point(s)_ |\n| _tests/_ | _Test root or convention_ |\n| _docs/_ | _Architecture, runbooks, design notes_ |\n| _scripts/_ | _Automation scripts (CI, release, install, etc.)_ |\n\n## Architecture notes\n\n_Summarize the important modules, data flow, boundaries, and ownership rules.\nMention anything a newcomer might misread or that looks unusual but is intentional._\n\n### Dependency layers\n\n_Describe the key dependency direction or layered structure, e.g.: \"core has no\nruntime deps; cli assembles everything above it.\"_\n\n### Extension points\n\n_Plugin, MCP, extension hooks, custom tools — what's wired up and how._\n\n## Domain knowledge\n\n_Business rules, acronyms, invariants, external services, and notes where the\ncode looks unusual but is intentional. E.g.: \"IDs are ULIDs, not UUIDs\", \"the\n\\`draft\\` flag means uncommitted billing metadata\", \"MCP servers are restarted\non disconnect with exponential backoff, up to 3 attempts\"._\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- _Any known flaky tests or environment-dependent behavior?_\n\n## Useful pointers\n\n- _Docs, dashboards, runbooks, issue trackers, design notes, owner contacts._\n- _Related projects or repositories._`;\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\nexport { generateCommitMessageWithLLM } from './commit-llm.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// ── LLM-powered commit message generation ──────────────────────────\n\ninterface CommitLLMOpts {\n provider: { complete(req: unknown, opts: { signal: AbortSignal }): Promise<{ content: unknown[] }> };\n model: string;\n}\n\n/**\n * Generate a proper commit message by asking the LLM to analyze the diff.\n * Falls back to heuristics on failure.\n */\nasync function generateCommitMessageWithLLM(\n diff: string,\n opts: CommitLLMOpts,\n): Promise<string> {\n const systemPrompt =\n 'You are a helpful assistant that generates concise, conventional-commit-formatted git commit messages. ' +\n 'Analyze the provided diff and output ONLY the commit message (no explanation, no quotes). ' +\n 'Format: <type>(<scope>): <short description> — <type> is one of: feat, fix, docs, style, refactor, test, chore, perf, ci, build, temp. ' +\n 'If the diff contains multiple unrelated changes, pick the most important one. ' +\n 'Keep the description under 72 characters. Example: feat(cli): add /commit LLM integration';\n\n const userPrompt = `Here is the git diff:\\n\\n${diff}`;\n\n try {\n const signal = new AbortController();\n const timeout = setTimeout(() => signal.abort(), 15_000);\n\n const resp = await opts.provider.complete(\n {\n model: opts.model,\n system: [{ type: 'text', text: systemPrompt }],\n messages: [{ role: 'user', content: [{ type: 'text', text: userPrompt }] }],\n maxTokens: 80,\n temperature: 0.3,\n },\n { signal: signal.signal },\n );\n clearTimeout(timeout);\n\n const contentBlocks = resp.content as Array<{ type: string; text?: string }>;\n const text = contentBlocks.find((b) => b.type === 'text')?.text ?? '';\n const message = text.trim().split('\\n')[0]!;\n\n if (message.length > 0 && message.length < 200) {\n return message;\n }\n } catch {\n // LLM call failed — fall through to heuristics\n }\n\n // Fallback: use heuristics via the existing function\n return 'chore: update';\n}\n\n// ── Heuristics ──────────────────────────────────────────────────────\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 (heuristics only).\n */\nasync function generateCommitMessageHeuristics(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(\n _opts: SlashCommandContext,\n generateCommitMessage?: (diff: string) => Promise<string>,\n): 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 const noLlm = args.includes('--no-llm');\n\n // Generate commit message — try LLM first, then fall back to heuristics\n let message: string;\n if (!noLlm && generateCommitMessage) {\n const diffResult = await runGit(['diff'], cwd);\n const diff = diffResult.stdout;\n try {\n message = await generateCommitMessage(diff);\n } catch {\n // LLM failed — silently fall back to heuristics\n message = await generateCommitMessageHeuristics(cwd);\n }\n } else {\n message = await generateCommitMessageHeuristics(cwd);\n }\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';\r\nimport type { SlashCommandContext } from './index.js';\r\n\r\nexport function buildFleetCommand(opts: SlashCommandContext): SlashCommand {\r\n return {\r\n name: 'fleet',\r\n description:\r\n 'Inspect or control the subagent fleet: /fleet [status|usage|kill <id>|manifest|concurrency [N]|retry [taskId]|log <id>|stream on|off|help]',\r\n help: [\r\n 'Usage:',\r\n ' /fleet Show fleet status (alias for /fleet status).',\r\n ' /fleet status Pending + completed subagent task table.',\r\n ' /fleet usage Per-subagent runtime cost.',\r\n ' /fleet kill <id> Terminate a running subagent.',\r\n ' /fleet manifest Print the director manifest.',\r\n ' /fleet concurrency Show the current concurrent-subagent ceiling.',\r\n ' /fleet concurrency N Set the ceiling to N (>= 1). Lowering does not preempt running tasks.',\r\n ' /fleet retry List interrupted tasks from the last run.',\r\n ' /fleet retry <taskId> Re-spawn the matching subagent and re-assign the task.',\r\n ' /fleet retry all Re-assign every interrupted task at once.',\r\n ' /fleet log List subagent transcripts available on disk.',\r\n ' /fleet log <id> Print a compact summary of a subagent transcript.',\r\n ' /fleet log <id> raw Dump the full per-subagent JSONL.',\r\n ' /fleet stream on|off Show/hide subagent activity in the main history.',\r\n ' /fleet help Show this help.',\r\n ].join('\\n'),\r\n async run(args) {\r\n if (!opts.onFleet) return { message: 'Multi-agent is not enabled in this session.' };\r\n const trimmed = args.trim();\r\n const [verb, ...rest] = trimmed.length === 0 ? ['status'] : trimmed.split(/\\s+/);\r\n const target = rest.join(' ').trim() || undefined;\r\n switch (verb) {\r\n case 'status':\r\n case 'usage':\r\n case 'manifest': {\r\n const out = await opts.onFleet(verb, undefined);\r\n return { message: out };\r\n }\r\n case 'kill': {\r\n if (!target) return { message: 'Usage: /fleet kill <subagent-id>' };\r\n return { message: await opts.onFleet('kill', target) };\r\n }\r\n case 'concurrency': {\r\n return { message: await opts.onFleet('concurrency', target) };\r\n }\r\n case 'retry': {\r\n if (!opts.onFleetRetry) {\r\n return { message: 'Retry is only available when director mode is active.' };\r\n }\r\n const msg = await opts.onFleetRetry(target);\r\n return { message: msg };\r\n }\r\n case 'log': {\r\n if (!opts.onFleetLog) {\r\n return { message: 'Log inspection is only available when a fleet root is configured.' };\r\n }\r\n // Second word after the id, if any, picks the rendering mode\r\n // (raw vs summary). Default: summary.\r\n const [id, ...modeRest] = rest;\r\n const mode = modeRest.join(' ').trim() === 'raw' ? 'raw' : 'summary';\r\n return { message: await opts.onFleetLog(id, mode) };\r\n }\r\n case 'stream': {\r\n const ctrl = opts.fleetStreamController;\r\n if (!ctrl) {\r\n return { message: 'Stream toggle is only available in the TUI.' };\r\n }\r\n const arg = (target ?? '').toLowerCase();\r\n if (arg === '' || arg === 'status') {\r\n return { message: `Fleet streaming is ${ctrl.enabled ? 'on' : 'off'}.` };\r\n }\r\n if (arg !== 'on' && arg !== 'off') {\r\n return { message: 'Usage: /fleet stream on|off' };\r\n }\r\n const enabled = arg === 'on';\r\n ctrl.setEnabled(enabled);\r\n ctrl.enabled = enabled;\r\n return { message: `Fleet streaming ${enabled ? 'enabled' : 'disabled'}.` };\r\n }\r\n case 'help':\r\n case '?':\r\n return {\r\n message: [\r\n '/fleet — inspect or control the subagent fleet',\r\n '',\r\n ' /fleet → status (default)',\r\n ' /fleet status pending + completed tasks per subagent',\r\n ' /fleet usage iterations, tool calls, duration roll-up',\r\n ' /fleet kill <id> terminate a subagent',\r\n ' /fleet manifest director manifest (requires --director)',\r\n ].join('\\n'),\r\n };\r\n default:\r\n return {\r\n message: `Unknown subcommand \"${verb}\". Try: status | usage | kill <id> | manifest | help`,\r\n };\r\n }\r\n },\r\n };\r\n}\r\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 or update .wrongstack/AGENTS.md project context for the system prompt.',\n async run(_args, ctx) {\n const dir = path.join(ctx.projectRoot, '.wrongstack');\n const file = path.join(dir, 'AGENTS.md');\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","/**\n * MCP management command utilities.\n * Contains the argument parser and the actual management logic shared between\n * the CLI subcommand handler (packages/cli/src/subcommands/handlers/mcp.ts)\n * and the slash-command wiring in index.ts.\n */\nimport * as fs from 'node:fs/promises';\nimport { color } from '@wrongstack/core';\nimport type { Config, MCPServerConfig } from '@wrongstack/core';\nimport type { MCPRegistry } from '@wrongstack/mcp';\n\nexport interface McpParsedArgs {\n action: 'list' | 'add' | 'remove' | 'enable' | 'disable' | 'restart';\n name: string;\n enable?: boolean;\n}\n\n/** Parse \"/mcp add github --enable\" style args. Returns null on unknown/missing subcommand. */\nexport function parseMcpArgs(args: string): McpParsedArgs | null {\n const trimmed = args.trim();\n if (!trimmed || trimmed === 'list') return { action: 'list', name: '' };\n\n const parts = trimmed.split(/\\s+/);\n const action = parts[0]!;\n const name = parts[1] ?? '';\n const enable = parts.includes('--enable') || parts.includes('-e');\n\n switch (action) {\n case 'add': return name ? { action: 'add', name, enable } : null;\n case 'remove': return name ? { action: 'remove', name } : null;\n case 'enable': return name ? { action: 'enable', name } : null;\n case 'disable': return name ? { action: 'disable', name } : null;\n case 'restart': return name ? { action: 'restart', name } : null;\n default: return null;\n }\n}\n\ninterface McpManagementDeps {\n config: Config;\n configPath: string;\n mcpRegistry: MCPRegistry;\n allServerPresets: Record<string, MCPServerConfig>;\n}\n\nexport async function runMcpManagementCommand(\n parsed: McpParsedArgs,\n deps: McpManagementDeps,\n): Promise<string> {\n const { config, configPath, mcpRegistry, allServerPresets } = deps;\n const configured = config.mcpServers ?? {};\n\n switch (parsed.action) {\n case 'list':\n return renderList(configured, mcpRegistry, allServerPresets);\n\n case 'add':\n return runAdd(parsed.name, parsed.enable ?? false, configured, configPath, allServerPresets);\n\n case 'remove':\n return runRemove(parsed.name, configured, configPath, mcpRegistry);\n\n case 'enable':\n return runEnable(parsed.name, configured, configPath, mcpRegistry);\n\n case 'disable':\n return runDisable(parsed.name, configured, configPath, mcpRegistry);\n\n case 'restart':\n return runRestart(parsed.name, mcpRegistry);\n }\n}\n\nfunction renderList(\n configured: Record<string, MCPServerConfig>,\n mcpRegistry: MCPRegistry,\n all: Record<string, MCPServerConfig>,\n): string {\n const lines: string[] = [];\n const liveStatus = mcpRegistry.list();\n const liveMap = new Map(liveStatus.map((s) => [s.name, s]));\n const configuredNames = new Set(Object.keys(configured));\n\n if (configuredNames.size > 0) {\n lines.push(color.bold('Configured servers:'));\n for (const [name, cfg] of Object.entries(configured)) {\n const live = liveMap.get(name);\n const toolCount = live ? color.dim(` (${live.toolCount} tools)`) : '';\n const enabled = cfg.enabled === false\n ? `${color.dim('disabled')} `\n : `${color.green('● enabled')} `;\n const stateStr = live\n ? stateBadge(live.state)\n : color.dim('○ not running');\n lines.push(` ${color.bold(name)} ${enabled}${stateStr}${toolCount}`);\n if (cfg.description) lines.push(` ${color.dim(cfg.description)}`);\n }\n lines.push('');\n }\n\n const unconfigured = Object.entries(all).filter(([n]) => !configuredNames.has(n));\n lines.push(color.bold('Available presets (run `/mcp add <name> --enable` to enable):'));\n if (unconfigured.length === 0) {\n lines.push(` ${color.dim('All presets are already configured.')}`);\n } else {\n for (const [name, cfg] of unconfigured) {\n const warn = cfg.permission === 'deny' ? color.red(' ⚠') : '';\n lines.push(` ${color.bold(name)} ${cfg.description ?? cfg.transport}${warn}`);\n }\n }\n lines.push('');\n lines.push(color.dim(' /mcp add <name> [--enable] /mcp remove <name>'));\n lines.push(color.dim(' /mcp enable <name> /mcp disable <name>'));\n lines.push(color.dim(' /mcp restart <name> (runtime restart)'));\n\n return lines.join('\\n');\n}\n\nasync function runAdd(\n name: string,\n enable: boolean,\n configured: Record<string, MCPServerConfig>,\n configPath: string,\n all: Record<string, MCPServerConfig>,\n): Promise<string> {\n const preset = all[name];\n if (!preset) {\n const known = Object.keys(all).join(', ');\n return `Unknown server \"${name}\". Available: ${known}`;\n }\n if (configured[name]) {\n // Update existing entry: keep user's overrides (command/args/env) but\n // apply the preset shape and the new enabled flag.\n const full = await readConfig(configPath);\n full.mcpServers = {\n ...(full.mcpServers ?? {}),\n [name]: { ...preset, ...configured[name], enabled: enable },\n };\n await writeConfig(configPath, full);\n return `${color.green('Updated')} \"${name}\" (${enable ? 'enabled' : 'disabled'}). Config written.`;\n }\n const full = await readConfig(configPath);\n const mcpServers = { ...(full.mcpServers ?? {}), [name]: { ...preset, enabled: enable } };\n full.mcpServers = mcpServers;\n await writeConfig(configPath, full);\n const verb = enable ? 'Enabled' : 'Added (disabled — /mcp enable to start)';\n return `${color.green(verb)} \"${name}\" (${preset.transport}). Config written to ${configPath}.`;\n}\n\nasync function runRemove(\n name: string,\n configured: Record<string, MCPServerConfig>,\n configPath: string,\n mcpRegistry: MCPRegistry,\n): Promise<string> {\n if (!configured[name]) return `Server \"${name}\" is not in config.`;\n await mcpRegistry.stop(name).catch(() => {/* ignore */});\n const full = await readConfig(configPath);\n const mcpServers: Record<string, MCPServerConfig> = { ...((full.mcpServers as Record<string, MCPServerConfig> | undefined) ?? {}) };\n delete mcpServers[name];\n full.mcpServers = mcpServers;\n await writeConfig(configPath, full);\n return `${color.yellow('Removed')} \"${name}\" from config.`;\n}\n\nasync function runEnable(\n name: string,\n configured: Record<string, MCPServerConfig>,\n configPath: string,\n mcpRegistry: MCPRegistry,\n): Promise<string> {\n const cfg = configured[name];\n if (!cfg) return `Server \"${name}\" is not in config. Run \\`/mcp add ${name} --enable\\` first.`;\n if (cfg.enabled !== false) {\n // Already enabled — just ensure it's running\n try {\n await mcpRegistry.restart(name);\n return `${color.green('●')} \"${name}\" is already enabled and running.`;\n } catch {\n await mcpRegistry.start({ ...cfg, enabled: true });\n return `${color.green('Enabled')} \"${name}\" and started.`;\n }\n }\n const full = await readConfig(configPath);\n const mcpServers: Record<string, MCPServerConfig> = { ...((full.mcpServers as Record<string, MCPServerConfig> | undefined) ?? {}) };\n mcpServers[name] = { ...mcpServers[name]!, enabled: true };\n full.mcpServers = mcpServers;\n await writeConfig(configPath, full);\n try {\n await mcpRegistry.restart(name);\n } catch {\n await mcpRegistry.start({ ...cfg, enabled: true });\n }\n return `${color.green('Enabled')} \"${name}\" and started.`;\n}\n\nasync function runDisable(\n name: string,\n configured: Record<string, MCPServerConfig>,\n configPath: string,\n mcpRegistry: MCPRegistry,\n): Promise<string> {\n const cfg = configured[name];\n if (!cfg) return `Server \"${name}\" is not in config.`;\n await mcpRegistry.stop(name).catch(() => {/* ignore */});\n const full = await readConfig(configPath);\n const mcpServers: Record<string, MCPServerConfig> = { ...((full.mcpServers as Record<string, MCPServerConfig> | undefined) ?? {}) };\n mcpServers[name] = { ...mcpServers[name]!, enabled: false };\n full.mcpServers = mcpServers;\n await writeConfig(configPath, full);\n return `${color.yellow('Disabled')} \"${name}\" and stopped.`;\n}\n\nasync function runRestart(name: string, mcpRegistry: MCPRegistry): Promise<string> {\n const live = mcpRegistry.list();\n if (!live.find((s) => s.name === name)) {\n return `Server \"${name}\" is not currently running. Add it with \\`/mcp add ${name} --enable\\`.`;\n }\n try {\n await mcpRegistry.restart(name);\n return `${color.green('✓')} Restarted \"${name}\".`;\n } catch (err) {\n return `${color.red('✗')} Failed to restart \"${name}\": ${err instanceof Error ? err.message : String(err)}`;\n }\n}\n\n// ── helpers ──────────────────────────────────────────────────────────────────\n\nfunction stateBadge(state: string): string {\n switch (state) {\n case 'connected': return color.green('● connected');\n case 'connecting': return color.cyan('◐ connecting');\n case 'reconnecting': return color.cyan('◑ reconnecting');\n case 'disconnected': return color.dim('○ disconnected');\n case 'failed': return color.red('✗ failed');\n default: return color.dim(state);\n }\n}\n\nasync function readConfig(path: string): Promise<Record<string, unknown>> {\n try {\n return JSON.parse(await fs.readFile(path, 'utf8')) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\nasync function writeConfig(path: string, cfg: Record<string, unknown>): Promise<void> {\n const raw = JSON.stringify(cfg, null, 2);\n // atomic write (inline — avoids importing atomicWrite from core here)\n const tmp = path + '.tmp';\n await fs.writeFile(tmp, raw, 'utf8');\n await fs.rename(tmp, path);\n}","import type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\nimport { runMcpManagementCommand, parseMcpArgs } from './mcp-utils.js';\n\n// Re-export for consumers that import from this barrel\nexport { parseMcpArgs, runMcpManagementCommand } from './mcp-utils.js';\nexport type { McpParsedArgs } from './mcp-utils.js';\n\n/**\n * /mcp slash command — manage MCP servers from the REPL.\n *\n * Usage:\n * /mcp — list all available and configured servers\n * /mcp list — same\n * /mcp add <name> — add server preset to config (disabled by default)\n * /mcp add <name> --enable — add and immediately enable\n * /mcp remove <name> — remove server from config\n * /mcp enable <name> — enable server in config + start it\n * /mcp disable <name> — disable server in config + stop it\n * /mcp restart <name> — stop and restart a running server\n */\nexport function buildMcpSlashCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'mcp',\n description:\n 'Manage MCP servers: /mcp [list|add <name>|remove <name>|enable <name>|disable <name>|restart <name>]',\n aliases: ['mcp-servers'],\n argsHint: '[list|add <name>|remove <name>|enable <name>|disable <name>|restart <name>]',\n help: [\n 'Usage:',\n ' /mcp List available and configured servers.',\n ' /mcp list Same.',\n ' /mcp add <name> Add server preset to config (disabled).',\n ' /mcp add <name> --enable Add and immediately enable.',\n ' /mcp remove <name> Remove server from config.',\n ' /mcp enable <name> Enable server in config + start it.',\n ' /mcp disable <name> Disable server in config + stop it.',\n ' /mcp restart <name> Stop and restart a running server (REPL only).',\n '',\n 'Examples:',\n ' /mcp',\n ' /mcp add filesystem --enable',\n ' /mcp enable github',\n ' /mcp restart brave-search',\n ].join('\\n'),\n async run(args) {\n if (!opts.onMcp) {\n return { message: 'MCP management is not available in this session.' };\n }\n const result = await opts.onMcp(args.trim());\n return { message: result };\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 deriveTodosFromPlanItem,\n emptyPlan,\n formatPlan,\n formatPlanTemplates,\n formatTodosList,\n getPlanTemplate,\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:\n 'Strategic plan board: /plan [show|add <title>|start <id|#>|done <id|#>|remove <id|#>|promote <id|#> [subtask ...]|derive <id|#>|template [list|use <name>]|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 'promote': {\n if (!restJoined) return { message: 'Usage: /plan promote <id|index> [subtask ...]' };\n const [target, ...subtasks] = restJoined.split(/\\s+/);\n if (!target) return { message: 'Usage: /plan promote <id|index> [subtask ...]' };\n const derived = deriveTodosFromPlanItem(plan, target, subtasks.length > 0 ? subtasks : undefined);\n if (!derived) return { message: `No plan item matched \"${target}\".` };\n await savePlan(planPath, derived.plan);\n if (ctx) {\n ctx.state.replaceTodos(derived.todos);\n }\n return {\n message: `Promoted to ${derived.todos.length} todo(s):\\n${formatTodosList(derived.todos)}\\n\\n${formatPlan(derived.plan)}`,\n };\n }\n case 'derive': {\n if (!restJoined) return { message: 'Usage: /plan derive <id|index>' };\n const derived = deriveTodosFromPlanItem(plan, restJoined);\n if (!derived) return { message: `No plan item matched \"${restJoined}\".` };\n await savePlan(planPath, derived.plan);\n if (ctx) {\n ctx.state.replaceTodos(derived.todos);\n }\n return {\n message: `Derived ${derived.todos.length} todo(s):\\n${formatTodosList(derived.todos)}\\n\\n${formatPlan(derived.plan)}`,\n };\n }\n case 'template': {\n const subVerb = rest[0] ?? '';\n const subRest = rest.slice(1).join(' ').trim();\n if (subVerb === '' || subVerb === 'list') {\n return { message: formatPlanTemplates() };\n }\n if (subVerb === 'use') {\n if (!subRest) return { message: 'Usage: /plan template use <template-name>' };\n const template = getPlanTemplate(subRest);\n if (!template) return { message: `Unknown template \"${subRest}\". Use /plan template list to see available templates.` };\n let updated = plan;\n for (const item of template.items) {\n ({ plan: updated } = addPlanItem(updated, item.title, item.details));\n }\n await savePlan(planPath, updated);\n return { message: `Applied template \"${template.name}\" (${template.items.length} items):\\n${formatPlan(updated)}` };\n }\n return { message: `Unknown template subcommand \"${subVerb}\". Try: list | use <name>` };\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|#> | promote <id|#> | derive <id|#> | template [list|use <name>] | 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. With an id, show live monitor view.',\n async run(args) {\n if (!opts.onAgents) return { message: 'Multi-agent is not enabled in this session.' };\n const subagentId = args.trim() || undefined;\n return { message: await opts.onAgents(subagentId) };\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 { goalFilePath, loadGoal, summarizeUsage } from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nexport type AutonomyMode = 'off' | 'suggest' | 'auto' | 'eternal';\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 eternal Sittin-sene mode — runs forever against /goal',\n ' /autonomy stop Stop eternal mode (no-op for other modes)',\n ' /autonomy toggle Cycle: off → suggest → auto → eternal → 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 ' eternal — Goal-driven sense/decide/execute/reflect loop. Requires /goal.',\n ' Force-enables YOLO. Runs until /autonomy stop or Ctrl+C twice.',\n '',\n 'In auto/eternal modes the agent works autonomously. Press Esc to redirect,',\n 'Ctrl+C to stop the active iteration. /autonomy stop ends the eternal loop.',\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 (mode + engine + goal snapshot)\n if (!arg || arg === 'status') {\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 eternal: `${color.red('ETERNAL')} ${color.dim('(sittin-sene — goal-driven, YOLO, until /autonomy stop)')}`,\n };\n const lines: string[] = [`Autonomy mode: ${labels[current]}`];\n // Surface engine + goal context when relevant — when current mode\n // is eternal, or when a goal exists (so the user sees the state\n // even after a /autonomy stop without re-typing /goal status).\n try {\n const goal = await loadGoal(goalFilePath(opts.projectRoot));\n if (goal) {\n const u = summarizeUsage(goal);\n lines.push(color.dim(` Goal: ${goal.goal.length > 80 ? `${goal.goal.slice(0, 77)}…` : goal.goal}`));\n lines.push(color.dim(` Engine state: ${goal.engineState} · iterations: ${goal.iterations} · journal: ${goal.journal.length}`));\n if (u.iterationsWithUsage > 0) {\n lines.push(\n color.dim(\n ` Spent: $${u.totalCostUsd.toFixed(4)} · ${u.totalInputTokens} in / ${u.totalOutputTokens} out tokens`,\n ),\n );\n }\n // Recent failure pulse — useful to see if the loop is stuck.\n const recent = goal.journal.slice(-10);\n const failed = recent.filter((e) => e.status === 'failure').length;\n if (failed > 0) {\n lines.push(color.amber(` Recent failures: ${failed} of last ${recent.length} iterations`));\n }\n }\n } catch {\n // best-effort; suppress\n }\n const msg = lines.join('\\n');\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n // Stop is a separate action, not a mode set.\n if (arg === 'stop' || arg === 'halt' || arg === 'kill') {\n if (!opts.onEternalStop) {\n const msg = 'No eternal-mode controller wired in this session.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n opts.onEternalStop();\n opts.onAutonomy('off');\n // Read the goal post-stop to compute a \"what did this loop spend\"\n // summary. The engine's last in-flight iteration may still write\n // one more journal entry after this returns, but the user wants\n // an immediate readout — better a slightly stale summary than no\n // summary. Failures here are non-fatal; the stop signal already\n // landed regardless of whether the summary renders.\n let summaryLine = '';\n try {\n const goal = await loadGoal(goalFilePath(opts.projectRoot));\n if (goal) {\n const u = summarizeUsage(goal);\n if (u.iterationsWithUsage > 0) {\n summaryLine =\n '\\n' +\n color.dim(\n ` Spent so far: $${u.totalCostUsd.toFixed(4)} · ${u.totalInputTokens} in / ${u.totalOutputTokens} out tokens · ${goal.iterations} total iterations.`,\n );\n } else if (goal.iterations > 0) {\n summaryLine = '\\n' + color.dim(` Total iterations: ${goal.iterations}.`);\n }\n }\n } catch {\n // best-effort summary; suppress\n }\n const msg = `${color.amber('Eternal mode stop requested.')} The current iteration will finish, then the loop exits.${summaryLine}`;\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 === 'eternal' || arg === 'forever' || arg === 'infinite' || arg === 'sittinsene') {\n newMode = 'eternal';\n } else if (arg === 'toggle' || arg === 'cycle') {\n const current = opts.onAutonomy() ?? 'off';\n const cycle: AutonomyMode[] = ['off', 'suggest', 'auto', 'eternal'];\n newMode = cycle[(cycle.indexOf(current) + 1) % cycle.length] ?? 'off';\n } else {\n const msg = `Unknown argument: ${arg}. Use /autonomy on, off, suggest, eternal, stop, or toggle.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n\n // Eternal mode requires a goal — fail loudly before flipping the switch.\n if (newMode === 'eternal') {\n const goal = await loadGoal(goalFilePath(opts.projectRoot));\n if (!goal) {\n const msg = `${color.red('Eternal mode requires a goal.')} Run \\`/goal set <mission>\\` first.`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n if (!opts.onEternalStart) {\n const msg = 'Eternal mode controller is not wired in this session.';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n // Force YOLO on for destructive ops (push, delete, etc.) — user opted into \"sittin sene\".\n if (opts.onYolo) opts.onYolo(true);\n opts.onAutonomy(newMode);\n opts.onEternalStart();\n const msg =\n `${color.red('Autonomy mode: ETERNAL')} — engine launching against goal: ${color.bold(goal.goal)}\\n` +\n `${color.dim('YOLO forced ON. Use /autonomy stop to end. Journal at /goal journal.')}`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n // Leaving eternal mode (or switching modes) should stop a running engine.\n // Cast through AutonomyMode — circular type resolution between this file\n // and ./index.js (which references AutonomyMode) can mask the 'eternal'\n // arm during typecheck. The runtime value is always correct.\n const previous = opts.onAutonomy() as AutonomyMode;\n if (previous === 'eternal' && opts.onEternalStop) {\n opts.onEternalStop();\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 eternal: `${color.red('ETERNAL')} — goal-driven sittin-sene loop`,\n };\n const msg = `Autonomy mode: ${labels[newMode]}`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n","import { color } from '@wrongstack/core';\nimport {\n buildGoalPreamble,\n emptyGoal,\n formatGoal,\n goalFilePath,\n loadGoal,\n saveGoal,\n} from '@wrongstack/core';\nimport type { SlashCommand } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\n\nconst KNOWN_VERBS = new Set([\n '',\n 'show',\n 'status',\n 'set',\n 'new',\n 'clear',\n 'reset',\n 'journal',\n 'log',\n]);\n\nexport function buildGoalCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'goal',\n description:\n 'Set, inspect, or clear the long-running autonomous mission used by /autonomy eternal.',\n help: [\n 'Usage:',\n ' /goal Show current goal + recent journal',\n ' /goal set <text> Set a new goal (overwrites previous)',\n ' /goal clear Clear the goal (stops eternal mode if running)',\n ' /goal status Same as /goal (alias)',\n ' /goal journal [N] Show last N journal entries (default 25)',\n '',\n 'Goals live in <projectRoot>/.wrongstack/goal.json and persist across sessions.',\n 'A goal is the prerequisite for /autonomy eternal — the engine consults it on',\n 'every iteration to decide what to do next.',\n ].join('\\n'),\n async run(args) {\n const trimmed = args.trim();\n const [verbRaw, ...rest] = trimmed.split(/\\s+/);\n const verb = (verbRaw ?? '').toLowerCase();\n const restJoined = rest.join(' ').trim();\n const goalPath = goalFilePath(opts.projectRoot);\n\n // If the first token isn't a known verb, treat the entire args\n // string as the goal text — `/goal rewrite the auth module` should\n // work the same as `/goal set rewrite the auth module`. This makes\n // the merged /goal compatible with the TUI's former plain-text form.\n const verbForDispatch = verb && !KNOWN_VERBS.has(verb) ? 'set' : verb;\n const setText = verbForDispatch === 'set' && !KNOWN_VERBS.has(verb) ? trimmed : restJoined;\n\n switch (verbForDispatch) {\n case '':\n case 'show':\n case 'status': {\n const current = await loadGoal(goalPath);\n if (!current) {\n const msg = 'No goal set. Use `/goal set <mission text>` to create one.';\n opts.renderer.write(msg);\n return { message: msg };\n }\n const msg = formatGoal(current);\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n case 'set':\n case 'new': {\n if (!setText) {\n const msg = 'Usage: /goal set <mission text>';\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n const existing = await loadGoal(goalPath);\n // Preserve journal across goal replacement — useful as audit trail.\n // The new mission gets a fresh setAt but keeps the prior iterations\n // count so journal entries remain sequentially numbered.\n const next = existing\n ? { ...existing, goal: setText, setAt: new Date().toISOString(), lastActivityAt: new Date().toISOString() }\n : emptyGoal(setText);\n await saveGoal(goalPath, next);\n const shortGoal = setText.length > 80 ? `${setText.slice(0, 80)}…` : setText;\n const msg = `🎯 ${color.green('Goal locked:')} ${shortGoal}\\n${color.dim(`Stored in ${goalPath} — Esc / /steer to redirect, Ctrl+C to stop.`)}`;\n opts.renderer.write(msg);\n // Inject the lock-in preamble so the next turn runs with full-\n // autonomy framing — same behavior the TUI's former /goal had.\n return { message: msg, runText: buildGoalPreamble(setText) };\n }\n\n case 'clear':\n case 'reset': {\n const existing = await loadGoal(goalPath);\n if (!existing) {\n const msg = 'No goal to clear.';\n opts.renderer.write(msg);\n return { message: msg };\n }\n // Soft-clear: mark engine stopped so any running engine exits next cycle,\n // and write a sentinel goal that the engine treats as \"no work\".\n // We *delete* the file rather than zero it out so loadGoal() returns null\n // and the engine's runOneIteration() short-circuits to stopRequested.\n const { unlink } = await import('node:fs/promises');\n try {\n await unlink(goalPath);\n } catch {\n // best-effort\n }\n if (opts.onEternalStop) opts.onEternalStop();\n const msg = `${color.amber('Goal cleared.')} Eternal mode will stop on next cycle.`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n case 'journal':\n case 'log': {\n const current = await loadGoal(goalPath);\n if (!current) {\n const msg = 'No goal set.';\n opts.renderer.write(msg);\n return { message: msg };\n }\n const n = restJoined ? Math.max(1, Number.parseInt(restJoined, 10) || 25) : 25;\n if (current.journal.length === 0) {\n const msg = 'Journal is empty.';\n opts.renderer.write(msg);\n return { message: msg };\n }\n const tail = current.journal.slice(-n);\n const lines = tail.map((e) => {\n const mark = e.status === 'success' ? color.green('✓') : e.status === 'failure' ? color.red('✗') : e.status === 'aborted' ? color.amber('⊘') : color.dim('·');\n const note = e.note ? color.dim(` — ${e.note}`) : '';\n return `${color.dim(`#${e.iteration}`)} ${mark} ${color.dim(`[${e.source}]`)} ${e.task}${note}`;\n });\n const header = `Journal (last ${tail.length} of ${current.journal.length}):`;\n const msg = `${header}\\n${lines.join('\\n')}`;\n opts.renderer.write(msg);\n return { message: msg };\n }\n\n default: {\n // Unreachable — verbForDispatch is either '' (show), a known\n // verb, or 'set' (when the first token isn't a known verb).\n const msg = `Unknown subcommand \"${verb}\". Try: show | set <text> | clear | journal [N]`;\n opts.renderer.writeWarning(msg);\n return { message: msg };\n }\n }\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 /** Working directory for the current session. */\r\n cwd: string;\r\n /** Project root (typically resolved from cwd). */\r\n projectRoot: string;\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 /**\r\n * Generate a commit message by calling the LLM with the git diff.\r\n * Receives the raw diff, returns a commit message string.\r\n * When omitted /commit falls back to heuristics-only messages.\r\n */\r\n generateCommitMessage?: (diff: string) => Promise<string>;\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?: (subagentId?: string) => string;\r\n onFleet?: (\r\n action: 'status' | 'usage' | 'kill' | 'manifest' | 'concurrency',\r\n target?: string,\r\n ) => 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 * Start the eternal-autonomy engine. Called after `/autonomy eternal`\r\n * confirms a goal exists and YOLO has been forced on. The REPL drives\r\n * iterations from its main loop — this hook only flips the flag and\r\n * primes the engine; the actual iteration scheduling lives in the REPL.\r\n */\r\n onEternalStart?: () => void;\r\n /** Stop the eternal-autonomy engine (mid-iteration abort + flag flip). */\r\n onEternalStop?: () => void;\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 /** Direct access to the session's LLM provider and model, available even before the first agent run. */\r\n llmProvider?: import('@wrongstack/core').Provider;\r\n llmModel?: string;\r\n /** StatusBar visibility config — loaded from ~/.wrongstack/statusline.json */\r\n statuslineConfig?: {\r\n get: () => Promise<import('./statusline.js').StatuslineConfig>;\r\n set: (cfg: import('./statusline.js').StatuslineConfig) => Promise<void>;\r\n };\r\n /**\r\n * Current list of hidden status bar items. Written by the /statusline command\r\n * so the TUI can update without a restart.\r\n */\r\n statuslineHiddenItems?: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\r\n setStatuslineHiddenItems?: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\r\n /** Manage MCP servers: add, remove, enable, disable, restart. */\r\n onMcp?: (args: string) => Promise<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 {\r\n buildCommitCommand,\r\n buildGitcheckCommand,\r\n buildPushCommand,\r\n} 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 { buildMcpSlashCommand } from './mcp.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 { buildGoalCommand } from './goal.js';\r\nimport { buildModeCommand } from './mode.js';\r\nimport { buildSddCommand } from './sdd.js';\r\nimport { buildSkillGeneratorCommand } from './skill-generator.js';\r\nimport { buildSecurityCommand } from './security.js';\r\nimport { buildStatuslineCommand } from './statusline.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 buildMcpSlashCommand(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 buildGoalCommand(opts),\r\n buildModeCommand(opts),\r\n buildExitCommand(opts),\r\n buildCommitCommand(opts),\r\n buildGitcheckCommand(opts),\r\n buildPushCommand(opts),\r\n buildSecurityCommand(opts),\r\n buildStatuslineCommand({\r\n cwd: opts.cwd,\r\n hiddenItems: opts.statuslineHiddenItems ?? [],\r\n setHiddenItems: opts.setStatuslineHiddenItems ?? (() => {}),\r\n getConfig: opts.statuslineConfig?.get ?? (async () => ({})),\r\n setConfig: opts.statuslineConfig?.set ?? (async () => {}),\r\n }),\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 { readdir, readFile } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { SlashCommand, Context, Provider } from '@wrongstack/core';\nimport type { SlashCommandContext } from './index.js';\nimport { defaultOrchestrator } from '@wrongstack/core';\n\n/** Accepts a full Context (active agent run) or just provider+model (pre-agent session). */\ntype SecurityScannerContext = Context | { provider: Provider; model?: string };\n\nfunction getProviderFromContext(ctx: Context, opts: SlashCommandContext): { provider: Provider; model?: string } | null {\n // Prefer opts.llmProvider (passed from setupProvider in index.ts) over ctx.provider,\n // because ctx.provider may exist on the Context class but not be fully initialized\n // before the first agent run. opts.llmProvider is always the live provider instance.\n if (opts.llmProvider && typeof opts.llmProvider.complete === 'function') {\n return { provider: opts.llmProvider, model: opts.llmModel };\n }\n if (ctx.provider && typeof (ctx.provider as Provider).complete === 'function') {\n return { provider: ctx.provider, model: ctx.model };\n }\n return null;\n}\n\nexport function buildSecurityCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'security',\n description: 'Security scanning: scan, audit, report',\n argsHint: '[scan|audit|report] [options]',\n help: `\n# /security — Security Scanner\n\nAutomated security scanning with tech stack detection.\n\n## Commands\n\n### /security scan [options]\nRun a full security scan on the current project.\nOptions:\n --depth quick|standard|deep Scan depth (default: standard)\n --format markdown|json|html Report format (default: markdown)\n\n### /security audit\nRun dependency audit + security scan.\n\n### /security report [id]\nList or view security reports.\n\n## Examples\n\n/security scan\n/security scan --depth deep --format html\n/security audit\n/security report\n`,\n async run(args: string, ctx: Context) {\n const parts = args.trim().split(/\\s+/);\n const subcommand = parts[0] || '';\n\n switch (subcommand) {\n case 'scan':\n return handleScan(parts.slice(1).join(' '), ctx, opts);\n case 'audit':\n return handleAudit(ctx, opts);\n case 'report':\n return handleReport(parts[1] || '');\n default:\n return { message: getHelpMessage() };\n }\n },\n };\n}\n\nasync function handleScan(args: string, ctx: Context, opts: SlashCommandContext): Promise<{ message?: string; metadata?: Record<string, unknown> }> {\n const options = parseArgs(args);\n const projectRoot = ctx.projectRoot || opts.projectRoot;\n\n try {\n const providerInfo = getProviderFromContext(ctx, opts);\n if (!providerInfo) {\n return { message: '❌ Security scan requires an active LLM provider. No provider configured.' };\n }\n\n const result = await defaultOrchestrator.run(providerInfo, {\n projectRoot,\n scanOptions: {\n depth: (options.depth as 'quick' | 'standard' | 'deep') || 'standard',\n includeSecrets: true,\n includeInjection: true,\n includeConfig: true,\n },\n reportOptions: {\n format: (options.format as 'markdown' | 'json' | 'html') || 'markdown',\n },\n });\n\n const summary = result.scanResult.summary;\n const status = summary.total === 0 ? '✅ No issues found' : `⚠️ Found ${summary.total} issues`;\n\n // Use LLM-synthesized report if available\n const reportContent = result.synthesizedReport || `# Security Scan Complete\n\n**Project:** ${projectRoot}\n**Tech Stack:** ${result.detectionResult.detectedStacks[0]?.stack || 'unknown'}\n**Scanned Files:** ${result.scanResult.scannedFiles}\n**Duration:** ${result.scanResult.scanDurationMs}ms\n\n## Summary\n\n| Severity | Count |\n|----------|-------|\n| 🔴 Critical | ${summary.critical} |\n| 🟠 High | ${summary.high} |\n| 🟡 Medium | ${summary.medium} |\n| 🟢 Low | ${summary.low} |\n\n**Status:** ${status}\n\n**Report:** ${result.reportPath}\n`;\n\n return {\n message: reportContent,\n metadata: {\n scanResult: result.scanResult,\n reportPath: result.reportPath,\n techStack: result.detectionResult.detectedStacks[0],\n },\n };\n } catch (error) {\n return { message: `❌ Scan failed: ${error}` };\n }\n}\n\nasync function handleAudit(ctx: Context, opts: SlashCommandContext): Promise<{ message?: string; metadata?: Record<string, unknown> }> {\n const projectRoot = ctx.projectRoot || opts.projectRoot;\n\n try {\n const providerInfo = getProviderFromContext(ctx, opts);\n if (!providerInfo) {\n return { message: '❌ Security audit requires an active LLM provider. No provider configured.' };\n }\n\n const result = await defaultOrchestrator.run(providerInfo, {\n projectRoot,\n reportOptions: { format: 'markdown' },\n });\n\n const summary = result.scanResult.summary;\n const depIssues = summary.critical + summary.high;\n\n // Use LLM-synthesized report for audit\n const reportContent = result.synthesizedReport || `# Security Audit Complete\n\n**Project:** ${projectRoot}\n**Tech Stack:** ${result.detectionResult.detectedStacks[0]?.stack || 'unknown'}\n\n## Dependency Health\n\n| Status | Count |\n|--------|-------|\n| Critical Issues | ${summary.critical} |\n| High Priority | ${summary.high} |\n| Medium Priority | ${summary.medium} |\n| Low Priority | ${summary.low} |\n\n${depIssues === 0 ? '✅ No known vulnerabilities detected' : `⚠️ ${depIssues} vulnerabilities need attention`}\n\n**Full Report:** ${result.reportPath}\n`;\n\n return {\n message: reportContent,\n metadata: {\n scanResult: result.scanResult,\n reportPath: result.reportPath,\n },\n };\n } catch (error) {\n return { message: `❌ Audit failed: ${error}` };\n }\n}\n\nasync function handleReport(reportId: string): Promise<{ message?: string }> {\n const reportsDir = 'security-reports';\n\n try {\n const files = await readdir(reportsDir);\n const reports = files\n .filter((f) => f.startsWith('security-report-') && (f.endsWith('.md') || f.endsWith('.json')))\n .sort()\n .reverse();\n\n if (!reportId) {\n if (reports.length === 0) {\n return { message: '📭 No security reports found. Run `/security scan` first.' };\n }\n\n const list = reports\n .map((r, i) => {\n const date = r.replace('security-report-', '').replace(/\\.(md|json)$/, '');\n return ` ${i + 1}. ${date}`;\n })\n .join('\\n');\n\n return { message: `# Available Security Reports\\n\\n${list}\\n\\nUse \\`/security report <number>\\` to view a specific report.` };\n }\n\n const index = parseInt(reportId, 10) - 1;\n if (!isNaN(index) && reports[index]) {\n const content = await readFile(join(reportsDir, reports[index]), 'utf-8');\n return { message: `# Security Report\\n\\n${content}` };\n }\n\n const match = reports.find((r) => r.includes(reportId));\n if (match) {\n const content = await readFile(join(reportsDir, match), 'utf-8');\n return { message: `# Security Report\\n\\n${content}` };\n }\n\n return { message: `❌ Report \"${reportId}\" not found. Use \\`/security report\\` to see available reports.` };\n } catch {\n return { message: '📭 No security reports found. Run `/security scan` first.' };\n }\n}\n\nfunction parseArgs(args: string): Record<string, string> {\n const result: Record<string, string> = {};\n const parts = args.split(/\\s+/);\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (!part || !part.startsWith('--')) continue;\n\n const key = part.slice(2);\n const next = parts[i + 1];\n if (next && !next.startsWith('--')) {\n result[key] = next;\n i++;\n } else {\n result[key] = 'true';\n }\n }\n\n return result;\n}\n\nfunction getHelpMessage(): string {\n return `# /security — Security Scanner\n\n**Available Commands:**\n\n1. **/security scan** — Run full security scan\n \\`/security scan --depth deep --format html\\`\n\n2. **/security audit** — Run dependency audit + security scan\n\n3. **/security report** — List available reports\n\n**Features:**\n- Automatic tech stack detection\n- Dynamic security skill generation\n- Secrets, injection, and config vulnerability scanning\n- Markdown/JSON/HTML reports\n- .gitignore auto-update\n\nRun \\`/security scan\\` to start.`;\n}","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { atomicWrite, type SlashCommand } from '@wrongstack/core';\n\nconst CONFIG_ENV = 'WRONGSTACK_STATUSLINE_CONFIG';\nconst DEFAULT_PATH = '~/.wrongstack/statusline.json';\n\nexport interface StatuslineConfig {\n todos?: boolean;\n plan?: boolean;\n fleet?: boolean;\n git?: boolean;\n elapsed?: boolean;\n context?: boolean;\n cost?: boolean;\n}\n\nconst DEFAULTS: StatuslineConfig = {\n todos: true,\n plan: true,\n fleet: true,\n git: true,\n elapsed: true,\n context: true,\n cost: true,\n};\n\nfunction resolveConfigPath(): string {\n return process.env[CONFIG_ENV] ?? path.join(process.env.HOME ?? '', '.wrongstack', 'statusline.json');\n}\n\nexport async function loadStatuslineConfig(): Promise<StatuslineConfig> {\n const p = resolveConfigPath();\n try {\n const raw = await fs.readFile(p, 'utf8');\n return { ...DEFAULTS, ...JSON.parse(raw) as Partial<StatuslineConfig> };\n } catch {\n return { ...DEFAULTS };\n }\n}\n\nexport async function saveStatuslineConfig(cfg: StatuslineConfig): Promise<void> {\n const p = resolveConfigPath();\n await fs.mkdir(path.dirname(p), { recursive: true });\n // atomicWrite: torn write would leave statusline.json malformed and the\n // next load would silently fall back to DEFAULTS, losing user preferences.\n await atomicWrite(p, JSON.stringify(cfg, null, 2));\n}\n\nexport interface StatuslineCommandDeps {\n cwd: string;\n /** Current hidden items list. Written by the command when toggling. */\n hiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\n setHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\n getConfig: () => Promise<StatuslineConfig>;\n setConfig: (cfg: StatuslineConfig) => Promise<void>;\n}\n\nexport function buildStatuslineCommand(deps: StatuslineCommandDeps): SlashCommand {\n return {\n name: 'statusline',\n aliases: ['sl'],\n description: 'Customize status bar chips: /statusline [item] [on|off] or /statusline reset',\n help: [\n 'Usage: /statusline [item] [on|off]',\n ' /statusline — show current config',\n ' /statusline <item> on — enable a chip',\n ' /statusline <item> off — disable a chip',\n ' /statusline reset — restore defaults',\n '',\n 'Available items: todos, plan, fleet, git, elapsed, context, cost',\n 'Persistent across sessions (saved to ~/.wrongstack/statusline.json).',\n ].join('\\n'),\n async run(args: string) {\n const cfg = await deps.getConfig();\n const trimmed = args.trim();\n const parts = trimmed.split(/\\s+/);\n const [item, action] = parts;\n\n // No args → show current config\n if (!item) {\n const lines = ['StatusBar chips:'];\n const items: (keyof StatuslineConfig)[] = [\n 'todos', 'plan', 'fleet', 'git', 'elapsed', 'context', 'cost',\n ];\n for (const k of items) {\n const val = cfg[k];\n if (val === undefined) continue;\n lines.push(` ${val ? '●' : '○'} ${k}`);\n }\n return { message: lines.join('\\n') };\n }\n\n // Reset\n if (item === 'reset') {\n await deps.setConfig({ ...DEFAULTS });\n deps.setHiddenItems([]);\n return { message: 'StatusBar config reset to defaults.' };\n }\n\n // Toggle\n const validItems: (keyof StatuslineConfig)[] = [\n 'todos', 'plan', 'fleet', 'git', 'elapsed', 'context', 'cost',\n ];\n if (!validItems.includes(item as keyof StatuslineConfig)) {\n return {\n message: `Unknown item \"${item}\". Available: ${validItems.join(', ')}. Usage: /statusline <item> on|off`,\n };\n }\n\n const onOff = action?.toLowerCase();\n if (!onOff || (onOff !== 'on' && onOff !== 'off')) {\n return { message: `Usage: /statusline ${item} on|off` };\n }\n\n const next = { ...cfg, [item]: onOff === 'on' };\n await deps.setConfig(next);\n\n // Sync hiddenItems list with TUI\n if (onOff === 'off') {\n deps.setHiddenItems([...deps.hiddenItems, item as typeof deps.hiddenItems[number]]);\n } else {\n deps.setHiddenItems(deps.hiddenItems.filter((i) => i !== item));\n }\n\n return { message: `statusline ${item}: ${onOff}` };\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';\r\nimport * as path from 'node:path';\r\nimport { color } from '@wrongstack/core';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\nimport { detectProjectFacts, renderAgentsTemplate } from './slash-commands/index.js';\r\n\r\nexport type ProjectKind =\r\n /** `.wrongstack/AGENTS.md` exists — fully set up. */\r\n | 'initialized'\r\n /** Has a recognizable manifest (package.json, pyproject.toml, etc.) but no AGENTS.md yet. */\r\n | 'project'\r\n /** No manifest, no AGENTS.md — probably an empty/scratch directory. */\r\n | 'empty';\r\n\r\nconst MANIFESTS = [\r\n 'package.json',\r\n 'pyproject.toml',\r\n 'Cargo.toml',\r\n 'go.mod',\r\n 'Makefile',\r\n 'pom.xml',\r\n 'build.gradle',\r\n 'build.gradle.kts',\r\n 'composer.json',\r\n 'Gemfile',\r\n];\r\n\r\nexport async function detectProjectKind(projectRoot: string): Promise<ProjectKind> {\r\n try {\r\n await fs.access(path.join(projectRoot, '.wrongstack', 'AGENTS.md'));\r\n return 'initialized';\r\n } catch {\r\n // not initialized\r\n }\r\n for (const m of MANIFESTS) {\r\n try {\r\n await fs.access(path.join(projectRoot, m));\r\n return 'project';\r\n } catch {\r\n // try next\r\n }\r\n }\r\n return 'empty';\r\n}\r\n\r\nasync function scaffoldAgentsMd(projectRoot: string): Promise<string> {\r\n const dir = path.join(projectRoot, '.wrongstack');\r\n const file = path.join(dir, 'AGENTS.md');\r\n const facts = await detectProjectFacts(projectRoot);\r\n const body = renderAgentsTemplate(facts);\r\n await fs.mkdir(dir, { recursive: true });\r\n await fs.writeFile(file, body, 'utf8');\r\n return file;\r\n}\r\n\r\n/**\r\n * Print a one-line project status banner and, when relevant, prompt the\r\n * user about scaffolding `AGENTS.md` or continuing in a directory that\r\n * doesn't look like a project. Returns `false` if the user bailed out.\r\n */\r\nexport async function runProjectCheck(opts: {\r\n projectRoot: string;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n}): Promise<boolean> {\r\n const { projectRoot, renderer, reader } = opts;\r\n const kind = await detectProjectKind(projectRoot);\r\n\r\n if (kind === 'initialized') {\r\n renderer.write(\r\n `\\n ${color.green('✓')} Project initialized ${color.dim(`(${path.join(projectRoot, '.wrongstack', 'AGENTS.md')})`)}\\n`,\r\n );\r\n return true;\r\n }\r\n\r\n if (kind === 'project') {\r\n renderer.write(\r\n `\\n ${color.amber('●')} Project detected ${color.dim(`(${projectRoot})`)} but ${color.bold('.wrongstack/AGENTS.md')} is missing.\\n`,\r\n );\r\n const answer = (\r\n await reader.readLine(\r\n ` ${color.amber('?')} Scaffold ${color.bold('AGENTS.md')} now? ${color.dim('[y/N/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q') {\r\n renderer.write(color.dim(' Cancelled.\\n'));\r\n return false;\r\n }\r\n if (answer === 'y' || answer === 'yes') {\r\n try {\r\n const file = await scaffoldAgentsMd(projectRoot);\r\n renderer.write(` ${color.green('✓')} Wrote ${color.dim(file)}\\n`);\r\n } catch (err) {\r\n renderer.writeError(\r\n `Failed to scaffold AGENTS.md: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // 'empty' — no manifest, no AGENTS.md, possibly no git\r\n const gitDir = path.join(projectRoot, '.git');\r\n let hasGit = false;\r\n try {\r\n await fs.access(gitDir);\r\n hasGit = true;\r\n } catch {\r\n // no git\r\n }\r\n\r\n if (!hasGit) {\r\n renderer.write(\r\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\r\n );\r\n const answer = (\r\n await reader.readLine(\r\n ` ${color.amber('?')} No git repo found. ${color.bold('Initialize git?')} ${color.dim('[y/N/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q') {\r\n renderer.write(color.dim(' Cancelled.\\n'));\r\n return false;\r\n }\r\n if (answer === 'y' || answer === 'yes') {\r\n try {\r\n const { spawn } = await import('node:child_process');\r\n await new Promise<void>((resolve, reject) => {\r\n const child = spawn('git', ['init'], { cwd: projectRoot });\r\n child.on('close', (code) => (code === 0 ? resolve() : reject(new Error(`git init failed with ${code}`))));\r\n });\r\n renderer.write(` ${color.green('✓')} Git repository initialized\\n`);\r\n } catch (err) {\r\n renderer.writeError(`git init failed: ${err instanceof Error ? err.message : String(err)}\\n`);\r\n }\r\n }\r\n } else {\r\n renderer.write(\r\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\r\n );\r\n }\r\n\r\n const answer = (\r\n await reader.readLine(` ${color.amber('?')} Continue anyway? ${color.dim('[Y/n/q]')} `)\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q' || answer === 'n' || answer === 'no') {\r\n renderer.write(color.dim(' Cancelled.\\n'));\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nexport interface LaunchModeChoices {\r\n /** TUI or plain REPL. */\r\n mode: 'tui' | 'repl';\r\n /** Auto-approve every tool call (no permission prompts). */\r\n yolo: boolean;\r\n}\r\n\r\n/**\r\n * Ask for interactive mode (TUI vs REPL) and YOLO. Either prompt is\r\n * skipped when the corresponding CLI flag was already pinned. Returns\r\n * the resolved pair.\r\n */\r\nexport async function runLaunchPrompts(opts: {\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n modePinned?: 'tui' | 'repl';\r\n yoloPinned?: boolean;\r\n}): Promise<LaunchModeChoices> {\r\n const { renderer, reader, modePinned, yoloPinned } = opts;\r\n\r\n let mode: 'tui' | 'repl';\r\n if (modePinned) {\r\n mode = modePinned;\r\n } else {\r\n const answer = (\r\n await reader.readLine(\r\n `\\n ${color.amber('?')} Interactive mode: ${color.bold('T')}UI / ${color.bold('R')}EPL ${color.dim('[T/r/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q') {\r\n renderer.write(color.dim(' Goodbye!\\n'));\r\n process.exit(0);\r\n }\r\n mode = answer === 'r' || answer === 'repl' ? 'repl' : 'tui';\r\n }\r\n\r\n let yolo: boolean;\r\n if (yoloPinned !== undefined) {\r\n yolo = yoloPinned;\r\n } else {\r\n const answer = (\r\n await reader.readLine(\r\n ` ${color.amber('?')} YOLO mode ${color.dim('(auto-approve every tool call)')} ${color.dim('[Y/n/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'q') {\r\n renderer.write(color.dim(' Goodbye!\\n'));\r\n process.exit(0);\r\n }\r\n yolo = answer !== 'n' && answer !== 'no';\r\n }\r\n\r\n renderer.write(\r\n `\\n ${color.green('▶')} Launching in ${color.bold(mode.toUpperCase())} mode${yolo ? color.yellow(' (YOLO)') : ''}\\n\\n`,\r\n );\r\n\r\n return { mode, yolo };\r\n}\r\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';\r\nimport {\r\n type ModelsRegistry,\r\n type ProviderConfig,\r\n type ResolvedProvider,\r\n type SecretVault,\r\n type WireFamily,\r\n atomicWrite,\r\n color,\r\n decryptConfigSecrets,\r\n encryptConfigSecrets,\r\n} from '@wrongstack/core';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport {\r\n activeLabel,\r\n maskedKey,\r\n normalizeKeys,\r\n nowIso,\r\n writeKeysBack,\r\n} from './provider-config-utils.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\n\r\nexport interface AuthMenuDeps {\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n modelsRegistry: ModelsRegistry;\r\n vault: SecretVault;\r\n globalConfigPath: string;\r\n}\r\n\r\n/**\r\n * Interactive auth manager. Shows saved providers + keys, lets the user\r\n * add/update/delete keys, set the active key per provider, or add a key\r\n * for any provider in the models.dev catalog. Loops until the user exits.\r\n *\r\n * The legacy single-key `apiKey` field is migrated to `apiKeys[]` lazily\r\n * on first edit, so users who set up under the old schema upgrade\r\n * transparently the first time they open this menu.\r\n */\r\nexport async function runAuthMenu(deps: AuthMenuDeps): Promise<number> {\r\n for (;;) {\r\n const providers = await loadProviders(deps);\r\n renderTopMenu(deps.renderer, providers);\r\n\r\n const ids = Object.keys(providers).sort();\r\n const choice = (await deps.reader.readLine(`\\n${color.amber('?')} Pick: `))\r\n .trim()\r\n .toLowerCase();\r\n\r\n if (!choice || choice === 'q' || choice === 'quit' || choice === 'exit') {\r\n deps.renderer.write(color.dim('Done.\\n'));\r\n return 0;\r\n }\r\n\r\n if (choice === 'a' || choice === 'add') {\r\n await addForNewProvider(deps);\r\n continue;\r\n }\r\n\r\n if (choice === 'c' || choice === 'custom') {\r\n await addCustomProvider(deps);\r\n continue;\r\n }\r\n\r\n const idx = Number.parseInt(choice, 10);\r\n if (!Number.isNaN(idx) && idx >= 1 && idx <= ids.length) {\r\n const pid = ids[idx - 1]!;\r\n await manageProvider(pid, deps);\r\n continue;\r\n }\r\n\r\n // Try matching by provider id directly.\r\n const byId = ids.find((id) => id.toLowerCase() === choice);\r\n if (byId) {\r\n await manageProvider(byId, deps);\r\n continue;\r\n }\r\n\r\n deps.renderer.writeError(`Unknown selection: \"${choice}\"`);\r\n }\r\n}\r\n\r\nfunction renderTopMenu(\r\n renderer: TerminalRenderer,\r\n providers: Record<string, ProviderConfig>,\r\n): void {\r\n renderer.write(`\\n${color.bold('WrongStack')} ${color.dim('— API keys')}\\n\\n`);\r\n const ids = Object.keys(providers).sort();\r\n if (ids.length === 0) {\r\n renderer.write(color.dim(' No providers configured yet.\\n'));\r\n } else {\r\n renderer.write(` ${color.dim('Saved providers:')}\\n`);\r\n let idx = 1;\r\n for (const id of ids) {\r\n const cfg = providers[id]!;\r\n const keys = normalizeKeys(cfg);\r\n const active = activeLabel(cfg, keys);\r\n const summary =\r\n keys.length === 0\r\n ? color.dim('(no keys)')\r\n : keys.length === 1\r\n ? maskedKey(keys[0]!.apiKey)\r\n : `${color.dim(`${keys.length} keys`)} ${color.dim('active:')} ${color.bold(active ?? '?')} ${maskedKey(keys.find((k) => k.label === active)?.apiKey ?? keys[0]!.apiKey)}`;\r\n const fam = cfg.family ? color.dim(`[${cfg.family}]`) : '';\r\n const aliasHint = cfg.type && cfg.type !== id ? color.dim(`→ ${cfg.type}`) : '';\r\n renderer.write(\r\n ` ${color.dim(`${idx}.`.padStart(4))} ${id.padEnd(22)} ${fam} ${aliasHint} ${summary}\\n`,\r\n );\r\n idx++;\r\n }\r\n }\r\n renderer.write(`\\n ${color.dim('Actions:')}\\n`);\r\n renderer.write(` ${color.bold('a')} Add key for a new provider (from catalog)\\n`);\r\n renderer.write(` ${color.bold('c')} Add custom provider (type + family + baseUrl)\\n`);\r\n renderer.write(` ${color.bold('q')} Quit\\n`);\r\n if (ids.length > 0) {\r\n renderer.write(color.dim(`\\n Pick a number to manage that provider's keys.\\n`));\r\n }\r\n}\r\n\r\nasync function manageProvider(providerId: string, deps: AuthMenuDeps): Promise<void> {\r\n for (;;) {\r\n const providers = await loadProviders(deps);\r\n const cfg = providers[providerId];\r\n if (!cfg) {\r\n deps.renderer.writeError(`Provider \"${providerId}\" no longer in config.`);\r\n return;\r\n }\r\n const keys = normalizeKeys(cfg);\r\n const active = activeLabel(cfg, keys);\r\n\r\n deps.renderer.write(\r\n `\\n${color.bold(providerId)} ${cfg.family ? color.dim(`[${cfg.family}]`) : color.amber('[no family]')}\\n`,\r\n );\r\n deps.renderer.write(\r\n color.dim(` type: ${cfg.type ?? providerId}\\n`) +\r\n color.dim(\r\n ` family: ${cfg.family ?? '(unset → resolved from models.dev when type matches)'}\\n`,\r\n ) +\r\n color.dim(` baseUrl: ${cfg.baseUrl ?? '(unset → catalog default)'}\\n`),\r\n );\r\n if (cfg.envVars && cfg.envVars.length > 0) {\r\n deps.renderer.write(color.dim(` envVars: ${cfg.envVars.join(', ')}\\n`));\r\n }\r\n if (cfg.models && cfg.models.length > 0) {\r\n deps.renderer.write(color.dim(` models: ${cfg.models.join(', ')}\\n`));\r\n }\r\n if (keys.length === 0) {\r\n deps.renderer.write(color.dim(' (no keys saved)\\n'));\r\n } else {\r\n for (let i = 0; i < keys.length; i++) {\r\n const k = keys[i]!;\r\n const marker = k.label === active ? color.green('●') : color.dim('○');\r\n deps.renderer.write(\r\n ` ${color.dim(`${i + 1}.`.padStart(4))} ${marker} ${k.label.padEnd(20)} ${maskedKey(k.apiKey)} ${color.dim(k.createdAt)}\\n`,\r\n );\r\n }\r\n }\r\n\r\n deps.renderer.write(`\\n ${color.dim('Actions:')}\\n`);\r\n deps.renderer.write(` ${color.bold('a')} Add another key\\n`);\r\n if (keys.length > 0) {\r\n deps.renderer.write(` ${color.bold('u')} <n> Update key <n>\\n`);\r\n deps.renderer.write(` ${color.bold('d')} <n> Delete key <n>\\n`);\r\n deps.renderer.write(` ${color.bold('s')} <n> Set key <n> as active\\n`);\r\n }\r\n deps.renderer.write(` ${color.bold('f')} Edit family\\n`);\r\n deps.renderer.write(` ${color.bold('B')} Edit baseUrl\\n`);\r\n deps.renderer.write(` ${color.bold('m')} Edit visible model list\\n`);\r\n deps.renderer.write(` ${color.bold('x')} Remove this provider entirely\\n`);\r\n deps.renderer.write(` ${color.bold('b')} Back\\n`);\r\n deps.renderer.write(` ${color.bold('q')} Quit\\n`);\r\n\r\n const raw = (await deps.reader.readLine(`\\n${color.amber('?')} ${providerId} > `)).trim();\r\n if (!raw || raw === 'b' || raw === 'back' || raw === 'q' || raw === 'quit') return;\r\n\r\n const [verb, argRaw] = raw.split(/\\s+/, 2);\r\n const arg = argRaw ? Number.parseInt(argRaw, 10) : Number.NaN;\r\n\r\n if (verb === 'a' || verb === 'add') {\r\n await addKeyForProvider(providerId, deps, cfg);\r\n continue;\r\n }\r\n if (verb === 'x' || verb === 'remove') {\r\n const confirm = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Remove provider \"${providerId}\" and ${keys.length} key(s)? ${color.dim('[y/N/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (confirm === 'q') continue;\r\n if (confirm === 'y' || confirm === 'yes') {\r\n await mutateProviders(deps, (all) => {\r\n delete all[providerId];\r\n });\r\n deps.renderer.write(` ${color.green('✓')} Removed ${providerId}.\\n`);\r\n return;\r\n }\r\n continue;\r\n }\r\n if (verb === 'u' || verb === 'update') {\r\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\r\n deps.renderer.writeError(`Usage: u <1-${keys.length}>`);\r\n continue;\r\n }\r\n const target = keys[arg - 1]!;\r\n const newKey = await readKeyInput(deps, `Updated key for ${target.label}`);\r\n if (!newKey) continue;\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n const list = normalizeKeys(p).map((k) =>\r\n k.label === target.label ? { ...k, apiKey: newKey, createdAt: nowIso() } : k,\r\n );\r\n writeKeysBack(p, list);\r\n });\r\n deps.renderer.write(` ${color.green('✓')} Updated ${providerId}/${target.label}.\\n`);\r\n continue;\r\n }\r\n if (verb === 'd' || verb === 'delete' || verb === 'rm') {\r\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\r\n deps.renderer.writeError(`Usage: d <1-${keys.length}>`);\r\n continue;\r\n }\r\n const target = keys[arg - 1]!;\r\n const confirm = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Delete key \"${target.label}\" (${maskedKey(target.apiKey)})? ${color.dim('[y/N/q]')} `,\r\n )\r\n )\r\n .trim()\r\n .toLowerCase();\r\n if (confirm === 'q') continue;\r\n if (confirm !== 'y' && confirm !== 'yes') continue;\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n const list = normalizeKeys(p).filter((k) => k.label !== target.label);\r\n writeKeysBack(p, list);\r\n if (p.activeKey === target.label) {\r\n p.activeKey = list[0]?.label;\r\n }\r\n });\r\n deps.renderer.write(` ${color.green('✓')} Deleted ${providerId}/${target.label}.\\n`);\r\n continue;\r\n }\r\n if (verb === 'f' || verb === 'family') {\r\n const current = cfg.family ?? '';\r\n const ans = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Family ${color.dim(`(anthropic | openai | openai-compatible | google, empty = unset, current: ${current || 'unset'})`)}: `,\r\n )\r\n ).trim() as WireFamily | '';\r\n if (ans !== '' && !['anthropic', 'openai', 'openai-compatible', 'google'].includes(ans)) {\r\n deps.renderer.writeError(`Invalid family: \"${ans}\"`);\r\n continue;\r\n }\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n if (ans === '') delete p.family;\r\n else p.family = ans;\r\n });\r\n deps.renderer.write(` ${color.green('✓')} family → ${ans || '(unset)'}\\n`);\r\n continue;\r\n }\r\n if (verb === 'B' || verb === 'baseurl' || verb === 'base-url') {\r\n const current = cfg.baseUrl ?? '';\r\n const ans = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Base URL ${color.dim(`(empty = unset, current: ${current || 'unset'})`)}: `,\r\n )\r\n ).trim();\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n if (ans === '') delete p.baseUrl;\r\n else p.baseUrl = ans;\r\n });\r\n deps.renderer.write(` ${color.green('✓')} baseUrl → ${ans || '(unset)'}\\n`);\r\n continue;\r\n }\r\n if (verb === 'm' || verb === 'models') {\r\n const current = (cfg.models ?? []).join(', ');\r\n const ans = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Model ids ${color.dim(`(comma-separated, empty = catalog default, current: ${current || 'none'})`)}: `,\r\n )\r\n ).trim();\r\n const list = ans\r\n ? ans\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean)\r\n : [];\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n if (list.length === 0) delete p.models;\r\n else p.models = list;\r\n });\r\n deps.renderer.write(\r\n ` ${color.green('✓')} models → ${list.length === 0 ? '(catalog default)' : list.join(', ')}\\n`,\r\n );\r\n continue;\r\n }\r\n if (verb === 's' || verb === 'set' || verb === 'active') {\r\n if (!Number.isFinite(arg) || arg < 1 || arg > keys.length) {\r\n deps.renderer.writeError(`Usage: s <1-${keys.length}>`);\r\n continue;\r\n }\r\n const target = keys[arg - 1]!;\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId];\r\n if (!p) return;\r\n // Make sure the apiKeys[] form is canonical before flipping active.\r\n const list = normalizeKeys(p);\r\n writeKeysBack(p, list);\r\n p.activeKey = target.label;\r\n });\r\n deps.renderer.write(\r\n ` ${color.green('✓')} Active key for ${providerId} → ${color.bold(target.label)}.\\n`,\r\n );\r\n continue;\r\n }\r\n deps.renderer.writeError(`Unknown action: \"${raw}\"`);\r\n }\r\n}\r\n\r\n/**\r\n * Pick a provider from the models.dev catalog (grouped by family) and add\r\n * a key for it. Catalog lookup populates family/baseUrl/envVars defaults.\r\n * When the catalog is unavailable we still let the user type a provider\r\n * id and family manually so the offline path keeps working.\r\n */\r\nasync function addForNewProvider(deps: AuthMenuDeps): Promise<void> {\r\n let catalog: ResolvedProvider[] = [];\r\n try {\r\n catalog = (await deps.modelsRegistry.listProviders()).filter((p) => p.family !== 'unsupported');\r\n } catch {\r\n deps.renderer.writeWarning('Catalog unavailable — falling back to manual entry.');\r\n }\r\n\r\n if (catalog.length === 0) {\r\n // Manual entry path\r\n const pid = (await deps.reader.readLine(` ${color.amber('?')} Provider id ${color.dim('[q to quit]')}: `)).trim();\r\n if (!pid || pid === 'q') return;\r\n const fam = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Family (anthropic/openai/openai-compatible/google): `,\r\n )\r\n ).trim() as WireFamily;\r\n const baseUrl = (\r\n await deps.reader.readLine(` ${color.amber('?')} Base URL ${color.dim('(optional)')}: `)\r\n ).trim();\r\n await addKeyForProvider(pid, deps, {\r\n type: pid,\r\n family: fam || undefined,\r\n ...(baseUrl ? { baseUrl } : {}),\r\n });\r\n return;\r\n }\r\n\r\n // Group catalog by family, optionally narrowed by a substring filter\r\n // and/or hiding already-saved entries. The catalog has 120+ entries —\r\n // without a filter the openai-compatible list alone scrolls off-screen,\r\n // so types like \"zai-coding-plan\" get easy to miss.\r\n const saved = new Set(Object.keys(await loadProviders(deps)));\r\n deps.renderer.write(\r\n color.dim(\r\n ` Catalog has ${catalog.length} providers. Filter by name to narrow, or \"s\" for unsaved-only.\\n`,\r\n ),\r\n );\r\n const filterRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Filter ${color.dim('(substring, \"s\" for unsaved-only, q to quit)')}: `,\r\n )\r\n ).trim();\r\n if (filterRaw === 'q') return;\r\n const filterLc = filterRaw.toLowerCase();\r\n const showUnsavedOnly = filterLc === 's' || filterLc === 'unsaved';\r\n const matches = (p: ResolvedProvider): boolean => {\r\n if (showUnsavedOnly) return !saved.has(p.id);\r\n if (!filterLc) return true;\r\n return p.id.toLowerCase().includes(filterLc) || p.name.toLowerCase().includes(filterLc);\r\n };\r\n\r\n const byFamily = new Map<WireFamily, ResolvedProvider[]>();\r\n let filteredCount = 0;\r\n for (const p of catalog) {\r\n if (!matches(p)) continue;\r\n filteredCount++;\r\n const list = byFamily.get(p.family) ?? [];\r\n list.push(p);\r\n byFamily.set(p.family, list);\r\n }\r\n\r\n if (filteredCount === 0) {\r\n deps.renderer.writeError(\r\n `No providers match \"${filterRaw}\". Try a shorter substring or check \\`wstack providers\\` for valid ids.`,\r\n );\r\n return;\r\n }\r\n if (filterRaw && !showUnsavedOnly) {\r\n deps.renderer.write(\r\n color.dim(` ${filteredCount} match${filteredCount === 1 ? '' : 'es'} for \"${filterRaw}\".\\n`),\r\n );\r\n }\r\n\r\n const ordered: ResolvedProvider[] = [];\r\n const familyOrder: WireFamily[] = ['anthropic', 'openai', 'google', 'openai-compatible'];\r\n let idx = 1;\r\n deps.renderer.write('\\n');\r\n for (const fam of familyOrder) {\r\n const list = byFamily.get(fam);\r\n if (!list || list.length === 0) continue;\r\n deps.renderer.write(` ${color.bold(fam)}\\n`);\r\n for (const p of list) {\r\n const savedMark = saved.has(p.id) ? color.cyan('◉') : color.dim('○');\r\n const env = p.envVars[0] ? color.dim(`[${p.envVars[0]}]`) : '';\r\n deps.renderer.write(\r\n ` ${color.dim(`${idx}.`.padStart(4))} ${savedMark} ${p.id.padEnd(22)} ${color.dim(p.name)} ${env}\\n`,\r\n );\r\n ordered.push(p);\r\n idx++;\r\n }\r\n }\r\n deps.renderer.write(`\\n ${color.dim('◉ already saved ○ no key yet')}\\n`);\r\n\r\n const answer = (\r\n await deps.reader.readLine(\r\n `\\n${color.amber('?')} Pick (1-${ordered.length}) or type provider id ${color.dim('[q to quit]')}: `,\r\n )\r\n ).trim();\r\n if (!answer || answer === 'q') return;\r\n\r\n let chosen: ResolvedProvider | undefined;\r\n const num = Number.parseInt(answer, 10);\r\n if (!Number.isNaN(num) && num >= 1 && num <= ordered.length) {\r\n chosen = ordered[num - 1];\r\n } else {\r\n chosen =\r\n ordered.find((p) => p.id.toLowerCase() === answer.toLowerCase()) ??\r\n catalog.find((p) => p.id.toLowerCase() === answer.toLowerCase());\r\n }\r\n if (!chosen) {\r\n deps.renderer.writeError(`No such provider: \"${answer}\"`);\r\n return;\r\n }\r\n\r\n // Always show family + baseUrl as inline prompts with catalog defaults\r\n // so the user can override either one without a separate confirmation\r\n // step. Press Enter to accept the catalog value, or type a new one to\r\n // change it. Useful for routing a catalog-known id through a custom\r\n // proxy or a different wire family (e.g. \"anthropic\"-id provider\r\n // through an openai-compatible gateway).\r\n deps.renderer.write(\r\n color.dim(`\\n Defaults from models.dev — press Enter to keep, or type a new value.\\n`),\r\n );\r\n const famRaw = (\r\n await deps.reader.readLine(` ${color.amber('?')} Family ${color.dim(`[${chosen.family}]`)} ${color.dim('(q to quit)')}: `)\r\n ).trim();\r\n if (famRaw === 'q') return;\r\n let family: WireFamily = chosen.family;\r\n if (famRaw) {\r\n if (!['anthropic', 'openai', 'openai-compatible', 'google'].includes(famRaw)) {\r\n deps.renderer.writeError(\r\n `Invalid family: \"${famRaw}\" (must be anthropic | openai | openai-compatible | google).`,\r\n );\r\n return;\r\n }\r\n family = famRaw as WireFamily;\r\n }\r\n const baseRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Base URL ${color.dim(`[${chosen.apiBase ?? 'unset'}]`)} ${color.dim('(q to quit)')}: `,\r\n )\r\n ).trim();\r\n if (baseRaw === 'q') return;\r\n const baseUrl: string | undefined = baseRaw || chosen.apiBase;\r\n\r\n // Pick the storage alias (= map key under `providers`). Two reasons to\r\n // make this distinct from the catalog id:\r\n // 1. The user may want the SAME catalog provider saved twice with\r\n // different family/baseUrl (e.g. zai-coding-plan once as\r\n // openai-compatible, once as anthropic) — different aliases let\r\n // both entries coexist.\r\n // 2. The CLI launches via `--provider <alias>`, so a short custom\r\n // name like \"zai-claude\" is friendlier than \"zai-coding-plan-anthropic\".\r\n // Auto-suggest a disambiguated alias when family diverges from the\r\n // catalog default, since that's the signal the user is creating a\r\n // second variant — not just adding another key to the same profile.\r\n const providersNow = await loadProviders(deps);\r\n let suggestedAlias = chosen.id;\r\n if (family !== chosen.family) {\r\n let candidate = `${chosen.id}-${family}`;\r\n let n = 2;\r\n while (providersNow[candidate]) {\r\n candidate = `${chosen.id}-${family}-${n}`;\r\n n++;\r\n }\r\n suggestedAlias = candidate;\r\n }\r\n const aliasRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Save under alias ${color.dim(`[${suggestedAlias}]`)} ${color.dim('(used as `--provider <alias>`)')}: `,\r\n )\r\n ).trim();\r\n const alias = aliasRaw || suggestedAlias;\r\n\r\n // Block clobbering an unrelated existing entry. Same alias is fine if\r\n // the user is intentionally adding another KEY to the same profile —\r\n // but only when family + baseUrl match what's already saved. Otherwise\r\n // we'd silently overwrite their settings and pile a key into the wrong\r\n // place (exactly the bug that motivated the alias prompt).\r\n const existing = providersNow[alias];\r\n if (existing) {\r\n const sameFamily = (existing.family ?? chosen.family) === family;\r\n const sameBase = (existing.baseUrl ?? chosen.apiBase) === baseUrl;\r\n if (!sameFamily || !sameBase) {\r\n deps.renderer.writeError(\r\n `Alias \"${alias}\" already exists with different family/baseUrl.\\n ` +\r\n `Existing: family=${existing.family ?? '(unset)'}, baseUrl=${existing.baseUrl ?? '(unset)'}\\n ` +\r\n `New: family=${family}, baseUrl=${baseUrl ?? '(unset)'}\\n ` +\r\n `Pick a different alias to keep them separate.`,\r\n );\r\n return;\r\n }\r\n }\r\n\r\n await addKeyForProvider(alias, deps, {\r\n type: chosen.id,\r\n family,\r\n baseUrl,\r\n envVars: chosen.envVars,\r\n });\r\n}\r\n\r\n/**\r\n * Add a fully user-defined provider that bypasses the models.dev catalog.\r\n * The user picks the type (registry id), wire family, and base URL — all\r\n * three are stored on the entry so the CLI can construct the provider\r\n * via `makeProviderFromConfig` at boot without a catalog lookup.\r\n */\r\nasync function addCustomProvider(deps: AuthMenuDeps): Promise<void> {\r\n deps.renderer.write(\r\n `\\n${color.bold('Custom provider')} ${color.dim('— for local models or proxies not in the models.dev catalog.')}\\n`,\r\n );\r\n const type = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Provider id ${color.dim('(e.g. \"local-llama\", \"my-proxy\", q to quit)')}: `,\r\n )\r\n ).trim();\r\n if (!type || type === 'q') return;\r\n\r\n const existing = (await loadProviders(deps))[type];\r\n if (existing) {\r\n deps.renderer.writeWarning(`\"${type}\" already exists. Pick it from the main menu to edit.`);\r\n return;\r\n }\r\n\r\n const familyRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Wire family ${color.dim('(anthropic | openai | openai-compatible | google)')} ${color.dim('(q to quit)')}: `,\r\n )\r\n ).trim();\r\n if (familyRaw === 'q') return;\r\n if (!['anthropic', 'openai', 'openai-compatible', 'google'].includes(familyRaw)) {\r\n deps.renderer.writeError(`Invalid family: \"${familyRaw}\"`);\r\n return;\r\n }\r\n const family = familyRaw as WireFamily;\r\n\r\n const baseUrl = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Base URL ${color.dim('(e.g. http://localhost:11434/v1, leave empty if not needed)')}: `,\r\n )\r\n ).trim();\r\n\r\n const modelsRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Model ids ${color.dim('(comma-separated, optional)')}: `,\r\n )\r\n ).trim();\r\n const models = modelsRaw\r\n ? modelsRaw\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean)\r\n : undefined;\r\n\r\n const envVarsRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Env var names ${color.dim('(comma-separated, optional fallback for the key)')}: `,\r\n )\r\n ).trim();\r\n const envVars = envVarsRaw\r\n ? envVarsRaw\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean)\r\n : undefined;\r\n\r\n await addKeyForProvider(type, deps, {\r\n type,\r\n family,\r\n ...(baseUrl ? { baseUrl } : {}),\r\n ...(models ? { models } : {}),\r\n ...(envVars ? { envVars } : {}),\r\n });\r\n}\r\n\r\nasync function addKeyForProvider(\r\n providerId: string,\r\n deps: AuthMenuDeps,\r\n template: Partial<ProviderConfig>,\r\n): Promise<void> {\r\n const providers = await loadProviders(deps);\r\n const existing = providers[providerId];\r\n const existingKeys = existing ? normalizeKeys(existing) : [];\r\n const usedLabels = new Set(existingKeys.map((k) => k.label));\r\n\r\n // Suggest a sensible default label\r\n let defaultLabel = 'default';\r\n if (usedLabels.has(defaultLabel)) {\r\n let n = 2;\r\n while (usedLabels.has(`key${n}`)) n++;\r\n defaultLabel = `key${n}`;\r\n }\r\n\r\n const labelRaw = (\r\n await deps.reader.readLine(\r\n ` ${color.amber('?')} Label for this key ${color.dim(`[${defaultLabel}]`)}: `,\r\n )\r\n ).trim();\r\n const label = labelRaw || defaultLabel;\r\n if (usedLabels.has(label)) {\r\n deps.renderer.writeError(\r\n `Label \"${label}\" already used for ${providerId}. Use update (u) instead.`,\r\n );\r\n return;\r\n }\r\n\r\n const apiKey = await readKeyInput(deps, `API key for ${providerId}/${label}`);\r\n if (!apiKey) {\r\n deps.renderer.writeError('No key entered. Nothing saved.');\r\n return;\r\n }\r\n\r\n await mutateProviders(deps, (all) => {\r\n const existingProv = all[providerId] ?? { type: providerId, ...template };\r\n // Backfill type/family/baseUrl from template when absent.\r\n if (!existingProv.type) existingProv.type = providerId;\r\n if (!existingProv.family && template.family) existingProv.family = template.family;\r\n if (!existingProv.baseUrl && template.baseUrl) existingProv.baseUrl = template.baseUrl;\r\n if (!existingProv.envVars && template.envVars) existingProv.envVars = template.envVars;\r\n const list = normalizeKeys(existingProv);\r\n list.push({ label, apiKey, createdAt: nowIso() });\r\n writeKeysBack(existingProv, list);\r\n if (!existingProv.activeKey) existingProv.activeKey = label;\r\n all[providerId] = existingProv;\r\n });\r\n\r\n deps.renderer.write(\r\n ` ${color.green('✓')} Saved ${color.bold(providerId)}/${color.bold(label)}. ${color.dim('Use `wstack --provider ' + providerId + ' \"<task>\"` to launch.')}\\n`,\r\n );\r\n}\r\n\r\n/**\r\n * One-shot add: used by `wstack auth <provider>` to skip the menu and\r\n * append a single key. Honors --label / --family / --base-url / --env\r\n * flags. If the label collides, we suffix with a counter.\r\n */\r\nexport async function runAuthDirect(\r\n deps: AuthMenuDeps,\r\n opts: {\r\n providerId: string;\r\n label?: string;\r\n family?: WireFamily;\r\n baseUrl?: string;\r\n envVars?: string[];\r\n },\r\n): Promise<number> {\r\n const { providerId } = opts;\r\n const providers = await loadProviders(deps);\r\n const existing = providers[providerId];\r\n\r\n if (!existing && !opts.family) {\r\n // Try the catalog before giving up.\r\n let knownFamily: WireFamily | undefined;\r\n let knownBase: string | undefined;\r\n let knownEnv: string[] | undefined;\r\n try {\r\n const k = await deps.modelsRegistry.getProvider(providerId);\r\n if (k) {\r\n knownFamily = k.family;\r\n knownBase = k.apiBase;\r\n knownEnv = k.envVars;\r\n }\r\n } catch {\r\n // catalog unavailable\r\n }\r\n if (!knownFamily || knownFamily === 'unsupported') {\r\n deps.renderer.writeError(\r\n `Provider \"${providerId}\" not in catalog. Pass --family <anthropic|openai|openai-compatible|google>.`,\r\n );\r\n return 1;\r\n }\r\n opts.family = knownFamily;\r\n opts.baseUrl ??= knownBase;\r\n opts.envVars ??= knownEnv;\r\n }\r\n\r\n const usedLabels = new Set(existing ? normalizeKeys(existing).map((k) => k.label) : []);\r\n let label = opts.label ?? 'default';\r\n if (usedLabels.has(label)) {\r\n let n = 2;\r\n while (usedLabels.has(`${label}-${n}`)) n++;\r\n label = `${label}-${n}`;\r\n deps.renderer.writeInfo(`Label collided; saving as \"${label}\".`);\r\n }\r\n\r\n const apiKey = await readKeyInput(deps, `API key for ${providerId}/${label}`);\r\n if (!apiKey) return 1;\r\n\r\n await mutateProviders(deps, (all) => {\r\n const p = all[providerId] ?? { type: providerId };\r\n if (!p.type) p.type = providerId;\r\n if (!p.family && opts.family) p.family = opts.family;\r\n if (!p.baseUrl && opts.baseUrl) p.baseUrl = opts.baseUrl;\r\n if (!p.envVars && opts.envVars) p.envVars = opts.envVars;\r\n const list = normalizeKeys(p);\r\n list.push({ label, apiKey, createdAt: nowIso() });\r\n writeKeysBack(p, list);\r\n if (!p.activeKey) p.activeKey = label;\r\n all[providerId] = p;\r\n });\r\n\r\n deps.renderer.writeInfo(`Stored encrypted key for ${providerId} (label \"${label}\").`);\r\n deps.renderer.writeInfo(`Use: wstack --provider ${providerId} \"<task>\"`);\r\n return 0;\r\n}\r\n\r\nasync function readKeyInput(deps: AuthMenuDeps, intent: string): Promise<string | undefined> {\r\n const key = (\r\n await deps.reader.readSecret(\r\n ` ${color.amber('?')} ${intent} ${color.dim('(hidden, paste OK)')}: `,\r\n )\r\n ).trim();\r\n if (!key) {\r\n deps.renderer.writeError('No key entered.');\r\n return undefined;\r\n }\r\n return key;\r\n}\r\n\r\n/* ----------------------------- I/O helpers ----------------------------- */\r\n\r\n/**\r\n * Read the on-disk config file and return its `providers` map, fully\r\n * decrypted. We don't use `deps.config` here because it's a frozen\r\n * snapshot taken at startup — and once we start mutating keys we want to\r\n * see our own writes on the next iteration.\r\n */\r\nasync function loadProviders(deps: AuthMenuDeps): Promise<Record<string, ProviderConfig>> {\r\n let raw: string;\r\n try {\r\n raw = await fs.readFile(deps.globalConfigPath, 'utf8');\r\n } catch (err) {\r\n // ENOENT is normal on first run; anything else (EACCES, EIO) is worth surfacing.\r\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\r\n deps.renderer.writeWarning(\r\n `Could not read ${deps.globalConfigPath}: ${(err as Error).message}. Treating as empty.`,\r\n );\r\n }\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 (err) {\r\n // Corrupt config: surface loudly. We still return {} so the menu remains\r\n // usable, but mutateProviders() will refuse to overwrite (see below).\r\n deps.renderer.writeWarning(\r\n `Config at ${deps.globalConfigPath} is not valid JSON: ${(err as Error).message}`,\r\n );\r\n return {};\r\n }\r\n const decrypted = decryptConfigSecrets(parsed, deps.vault);\r\n return decrypted.providers ?? {};\r\n}\r\n\r\n/**\r\n * Load → mutate → encrypt → atomic-write. Operates on the FULL config\r\n * file so we don't truncate anything the user has set up elsewhere; only\r\n * the `providers` key gets replaced wholesale with the post-mutation\r\n * value (so deletions actually take effect).\r\n */\r\nasync function mutateProviders(\r\n deps: AuthMenuDeps,\r\n mutator: (providers: Record<string, ProviderConfig>) => void,\r\n): Promise<void> {\r\n let raw: string;\r\n let fileExists = true;\r\n try {\r\n raw = await fs.readFile(deps.globalConfigPath, 'utf8');\r\n } catch (err) {\r\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\r\n // Something other than missing file — refuse to overwrite blindly.\r\n throw new Error(\r\n `Refusing to mutate ${deps.globalConfigPath}: ${(err as Error).message}`,\r\n { cause: err },\r\n );\r\n }\r\n fileExists = false;\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 (err) {\r\n // Refuse to clobber a corrupt-but-existing config — the user may still\r\n // have salvageable keys in it. Bail with a clear error.\r\n if (fileExists) {\r\n throw new Error(\r\n `Refusing to overwrite corrupt config at ${deps.globalConfigPath} ` +\r\n `(${(err as Error).message}). Fix or move the file aside before retrying.`,\r\n { cause: err },\r\n );\r\n }\r\n parsed = {};\r\n }\r\n const decrypted = decryptConfigSecrets(parsed, deps.vault) as Record<string, unknown>;\r\n const providers = (decrypted.providers as Record<string, ProviderConfig>) ?? {};\r\n mutator(providers);\r\n decrypted.providers = providers;\r\n const encrypted = encryptConfigSecrets(decrypted, deps.vault);\r\n await atomicWrite(deps.globalConfigPath, JSON.stringify(encrypted, null, 2), { mode: 0o600 });\r\n}\r\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 { spawn } from 'node:child_process';\nimport { checkForUpdate } from '../../update-check.js';\nimport type { SubcommandHandler } from '../index.js';\n\n/** `wrongstack update` — CLI'yi npm üzerinden günceller */\nexport const updateCmd: SubcommandHandler = async (args, deps) => {\n const cwd = deps.cwd;\n\n // --check-only: sadece kontrol et, indirme\n const checkOnly = args.includes('--check-only') || args.includes('-c');\n\n const info = await checkForUpdate();\n\n if (checkOnly) {\n if (info.outdated) {\n deps.renderer.write(`Update available: v${info.current} → v${info.latest}\\n`);\n } else {\n deps.renderer.write(`You are on the latest version: v${info.current}\\n`);\n }\n return 0;\n }\n\n if (!info.outdated) {\n deps.renderer.write(`You are already on the latest version: v${info.current}\\n`);\n return 0;\n }\n\n deps.renderer.write(`Updating wrongstack from v${info.current} to v${info.latest}...\\n`);\n\n // npm install -g wrongstack@latest\n try {\n const result = await new Promise<{ code: number }>((resolve) => {\n const child = spawn('npm', ['install', '-g', 'wrongstack@latest'], {\n cwd,\n stdio: 'pipe',\n });\n let stderr = '';\n child.stderr?.on('data', (d) => { stderr += d; });\n child.on('close', (code) => resolve({ code: code ?? 0 }));\n });\n\n if (result.code === 0) {\n deps.renderer.write(`\\nUpdated to v${info.latest}. Restart wrongstack to use the new version.\\n`);\n } else {\n deps.renderer.write(`\\nUpdate failed with exit code ${result.code}.\\n`);\n }\n return result.code;\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes('ENOENT')) {\n deps.renderer.write(`\\nUpdate failed: npm not found in PATH.\\n`);\n return 1;\n }\n deps.renderer.write(`\\nUpdate failed: ${msg}\\n`);\n return 1;\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';\r\nimport * as path from 'node:path';\r\nimport { type Config, atomicWrite, color } from '@wrongstack/core';\r\nimport {\r\n DefaultSecretVault,\r\n encryptConfigSecrets,\r\n} from '@wrongstack/core/security';\r\nimport { detectProjectFacts, renderAgentsTemplate } from '../../slash-commands/helpers.js';\r\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\r\n\r\nexport const initCmd: SubcommandHandler = async (_args, deps) => {\r\n deps.renderer.write(color.bold('WrongStack init\\n'));\r\n deps.renderer.writeInfo('Loading provider catalog from models.dev (cached locally)…');\r\n let providers;\r\n try {\r\n providers = await deps.modelsRegistry.listProviders();\r\n } catch (err) {\r\n deps.renderer.writeError(\r\n `Failed to load provider catalog: ${err instanceof Error ? err.message : err}`,\r\n );\r\n return 1;\r\n }\r\n const detected = providers\r\n .filter((p: { family: string; envVars: string[] }) => p.family !== 'unsupported')\r\n .filter((p: { envVars: string[] }) => p.envVars.some((v: string) => process.env[v]));\r\n const ranked =\r\n detected.length > 0\r\n ? detected\r\n : providers.filter((p: { id: string }) => ['anthropic', 'openai', 'google'].includes(p.id));\r\n if (detected.length > 0)\r\n deps.renderer.write(\r\n `Detected API keys for: ${detected.map((p: { name: string }) => p.name).join(', ')}\\n`,\r\n );\r\n const defaultId = ranked[0]?.id ?? 'anthropic';\r\n const providerAnswer = (await deps.reader.readLine(`Provider [${defaultId}]: `)).trim();\r\n if (providerAnswer === 'q') {\r\n deps.renderer.write(color.dim('Cancelled.\\n'));\r\n return 0;\r\n }\r\n const providerId = providerAnswer || defaultId;\r\n const provider = await deps.modelsRegistry.getProvider(providerId);\r\n if (!provider) {\r\n deps.renderer.writeError(`Provider \"${providerId}\" not found in models.dev catalog.`);\r\n return 1;\r\n }\r\n if (provider.family === 'unsupported') {\r\n deps.renderer.writeError(\r\n `Provider \"${providerId}\" uses ${provider.npm} which has no built-in transport. Install a plugin to enable it.`,\r\n );\r\n return 1;\r\n }\r\n const suggestedModel = (await deps.modelsRegistry.suggestModel(providerId)) ?? '';\r\n const modelHint = suggestedModel ? ` [${suggestedModel}]` : '';\r\n const modelAnswer = (await deps.reader.readLine(`Model${modelHint}: `)).trim();\r\n if (modelAnswer === 'q') {\r\n deps.renderer.write(color.dim('Cancelled.\\n'));\r\n return 0;\r\n }\r\n const modelId = modelAnswer || suggestedModel;\r\n if (!modelId) {\r\n deps.renderer.writeError('No model selected. Aborting.');\r\n return 1;\r\n }\r\n const envHit = provider.envVars.map((v: string) => process.env[v]).find(Boolean);\r\n let apiKey = '';\r\n if (!envHit) {\r\n apiKey = (\r\n await deps.reader.readLine(\r\n `API key (stored in ${deps.paths.globalConfig}; empty = expect ${provider.envVars[0] ?? 'env var'}): `,\r\n )\r\n ).trim();\r\n } else {\r\n deps.renderer.writeInfo(`Found API key in env (${provider.envVars.join(' / ')}).`);\r\n }\r\n await fs.mkdir(deps.paths.globalRoot, { recursive: true });\r\n const config: Partial<Config> = { version: 1, provider: providerId, model: modelId };\r\n if (apiKey) config.apiKey = apiKey;\r\n // Encrypt secret fields before writing to disk.\r\n const keyFile = path.join(path.dirname(deps.paths.globalConfig), '.key');\r\n const vault = new DefaultSecretVault({ keyFile });\r\n const encrypted = encryptConfigSecrets(config, vault);\r\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(encrypted, null, 2));\r\n await fs.mkdir(path.join(deps.projectRoot, '.wrongstack'), { recursive: true });\r\n const agentsFile = path.join(deps.projectRoot, '.wrongstack', 'AGENTS.md');\r\n const projectFacts = await detectProjectFacts(deps.projectRoot);\r\n await atomicWrite(agentsFile, renderAgentsTemplate(projectFacts));\r\n deps.renderer.writeInfo(`Wrote ${deps.paths.globalConfig}`);\r\n deps.renderer.writeInfo(`Project state lives in ${deps.paths.projectDir}`);\r\n deps.renderer.writeInfo('Try: wstack \"<task>\" or wstack');\r\n return 0;\r\n};\r\n","import * as fs from 'node:fs/promises';\nimport { atomicWrite } from '@wrongstack/core';\nimport { allServers } from '@wrongstack/core/infrastructure';\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. Use /mcp restart instead.');\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 * as fsp from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport { loadDirectorState } from '@wrongstack/core';\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\n\n/**\n * `wrongstack sessions fleet [runId]`\n *\n * Lists fleet run artifacts under `projectSessions/<runId>/`.\n * When runId is omitted, lists all fleet runs discovered under projectSessions.\n *\n * Artifacts shown:\n * - fleet.json (manifest)\n * - checkpoint.json (state snapshot, if present)\n * - shared/ (scratchpad directory)\n * - subagents/ (per-subagent JSONL transcripts)\n */\nexport const sessionsFleetCmd: SubcommandHandler = async (args, deps) => {\n const runId = args.find((a) => !a.startsWith('-'));\n\n if (runId) {\n return showFleetRun(runId, deps);\n }\n return listFleetRuns(deps);\n};\n\nasync function listFleetRuns(deps: SubcommandDeps): Promise<number> {\n let entries: string[] = [];\n try {\n entries = await fsp.readdir(deps.paths.projectSessions);\n } catch {\n deps.renderer.writeError(`Cannot read projectSessions: ${deps.paths.projectSessions}\\n`);\n return 1;\n }\n\n const runs: Array<{ id: string; manifest: boolean; checkpoint: boolean; subagents: number }> = [];\n\n for (const id of entries) {\n const runDir = path.join(deps.paths.projectSessions, id);\n let stat;\n try {\n stat = await fsp.stat(runDir);\n } catch {\n continue; // skip inaccessible entries\n }\n if (!stat.isDirectory()) continue;\n\n let manifest = false;\n let checkpoint = false;\n let subagentCount = 0;\n let subagentsDir: string;\n\n try {\n await fsp.access(path.join(runDir, 'fleet.json'));\n manifest = true;\n } catch {\n // no manifest\n }\n\n try {\n await fsp.access(path.join(runDir, 'checkpoint.json'));\n checkpoint = true;\n } catch {\n // no checkpoint\n }\n\n try {\n subagentsDir = path.join(runDir, 'subagents');\n const files = await fsp.readdir(subagentsDir);\n subagentCount = files.filter((f) => f.endsWith('.jsonl')).length;\n } catch {\n // no subagents dir\n }\n\n runs.push({ id, manifest, checkpoint, subagents: subagentCount });\n }\n\n if (runs.length === 0) {\n deps.renderer.write('No fleet runs found.\\n');\n return 0;\n }\n\n deps.renderer.write(color.bold('\\nFleet Runs\\n') + '\\n');\n for (const r of runs.sort((a, b) => b.id.localeCompare(a.id))) {\n const checkpointFlag = r.checkpoint ? color.green('✓') : color.dim('○');\n const manifestFlag = r.manifest ? color.green('✓') : color.dim('○');\n const subagentInfo = r.subagents > 0 ? color.dim(` ${r.subagents} subagent jsonl`) : '';\n deps.renderer.write(\n ` ${color.bold(r.id)} ${checkpointFlag} checkpoint ${manifestFlag} manifest${subagentInfo}\\n`,\n );\n }\n deps.renderer.write(\n `\\n ${color.dim('Run `wrongstack sessions fleet <runId>` for details.')}\\n`,\n );\n return 0;\n}\n\nasync function showFleetRun(runId: string, deps: SubcommandDeps): Promise<number> {\n const runDir = path.join(deps.paths.projectSessions, runId);\n\n let stat;\n try {\n stat = await fsp.stat(runDir);\n } catch {\n deps.renderer.writeError(`Fleet run not found: ${runId}\\n`);\n return 1;\n }\n\n if (!stat.isDirectory()) {\n deps.renderer.writeError(`Not a directory: ${runId}\\n`);\n return 1;\n }\n\n deps.renderer.write(color.bold(`\\nFleet Run: ${runId}\\n`) + '\\n');\n\n // Manifest\n const manifestPath = path.join(runDir, 'fleet.json');\n let manifestData: string | null = null;\n try {\n manifestData = await fsp.readFile(manifestPath, 'utf8');\n const manifest = JSON.parse(manifestData);\n const subagents = manifest.subagents ?? [];\n const tasks = manifest.tasks ?? [];\n const completed = tasks.filter((t: { status?: string }) => t.status === 'completed' || t.status === 'failed' || t.status === 'timeout' || t.status === 'stopped');\n deps.renderer.write(\n ` ${color.green('✓')} fleet.json — ${subagents.length} subagent(s), ${completed.length}/${tasks.length} tasks done\\n`,\n );\n } catch {\n deps.renderer.write(` ${color.dim('○')} fleet.json — not found\\n`);\n }\n\n // Checkpoint\n const checkpointPath = path.join(runDir, 'checkpoint.json');\n let checkpointData: string | null = null;\n try {\n checkpointData = await fsp.readFile(checkpointPath, 'utf8');\n const snap = JSON.parse(checkpointData);\n const lockPath = `${checkpointPath}.lock`;\n let lockStatus = color.dim('○ no lock');\n try {\n const lockRaw = await fsp.readFile(lockPath, 'utf8');\n const lock = JSON.parse(lockRaw);\n lockStatus = `${color.yellow('▸')} lock held by pid ${lock.pid} on ${lock.hostname} (started ${lock.startedAt})`;\n } catch {\n lockStatus = color.green('✓ no lock (safe to resume)');\n }\n deps.renderer.write(\n ` ${color.green('✓')} checkpoint.json — updated ${snap.updatedAt}, ${snap.spawnCount} spawns, ${snap.tasks?.length ?? 0} tasks tracked\\n ${lockStatus}\\n`,\n );\n } catch {\n deps.renderer.write(` ${color.dim('○')} checkpoint.json — not found\\n`);\n }\n\n // State snapshot\n if (checkpointData) {\n try {\n const snap = JSON.parse(checkpointData);\n if (snap.subagents?.length) {\n deps.renderer.write('\\n Subagents:\\n');\n for (const s of snap.subagents) {\n deps.renderer.write(\n ` ${color.cyan(s.id)} ${s.name ? `${s.name} ` : ''}${s.provider ? `(${s.provider}/${s.model})` : ''} spawned ${s.spawnedAt}\\n`,\n );\n }\n }\n if (snap.tasks?.length) {\n deps.renderer.write('\\n Tasks:\\n');\n for (const t of snap.tasks) {\n deps.renderer.write(\n ` ${color.dim(t.taskId)} ${t.status} ${t.description ? t.description.slice(0, 50) : '(no description)'}\\n`,\n );\n }\n }\n } catch {\n // skip parse errors\n }\n }\n\n // Subagents directory\n const subagentsDir = path.join(runDir, 'subagents');\n let subagentFiles: string[] = [];\n try {\n subagentFiles = await fsp.readdir(subagentsDir);\n subagentFiles = subagentFiles.filter((f) => f.endsWith('.jsonl'));\n } catch {\n // no subagents dir\n }\n\n if (subagentFiles.length > 0) {\n deps.renderer.write(`\\n Subagent transcripts (${subagentFiles.length}):\\n`);\n for (const f of subagentFiles.sort()) {\n const filePath = path.join(subagentsDir, f);\n let size: number;\n try {\n const s = await fsp.stat(filePath);\n size = s.size;\n } catch {\n size = 0;\n }\n const sizeStr = size > 1024 * 1024 ? `${(size / 1024 / 1024).toFixed(1)}MB` : `${(size / 1024).toFixed(0)}KB`;\n deps.renderer.write(` ${color.dim(f)} ${color.dim(sizeStr)}\\n`);\n }\n } else {\n deps.renderer.write(`\\n ${color.dim('○')} No subagent transcripts\\n`);\n }\n\n // Shared directory\n const sharedDir = path.join(runDir, 'shared');\n try {\n const files = await fsp.readdir(sharedDir);\n deps.renderer.write(`\\n Shared scratchpad: ${files.length} file(s)\\n`);\n } catch {\n deps.renderer.write(`\\n ${color.dim('○')} No shared scratchpad\\n`);\n }\n\n deps.renderer.write(\n `\\n ${color.dim('Resume: wrongstack --resume ' + runId)}\\n`,\n );\n return 0;\n}","import { color } from '@wrongstack/core';\r\nimport type { SubcommandDeps, SubcommandHandler } from '../index.js';\r\nimport { redactKeys } from './helpers.js';\r\nimport { sessionsFleetCmd } from './sessions-fleet.js';\r\nimport {\r\n listHistory,\r\n getHistoryEntry,\r\n restoreFromHistory,\r\n restoreLast,\r\n} from '../../config-history.js';\r\n\r\nexport const sessionsCmd: SubcommandHandler = async (args, deps) => {\r\n const sub = args[0];\r\n // `wrongstack sessions fleet [runId]` — fleet run inspection\r\n if (sub === 'fleet') {\r\n return sessionsFleetCmd(args.slice(1), deps);\r\n }\r\n if (!deps.sessionStore) {\r\n deps.renderer.writeError('No session store available.');\r\n return 1;\r\n }\r\n const list = await deps.sessionStore.list(20);\r\n if (list.length === 0) {\r\n deps.renderer.write('No sessions found.\\n');\r\n return 0;\r\n }\r\n for (const s of list)\r\n deps.renderer.write(\r\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}\\n`,\r\n );\r\n return 0;\r\n};\r\n\r\nexport const configCmd: SubcommandHandler = async (args, deps) => {\r\n const sub = args[0];\r\n if (!sub || sub === 'show') {\r\n deps.renderer.write(JSON.stringify(redactKeys(deps.config), null, 2) + '\\n');\r\n return 0;\r\n }\r\n if (sub === 'edit') {\r\n const editor = process.env['EDITOR'] ?? 'vi';\r\n deps.renderer.write(`Run: ${editor} ${deps.paths.globalConfig}\\n`);\r\n return 0;\r\n }\r\n if (sub === 'history') {\r\n return runHistory(args.slice(1), deps);\r\n }\r\n if (sub === 'restore') {\r\n return runRestore(args.slice(1), deps);\r\n }\r\n deps.renderer.writeError(`Unknown config subcommand: ${sub}\\n`);\r\n return 1;\r\n};\r\n\r\nfunction extractArg(args: string[], key: string): string | null {\r\n const idx = args.indexOf(key);\r\n if (idx !== -1 && args[idx + 1] !== undefined) return args[idx + 1]!;\r\n const eq = key.startsWith('--') ? args.find((a) => a.startsWith(`${key}=`)) : null;\r\n if (eq) return eq.slice(eq.indexOf('=') + 1);\r\n return null;\r\n}\r\n\r\nasync function runHistory(args: string[], deps: SubcommandDeps): Promise<number> {\r\n const idFlag = extractArg(args, '--id');\r\n if (idFlag) {\r\n const entry = await getHistoryEntry(idFlag);\r\n if (!entry) {\r\n deps.renderer.writeError(`History entry '${idFlag}' not found.\\n`);\r\n return 1;\r\n }\r\n deps.renderer.write(\r\n [\r\n `ID: ${entry.id}`,\r\n `Time: ${new Date(entry.timestamp).toLocaleString()}`,\r\n `Change: ${entry.description}`,\r\n `Diff: ${entry.diffSummary}`,\r\n '',\r\n 'Snapshot (secrets masked):',\r\n JSON.stringify(entry.snapshotMasked, null, 2),\r\n ].join('\\n') + '\\n',\r\n );\r\n return 0;\r\n }\r\n\r\n const entries = await listHistory();\r\n if (entries.length === 0) {\r\n deps.renderer.write('No config history yet.\\n');\r\n return 0;\r\n }\r\n\r\n deps.renderer.write(\r\n [\r\n color.bold('Config History'),\r\n '',\r\n ...entries.map((e, i) => {\r\n const ts = new Date(e.timestamp).toLocaleString();\r\n const desc = e.description.length > 60 ? e.description.slice(0, 60) + '…' : e.description;\r\n return ` [${i + 1}] ${e.id} ${color.dim(ts)}\\n ${desc}`;\r\n }),\r\n '',\r\n ' Run `wrongstack config history --id <id>` for details.',\r\n ' Run `wrongstack config restore <id>` to restore.',\r\n ].join('\\n') + '\\n',\r\n );\r\n return 0;\r\n}\r\n\r\nasync function runRestore(args: string[], deps: SubcommandDeps): Promise<number> {\r\n const latest = args.includes('--latest') || args.includes('-l');\r\n const id = extractArg(args, '--id') ?? (args[0] && !args[0]!.startsWith('-') ? args[0] : null);\r\n\r\n if (latest) {\r\n const result = await restoreLast();\r\n if (!result.ok) {\r\n deps.renderer.writeError(`Restore failed: ${result.error}\\n`);\r\n return 1;\r\n }\r\n deps.renderer.write('Restored from config.json.last.\\n');\r\n return 0;\r\n }\r\n\r\n if (!id) {\r\n deps.renderer.write('Usage: wrongstack config restore <id> | --latest\\n');\r\n return 1;\r\n }\r\n\r\n const result = await restoreFromHistory(id);\r\n if (!result.ok) {\r\n deps.renderer.writeError(`Restore failed: ${result.error}\\n`);\r\n return 1;\r\n }\r\n\r\n deps.renderer.write(`Restored to history entry '${id}'. Backup created.\\n`);\r\n return 0;\r\n}\r\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\n/**\n * Find the session-id positional, skipping over flag values (`--last 2`\n * must NOT pick up \"2\" as the session id). Mirrors the flag-consumption\n * shape of parseRewindFlags so the two stay in sync.\n */\nfunction findSessionId(args: string[]): string | undefined {\n for (let i = 0; i < args.length; i++) {\n const a = args[i]!;\n if (a === '--last' || a === '--to') {\n i++; // skip the next token (the flag's value)\n continue;\n }\n if (!a.startsWith('--')) return a;\n }\n return undefined;\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 — explicit positional wins; fall back to latest session.\n let sessionId = findSessionId(args);\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 --eternal \"<mission>\" Launch eternal-autonomy loop against a goal — Ctrl+C to stop',\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 { updateCmd } from './handlers/update.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 update: updateCmd,\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';\r\nimport * as path from 'node:path';\r\n/**\r\n * Boot phase — everything before the DI container wiring.\r\n * Extracted from index.ts so main() focuses on wire → execute.\r\n */\r\nimport {\r\n type Config,\r\n DefaultLogger,\r\n DefaultModelsRegistry,\r\n DefaultSessionStore,\r\n DefaultSkillLoader,\r\n type ModelsRegistry,\r\n type SecretVault,\r\n ToolRegistry,\r\n type WstackPaths,\r\n TOKENS,\r\n} from '@wrongstack/core';\r\nimport { builtinToolsPack } from '@wrongstack/tools';\r\nimport { parseArgs } from './arg-parser.js';\r\nimport { bootConfig } from './boot-config.js';\r\nimport { ReadlineInputReader } from './input-reader.js';\r\nimport { runPicker, saveToGlobalConfig } from './picker.js';\r\nimport { printLaunchHints } from './launch-hints.js';\r\nimport { runLaunchPrompts, runProjectCheck } from './pre-launch.js';\r\nimport { TerminalRenderer } from './renderer.js';\r\nimport { subcommands } from './subcommands/index.js';\r\nimport { patchConfig } from './utils.js';\r\nimport { createDefaultContainer } from '@wrongstack/runtime';\r\nimport { checkForUpdate, type UpdateInfo } from './update-check.js';\r\n\r\nexport interface BootContext {\r\n config: Config;\r\n vault: SecretVault;\r\n wpaths: WstackPaths;\r\n cwd: string;\r\n projectRoot: string;\r\n userHome: string;\r\n flags: Record<string, string | boolean>;\r\n positional: string[];\r\n modelsRegistry: ModelsRegistry;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n logger: DefaultLogger;\r\n /** Set by background update check — if outdated, index.ts shows notification */\r\n updateInfo?: UpdateInfo;\r\n}\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\n/**\r\n * Boot the CLI: parse args, load config, handle subcommand dispatch\r\n * (early exit), run interactive prompts (project check, provider picker,\r\n * mode/yolo). Returns a BootContext for the wiring phase, or an exit\r\n * code when the run should stop here.\r\n */\r\nexport async function boot(argv: string[]): Promise<BootContext | number> {\r\n const { flags, positional } = parseArgs(argv);\r\n\r\n // `wstack resume <id>` is sugar for `wstack --resume <id>`.\r\n if (positional[0] === 'resume' && positional[1] && !subcommands['__noop_resume_marker']) {\r\n flags['resume'] = positional[1];\r\n positional.splice(0, 2);\r\n }\r\n\r\n let bootResult;\r\n try {\r\n bootResult = await bootConfig(flags);\r\n } catch (err) {\r\n process.stderr.write(`Config error: ${err instanceof Error ? err.message : String(err)}\\n`);\r\n return 2;\r\n }\r\n const { paths, config: _config, vault } = bootResult;\r\n let config = _config;\r\n const { cwd, projectRoot, userHome, wpaths, pathResolver } = paths;\r\n void pathResolver; // used by callers via container binding\r\n\r\n const logger = new DefaultLogger({ level: config.log.level, file: wpaths.logFile });\r\n const renderer = new TerminalRenderer();\r\n const reader = new ReadlineInputReader({ historyFile: wpaths.historyFile });\r\n const modelsRegistry = new DefaultModelsRegistry({\r\n cacheFile: wpaths.modelsCache,\r\n ttlSeconds: 24 * 3600,\r\n });\r\n\r\n // Background update check — fires async, non-blocking.\r\n // If --no-check flag is set or WRONGSTACK_NO_CHECK=1, skip it.\r\n let updateInfo: UpdateInfo | undefined;\r\n if (!flags['no-check'] && !process.env['WRONGSTACK_NO_CHECK']) {\r\n // Fire-and-forget: boot doesn't wait, result attached to ctx for index.ts\r\n checkForUpdate()\r\n .then((info) => {\r\n updateInfo = info;\r\n })\r\n .catch(() => {\r\n // silent — never blocks boot\r\n });\r\n }\r\n\r\n // Quick path: subcommand dispatch\r\n const first = positional[0];\r\n if (first && subcommands[first]) {\r\n // Create container to get the SAME skillLoader instance that the main\r\n // interactive CLI uses. This ensures cache invalidation after\r\n // /skill-install propagates correctly to /skill and other commands.\r\n const container = createDefaultContainer({\r\n config,\r\n wpaths,\r\n logger,\r\n modelsRegistry,\r\n bundledSkillsDir: config.features.skills ? resolveBundledSkillsDir() : undefined,\r\n });\r\n const sessionStore = container.resolve(TOKENS.SessionStore);\r\n const skillLoader = container.resolve(TOKENS.SkillLoader);\r\n const toolRegistryForSubcmd = new ToolRegistry();\r\n toolRegistryForSubcmd.registerAllOrThrow(\r\n [...(builtinToolsPack.tools ?? [])],\r\n builtinToolsPack.name,\r\n );\r\n const code = await subcommands[first]!(positional.slice(1), {\r\n config,\r\n renderer,\r\n reader,\r\n sessionStore,\r\n skillLoader,\r\n toolRegistry: toolRegistryForSubcmd,\r\n modelsRegistry,\r\n paths: wpaths,\r\n vault,\r\n cwd,\r\n projectRoot,\r\n userHome,\r\n });\r\n await reader.close();\r\n return code;\r\n }\r\n\r\n const isSingleShot = positional.length > 0 || typeof flags['prompt'] === 'string';\r\n const isInteractiveTTY = !!process.stdin.isTTY && !isSingleShot;\r\n\r\n if (isInteractiveTTY) {\r\n const cont = await runProjectCheck({ projectRoot, renderer, reader });\r\n if (!cont) {\r\n await reader.close();\r\n return 0;\r\n }\r\n }\r\n\r\n // Provider + model selection\r\n const providerFlag = typeof flags['provider'] === 'string' ? flags['provider'] : undefined;\r\n const modelFlag = typeof flags['model'] === 'string' ? flags['model'] : undefined;\r\n if (!(!!providerFlag && !!modelFlag)) {\r\n if (process.stdin.isTTY) {\r\n const picked = await runPicker({\r\n modelsRegistry,\r\n renderer,\r\n reader,\r\n config,\r\n defaultProvider: providerFlag ?? config.provider,\r\n defaultModel: modelFlag ?? config.model,\r\n });\r\n if (!picked) {\r\n if (!config.provider || !config.model) {\r\n await reader.close();\r\n return 2;\r\n }\r\n } else {\r\n const prevProvider = config.provider;\r\n const prevModel = config.model;\r\n config = patchConfig(config, { provider: picked.provider, model: picked.model });\r\n if (picked.provider !== prevProvider || picked.model !== prevModel) {\r\n const saved = await saveToGlobalConfig(\r\n wpaths.globalConfig,\r\n picked.provider,\r\n picked.model,\r\n );\r\n if (saved) renderer.writeInfo(`Saved ${picked.provider}/${picked.model} as default.\\n`);\r\n }\r\n }\r\n } else if (!config.provider || !config.model) {\r\n process.stderr.write(\r\n 'No provider or model configured. Run `wrongstack init` first, or pass --provider <id> --model <id>.\\n',\r\n );\r\n await reader.close();\r\n return 2;\r\n }\r\n }\r\n\r\n // Mode + YOLO prompts\r\n if (isInteractiveTTY) {\r\n let modePinned: 'tui' | 'repl' | undefined;\r\n if (flags['no-tui']) modePinned = 'repl';\r\n else if (flags['tui']) modePinned = 'tui';\r\n const yoloPinned: boolean | undefined = flags['yolo'] === true ? true : undefined;\r\n const choices = await runLaunchPrompts({ renderer, reader, modePinned, yoloPinned });\r\n if (choices.mode === 'tui') {\r\n flags['tui'] = true;\r\n flags['no-tui'] = false;\r\n } else {\r\n flags['tui'] = false;\r\n flags['no-tui'] = true;\r\n }\r\n if (choices.yolo !== config.yolo) config = patchConfig(config, { yolo: choices.yolo });\r\n\r\n printLaunchHints(renderer, flags);\r\n }\r\n\r\n return {\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 updateInfo,\r\n };\r\n}\r\n","import type { Agent, AttachmentStore, GoalFile, SlashCommandRegistry, TokenCounter } from '@wrongstack/core';\r\nimport { InputBuilder, color, goalFilePath, loadGoal } from '@wrongstack/core';\r\nimport {\r\n readClipboardImage,\r\n routeImagesForModel,\r\n type VisionAdapters,\r\n} from '@wrongstack/runtime';\r\nimport type { ReadlineInputReader } from './input-reader.js';\r\nimport type { TerminalRenderer } from './renderer.js';\r\nimport { getActiveSDDContext, trySaveSpecFromAIOutput, trySaveTasksFromAIOutput, getTaskListText, getTaskProgress, autoDetectTaskCompletion, getActiveSDDPhase, trySaveImplementationPlan } from './slash-commands/sdd.js';\r\nimport { theme } from './theme.js';\r\nimport { fmtTok } from './utils.js';\r\nimport { CLI_VERSION } from './version.js';\r\n\r\nexport interface ReplOptions {\r\n agent: Agent;\r\n renderer: TerminalRenderer;\r\n reader: ReadlineInputReader;\r\n slashRegistry: SlashCommandRegistry;\r\n attachments: AttachmentStore;\r\n banner?: boolean;\r\n tokenCounter?: TokenCounter;\r\n visionAdapters?: VisionAdapters;\r\n /** Autonomy mode state getter. */\r\n getAutonomy?: () => import('./slash-commands/autonomy.js').AutonomyMode;\r\n /**\r\n * Access the eternal-autonomy engine. When autonomy mode is 'eternal'\r\n * the REPL skips reading user input and instead drives engine\r\n * iterations from this loop — so the engine and the REPL never compete\r\n * for the shared Context. Returns null until /autonomy eternal primes it.\r\n */\r\n getEternalEngine?: () => import('@wrongstack/core').EternalAutonomyEngine | null;\r\n /** Model-specific max context window (tokens). Used for the context bar in turn summaries. */\r\n effectiveMaxContext?: number;\r\n /** Project / folder name shown in the banner. Usually `path.basename(projectRoot)`. */\r\n projectName?: string;\r\n /** Absolute project root — used to locate .wrongstack/goal.json for the goal banner. */\r\n projectRoot?: string;\r\n /** Resolve current model vision support. Falls back to provider capability when omitted. */\r\n supportsVision?: () => boolean | Promise<boolean>;\r\n /** Skill loader for the skill generator wizard. */\r\n skillLoader?: import('@wrongstack/core').SkillLoader;\r\n}\r\n\r\nexport async function runRepl(opts: ReplOptions): Promise<number> {\r\n if (opts.banner !== false) printBanner(opts.renderer, opts.projectName);\r\n // Surface active goal + crash-recovery hint right under the banner so the\r\n // user doesn't have to run /goal status to remember what's in flight.\r\n await renderGoalBanner(opts);\r\n\r\n // Per-iteration abort controller — assigned each loop so a Ctrl+C that\r\n // cancels turn N doesn't leak into turn N+1. `activeCtrl` is updated\r\n // before each agent.run so the SIGINT handler can target it.\r\n let activeCtrl: AbortController | undefined;\r\n let interrupts = 0;\r\n const onSigint = () => {\r\n interrupts++;\r\n if (interrupts >= 2) {\r\n opts.renderer.writeWarning('Exiting.');\r\n process.exit(130);\r\n }\r\n // In eternal mode, the first Ctrl+C should stop the engine — aborting\r\n // the in-flight agent.run and flipping autonomy back to 'off' so the\r\n // outer for-loop returns to reading user input on the next tick.\r\n const engine = opts.getEternalEngine?.();\r\n if (engine && opts.getAutonomy?.() === 'eternal') {\r\n engine.stop();\r\n opts.renderer.writeWarning('Eternal mode stop requested. Press Ctrl+C again to exit.');\r\n return;\r\n }\r\n if (activeCtrl) {\r\n activeCtrl.abort();\r\n opts.renderer.writeWarning('Iteration cancelled. Press Ctrl+C again to exit.');\r\n } else {\r\n opts.renderer.writeWarning('Press Ctrl+C again to exit.');\r\n }\r\n };\r\n process.on('SIGINT', onSigint);\r\n\r\n const builder = new InputBuilder({ store: opts.attachments });\r\n\r\n // Wrap the entire loop so SIGINT and reader teardown run on every exit\r\n // path — exceptions, EOF, breakouts. Previously a throw between `on`\r\n // and the final `off` left the listener installed across REPL restarts.\r\n try {\r\n for (;;) {\r\n // ── Eternal autonomy: drive the engine instead of reading input. ──\r\n // While autonomy mode is 'eternal' we own the REPL turn — the engine\r\n // generates its own directive and runs `agent.run` for us. Stop is\r\n // signaled by the engine flipping to 'stopped' (via /autonomy stop or\r\n // SIGINT). On exit from this branch the for-loop continues normally\r\n // and the next iteration reads user input again.\r\n if (opts.getAutonomy?.() === 'eternal') {\r\n const engine = opts.getEternalEngine?.();\r\n if (!engine) {\r\n opts.renderer.writeWarning('Eternal mode set but no engine wired — falling back to off.');\r\n // Best-effort: nothing more to do here; the engine controller\r\n // was supposed to be primed by /autonomy eternal.\r\n } else {\r\n // Snapshot iteration counter before/after so the log line tells\r\n // the user where they are in the goal lifetime — useful when\r\n // the loop runs for hours and the journal scrolls off screen.\r\n const beforeGoal = await loadGoalSafe(opts);\r\n const beforeIter = beforeGoal?.iterations ?? 0;\r\n opts.renderer.write(\r\n color.dim(`\\n ↳ [eternal #${beforeIter + 1}] running iteration…\\n`),\r\n );\r\n interrupts = 0;\r\n try {\r\n const ok = await engine.runOneIteration();\r\n const afterGoal = await loadGoalSafe(opts);\r\n const last = afterGoal?.journal[afterGoal.journal.length - 1];\r\n if (!ok && !last) {\r\n opts.renderer.write(color.dim(' ↳ [eternal] iteration produced no progress.\\n'));\r\n } else if (last) {\r\n const mark = last.status === 'success' ? color.green('✓') : last.status === 'failure' ? color.red('✗') : color.amber('⊘');\r\n const tail = last.note ? color.dim(` — ${last.note.slice(0, 80)}`) : '';\r\n opts.renderer.write(\r\n ` ${mark} ${color.dim(`#${last.iteration}`)} ${color.dim(`[${last.source}]`)} ${last.task}${tail}\\n`,\r\n );\r\n }\r\n } catch (err) {\r\n opts.renderer.writeError(\r\n `[eternal] ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n // Yield to the event loop so a SIGINT delivered during this\r\n // iteration can be processed before the next one fires.\r\n await new Promise((resolve) => setTimeout(resolve, 250));\r\n continue;\r\n }\r\n }\r\n\r\n let raw: string;\r\n try {\r\n raw = await readPossiblyMultiline(opts);\r\n } catch {\r\n break; // EOF (Ctrl+D)\r\n }\r\n const trimmed = raw.trim();\r\n if (!trimmed) {\r\n interrupts = 0;\r\n continue;\r\n }\r\n interrupts = 0;\r\n\r\n // Plain `q` quits immediately without needing a slash.\r\n if (trimmed === 'q') {\r\n opts.renderer.write(color.dim(' Goodbye!\\n'));\r\n break;\r\n }\r\n\r\n if (trimmed === '/image' || trimmed === '/paste-image' || raw === '\\x1bv') {\r\n await pasteClipboardImage(builder, opts);\r\n continue;\r\n }\r\n\r\n if (trimmed.startsWith('/')) {\r\n try {\r\n const res = await opts.slashRegistry.dispatch(trimmed, opts.agent.ctx);\r\n if (res?.message) opts.renderer.write(`${res.message}\\n`);\r\n if (res?.exit) break;\r\n\r\n // ── runText: Auto-trigger AI after slash command ─────────────────\r\n // When a slash command returns runText (e.g. /sdd new, /sdd approve),\r\n // automatically send it to the AI agent so the conversation continues\r\n // without the user having to type anything extra.\r\n if (res?.runText) {\r\n const runBlocks = [{ type: 'text' as const, text: res.runText }];\r\n const runCtrl = new AbortController();\r\n activeCtrl = runCtrl;\r\n try {\r\n const runResult = await opts.agent.run(runBlocks, { signal: runCtrl.signal });\r\n if (runResult.status === 'done' && runResult.finalText) {\r\n // SDD auto-detection: spec, implementation plan, tasks\r\n const specSaved = await trySaveSpecFromAIOutput(runResult.finalText);\r\n if (specSaved) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' ✓ Spec detected and saved! Use /sdd approve to continue.')}\\n`,\r\n );\r\n }\r\n const planSaved = trySaveImplementationPlan(runResult.finalText);\r\n if (planSaved) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' ✓ Implementation plan saved!')}\\n`,\r\n );\r\n }\r\n const tasksSaved = await trySaveTasksFromAIOutput(runResult.finalText);\r\n if (tasksSaved) {\r\n const progress = getTaskProgress();\r\n const count = progress?.total ?? 0;\r\n opts.renderer.write(\r\n `\\n${color.cyan(` ✓ ${count} tasks detected and saved! Use /sdd approve to execute.`)}\\n`,\r\n );\r\n }\r\n // Auto-detect task completion during execution phase\r\n const sddPhase = getActiveSDDPhase();\r\n if (sddPhase === 'executing') {\r\n const autoCompleted = autoDetectTaskCompletion(runResult.finalText);\r\n if (autoCompleted > 0) {\r\n const progress = getTaskProgress();\r\n if (progress) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(` ✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`)}\\n`,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n } catch (runErr) {\r\n // Non-fatal — user can continue manually\r\n opts.renderer.writeWarning('AI auto-trigger failed. You can continue manually.');\r\n }\r\n }\r\n } catch (err) {\r\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\r\n }\r\n continue;\r\n }\r\n\r\n // Route through InputBuilder so big pastes collapse to placeholders.\r\n const ph = await builder.appendPaste(raw);\r\n if (ph) {\r\n const lineCount = raw.split('\\n').length;\r\n opts.renderer.write(color.dim(` ↳ ${ph} (${lineCount} lines)\\n`));\r\n }\r\n const blocks = await builder.submit();\r\n\r\n // ── SDD Session Integration ─────────────────────────────────────────\r\n // When an SDD session is active, inject the session context so the AI\r\n // knows to ask questions, generate specs, etc.\r\n const sddContext = getActiveSDDContext();\r\n const taskList = getTaskListText();\r\n const taskProgress = getTaskProgress();\r\n const sddPhase = getActiveSDDPhase();\r\n\r\n let sddPrefix = '';\r\n if (sddContext) {\r\n sddPrefix = `[SDD SESSION ACTIVE]\\n${sddContext}`;\r\n if (taskList) {\r\n sddPrefix += `\\n\\n**Current Task List:**\\n${taskList}`;\r\n }\r\n if (taskProgress && taskProgress.total > 0) {\r\n sddPrefix += `\\n**Progress:** ${taskProgress.completed}/${taskProgress.total} (${taskProgress.percent}%)`;\r\n }\r\n if (sddPhase === 'executing' && taskProgress && taskProgress.percent === 100) {\r\n sddPrefix += '\\n\\n**All tasks completed! Provide a summary of everything implemented.**';\r\n }\r\n sddPrefix += '\\n\\n---\\nUser message:\\n';\r\n }\r\n\r\n const effectiveBlocks = sddPrefix\r\n ? [\r\n { type: 'text' as const, text: sddPrefix },\r\n ...blocks,\r\n ]\r\n : blocks;\r\n\r\n const runCtrl = new AbortController();\r\n activeCtrl = runCtrl;\r\n try {\r\n const startedAt = Date.now();\r\n const before = opts.tokenCounter?.total();\r\n const costBefore = opts.tokenCounter?.estimateCost().total ?? 0;\r\n const routed = effectiveBlocks.some((block) => block.type === 'image')\r\n ? await routeImagesForModel(effectiveBlocks, {\r\n supportsVision: opts.supportsVision\r\n ? await opts.supportsVision()\r\n : opts.agent.ctx.provider.capabilities.vision,\r\n adapters: opts.visionAdapters ?? [],\r\n ctx: opts.agent.ctx,\r\n signal: runCtrl.signal,\r\n providerId: opts.agent.ctx.provider.id,\r\n model: opts.agent.ctx.model,\r\n })\r\n : { blocks: effectiveBlocks, route: 'none' as const, convertedImages: 0 };\r\n if (routed.route === 'adapter') {\r\n opts.renderer.write(\r\n color.dim(\r\n ` ↳ image analyzed via ${routed.adapterName ?? 'vision adapter'} (${routed.convertedImages} image${routed.convertedImages === 1 ? '' : 's'})\\n`,\r\n ),\r\n );\r\n }\r\n const result = await opts.agent.run(routed.blocks, { signal: runCtrl.signal });\r\n if (result.status === 'aborted') {\r\n opts.renderer.writeWarning('Aborted.');\r\n } else if (result.status === 'failed') {\r\n const err = result.error;\r\n if (err) {\r\n const tag = err.recoverable ? ' (recoverable)' : '';\r\n opts.renderer.writeError(`Failed [${err.severity}]${tag}: ${err.describe()}`);\r\n } else {\r\n opts.renderer.writeError('Failed.');\r\n }\r\n } else if (result.status === 'max_iterations') {\r\n opts.renderer.writeWarning(`Hit max iterations (${result.iterations}).`);\r\n }\r\n\r\n // ── SDD Auto-Detection ──────────────────────────────────────────\r\n // When an SDD session is active, auto-detect spec and task JSON\r\n // in the AI output and save them to the session.\r\n if (result.status === 'done' && result.finalText && sddContext) {\r\n // Try to detect and save a spec\r\n const specSaved = await trySaveSpecFromAIOutput(result.finalText);\r\n if (specSaved) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' ✓ Spec detected and saved! Use /sdd approve to continue.')}\\n`,\r\n );\r\n }\r\n\r\n // Try to save implementation plan (text before task JSON)\r\n const planSaved = trySaveImplementationPlan(result.finalText);\r\n if (planSaved) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' ✓ Implementation plan saved!')}\\n`,\r\n );\r\n }\r\n\r\n // Try to detect and save tasks\r\n const tasksSaved = await trySaveTasksFromAIOutput(result.finalText);\r\n if (tasksSaved) {\r\n const progress = getTaskProgress();\r\n const count = progress?.total ?? 0;\r\n opts.renderer.write(\r\n `\\n${color.cyan(` ✓ ${count} tasks detected and saved! Use /sdd approve to execute.`)}\\n`,\r\n );\r\n }\r\n\r\n // Auto-detect task completion during execution phase\r\n const phase = getActiveSDDPhase();\r\n if (phase === 'executing') {\r\n const autoCompleted = autoDetectTaskCompletion(result.finalText);\r\n if (autoCompleted > 0) {\r\n const progress = getTaskProgress();\r\n if (progress) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(` ✓ ${autoCompleted} task(s) auto-completed! Progress: ${progress.completed}/${progress.total} (${progress.percent}%)`)}\\n`,\r\n );\r\n if (progress.percent === 100) {\r\n opts.renderer.write(\r\n `\\n${color.green(' 🎉 All tasks completed! Use /sdd cancel to end the session.')}\\n`,\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (opts.tokenCounter && before) {\r\n const after = opts.tokenCounter.total();\r\n const costAfter = opts.tokenCounter.estimateCost().total;\r\n const ctxChip =\r\n opts.effectiveMaxContext && opts.effectiveMaxContext > 0\r\n ? ` ctx: ${renderContextChip(after.input, opts.effectiveMaxContext)}`\r\n : '';\r\n opts.renderer.write(\r\n `\\n${color.dim(\r\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}`,\r\n )}\\n`,\r\n );\r\n }\r\n\r\n // Autonomy loop: after a successful run, if autonomy is active,\r\n // ask the agent to suggest next steps and optionally auto-continue.\r\n if (result.status === 'done' && opts.getAutonomy) {\r\n const autonomy = opts.getAutonomy();\r\n if (autonomy === 'auto') {\r\n // Self-driving: ask the agent to continue with the next logical step.\r\n const nextPrompt =\r\n 'Based on what you just did, what is the single most important next step? ' +\r\n 'Just do it — execute the next logical step without asking for confirmation. ' +\r\n 'If there is nothing meaningful left to do, say \"DONE\" and nothing else.';\r\n opts.renderer.write(color.dim('\\n ↳ [autonomy] continuing…\\n'));\r\n const nextBlocks = [{ type: 'text' as const, text: nextPrompt }];\r\n const nextCtrl = new AbortController();\r\n activeCtrl = nextCtrl;\r\n try {\r\n const nextResult = await opts.agent.run(nextBlocks, { signal: nextCtrl.signal });\r\n if (nextResult.status === 'done' && nextResult.finalText?.trim() === 'DONE') {\r\n opts.renderer.write(color.dim('\\n ↳ [autonomy] agent reports task complete.\\n'));\r\n }\r\n // Loop continues — the for(;;) will read next input, but since\r\n // we're in auto mode, we need to re-trigger. We use a flag.\r\n if (opts.getAutonomy() === 'auto' && nextResult.status === 'done') {\r\n // Re-trigger: the outer loop will continue and we'll hit this\r\n // block again on the next iteration. But we need user input...\r\n // Instead, we just continue the loop with the next prompt.\r\n }\r\n } catch (err) {\r\n opts.renderer.writeError(\r\n `[autonomy] ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n } finally {\r\n activeCtrl = undefined;\r\n }\r\n } else if (autonomy === 'suggest') {\r\n // Suggest mode: ask the agent what to do next, show to user.\r\n const suggestPrompt =\r\n 'Based on what you just did, suggest 3 concrete next steps. ' +\r\n 'Format: numbered list, one line each, no explanation. ' +\r\n 'If there is nothing meaningful left, say \"No further steps needed.\"';\r\n const suggestBlocks = [{ type: 'text' as const, text: suggestPrompt }];\r\n const suggestCtrl = new AbortController();\r\n activeCtrl = suggestCtrl;\r\n try {\r\n const suggestResult = await opts.agent.run(suggestBlocks, { signal: suggestCtrl.signal });\r\n if (suggestResult.status === 'done' && suggestResult.finalText) {\r\n opts.renderer.write(\r\n `\\n${color.cyan(' Suggested next steps:')}\\n${suggestResult.finalText}\\n`,\r\n );\r\n }\r\n } catch {\r\n // Silently skip suggestion errors\r\n } finally {\r\n activeCtrl = undefined;\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\r\n } finally {\r\n activeCtrl = undefined;\r\n }\r\n }\r\n\r\n return 0;\r\n } finally {\r\n // Ensure listener + reader cleanup happens on every exit path: normal\r\n // EOF, /quit, an uncaught throw, etc. Without this, a thrown exception\r\n // mid-loop would leave the SIGINT handler attached for the rest of\r\n // the process lifetime (and the reader's terminal handle open).\r\n process.off('SIGINT', onSigint);\r\n await opts.reader.close().catch(() => {\r\n /* best-effort */\r\n });\r\n }\r\n}\r\n\r\nasync function pasteClipboardImage(builder: InputBuilder, opts: ReplOptions): Promise<void> {\r\n try {\r\n const img = await readClipboardImage();\r\n if (!img) {\r\n opts.renderer.write(color.dim(' no image on clipboard\\n'));\r\n return;\r\n }\r\n const placeholder = await builder.appendImage(img.base64, img.mediaType);\r\n const kb = (img.bytes / 1024).toFixed(0);\r\n opts.renderer.write(color.dim(` ↳ ${placeholder} (PNG ${kb}KB)\\n`));\r\n } catch (err) {\r\n opts.renderer.writeError(\r\n `Clipboard image error: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Read the persisted goal file safely. Returns null on any error so the\r\n * REPL never crashes because /goal infrastructure is missing.\r\n */\r\nasync function loadGoalSafe(opts: ReplOptions): Promise<GoalFile | null> {\r\n if (!opts.projectRoot) return null;\r\n try {\r\n return await loadGoal(goalFilePath(opts.projectRoot));\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/**\r\n * Print a one-line status banner about the active goal — only when a\r\n * goal file exists. If the previous session left the engine in 'running'\r\n * state, prompt the user (y/N) to resume eternal mode directly so they\r\n * don't have to retype the slash command. Default is N (safe path) — a\r\n * stray Enter after an unexpected crash shouldn't auto-burn tokens.\r\n */\r\nasync function renderGoalBanner(opts: ReplOptions): Promise<void> {\r\n const goal = await loadGoalSafe(opts);\r\n if (!goal) return;\r\n const summary = goal.goal.length > 80 ? `${goal.goal.slice(0, 77)}…` : goal.goal;\r\n opts.renderer.write(\r\n color.dim('Goal: ') + color.bold(summary) + color.dim(` (iter ${goal.iterations})`) + '\\n',\r\n );\r\n if (goal.engineState === 'running') {\r\n opts.renderer.write(\r\n color.amber(' ↺ Eternal engine was running when last session ended.') + '\\n',\r\n );\r\n // Try an interactive y/N prompt. If reader is unavailable or throws\r\n // (non-TTY, redirected stdin, etc.) fall back to the static hint.\r\n try {\r\n const answer = (await opts.reader.readLine(color.dim(' Resume eternal mode? [y/N] ')))\r\n .trim()\r\n .toLowerCase();\r\n if (answer === 'y' || answer === 'yes') {\r\n // Dispatch /autonomy eternal as if the user typed it. Routes\r\n // through the normal slash path so YOLO force-on, prime(), banner\r\n // semantics all kick in consistently.\r\n try {\r\n await opts.slashRegistry.dispatch('/autonomy eternal', opts.agent.ctx);\r\n } catch (err) {\r\n opts.renderer.writeError(\r\n `Auto-resume failed: ${err instanceof Error ? err.message : String(err)}`,\r\n );\r\n }\r\n } else {\r\n opts.renderer.write(\r\n color.dim(' Not resuming. Use `/autonomy eternal` later to continue.') + '\\n',\r\n );\r\n }\r\n } catch {\r\n // Non-interactive path: just hint.\r\n opts.renderer.write(\r\n color.dim(' Use `/autonomy eternal` to resume.') + '\\n',\r\n );\r\n }\r\n }\r\n opts.renderer.write('\\n');\r\n}\r\n\r\n/**\r\n * Read a line, but support two multiline patterns:\r\n * 1. Trailing `\\` → continue on the next line (shell-style line continuation).\r\n * 2. A line that is exactly `\"\"\"` → start a heredoc; keep reading until\r\n * another bare `\"\"\"`. Useful for pasting code snippets.\r\n * Returns the assembled text and whether it came from a heredoc block (so\r\n * the caller can decide to always collapse heredocs as pastes).\r\n */\r\nasync function readPossiblyMultiline(opts: ReplOptions): Promise<string> {\r\n const firstPrompt = theme.primary('› ');\r\n const contPrompt = color.dim('· ');\r\n const first = await opts.reader.readLine(firstPrompt);\r\n\r\n if (first.trim() === '\"\"\"') {\r\n const parts: string[] = [];\r\n try {\r\n for (;;) {\r\n const next = await opts.reader.readLine(contPrompt);\r\n if (next.trim() === '\"\"\"') break;\r\n parts.push(next);\r\n }\r\n } catch {\r\n // EOF (Ctrl+D) during heredoc — user typed \"\"\" then quit.\r\n // Return what we have; the outer catch breaks the main loop.\r\n return parts.join('\\n');\r\n }\r\n return parts.join('\\n');\r\n }\r\n\r\n let buf = first;\r\n while (buf.endsWith('\\\\')) {\r\n buf = buf.slice(0, -1); // drop the trailing backslash\r\n const cont = await opts.reader.readLine(contPrompt);\r\n buf += '\\n' + cont;\r\n }\r\n return buf;\r\n}\r\n\r\nconst FILLED = '█';\r\nconst EMPTY = '░';\r\n\r\nfunction renderContextChip(used: number, max: number): string {\r\n const ratio = Math.max(0, Math.min(1, used / max));\r\n const pct = Math.round(ratio * 100);\r\n const bar = renderProgress(ratio, 6);\r\n return `${bar} ${pct}% (${fmtTok(used)}/${fmtTok(max)})`;\r\n}\r\n\r\nfunction renderProgress(ratio: number, width: number): string {\r\n const clamped = Math.max(0, Math.min(1, ratio));\r\n const filled = clamped === 0 ? 0 : Math.max(1, Math.round(clamped * width));\r\n const capped = Math.min(width, filled);\r\n return FILLED.repeat(capped) + EMPTY.repeat(width - capped);\r\n}\r\n\r\nfunction printBanner(renderer: TerminalRenderer, projectName?: string): void {\r\n const lines = [\r\n theme.primary(theme.bold('WrongStack')) + color.dim(` v${CLI_VERSION}`),\r\n color.dim('Built on the wrong stack. Shipped anyway.'),\r\n ];\r\n if (projectName && projectName.length > 0) {\r\n lines.push(color.dim('Project: ') + theme.bold(projectName));\r\n }\r\n lines.push(color.dim('Type /help for commands, /exit or q to quit.'), '');\r\n renderer.write(`${lines.join('\\n')}\\n`);\r\n}\r\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 /** Status bar hidden items controller (passed to TUI). */\n statuslineHiddenItems: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>;\n setStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'>) => void;\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 /**\n * Access the (possibly null) eternal-autonomy engine. The REPL drives\n * `runOneIteration()` from its main loop when autonomy is 'eternal'.\n */\n getEternalEngine?: () => import('@wrongstack/core').EternalAutonomyEngine | null;\n /**\n * Subscribe to live per-iteration events from the eternal engine.\n * Returns an unsubscribe function. The TUI uses this to render each\n * iteration as a live event entry instead of polling goal.json after\n * the fact. REPL doesn't need it (drives iterations sequentially).\n */\n subscribeEternalIteration?: (\n fn: (entry: import('@wrongstack/core').JournalEntry) => void,\n ) => () => void;\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 statuslineHiddenItems,\n setStatuslineHiddenItems,\n getYolo,\n getAutonomy,\n getEternalEngine,\n subscribeEternalIteration,\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 // Clean up any lingering bash/exec processes.\n const { getProcessRegistry } = await import('@wrongstack/tools');\n getProcessRegistry().killAll();\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 getAutonomy,\n getEternalEngine,\n subscribeEternalIteration,\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 statuslineHiddenItems,\n setStatuslineHiddenItems,\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 subscribeEternalIteration,\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 projectRoot,\n getAutonomy,\n getEternalEngine,\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 FleetManager,\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 NULL_FLEET_BUS,\r\n} from '@wrongstack/core';\r\nimport { ToolExecutor } from '@wrongstack/core/execution';\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 secretScrubber: import('@wrongstack/core').SecretScrubber;\r\n renderer?: import('@wrongstack/core').Renderer;\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 * Fleet-wide cost ceiling for the director. When set, the director\r\n * refuses any new spawn that would push total fleet spend above this\r\n * limit. In-flight subagents complete normally; only new spawns are\r\n * blocked. Only meaningful in director mode.\r\n */\r\n directorBudget?: {\r\n maxCostUsd?: number;\r\n };\r\n /**\r\n * Maximum auto-extensions per subagent per budget kind before the\r\n * director denies further extensions. Default: 2. Only meaningful in\r\n * director mode.\r\n */\r\n maxBudgetExtensions?: number;\r\n /**\r\n * Maximum number of subagent tasks that may run concurrently. Extra\r\n * tasks queue in the coordinator's pending list and dispatch as slots\r\n * free. Default: 4. Raising this lets more work proceed in parallel\r\n * at the cost of provider rate-limit pressure (each subagent makes\r\n * its own API calls).\r\n */\r\n maxConcurrent?: number;\r\n /**\r\n * Debounce window for state-checkpoint writes in milliseconds.\r\n * Default: 250. Only meaningful in director mode.\r\n */\r\n checkpointDebounceMs?: number;\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 director?: Director;\r\n /** Own FleetManager — created in buildDirector(), used for pending task\r\n * tracking so status() can show descriptions without host-side state. */\r\n private fleetManager?: import('@wrongstack/core').FleetManager;\r\n /** Lazily built alongside the director — produces per-subagent JSONL\r\n * writers under `<sessionsRoot>/<runId>/`. Null without sessionsRoot. */\r\n private sessionFactory?: DirectorSessionFactory;\r\n private readonly opts: MultiAgentHostOptions;\r\n /**\r\n * Populated by `promoteToDirector` when it refuses to promote. The delegate\r\n * tool reads this through `getPromotionBlockReason` to render an\r\n * actionable error instead of a generic \"Director could not be activated\".\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.director) return this.director;\r\n if (!this.opts.directorMode) return null;\r\n await this.buildDirector();\r\n return this.director ?? null;\r\n }\r\n\r\n /** Access the Director's internal coordinator. Returns the concrete\r\n * `DefaultMultiAgentCoordinator` so callers can use class-only surface\r\n * (`on`, `setRunner`) that isn't part of the `MultiAgentCoordinator`\r\n * interface. */\r\n private getCoordinator(): DefaultMultiAgentCoordinator {\r\n return (this.director as unknown as { coordinator: DefaultMultiAgentCoordinator }).coordinator;\r\n }\r\n\r\n private async buildDirector(): Promise<void> {\r\n if (this.director) return; // Already built — idempotent.\r\n const config: Config = this.deps.configStore.get() as Config;\r\n\r\n // Create the FleetManager FIRST so we can pass it to the Director.\r\n // The FleetManager owns pending task tracking (addPendingTask /\r\n // removePendingTask) used by status(), plus manifest + checkpointing.\r\n const fleetManager = new FleetManager({\r\n manifestPath: this.opts.manifestPath,\r\n sessionsRoot: this.opts.sessionsRoot,\r\n directorRunId: this.opts.directorRunId,\r\n stateCheckpointPath: this.opts.stateCheckpointPath,\r\n sessionWriter: this.opts.sessionWriter,\r\n directorBudget: this.opts.directorBudget,\r\n manifestDebounceMs: 2000,\r\n checkpointDebounceMs: this.opts.checkpointDebounceMs ?? 250,\r\n maxSpawnDepth: 5,\r\n });\r\n this.fleetManager = fleetManager;\r\n\r\n if (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 const coordinatorConfig = {\r\n coordinatorId: randomUUID(),\r\n doneCondition: { type: 'all_tasks_done' as const },\r\n maxConcurrent: this.opts.maxConcurrent ?? 4,\r\n };\r\n\r\n const defaultScratchpad: string | undefined =\r\n this.opts.sharedScratchpadPath ||\r\n (this.opts.sessionsRoot && this.opts.directorRunId\r\n ? path.join(this.opts.sessionsRoot, this.opts.directorRunId, 'shared')\r\n : undefined);\r\n this.director = new Director({\r\n config: coordinatorConfig,\r\n manifestPath: this.opts.manifestPath,\r\n sharedScratchpadPath: defaultScratchpad,\r\n stateCheckpointPath: this.opts.stateCheckpointPath,\r\n sessionWriter: this.opts.sessionWriter,\r\n directorBudget: this.opts.directorBudget,\r\n maxBudgetExtensions: this.opts.maxBudgetExtensions,\r\n checkpointDebounceMs: this.opts.checkpointDebounceMs,\r\n sessionsRoot: this.opts.sessionsRoot,\r\n directorRunId: this.opts.directorRunId,\r\n maxSpawnDepth: 5,\r\n fleetManager, // pass so director.fleetManager is never undefined\r\n });\r\n this.director.on('task.completed', ({ task, result }) => {\r\n this.fleetManager?.removePendingTask(task.id);\r\n this.emitLifecycleCompleted(task.id, result);\r\n });\r\n this.director.fleet.filter('budget.threshold_reached', (e) => {\r\n const payload = e.payload as { kind: string; used: number; limit: number };\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.getCoordinator().on('task.assigned', ({ 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 const runner = this.buildSubagentRunner(config);\r\n this.getCoordinator().setRunner(runner);\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 toolExecutor = new ToolExecutor(this.subagentToolRegistry(subCfg.tools), {\r\n permissionPolicy: new AutoApprovePermissionPolicy(),\r\n secretScrubber: this.deps.secretScrubber,\r\n renderer: this.deps.renderer,\r\n events,\r\n confirmAwaiter: undefined,\r\n iterationTimeoutMs: config.tools?.iterationTimeoutMs ?? 120_000,\r\n perIterationOutputCapBytes: config.tools?.perIterationOutputCapBytes ?? 100_000,\r\n tracer: undefined,\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 toolExecutor,\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 ?? NULL_FLEET_BUS });\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 // Always build a Director (directorMode or not) so that spawn routes\r\n // through the same code path. The Director handles all orchestration.\r\n await this.buildDirector();\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 const { subagentId, taskId } = await this._spawnAndAssign(subagentConfig);\r\n // Track the pending task via FleetManager so status() can show descriptions\r\n // without host-side state duplication.\r\n this.fleetManager?.addPendingTask(taskId, subagentId, description);\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 return { subagentId, taskId };\r\n }\r\n\r\n /**\r\n * Common spawn + assign logic shared by both director mode and raw\r\n * coordinator mode. Extracts the identical body from the two branches\r\n * in `spawn()` so future changes (e.g. adding a new field to both\r\n * paths) are made in one place.\r\n *\r\n * Returns `{ subagentId, taskId }`. Caller holds `pending` tracking\r\n * and event emission — the helper only talks to the coordinator.\r\n */\r\n private async _spawnAndAssign(\r\n subagentConfig: { name: string; role?: string; provider?: string; model?: string; tools?: string[] },\r\n ): Promise<{ subagentId: string; taskId: string }> {\r\n const taskId = randomUUID();\r\n // Always goes through the Director — single code path after buildDirector()\r\n const subagentId = await this.director!.spawn(subagentConfig);\r\n await this.director!.assign({ id: taskId, description: '', subagentId });\r\n return { 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 activeSubagentIds = new Set<string>();\r\n const live: { subagentId: string; status: string; task?: string }[] = [];\r\n if (this.director) {\r\n const coord = this.getCoordinator();\r\n const s = coord.getStatus();\r\n for (const a of s.subagents) {\r\n if (a.status === 'running' || a.status === 'idle') {\r\n activeSubagentIds.add(a.id);\r\n }\r\n live.push({ subagentId: a.id, status: a.status, task: a.currentTask });\r\n }\r\n }\r\n // Pending tasks come from the host's FleetManager (passed to Director)\r\n const fleetStatus = this.fleetManager?.getFleetStatus() ?? { pending: [], live: [] };\r\n const pending = fleetStatus.pending.filter((p) => activeSubagentIds.has(p.subagentId));\r\n // Results always from Director (single source of truth)\r\n const completed = this.director ? this.director.completedResults() : [];\r\n const completedCount = completed.length;\r\n const liveCount = live.filter((s) => s.status === 'running' || s.status === 'idle').length;\r\n const summary = !this.director\r\n ? 'No subagents have been spawned.'\r\n : liveCount > 0\r\n ? `${pending.length} pending, ${liveCount} active, ${completedCount} completed.`\r\n : `${pending.length} pending, ${completedCount} completed.`;\r\n return { pending, completed, 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 completed = this.director ? this.director.completedResults() : [];\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 completed) {\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 // Force a synchronous write — bypass the debounce timer so callers\r\n // (including tests) get an immediate snapshot without polling.\r\n // `writeManifest()` returns the absolute path on success, or null\r\n // when no manifest path is configured on the FleetManager.\r\n return (await this.director.fleetManager?.writeManifest()) ?? null;\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 // With the single-path refactoring, spawn() always builds a Director.\r\n // So a \"coordinator without director\" state can no longer occur.\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.director) return false;\r\n await this.getCoordinator().stop(subagentId);\r\n return true;\r\n }\r\n\r\n async stopAll(): Promise<void> {\r\n if (this.director) {\r\n await this.getCoordinator().stopAll();\r\n }\r\n }\r\n\r\n /**\r\n * Current effective concurrent-subagent ceiling. Reads the live\r\n * coordinator config when the director is built; otherwise falls back\r\n * to the constructor option (or the default of 4 that buildDirector\r\n * will apply on first /spawn).\r\n */\r\n getMaxConcurrent(): number {\r\n if (this.director) {\r\n return this.getCoordinator().config.maxConcurrent ?? 4;\r\n }\r\n return this.opts.maxConcurrent ?? 4;\r\n }\r\n\r\n /**\r\n * Change the concurrent-subagent ceiling at runtime. Updates the\r\n * constructor option (so lazy-built director picks it up) and, if the\r\n * coordinator already exists, mutates its live config + triggers a\r\n * dispatch pass so newly-allowed slots fill immediately.\r\n *\r\n * Throws on non-positive values; the caller is expected to validate\r\n * user input first.\r\n */\r\n setMaxConcurrent(n: number): void {\r\n if (!Number.isFinite(n) || n < 1) {\r\n throw new Error(`maxConcurrent must be a finite integer >= 1, got ${n}`);\r\n }\r\n const v = Math.floor(n);\r\n this.opts.maxConcurrent = v;\r\n if (this.director) {\r\n this.getCoordinator().setMaxConcurrent(v);\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 TOKENS,\r\n type ToolRegistry,\r\n createDefaultPipelines,\r\n estimateRequestTokens,\r\n} from '@wrongstack/core';\r\nimport { ToolExecutor } from '@wrongstack/core/execution';\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 permissionPolicy?: import('@wrongstack/core').PermissionPolicy;\r\n tracer?: import('@wrongstack/core').Tracer | undefined;\r\n}): Agent {\r\n const secretScrubber = params.container.resolve(TOKENS.SecretScrubber);\r\n const renderer = params.container.has(TOKENS.Renderer)\r\n ? params.container.resolve(TOKENS.Renderer)\r\n : undefined;\r\n const logger = params.container.resolve(TOKENS.Logger);\r\n const toolExecutor = new ToolExecutor(params.tools, {\r\n permissionPolicy: params.permissionPolicy ?? params.container.resolve(TOKENS.PermissionPolicy),\r\n secretScrubber,\r\n renderer,\r\n events: params.events,\r\n confirmAwaiter: params.confirmAwaiter,\r\n iterationTimeoutMs: params.config.tools.iterationTimeoutMs,\r\n perIterationOutputCapBytes: params.config.tools.perIterationOutputCapBytes,\r\n tracer: params.tracer,\r\n });\r\n\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 toolExecutor,\r\n tracer: params.tracer,\r\n });\r\n}\r\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { writeFileSync } from 'node:fs';\nimport {\n DefaultHealthRegistry,\n InMemoryMetricsSink,\n startMetricsServer,\n wireMetricsToEvents,\n type EventBus,\n type HealthRegistry,\n type MetricsServerHandle,\n type MetricsSink,\n type WstackPaths,\n} from '@wrongstack/core';\n\nexport interface MetricsWiringDeps {\n flags: Record<string, unknown>;\n wpaths: WstackPaths;\n events: EventBus;\n logger: { info(msg: string): void; warn(msg: string): void };\n config: { provider: string; model: string };\n}\n\nexport interface MetricsWiringResult {\n metricsSink: MetricsSink | undefined;\n healthRegistry: HealthRegistry | undefined;\n metricsServerHandle: MetricsServerHandle | undefined;\n}\n\nexport function setupMetrics(params: MetricsWiringDeps): MetricsWiringResult {\n const { flags, wpaths, events, logger, config } = params;\n let metricsSink: MetricsSink | undefined;\n let healthRegistry: HealthRegistry | undefined;\n let metricsServerHandle: MetricsServerHandle | undefined;\n\n const metricsPortFlag = flags['metrics-port'];\n const metricsPort =\n typeof metricsPortFlag === 'string' && metricsPortFlag.length > 0\n ? Number.parseInt(metricsPortFlag, 10)\n : undefined;\n if (metricsPort !== undefined && !flags.metrics) flags.metrics = true;\n\n if (!flags.metrics) return { metricsSink, healthRegistry, metricsServerHandle };\n\n metricsSink = new InMemoryMetricsSink();\n wireMetricsToEvents(events, metricsSink);\n healthRegistry = new DefaultHealthRegistry();\n healthRegistry.register({\n name: 'session-store',\n check: async () => {\n try {\n await fs.access(wpaths.projectSessions);\n return { status: 'healthy' };\n } catch (e) {\n return { status: 'unhealthy', detail: e instanceof Error ? e.message : 'access denied' };\n }\n },\n });\n healthRegistry.register({\n name: 'provider',\n check: async () => ({\n status: 'healthy',\n data: { id: config.provider, model: config.model },\n }),\n });\n\n const dumpMetrics = () => {\n if (!metricsSink) return;\n try {\n const out = path.join(wpaths.projectSessions, 'metrics.json');\n const snap = metricsSink.snapshot();\n writeFileSync(out, JSON.stringify(snap, null, 2));\n } catch {\n // best-effort\n }\n };\n // Dump on natural exit. We deliberately do NOT register a SIGINT\n // handler that calls process.exit() — doing so would preempt the\n // REPL's \"press Ctrl+C twice to exit\" semantics and turn a soft\n // abort (cancel current iteration) into a hard kill of the process.\n // Other SIGINT handlers (repl.ts, execution.ts, tui/app.tsx) own\n // the exit lifecycle; when they ultimately call process.exit the\n // 'exit' event fires and dumpMetrics runs.\n process.on('exit', dumpMetrics);\n\n if (metricsPort !== undefined && Number.isFinite(metricsPort)) {\n try {\n // eslint-disable-next-line no-restricted-syntax\n metricsServerHandle = startMetricsServer({\n port: metricsPort,\n host: process.env['METRICS_HOST'] ?? '127.0.0.1',\n sink: metricsSink,\n healthRegistry,\n }) as unknown as MetricsServerHandle;\n logger.info(\n `metrics endpoint listening on ${(metricsServerHandle as unknown as { url?: string }).url} (healthz on same port)`,\n );\n process.on('exit', () => {\n void metricsServerHandle?.close().catch(() => {});\n });\n } catch (err) {\n logger.warn(\n `metrics endpoint failed to start: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n return { metricsSink, healthRegistry, metricsServerHandle };\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","import { type AgentPipelines, type Config, type Container, type EventBus, type Logger, type ProviderRegistry, type SlashCommandRegistry, type ToolRegistry, type SessionWriter, type ConfigStore, type ExtensionRegistry, type MetricsSinkView } from '@wrongstack/core';\nimport { loadPlugins, type Plugin } from '@wrongstack/core';\nimport { MCPRegistry } from '@wrongstack/mcp';\nimport createApi from '../plugin-api-factory.js';\nimport { patchConfig } from '../utils.js';\n\nexport interface PluginsWiringDeps {\n config: Config;\n container: Container;\n events: EventBus;\n pipelines: AgentPipelines;\n toolRegistry: ToolRegistry;\n providerRegistry: ProviderRegistry;\n slashCommandRegistry: SlashCommandRegistry;\n mcpRegistry: MCPRegistry;\n log: Logger;\n agent: { extensions?: ExtensionRegistry };\n sessionWriter: SessionWriter;\n metricsSink?: MetricsSinkView;\n configStore: ConfigStore;\n}\n\nexport async function setupPlugins(params: PluginsWiringDeps): Promise<void> {\n const { config, container, events, toolRegistry, providerRegistry, slashCommandRegistry,\n mcpRegistry, log, agent, sessionWriter, metricsSink, configStore, pipelines } = params;\n\n if (!config.features.plugins || !config.plugins || config.plugins.length === 0) return;\n\n const resolvedPlugins: Plugin[] = [];\n for (const p of config.plugins) {\n if (typeof p === 'object' && p.enabled === false) continue;\n const spec = typeof p === 'string' ? p : p.name;\n try {\n const mod = (await import(spec)) as { default?: Plugin };\n if (mod.default) resolvedPlugins.push(mod.default);\n } catch (err) {\n log.warn(`Plugin \"${spec}\" failed to load`, err);\n }\n }\n\n if (resolvedPlugins.length === 0) return;\n\n const pluginOptions = buildPluginOptions(config);\n const pluginConfig =\n Object.keys(pluginOptions).length > 0\n ? patchConfig(config, { extensions: pluginOptions } as Partial<Config>)\n : config;\n\n await loadPlugins(resolvedPlugins, {\n log,\n pluginOptions,\n apiFactory: (plugin) =>\n createApi(plugin.name, {\n container,\n events,\n pipelines: pipelines as unknown as Parameters<typeof createApi>[1]['pipelines'],\n toolRegistry,\n providerRegistry,\n slashCommandRegistry,\n mcpRegistry,\n config: pluginConfig,\n log,\n extensions: agent.extensions,\n sessionWriter: {\n transcriptPath: sessionWriter.transcriptPath,\n append: (e: Record<string, unknown> & { type: string; ts: string }) =>\n sessionWriter.append(e as Parameters<typeof sessionWriter.append>[0]),\n },\n metricsSink,\n configStore,\n }),\n });\n}\n\nfunction buildPluginOptions(config: Config): Record<string, Record<string, unknown>> {\n const options: Record<string, Record<string, unknown>> = {};\n for (const entry of config.plugins ?? []) {\n if (typeof entry !== 'object') continue;\n if (entry.options) options[entry.name] = { ...entry.options };\n }\n for (const [name, value] of Object.entries(config.extensions ?? {})) {\n options[name] = { ...(options[name] ?? {}), ...value };\n }\n return options;\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 /** Director state checkpoint from the prior run — null if this is not a resume. */\n priorFleetState?: import('@wrongstack/core').DirectorStateSnapshot;\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 let dirState;\n if (resumeId) {\n try {\n const fleetRoot = path.join(wpaths.projectSessions, session!.id);\n 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, priorFleetState: dirState ?? undefined };\n}\n","import { createRequire } from 'node:module';\r\nimport * as path from 'node:path';\r\nimport * as fs from 'node:fs/promises';\r\nimport { spawn } from 'node:child_process';\r\nimport type { CommitLLMProvider } from './slash-commands/commit-llm.js';\r\nimport { generateCommitMessageWithLLM } from './slash-commands/commit-llm.js';\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 makeAutonomyPromptContributor,\r\n DefaultTokenCounter,\r\n type Director,\r\n EventBus,\r\n FLEET_ROSTER,\r\n HybridCompactor,\r\n type MetricsSink,\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 allServers,\r\n attachTodosCheckpoint,\r\n color,\r\n createContextManagerTool,\r\n EternalAutonomyEngine,\r\n createDefaultPipelines,\r\n createDelegateTool,\r\n createMcpControlTool,\r\n loadDirectorState,\r\n loadPlan,\r\n loadPlugins,\r\n loadTodosCheckpoint,\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 { runMcpManagementCommand, parseMcpArgs } from './slash-commands/mcp-utils.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 { buildStatuslineCommand, loadStatuslineConfig, saveStatuslineConfig } from './slash-commands/statusline.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 { setupMetrics } from './wiring/metrics.js';\r\nimport { setupPlugins } from './wiring/plugins.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\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 updateInfo,\r\n } = ctx;\r\n\r\n // Show update notification if outdated.\r\n // If boot's background check is still running (cache miss), fire a new\r\n // quick check and wait up to 2s — notification is non-critical.\r\n if (!updateInfo?.outdated) {\r\n const ac = new AbortController();\r\n const timer = setTimeout(() => ac.abort(), 2000);\r\n try {\r\n const { checkForUpdate } = await import('./update-check.js');\r\n updateInfo = await checkForUpdate(ac.signal);\r\n } catch {\r\n // best-effort\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n }\r\n if (updateInfo?.outdated) {\r\n process.stderr.write(\r\n `\\n \\x1b[33m↑ Update available: v${updateInfo.current} → v${updateInfo.latest}\\x1b[0m Run \\`wrongstack update\\` to upgrade.\\n\\n`,\r\n );\r\n }\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 // Forward declaration: the autonomy mode state lives later in this\r\n // function but the SystemPromptBuilder needs a reference to it NOW so\r\n // the autonomy contributor can read the current mode at build time.\r\n // Mutated by `onAutonomy` / `onEternalStart` below — the contributor\r\n // reads it on every system-prompt build (per turn).\r\n const autonomyModeRef: {\r\n current: import('./slash-commands/autonomy.js').AutonomyMode;\r\n } = { current: 'off' };\r\n const goalPathForPrompt = path.join(projectRoot, '.wrongstack', 'goal.json');\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 contributors: [\r\n // Injects the ETERNAL AUTONOMY block when the user has activated\r\n // `/autonomy eternal`. Without this, the per-iteration directive\r\n // is the only place the model sees the rules — compaction can\r\n // drop it and the model forgets it's in autonomy mode.\r\n makeAutonomyPromptContributor({\r\n goalPath: goalPathForPrompt,\r\n enabled: () => autonomyModeRef.current === 'eternal',\r\n }),\r\n ],\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 // Metrics wiring — extracted to wiring/metrics.ts\r\n const { metricsSink, healthRegistry, metricsServerHandle } = (() => {\r\n const ms = setupMetrics({ flags, wpaths, events, logger, config: { provider: config.provider, model: config.model } });\r\n return ms;\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 const priorFleetState = sessResult.priorFleetState;\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 — extracted to wiring/plugins.ts\r\n await setupPlugins({\r\n config,\r\n container,\r\n events,\r\n pipelines,\r\n toolRegistry,\r\n providerRegistry,\r\n slashCommandRegistry: slashRegistry,\r\n mcpRegistry,\r\n log: logger,\r\n agent: agent,\r\n sessionWriter: context.session,\r\n metricsSink,\r\n configStore,\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 || typeof flags['resume'] === 'string';\r\n // Concurrent subagent ceiling. Order: CLI flag → env var → default (4).\r\n // Caps how many delegated tasks the coordinator dispatches at once;\r\n // extra tasks queue. Keeps the leader from spawning enough parallel\r\n // subagents to trip provider rate limits.\r\n const maxConcurrentFromFlag =\r\n typeof flags['max-concurrent'] === 'string'\r\n ? Number.parseInt(flags['max-concurrent'], 10)\r\n : undefined;\r\n const maxConcurrentFromEnv =\r\n typeof process.env['WRONGSTACK_MAX_CONCURRENT'] === 'string'\r\n ? Number.parseInt(process.env['WRONGSTACK_MAX_CONCURRENT'], 10)\r\n : undefined;\r\n const maxConcurrent =\r\n Number.isFinite(maxConcurrentFromFlag) && (maxConcurrentFromFlag as number) > 0\r\n ? (maxConcurrentFromFlag as number)\r\n : Number.isFinite(maxConcurrentFromEnv) && (maxConcurrentFromEnv as number) > 0\r\n ? (maxConcurrentFromEnv as number)\r\n : undefined;\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 // Eternal-autonomy engine instance — lazy, created when /autonomy eternal is invoked.\r\n // Lives at function scope so /autonomy stop and SIGINT handlers can reach it.\r\n let eternalEngine: import('@wrongstack/core').EternalAutonomyEngine | null = null;\r\n // Listeners installed by the TUI / REPL to receive per-iteration events\r\n // from the engine. We support a list (not a single callback) so both\r\n // surfaces can subscribe without overwriting each other — TUI installs\r\n // one on mount, but the underlying engine is owned at CLI scope.\r\n const eternalListeners = new Set<(entry: import('@wrongstack/core').JournalEntry) => void>();\r\n const broadcastEternalIteration = (entry: import('@wrongstack/core').JournalEntry): void => {\r\n for (const fn of eternalListeners) {\r\n try {\r\n fn(entry);\r\n } catch {\r\n // listener failures must never break the engine — swallow\r\n }\r\n }\r\n };\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 secretScrubber: container.resolve(TOKENS.SecretScrubber),\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 maxConcurrent,\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 // `mcp_control` — LLM-driven MCP server lifecycle.\r\n // The model uses this to autonomously enable/disable MCP servers\r\n // without requiring a slash command or manual intervention.\r\n toolRegistry.register(\r\n createMcpControlTool({\r\n getConfig: () => configStore.get(),\r\n configPath: wpaths.globalConfig,\r\n registry: mcpRegistry,\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 // If we resumed a prior run, inject the checkpoint snapshot so the\r\n // director's in-memory state mirrors the pre-crash fleet.\r\n if (priorFleetState) director.setCheckpointState(priorFleetState);\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 // Statusline config — loaded once and shared with /statusline slash command\r\n const statuslineConfigDeps = {\r\n get: () => loadStatuslineConfig(),\r\n set: (cfg: import('./slash-commands/statusline.js').StatuslineConfig) => saveStatuslineConfig(cfg),\r\n };\r\n\r\n // Statusline hidden items — derived from the config file, kept in sync with the TUI\r\n const hiddenItemsFromConfig = await loadStatuslineConfig();\r\n const hiddenItemsList: Array<'todos' | 'plan' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost'> = [];\r\n const ALL_ITEMS = ['todos', 'plan', 'fleet', 'git', 'elapsed', 'context', 'cost'] as const;\r\n for (const k of ALL_ITEMS) {\r\n if (!hiddenItemsFromConfig[k]) hiddenItemsList.push(k);\r\n }\r\n const statuslineHiddenItems = hiddenItemsList;\r\n let currentHiddenItems = [...statuslineHiddenItems];\r\n const setStatuslineHiddenItems = (items: typeof statuslineHiddenItems) => {\r\n currentHiddenItems = items;\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 cwd,\r\n projectRoot,\r\n metricsSink,\r\n healthRegistry,\r\n planPath,\r\n modeStore,\r\n fleetStreamController,\r\n llmProvider: provider,\r\n llmModel: config.model,\r\n statuslineConfig: statuslineConfigDeps,\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: (subagentId?: string) => {\r\n const s = multiAgentHost.status();\r\n // When given a specific subagent id, return a live monitor view.\r\n if (subagentId) {\r\n const live = s.live.find((a) => a.subagentId === subagentId);\r\n const completed = s.completed.filter((r) => r.subagentId === subagentId);\r\n const pending = s.pending.filter((p) => p.subagentId === subagentId);\r\n if (!live && completed.length === 0 && pending.length === 0) {\r\n return `No subagent found with id \"${subagentId}\".`;\r\n }\r\n const STATUS_ICON: Record<string, string> = {\r\n running: '●',\r\n idle: '○',\r\n stopped: '⊘',\r\n };\r\n const lines: string[] = [color.bold(`Agent ${subagentId.slice(0, 8)}`)];\r\n if (live) {\r\n lines.push(` ${STATUS_ICON[live.status] ?? '?'} status: ${live.status}`);\r\n if (live.task) lines.push(` task: ${live.task}`);\r\n }\r\n for (const p of pending) {\r\n lines.push(` · pending: ${p.taskId.slice(0, 8)} → ${p.description.slice(0, 60)}`);\r\n }\r\n for (const r of 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 // Also surface per-subagent cost from fleet_usage if director is active.\r\n if (director) {\r\n const snap = director.snapshot();\r\n const per = snap.perSubagent?.[subagentId];\r\n if (per?.cost) lines.push(` cost: ${per.cost.toFixed(4)}`);\r\n if (per?.iterations) lines.push(` iterations: ${per.iterations}`);\r\n if (per?.toolCalls) lines.push(` toolCalls: ${per.toolCalls}`);\r\n }\r\n return lines.join('\\n');\r\n }\r\n // No id — return the summary table.\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 if (action === 'concurrency') {\r\n const current = multiAgentHost.getMaxConcurrent();\r\n if (!target) {\r\n return `Concurrent-subagent ceiling: ${current}`;\r\n }\r\n const n = Number.parseInt(target, 10);\r\n if (!Number.isFinite(n) || n < 1) {\r\n return `Invalid value \"${target}\". Concurrency must be an integer >= 1.`;\r\n }\r\n try {\r\n multiAgentHost.setMaxConcurrent(n);\r\n } catch (err) {\r\n return err instanceof Error ? err.message : String(err);\r\n }\r\n return `Concurrent-subagent ceiling: ${current} → ${n}`;\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 onMcp: async (args) => {\r\n const parsed = parseMcpArgs(args);\r\n if (!parsed) {\r\n return [\r\n 'Usage: /mcp [list|add <name>|remove <name>|enable <name>|disable <name>|restart <name>]',\r\n 'Run `/mcp` without args to see available servers.',\r\n ].join('\\n');\r\n }\r\n return runMcpManagementCommand(parsed, {\r\n config,\r\n configPath: wpaths.globalConfig,\r\n mcpRegistry,\r\n allServerPresets: allServers(),\r\n });\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 // Mirror into the early ref so the system-prompt contributor\r\n // (constructed at line ~185) sees the current mode at build time.\r\n autonomyModeRef.current = setTo;\r\n return setTo;\r\n }\r\n return autonomyMode;\r\n },\r\n onEternalStart: () => {\r\n // Lazy-instantiate so the engine doesn't exist (and doesn't hold\r\n // references to the agent) until the user opts in. Re-uses an\r\n // existing instance if the user stops then restarts within the\r\n // same session — state lives on disk anyway.\r\n if (!eternalEngine) {\r\n eternalEngine = new EternalAutonomyEngine({\r\n agent,\r\n projectRoot,\r\n // Wire the same compactor the manual /compact command uses so\r\n // multi-day eternal loops don't overflow the provider's context.\r\n // effectiveMaxContext is set up earlier with a model-specific\r\n // value; pass it through so aggressive-mode compact triggers\r\n // before the next iteration would actually overflow.\r\n compactor: container.resolve(TOKENS.Compactor) as import('@wrongstack/core').Compactor,\r\n maxContextTokens: effectiveMaxContext > 0 ? effectiveMaxContext : undefined,\r\n onIteration: broadcastEternalIteration,\r\n });\r\n }\r\n // Persist engineState='running' so a crash mid-loop leaves a\r\n // forensic breadcrumb in goal.json. Fire-and-forget — the user\r\n // is on the next line waiting to see \"ETERNAL launching\", not\r\n // for a disk write.\r\n void eternalEngine.prime();\r\n },\r\n onEternalStop: () => {\r\n eternalEngine?.stop();\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 generateCommitMessage: async (diff: string) => {\r\n return generateCommitMessageWithLLM(diff, {\r\n provider: context.provider as CommitLLMProvider,\r\n model: context.model,\r\n });\r\n },\r\n });\r\n for (const cmd of slashCmds) slashRegistry.register(cmd);\r\n\r\n // ── --eternal \"<mission>\" flag: one-shot launch into eternal autonomy. ──\r\n // Writes the mission as the goal (overwriting any prior goal), forces\r\n // YOLO on (consistent with /autonomy eternal), instantiates + primes the\r\n // engine, and flips autonomyMode='eternal' so the REPL's main loop drives\r\n // the engine instead of reading user input. The user can still /autonomy\r\n // stop or Ctrl+C to exit the loop normally.\r\n const eternalFlag = typeof flags['eternal'] === 'string' ? (flags['eternal'] as string).trim() : '';\r\n if (eternalFlag.length > 0) {\r\n const { saveGoal, emptyGoal, goalFilePath, loadGoal } = await import('@wrongstack/core');\r\n const goalPath = goalFilePath(projectRoot);\r\n const prior = await loadGoal(goalPath);\r\n // Preserve journal across flag-driven re-launches so the user can run\r\n // `wstack --eternal \"<x>\"`, ctrl-c, then `wstack --eternal \"<y>\"` and\r\n // still see the prior iteration history under /goal journal.\r\n const next = prior\r\n ? { ...prior, goal: eternalFlag, setAt: new Date().toISOString(), lastActivityAt: new Date().toISOString() }\r\n : emptyGoal(eternalFlag);\r\n await saveGoal(goalPath, next);\r\n // Force YOLO on for destructive ops, matching the /autonomy eternal path.\r\n const policy = container.resolve(TOKENS.PermissionPolicy) as DefaultPermissionPolicy;\r\n policy.setYolo(true);\r\n config = patchConfig(config, { yolo: true });\r\n eternalEngine = new EternalAutonomyEngine({\r\n agent,\r\n projectRoot,\r\n compactor: container.resolve(TOKENS.Compactor) as import('@wrongstack/core').Compactor,\r\n maxContextTokens: effectiveMaxContext > 0 ? effectiveMaxContext : undefined,\r\n onIteration: broadcastEternalIteration,\r\n });\r\n await eternalEngine.prime();\r\n autonomyMode = 'eternal';\r\n autonomyModeRef.current = 'eternal';\r\n renderer.write(\r\n color.red('Eternal mode launching from --eternal flag.') +\r\n color.dim(` Goal: ${eternalFlag.slice(0, 80)}${eternalFlag.length > 80 ? '…' : ''}`) +\r\n '\\n',\r\n );\r\n }\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 statuslineHiddenItems,\r\n setStatuslineHiddenItems,\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 getEternalEngine: () => eternalEngine,\r\n subscribeEternalIteration: (fn) => {\r\n eternalListeners.add(fn);\r\n return () => eternalListeners.delete(fn);\r\n },\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"]}