@wrongstack/cli 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -1
- package/dist/index.js +27 -19
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/plugin-api-factory.ts","../src/input-reader.ts","../src/diff-renderer.ts","../src/theme.ts","../src/permission-prompt.ts","../src/picker.ts","../src/slash-commands/index.ts","../src/pre-launch.ts","../src/renderer.ts","../src/repl.ts","../src/session-stats.ts","../src/spinner.ts","../src/subcommands/index.ts","../src/index.ts"],"names":["path","os","fs","resolve","color","theme","atomicWrite","msg","fs3","path3","answer","fmtTok","FILLED","EMPTY","renderContextChip","renderProgress","fs4","path4","path5","fs5","os3","sessionStore","skillLoader","code","createApi"],"mappings":"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","file":"index.js","sourcesContent":["import {\n DefaultPluginAPI,\n type PluginAPIInit,\n type PluginAPI,\n} from '@wrongstack/core';\n\nexport default function createApi(ownerName: string, base: Omit<PluginAPIInit, 'ownerName'>): PluginAPI {\n return new DefaultPluginAPI({ ownerName, ...base });\n}\n","import * as readline from 'node:readline';\nimport * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\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 ((rl as unknown as { _flushed?: boolean })._flushed) {\n rl.close();\n this.rl = undefined;\n }\n const fresh = this.ensure();\n return new Promise<string>((resolve, reject) => {\n fresh.question(prompt ?? '> ', (line) => {\n if (line.trim()) {\n this.history.push(line);\n void this.saveHistory();\n }\n resolve(line);\n });\n fresh.once('close', () => reject(new Error('EOF')));\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 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 cleanup = () => {\n stdin.off('data', onData);\n if (stdin.isTTY) stdin.setRawMode(wasRaw);\n if (wasPaused) stdin.pause();\n };\n stdin.on('data', onData);\n });\n }\n\n /**\n * Read a single line of input without echoing it to the terminal. Used\n * for API keys / passwords. Non-TTY input is read normally — there's\n * nothing to hide when piped.\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 const onData = (chunk: string) => {\n for (const ch of chunk) {\n if (ch === '\\r' || ch === '\\n') {\n cleanup();\n process.stdout.write('\\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 === '' || ch === '\\b') {\n buf = buf.slice(0, -1);\n continue;\n }\n buf += ch;\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","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 { Tool, InputReader } 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\nexport function makePromptDelegate(reader: InputReader) {\n return async (\n tool: Tool,\n input: unknown,\n suggestedPattern: string,\n ): Promise<PromptDecision> => {\n process.stdout.write(`\\n${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\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 { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.js';\nimport type { ReadlineInputReader } from './input-reader.js';\n\nexport interface PickerResult {\n provider: string;\n model: string;\n}\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 */\nfunction hasApiKey(provider: ResolvedProvider, config?: Config): boolean {\n if (provider.envVars.some((v) => !!process.env[v])) return true;\n const stored = config?.providers?.[provider.id]?.apiKey;\n if (typeof stored === 'string' && stored.length > 0) return true;\n return false;\n}\n\n/**\n * Interactive provider + model picker. Lists supported providers grouped\n * by wire family — by default only those with an API key (env or stored\n * config), so you see only what you can actually launch into. Falls back\n * to the full catalog when no keys are found anywhere.\n *\n * When `defaultProvider`/`defaultModel` are passed, they're pre-selected\n * so the user can press Enter to accept the previous choice.\n */\nexport async function runPicker(deps: {\n modelsRegistry: ModelsRegistry;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n config?: Config;\n defaultProvider?: string;\n defaultModel?: string;\n}): Promise<PickerResult | undefined> {\n const { modelsRegistry, renderer, reader, config, defaultProvider, defaultModel } = deps;\n\n renderer.write(`\\n${color.bold(theme.primary('WrongStack') + color.dim(' — Provider & Model Selection'))}\\n`);\n renderer.write(color.dim('Loading provider catalog…\\n'));\n\n let providers: ResolvedProvider[];\n try {\n providers = await modelsRegistry.listProviders();\n } catch {\n renderer.writeError('Failed to load provider catalog. Pass --provider and --model to skip the picker.');\n return undefined;\n }\n\n // Drop unsupported wire families — they need a plugin and can't be\n // selected through this path.\n const supported = providers.filter((p) => p.family !== 'unsupported');\n if (supported.length === 0) {\n renderer.writeError('No supported providers found in catalog.');\n return undefined;\n }\n\n // Filter to keyed providers. If none are keyed (fresh install, no env\n // vars set), fall back to the full list and prompt the user to add a\n // key — picking a keyless provider here is still useful because the\n // very next step (`wstack auth <prov>`) needs to know which provider.\n const keyed = supported.filter((p) => hasApiKey(p, config));\n let displayList = keyed;\n let showingFallback = false;\n if (keyed.length === 0) {\n displayList = supported;\n showingFallback = true;\n }\n\n // Group by family for nicer display\n const families = new Map<string, ResolvedProvider[]>();\n for (const p of displayList) {\n const list = families.get(p.family) ?? [];\n list.push(p);\n families.set(p.family, list);\n }\n\n // Build a flat numbered list (family → providers). Track which entry\n // matches the current default so we can highlight + accept Enter.\n const ordered: Array<{ provider: ResolvedProvider; index: number }> = [];\n const familyOrder = ['anthropic', 'openai', 'google', 'openai-compatible'];\n let idx = 1;\n let defaultIdx: number | undefined;\n renderer.write('\\n');\n for (const fam of familyOrder) {\n const list = families.get(fam);\n if (!list || list.length === 0) continue;\n renderer.write(` ${color.bold(fam)}\\n`);\n for (const p of list) {\n const envFound = p.envVars.some((v) => !!process.env[v]);\n const configKey =\n typeof config?.providers?.[p.id]?.apiKey === 'string' &&\n (config!.providers![p.id]!.apiKey as string).length > 0;\n // ● green = env key, ◉ cyan = stored in config, ○ dim = no key\n const marker = envFound\n ? color.green('●')\n : configKey\n ? color.cyan('◉')\n : color.dim('○');\n const isDefault = p.id === defaultProvider;\n if (isDefault) defaultIdx = idx;\n const idLabel = isDefault ? color.bold(p.id) : p.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n ` ${color.dim(`${idx}.`.padStart(4))} ${marker} ${idLabel.padEnd(22)} ${color.dim(p.name)}${suffix}\\n`,\n );\n ordered.push({ provider: p, index: idx });\n idx++;\n }\n }\n\n if (showingFallback) {\n renderer.write(\n `\\n ${color.yellow('⚠ No API keys detected.')} ${color.dim('Pick a provider, then run `wstack auth <provider>` to add one.')}\\n`,\n );\n } else {\n renderer.write(\n `\\n ${color.dim('● = env key ◉ = stored in config ○ = no key')}\\n`,\n );\n }\n\n // Provider prompt. Enter on an empty line accepts the default when one\n // is present; otherwise we treat it as cancel.\n const defaultHint =\n defaultIdx !== undefined && defaultProvider\n ? ` ${color.dim(`[Enter = ${defaultProvider}]`)}`\n : '';\n const providerAnswer = (\n await reader.readLine(`\\n${color.amber('?')} Select provider (1-${ordered.length})${defaultHint}: `)\n ).trim();\n\n if (!providerAnswer) {\n if (defaultIdx !== undefined) {\n const def = ordered[defaultIdx - 1];\n if (def) return pickModel(def.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n\n const providerIdx = parseInt(providerAnswer, 10);\n if (Number.isNaN(providerIdx) || providerIdx < 1 || providerIdx > ordered.length) {\n // Try matching by id\n const byId = ordered.find((o) => o.provider.id.toLowerCase() === providerAnswer.toLowerCase());\n if (!byId) {\n renderer.writeError(`Invalid selection: \"${providerAnswer}\"`);\n return undefined;\n }\n return pickModel(byId.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n\n const chosen = ordered[providerIdx - 1];\n if (!chosen) return undefined;\n // Only honor the default-model hint when the user picked the default\n // provider; switching providers invalidates it.\n const modelHint = chosen.provider.id === defaultProvider ? defaultModel : undefined;\n return pickModel(chosen.provider, modelsRegistry, renderer, reader, modelHint);\n}\n\nasync function pickModel(\n provider: ResolvedProvider,\n registry: ModelsRegistry,\n renderer: TerminalRenderer,\n reader: ReadlineInputReader,\n defaultModel?: string,\n): Promise<PickerResult | undefined> {\n renderer.write(`\\n ${color.bold(provider.name)} ${color.dim(`(${provider.id})`)} models:\\n\\n`);\n\n const models = [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n\n if (models.length === 0) {\n renderer.writeError(' No models listed for this provider in the catalog.');\n return undefined;\n }\n\n // Find default-model index for the \"Enter = default\" hint.\n const defaultIdxInModels =\n defaultModel !== undefined ? models.findIndex((m) => m.id === defaultModel) : -1;\n\n // Show paginated — up to 30 at a time\n const pageSize = 30;\n let offset = 0;\n\n while (offset < models.length) {\n const page = models.slice(offset, offset + pageSize);\n for (let i = 0; i < page.length; i++) {\n const m = page[i]!;\n const num = offset + i + 1;\n const ctx = m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k`.padStart(6) : ' ?';\n const cost =\n m.cost?.input !== undefined\n ? `$${m.cost.input}/$${m.cost.output ?? '?'}`\n : '';\n const caps: string[] = [];\n if (m.tool_call) caps.push('tools');\n if (m.reasoning) caps.push('reason');\n if (m.modalities?.input?.includes('image')) caps.push('vision');\n const capStr = caps.length > 0 ? color.dim(caps.join(',')) : '';\n const isDefault = m.id === defaultModel;\n const idLabel = isDefault ? color.bold(m.id) : m.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n ` ${color.dim(`${num}.`.padStart(5))} ${idLabel.padEnd(44)} ${color.dim(ctx)} ${color.dim(cost.padEnd(14))} ${capStr}${suffix}\\n`,\n );\n }\n offset += pageSize;\n\n if (offset < models.length) {\n const more = (\n await reader.readLine(\n `\\n${color.amber('?')} Showing ${Math.min(offset, models.length)}/${models.length} — Enter number or ${color.dim('Enter')} for more: `,\n )\n ).trim();\n if (!more) continue; // show next page\n return resolveModelSelection(more, models, provider, registry, renderer, reader);\n }\n }\n\n // All shown — final prompt. Enter accepts the default model when present.\n const defaultHint =\n defaultIdxInModels >= 0 && defaultModel\n ? ` ${color.dim(`[Enter = ${defaultModel}]`)}`\n : '';\n const answer = (\n await reader.readLine(`\\n${color.amber('?')} Select model (1-${models.length})${defaultHint}: `)\n ).trim();\n if (!answer) {\n if (defaultIdxInModels >= 0 && defaultModel) {\n renderer.write(\n `\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(defaultModel)}\\n\\n`,\n );\n return { provider: provider.id, model: defaultModel };\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n return resolveModelSelection(answer, models, provider, registry, renderer, reader);\n}\n\nasync function resolveModelSelection(\n answer: string,\n models: import('@wrongstack/core').ModelsDevModel[],\n provider: ResolvedProvider,\n _registry: ModelsRegistry,\n renderer: TerminalRenderer,\n _reader: ReadlineInputReader,\n): Promise<PickerResult | undefined> {\n const idx = parseInt(answer, 10);\n let modelId: string | undefined;\n\n if (!Number.isNaN(idx) && idx >= 1 && idx <= models.length) {\n modelId = models[idx - 1]!.id;\n } else {\n // Try fuzzy matching by id\n const lower = answer.toLowerCase();\n const match = models.find((m) => m.id.toLowerCase() === lower);\n if (match) {\n modelId = match.id;\n } else {\n // Partial match\n const partial = models.filter((m) => m.id.toLowerCase().includes(lower));\n if (partial.length === 1) {\n modelId = partial[0]!.id;\n } else if (partial.length > 1) {\n renderer.writeError(`\"${answer}\" matches multiple models. Be more specific.`);\n return undefined;\n }\n }\n }\n\n if (!modelId) {\n // Use as-is (user might know the exact model string)\n modelId = answer;\n }\n\n renderer.write(\n `\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(modelId)}\\n\\n`,\n );\n\n return { provider: provider.id, model: modelId };\n}\n\n// --- Helpers ---\n\n// Simple theme alias (avoids importing the full theme module just for one color)\nconst theme = { primary: color.amber };\n\n/**\n * Save provider + model to the global config file.\n * Returns true if saved successfully.\n */\nexport async function saveToGlobalConfig(\n configPath: string,\n provider: string,\n model: string,\n): Promise<boolean> {\n try {\n const { atomicWrite } = await import('@wrongstack/core');\n const fs = await import('node:fs/promises');\n\n let existing: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(configPath, 'utf8');\n existing = JSON.parse(raw) as Record<string, unknown>;\n } catch {\n // No existing config\n }\n\n existing.provider = provider;\n existing.model = model;\n await atomicWrite(configPath, JSON.stringify(existing, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type {\n SlashCommand,\n SlashCommandRegistry,\n ToolRegistry,\n Compactor,\n SessionStore,\n SkillLoader,\n TokenCounter,\n Renderer,\n Context,\n MemoryStore,\n} from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\n\nexport interface SlashCommandContext {\n registry: SlashCommandRegistry;\n toolRegistry: ToolRegistry;\n compactor?: Compactor;\n sessionStore?: SessionStore;\n skillLoader?: SkillLoader;\n tokenCounter: TokenCounter;\n renderer: Renderer;\n memoryStore?: MemoryStore;\n context?: Context;\n onExit?: () => void;\n onClear?: () => void;\n onSwitchProvider?: (name: string) => void;\n onSwitchModel?: (name: string) => void;\n onDiag?: () => void;\n onStats?: () => void;\n}\n\nexport function buildBuiltinSlashCommands(opts: SlashCommandContext): SlashCommand[] {\n return [\n helpCommand(opts),\n initCommand(opts),\n clearCommand(opts),\n compactCommand(opts),\n contextCommand(opts),\n usageCommand(opts),\n toolsCommand(opts),\n skillCommand(opts),\n useCommand(opts),\n modelCommand(opts),\n diagCommand(opts),\n statsCommand(opts),\n saveCommand(opts),\n loadCommand(opts),\n exitCommand(opts),\n ];\n}\n\n/**\n * Bootstrap a `.wrongstack/AGENTS.md` in the current project. We try to\n * sniff the repo for common build/test commands so the file starts with\n * useful content instead of a blank template — the user is meant to edit\n * it, but those defaults remove the friction of staring at a blank page.\n */\nfunction initCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'init',\n description: 'Scaffold .wrongstack/AGENTS.md in the current project.',\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 // doesn't exist — 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 to add anything else worth remembering.`;\n opts.renderer.writeInfo(`Wrote ${file}`);\n opts.renderer.writeInfo(`Pre-filled: ${detected.hints.join(', ')}. Edit the file to add anything else worth remembering.`);\n return { message: msg };\n } else {\n const msg = `Wrote ${file}\\nNo project type auto-detected. Edit the file to add build/test commands and conventions.`;\n opts.renderer.writeInfo(`Wrote ${file}`);\n return { message: msg };\n }\n },\n };\n}\n\nexport interface ProjectFacts {\n build?: string;\n test?: string;\n lint?: string;\n run?: string;\n hints: string[];\n}\n\nexport async function detectProjectFacts(root: string): Promise<ProjectFacts> {\n const facts: ProjectFacts = { hints: [] };\n // package.json\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 = (pkg.packageManager ?? 'npm').split('@')[0] ?? 'npm';\n if (scripts['build']) facts.build = `${pm} run build`;\n if (scripts['test']) facts.test = `${pm} test`;\n if (scripts['lint']) facts.lint = `${pm} run lint`;\n if (scripts['dev'] ?? scripts['start']) facts.run = `${pm} run ${scripts['dev'] ? 'dev' : 'start'}`;\n facts.hints.push('package.json scripts');\n } catch {\n // not node\n }\n // pyproject.toml\n try {\n await fs.access(path.join(root, 'pyproject.toml'));\n facts.test ??= 'pytest';\n facts.lint ??= 'ruff check .';\n facts.hints.push('pyproject.toml');\n } catch {\n // not python\n }\n // go.mod\n try {\n await fs.access(path.join(root, 'go.mod'));\n facts.build ??= 'go build ./...';\n facts.test ??= 'go test ./...';\n facts.hints.push('go.mod');\n } catch {\n // not go\n }\n // Cargo.toml\n try {\n await fs.access(path.join(root, 'Cargo.toml'));\n facts.build ??= 'cargo build';\n facts.test ??= 'cargo test';\n facts.hints.push('Cargo.toml');\n } catch {\n // not rust\n }\n // Makefile — last resort\n try {\n await fs.access(path.join(root, 'Makefile'));\n facts.build ??= 'make';\n facts.test ??= 'make test';\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\nProject notes for WrongStack. Committed to the repo so every contributor\n(human or agent) starts with the same context. Edit freely.\n\n## What this project is\n\n_One paragraph: what does this codebase do, who runs it, what's the\ndeployment target?_\n\n## How to work on it\n\n- **Build:** ${cmd(f.build)}\n- **Test:** ${cmd(f.test)}\n- **Lint:** ${cmd(f.lint)}\n- **Run locally:** ${cmd(f.run)}\n\n## Conventions\n\n_What style choices matter here? Filenames, module layout, naming, error\nhandling, log format. Anything a stranger would get wrong._\n\n## Domain knowledge\n\n_Acronyms, business rules, foot-guns, \"this looks weird but it's\nintentional because…\"._\n\n## Pointers\n\n_Where to look for: routing, database migrations, feature flags,\non-call runbooks, dashboards._\n`;\n}\n\nfunction diagCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'diag',\n description: 'Show runtime diagnostics (provider, tokens, tools, MCP).',\n async run() {\n if (opts.onDiag) {\n opts.onDiag();\n return { message: 'diag' };\n } else {\n return { message: 'Diag not available in this context.' };\n }\n },\n };\n}\n\nfunction statsCommand(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) {\n opts.onStats();\n return { message: 'stats' };\n } else {\n return { message: 'Stats not available in this context.' };\n }\n },\n };\n}\n\nfunction helpCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'help',\n description: 'Show available slash commands.',\n async run() {\n const lines = ['Available slash commands:'];\n for (const { cmd, owner, fullName } of opts.registry.listWithOwner()) {\n const isBuiltin = owner === 'core';\n // Builtins: no prefix. Plugins: prefix shown.\n const prefix = isBuiltin ? '' : `${owner}:`;\n const aliases = cmd.aliases\n ? cmd.aliases.map((a) => `/${prefix}${a}`).join(', ')\n : '';\n const aliasStr = aliases ? ` (${aliases})` : '';\n lines.push(` /${prefix}${cmd.name}${aliasStr} — ${cmd.description}`);\n }\n return { message: lines.join('\\n') };\n },\n };\n}\n\nfunction clearCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'clear',\n description: 'Reset the session and start a new one.',\n async run(_args, ctx) {\n // Clear context: messages, todos, readFiles, fileMtimes\n if (ctx) {\n ctx.messages = [];\n ctx.todos = [];\n ctx.readFiles.clear();\n ctx.fileMtimes.clear();\n ctx.meta = {};\n }\n // Clear memory store (all scopes)\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\nfunction contextCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'context',\n aliases: ['ctx'],\n description: 'Show context window summary.',\n async run(args, ctx) {\n const messages = ctx.messages;\n const detailed = args.trim() === 'detail';\n\n const pairCount = countTurnPairs(messages);\n const estimatedTokens = estimateTokens(messages);\n const toolUseCount = countToolUses(messages);\n const toolResultCount = countToolResults(messages);\n\n const lines = [\n `${color.bold('Context Window')}`,\n ` messages: ${messages.length} total (${pairCount} user+assistant pairs)`,\n ` tokens (≈): ${estimatedTokens.toLocaleString()} (chars ÷ 4 estimate)`,\n ` system prompt: ${ctx.systemPrompt.length} block${ctx.systemPrompt.length !== 1 ? 's' : ''}`,\n ` tools: ${toolUseCount} calls made, ${toolResultCount} 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\n if (detailed) {\n lines.push(` model: ${ctx.model}`);\n lines.push(` cwd: ${ctx.cwd}`);\n lines.push(` projectRoot: ${ctx.projectRoot}`);\n lines.push(` file mtimes: ${ctx.fileMtimes.size} tracked`);\n if (ctx.readFiles.size > 0) {\n lines.push(` file list: ${[...ctx.readFiles].join(', ')}`);\n }\n }\n\n const msg = lines.join('\\n');\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n },\n };\n}\n\nfunction 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\nfunction countToolUses(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n const content = m.content;\n if (Array.isArray(content)) {\n count += content.filter((b) => b.type === 'tool_use').length;\n }\n }\n return count;\n}\n\nfunction countToolResults(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n const content = m.content;\n if (Array.isArray(content)) {\n count += content.filter((b) => b.type === 'tool_result').length;\n }\n }\n return count;\n}\n\nfunction 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 }\n return total;\n}\n\nfunction compactCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'compact',\n description: 'Compact the context window.',\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 msg =\n `Compaction: ${report.before} → ${report.after} tokens (${report.reductions\n .map((r) => `${r.phase}: ${r.saved}`)\n .join(', ')})`;\n opts.renderer.writeInfo(msg);\n return { message: msg };\n },\n };\n}\n\nfunction usageCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'usage',\n aliases: ['cost'],\n description: 'Show token usage and estimated cost.',\n async run() {\n const total = opts.tokenCounter.total();\n const cost = opts.tokenCounter.estimateCost();\n const msg =\n `${color.bold('Usage')}\\n` +\n ` input: ${total.input}\\n` +\n ` output: ${total.output}\\n` +\n ` cache read: ${total.cacheRead ?? 0}\\n` +\n ` cache write: ${total.cacheWrite ?? 0}\\n` +\n ` cost: $${cost.total.toFixed(4)} (input $${cost.input.toFixed(4)} / output $${cost.output.toFixed(4)})\\n`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n\nfunction toolsCommand(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(({ tool, owner }) => {\n return ` ${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\nfunction skillCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill',\n description: 'Show a skill manifest or list skills.',\n async run(args) {\n if (!opts.skillLoader) {\n const msg = 'No skill loader configured.';\n return { message: msg };\n }\n if (!args.trim()) {\n const list = await opts.skillLoader.list();\n if (list.length === 0) {\n const msg = 'No skills found.';\n return { message: msg };\n }\n const lines = list.map((s) => ` ${s.name.padEnd(24)} ${color.dim(`[${s.source}]`)} ${s.description.split('\\n')[0]}`);\n const msg = `Skills:\\n${lines.join('\\n')}\\n`;\n return { message: msg };\n } else {\n const skill = await opts.skillLoader.find(args.trim());\n if (!skill) {\n const msg = `Skill \"${args.trim()}\" not found.`;\n return { message: msg };\n }\n const body = await opts.skillLoader.readBody(skill.name);\n return { message: body };\n }\n },\n };\n}\n\nfunction useCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'use',\n description: 'Switch provider mid-session: /use <provider>',\n async run(args) {\n const name = args.trim();\n if (!name) {\n const msg = 'Usage: /use <provider-name>';\n return { message: msg };\n }\n opts.onSwitchProvider?.(name);\n const msg = `Switched provider to \"${name}\".`;\n return { message: msg };\n },\n };\n}\n\nfunction modelCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'model',\n description: 'Switch model mid-session: /model <model>',\n async run(args) {\n const name = args.trim();\n if (!name) {\n const msg = 'Usage: /model <model-name>';\n return { message: msg };\n }\n opts.onSwitchModel?.(name);\n const msg = `Switched model to \"${name}\".`;\n return { message: msg };\n },\n };\n}\n\nfunction saveCommand(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 const msg = `Session ${ctx.session.id} flushed.`;\n return { message: msg };\n },\n };\n}\n\nfunction loadCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'resume',\n aliases: ['load', 'sessions'],\n description:\n 'List recent sessions. To actually resume, exit and run `wstack resume <id>`.',\n async run() {\n if (!opts.sessionStore) {\n const msg = 'No session store configured.';\n return { message: msg };\n }\n const list = await opts.sessionStore.list(10);\n if (list.length === 0) {\n const msg = 'No saved sessions.';\n return { message: msg };\n }\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 =\n `Recent sessions:\\n${lines.join('\\n')}\\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\nfunction exitCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'exit',\n aliases: ['quit', 'q'],\n description: 'Exit the REPL.',\n async run() {\n opts.onExit?.();\n return { exit: true };\n },\n };\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.js';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport { detectProjectFacts, renderAgentsTemplate } from './slash-commands/index.js';\n\nexport type ProjectKind =\n /** `.wrongstack/AGENTS.md` exists — fully set up. */\n | 'initialized'\n /** Has a recognizable manifest (package.json, pyproject.toml, etc.) but no AGENTS.md yet. */\n | 'project'\n /** No manifest, no AGENTS.md — probably an empty/scratch directory. */\n | 'empty';\n\nconst MANIFESTS = [\n 'package.json',\n 'pyproject.toml',\n 'Cargo.toml',\n 'go.mod',\n 'Makefile',\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n 'composer.json',\n 'Gemfile',\n];\n\nexport async function detectProjectKind(projectRoot: string): Promise<ProjectKind> {\n try {\n await fs.access(path.join(projectRoot, '.wrongstack', 'AGENTS.md'));\n return 'initialized';\n } catch {\n // not initialized\n }\n for (const m of MANIFESTS) {\n try {\n await fs.access(path.join(projectRoot, m));\n return 'project';\n } catch {\n // try next\n }\n }\n return 'empty';\n}\n\nasync function scaffoldAgentsMd(projectRoot: string): Promise<string> {\n const dir = path.join(projectRoot, '.wrongstack');\n const file = path.join(dir, 'AGENTS.md');\n const facts = await detectProjectFacts(projectRoot);\n const body = renderAgentsTemplate(facts);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(file, body, 'utf8');\n return file;\n}\n\n/**\n * Print a one-line project status banner and, when relevant, prompt the\n * user about scaffolding `AGENTS.md` or continuing in a directory that\n * doesn't look like a project. Returns `false` if the user bailed out.\n */\nexport async function runProjectCheck(opts: {\n projectRoot: string;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n}): Promise<boolean> {\n const { projectRoot, renderer, reader } = opts;\n const kind = await detectProjectKind(projectRoot);\n\n if (kind === 'initialized') {\n renderer.write(\n `\\n ${color.green('✓')} Project initialized ${color.dim(`(${path.join(projectRoot, '.wrongstack', 'AGENTS.md')})`)}\\n`,\n );\n return true;\n }\n\n if (kind === 'project') {\n renderer.write(\n `\\n ${color.amber('●')} Project detected ${color.dim(`(${projectRoot})`)} but ${color.bold('.wrongstack/AGENTS.md')} is missing.\\n`,\n );\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} Scaffold ${color.bold('AGENTS.md')} now? ${color.dim('[y/N]')} `,\n )\n ).trim().toLowerCase();\n if (answer === 'y' || answer === 'yes') {\n try {\n const file = await scaffoldAgentsMd(projectRoot);\n renderer.write(` ${color.green('✓')} Wrote ${color.dim(file)}\\n`);\n } catch (err) {\n renderer.writeError(\n `Failed to scaffold AGENTS.md: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n return true;\n }\n\n // 'empty' — no manifest, no AGENTS.md\n renderer.write(\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\n );\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} Continue anyway? ${color.dim('[Y/n]')} `,\n )\n ).trim().toLowerCase();\n if (answer === 'n' || answer === 'no') {\n renderer.write(color.dim(' Cancelled.\\n'));\n return false;\n }\n return true;\n}\n\nexport interface LaunchModeChoices {\n /** TUI or plain REPL. */\n mode: 'tui' | 'repl';\n /** Auto-approve every tool call (no permission prompts). */\n yolo: boolean;\n}\n\n/**\n * Ask for interactive mode (TUI vs REPL) and YOLO. Either prompt is\n * skipped when the corresponding CLI flag was already pinned. Returns\n * the resolved pair.\n */\nexport async function runLaunchPrompts(opts: {\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n modePinned?: 'tui' | 'repl';\n yoloPinned?: boolean;\n}): Promise<LaunchModeChoices> {\n const { renderer, reader, modePinned, yoloPinned } = opts;\n\n let mode: 'tui' | 'repl';\n if (modePinned) {\n mode = modePinned;\n } else {\n const answer = (\n await reader.readLine(\n `\\n ${color.amber('?')} Interactive mode: ${color.bold('T')}UI / ${color.bold('R')}EPL ${color.dim('[T/r]')} `,\n )\n ).trim().toLowerCase();\n mode = answer === 'r' || answer === 'repl' ? 'repl' : 'tui';\n }\n\n let yolo: boolean;\n if (yoloPinned !== undefined) {\n yolo = yoloPinned;\n } else {\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} YOLO mode ${color.dim('(auto-approve every tool call)')} ${color.dim('[y/N]')} `,\n )\n ).trim().toLowerCase();\n yolo = answer === 'y' || answer === 'yes';\n }\n\n renderer.write(\n `\\n ${color.green('▶')} Launching in ${color.bold(mode.toUpperCase())} mode${yolo ? color.yellow(' (YOLO)') : ''}\\n\\n`,\n );\n\n return { mode, yolo };\n}\n","import type { ContentBlock, Renderer, TextBlock } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport { theme } from './theme.js';\nimport { renderDiff } from './diff-renderer.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 = 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(` ${color.dim(`+${moreCount} more line${moreCount === 1 ? '' : 's'}`)}\\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]+)\\*([^*]|$)/g, (_m, l, t, r) => `${l}${color.italic(t)}${r}`);\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\n","import type {\n Agent,\n AttachmentStore,\n SlashCommandRegistry,\n TokenCounter,\n} from '@wrongstack/core';\nimport { InputBuilder, color } from '@wrongstack/core';\nimport { theme } from './theme.js';\nimport type { TerminalRenderer } from './renderer.js';\nimport type { ReadlineInputReader } from './input-reader.js';\n\nexport interface ReplOptions {\n agent: Agent;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n slashRegistry: SlashCommandRegistry;\n attachments: AttachmentStore;\n banner?: boolean;\n tokenCounter?: TokenCounter;\n /** Model-specific max context window (tokens). Used for the context bar in turn summaries. */\n effectiveMaxContext?: number;\n}\n\nexport async function runRepl(opts: ReplOptions): Promise<number> {\n if (opts.banner !== false) printBanner(opts.renderer);\n\n // Per-iteration abort controller — assigned each loop so a Ctrl+C that\n // cancels turn N doesn't leak into turn N+1. `activeCtrl` is updated\n // before each agent.run so the SIGINT handler can target it.\n let activeCtrl: AbortController | undefined;\n let interrupts = 0;\n const onSigint = () => {\n interrupts++;\n if (interrupts >= 2) {\n opts.renderer.writeWarning('Exiting.');\n process.exit(130);\n }\n if (activeCtrl) {\n activeCtrl.abort();\n opts.renderer.writeWarning('Iteration cancelled. Press Ctrl+C again to exit.');\n } else {\n opts.renderer.writeWarning('Press Ctrl+C again to exit.');\n }\n };\n process.on('SIGINT', onSigint);\n\n const builder = new InputBuilder({ store: opts.attachments });\n\n for (;;) {\n let raw: string;\n try {\n raw = await readPossiblyMultiline(opts);\n } catch {\n break; // EOF (Ctrl+D)\n }\n const trimmed = raw.trim();\n if (!trimmed) {\n interrupts = 0;\n continue;\n }\n interrupts = 0;\n\n if (trimmed.startsWith('/')) {\n try {\n const res = await opts.slashRegistry.dispatch(trimmed, opts.agent.ctx);\n if (res?.message) opts.renderer.write(`${res.message}\\n`);\n if (res?.exit) break;\n } catch (err) {\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\n }\n continue;\n }\n\n // Route through InputBuilder so big pastes collapse to placeholders.\n const ph = await builder.appendPaste(raw);\n if (ph) {\n const lineCount = raw.split('\\n').length;\n opts.renderer.write(color.dim(` ↳ ${ph} (${lineCount} lines)\\n`));\n }\n const blocks = await builder.submit();\n\n const runCtrl = new AbortController();\n activeCtrl = runCtrl;\n try {\n const startedAt = Date.now();\n const before = opts.tokenCounter?.total();\n const costBefore = opts.tokenCounter?.estimateCost().total ?? 0;\n const result = await opts.agent.run(blocks, { signal: runCtrl.signal });\n if (result.status === 'aborted') {\n opts.renderer.writeWarning('Aborted.');\n } else if (result.status === 'failed') {\n opts.renderer.writeError(\n `Failed: ${result.error instanceof Error ? result.error.message : String(result.error)}`,\n );\n } else if (result.status === 'max_iterations') {\n opts.renderer.writeWarning(`Hit max iterations (${result.iterations}).`);\n }\n if (opts.tokenCounter && before) {\n const after = opts.tokenCounter.total();\n const costAfter = opts.tokenCounter.estimateCost().total;\n const ctxChip =\n opts.effectiveMaxContext && opts.effectiveMaxContext > 0\n ? ` ctx: ${renderContextChip(after.input, opts.effectiveMaxContext)}`\n : '';\n opts.renderer.write(\n `\\n${color.dim(\n `[in: ${fmtTok(after.input - before.input)} out: ${fmtTok(after.output - before.output)} iters: ${result.iterations} cost: ${(costAfter - costBefore).toFixed(4)} ${((Date.now() - startedAt) / 1000).toFixed(1)}s]${ctxChip}`,\n )}\\n`,\n );\n }\n } catch (err) {\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\n } finally {\n activeCtrl = undefined;\n }\n }\n\n process.off('SIGINT', onSigint);\n await opts.reader.close();\n return 0;\n}\n\n/**\n * Read a line, but support two multiline patterns:\n * 1. Trailing `\\` → continue on the next line (shell-style line continuation).\n * 2. A line that is exactly `\"\"\"` → start a heredoc; keep reading until\n * another bare `\"\"\"`. Useful for pasting code snippets.\n * Returns the assembled text and whether it came from a heredoc block (so\n * the caller can decide to always collapse heredocs as pastes).\n */\nasync function readPossiblyMultiline(opts: ReplOptions): Promise<string> {\n const firstPrompt = theme.primary('› ');\n const contPrompt = color.dim('· ');\n const first = await opts.reader.readLine(firstPrompt);\n\n if (first.trim() === '\"\"\"') {\n const parts: string[] = [];\n for (;;) {\n const next = await opts.reader.readLine(contPrompt);\n if (next.trim() === '\"\"\"') break;\n parts.push(next);\n }\n return parts.join('\\n');\n }\n\n let buf = first;\n while (buf.endsWith('\\\\')) {\n buf = buf.slice(0, -1); // drop the trailing backslash\n const cont = await opts.reader.readLine(contPrompt);\n buf += '\\n' + cont;\n }\n return buf;\n}\n\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\nconst FILLED = '█';\nconst EMPTY = '░';\n\nfunction renderContextChip(used: number, max: number): string {\n const ratio = Math.max(0, Math.min(1, used / max));\n const pct = Math.round(ratio * 100);\n const bar = renderProgress(ratio, 6);\n return `${bar} ${pct}% (${fmtTok(used)}/${fmtTok(max)})`;\n}\n\nfunction renderProgress(ratio: number, width: number): string {\n const clamped = Math.max(0, Math.min(1, ratio));\n const filled = clamped === 0 ? 0 : Math.max(1, Math.round(clamped * width));\n const capped = Math.min(width, filled);\n return FILLED.repeat(capped) + EMPTY.repeat(width - capped);\n}\n\nfunction printBanner(renderer: TerminalRenderer): void {\n const lines = [\n theme.primary(theme.bold('WrongStack')) + color.dim(' v0.0.1'),\n color.dim('Built on the wrong stack. Shipped anyway.'),\n color.dim('Type /help for commands, /exit to quit.'),\n '',\n ];\n renderer.write(`${lines.join('\\n')}\\n`);\n}\n","import type { EventBus, TokenCounter } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.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 render(renderer: TerminalRenderer): void {\n if (!this.hasActivity()) return;\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(` Tokens: in ${fmtTok(u.input)} out ${fmtTok(u.output)}${u.cacheRead ? ` cacheR ${fmtTok(u.cacheRead)}` : ''}${u.cacheWrite ? ` cacheW ${fmtTok(u.cacheWrite)}` : ''}`);\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(` Cost: $${cost.total.toFixed(4)}${color.dim(` (in $${cost.input.toFixed(4)} / out $${cost.output.toFixed(4)})`)}`);\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(` ${name.padEnd(12)} ${String(total).padStart(3)}× ${color.dim(`avg ${avgMs}ms`)}${failPart}`);\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(` read: ${this.readPaths.size} ${color.dim(samplePaths(this.readPaths))}`);\n if (this.editedPaths.size > 0)\n lines.push(` edited: ${this.editedPaths.size} ${color.dim(samplePaths(this.editedPaths))}`);\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(` written: ${this.writtenPaths.size} (${byteStr}) ${color.dim(samplePaths(this.writtenPaths))}`);\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 renderer.write(`${lines.join('\\n')}\\n`);\n }\n}\n\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\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}","import { color } from '@wrongstack/core';\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\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport {\n color,\n atomicWrite,\n rewriteConfigEncrypted,\n type Config,\n type SecretVault,\n type SessionStore,\n type SkillLoader,\n type ToolRegistry,\n type ModelsRegistry,\n type WstackPaths,\n type WireFamily,\n} from '@wrongstack/core';\nimport type { TerminalRenderer } from '../renderer.js';\nimport type { ReadlineInputReader } from '../input-reader.js';\n\nexport type SubcommandHandler = (args: string[], deps: SubcommandDeps) => Promise<number>;\n\nexport interface SubcommandDeps {\n config: Config;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n sessionStore?: SessionStore;\n skillLoader?: SkillLoader;\n toolRegistry?: ToolRegistry;\n modelsRegistry: ModelsRegistry;\n paths: WstackPaths;\n vault: SecretVault;\n cwd: string;\n projectRoot: string;\n userHome: string;\n}\n\nexport const subcommands: Record<string, SubcommandHandler> = {\n init: initCmd,\n auth: authCmd,\n // `resume <id>` is special-cased in src/index.ts: it's lifted into\n // `--resume <id>` so the normal REPL bootstrap runs with a pre-loaded\n // session. There is no standalone subcommand handler.\n sessions: sessionsCmd,\n config: configCmd,\n tools: toolsCmd,\n skills: skillsCmd,\n providers: providersCmd,\n models: modelsCmd,\n mcp: mcpCmd,\n plugin: pluginCmd,\n diag: diagCmd,\n usage: usageCmd,\n version: versionCmd,\n help: helpCmd,\n projects: projectsCmd,\n};\n\n/**\n * Store an API key for a provider in the global config, encrypted at rest.\n * Usage: `wstack auth <providerId> [--family <fam>] [--base-url <url>]`\n *\n * If the provider is in the models.dev catalog, family/baseUrl come from\n * there. For custom providers, pass them via flags — that's the only way\n * to make the system fully offline-capable.\n */\nasync function authCmd(args: string[], deps: SubcommandDeps): Promise<number> {\n const flags = parseAuthFlags(args);\n let providerId = flags.positional[0];\n if (!providerId) {\n providerId = (await deps.reader.readLine('Provider id: ')).trim();\n }\n if (!providerId) {\n deps.renderer.writeError('Provider id is required.');\n return 1;\n }\n\n let family: WireFamily | undefined = flags.family;\n let baseUrl: string | undefined = flags.baseUrl;\n let envVars: string[] | undefined = flags.envVars;\n\n // If catalog knows this provider, use its defaults — but flags still win.\n try {\n const known = await deps.modelsRegistry.getProvider(providerId);\n if (known) {\n if (!family) family = known.family;\n if (!baseUrl) baseUrl = known.apiBase;\n if (!envVars) envVars = known.envVars;\n }\n } catch {\n // catalog unavailable — that's fine, user can pass --family\n }\n\n if (!family) {\n deps.renderer.writeError(\n `Provider \"${providerId}\" not in catalog. Pass --family <anthropic|openai|openai-compatible|google> to register it manually.`,\n );\n return 1;\n }\n\n const apiKey = (\n await deps.reader.readSecret(\n `API key for ${providerId} (hidden, stored encrypted in ${deps.paths.globalConfig}): `,\n )\n ).trim();\n if (!apiKey) {\n deps.renderer.writeError('No key entered. Nothing saved.');\n return 1;\n }\n\n const patch = {\n providers: {\n [providerId]: {\n type: providerId,\n apiKey,\n family,\n ...(baseUrl ? { baseUrl } : {}),\n ...(envVars && envVars.length > 0 ? { envVars } : {}),\n },\n },\n };\n try {\n await rewriteConfigEncrypted(deps.paths.globalConfig, deps.vault, patch);\n deps.renderer.writeInfo(`Stored encrypted key for ${providerId}.`);\n deps.renderer.writeInfo(`Use: wstack --provider ${providerId} \"<task>\"`);\n return 0;\n } catch (err) {\n deps.renderer.writeError(`auth: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n}\n\ninterface AuthFlags {\n positional: string[];\n family?: WireFamily;\n baseUrl?: string;\n envVars?: string[];\n}\n\nfunction parseAuthFlags(args: string[]): AuthFlags {\n const out: AuthFlags = { positional: [] };\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a === '--family') {\n const v = args[++i];\n if (v) out.family = v as WireFamily;\n } else if (a === '--base-url') {\n const v = args[++i];\n if (v) out.baseUrl = v;\n } else if (a === '--env') {\n const v = args[++i];\n if (v) out.envVars = v.split(',').map((s) => s.trim()).filter(Boolean);\n } else if (a && !a.startsWith('--')) {\n out.positional.push(a);\n }\n }\n return out;\n}\n\nasync function initCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n deps.renderer.write(color.bold('WrongStack init\\n'));\n deps.renderer.writeInfo('Loading provider catalog from models.dev (cached locally)…');\n\n let providers;\n try {\n providers = await deps.modelsRegistry.listProviders();\n } catch (err) {\n deps.renderer.writeError(\n `Failed to load provider catalog: ${err instanceof Error ? err.message : err}`,\n );\n return 1;\n }\n\n // Prefer providers whose env var is already set, then anthropic/openai/google as common defaults.\n const detected = providers\n .filter((p) => p.family !== 'unsupported')\n .filter((p) => p.envVars.some((v) => process.env[v]));\n const ranked =\n detected.length > 0\n ? detected\n : providers.filter((p) => ['anthropic', 'openai', 'google'].includes(p.id));\n\n if (detected.length > 0) {\n deps.renderer.write(`Detected API keys for: ${detected.map((p) => p.name).join(', ')}\\n`);\n }\n\n const defaultId = ranked[0]?.id ?? 'anthropic';\n const providerId =\n (await deps.reader.readLine(`Provider [${defaultId}]: `)).trim() || defaultId;\n\n const provider = await deps.modelsRegistry.getProvider(providerId);\n if (!provider) {\n deps.renderer.writeError(`Provider \"${providerId}\" not found in models.dev catalog.`);\n return 1;\n }\n if (provider.family === 'unsupported') {\n deps.renderer.writeError(\n `Provider \"${providerId}\" uses ${provider.npm} which has no built-in transport. Install a plugin to enable it.`,\n );\n return 1;\n }\n\n const suggestedModel = (await deps.modelsRegistry.suggestModel(providerId)) ?? '';\n const modelHint = suggestedModel ? ` [${suggestedModel}]` : '';\n const modelId =\n (await deps.reader.readLine(`Model${modelHint}: `)).trim() || suggestedModel;\n if (!modelId) {\n deps.renderer.writeError('No model selected. Aborting.');\n return 1;\n }\n\n // Find any existing env value\n const envHit = provider.envVars.map((v) => process.env[v]).find(Boolean);\n let apiKey = '';\n if (!envHit) {\n apiKey = (\n await deps.reader.readLine(\n `API key (stored in ${deps.paths.globalConfig}; empty = expect ${provider.envVars[0] ?? 'env var'}): `,\n )\n ).trim();\n } else {\n deps.renderer.writeInfo(`Found API key in env (${provider.envVars.join(' / ')}).`);\n }\n\n await fs.mkdir(deps.paths.globalRoot, { recursive: true });\n const config: Partial<Config> = {\n version: 1,\n provider: providerId,\n model: modelId,\n };\n if (apiKey) config.apiKey = apiKey;\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(config, null, 2));\n\n // Project-local committed marker (opt-in)\n await fs.mkdir(path.join(deps.projectRoot, '.wrongstack'), { recursive: true });\n const agentsFile = path.join(deps.projectRoot, '.wrongstack', 'AGENTS.md');\n try {\n await fs.access(agentsFile);\n } catch {\n await atomicWrite(\n agentsFile,\n '# Project notes for WrongStack\\n\\nWrite project-specific conventions, build commands,\\nand domain knowledge here. This file is committed to git.\\n',\n );\n }\n\n deps.renderer.writeInfo(`Wrote ${deps.paths.globalConfig}`);\n deps.renderer.writeInfo(`Project state lives in ${deps.paths.projectDir}`);\n deps.renderer.writeInfo('Try: wstack \"<task>\" or wstack');\n return 0;\n}\n\nasync function sessionsCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n if (!deps.sessionStore) {\n deps.renderer.writeError('No session store available.');\n return 1;\n }\n const list = await deps.sessionStore.list(20);\n if (list.length === 0) {\n deps.renderer.write('No sessions found.\\n');\n return 0;\n }\n for (const s of list) {\n deps.renderer.write(\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}\\n`,\n );\n }\n return 0;\n}\n\nasync function configCmd(args: string[], deps: SubcommandDeps): Promise<number> {\n const sub = args[0];\n if (!sub || sub === 'show') {\n const redacted = redactKeys(deps.config);\n deps.renderer.write(JSON.stringify(redacted, null, 2) + '\\n');\n return 0;\n }\n if (sub === 'edit') {\n const editor = process.env['EDITOR'] ?? 'vi';\n deps.renderer.write(`Run: ${editor} ${deps.paths.globalConfig}\\n`);\n return 0;\n }\n deps.renderer.writeError(`Unknown config subcommand: ${sub}`);\n return 1;\n}\n\nasync function toolsCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\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 }\n return 0;\n}\n\nasync function skillsCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\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 }\n return 0;\n}\n\nasync function providersCmd(args: string[], deps: SubcommandDeps): Promise<number> {\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\n const families: WireFamily[] = showUnsupported\n ? ['unsupported']\n : showAll\n ? ['anthropic', 'openai', 'google', 'openai-compatible', 'unsupported']\n : ['anthropic', 'openai', 'google', 'openai-compatible'];\n\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\nasync function modelsCmd(args: string[], deps: SubcommandDeps): Promise<number> {\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 const provider = await deps.modelsRegistry.getProvider(providerId);\n if (!provider) {\n deps.renderer.writeError(`Provider \"${providerId}\" not in catalog.`);\n return 1;\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 sorted = [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n for (const m of sorted) {\n const caps: string[] = [];\n if (m.tool_call) caps.push('tools');\n if (m.reasoning) caps.push('reasoning');\n if (m.modalities?.input?.includes('image')) caps.push('vision');\n const ctx = m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k` : '?';\n const cost = 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\nasync function mcpCmd(args: string[], deps: SubcommandDeps): Promise<number> {\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 return 0;\n }\n for (const [name, cfg] of Object.entries(servers)) {\n deps.renderer.write(\n ` ${name.padEnd(20)} ${cfg.transport} ${cfg.enabled === false ? 'disabled' : 'enabled'}\\n`,\n );\n }\n return 0;\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 pluginCmd(args: string[], deps: SubcommandDeps): Promise<number> {\n const sub = args[0];\n if (!sub || sub === 'list') {\n const plugins = deps.config.plugins ?? [];\n if (plugins.length === 0) {\n deps.renderer.write('No plugins configured.\\n');\n return 0;\n }\n for (const p of plugins) {\n const name = typeof p === 'string' ? p : p.name;\n const enabled = typeof p === 'object' && p.enabled === false ? 'disabled' : 'enabled';\n deps.renderer.write(` ${name} ${enabled}\\n`);\n }\n return 0;\n }\n deps.renderer.writeWarning(`plugin ${sub} not implemented (edit config.plugins manually).`);\n return 0;\n}\n\nasync function diagCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n const cfg = deps.config;\n const age = await deps.modelsRegistry.ageSeconds();\n const lines = [\n color.bold('WrongStack diagnostics'),\n ` apiVersion: 0.0.1`,\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\nasync function usageCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n if (!deps.sessionStore) return 0;\n const list = await deps.sessionStore.list(100);\n let totalIn = 0;\n for (const s of list) totalIn += s.tokenTotal;\n deps.renderer.write(`Sessions: ${list.length} total tokens: ${totalIn}\\n`);\n return 0;\n}\n\nasync function versionCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n deps.renderer.write(\n `WrongStack 0.0.1 (apiVersion 0.0.1, node ${process.version}, ${os.platform()})\\n`,\n );\n return 0;\n}\n\nasync function helpCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n const lines = [\n color.bold('WrongStack — usage'),\n '',\n ' wstack Start REPL',\n ' wstack \"<task>\" Run task and exit',\n ' wstack resume [<id>] Resume a session',\n ' wstack sessions List recent sessions',\n ' wstack init Pick provider + model from models.dev',\n ' wstack auth <provider> Store API key (encrypted at rest)',\n ' wstack resume <id> Resume a session (loads transcript + appends)',\n ' wstack config [show|edit] Show or edit effective config',\n ' wstack tools List registered tools',\n ' wstack skills List discovered skills',\n ' wstack providers [--all] List providers from models.dev',\n ' wstack models [<provider>] List models for current/specified provider',\n ' wstack models refresh Force-refresh models.dev cache',\n ' wstack mcp [list] List MCP servers',\n ' wstack plugin [list] List plugins',\n ' wstack projects List projects tracked in ~/.wrongstack/projects/',\n ' wstack diag Full diagnostics',\n ' wstack usage Token + cost summary',\n ' wstack version Print version',\n '',\n 'Global flags:',\n ' --provider, --model, --cwd, --log-level, --yolo, --verbose, --trace, --config',\n ];\n deps.renderer.write(lines.join('\\n') + '\\n');\n return 0;\n}\n\nasync function projectsCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\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\nfunction 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 {\n out[k] = redactKeys(v);\n }\n }\n return out;\n}\n","import * as fs from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport {\n Agent,\n AutoCompactionMiddleware,\n type Config,\n Container,\n Context,\n DefaultAttachmentStore,\n DefaultConfigLoader,\n DefaultErrorHandler,\n DefaultLogger,\n DefaultMemoryStore,\n DefaultModelsRegistry,\n DefaultPathResolver,\n DefaultPermissionPolicy,\n DefaultRetryPolicy,\n DefaultSecretScrubber,\n DefaultSecretVault,\n DefaultSessionStore,\n DefaultSkillLoader,\n DefaultSystemPromptBuilder,\n DefaultTokenCounter,\n EventBus,\n HybridCompactor,\n type Plugin,\n ProviderRegistry,\n QueueStore,\n RecoveryLock,\n SlashCommandRegistry,\n type SystemPromptBuilder,\n TOKENS,\n ToolRegistry,\n type WstackPaths,\n color,\n createContextManagerTool,\n createDefaultPipelines,\n loadPlugins,\n migratePlaintextSecrets,\n resolveWstackPaths,\n} from '@wrongstack/core';\nimport { MCPRegistry } from '@wrongstack/mcp';\nimport {\n buildProviderFactoriesFromRegistry,\n capabilitiesFor,\n makeProviderFromConfig,\n} from '@wrongstack/providers';\nimport { builtinTools, forgetTool, rememberTool } from '@wrongstack/tools';\nimport { ReadlineInputReader } from './input-reader.js';\nimport { makePromptDelegate } from './permission-prompt.js';\nimport { runPicker, saveToGlobalConfig } from './picker.js';\nimport { runLaunchPrompts, runProjectCheck } from './pre-launch.js';\nimport { TerminalRenderer } from './renderer.js';\nimport { runRepl } from './repl.js';\nimport { SessionStats } from './session-stats.js';\nimport { buildBuiltinSlashCommands } from './slash-commands/index.js';\nimport { Spinner } from './spinner.js';\nimport { subcommands } from './subcommands/index.js';\n\ninterface ParsedArgs {\n flags: Record<string, string | boolean>;\n positional: string[];\n}\n\nconst BOOLEAN_FLAGS = new Set([\n 'yolo',\n 'verbose',\n 'trace',\n 'help',\n 'version',\n 'no-banner',\n 'no-features',\n 'tui',\n 'no-tui',\n 'no-recovery',\n 'recover',\n 'no-alt-screen',\n 'alt-screen',\n 'output-json',\n 'prompt',\n]);\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const flags: Record<string, string | boolean> = {};\n const positional: string[] = [];\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (!a) continue;\n if (a === '--') {\n positional.push(...argv.slice(i + 1));\n break;\n }\n if (a.startsWith('--')) {\n const eq = a.indexOf('=');\n if (eq !== -1) {\n flags[a.slice(2, eq)] = a.slice(eq + 1);\n continue;\n }\n const name = a.slice(2);\n if (BOOLEAN_FLAGS.has(name)) {\n flags[name] = true;\n continue;\n }\n if (i + 1 < argv.length && !(argv[i + 1] ?? '').startsWith('-')) {\n flags[name] = argv[++i] ?? '';\n } else {\n flags[name] = true;\n }\n } else if (a.startsWith('-') && a.length === 2) {\n const short = a.slice(1);\n const expand: Record<string, string> = { v: 'verbose' };\n flags[expand[short] ?? short] = true;\n } else {\n positional.push(a);\n }\n }\n return { flags, positional };\n}\n\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\nfunction resolveBundledSkillsDir(): string | undefined {\n try {\n const req = createRequire(import.meta.url);\n const corePkg = req.resolve('@wrongstack/core/package.json');\n return path.join(path.dirname(corePkg), 'skills');\n } catch {\n return undefined;\n }\n}\n\n/**\n * Read this package's own version at module load. Tries the\n * compiled-adjacent package.json (dist sibling) first and falls back\n * to walking up from src/ for the dev/test path. Returns \"dev\" when\n * neither resolves so the startup banner never shows blank.\n */\nfunction readOwnVersion(): 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\nconst CLI_VERSION = readOwnVersion();\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\nexport async function main(argv: string[]): Promise<number> {\n const { flags, positional } = parseArgs(argv);\n\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 // `wstack resume <id>` is sugar for `wstack --resume <id>`. Lift it\n // before subcommand dispatch so resume falls through to the normal\n // REPL flow with the session pre-loaded.\n if (positional[0] === 'resume' && positional[1] && !subcommands['__noop_resume_marker']) {\n flags['resume'] = positional[1];\n positional.splice(0, 2);\n }\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 let config: Config;\n try {\n config = await configLoader.load({ cliFlags: flagsToConfigPatch(flags) });\n } catch (err) {\n process.stderr.write(`Config error: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 2;\n }\n\n // Logger — operational log lives in user home\n const logger = new DefaultLogger({\n level: config.log.level,\n file: wpaths.logFile,\n });\n const renderer = new TerminalRenderer();\n const reader = new ReadlineInputReader({ historyFile: wpaths.historyFile });\n\n // ModelsRegistry — source of truth for providers, models, pricing.\n const modelsRegistry = new DefaultModelsRegistry({\n cacheFile: wpaths.modelsCache,\n ttlSeconds: 24 * 3600,\n });\n\n // Quick path: subcommand dispatch (no provider required for most)\n const first = positional[0];\n if (first && subcommands[first]) {\n const sessionStore = new DefaultSessionStore({ dir: wpaths.projectSessions });\n const skillLoader = new DefaultSkillLoader({\n paths: wpaths,\n bundledDir: resolveBundledSkillsDir(),\n });\n const toolRegistryForSubcmd = new ToolRegistry();\n for (const t of builtinTools) toolRegistryForSubcmd.register(t);\n const code = await subcommands[first]!(positional.slice(1), {\n config,\n renderer,\n reader,\n sessionStore,\n skillLoader,\n toolRegistry: toolRegistryForSubcmd,\n modelsRegistry,\n paths: wpaths,\n vault,\n cwd,\n projectRoot,\n userHome,\n });\n await reader.close();\n return code;\n }\n\n // Determine the launch shape up front so the pre-launch prompts (project\n // check + mode + yolo) only fire when this is actually an interactive\n // session. Single-shot invocations (`wrongstack \"do X\"` / `--prompt`) and\n // non-TTY pipes (CI) skip all the interactive sugar.\n const isSingleShot = positional.length > 0 || typeof flags['prompt'] === 'string';\n const isInteractiveTTY = !!process.stdin.isTTY && !isSingleShot;\n\n // Project status banner + optional AGENTS.md scaffold. Returns false\n // when the user bails out of an empty/scratch directory.\n if (isInteractiveTTY) {\n const cont = await runProjectCheck({ projectRoot, renderer, reader });\n if (!cont) {\n await reader.close();\n return 0;\n }\n }\n\n // Identity selection. We launch the interactive picker whenever the user\n // didn't pin BOTH provider and model on the CLI (--provider AND --model).\n // The picker pre-selects whatever the config has so Enter accepts the\n // previous choice — switching models becomes \"wstack ↵ ↵\" most days.\n //\n // Non-TTY (pipes, CI) skips the picker: it falls back to whatever's in\n // config and hard-errors if that's still empty.\n const providerFlag = typeof flags['provider'] === 'string' ? flags['provider'] : undefined;\n const modelFlag = typeof flags['model'] === 'string' ? flags['model'] : undefined;\n const bothFlagsPinned = !!providerFlag && !!modelFlag;\n if (!bothFlagsPinned) {\n if (process.stdin.isTTY) {\n const picked = await runPicker({\n modelsRegistry,\n renderer,\n reader,\n config,\n defaultProvider: providerFlag ?? config.provider,\n defaultModel: modelFlag ?? config.model,\n });\n if (!picked) {\n // User bailed out and we have no fallback in config — error out.\n if (!config.provider || !config.model) {\n await reader.close();\n return 2;\n }\n // Otherwise honor the cancel by keeping the config defaults.\n } else {\n // Persist as the new default so next launch pre-selects this pair.\n // Read-before-replace so we can tell whether anything actually\n // changed — re-saving the same pair every launch is just noise.\n const prevProvider = config.provider;\n const prevModel = config.model;\n\n // The loader hands back a frozen Config. Rebuild a fresh object\n // with the picked pair patched in (and re-freeze) instead of\n // mutating in place — Object.freeze blocks runtime writes even\n // when a TS cast hides it from the compiler.\n config = Object.freeze({ ...config, provider: picked.provider, model: picked.model });\n\n if (picked.provider !== prevProvider || picked.model !== prevModel) {\n const saved = await saveToGlobalConfig(\n wpaths.globalConfig,\n picked.provider,\n picked.model,\n );\n if (saved) {\n renderer.writeInfo(`Saved ${picked.provider}/${picked.model} as default.\\n`);\n }\n }\n }\n } else if (!config.provider || !config.model) {\n process.stderr.write(\n 'No provider or model configured. Run `wrongstack init` first, or pass ' +\n '--provider <id> --model <id>.\\n',\n );\n await reader.close();\n return 2;\n }\n // Non-TTY with config present: fall through using config defaults.\n }\n\n // Interactive mode + YOLO prompts. Each prompt is skipped when the user\n // already pinned the corresponding flag (--tui / --no-tui / --yolo) on\n // the CLI; otherwise we ask. The chosen values are written back to\n // `flags` and `config` so the rest of the boot sequence (permission\n // policy, REPL-vs-TUI branch) reads them naturally.\n if (isInteractiveTTY) {\n let modePinned: 'tui' | 'repl' | undefined;\n if (flags['no-tui']) modePinned = 'repl';\n else if (flags['tui']) modePinned = 'tui';\n const yoloPinned: boolean | undefined = flags['yolo'] === true ? true : undefined;\n\n const choices = await runLaunchPrompts({ renderer, reader, modePinned, yoloPinned });\n\n // Propagate mode → the REPL/TUI branch later reads flags.tui / flags['no-tui'].\n if (choices.mode === 'tui') {\n flags['tui'] = true;\n flags['no-tui'] = false;\n } else {\n flags['tui'] = false;\n flags['no-tui'] = true;\n }\n // Propagate yolo → permission policy reads config.yolo. Config is\n // frozen so we rebuild (same pattern as the picker patch above).\n if (choices.yolo !== config.yolo) {\n config = Object.freeze({ ...config, yolo: choices.yolo });\n }\n }\n\n // Resolve provider details from models.dev\n const resolvedProvider = await modelsRegistry.getProvider(config.provider).catch(() => undefined);\n if (!resolvedProvider) {\n logger.warn(\n `Provider \"${config.provider}\" not found in models.dev. Continuing with raw config.`,\n );\n } else if (resolvedProvider.family === 'unsupported') {\n process.stderr.write(\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 );\n await reader.close();\n return 2;\n }\n\n // Build container + services\n const container = new Container();\n container.bind(TOKENS.Logger, () => logger);\n container.bind(TOKENS.PathResolver, () => pathResolver);\n container.bind(TOKENS.SecretScrubber, () => new DefaultSecretScrubber());\n container.bind(TOKENS.RetryPolicy, () => new DefaultRetryPolicy());\n container.bind(TOKENS.ErrorHandler, () => new DefaultErrorHandler());\n container.bind(TOKENS.ModelsRegistry, () => modelsRegistry);\n container.bind(\n TOKENS.TokenCounter,\n () => new DefaultTokenCounter({ registry: modelsRegistry, providerId: config.provider }),\n );\n container.bind(\n TOKENS.SessionStore,\n () => new DefaultSessionStore({ dir: wpaths.projectSessions }),\n );\n const memoryStore = new DefaultMemoryStore({ paths: wpaths });\n container.bind(TOKENS.MemoryStore, () => memoryStore);\n // Skills are an opt-in feature pack — when disabled we still bind a\n // loader that returns an empty list so the prompt builder doesn't\n // need a special path. This way `--no-features` doesn't drift behaviour.\n const skillLoader = new DefaultSkillLoader({\n paths: wpaths,\n bundledDir: config.features.skills ? resolveBundledSkillsDir() : undefined,\n });\n container.bind(TOKENS.SkillLoader, () => skillLoader);\n container.bind(\n TOKENS.SystemPromptBuilder,\n () =>\n new DefaultSystemPromptBuilder({\n memoryStore,\n skillLoader: config.features.skills ? skillLoader : undefined,\n }),\n );\n container.bind(TOKENS.Renderer, () => renderer);\n container.bind(TOKENS.InputReader, () => reader);\n container.bind(\n TOKENS.PermissionPolicy,\n () =>\n new DefaultPermissionPolicy({\n trustFile: wpaths.projectTrust,\n yolo: config.yolo,\n promptDelegate: makePromptDelegate(reader),\n }),\n );\n container.bind(\n TOKENS.Compactor,\n () =>\n new HybridCompactor({\n preserveK: config.context.preserveK,\n eliseThreshold: config.context.eliseThreshold,\n }),\n );\n\n // Provider registry — populated dynamically from models.dev catalog\n // when enabled. With features.modelsRegistry=false we don't touch the\n // network at boot and rely on the user's config to declare the wire\n // family explicitly (see makeProviderFromConfig path below).\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 process.stderr.write(\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 await reader.close();\n return 2;\n }\n }\n\n // Tool registry\n const toolRegistry = new ToolRegistry();\n for (const t of builtinTools) toolRegistry.register(t);\n toolRegistry.registerDefault(\n createContextManagerTool({ compactor: container.resolve(TOKENS.Compactor) }),\n );\n if (config.features.memory) {\n toolRegistry.register(rememberTool(memoryStore));\n toolRegistry.register(forgetTool(memoryStore));\n }\n\n const events = new EventBus();\n events.setLogger(logger);\n\n // Spinner: visible \"thinking…\" line during each model request.\n const spinner = new Spinner();\n // Track the latest provider request's input-token count so the spinner\n // can render a live context-window fullness bar (TUI parity).\n let lastInputTokens = 0;\n events.on('provider.response', (e) => {\n lastInputTokens = e.usage?.input ?? 0;\n updateSpinnerContext();\n });\n events.on('iteration.started', () => {\n updateSpinnerContext();\n spinner.start(color.dim(`${config.provider}/${config.model} thinking…`));\n });\n events.on('provider.response', () => {\n spinner.stop();\n });\n events.on('error', () => {\n spinner.stop();\n });\n\n // Live streaming output: first text_delta stops the spinner and starts\n // writing tokens directly so the user sees the model \"type\".\n let streamingActive = false;\n events.on('provider.text_delta', (p) => {\n if (!streamingActive) {\n spinner.stop();\n streamingActive = true;\n }\n renderer.write(p.text);\n });\n events.on('iteration.completed', () => {\n if (streamingActive) {\n renderer.write('\\n');\n streamingActive = false;\n }\n });\n\n // Provider hiccups — render a single friendly line instead of leaving the\n // raw JSON body in logger output. retry events show a countdown; error\n // events surface a final failure that won't be retried.\n events.on('provider.retry', (p) => {\n spinner.stop();\n if (streamingActive) {\n renderer.write('\\n');\n streamingActive = false;\n }\n const secs = (p.delayMs / 1000).toFixed(p.delayMs >= 1000 ? 1 : 2);\n process.stderr.write(color.yellow(` ⟳ retry ${p.attempt} in ${secs}s — ${p.description}\\n`));\n spinner.start(color.dim(`${config.provider}/${config.model} thinking…`));\n });\n events.on('provider.error', (p) => {\n spinner.stop();\n if (streamingActive) {\n renderer.write('\\n');\n streamingActive = false;\n }\n process.stderr.write(color.red(` ✗ ${p.description}\\n`));\n });\n\n // Provider instance — registry-driven by default, but falls through to\n // config-only construction when the catalog is unavailable (or the\n // user explicitly disabled it).\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 if (config.features.modelsRegistry) {\n provider = providerRegistry.create({ ...providerConfig, type: config.provider });\n } else {\n provider = makeProviderFromConfig(config.provider, {\n ...providerConfig,\n type: config.provider,\n });\n }\n } catch (err) {\n process.stderr.write(\n `Failed to create provider: ${err instanceof Error ? err.message : err}\\n`,\n );\n await reader.close();\n return 2;\n }\n\n // Build system prompt\n const promptBuilder = container.resolve(TOKENS.SystemPromptBuilder) as SystemPromptBuilder;\n const systemPrompt = await promptBuilder.build({\n cwd,\n projectRoot,\n tools: toolRegistry.list(),\n provider: config.provider,\n model: config.model,\n });\n\n // Session — fresh by default, or resumed from disk if --resume <id> was passed.\n const sessionStore = container.resolve(TOKENS.SessionStore);\n let resumeId = typeof flags['resume'] === 'string' ? flags['resume'] : undefined;\n\n // Crash recovery: if the last interactive run was killed mid-flight,\n // its `active.json` lockfile is still on disk and the session has no\n // `session_end` event. Offer to resume it before opening a fresh one.\n // Skipped when the user explicitly chose `--resume <id>` or asked to\n // bypass with `--no-recovery`.\n const recoveryLock = new RecoveryLock({\n dir: wpaths.projectSessions,\n sessionStore,\n });\n if (!resumeId && !flags['no-recovery']) {\n const abandoned = await recoveryLock.checkAbandoned();\n if (abandoned && abandoned.messageCount > 0) {\n const choice = await promptRecovery(reader, renderer, abandoned, !!flags['recover']);\n if (choice === 'resume') {\n resumeId = abandoned.sessionId;\n } else if (choice === 'delete') {\n await sessionStore.delete(abandoned.sessionId).catch(() => undefined);\n await recoveryLock.clear();\n } else {\n // 'skip' — leave the file on disk, just clear the lock so we\n // don't ask again every launch.\n await recoveryLock.clear();\n }\n } else if (abandoned) {\n // Empty session (no real work done) — silently discard.\n await sessionStore.delete(abandoned.sessionId).catch(() => undefined);\n await recoveryLock.clear();\n }\n }\n\n let session;\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(\n `Resumed session ${resumed.data.metadata.id} — ${restoredMessages.length} messages, ${resumed.data.usage.input + resumed.data.usage.output} tokens used previously.`,\n );\n } catch (err) {\n renderer.writeError(`Resume failed: ${err instanceof Error ? err.message : String(err)}`);\n return 2;\n }\n } else {\n session = await sessionStore.create({\n id: '',\n title: '',\n model: config.model,\n provider: config.provider,\n });\n }\n\n // Claim the lock for this session. Released in the finally block below.\n await recoveryLock.write(session.id).catch(() => undefined);\n\n // Attachment store: per-session, spooled under sessions/<id>/attachments/.\n const attachments = new DefaultAttachmentStore({\n spoolDir: path.join(wpaths.projectSessions, session.id, 'attachments'),\n });\n\n // Queue persistence (TUI only — the REPL has no concurrent input).\n // Lives next to attachments so deleting the session dir cleans both.\n const queueStore = new QueueStore({\n dir: path.join(wpaths.projectSessions, session.id),\n });\n\n const tokenCounter = container.resolve(TOKENS.TokenCounter);\n\n // Session stats tracker — subscribes to events; rendered at the end.\n const stats = new SessionStats(events, tokenCounter);\n\n const ctxSignal = new AbortController().signal;\n const context = new Context({\n systemPrompt,\n provider,\n session,\n signal: ctxSignal,\n tokenCounter,\n cwd,\n projectRoot,\n model: config.model,\n });\n // Hydrate the transcript when resuming so the model sees the prior\n // conversation. Order is preserved from the JSONL log.\n if (restoredMessages.length > 0) {\n context.messages.push(...restoredMessages);\n }\n\n const pipelines = createDefaultPipelines();\n\n // Resolve compactor — bound earlier (strategy-aware binding moved before provider creation)\n const compactor = container.resolve(TOKENS.Compactor);\n\n // Auto-compaction: monitor token load and compact when thresholds are crossed.\n // Skipped when config.context.autoCompact is false.\n //\n // Resolve the *model-specific* maxContext via the registry — the\n // provider object only knows its family default (e.g. anthropic =\n // 200k), which is wrong for variants like Claude Opus 4.7 with the\n // 1M-context beta. Falls back to the provider baseline when the\n // registry can't resolve the model.\n const resolvedCaps = await capabilitiesFor(modelsRegistry, config.provider, context.model).catch(\n () => undefined,\n );\n const effectiveMaxContext =\n config.context.effectiveMaxContext ??\n resolvedCaps?.maxContext ??\n provider.capabilities.maxContext;\n\n // Helper: keep the spinner's context chip in sync with the latest\n // provider response and the resolved max-context ceiling.\n const updateSpinnerContext = () => {\n if (effectiveMaxContext > 0 && lastInputTokens > 0) {\n spinner.setContext({ used: lastInputTokens, max: effectiveMaxContext });\n } else {\n spinner.setContext(undefined);\n }\n };\n\n if (config.context.autoCompact !== false) {\n const autoCompactor = new AutoCompactionMiddleware(\n compactor,\n effectiveMaxContext,\n (ctx) => {\n const msgs = ctx.messages;\n let total = 0;\n for (const m of msgs) {\n if (typeof m.content === 'string') total += Math.ceil(m.content.length / 4);\n else if (Array.isArray(m.content)) {\n for (const b of m.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 }\n return total;\n },\n {\n warn: config.context.warnThreshold,\n soft: config.context.softThreshold,\n hard: config.context.hardThreshold,\n },\n 'soft',\n );\n pipelines.contextWindow.use({\n name: 'AutoCompaction',\n handler: autoCompactor.handler(),\n });\n }\n\n const agent = new Agent({\n container,\n tools: toolRegistry,\n providers: providerRegistry,\n events,\n pipelines,\n context,\n maxIterations: config.tools.maxIterations,\n iterationTimeoutMs: config.tools.iterationTimeoutMs,\n executionStrategy: config.tools.defaultExecutionStrategy,\n perIterationOutputCapBytes: config.tools.perIterationOutputCapBytes,\n });\n\n // MCP servers\n const mcpRegistry = new MCPRegistry({ toolRegistry, events, log: logger });\n if (config.features.mcp) {\n for (const cfg of Object.values(config.mcpServers ?? {})) {\n try {\n await mcpRegistry.start(cfg);\n } catch (err) {\n logger.warn(`MCP server \"${cfg.name}\" failed to start`, err);\n }\n }\n }\n\n // Slash registry — created before plugins so plugins can register commands.\n const slashRegistry = new SlashCommandRegistry();\n\n // Plugins\n if (config.features.plugins && config.plugins && config.plugins.length > 0) {\n const resolvedPlugins: Plugin[] = [];\n for (const p of config.plugins) {\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 logger.warn(`Plugin \"${spec}\" failed to load`, err);\n }\n }\n if (resolvedPlugins.length > 0) {\n const { default: createApi } = await import('./plugin-api-factory.js');\n await loadPlugins(resolvedPlugins, {\n log: logger,\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: slashRegistry,\n mcpRegistry,\n config,\n log: logger,\n }),\n });\n }\n }\n\n const slashCmds = buildBuiltinSlashCommands({\n registry: slashRegistry,\n toolRegistry,\n compactor: container.resolve(TOKENS.Compactor),\n sessionStore,\n skillLoader,\n tokenCounter,\n renderer,\n memoryStore,\n context,\n onExit: () => {\n void mcpRegistry.stopAll();\n },\n onClear: () => {\n // Wipe the visible screen AND the terminal's scrollback so `/clear`\n // actually feels like a fresh start. Without `\\x1b[3J` (xterm\n // scrollback-erase, supported by Windows Terminal/iTerm/etc.) the\n // old conversation is still scrollable above. In TUI mode Ink owns\n // the live area and redraws it on the next state change, so we\n // only need to clear; we don't need to ourselves re-emit input/\n // status. In REPL mode the prompt prints fresh after this.\n try {\n process.stdout.write('\\x1b[2J\\x1b[3J\\x1b[H');\n } catch {\n // stdout may be closed during shutdown — ignore.\n }\n },\n onSwitchModel: (name) => {\n context.model = name;\n },\n onSwitchProvider: (name) => {\n try {\n const newCfg = config.providers?.[name] ?? {\n type: name,\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n };\n const newProvider = providerRegistry.create({ ...newCfg, type: name });\n context.provider = newProvider;\n // Config is frozen — rebuild rather than assign.\n config = Object.freeze({ ...config, provider: name });\n } catch (err) {\n renderer.writeError(\n `Cannot switch to \"${name}\": ${err instanceof Error ? err.message : err}`,\n );\n }\n },\n onDiag: () => {\n const u = tokenCounter.total();\n const cost = tokenCounter.estimateCost();\n renderer.write(\n [\n `${color.bold('WrongStack diag')}`,\n ` provider: ${config.provider} / ${context.model}`,\n ` projectRoot: ${projectRoot}`,\n ` tokens: in ${u.input} out ${u.output} cacheR ${u.cacheRead ?? 0}`,\n ` cost: $${cost.total.toFixed(4)}`,\n ` tools: ${toolRegistry.list().length}`,\n ` mcpServers: ${mcpRegistry.list().length}`,\n '',\n ].join('\\n'),\n );\n },\n onStats: () => {\n stats.render(renderer);\n },\n });\n for (const cmd of slashCmds) slashRegistry.register(cmd);\n\n // Single-shot vs REPL\n let code = 0;\n try {\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 if (positional.length > 0 || promptFlag) {\n const query = positional.join(' ');\n const ctrl = new AbortController();\n const onSigint = () => ctrl.abort();\n process.on('SIGINT', onSigint);\n const startedAt = Date.now();\n const before = tokenCounter.total();\n const costBefore = tokenCounter.estimateCost().total;\n let result: import('@wrongstack/core').RunResult;\n try {\n result = await agent.run(query, { signal: ctrl.signal });\n } finally {\n process.off('SIGINT', onSigint);\n }\n const after = tokenCounter.total();\n const costAfter = tokenCounter.estimateCost().total;\n const usage = {\n input: after.input - before.input,\n output: after.output - before.output,\n iterations: result.iterations,\n cost: costAfter - costBefore,\n elapsedMs: Date.now() - startedAt,\n };\n if (flags['output-json']) {\n const json = JSON.stringify({\n status: result.status,\n finalText: result.finalText ?? null,\n error: result.error instanceof Error ? result.error.message : (result.error ?? null),\n usage,\n });\n process.stdout.write(json + '\\n');\n } else {\n if (result.status === 'failed') {\n code = 1;\n renderer.writeError(\n 'Failed: ' +\n (result.error instanceof Error ? result.error.message : String(result.error)),\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 // Lazy-load to avoid pulling React/Ink into the cold path for non-TUI usage.\n const { runTui } = await import('@wrongstack/tui');\n // Silence stdout writes from the renderer while Ink owns the\n // terminal. The tool executor calls renderer.writeToolCall /\n // writeToolResult on every tool execution; if those raw writes\n // land in stdout alongside Ink's redraws, the cursor math\n // breaks and the input + status bar end up duplicated in\n // scrollback (and in alt-screen, smeared across the buffer).\n // The TUI shows tool calls via the `tool.executed` event in\n // its own <History> component, so the renderer has nothing\n // useful to add here anyway.\n renderer.setSilent(true);\n try {\n code = await runTui({\n agent,\n events,\n slashRegistry,\n attachments,\n tokenCounter,\n model: context.model,\n banner: !flags['no-banner'],\n queueStore,\n yolo: !!config.yolo,\n appVersion: CLI_VERSION,\n provider: config.provider,\n effectiveMaxContext,\n // Opt-in: alt-screen disables the terminal's native scrollback,\n // so we default to false. `--no-alt-screen` is kept as a no-op\n // for backward compatibility with old invocation scripts.\n altScreen: flags['alt-screen'] === true,\n // Alt-screen exit erases the TUI view. Print a one-line hint\n // into the user's normal terminal so they know the session is\n // preserved and can resume it. Skipped automatically when\n // alt-screen is off — runTui only fires onAfterExit then.\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 });\n } finally {\n renderer.setSilent(false);\n }\n } else {\n code = await runRepl({\n agent,\n renderer,\n reader,\n slashRegistry,\n tokenCounter,\n attachments,\n effectiveMaxContext,\n });\n }\n } finally {\n stats.render(renderer);\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\n/**\n * Prompt the user about an abandoned session. The lockfile lifecycle\n * guarantees we only get here when the previous instance died without\n * writing `session_end` AND there's real work on disk (≥1 message).\n *\n * `--recover` short-circuits to \"resume\" without asking; piped/non-TTY\n * input degrades to the same — the alternative is hanging on stdin or\n * forcing the user to remember a flag they never typed.\n */\nasync function promptRecovery(\n reader: ReadlineInputReader,\n renderer: TerminalRenderer,\n abandoned: import('@wrongstack/core').AbandonedSession,\n autoRecover: boolean,\n): Promise<'resume' | 'delete' | 'skip'> {\n const minutes = Math.round(abandoned.ageMs / 60_000);\n const ageLabel =\n minutes < 1\n ? `${Math.round(abandoned.ageMs / 1000)}s ago`\n : minutes < 60\n ? `${minutes} min ago`\n : `${Math.round(minutes / 60)}h ago`;\n const summary = `Previous session was killed mid-run: ${abandoned.sessionId} (${abandoned.messageCount} messages, ${ageLabel}).`;\n if (autoRecover) {\n renderer.writeInfo(`${summary} Auto-resuming (--recover).`);\n return 'resume';\n }\n if (!process.stdin.isTTY) {\n renderer.writeInfo(\n `${summary} Non-interactive — leaving as-is. Use \\`wstack resume ${abandoned.sessionId}\\` or pass \\`--recover\\` to auto-resume.`,\n );\n return 'skip';\n }\n renderer.writeInfo(summary);\n const answer = await reader.readKey(\n `${color.amber('?')} Recover it? ${color.dim('[')}${color.bold('Y')}es / ${color.bold('n')}o / ${color.bold('d')}elete${color.dim(']')} `,\n [\n { key: 'y', label: 'yes', value: 'resume' },\n { key: 'Y', label: 'yes', value: 'resume' },\n { key: '\\r', label: 'yes', value: 'resume' },\n { key: '\\n', label: 'yes', value: 'resume' },\n { key: 'n', label: 'no', value: 'skip' },\n { key: 'N', label: 'no', value: 'skip' },\n { key: 'd', label: 'delete', value: 'delete' },\n { key: 'D', label: 'delete', value: 'delete' },\n ],\n );\n return answer as 'resume' | 'delete' | 'skip';\n}\n\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\n\n\nconst isMain =\n import.meta.url === `file://${process.argv[1]?.replace(/\\\\/g, '/')}` ||\n process.argv[1]?.endsWith('/cli/dist/index.js') ||\n process.argv[1]?.endsWith('\\\\cli\\\\dist\\\\index.js');\nif (isMain) {\n main(process.argv.slice(2)).then(\n (c) => {\n // Set exitCode and let Node drain async handles (undici TLS, log file\n // flushes) naturally. Force-exit after a brief grace period so we don't\n // hang if a plugin or MCP server leaks. Avoids libuv UV_HANDLE_CLOSING\n // assertions seen on Windows when process.exit() races with handle teardown.\n process.exitCode = c;\n setTimeout(() => process.exit(c), 200).unref();\n },\n (err) => {\n process.stderr.write((err instanceof Error ? err.stack : String(err)) + '\\n');\n process.exitCode = 1;\n setTimeout(() => process.exit(1), 200).unref();\n },\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/plugin-api-factory.ts","../src/input-reader.ts","../src/diff-renderer.ts","../src/theme.ts","../src/permission-prompt.ts","../src/picker.ts","../src/slash-commands/index.ts","../src/pre-launch.ts","../src/renderer.ts","../src/version.ts","../src/repl.ts","../src/session-stats.ts","../src/spinner.ts","../src/subcommands/index.ts","../src/index.ts"],"names":["path","os","fs","resolve","color","theme","atomicWrite","msg","fs3","path3","answer","fmtTok","FILLED","EMPTY","renderContextChip","renderProgress","fs4","path4","req","createRequire","path5","fs5","os3","sessionStore","skillLoader","code","createApi"],"mappings":"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","file":"index.js","sourcesContent":["import {\n DefaultPluginAPI,\n type PluginAPIInit,\n type PluginAPI,\n} from '@wrongstack/core';\n\nexport default function createApi(ownerName: string, base: Omit<PluginAPIInit, 'ownerName'>): PluginAPI {\n return new DefaultPluginAPI({ ownerName, ...base });\n}\n","import * as readline from 'node:readline';\nimport * as fs from 'node:fs/promises';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\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 ((rl as unknown as { _flushed?: boolean })._flushed) {\n rl.close();\n this.rl = undefined;\n }\n const fresh = this.ensure();\n return new Promise<string>((resolve, reject) => {\n fresh.question(prompt ?? '> ', (line) => {\n if (line.trim()) {\n this.history.push(line);\n void this.saveHistory();\n }\n resolve(line);\n });\n fresh.once('close', () => reject(new Error('EOF')));\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 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 cleanup = () => {\n stdin.off('data', onData);\n if (stdin.isTTY) stdin.setRawMode(wasRaw);\n if (wasPaused) stdin.pause();\n };\n stdin.on('data', onData);\n });\n }\n\n /**\n * Read a single line of input without echoing it to the terminal. Used\n * for API keys / passwords. Non-TTY input is read normally — there's\n * nothing to hide when piped.\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 const onData = (chunk: string) => {\n for (const ch of chunk) {\n if (ch === '\\r' || ch === '\\n') {\n cleanup();\n process.stdout.write('\\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 === '' || ch === '\\b') {\n buf = buf.slice(0, -1);\n continue;\n }\n buf += ch;\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","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 { Tool, InputReader } 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\nexport function makePromptDelegate(reader: InputReader) {\n return async (\n tool: Tool,\n input: unknown,\n suggestedPattern: string,\n ): Promise<PromptDecision> => {\n process.stdout.write(`\\n${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\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 { Config, ModelsRegistry, ResolvedProvider } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.js';\nimport type { ReadlineInputReader } from './input-reader.js';\n\nexport interface PickerResult {\n provider: string;\n model: string;\n}\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 */\nfunction hasApiKey(provider: ResolvedProvider, config?: Config): boolean {\n if (provider.envVars.some((v) => !!process.env[v])) return true;\n const stored = config?.providers?.[provider.id]?.apiKey;\n if (typeof stored === 'string' && stored.length > 0) return true;\n return false;\n}\n\n/**\n * Interactive provider + model picker. Lists supported providers grouped\n * by wire family — by default only those with an API key (env or stored\n * config), so you see only what you can actually launch into. Falls back\n * to the full catalog when no keys are found anywhere.\n *\n * When `defaultProvider`/`defaultModel` are passed, they're pre-selected\n * so the user can press Enter to accept the previous choice.\n */\nexport async function runPicker(deps: {\n modelsRegistry: ModelsRegistry;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n config?: Config;\n defaultProvider?: string;\n defaultModel?: string;\n}): Promise<PickerResult | undefined> {\n const { modelsRegistry, renderer, reader, config, defaultProvider, defaultModel } = deps;\n\n renderer.write(`\\n${color.bold(theme.primary('WrongStack') + color.dim(' — Provider & Model Selection'))}\\n`);\n renderer.write(color.dim('Loading provider catalog…\\n'));\n\n let providers: ResolvedProvider[];\n try {\n providers = await modelsRegistry.listProviders();\n } catch {\n renderer.writeError('Failed to load provider catalog. Pass --provider and --model to skip the picker.');\n return undefined;\n }\n\n // Drop unsupported wire families — they need a plugin and can't be\n // selected through this path.\n const supported = providers.filter((p) => p.family !== 'unsupported');\n if (supported.length === 0) {\n renderer.writeError('No supported providers found in catalog.');\n return undefined;\n }\n\n // Filter to keyed providers. If none are keyed (fresh install, no env\n // vars set), fall back to the full list and prompt the user to add a\n // key — picking a keyless provider here is still useful because the\n // very next step (`wstack auth <prov>`) needs to know which provider.\n const keyed = supported.filter((p) => hasApiKey(p, config));\n let displayList = keyed;\n let showingFallback = false;\n if (keyed.length === 0) {\n displayList = supported;\n showingFallback = true;\n }\n\n // Group by family for nicer display\n const families = new Map<string, ResolvedProvider[]>();\n for (const p of displayList) {\n const list = families.get(p.family) ?? [];\n list.push(p);\n families.set(p.family, list);\n }\n\n // Build a flat numbered list (family → providers). Track which entry\n // matches the current default so we can highlight + accept Enter.\n const ordered: Array<{ provider: ResolvedProvider; index: number }> = [];\n const familyOrder = ['anthropic', 'openai', 'google', 'openai-compatible'];\n let idx = 1;\n let defaultIdx: number | undefined;\n renderer.write('\\n');\n for (const fam of familyOrder) {\n const list = families.get(fam);\n if (!list || list.length === 0) continue;\n renderer.write(` ${color.bold(fam)}\\n`);\n for (const p of list) {\n const envFound = p.envVars.some((v) => !!process.env[v]);\n const configKey =\n typeof config?.providers?.[p.id]?.apiKey === 'string' &&\n (config!.providers![p.id]!.apiKey as string).length > 0;\n // ● green = env key, ◉ cyan = stored in config, ○ dim = no key\n const marker = envFound\n ? color.green('●')\n : configKey\n ? color.cyan('◉')\n : color.dim('○');\n const isDefault = p.id === defaultProvider;\n if (isDefault) defaultIdx = idx;\n const idLabel = isDefault ? color.bold(p.id) : p.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n ` ${color.dim(`${idx}.`.padStart(4))} ${marker} ${idLabel.padEnd(22)} ${color.dim(p.name)}${suffix}\\n`,\n );\n ordered.push({ provider: p, index: idx });\n idx++;\n }\n }\n\n if (showingFallback) {\n renderer.write(\n `\\n ${color.yellow('⚠ No API keys detected.')} ${color.dim('Pick a provider, then run `wstack auth <provider>` to add one.')}\\n`,\n );\n } else {\n renderer.write(\n `\\n ${color.dim('● = env key ◉ = stored in config ○ = no key')}\\n`,\n );\n }\n\n // Provider prompt. Enter on an empty line accepts the default when one\n // is present; otherwise we treat it as cancel.\n const defaultHint =\n defaultIdx !== undefined && defaultProvider\n ? ` ${color.dim(`[Enter = ${defaultProvider}]`)}`\n : '';\n const providerAnswer = (\n await reader.readLine(`\\n${color.amber('?')} Select provider (1-${ordered.length})${defaultHint}: `)\n ).trim();\n\n if (!providerAnswer) {\n if (defaultIdx !== undefined) {\n const def = ordered[defaultIdx - 1];\n if (def) return pickModel(def.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n\n const providerIdx = parseInt(providerAnswer, 10);\n if (Number.isNaN(providerIdx) || providerIdx < 1 || providerIdx > ordered.length) {\n // Try matching by id\n const byId = ordered.find((o) => o.provider.id.toLowerCase() === providerAnswer.toLowerCase());\n if (!byId) {\n renderer.writeError(`Invalid selection: \"${providerAnswer}\"`);\n return undefined;\n }\n return pickModel(byId.provider, modelsRegistry, renderer, reader, defaultModel);\n }\n\n const chosen = ordered[providerIdx - 1];\n if (!chosen) return undefined;\n // Only honor the default-model hint when the user picked the default\n // provider; switching providers invalidates it.\n const modelHint = chosen.provider.id === defaultProvider ? defaultModel : undefined;\n return pickModel(chosen.provider, modelsRegistry, renderer, reader, modelHint);\n}\n\nasync function pickModel(\n provider: ResolvedProvider,\n registry: ModelsRegistry,\n renderer: TerminalRenderer,\n reader: ReadlineInputReader,\n defaultModel?: string,\n): Promise<PickerResult | undefined> {\n renderer.write(`\\n ${color.bold(provider.name)} ${color.dim(`(${provider.id})`)} models:\\n\\n`);\n\n const models = [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n\n if (models.length === 0) {\n renderer.writeError(' No models listed for this provider in the catalog.');\n return undefined;\n }\n\n // Find default-model index for the \"Enter = default\" hint.\n const defaultIdxInModels =\n defaultModel !== undefined ? models.findIndex((m) => m.id === defaultModel) : -1;\n\n // Show paginated — up to 30 at a time\n const pageSize = 30;\n let offset = 0;\n\n while (offset < models.length) {\n const page = models.slice(offset, offset + pageSize);\n for (let i = 0; i < page.length; i++) {\n const m = page[i]!;\n const num = offset + i + 1;\n const ctx = m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k`.padStart(6) : ' ?';\n const cost =\n m.cost?.input !== undefined\n ? `$${m.cost.input}/$${m.cost.output ?? '?'}`\n : '';\n const caps: string[] = [];\n if (m.tool_call) caps.push('tools');\n if (m.reasoning) caps.push('reason');\n if (m.modalities?.input?.includes('image')) caps.push('vision');\n const capStr = caps.length > 0 ? color.dim(caps.join(',')) : '';\n const isDefault = m.id === defaultModel;\n const idLabel = isDefault ? color.bold(m.id) : m.id;\n const suffix = isDefault ? color.dim(' (default)') : '';\n renderer.write(\n ` ${color.dim(`${num}.`.padStart(5))} ${idLabel.padEnd(44)} ${color.dim(ctx)} ${color.dim(cost.padEnd(14))} ${capStr}${suffix}\\n`,\n );\n }\n offset += pageSize;\n\n if (offset < models.length) {\n const more = (\n await reader.readLine(\n `\\n${color.amber('?')} Showing ${Math.min(offset, models.length)}/${models.length} — Enter number or ${color.dim('Enter')} for more: `,\n )\n ).trim();\n if (!more) continue; // show next page\n return resolveModelSelection(more, models, provider, registry, renderer, reader);\n }\n }\n\n // All shown — final prompt. Enter accepts the default model when present.\n const defaultHint =\n defaultIdxInModels >= 0 && defaultModel\n ? ` ${color.dim(`[Enter = ${defaultModel}]`)}`\n : '';\n const answer = (\n await reader.readLine(`\\n${color.amber('?')} Select model (1-${models.length})${defaultHint}: `)\n ).trim();\n if (!answer) {\n if (defaultIdxInModels >= 0 && defaultModel) {\n renderer.write(\n `\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(defaultModel)}\\n\\n`,\n );\n return { provider: provider.id, model: defaultModel };\n }\n renderer.write(color.dim('Cancelled.\\n'));\n return undefined;\n }\n return resolveModelSelection(answer, models, provider, registry, renderer, reader);\n}\n\nasync function resolveModelSelection(\n answer: string,\n models: import('@wrongstack/core').ModelsDevModel[],\n provider: ResolvedProvider,\n _registry: ModelsRegistry,\n renderer: TerminalRenderer,\n _reader: ReadlineInputReader,\n): Promise<PickerResult | undefined> {\n const idx = parseInt(answer, 10);\n let modelId: string | undefined;\n\n if (!Number.isNaN(idx) && idx >= 1 && idx <= models.length) {\n modelId = models[idx - 1]!.id;\n } else {\n // Try fuzzy matching by id\n const lower = answer.toLowerCase();\n const match = models.find((m) => m.id.toLowerCase() === lower);\n if (match) {\n modelId = match.id;\n } else {\n // Partial match\n const partial = models.filter((m) => m.id.toLowerCase().includes(lower));\n if (partial.length === 1) {\n modelId = partial[0]!.id;\n } else if (partial.length > 1) {\n renderer.writeError(`\"${answer}\" matches multiple models. Be more specific.`);\n return undefined;\n }\n }\n }\n\n if (!modelId) {\n // Use as-is (user might know the exact model string)\n modelId = answer;\n }\n\n renderer.write(\n `\\n ${color.green('✓')} ${color.bold(provider.id)} / ${color.bold(modelId)}\\n\\n`,\n );\n\n return { provider: provider.id, model: modelId };\n}\n\n// --- Helpers ---\n\n// Simple theme alias (avoids importing the full theme module just for one color)\nconst theme = { primary: color.amber };\n\n/**\n * Save provider + model to the global config file.\n * Returns true if saved successfully.\n */\nexport async function saveToGlobalConfig(\n configPath: string,\n provider: string,\n model: string,\n): Promise<boolean> {\n try {\n const { atomicWrite } = await import('@wrongstack/core');\n const fs = await import('node:fs/promises');\n\n let existing: Record<string, unknown> = {};\n try {\n const raw = await fs.readFile(configPath, 'utf8');\n existing = JSON.parse(raw) as Record<string, unknown>;\n } catch {\n // No existing config\n }\n\n existing.provider = provider;\n existing.model = model;\n await atomicWrite(configPath, JSON.stringify(existing, null, 2));\n return true;\n } catch {\n return false;\n }\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type {\n SlashCommand,\n SlashCommandRegistry,\n ToolRegistry,\n Compactor,\n SessionStore,\n SkillLoader,\n TokenCounter,\n Renderer,\n Context,\n MemoryStore,\n} from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\n\nexport interface SlashCommandContext {\n registry: SlashCommandRegistry;\n toolRegistry: ToolRegistry;\n compactor?: Compactor;\n sessionStore?: SessionStore;\n skillLoader?: SkillLoader;\n tokenCounter: TokenCounter;\n renderer: Renderer;\n memoryStore?: MemoryStore;\n context?: Context;\n onExit?: () => void;\n onClear?: () => void;\n onSwitchProvider?: (name: string) => void;\n onSwitchModel?: (name: string) => void;\n onDiag?: () => void;\n onStats?: () => void;\n}\n\nexport function buildBuiltinSlashCommands(opts: SlashCommandContext): SlashCommand[] {\n return [\n helpCommand(opts),\n initCommand(opts),\n clearCommand(opts),\n compactCommand(opts),\n contextCommand(opts),\n usageCommand(opts),\n toolsCommand(opts),\n skillCommand(opts),\n useCommand(opts),\n modelCommand(opts),\n diagCommand(opts),\n statsCommand(opts),\n saveCommand(opts),\n loadCommand(opts),\n exitCommand(opts),\n ];\n}\n\n/**\n * Bootstrap a `.wrongstack/AGENTS.md` in the current project. We try to\n * sniff the repo for common build/test commands so the file starts with\n * useful content instead of a blank template — the user is meant to edit\n * it, but those defaults remove the friction of staring at a blank page.\n */\nfunction initCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'init',\n description: 'Scaffold .wrongstack/AGENTS.md in the current project.',\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 // doesn't exist — 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 to add anything else worth remembering.`;\n opts.renderer.writeInfo(`Wrote ${file}`);\n opts.renderer.writeInfo(`Pre-filled: ${detected.hints.join(', ')}. Edit the file to add anything else worth remembering.`);\n return { message: msg };\n } else {\n const msg = `Wrote ${file}\\nNo project type auto-detected. Edit the file to add build/test commands and conventions.`;\n opts.renderer.writeInfo(`Wrote ${file}`);\n return { message: msg };\n }\n },\n };\n}\n\nexport interface ProjectFacts {\n build?: string;\n test?: string;\n lint?: string;\n run?: string;\n hints: string[];\n}\n\nexport async function detectProjectFacts(root: string): Promise<ProjectFacts> {\n const facts: ProjectFacts = { hints: [] };\n // package.json\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 = (pkg.packageManager ?? 'npm').split('@')[0] ?? 'npm';\n if (scripts['build']) facts.build = `${pm} run build`;\n if (scripts['test']) facts.test = `${pm} test`;\n if (scripts['lint']) facts.lint = `${pm} run lint`;\n if (scripts['dev'] ?? scripts['start']) facts.run = `${pm} run ${scripts['dev'] ? 'dev' : 'start'}`;\n facts.hints.push('package.json scripts');\n } catch {\n // not node\n }\n // pyproject.toml\n try {\n await fs.access(path.join(root, 'pyproject.toml'));\n facts.test ??= 'pytest';\n facts.lint ??= 'ruff check .';\n facts.hints.push('pyproject.toml');\n } catch {\n // not python\n }\n // go.mod\n try {\n await fs.access(path.join(root, 'go.mod'));\n facts.build ??= 'go build ./...';\n facts.test ??= 'go test ./...';\n facts.hints.push('go.mod');\n } catch {\n // not go\n }\n // Cargo.toml\n try {\n await fs.access(path.join(root, 'Cargo.toml'));\n facts.build ??= 'cargo build';\n facts.test ??= 'cargo test';\n facts.hints.push('Cargo.toml');\n } catch {\n // not rust\n }\n // Makefile — last resort\n try {\n await fs.access(path.join(root, 'Makefile'));\n facts.build ??= 'make';\n facts.test ??= 'make test';\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\nProject notes for WrongStack. Committed to the repo so every contributor\n(human or agent) starts with the same context. Edit freely.\n\n## What this project is\n\n_One paragraph: what does this codebase do, who runs it, what's the\ndeployment target?_\n\n## How to work on it\n\n- **Build:** ${cmd(f.build)}\n- **Test:** ${cmd(f.test)}\n- **Lint:** ${cmd(f.lint)}\n- **Run locally:** ${cmd(f.run)}\n\n## Conventions\n\n_What style choices matter here? Filenames, module layout, naming, error\nhandling, log format. Anything a stranger would get wrong._\n\n## Domain knowledge\n\n_Acronyms, business rules, foot-guns, \"this looks weird but it's\nintentional because…\"._\n\n## Pointers\n\n_Where to look for: routing, database migrations, feature flags,\non-call runbooks, dashboards._\n`;\n}\n\nfunction diagCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'diag',\n description: 'Show runtime diagnostics (provider, tokens, tools, MCP).',\n async run() {\n if (opts.onDiag) {\n opts.onDiag();\n return { message: 'diag' };\n } else {\n return { message: 'Diag not available in this context.' };\n }\n },\n };\n}\n\nfunction statsCommand(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) {\n opts.onStats();\n return { message: 'stats' };\n } else {\n return { message: 'Stats not available in this context.' };\n }\n },\n };\n}\n\nfunction helpCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'help',\n description: 'Show available slash commands.',\n async run() {\n const lines = ['Available slash commands:'];\n for (const { cmd, owner, fullName } of opts.registry.listWithOwner()) {\n const isBuiltin = owner === 'core';\n // Builtins: no prefix. Plugins: prefix shown.\n const prefix = isBuiltin ? '' : `${owner}:`;\n const aliases = cmd.aliases\n ? cmd.aliases.map((a) => `/${prefix}${a}`).join(', ')\n : '';\n const aliasStr = aliases ? ` (${aliases})` : '';\n lines.push(` /${prefix}${cmd.name}${aliasStr} — ${cmd.description}`);\n }\n return { message: lines.join('\\n') };\n },\n };\n}\n\nfunction clearCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'clear',\n description: 'Reset the session and start a new one.',\n async run(_args, ctx) {\n // Clear context: messages, todos, readFiles, fileMtimes\n if (ctx) {\n ctx.messages = [];\n ctx.todos = [];\n ctx.readFiles.clear();\n ctx.fileMtimes.clear();\n ctx.meta = {};\n }\n // Clear memory store (all scopes)\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\nfunction contextCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'context',\n aliases: ['ctx'],\n description: 'Show context window summary.',\n async run(args, ctx) {\n const messages = ctx.messages;\n const detailed = args.trim() === 'detail';\n\n const pairCount = countTurnPairs(messages);\n const estimatedTokens = estimateTokens(messages);\n const toolUseCount = countToolUses(messages);\n const toolResultCount = countToolResults(messages);\n\n const lines = [\n `${color.bold('Context Window')}`,\n ` messages: ${messages.length} total (${pairCount} user+assistant pairs)`,\n ` tokens (≈): ${estimatedTokens.toLocaleString()} (chars ÷ 4 estimate)`,\n ` system prompt: ${ctx.systemPrompt.length} block${ctx.systemPrompt.length !== 1 ? 's' : ''}`,\n ` tools: ${toolUseCount} calls made, ${toolResultCount} 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\n if (detailed) {\n lines.push(` model: ${ctx.model}`);\n lines.push(` cwd: ${ctx.cwd}`);\n lines.push(` projectRoot: ${ctx.projectRoot}`);\n lines.push(` file mtimes: ${ctx.fileMtimes.size} tracked`);\n if (ctx.readFiles.size > 0) {\n lines.push(` file list: ${[...ctx.readFiles].join(', ')}`);\n }\n }\n\n const msg = lines.join('\\n');\n opts.renderer.write(`${msg}\\n`);\n return { message: msg };\n },\n };\n}\n\nfunction 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\nfunction countToolUses(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n const content = m.content;\n if (Array.isArray(content)) {\n count += content.filter((b) => b.type === 'tool_use').length;\n }\n }\n return count;\n}\n\nfunction countToolResults(messages: Context['messages']): number {\n let count = 0;\n for (const m of messages) {\n const content = m.content;\n if (Array.isArray(content)) {\n count += content.filter((b) => b.type === 'tool_result').length;\n }\n }\n return count;\n}\n\nfunction 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 }\n return total;\n}\n\nfunction compactCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'compact',\n description: 'Compact the context window.',\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 msg =\n `Compaction: ${report.before} → ${report.after} tokens (${report.reductions\n .map((r) => `${r.phase}: ${r.saved}`)\n .join(', ')})`;\n opts.renderer.writeInfo(msg);\n return { message: msg };\n },\n };\n}\n\nfunction usageCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'usage',\n aliases: ['cost'],\n description: 'Show token usage and estimated cost.',\n async run() {\n const total = opts.tokenCounter.total();\n const cost = opts.tokenCounter.estimateCost();\n const msg =\n `${color.bold('Usage')}\\n` +\n ` input: ${total.input}\\n` +\n ` output: ${total.output}\\n` +\n ` cache read: ${total.cacheRead ?? 0}\\n` +\n ` cache write: ${total.cacheWrite ?? 0}\\n` +\n ` cost: $${cost.total.toFixed(4)} (input $${cost.input.toFixed(4)} / output $${cost.output.toFixed(4)})\\n`;\n opts.renderer.write(msg);\n return { message: msg };\n },\n };\n}\n\nfunction toolsCommand(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(({ tool, owner }) => {\n return ` ${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\nfunction skillCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'skill',\n description: 'Show a skill manifest or list skills.',\n async run(args) {\n if (!opts.skillLoader) {\n const msg = 'No skill loader configured.';\n return { message: msg };\n }\n if (!args.trim()) {\n const list = await opts.skillLoader.list();\n if (list.length === 0) {\n const msg = 'No skills found.';\n return { message: msg };\n }\n const lines = list.map((s) => ` ${s.name.padEnd(24)} ${color.dim(`[${s.source}]`)} ${s.description.split('\\n')[0]}`);\n const msg = `Skills:\\n${lines.join('\\n')}\\n`;\n return { message: msg };\n } else {\n const skill = await opts.skillLoader.find(args.trim());\n if (!skill) {\n const msg = `Skill \"${args.trim()}\" not found.`;\n return { message: msg };\n }\n const body = await opts.skillLoader.readBody(skill.name);\n return { message: body };\n }\n },\n };\n}\n\nfunction useCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'use',\n description: 'Switch provider mid-session: /use <provider>',\n async run(args) {\n const name = args.trim();\n if (!name) {\n const msg = 'Usage: /use <provider-name>';\n return { message: msg };\n }\n opts.onSwitchProvider?.(name);\n const msg = `Switched provider to \"${name}\".`;\n return { message: msg };\n },\n };\n}\n\nfunction modelCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'model',\n description: 'Switch model mid-session: /model <model>',\n async run(args) {\n const name = args.trim();\n if (!name) {\n const msg = 'Usage: /model <model-name>';\n return { message: msg };\n }\n opts.onSwitchModel?.(name);\n const msg = `Switched model to \"${name}\".`;\n return { message: msg };\n },\n };\n}\n\nfunction saveCommand(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 const msg = `Session ${ctx.session.id} flushed.`;\n return { message: msg };\n },\n };\n}\n\nfunction loadCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'resume',\n aliases: ['load', 'sessions'],\n description:\n 'List recent sessions. To actually resume, exit and run `wstack resume <id>`.',\n async run() {\n if (!opts.sessionStore) {\n const msg = 'No session store configured.';\n return { message: msg };\n }\n const list = await opts.sessionStore.list(10);\n if (list.length === 0) {\n const msg = 'No saved sessions.';\n return { message: msg };\n }\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 =\n `Recent sessions:\\n${lines.join('\\n')}\\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\nfunction exitCommand(opts: SlashCommandContext): SlashCommand {\n return {\n name: 'exit',\n aliases: ['quit', 'q'],\n description: 'Exit the REPL.',\n async run() {\n opts.onExit?.();\n return { exit: true };\n },\n };\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.js';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport { detectProjectFacts, renderAgentsTemplate } from './slash-commands/index.js';\n\nexport type ProjectKind =\n /** `.wrongstack/AGENTS.md` exists — fully set up. */\n | 'initialized'\n /** Has a recognizable manifest (package.json, pyproject.toml, etc.) but no AGENTS.md yet. */\n | 'project'\n /** No manifest, no AGENTS.md — probably an empty/scratch directory. */\n | 'empty';\n\nconst MANIFESTS = [\n 'package.json',\n 'pyproject.toml',\n 'Cargo.toml',\n 'go.mod',\n 'Makefile',\n 'pom.xml',\n 'build.gradle',\n 'build.gradle.kts',\n 'composer.json',\n 'Gemfile',\n];\n\nexport async function detectProjectKind(projectRoot: string): Promise<ProjectKind> {\n try {\n await fs.access(path.join(projectRoot, '.wrongstack', 'AGENTS.md'));\n return 'initialized';\n } catch {\n // not initialized\n }\n for (const m of MANIFESTS) {\n try {\n await fs.access(path.join(projectRoot, m));\n return 'project';\n } catch {\n // try next\n }\n }\n return 'empty';\n}\n\nasync function scaffoldAgentsMd(projectRoot: string): Promise<string> {\n const dir = path.join(projectRoot, '.wrongstack');\n const file = path.join(dir, 'AGENTS.md');\n const facts = await detectProjectFacts(projectRoot);\n const body = renderAgentsTemplate(facts);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(file, body, 'utf8');\n return file;\n}\n\n/**\n * Print a one-line project status banner and, when relevant, prompt the\n * user about scaffolding `AGENTS.md` or continuing in a directory that\n * doesn't look like a project. Returns `false` if the user bailed out.\n */\nexport async function runProjectCheck(opts: {\n projectRoot: string;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n}): Promise<boolean> {\n const { projectRoot, renderer, reader } = opts;\n const kind = await detectProjectKind(projectRoot);\n\n if (kind === 'initialized') {\n renderer.write(\n `\\n ${color.green('✓')} Project initialized ${color.dim(`(${path.join(projectRoot, '.wrongstack', 'AGENTS.md')})`)}\\n`,\n );\n return true;\n }\n\n if (kind === 'project') {\n renderer.write(\n `\\n ${color.amber('●')} Project detected ${color.dim(`(${projectRoot})`)} but ${color.bold('.wrongstack/AGENTS.md')} is missing.\\n`,\n );\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} Scaffold ${color.bold('AGENTS.md')} now? ${color.dim('[y/N]')} `,\n )\n ).trim().toLowerCase();\n if (answer === 'y' || answer === 'yes') {\n try {\n const file = await scaffoldAgentsMd(projectRoot);\n renderer.write(` ${color.green('✓')} Wrote ${color.dim(file)}\\n`);\n } catch (err) {\n renderer.writeError(\n `Failed to scaffold AGENTS.md: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n return true;\n }\n\n // 'empty' — no manifest, no AGENTS.md\n renderer.write(\n `\\n ${color.dim('○')} ${color.dim(`No project manifest in ${projectRoot} — running in a scratch directory.`)}\\n`,\n );\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} Continue anyway? ${color.dim('[Y/n]')} `,\n )\n ).trim().toLowerCase();\n if (answer === 'n' || answer === 'no') {\n renderer.write(color.dim(' Cancelled.\\n'));\n return false;\n }\n return true;\n}\n\nexport interface LaunchModeChoices {\n /** TUI or plain REPL. */\n mode: 'tui' | 'repl';\n /** Auto-approve every tool call (no permission prompts). */\n yolo: boolean;\n}\n\n/**\n * Ask for interactive mode (TUI vs REPL) and YOLO. Either prompt is\n * skipped when the corresponding CLI flag was already pinned. Returns\n * the resolved pair.\n */\nexport async function runLaunchPrompts(opts: {\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n modePinned?: 'tui' | 'repl';\n yoloPinned?: boolean;\n}): Promise<LaunchModeChoices> {\n const { renderer, reader, modePinned, yoloPinned } = opts;\n\n let mode: 'tui' | 'repl';\n if (modePinned) {\n mode = modePinned;\n } else {\n const answer = (\n await reader.readLine(\n `\\n ${color.amber('?')} Interactive mode: ${color.bold('T')}UI / ${color.bold('R')}EPL ${color.dim('[T/r]')} `,\n )\n ).trim().toLowerCase();\n mode = answer === 'r' || answer === 'repl' ? 'repl' : 'tui';\n }\n\n let yolo: boolean;\n if (yoloPinned !== undefined) {\n yolo = yoloPinned;\n } else {\n const answer = (\n await reader.readLine(\n ` ${color.amber('?')} YOLO mode ${color.dim('(auto-approve every tool call)')} ${color.dim('[y/N]')} `,\n )\n ).trim().toLowerCase();\n yolo = answer === 'y' || answer === 'yes';\n }\n\n renderer.write(\n `\\n ${color.green('▶')} Launching in ${color.bold(mode.toUpperCase())} mode${yolo ? color.yellow(' (YOLO)') : ''}\\n\\n`,\n );\n\n return { mode, yolo };\n}\n","import type { ContentBlock, Renderer, TextBlock } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport { theme } from './theme.js';\nimport { renderDiff } from './diff-renderer.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 = 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(` ${color.dim(`+${moreCount} more line${moreCount === 1 ? '' : 's'}`)}\\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]+)\\*([^*]|$)/g, (_m, l, t, r) => `${l}${color.italic(t)}${r}`);\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\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 { /* fallback */ }\n\nexport { API_VERSION };\n","import type {\n Agent,\n AttachmentStore,\n SlashCommandRegistry,\n TokenCounter,\n} from '@wrongstack/core';\nimport { InputBuilder, color } from '@wrongstack/core';\nimport { theme } from './theme.js';\nimport type { TerminalRenderer } from './renderer.js';\nimport type { ReadlineInputReader } from './input-reader.js';\nimport { CLI_VERSION } from './version.js';\n\nexport interface ReplOptions {\n agent: Agent;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n slashRegistry: SlashCommandRegistry;\n attachments: AttachmentStore;\n banner?: boolean;\n tokenCounter?: TokenCounter;\n /** Model-specific max context window (tokens). Used for the context bar in turn summaries. */\n effectiveMaxContext?: number;\n}\n\nexport async function runRepl(opts: ReplOptions): Promise<number> {\n if (opts.banner !== false) printBanner(opts.renderer);\n\n // Per-iteration abort controller — assigned each loop so a Ctrl+C that\n // cancels turn N doesn't leak into turn N+1. `activeCtrl` is updated\n // before each agent.run so the SIGINT handler can target it.\n let activeCtrl: AbortController | undefined;\n let interrupts = 0;\n const onSigint = () => {\n interrupts++;\n if (interrupts >= 2) {\n opts.renderer.writeWarning('Exiting.');\n process.exit(130);\n }\n if (activeCtrl) {\n activeCtrl.abort();\n opts.renderer.writeWarning('Iteration cancelled. Press Ctrl+C again to exit.');\n } else {\n opts.renderer.writeWarning('Press Ctrl+C again to exit.');\n }\n };\n process.on('SIGINT', onSigint);\n\n const builder = new InputBuilder({ store: opts.attachments });\n\n for (;;) {\n let raw: string;\n try {\n raw = await readPossiblyMultiline(opts);\n } catch {\n break; // EOF (Ctrl+D)\n }\n const trimmed = raw.trim();\n if (!trimmed) {\n interrupts = 0;\n continue;\n }\n interrupts = 0;\n\n if (trimmed.startsWith('/')) {\n try {\n const res = await opts.slashRegistry.dispatch(trimmed, opts.agent.ctx);\n if (res?.message) opts.renderer.write(`${res.message}\\n`);\n if (res?.exit) break;\n } catch (err) {\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\n }\n continue;\n }\n\n // Route through InputBuilder so big pastes collapse to placeholders.\n const ph = await builder.appendPaste(raw);\n if (ph) {\n const lineCount = raw.split('\\n').length;\n opts.renderer.write(color.dim(` ↳ ${ph} (${lineCount} lines)\\n`));\n }\n const blocks = await builder.submit();\n\n const runCtrl = new AbortController();\n activeCtrl = runCtrl;\n try {\n const startedAt = Date.now();\n const before = opts.tokenCounter?.total();\n const costBefore = opts.tokenCounter?.estimateCost().total ?? 0;\n const result = await opts.agent.run(blocks, { signal: runCtrl.signal });\n if (result.status === 'aborted') {\n opts.renderer.writeWarning('Aborted.');\n } else if (result.status === 'failed') {\n opts.renderer.writeError(\n `Failed: ${result.error instanceof Error ? result.error.message : String(result.error)}`,\n );\n } else if (result.status === 'max_iterations') {\n opts.renderer.writeWarning(`Hit max iterations (${result.iterations}).`);\n }\n if (opts.tokenCounter && before) {\n const after = opts.tokenCounter.total();\n const costAfter = opts.tokenCounter.estimateCost().total;\n const ctxChip =\n opts.effectiveMaxContext && opts.effectiveMaxContext > 0\n ? ` ctx: ${renderContextChip(after.input, opts.effectiveMaxContext)}`\n : '';\n opts.renderer.write(\n `\\n${color.dim(\n `[in: ${fmtTok(after.input - before.input)} out: ${fmtTok(after.output - before.output)} iters: ${result.iterations} cost: ${(costAfter - costBefore).toFixed(4)} ${((Date.now() - startedAt) / 1000).toFixed(1)}s]${ctxChip}`,\n )}\\n`,\n );\n }\n } catch (err) {\n opts.renderer.writeError(err instanceof Error ? err.message : String(err));\n } finally {\n activeCtrl = undefined;\n }\n }\n\n process.off('SIGINT', onSigint);\n await opts.reader.close();\n return 0;\n}\n\n/**\n * Read a line, but support two multiline patterns:\n * 1. Trailing `\\` → continue on the next line (shell-style line continuation).\n * 2. A line that is exactly `\"\"\"` → start a heredoc; keep reading until\n * another bare `\"\"\"`. Useful for pasting code snippets.\n * Returns the assembled text and whether it came from a heredoc block (so\n * the caller can decide to always collapse heredocs as pastes).\n */\nasync function readPossiblyMultiline(opts: ReplOptions): Promise<string> {\n const firstPrompt = theme.primary('› ');\n const contPrompt = color.dim('· ');\n const first = await opts.reader.readLine(firstPrompt);\n\n if (first.trim() === '\"\"\"') {\n const parts: string[] = [];\n for (;;) {\n const next = await opts.reader.readLine(contPrompt);\n if (next.trim() === '\"\"\"') break;\n parts.push(next);\n }\n return parts.join('\\n');\n }\n\n let buf = first;\n while (buf.endsWith('\\\\')) {\n buf = buf.slice(0, -1); // drop the trailing backslash\n const cont = await opts.reader.readLine(contPrompt);\n buf += '\\n' + cont;\n }\n return buf;\n}\n\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\nconst FILLED = '█';\nconst EMPTY = '░';\n\nfunction renderContextChip(used: number, max: number): string {\n const ratio = Math.max(0, Math.min(1, used / max));\n const pct = Math.round(ratio * 100);\n const bar = renderProgress(ratio, 6);\n return `${bar} ${pct}% (${fmtTok(used)}/${fmtTok(max)})`;\n}\n\nfunction renderProgress(ratio: number, width: number): string {\n const clamped = Math.max(0, Math.min(1, ratio));\n const filled = clamped === 0 ? 0 : Math.max(1, Math.round(clamped * width));\n const capped = Math.min(width, filled);\n return FILLED.repeat(capped) + EMPTY.repeat(width - capped);\n}\n\nfunction printBanner(renderer: TerminalRenderer): void {\n const lines = [\n theme.primary(theme.bold('WrongStack')) + color.dim(` v${CLI_VERSION}`),\n color.dim('Built on the wrong stack. Shipped anyway.'),\n color.dim('Type /help for commands, /exit to quit.'),\n '',\n ];\n renderer.write(`${lines.join('\\n')}\\n`);\n}\n","import type { EventBus, TokenCounter } from '@wrongstack/core';\nimport { color } from '@wrongstack/core';\nimport type { TerminalRenderer } from './renderer.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 render(renderer: TerminalRenderer): void {\n if (!this.hasActivity()) return;\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(` Tokens: in ${fmtTok(u.input)} out ${fmtTok(u.output)}${u.cacheRead ? ` cacheR ${fmtTok(u.cacheRead)}` : ''}${u.cacheWrite ? ` cacheW ${fmtTok(u.cacheWrite)}` : ''}`);\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(` Cost: $${cost.total.toFixed(4)}${color.dim(` (in $${cost.input.toFixed(4)} / out $${cost.output.toFixed(4)})`)}`);\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(` ${name.padEnd(12)} ${String(total).padStart(3)}× ${color.dim(`avg ${avgMs}ms`)}${failPart}`);\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(` read: ${this.readPaths.size} ${color.dim(samplePaths(this.readPaths))}`);\n if (this.editedPaths.size > 0)\n lines.push(` edited: ${this.editedPaths.size} ${color.dim(samplePaths(this.editedPaths))}`);\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(` written: ${this.writtenPaths.size} (${byteStr}) ${color.dim(samplePaths(this.writtenPaths))}`);\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 renderer.write(`${lines.join('\\n')}\\n`);\n }\n}\n\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\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}","import { color } from '@wrongstack/core';\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\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport * as os from 'node:os';\nimport {\n color,\n atomicWrite,\n rewriteConfigEncrypted,\n type Config,\n type SecretVault,\n type SessionStore,\n type SkillLoader,\n type ToolRegistry,\n type ModelsRegistry,\n type WstackPaths,\n type WireFamily,\n} from '@wrongstack/core';\nimport type { TerminalRenderer } from '../renderer.js';\nimport type { ReadlineInputReader } from '../input-reader.js';\nimport { CLI_VERSION, API_VERSION } from '../version.js';\n\nexport type SubcommandHandler = (args: string[], deps: SubcommandDeps) => Promise<number>;\n\nexport interface SubcommandDeps {\n config: Config;\n renderer: TerminalRenderer;\n reader: ReadlineInputReader;\n sessionStore?: SessionStore;\n skillLoader?: SkillLoader;\n toolRegistry?: ToolRegistry;\n modelsRegistry: ModelsRegistry;\n paths: WstackPaths;\n vault: SecretVault;\n cwd: string;\n projectRoot: string;\n userHome: string;\n}\n\nexport const subcommands: Record<string, SubcommandHandler> = {\n init: initCmd,\n auth: authCmd,\n // `resume <id>` is special-cased in src/index.ts: it's lifted into\n // `--resume <id>` so the normal REPL bootstrap runs with a pre-loaded\n // session. There is no standalone subcommand handler.\n sessions: sessionsCmd,\n config: configCmd,\n tools: toolsCmd,\n skills: skillsCmd,\n providers: providersCmd,\n models: modelsCmd,\n mcp: mcpCmd,\n plugin: pluginCmd,\n diag: diagCmd,\n usage: usageCmd,\n version: versionCmd,\n help: helpCmd,\n projects: projectsCmd,\n};\n\n/**\n * Store an API key for a provider in the global config, encrypted at rest.\n * Usage: `wstack auth <providerId> [--family <fam>] [--base-url <url>]`\n *\n * If the provider is in the models.dev catalog, family/baseUrl come from\n * there. For custom providers, pass them via flags — that's the only way\n * to make the system fully offline-capable.\n */\nasync function authCmd(args: string[], deps: SubcommandDeps): Promise<number> {\n const flags = parseAuthFlags(args);\n let providerId = flags.positional[0];\n if (!providerId) {\n providerId = (await deps.reader.readLine('Provider id: ')).trim();\n }\n if (!providerId) {\n deps.renderer.writeError('Provider id is required.');\n return 1;\n }\n\n let family: WireFamily | undefined = flags.family;\n let baseUrl: string | undefined = flags.baseUrl;\n let envVars: string[] | undefined = flags.envVars;\n\n // If catalog knows this provider, use its defaults — but flags still win.\n try {\n const known = await deps.modelsRegistry.getProvider(providerId);\n if (known) {\n if (!family) family = known.family;\n if (!baseUrl) baseUrl = known.apiBase;\n if (!envVars) envVars = known.envVars;\n }\n } catch {\n // catalog unavailable — that's fine, user can pass --family\n }\n\n if (!family) {\n deps.renderer.writeError(\n `Provider \"${providerId}\" not in catalog. Pass --family <anthropic|openai|openai-compatible|google> to register it manually.`,\n );\n return 1;\n }\n\n const apiKey = (\n await deps.reader.readSecret(\n `API key for ${providerId} (hidden, stored encrypted in ${deps.paths.globalConfig}): `,\n )\n ).trim();\n if (!apiKey) {\n deps.renderer.writeError('No key entered. Nothing saved.');\n return 1;\n }\n\n const patch = {\n providers: {\n [providerId]: {\n type: providerId,\n apiKey,\n family,\n ...(baseUrl ? { baseUrl } : {}),\n ...(envVars && envVars.length > 0 ? { envVars } : {}),\n },\n },\n };\n try {\n await rewriteConfigEncrypted(deps.paths.globalConfig, deps.vault, patch);\n deps.renderer.writeInfo(`Stored encrypted key for ${providerId}.`);\n deps.renderer.writeInfo(`Use: wstack --provider ${providerId} \"<task>\"`);\n return 0;\n } catch (err) {\n deps.renderer.writeError(`auth: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n}\n\ninterface AuthFlags {\n positional: string[];\n family?: WireFamily;\n baseUrl?: string;\n envVars?: string[];\n}\n\nfunction parseAuthFlags(args: string[]): AuthFlags {\n const out: AuthFlags = { positional: [] };\n for (let i = 0; i < args.length; i++) {\n const a = args[i];\n if (a === '--family') {\n const v = args[++i];\n if (v) out.family = v as WireFamily;\n } else if (a === '--base-url') {\n const v = args[++i];\n if (v) out.baseUrl = v;\n } else if (a === '--env') {\n const v = args[++i];\n if (v) out.envVars = v.split(',').map((s) => s.trim()).filter(Boolean);\n } else if (a && !a.startsWith('--')) {\n out.positional.push(a);\n }\n }\n return out;\n}\n\nasync function initCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n deps.renderer.write(color.bold('WrongStack init\\n'));\n deps.renderer.writeInfo('Loading provider catalog from models.dev (cached locally)…');\n\n let providers;\n try {\n providers = await deps.modelsRegistry.listProviders();\n } catch (err) {\n deps.renderer.writeError(\n `Failed to load provider catalog: ${err instanceof Error ? err.message : err}`,\n );\n return 1;\n }\n\n // Prefer providers whose env var is already set, then anthropic/openai/google as common defaults.\n const detected = providers\n .filter((p) => p.family !== 'unsupported')\n .filter((p) => p.envVars.some((v) => process.env[v]));\n const ranked =\n detected.length > 0\n ? detected\n : providers.filter((p) => ['anthropic', 'openai', 'google'].includes(p.id));\n\n if (detected.length > 0) {\n deps.renderer.write(`Detected API keys for: ${detected.map((p) => p.name).join(', ')}\\n`);\n }\n\n const defaultId = ranked[0]?.id ?? 'anthropic';\n const providerId =\n (await deps.reader.readLine(`Provider [${defaultId}]: `)).trim() || defaultId;\n\n const provider = await deps.modelsRegistry.getProvider(providerId);\n if (!provider) {\n deps.renderer.writeError(`Provider \"${providerId}\" not found in models.dev catalog.`);\n return 1;\n }\n if (provider.family === 'unsupported') {\n deps.renderer.writeError(\n `Provider \"${providerId}\" uses ${provider.npm} which has no built-in transport. Install a plugin to enable it.`,\n );\n return 1;\n }\n\n const suggestedModel = (await deps.modelsRegistry.suggestModel(providerId)) ?? '';\n const modelHint = suggestedModel ? ` [${suggestedModel}]` : '';\n const modelId =\n (await deps.reader.readLine(`Model${modelHint}: `)).trim() || suggestedModel;\n if (!modelId) {\n deps.renderer.writeError('No model selected. Aborting.');\n return 1;\n }\n\n // Find any existing env value\n const envHit = provider.envVars.map((v) => process.env[v]).find(Boolean);\n let apiKey = '';\n if (!envHit) {\n apiKey = (\n await deps.reader.readLine(\n `API key (stored in ${deps.paths.globalConfig}; empty = expect ${provider.envVars[0] ?? 'env var'}): `,\n )\n ).trim();\n } else {\n deps.renderer.writeInfo(`Found API key in env (${provider.envVars.join(' / ')}).`);\n }\n\n await fs.mkdir(deps.paths.globalRoot, { recursive: true });\n const config: Partial<Config> = {\n version: 1,\n provider: providerId,\n model: modelId,\n };\n if (apiKey) config.apiKey = apiKey;\n await atomicWrite(deps.paths.globalConfig, JSON.stringify(config, null, 2));\n\n // Project-local committed marker (opt-in)\n await fs.mkdir(path.join(deps.projectRoot, '.wrongstack'), { recursive: true });\n const agentsFile = path.join(deps.projectRoot, '.wrongstack', 'AGENTS.md');\n try {\n await fs.access(agentsFile);\n } catch {\n await atomicWrite(\n agentsFile,\n '# Project notes for WrongStack\\n\\nWrite project-specific conventions, build commands,\\nand domain knowledge here. This file is committed to git.\\n',\n );\n }\n\n deps.renderer.writeInfo(`Wrote ${deps.paths.globalConfig}`);\n deps.renderer.writeInfo(`Project state lives in ${deps.paths.projectDir}`);\n deps.renderer.writeInfo('Try: wstack \"<task>\" or wstack');\n return 0;\n}\n\nasync function sessionsCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n if (!deps.sessionStore) {\n deps.renderer.writeError('No session store available.');\n return 1;\n }\n const list = await deps.sessionStore.list(20);\n if (list.length === 0) {\n deps.renderer.write('No sessions found.\\n');\n return 0;\n }\n for (const s of list) {\n deps.renderer.write(\n ` ${s.id} ${color.dim(s.startedAt)} ${color.dim(`${s.tokenTotal} tok`)} ${s.title}\\n`,\n );\n }\n return 0;\n}\n\nasync function configCmd(args: string[], deps: SubcommandDeps): Promise<number> {\n const sub = args[0];\n if (!sub || sub === 'show') {\n const redacted = redactKeys(deps.config);\n deps.renderer.write(JSON.stringify(redacted, null, 2) + '\\n');\n return 0;\n }\n if (sub === 'edit') {\n const editor = process.env['EDITOR'] ?? 'vi';\n deps.renderer.write(`Run: ${editor} ${deps.paths.globalConfig}\\n`);\n return 0;\n }\n deps.renderer.writeError(`Unknown config subcommand: ${sub}`);\n return 1;\n}\n\nasync function toolsCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\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 }\n return 0;\n}\n\nasync function skillsCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\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 }\n return 0;\n}\n\nasync function providersCmd(args: string[], deps: SubcommandDeps): Promise<number> {\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\n const families: WireFamily[] = showUnsupported\n ? ['unsupported']\n : showAll\n ? ['anthropic', 'openai', 'google', 'openai-compatible', 'unsupported']\n : ['anthropic', 'openai', 'google', 'openai-compatible'];\n\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\nasync function modelsCmd(args: string[], deps: SubcommandDeps): Promise<number> {\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 const provider = await deps.modelsRegistry.getProvider(providerId);\n if (!provider) {\n deps.renderer.writeError(`Provider \"${providerId}\" not in catalog.`);\n return 1;\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 sorted = [...provider.models].sort((a, b) =>\n (b.release_date ?? '').localeCompare(a.release_date ?? ''),\n );\n for (const m of sorted) {\n const caps: string[] = [];\n if (m.tool_call) caps.push('tools');\n if (m.reasoning) caps.push('reasoning');\n if (m.modalities?.input?.includes('image')) caps.push('vision');\n const ctx = m.limit?.context ? `${(m.limit.context / 1000).toFixed(0)}k` : '?';\n const cost = 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\nasync function mcpCmd(args: string[], deps: SubcommandDeps): Promise<number> {\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 return 0;\n }\n for (const [name, cfg] of Object.entries(servers)) {\n deps.renderer.write(\n ` ${name.padEnd(20)} ${cfg.transport} ${cfg.enabled === false ? 'disabled' : 'enabled'}\\n`,\n );\n }\n return 0;\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 pluginCmd(args: string[], deps: SubcommandDeps): Promise<number> {\n const sub = args[0];\n if (!sub || sub === 'list') {\n const plugins = deps.config.plugins ?? [];\n if (plugins.length === 0) {\n deps.renderer.write('No plugins configured.\\n');\n return 0;\n }\n for (const p of plugins) {\n const name = typeof p === 'string' ? p : p.name;\n const enabled = typeof p === 'object' && p.enabled === false ? 'disabled' : 'enabled';\n deps.renderer.write(` ${name} ${enabled}\\n`);\n }\n return 0;\n }\n deps.renderer.writeWarning(`plugin ${sub} not implemented (edit config.plugins manually).`);\n return 0;\n}\n\nasync function diagCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\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\nasync function usageCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n if (!deps.sessionStore) return 0;\n const list = await deps.sessionStore.list(100);\n let totalIn = 0;\n for (const s of list) totalIn += s.tokenTotal;\n deps.renderer.write(`Sessions: ${list.length} total tokens: ${totalIn}\\n`);\n return 0;\n}\n\nasync function versionCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n deps.renderer.write(\n `WrongStack ${CLI_VERSION} (apiVersion ${API_VERSION}, node ${process.version}, ${os.platform()})\\n`,\n );\n return 0;\n}\n\nasync function helpCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\n const lines = [\n color.bold('WrongStack — usage'),\n '',\n ' wstack Start REPL',\n ' wstack \"<task>\" Run task and exit',\n ' wstack resume [<id>] Resume a session',\n ' wstack sessions List recent sessions',\n ' wstack init Pick provider + model from models.dev',\n ' wstack auth <provider> Store API key (encrypted at rest)',\n ' wstack resume <id> Resume a session (loads transcript + appends)',\n ' wstack config [show|edit] Show or edit effective config',\n ' wstack tools List registered tools',\n ' wstack skills List discovered skills',\n ' wstack providers [--all] List providers from models.dev',\n ' wstack models [<provider>] List models for current/specified provider',\n ' wstack models refresh Force-refresh models.dev cache',\n ' wstack mcp [list] List MCP servers',\n ' wstack plugin [list] List plugins',\n ' wstack projects List projects tracked in ~/.wrongstack/projects/',\n ' wstack diag Full diagnostics',\n ' wstack usage Token + cost summary',\n ' wstack version Print version',\n '',\n 'Global flags:',\n ' --provider, --model, --cwd, --log-level, --yolo, --verbose, --trace, --config',\n ];\n deps.renderer.write(lines.join('\\n') + '\\n');\n return 0;\n}\n\nasync function projectsCmd(_args: string[], deps: SubcommandDeps): Promise<number> {\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\nfunction 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 {\n out[k] = redactKeys(v);\n }\n }\n return out;\n}\n","import * as fs from 'node:fs/promises';\nimport { createRequire } from 'node:module';\nimport * as os from 'node:os';\nimport * as path from 'node:path';\nimport {\n Agent,\n AutoCompactionMiddleware,\n type Config,\n Container,\n Context,\n DefaultAttachmentStore,\n DefaultConfigLoader,\n DefaultErrorHandler,\n DefaultLogger,\n DefaultMemoryStore,\n DefaultModelsRegistry,\n DefaultPathResolver,\n DefaultPermissionPolicy,\n DefaultRetryPolicy,\n DefaultSecretScrubber,\n DefaultSecretVault,\n DefaultSessionStore,\n DefaultSkillLoader,\n DefaultSystemPromptBuilder,\n DefaultTokenCounter,\n EventBus,\n HybridCompactor,\n type Plugin,\n ProviderRegistry,\n QueueStore,\n RecoveryLock,\n SlashCommandRegistry,\n type SystemPromptBuilder,\n TOKENS,\n ToolRegistry,\n type WstackPaths,\n color,\n createContextManagerTool,\n createDefaultPipelines,\n loadPlugins,\n migratePlaintextSecrets,\n resolveWstackPaths,\n} from '@wrongstack/core';\nimport { MCPRegistry } from '@wrongstack/mcp';\nimport {\n buildProviderFactoriesFromRegistry,\n capabilitiesFor,\n makeProviderFromConfig,\n} from '@wrongstack/providers';\nimport { builtinTools, forgetTool, rememberTool } from '@wrongstack/tools';\nimport { ReadlineInputReader } from './input-reader.js';\nimport { makePromptDelegate } from './permission-prompt.js';\nimport { runPicker, saveToGlobalConfig } from './picker.js';\nimport { runLaunchPrompts, runProjectCheck } from './pre-launch.js';\nimport { TerminalRenderer } from './renderer.js';\nimport { runRepl } from './repl.js';\nimport { SessionStats } from './session-stats.js';\nimport { buildBuiltinSlashCommands } from './slash-commands/index.js';\nimport { Spinner } from './spinner.js';\nimport { subcommands } from './subcommands/index.js';\n\ninterface ParsedArgs {\n flags: Record<string, string | boolean>;\n positional: string[];\n}\n\nconst BOOLEAN_FLAGS = new Set([\n 'yolo',\n 'verbose',\n 'trace',\n 'help',\n 'version',\n 'no-banner',\n 'no-features',\n 'tui',\n 'no-tui',\n 'no-recovery',\n 'recover',\n 'no-alt-screen',\n 'alt-screen',\n 'output-json',\n 'prompt',\n]);\n\nfunction parseArgs(argv: string[]): ParsedArgs {\n const flags: Record<string, string | boolean> = {};\n const positional: string[] = [];\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (!a) continue;\n if (a === '--') {\n positional.push(...argv.slice(i + 1));\n break;\n }\n if (a.startsWith('--')) {\n const eq = a.indexOf('=');\n if (eq !== -1) {\n flags[a.slice(2, eq)] = a.slice(eq + 1);\n continue;\n }\n const name = a.slice(2);\n if (BOOLEAN_FLAGS.has(name)) {\n flags[name] = true;\n continue;\n }\n if (i + 1 < argv.length && !(argv[i + 1] ?? '').startsWith('-')) {\n flags[name] = argv[++i] ?? '';\n } else {\n flags[name] = true;\n }\n } else if (a.startsWith('-') && a.length === 2) {\n const short = a.slice(1);\n const expand: Record<string, string> = { v: 'verbose' };\n flags[expand[short] ?? short] = true;\n } else {\n positional.push(a);\n }\n }\n return { flags, positional };\n}\n\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\nfunction resolveBundledSkillsDir(): string | undefined {\n try {\n const req = createRequire(import.meta.url);\n const corePkg = req.resolve('@wrongstack/core/package.json');\n return path.join(path.dirname(corePkg), 'skills');\n } catch {\n return undefined;\n }\n}\n\nimport { CLI_VERSION } from './version.js';\nexport { CLI_VERSION };\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\nexport async function main(argv: string[]): Promise<number> {\n const { flags, positional } = parseArgs(argv);\n\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 // `wstack resume <id>` is sugar for `wstack --resume <id>`. Lift it\n // before subcommand dispatch so resume falls through to the normal\n // REPL flow with the session pre-loaded.\n if (positional[0] === 'resume' && positional[1] && !subcommands['__noop_resume_marker']) {\n flags['resume'] = positional[1];\n positional.splice(0, 2);\n }\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 let config: Config;\n try {\n config = await configLoader.load({ cliFlags: flagsToConfigPatch(flags) });\n } catch (err) {\n process.stderr.write(`Config error: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 2;\n }\n\n // Logger — operational log lives in user home\n const logger = new DefaultLogger({\n level: config.log.level,\n file: wpaths.logFile,\n });\n const renderer = new TerminalRenderer();\n const reader = new ReadlineInputReader({ historyFile: wpaths.historyFile });\n\n // ModelsRegistry — source of truth for providers, models, pricing.\n const modelsRegistry = new DefaultModelsRegistry({\n cacheFile: wpaths.modelsCache,\n ttlSeconds: 24 * 3600,\n });\n\n // Quick path: subcommand dispatch (no provider required for most)\n const first = positional[0];\n if (first && subcommands[first]) {\n const sessionStore = new DefaultSessionStore({ dir: wpaths.projectSessions });\n const skillLoader = new DefaultSkillLoader({\n paths: wpaths,\n bundledDir: resolveBundledSkillsDir(),\n });\n const toolRegistryForSubcmd = new ToolRegistry();\n for (const t of builtinTools) toolRegistryForSubcmd.register(t);\n const code = await subcommands[first]!(positional.slice(1), {\n config,\n renderer,\n reader,\n sessionStore,\n skillLoader,\n toolRegistry: toolRegistryForSubcmd,\n modelsRegistry,\n paths: wpaths,\n vault,\n cwd,\n projectRoot,\n userHome,\n });\n await reader.close();\n return code;\n }\n\n // Determine the launch shape up front so the pre-launch prompts (project\n // check + mode + yolo) only fire when this is actually an interactive\n // session. Single-shot invocations (`wrongstack \"do X\"` / `--prompt`) and\n // non-TTY pipes (CI) skip all the interactive sugar.\n const isSingleShot = positional.length > 0 || typeof flags['prompt'] === 'string';\n const isInteractiveTTY = !!process.stdin.isTTY && !isSingleShot;\n\n // Project status banner + optional AGENTS.md scaffold. Returns false\n // when the user bails out of an empty/scratch directory.\n if (isInteractiveTTY) {\n const cont = await runProjectCheck({ projectRoot, renderer, reader });\n if (!cont) {\n await reader.close();\n return 0;\n }\n }\n\n // Identity selection. We launch the interactive picker whenever the user\n // didn't pin BOTH provider and model on the CLI (--provider AND --model).\n // The picker pre-selects whatever the config has so Enter accepts the\n // previous choice — switching models becomes \"wstack ↵ ↵\" most days.\n //\n // Non-TTY (pipes, CI) skips the picker: it falls back to whatever's in\n // config and hard-errors if that's still empty.\n const providerFlag = typeof flags['provider'] === 'string' ? flags['provider'] : undefined;\n const modelFlag = typeof flags['model'] === 'string' ? flags['model'] : undefined;\n const bothFlagsPinned = !!providerFlag && !!modelFlag;\n if (!bothFlagsPinned) {\n if (process.stdin.isTTY) {\n const picked = await runPicker({\n modelsRegistry,\n renderer,\n reader,\n config,\n defaultProvider: providerFlag ?? config.provider,\n defaultModel: modelFlag ?? config.model,\n });\n if (!picked) {\n // User bailed out and we have no fallback in config — error out.\n if (!config.provider || !config.model) {\n await reader.close();\n return 2;\n }\n // Otherwise honor the cancel by keeping the config defaults.\n } else {\n // Persist as the new default so next launch pre-selects this pair.\n // Read-before-replace so we can tell whether anything actually\n // changed — re-saving the same pair every launch is just noise.\n const prevProvider = config.provider;\n const prevModel = config.model;\n\n // The loader hands back a frozen Config. Rebuild a fresh object\n // with the picked pair patched in (and re-freeze) instead of\n // mutating in place — Object.freeze blocks runtime writes even\n // when a TS cast hides it from the compiler.\n config = Object.freeze({ ...config, provider: picked.provider, model: picked.model });\n\n if (picked.provider !== prevProvider || picked.model !== prevModel) {\n const saved = await saveToGlobalConfig(\n wpaths.globalConfig,\n picked.provider,\n picked.model,\n );\n if (saved) {\n renderer.writeInfo(`Saved ${picked.provider}/${picked.model} as default.\\n`);\n }\n }\n }\n } else if (!config.provider || !config.model) {\n process.stderr.write(\n 'No provider or model configured. Run `wrongstack init` first, or pass ' +\n '--provider <id> --model <id>.\\n',\n );\n await reader.close();\n return 2;\n }\n // Non-TTY with config present: fall through using config defaults.\n }\n\n // Interactive mode + YOLO prompts. Each prompt is skipped when the user\n // already pinned the corresponding flag (--tui / --no-tui / --yolo) on\n // the CLI; otherwise we ask. The chosen values are written back to\n // `flags` and `config` so the rest of the boot sequence (permission\n // policy, REPL-vs-TUI branch) reads them naturally.\n if (isInteractiveTTY) {\n let modePinned: 'tui' | 'repl' | undefined;\n if (flags['no-tui']) modePinned = 'repl';\n else if (flags['tui']) modePinned = 'tui';\n const yoloPinned: boolean | undefined = flags['yolo'] === true ? true : undefined;\n\n const choices = await runLaunchPrompts({ renderer, reader, modePinned, yoloPinned });\n\n // Propagate mode → the REPL/TUI branch later reads flags.tui / flags['no-tui'].\n if (choices.mode === 'tui') {\n flags['tui'] = true;\n flags['no-tui'] = false;\n } else {\n flags['tui'] = false;\n flags['no-tui'] = true;\n }\n // Propagate yolo → permission policy reads config.yolo. Config is\n // frozen so we rebuild (same pattern as the picker patch above).\n if (choices.yolo !== config.yolo) {\n config = Object.freeze({ ...config, yolo: choices.yolo });\n }\n }\n\n // Resolve provider details from models.dev\n const resolvedProvider = await modelsRegistry.getProvider(config.provider).catch(() => undefined);\n if (!resolvedProvider) {\n logger.warn(\n `Provider \"${config.provider}\" not found in models.dev. Continuing with raw config.`,\n );\n } else if (resolvedProvider.family === 'unsupported') {\n process.stderr.write(\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 );\n await reader.close();\n return 2;\n }\n\n // Build container + services\n const container = new Container();\n container.bind(TOKENS.Logger, () => logger);\n container.bind(TOKENS.PathResolver, () => pathResolver);\n container.bind(TOKENS.SecretScrubber, () => new DefaultSecretScrubber());\n container.bind(TOKENS.RetryPolicy, () => new DefaultRetryPolicy());\n container.bind(TOKENS.ErrorHandler, () => new DefaultErrorHandler());\n container.bind(TOKENS.ModelsRegistry, () => modelsRegistry);\n container.bind(\n TOKENS.TokenCounter,\n () => new DefaultTokenCounter({ registry: modelsRegistry, providerId: config.provider }),\n );\n container.bind(\n TOKENS.SessionStore,\n () => new DefaultSessionStore({ dir: wpaths.projectSessions }),\n );\n const memoryStore = new DefaultMemoryStore({ paths: wpaths });\n container.bind(TOKENS.MemoryStore, () => memoryStore);\n // Skills are an opt-in feature pack — when disabled we still bind a\n // loader that returns an empty list so the prompt builder doesn't\n // need a special path. This way `--no-features` doesn't drift behaviour.\n const skillLoader = new DefaultSkillLoader({\n paths: wpaths,\n bundledDir: config.features.skills ? resolveBundledSkillsDir() : undefined,\n });\n container.bind(TOKENS.SkillLoader, () => skillLoader);\n container.bind(\n TOKENS.SystemPromptBuilder,\n () =>\n new DefaultSystemPromptBuilder({\n memoryStore,\n skillLoader: config.features.skills ? skillLoader : undefined,\n }),\n );\n container.bind(TOKENS.Renderer, () => renderer);\n container.bind(TOKENS.InputReader, () => reader);\n container.bind(\n TOKENS.PermissionPolicy,\n () =>\n new DefaultPermissionPolicy({\n trustFile: wpaths.projectTrust,\n yolo: config.yolo,\n promptDelegate: makePromptDelegate(reader),\n }),\n );\n container.bind(\n TOKENS.Compactor,\n () =>\n new HybridCompactor({\n preserveK: config.context.preserveK,\n eliseThreshold: config.context.eliseThreshold,\n }),\n );\n\n // Provider registry — populated dynamically from models.dev catalog\n // when enabled. With features.modelsRegistry=false we don't touch the\n // network at boot and rely on the user's config to declare the wire\n // family explicitly (see makeProviderFromConfig path below).\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 process.stderr.write(\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 await reader.close();\n return 2;\n }\n }\n\n // Tool registry\n const toolRegistry = new ToolRegistry();\n for (const t of builtinTools) toolRegistry.register(t);\n toolRegistry.registerDefault(\n createContextManagerTool({ compactor: container.resolve(TOKENS.Compactor) }),\n );\n if (config.features.memory) {\n toolRegistry.register(rememberTool(memoryStore));\n toolRegistry.register(forgetTool(memoryStore));\n }\n\n const events = new EventBus();\n events.setLogger(logger);\n\n // Spinner: visible \"thinking…\" line during each model request.\n const spinner = new Spinner();\n // Track the latest provider request's input-token count so the spinner\n // can render a live context-window fullness bar (TUI parity).\n let lastInputTokens = 0;\n events.on('provider.response', (e) => {\n lastInputTokens = e.usage?.input ?? 0;\n updateSpinnerContext();\n });\n events.on('iteration.started', () => {\n updateSpinnerContext();\n spinner.start(color.dim(`${config.provider}/${config.model} thinking…`));\n });\n events.on('provider.response', () => {\n spinner.stop();\n });\n events.on('error', () => {\n spinner.stop();\n });\n\n // Live streaming output: first text_delta stops the spinner and starts\n // writing tokens directly so the user sees the model \"type\".\n let streamingActive = false;\n events.on('provider.text_delta', (p) => {\n if (!streamingActive) {\n spinner.stop();\n streamingActive = true;\n }\n renderer.write(p.text);\n });\n events.on('iteration.completed', () => {\n if (streamingActive) {\n renderer.write('\\n');\n streamingActive = false;\n }\n });\n\n // Provider hiccups — render a single friendly line instead of leaving the\n // raw JSON body in logger output. retry events show a countdown; error\n // events surface a final failure that won't be retried.\n events.on('provider.retry', (p) => {\n spinner.stop();\n if (streamingActive) {\n renderer.write('\\n');\n streamingActive = false;\n }\n const secs = (p.delayMs / 1000).toFixed(p.delayMs >= 1000 ? 1 : 2);\n process.stderr.write(color.yellow(` ⟳ retry ${p.attempt} in ${secs}s — ${p.description}\\n`));\n spinner.start(color.dim(`${config.provider}/${config.model} thinking…`));\n });\n events.on('provider.error', (p) => {\n spinner.stop();\n if (streamingActive) {\n renderer.write('\\n');\n streamingActive = false;\n }\n process.stderr.write(color.red(` ✗ ${p.description}\\n`));\n });\n\n // Provider instance — registry-driven by default, but falls through to\n // config-only construction when the catalog is unavailable (or the\n // user explicitly disabled it).\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 if (config.features.modelsRegistry) {\n provider = providerRegistry.create({ ...providerConfig, type: config.provider });\n } else {\n provider = makeProviderFromConfig(config.provider, {\n ...providerConfig,\n type: config.provider,\n });\n }\n } catch (err) {\n process.stderr.write(\n `Failed to create provider: ${err instanceof Error ? err.message : err}\\n`,\n );\n await reader.close();\n return 2;\n }\n\n // Build system prompt\n const promptBuilder = container.resolve(TOKENS.SystemPromptBuilder) as SystemPromptBuilder;\n const systemPrompt = await promptBuilder.build({\n cwd,\n projectRoot,\n tools: toolRegistry.list(),\n provider: config.provider,\n model: config.model,\n });\n\n // Session — fresh by default, or resumed from disk if --resume <id> was passed.\n const sessionStore = container.resolve(TOKENS.SessionStore);\n let resumeId = typeof flags['resume'] === 'string' ? flags['resume'] : undefined;\n\n // Crash recovery: if the last interactive run was killed mid-flight,\n // its `active.json` lockfile is still on disk and the session has no\n // `session_end` event. Offer to resume it before opening a fresh one.\n // Skipped when the user explicitly chose `--resume <id>` or asked to\n // bypass with `--no-recovery`.\n const recoveryLock = new RecoveryLock({\n dir: wpaths.projectSessions,\n sessionStore,\n });\n if (!resumeId && !flags['no-recovery']) {\n const abandoned = await recoveryLock.checkAbandoned();\n if (abandoned && abandoned.messageCount > 0) {\n const choice = await promptRecovery(reader, renderer, abandoned, !!flags['recover']);\n if (choice === 'resume') {\n resumeId = abandoned.sessionId;\n } else if (choice === 'delete') {\n await sessionStore.delete(abandoned.sessionId).catch(() => undefined);\n await recoveryLock.clear();\n } else {\n // 'skip' — leave the file on disk, just clear the lock so we\n // don't ask again every launch.\n await recoveryLock.clear();\n }\n } else if (abandoned) {\n // Empty session (no real work done) — silently discard.\n await sessionStore.delete(abandoned.sessionId).catch(() => undefined);\n await recoveryLock.clear();\n }\n }\n\n let session;\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(\n `Resumed session ${resumed.data.metadata.id} — ${restoredMessages.length} messages, ${resumed.data.usage.input + resumed.data.usage.output} tokens used previously.`,\n );\n } catch (err) {\n renderer.writeError(`Resume failed: ${err instanceof Error ? err.message : String(err)}`);\n return 2;\n }\n } else {\n session = await sessionStore.create({\n id: '',\n title: '',\n model: config.model,\n provider: config.provider,\n });\n }\n\n // Claim the lock for this session. Released in the finally block below.\n await recoveryLock.write(session.id).catch(() => undefined);\n\n // Attachment store: per-session, spooled under sessions/<id>/attachments/.\n const attachments = new DefaultAttachmentStore({\n spoolDir: path.join(wpaths.projectSessions, session.id, 'attachments'),\n });\n\n // Queue persistence (TUI only — the REPL has no concurrent input).\n // Lives next to attachments so deleting the session dir cleans both.\n const queueStore = new QueueStore({\n dir: path.join(wpaths.projectSessions, session.id),\n });\n\n const tokenCounter = container.resolve(TOKENS.TokenCounter);\n\n // Session stats tracker — subscribes to events; rendered at the end.\n const stats = new SessionStats(events, tokenCounter);\n\n const ctxSignal = new AbortController().signal;\n const context = new Context({\n systemPrompt,\n provider,\n session,\n signal: ctxSignal,\n tokenCounter,\n cwd,\n projectRoot,\n model: config.model,\n });\n // Hydrate the transcript when resuming so the model sees the prior\n // conversation. Order is preserved from the JSONL log.\n if (restoredMessages.length > 0) {\n context.messages.push(...restoredMessages);\n }\n\n const pipelines = createDefaultPipelines();\n\n // Resolve compactor — bound earlier (strategy-aware binding moved before provider creation)\n const compactor = container.resolve(TOKENS.Compactor);\n\n // Auto-compaction: monitor token load and compact when thresholds are crossed.\n // Skipped when config.context.autoCompact is false.\n //\n // Resolve the *model-specific* maxContext via the registry — the\n // provider object only knows its family default (e.g. anthropic =\n // 200k), which is wrong for variants like Claude Opus 4.7 with the\n // 1M-context beta. Falls back to the provider baseline when the\n // registry can't resolve the model.\n const resolvedCaps = await capabilitiesFor(modelsRegistry, config.provider, context.model).catch(\n () => undefined,\n );\n const effectiveMaxContext =\n config.context.effectiveMaxContext ??\n resolvedCaps?.maxContext ??\n provider.capabilities.maxContext;\n\n // Helper: keep the spinner's context chip in sync with the latest\n // provider response and the resolved max-context ceiling.\n const updateSpinnerContext = () => {\n if (effectiveMaxContext > 0 && lastInputTokens > 0) {\n spinner.setContext({ used: lastInputTokens, max: effectiveMaxContext });\n } else {\n spinner.setContext(undefined);\n }\n };\n\n if (config.context.autoCompact !== false) {\n const autoCompactor = new AutoCompactionMiddleware(\n compactor,\n effectiveMaxContext,\n (ctx) => {\n const msgs = ctx.messages;\n let total = 0;\n for (const m of msgs) {\n if (typeof m.content === 'string') total += Math.ceil(m.content.length / 4);\n else if (Array.isArray(m.content)) {\n for (const b of m.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 }\n return total;\n },\n {\n warn: config.context.warnThreshold,\n soft: config.context.softThreshold,\n hard: config.context.hardThreshold,\n },\n 'soft',\n );\n pipelines.contextWindow.use({\n name: 'AutoCompaction',\n handler: autoCompactor.handler(),\n });\n }\n\n const agent = new Agent({\n container,\n tools: toolRegistry,\n providers: providerRegistry,\n events,\n pipelines,\n context,\n maxIterations: config.tools.maxIterations,\n iterationTimeoutMs: config.tools.iterationTimeoutMs,\n executionStrategy: config.tools.defaultExecutionStrategy,\n perIterationOutputCapBytes: config.tools.perIterationOutputCapBytes,\n });\n\n // MCP servers\n const mcpRegistry = new MCPRegistry({ toolRegistry, events, log: logger });\n if (config.features.mcp) {\n for (const cfg of Object.values(config.mcpServers ?? {})) {\n try {\n await mcpRegistry.start(cfg);\n } catch (err) {\n logger.warn(`MCP server \"${cfg.name}\" failed to start`, err);\n }\n }\n }\n\n // Slash registry — created before plugins so plugins can register commands.\n const slashRegistry = new SlashCommandRegistry();\n\n // Plugins\n if (config.features.plugins && config.plugins && config.plugins.length > 0) {\n const resolvedPlugins: Plugin[] = [];\n for (const p of config.plugins) {\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 logger.warn(`Plugin \"${spec}\" failed to load`, err);\n }\n }\n if (resolvedPlugins.length > 0) {\n const { default: createApi } = await import('./plugin-api-factory.js');\n await loadPlugins(resolvedPlugins, {\n log: logger,\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: slashRegistry,\n mcpRegistry,\n config,\n log: logger,\n }),\n });\n }\n }\n\n const slashCmds = buildBuiltinSlashCommands({\n registry: slashRegistry,\n toolRegistry,\n compactor: container.resolve(TOKENS.Compactor),\n sessionStore,\n skillLoader,\n tokenCounter,\n renderer,\n memoryStore,\n context,\n onExit: () => {\n void mcpRegistry.stopAll();\n },\n onClear: () => {\n // Wipe the visible screen AND the terminal's scrollback so `/clear`\n // actually feels like a fresh start. Without `\\x1b[3J` (xterm\n // scrollback-erase, supported by Windows Terminal/iTerm/etc.) the\n // old conversation is still scrollable above. In TUI mode Ink owns\n // the live area and redraws it on the next state change, so we\n // only need to clear; we don't need to ourselves re-emit input/\n // status. In REPL mode the prompt prints fresh after this.\n try {\n process.stdout.write('\\x1b[2J\\x1b[3J\\x1b[H');\n } catch {\n // stdout may be closed during shutdown — ignore.\n }\n },\n onSwitchModel: (name) => {\n context.model = name;\n },\n onSwitchProvider: (name) => {\n try {\n const newCfg = config.providers?.[name] ?? {\n type: name,\n apiKey: config.apiKey,\n baseUrl: config.baseUrl,\n };\n const newProvider = providerRegistry.create({ ...newCfg, type: name });\n context.provider = newProvider;\n // Config is frozen — rebuild rather than assign.\n config = Object.freeze({ ...config, provider: name });\n } catch (err) {\n renderer.writeError(\n `Cannot switch to \"${name}\": ${err instanceof Error ? err.message : err}`,\n );\n }\n },\n onDiag: () => {\n const u = tokenCounter.total();\n const cost = tokenCounter.estimateCost();\n renderer.write(\n [\n `${color.bold('WrongStack diag')}`,\n ` provider: ${config.provider} / ${context.model}`,\n ` projectRoot: ${projectRoot}`,\n ` tokens: in ${u.input} out ${u.output} cacheR ${u.cacheRead ?? 0}`,\n ` cost: $${cost.total.toFixed(4)}`,\n ` tools: ${toolRegistry.list().length}`,\n ` mcpServers: ${mcpRegistry.list().length}`,\n '',\n ].join('\\n'),\n );\n },\n onStats: () => {\n stats.render(renderer);\n },\n });\n for (const cmd of slashCmds) slashRegistry.register(cmd);\n\n // Single-shot vs REPL\n let code = 0;\n try {\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 if (positional.length > 0 || promptFlag) {\n const query = positional.join(' ');\n const ctrl = new AbortController();\n const onSigint = () => ctrl.abort();\n process.on('SIGINT', onSigint);\n const startedAt = Date.now();\n const before = tokenCounter.total();\n const costBefore = tokenCounter.estimateCost().total;\n let result: import('@wrongstack/core').RunResult;\n try {\n result = await agent.run(query, { signal: ctrl.signal });\n } finally {\n process.off('SIGINT', onSigint);\n }\n const after = tokenCounter.total();\n const costAfter = tokenCounter.estimateCost().total;\n const usage = {\n input: after.input - before.input,\n output: after.output - before.output,\n iterations: result.iterations,\n cost: costAfter - costBefore,\n elapsedMs: Date.now() - startedAt,\n };\n if (flags['output-json']) {\n const json = JSON.stringify({\n status: result.status,\n finalText: result.finalText ?? null,\n error: result.error instanceof Error ? result.error.message : (result.error ?? null),\n usage,\n });\n process.stdout.write(json + '\\n');\n } else {\n if (result.status === 'failed') {\n code = 1;\n renderer.writeError(\n 'Failed: ' +\n (result.error instanceof Error ? result.error.message : String(result.error)),\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 // Lazy-load to avoid pulling React/Ink into the cold path for non-TUI usage.\n const { runTui } = await import('@wrongstack/tui');\n // Silence stdout writes from the renderer while Ink owns the\n // terminal. The tool executor calls renderer.writeToolCall /\n // writeToolResult on every tool execution; if those raw writes\n // land in stdout alongside Ink's redraws, the cursor math\n // breaks and the input + status bar end up duplicated in\n // scrollback (and in alt-screen, smeared across the buffer).\n // The TUI shows tool calls via the `tool.executed` event in\n // its own <History> component, so the renderer has nothing\n // useful to add here anyway.\n renderer.setSilent(true);\n try {\n code = await runTui({\n agent,\n events,\n slashRegistry,\n attachments,\n tokenCounter,\n model: context.model,\n banner: !flags['no-banner'],\n queueStore,\n yolo: !!config.yolo,\n appVersion: CLI_VERSION,\n provider: config.provider,\n effectiveMaxContext,\n // Opt-in: alt-screen disables the terminal's native scrollback,\n // so we default to false. `--no-alt-screen` is kept as a no-op\n // for backward compatibility with old invocation scripts.\n altScreen: flags['alt-screen'] === true,\n // Alt-screen exit erases the TUI view. Print a one-line hint\n // into the user's normal terminal so they know the session is\n // preserved and can resume it. Skipped automatically when\n // alt-screen is off — runTui only fires onAfterExit then.\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 });\n } finally {\n renderer.setSilent(false);\n }\n } else {\n code = await runRepl({\n agent,\n renderer,\n reader,\n slashRegistry,\n tokenCounter,\n attachments,\n effectiveMaxContext,\n });\n }\n } finally {\n stats.render(renderer);\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\n/**\n * Prompt the user about an abandoned session. The lockfile lifecycle\n * guarantees we only get here when the previous instance died without\n * writing `session_end` AND there's real work on disk (≥1 message).\n *\n * `--recover` short-circuits to \"resume\" without asking; piped/non-TTY\n * input degrades to the same — the alternative is hanging on stdin or\n * forcing the user to remember a flag they never typed.\n */\nasync function promptRecovery(\n reader: ReadlineInputReader,\n renderer: TerminalRenderer,\n abandoned: import('@wrongstack/core').AbandonedSession,\n autoRecover: boolean,\n): Promise<'resume' | 'delete' | 'skip'> {\n const minutes = Math.round(abandoned.ageMs / 60_000);\n const ageLabel =\n minutes < 1\n ? `${Math.round(abandoned.ageMs / 1000)}s ago`\n : minutes < 60\n ? `${minutes} min ago`\n : `${Math.round(minutes / 60)}h ago`;\n const summary = `Previous session was killed mid-run: ${abandoned.sessionId} (${abandoned.messageCount} messages, ${ageLabel}).`;\n if (autoRecover) {\n renderer.writeInfo(`${summary} Auto-resuming (--recover).`);\n return 'resume';\n }\n if (!process.stdin.isTTY) {\n renderer.writeInfo(\n `${summary} Non-interactive — leaving as-is. Use \\`wstack resume ${abandoned.sessionId}\\` or pass \\`--recover\\` to auto-resume.`,\n );\n return 'skip';\n }\n renderer.writeInfo(summary);\n const answer = await reader.readKey(\n `${color.amber('?')} Recover it? ${color.dim('[')}${color.bold('Y')}es / ${color.bold('n')}o / ${color.bold('d')}elete${color.dim(']')} `,\n [\n { key: 'y', label: 'yes', value: 'resume' },\n { key: 'Y', label: 'yes', value: 'resume' },\n { key: '\\r', label: 'yes', value: 'resume' },\n { key: '\\n', label: 'yes', value: 'resume' },\n { key: 'n', label: 'no', value: 'skip' },\n { key: 'N', label: 'no', value: 'skip' },\n { key: 'd', label: 'delete', value: 'delete' },\n { key: 'D', label: 'delete', value: 'delete' },\n ],\n );\n return answer as 'resume' | 'delete' | 'skip';\n}\n\nfunction fmtTok(n: number): string {\n if (n < 1000) return String(n);\n if (n < 1_000_000) return `${(n / 1000).toFixed(n < 10_000 ? 1 : 0)}k`;\n return `${(n / 1_000_000).toFixed(1)}M`;\n}\n\n\n\nconst isMain =\n import.meta.url === `file://${process.argv[1]?.replace(/\\\\/g, '/')}` ||\n process.argv[1]?.endsWith('/cli/dist/index.js') ||\n process.argv[1]?.endsWith('\\\\cli\\\\dist\\\\index.js');\nif (isMain) {\n main(process.argv.slice(2)).then(\n (c) => {\n // Set exitCode and let Node drain async handles (undici TLS, log file\n // flushes) naturally. Force-exit after a brief grace period so we don't\n // hang if a plugin or MCP server leaks. Avoids libuv UV_HANDLE_CLOSING\n // assertions seen on Windows when process.exit() races with handle teardown.\n process.exitCode = c;\n setTimeout(() => process.exit(c), 200).unref();\n },\n (err) => {\n process.stderr.write((err instanceof Error ? err.stack : String(err)) + '\\n');\n process.exitCode = 1;\n setTimeout(() => process.exit(1), 200).unref();\n },\n );\n}\n"]}
|