@ofear/xdou 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli.ts","../src/orchestrator.ts","../src/core/artifact-store.ts","../src/core/context-compiler.ts","../src/core/repo.ts","../src/core/mission-check.ts","../src/core/acceptance-tests.ts","../src/core/review-verdict.ts","../src/core/validation.ts","../src/agents/base.ts","../src/agents/claude-code.ts","../src/agents/codex.ts","../src/agents/opencode.ts","../src/agents/openrouter.ts","../src/agents/registry.ts","../src/config/schema.ts","../src/config/load.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command, Flags } from '@oclif/core';\nimport fs from 'fs-extra';\nimport pc from 'picocolors';\nimport Table from 'cli-table3';\nimport YAML from 'yaml';\nimport { join } from 'node:path';\nimport { XdouOrchestrator } from './orchestrator.js';\nimport { defaultConfig, type TeamConfig } from './config/schema.js';\nimport { loadConfig } from './config/load.js';\n\nclass Xdou extends Command {\n static override description = 'xdou: multi-agent coding from your terminal';\n static override strict = false;\n static override flags = {\n cwd: Flags.string({ default: process.cwd(), description: 'Working directory' }),\n json: Flags.boolean({ default: false }),\n agents: Flags.string({ description: 'Comma-separated agent ids for brainstorm/plan/run' }),\n 'max-fix-attempts': Flags.integer({ default: 1, description: 'Maximum fixer iterations for run' }),\n };\n\n async run(): Promise<void> {\n const { argv, flags } = await this.parse(Xdou);\n const [cmd, ...rest] = argv as string[];\n const cwd = flags.cwd;\n const { config } = await loadConfig(cwd);\n const orchestrator = new XdouOrchestrator(cwd, config.artifactDir, config.agents);\n const fallbackTeam = defaultConfig().teams.default;\n if (!fallbackTeam) throw new Error('Internal error: default team missing');\n const team = config.teams.default ?? fallbackTeam;\n switch (cmd) {\n case 'init': await this.initProject(cwd); break;\n case 'agents': await this.agents(orchestrator, rest, flags.json); break;\n case 'brainstorm': await this.brainstorm(orchestrator, rest, team, flags.agents); break;\n case 'plan': await this.plan(orchestrator, rest, team, flags.agents); break;\n case 'run': await this.runMission(orchestrator, rest, team, flags.agents, flags['max-fix-attempts'], flags.json); break;\n case 'apply': await this.apply(orchestrator, rest, flags.json); break;\n case 'status': await this.status(orchestrator, rest, flags.json); break;\n case 'runs': await this.runs(orchestrator, rest, flags.json); break;\n case 'context': await this.context(orchestrator, rest); break;\n case 'config': await this.configCommand(cwd, rest); break;\n case undefined:\n case 'help':\n case '--help':\n case '-h':\n this.log('xdou: multi-agent coding from your terminal\\n\\nCommands:\\n init\\n agents [list|detect]\\n brainstorm <mission> [--agents a,b]\\n plan <mission>\\n run <mission> [--agents architect,implementer,reviewer] [--max-fix-attempts n] [--json]\\n apply <run-id> [--json]\\n status [run-id]\\n runs list\\n context [run-id]\\n config validate');\n break;\n default: throw new Error(`Unknown command: ${cmd}. Try: xdou init | agents detect | brainstorm | plan | run | status | runs list | context | config validate`);\n }\n }\n\n private async initProject(cwd: string): Promise<void> {\n const configPath = join(cwd, 'xdou.yaml');\n if (await fs.pathExists(configPath)) throw new Error(`Config already exists: ${configPath}`);\n await fs.writeFile(configPath, YAML.stringify(defaultConfig()), 'utf8');\n await fs.ensureDir(join(cwd, '.xdou', 'runs'));\n await this.ensureGitignore(cwd);\n this.log(`${pc.green('created')} ${configPath}`);\n }\n\n private async ensureGitignore(cwd: string): Promise<void> {\n const path = join(cwd, '.gitignore');\n const current = await fs.readFile(path, 'utf8').catch(() => '');\n const required = ['.xdou/runs/', '.xdou/worktrees/'];\n const existing = current.split(/\\r?\\n/);\n const missing = required.filter((line) => !existing.includes(line));\n if (missing.length) await fs.appendFile(path, `${current && !current.endsWith('\\n') ? '\\n' : ''}${missing.join('\\n')}\\n`, 'utf8');\n }\n\n private async agents(orchestrator: XdouOrchestrator, args: string[], json: boolean): Promise<void> {\n const sub = args[0] ?? 'list';\n if (!['list', 'detect'].includes(sub)) throw new Error('Usage: xdou agents [list|detect]');\n const detected = await orchestrator.detectAgents();\n if (json) { this.log(JSON.stringify(detected, null, 2)); return; }\n const table = new Table({ head: ['agent', 'available', 'version/path'] });\n for (const [name, info] of Object.entries(detected)) table.push([name, info.available ? pc.green('yes') : pc.red('no'), info.version ?? info.path ?? info.error ?? '']);\n this.log(table.toString());\n }\n\n private mission(args: string[]): string { const text = args.join(' ').trim(); if (!text) throw new Error('Mission is required. Example: xdou run \"add oauth\"'); return text; }\n private parseAgents(args: string[], fallback: string[], flagValue?: string): string[] {\n if (flagValue) return flagValue.split(',').map((s) => s.trim()).filter(Boolean);\n const idx = args.indexOf('--agents');\n const value = idx >= 0 ? args[idx + 1] : undefined;\n if (idx >= 0 && !value) throw new Error('--agents requires a comma-separated value');\n return value ? value.split(',').map((s) => s.trim()).filter(Boolean) : fallback;\n }\n private cleanMissionArgs(args: string[]): string[] { const idx = args.indexOf('--agents'); return idx >= 0 ? args.slice(0, idx) : args; }\n private numberFlag(args: string[], name: string, fallback: number): number {\n const idx = args.indexOf(name);\n if (idx < 0) return fallback;\n const value = Number(args[idx + 1]);\n if (!Number.isInteger(value) || value < 0) throw new Error(`${name} requires a non-negative integer`);\n return value;\n }\n private cleanRunArgs(args: string[]): string[] {\n let cleaned = this.cleanMissionArgs(args);\n const idx = cleaned.indexOf('--max-fix-attempts');\n if (idx >= 0) cleaned = [...cleaned.slice(0, idx), ...cleaned.slice(idx + 2)];\n return cleaned;\n }\n\n private async brainstorm(orchestrator: XdouOrchestrator, args: string[], team: TeamConfig, agentsFlag?: string): Promise<void> {\n const agents = this.parseAgents(args, team.brainstormers, agentsFlag);\n const runId = await orchestrator.brainstorm(this.mission(this.cleanMissionArgs(args)), agents);\n this.log(`${pc.green('brainstorm complete')} run=${runId} artifacts=${orchestrator.store.runDir(runId)}`);\n }\n\n private async plan(orchestrator: XdouOrchestrator, args: string[], team: TeamConfig, agentsFlag?: string): Promise<void> {\n const agents = this.parseAgents(args, [team.architect, team.implementer, team.reviewer[0] ?? team.architect], agentsFlag);\n const runId = await orchestrator.run({\n cwd: orchestrator.cwd,\n mission: this.mission(this.cleanRunArgs(args)),\n execute: false,\n team: agents,\n brainstormers: team.brainstormers,\n critics: [team.critic],\n reviewers: team.reviewer,\n });\n this.log(`${pc.green('plan complete')} run=${runId} artifacts=${orchestrator.store.runDir(runId)}`);\n }\n\n private async runMission(orchestrator: XdouOrchestrator, args: string[], team: TeamConfig, agentsFlag?: string, maxFixAttempts = 1, json = false): Promise<void> {\n const agents = this.parseAgents(args, [team.architect, team.implementer, team.reviewer[0] ?? team.architect], agentsFlag);\n const runId = await orchestrator.run({\n cwd: orchestrator.cwd,\n mission: this.mission(this.cleanRunArgs(args)),\n team: agents,\n brainstormers: team.brainstormers,\n critics: [team.critic],\n reviewers: team.reviewer,\n fixer: team.fixer,\n maxFixAttempts,\n });\n const manifest = await orchestrator.store.readManifest(runId);\n const payload = { runId, status: manifest.status, phase: manifest.phase, artifactDir: manifest.artifactDir, worktreePath: manifest.worktreePath };\n this.log(json ? JSON.stringify(payload, null, 2) : `${pc.green('run complete')} run=${runId} artifacts=${orchestrator.store.runDir(runId)}`);\n }\n\n private async apply(orchestrator: XdouOrchestrator, args: string[], json: boolean): Promise<void> {\n const runId = args[0];\n if (!runId) throw new Error('Usage: xdou apply <run-id>');\n const result = await orchestrator.applyRun(runId);\n this.log(json ? JSON.stringify(result, null, 2) : `${pc.green('applied')} run=${runId} files=${result.filesChanged}`);\n }\n\n private async status(orchestrator: XdouOrchestrator, args: string[], json: boolean): Promise<void> {\n await orchestrator.store.recoverStaleRuns();\n const runId = args[0] ?? await orchestrator.store.latestRunId();\n if (!runId) { this.log('No runs found.'); return; }\n const manifest = await orchestrator.store.readManifest(runId);\n this.log(json ? JSON.stringify(manifest, null, 2) : `${manifest.id} ${manifest.status}/${manifest.phase}\\n${manifest.artifactDir}`);\n }\n\n private async runs(orchestrator: XdouOrchestrator, args: string[], json: boolean): Promise<void> {\n if ((args[0] ?? 'list') !== 'list') throw new Error('Usage: xdou runs list');\n await orchestrator.store.recoverStaleRuns();\n const runs = await orchestrator.store.listRuns();\n if (json) { this.log(JSON.stringify(runs, null, 2)); return; }\n if (!runs.length) { this.log('No runs found.'); return; }\n const table = new Table({ head: ['run', 'status', 'phase', 'mission'] });\n for (const run of runs) table.push([run.id, run.status, run.phase, run.mission]);\n this.log(table.toString());\n }\n\n private async context(orchestrator: XdouOrchestrator, args: string[]): Promise<void> {\n const runId = args[0] ?? await orchestrator.store.latestRunId();\n if (!runId) throw new Error('No run id supplied and no previous run found.');\n const inboxPath = join(orchestrator.store.runDir(runId), 'agents');\n this.log(inboxPath);\n }\n\n private async configCommand(cwd: string, args: string[]): Promise<void> {\n if ((args[0] ?? 'validate') !== 'validate') throw new Error('Usage: xdou config validate');\n const loaded = await loadConfig(cwd);\n this.log(`${pc.green('valid')} ${loaded.filepath ?? 'defaults'}`);\n }\n}\n\nvoid Xdou.run().catch((error: unknown) => {\n console.error(pc.red(error instanceof Error ? error.message : String(error)));\n process.exitCode = 1;\n});\n","import pc from 'picocolors';\nimport fs from 'fs-extra';\nimport { join } from 'node:path';\nimport { ArtifactStore } from './core/artifact-store.js';\nimport { compileContextPacket } from './core/context-compiler.js';\nimport { applyPatch, createProjectSnapshot, createRunWorktree, ensureCleanWorkingTree, ensureGitRepo, gitDiff, repoSummary } from './core/repo.js';\nimport { checkMissionCompletion } from './core/mission-check.js';\nimport { runGeneratedAcceptanceTests } from './core/acceptance-tests.js';\nimport { extractReviewVerdict, reviewVerdictBlocks } from './core/review-verdict.js';\nimport { runValidation } from './core/validation.js';\nimport { defaultAgents, selectAgents } from './agents/registry.js';\nimport type { AgentAdapter, AgentRunResult, ValidationResult } from './types.js';\nimport type { ReviewVerdict } from './core/review-verdict.js';\nimport type { AgentDefinition } from './agents/registry.js';\n\nexport interface RunOptions {\n cwd: string;\n mission: string;\n artifactDir?: string;\n team?: string[];\n brainstormers?: string[];\n critics?: string[];\n reviewers?: string[];\n fixer?: string;\n maxFixAttempts?: number;\n isolated?: boolean;\n execute?: boolean;\n timeoutMs?: number;\n}\n\ninterface CouncilOutput { agent: string; role: 'brainstormer' | 'critic'; result: AgentRunResult }\ninterface ReviewOutput { agent: string; result: AgentRunResult; verdict: ReviewVerdict }\n\nexport class XdouOrchestrator {\n readonly cwd: string;\n readonly store: ArtifactStore;\n readonly agents: Record<string, AgentAdapter>;\n\n constructor(\n cwd: string,\n artifactDir = '.xdou',\n agentDefinitions: Record<string, AgentDefinition> = {},\n agentOverrides: Record<string, AgentAdapter> = {},\n ) {\n this.cwd = cwd;\n this.store = new ArtifactStore(join(cwd, artifactDir));\n this.agents = { ...defaultAgents(agentDefinitions), ...agentOverrides };\n }\n\n async detectAgents(): Promise<Record<string, Awaited<ReturnType<AgentAdapter['detect']>>>> {\n const entries = await Promise.all(Object.entries(this.agents).map(async ([name, agent]) => [name, await agent.detect()] as const));\n return Object.fromEntries(entries);\n }\n\n async brainstorm(mission: string, names = ['claude', 'codex']): Promise<string> {\n await ensureGitRepo(this.cwd);\n const run = await this.store.createRun(mission);\n await this.store.updateManifest(run.id, { status: 'running', phase: 'brainstorm' });\n const project = await repoSummary(this.cwd);\n const snapshotCwd = await createProjectSnapshot(this.cwd, join(this.store.runDir(run.id), 'project-snapshot'));\n await this.store.writeText(run.id, 'project.md', project || 'No common project metadata found.');\n const council = await this.runCouncil(run.id, mission, project, snapshotCwd, names, []);\n const councilText = this.formatCouncil(council);\n await this.store.writeText(run.id, 'brainstorm.md', councilText);\n await this.store.writeText(run.id, 'council.md', councilText);\n await this.store.updateManifest(run.id, { status: 'completed', phase: 'brainstormed' });\n return run.id;\n }\n\n async run(options: RunOptions): Promise<string> {\n await ensureGitRepo(this.cwd);\n if (options.execute !== false) await ensureCleanWorkingTree(this.cwd);\n const run = await this.store.createRun(options.mission);\n const cleanupSignals = this.installAbortSignalHandlers(run.id);\n await this.store.updateManifest(run.id, { status: 'running', phase: 'council', processPid: process.pid });\n const project = await repoSummary(this.cwd);\n const snapshotCwd = await createProjectSnapshot(this.cwd, join(this.store.runDir(run.id), 'project-snapshot'));\n await this.store.writeText(run.id, 'project.md', project || 'No common project metadata found.');\n const selected = selectAgents(options.team ?? ['claude', 'codex', 'claude'], this.agents);\n const architect = selected[0];\n const implementer = selected[1];\n const fallbackReviewer = selected[2] ?? selected[0];\n if (!architect || !implementer || !fallbackReviewer) throw new Error('A run needs at least architect, implementer, and reviewer agents.');\n\n const brainstormers = options.brainstormers ?? [architect.id, implementer.id];\n const critics = options.critics ?? [];\n const reviewerNames = options.reviewers ?? [fallbackReviewer.id];\n const council = await this.runCouncil(run.id, options.mission, project, snapshotCwd, brainstormers, critics, options.timeoutMs);\n const councilText = this.formatCouncil(council);\n await this.store.writeText(run.id, 'council.md', councilText || 'No council agents configured.');\n\n await this.store.updateManifest(run.id, { phase: 'planning' });\n const synthesisPrompt = [\n compileContextPacket({ runId: run.id, agent: architect.id, role: 'architect', mission: options.mission, projectContext: project, budget: 'balanced' }),\n '',\n 'CO-DEVELOPMENT COUNCIL INPUTS:',\n councilText || 'No council inputs.',\n '',\n 'SYNTHESIS CONTRACT:',\n 'Create one canonical plan that selects the strongest ideas, resolves disagreements, lists risks, and gives the implementer precise execution steps.',\n ].join('\\n');\n const planInput = { cwd: snapshotCwd, runDir: this.store.runDir(run.id), prompt: synthesisPrompt, ...(options.timeoutMs ? { timeoutMs: options.timeoutMs } : {}) };\n const planResult = await architect.run(planInput);\n const rawPlan = planResult.stdout || planResult.stderr;\n const synthesis = this.formatSynthesis(architect.id, rawPlan, council);\n await this.store.writeText(run.id, 'plan.md', rawPlan);\n await this.store.writeText(run.id, 'synthesis.md', synthesis);\n await this.store.writeJson(run.id, `agents/${architect.id}/plan-result.json`, planResult);\n await this.store.appendEvent(run.id, { type: 'plan.created', by: architect.id, ok: planResult.ok });\n if (!planResult.ok) { await this.store.updateManifest(run.id, { status: 'blocked', phase: 'planning_failed' }); throw new Error(`Architect failed: ${planResult.stderr}`); }\n if (options.execute === false) { cleanupSignals(); await this.store.updateManifest(run.id, { status: 'completed', phase: 'planned' }); return run.id; }\n\n const workspace = options.isolated === false ? { cwd: this.cwd } : await createRunWorktree(this.cwd, run.id);\n await this.store.updateManifest(run.id, { phase: 'implementation', ...(workspace.worktreePath ? { worktreePath: workspace.worktreePath, baseRef: workspace.baseRef } : {}) });\n const implPrompt = compileContextPacket({ runId: run.id, agent: implementer.id, role: 'implementer', mission: options.mission, projectContext: project, plan: synthesis, budget: 'balanced' });\n const implInput = { cwd: workspace.cwd, runDir: this.store.runDir(run.id), prompt: implPrompt, ...(options.timeoutMs ? { timeoutMs: options.timeoutMs } : {}) };\n const implResult = await implementer.run(implInput);\n await this.store.writeJson(run.id, `agents/${implementer.id}/implementation-result.json`, implResult);\n await this.store.appendEvent(run.id, { type: 'implementation.finished', by: implementer.id, ok: implResult.ok });\n\n let diff = await gitDiff(workspace.cwd);\n await this.store.writeText(run.id, 'diff.patch', diff || 'No diff produced.');\n let validation = await this.validateWorkspace(run.id, options.mission, workspace.cwd, diff);\n await this.store.appendEvent(run.id, { type: 'validation.finished', ok: !validation.some((v) => v.status === 'failed') });\n\n await this.store.updateManifest(run.id, { phase: 'review' });\n let reviewResults = await this.runReviews(run.id, snapshotCwd, options.mission, synthesis, diff, validation, reviewerNames, options.timeoutMs);\n let failed = this.hasBlockers(implResult, validation, reviewResults);\n\n const maxFixAttempts = options.maxFixAttempts ?? 1;\n const fixerName = options.fixer ?? implementer.id;\n for (let attempt = 1; failed && attempt <= maxFixAttempts; attempt += 1) {\n const [fixer] = selectAgents([fixerName], this.agents);\n if (!fixer) break;\n await this.store.updateManifest(run.id, { phase: `fix_${attempt}`, fixAttempts: attempt });\n await this.store.appendEvent(run.id, { type: 'fix.started', by: fixer.id, attempt });\n const lastValidation = validation.at(-1);\n const fixPrompt = compileContextPacket({\n runId: run.id,\n agent: fixer.id,\n role: 'fixer',\n mission: options.mission,\n projectContext: project,\n plan: synthesis,\n diff,\n budget: 'balanced',\n ...(lastValidation ? { validation: lastValidation } : {}),\n });\n await this.store.writeText(run.id, `fixes/attempt-${attempt}/inbox.md`, fixPrompt);\n const fixInput = { cwd: workspace.cwd, runDir: this.store.runDir(run.id), prompt: fixPrompt, ...(options.timeoutMs ? { timeoutMs: options.timeoutMs } : {}) };\n const fixResult = await fixer.run(fixInput);\n await this.store.writeJson(run.id, `fixes/attempt-${attempt}/result.json`, fixResult);\n await this.store.appendEvent(run.id, { type: 'fix.finished', by: fixer.id, attempt, ok: fixResult.ok });\n diff = await gitDiff(workspace.cwd);\n await this.store.writeText(run.id, `fixes/attempt-${attempt}/diff.patch`, diff || 'No diff produced.');\n await this.store.writeText(run.id, 'diff.patch', diff || 'No diff produced.');\n validation = await this.validateWorkspace(run.id, options.mission, workspace.cwd, diff);\n await this.store.writeJson(run.id, `fixes/attempt-${attempt}/validation.json`, validation);\n await this.store.appendEvent(run.id, { type: 'validation.finished', attempt, ok: !validation.some((v) => v.status === 'failed') });\n reviewResults = await this.runReviews(run.id, snapshotCwd, options.mission, synthesis, diff, validation, reviewerNames, options.timeoutMs);\n failed = this.hasBlockers(fixResult, validation, reviewResults);\n }\n if (failed && maxFixAttempts > 0) await this.store.appendEvent(run.id, { type: 'fix.exhausted', attempts: maxFixAttempts });\n await this.store.writeText(run.id, 'final-summary.md', this.formatFinalSummary(options.mission, run.id, synthesis, validation, reviewResults, failed, workspace.worktreePath));\n const finalManifest = await this.store.updateManifest(run.id, { status: failed ? 'blocked' : 'completed', phase: failed ? 'needs_attention' : 'done' });\n await this.store.writeJson(run.id, 'result.json', { runId: run.id, status: finalManifest.status, phase: finalManifest.phase, artifactDir: finalManifest.artifactDir, worktreePath: finalManifest.worktreePath, validation, reviews: reviewResults.map((review) => ({ agent: review.agent, ok: review.result.ok, verdict: review.verdict })) });\n cleanupSignals();\n if (failed) console.error(pc.yellow(`xdou run ${run.id} completed with blockers; inspect ${this.store.runDir(run.id)}`));\n return run.id;\n }\n\n async applyRun(runId: string): Promise<{ runId: string; applied: true; filesChanged: number; files: string[]; artifactDir: string }> {\n await ensureGitRepo(this.cwd);\n const manifest = await this.store.readManifest(runId);\n if (manifest.status !== 'completed') throw new Error(`Refusing to apply run ${runId} with status ${manifest.status}.`);\n const diffPath = join(this.store.runDir(runId), 'diff.patch');\n const diff = await fs.readFile(diffPath, 'utf8');\n const applied = await applyPatch(this.cwd, diff);\n const result = { runId, applied: true as const, filesChanged: applied.filesChanged, files: applied.files, artifactDir: manifest.artifactDir };\n await this.store.writeJson(runId, 'apply-result.json', result);\n await this.store.appendEvent(runId, { type: 'run.applied', by: 'xdou', filesChanged: applied.filesChanged });\n await this.store.updateManifest(runId, { appliedAt: new Date().toISOString() });\n return result;\n }\n\n private async runCouncil(runId: string, mission: string, project: string, cwd: string, brainstormers: string[], critics: string[], timeoutMs?: number): Promise<CouncilOutput[]> {\n const specs = [\n ...brainstormers.map((name) => ({ name, role: 'brainstormer' as const })),\n ...critics.map((name) => ({ name, role: 'critic' as const })),\n ];\n const outputs = await Promise.all(specs.map(async (spec): Promise<CouncilOutput | undefined> => {\n const [agent] = selectAgents([spec.name], this.agents);\n if (!agent) return undefined;\n const prompt = compileContextPacket({ runId, agent: agent.id, role: spec.role, mission, projectContext: project, budget: 'balanced' });\n await this.store.writeText(runId, `agents/${agent.id}/${spec.role}-inbox.md`, prompt);\n const input = { cwd, runDir: this.store.runDir(runId), prompt, ...(timeoutMs ? { timeoutMs } : {}) };\n const result = await agent.run(input);\n await this.store.writeJson(runId, `agents/${agent.id}/${spec.role}-result.json`, result);\n await this.store.appendEvent(runId, { type: 'council.finished', by: agent.id, role: spec.role, ok: result.ok, exitCode: result.exitCode });\n return { agent: agent.id, role: spec.role, result };\n }));\n return outputs.filter((output): output is CouncilOutput => Boolean(output));\n }\n\n private async runReviews(runId: string, cwd: string, mission: string, plan: string, diff: string, validation: ValidationResult[], reviewers: string[], timeoutMs?: number): Promise<ReviewOutput[]> {\n const lastValidation = validation.at(-1);\n const outputs = await Promise.all(selectAgents(reviewers, this.agents).map(async (reviewer): Promise<ReviewOutput> => {\n const reviewContext = { runId, agent: reviewer.id, role: 'reviewer', mission, plan, diff, budget: 'minimal' as const, ...(lastValidation ? { validation: lastValidation } : {}) };\n const prompt = compileContextPacket(reviewContext);\n await this.store.writeText(runId, `agents/${reviewer.id}/review-inbox.md`, prompt);\n const input = { cwd, runDir: this.store.runDir(runId), prompt, ...(timeoutMs ? { timeoutMs } : {}) };\n const result = await reviewer.run(input);\n const verdict = extractReviewVerdict(result.stdout || result.stderr);\n await this.store.writeJson(runId, `agents/${reviewer.id}/review-result.json`, result);\n await this.store.writeJson(runId, `agents/${reviewer.id}/review-verdict.json`, verdict);\n await this.store.appendEvent(runId, { type: 'review.finished', by: reviewer.id, ok: result.ok, verdict: verdict.verdict });\n return { agent: reviewer.id, result, verdict };\n }));\n await this.store.writeText(runId, 'review.md', outputs.map((review) => `## ${review.agent}\\n\\n${review.result.stdout || review.result.stderr}`).join('\\n\\n---\\n\\n'));\n await this.store.writeJson(runId, 'review-verdicts.json', outputs.map((review) => ({ agent: review.agent, ...review.verdict })));\n return outputs;\n }\n\n private async validateWorkspace(runId: string, mission: string, cwd: string, diff: string): Promise<ValidationResult[]> {\n const validation = await runValidation(cwd);\n const generatedAcceptance = await runGeneratedAcceptanceTests(cwd, mission);\n await this.store.writeJson(runId, 'generated-acceptance.json', generatedAcceptance);\n const missionCheck = checkMissionCompletion(mission, diff || 'No diff produced.');\n await this.store.writeJson(runId, 'mission-check.json', missionCheck);\n const combined: ValidationResult[] = [\n ...validation,\n generatedAcceptance,\n {\n command: 'xdou mission-completion-check',\n status: missionCheck.status === 'failed' ? 'failed' : 'passed',\n output: missionCheck.message,\n exitCode: missionCheck.status === 'failed' ? 1 : 0,\n },\n ];\n await this.store.writeJson(runId, 'validation.json', combined);\n return combined;\n }\n\n private formatCouncil(council: CouncilOutput[]): string {\n return council.map((entry) => `## ${entry.agent} (${entry.role})\\n\\n${entry.result.stdout || entry.result.stderr}`).join('\\n\\n---\\n\\n');\n }\n\n private formatSynthesis(architect: string, plan: string, council: CouncilOutput[]): string {\n const participants = council.map((entry) => `${entry.agent}:${entry.role}`).join(', ') || 'none';\n return [`# Synthesis`, '', `Architect: ${architect}`, `Council: ${participants}`, '', '## Selected implementation direction', '', plan, '', '## Collaboration rule', '', 'Implementation follows this synthesized plan, then independent reviewers inspect the resulting diff and validation output.'].join('\\n');\n }\n\n private hasBlockers(lastMutation: AgentRunResult, validation: ValidationResult[], reviews: ReviewOutput[]): boolean {\n return !lastMutation.ok || validation.some((v) => v.status === 'failed') || reviews.some((review) => !review.result.ok || reviewVerdictBlocks(review.verdict));\n }\n\n private installAbortSignalHandlers(runId: string): () => void {\n const handle = (signal: NodeJS.Signals): void => {\n void this.store.abortRun(runId, `received ${signal}`).finally(() => process.exit(130));\n };\n process.once('SIGINT', handle);\n process.once('SIGTERM', handle);\n return () => {\n process.off('SIGINT', handle);\n process.off('SIGTERM', handle);\n };\n }\n\n private formatFinalSummary(mission: string, runId: string, synthesis: string, validation: ValidationResult[], reviews: ReviewOutput[], failed: boolean, worktreePath?: string): string {\n return [\n '# XDOU Run Summary',\n '',\n `Run: ${runId}`,\n `Mission: ${mission}`,\n `Status: ${failed ? 'blocked' : 'completed'}`,\n ...(worktreePath ? [`Worktree: ${worktreePath}`] : []),\n `Reviewers: ${reviews.map((review) => review.agent).join(', ') || 'none'}`,\n '',\n '## Validation',\n ...validation.map((result) => `- ${result.status}: ${result.command}`),\n '',\n '## Synthesis',\n synthesis,\n '',\n '## Review outcomes',\n ...reviews.map((review) => `- ${review.agent}: ${review.result.ok ? 'ok' : 'failed'}`),\n ].join('\\n');\n }\n}\n","import fs from 'fs-extra';\nimport writeFileAtomic from 'write-file-atomic';\nimport { join, resolve } from 'node:path';\nimport { randomUUID } from 'node:crypto';\nimport type { RunManifest } from '../types.js';\n\nexport class ArtifactStore {\n readonly root: string;\n constructor(root: string) { this.root = root; }\n runDir(runId: string): string { return join(this.root, 'runs', runId); }\n\n async createRun(mission: string): Promise<RunManifest> {\n const id = `${new Date().toISOString().replace(/[-:.TZ]/g, '').slice(0, 14)}-${randomUUID().slice(0, 8)}`;\n const dir = this.runDir(id);\n await fs.ensureDir(dir);\n const manifest: RunManifest = { id, mission, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), status: 'created', phase: 'created', artifactDir: dir, events: 0 };\n await this.writeJson(id, 'manifest.json', manifest);\n await this.writeText(id, 'mission.md', `# Mission\\n\\n${mission}\\n`);\n await this.appendEvent(id, { type: 'run.created', by: 'xdou', mission });\n return manifest;\n }\n\n private artifactPath(runId: string, relativePath: string): string {\n const root = resolve(this.runDir(runId));\n const target = resolve(root, relativePath);\n if (target !== root && !target.startsWith(`${root}\\\\`) && !target.startsWith(`${root}/`)) throw new Error(`Artifact path escapes run directory: ${relativePath}`);\n return target;\n }\n\n async writeText(runId: string, relativePath: string, content: string): Promise<string> {\n const path = this.artifactPath(runId, relativePath);\n await fs.ensureDir(join(path, '..'));\n await writeFileAtomic(path, content, 'utf8');\n return path;\n }\n\n async writeJson(runId: string, relativePath: string, value: unknown): Promise<string> {\n return this.writeText(runId, relativePath, `${JSON.stringify(value, null, 2)}\\n`);\n }\n\n async readManifest(runId: string): Promise<RunManifest> {\n return fs.readJson(join(this.runDir(runId), 'manifest.json')) as Promise<RunManifest>;\n }\n\n async updateManifest(runId: string, patch: Partial<RunManifest>): Promise<RunManifest> {\n const current = await this.readManifest(runId);\n const next = { ...current, ...patch, updatedAt: new Date().toISOString() };\n await this.writeJson(runId, 'manifest.json', next);\n return next;\n }\n\n async appendEvent(runId: string, event: Record<string, unknown>): Promise<void> {\n const path = join(this.runDir(runId), 'timeline.ndjson');\n await fs.ensureDir(join(path, '..'));\n const enriched = { time: new Date().toISOString(), ...event };\n await fs.appendFile(path, `${JSON.stringify(enriched)}\\n`, 'utf8');\n if (event.type !== 'run.created') {\n const manifestPath = join(this.runDir(runId), 'manifest.json');\n if (await fs.pathExists(manifestPath)) {\n const manifest = await this.readManifest(runId);\n await this.writeJson(runId, 'manifest.json', { ...manifest, events: manifest.events + 1, updatedAt: new Date().toISOString() });\n }\n }\n }\n\n async latestRunId(): Promise<string | undefined> {\n const runs = await this.listRuns();\n return runs.at(-1)?.id;\n }\n\n async listRuns(): Promise<RunManifest[]> {\n const runsDir = join(this.root, 'runs');\n if (!(await fs.pathExists(runsDir))) return [];\n const entries = await fs.readdir(runsDir);\n const manifests: RunManifest[] = [];\n for (const entry of entries.sort()) {\n const manifestPath = join(runsDir, entry, 'manifest.json');\n if (await fs.pathExists(manifestPath)) manifests.push(await fs.readJson(manifestPath) as RunManifest);\n }\n return manifests;\n }\n\n async abortRun(runId: string, reason: string): Promise<RunManifest> {\n await this.appendEvent(runId, { type: 'run.aborted', by: 'xdou', reason });\n return this.updateManifest(runId, { status: 'aborted', phase: 'aborted', abortedReason: reason });\n }\n\n async recoverStaleRuns(staleAfterMs = 5 * 60_000): Promise<RunManifest[]> {\n const now = Date.now();\n const recovered: RunManifest[] = [];\n for (const run of await this.listRuns()) {\n if (run.status !== 'running') continue;\n const updatedAt = Date.parse(run.updatedAt);\n const isStale = Number.isFinite(updatedAt) && now - updatedAt >= staleAfterMs;\n const pidAlive = run.processPid ? this.isPidAlive(run.processPid) : false;\n if (!pidAlive && isStale) recovered.push(await this.abortRun(run.id, run.processPid ? `process ${run.processPid} is not running` : 'running manifest is stale and has no live process pid'));\n }\n return recovered;\n }\n\n private isPidAlive(pid: number): boolean {\n try { process.kill(pid, 0); return true; }\n catch { return false; }\n }\n}\n","import type { ContextBudget, TaskSpec, ValidationResult } from '../types.js';\n\nexport interface ContextInput {\n runId: string;\n agent: string;\n role: string;\n mission: string;\n projectContext?: string;\n plan?: string;\n task?: TaskSpec;\n decisions?: string[];\n rejected?: string[];\n risks?: string[];\n diff?: string;\n validation?: ValidationResult;\n transcript?: string;\n budget?: ContextBudget;\n}\n\nfunction list(title: string, items?: string[]): string[] {\n if (!items?.length) return [];\n return [title, ...items.map((item) => `- ${item}`), ''];\n}\n\nexport function compileContextPacket(input: ContextInput): string {\n const lines: string[] = [\n `XDOU CONTEXT PACKET`,\n `RUN: ${input.runId}`,\n `AGENT: ${input.agent}`,\n `ROLE: ${input.role}`,\n `BUDGET: ${input.budget ?? 'balanced'}`,\n '',\n 'MISSION:',\n input.mission,\n '',\n ];\n\n if (input.projectContext && input.budget !== 'minimal') lines.push('PROJECT CONTEXT:', input.projectContext, '');\n if (input.plan) lines.push('CANONICAL PLAN:', input.plan, '');\n if (input.task) {\n lines.push(`TASK ${input.task.id}: ${input.task.title}`, input.task.objective);\n if (input.task.files?.length) lines.push('Files:', ...input.task.files.map((f) => `- ${f}`));\n if (input.task.validation?.length) lines.push('Validation:', ...input.task.validation.map((v) => `- ${v}`));\n lines.push('');\n }\n lines.push(...list('ACCEPTED DECISIONS:', input.decisions));\n lines.push(...list('REJECTED APPROACHES:', input.rejected));\n lines.push(...list('KNOWN RISKS:', input.risks));\n if (input.diff) lines.push('DIFF TO REVIEW:', input.diff, '');\n if (input.validation) lines.push('VALIDATION RESULT:', `Command: ${input.validation.command}`, `Status: ${input.validation.status}`, input.validation.output, '');\n if (input.role === 'reviewer') {\n lines.push(\n 'SEMANTIC REVIEW CONTRACT:',\n 'You are the semantic completion gate. Decide whether the implementation satisfies the mission, not merely whether tests pass.',\n 'End your response with exactly one machine-readable verdict block:',\n 'REVIEW_VERDICT:',\n '{\"verdict\":\"approve|request_changes|blocked\",\"confidence\":0.0,\"reason\":\"one sentence\",\"missingRequirements\":[\"requirement not satisfied\"]}',\n 'Use request_changes when the diff/tests are green but the mission is semantically incomplete or incorrect.',\n '',\n );\n }\n if (input.budget === 'full' && input.transcript) lines.push('RAW TRANSCRIPT FOR DEBUGGING ONLY:', input.transcript, '');\n lines.push('OUTPUT CONTRACT:', 'Return concise structured markdown with: Summary, Files changed/reviewed, Tests run, Issues/risks, Recommended next step.');\n return lines.join('\\n');\n}\n","import { execa } from 'execa';\nimport fs from 'fs-extra';\nimport { join, dirname } from 'node:path';\n\nexport interface RunWorkspace { cwd: string; worktreePath?: string; baseRef?: string }\n\nexport async function isGitRepo(cwd: string): Promise<boolean> {\n const result = await execa('git', ['rev-parse', '--is-inside-work-tree'], { cwd, reject: false });\n return result.exitCode === 0 && result.stdout.trim() === 'true';\n}\nexport async function ensureGitRepo(cwd: string): Promise<void> { if (!(await isGitRepo(cwd))) throw new Error('xdou must run inside a git repository. Run git init first.'); }\nexport async function isWorkingTreeClean(cwd: string): Promise<boolean> {\n const result = await execa('git', ['status', '--porcelain'], { cwd, reject: false });\n return result.exitCode === 0 && result.stdout.trim().length === 0;\n}\nexport async function ensureCleanWorkingTree(cwd: string): Promise<void> {\n if (!(await isWorkingTreeClean(cwd))) throw new Error('Refusing to run coding agents on a dirty working tree. Commit/stash changes first, or run planning/brainstorming only.');\n}\nexport async function gitDiff(cwd: string): Promise<string> {\n const tracked = await execa('git', ['diff', 'HEAD', '--', '.'], { cwd, reject: false });\n const untracked = await execa('git', ['ls-files', '--others', '--exclude-standard'], { cwd, reject: false });\n const patches: string[] = [tracked.stdout].filter(Boolean);\n for (const file of untracked.stdout.split(/\\r?\\n/).filter(Boolean)) {\n const path = join(cwd, file);\n const content = await fs.readFile(path, 'utf8').catch(() => undefined);\n if (content === undefined) continue;\n const lines = content.split(/\\r?\\n/);\n if (lines.at(-1) === '') lines.pop();\n patches.push([\n `diff --git a/${file} b/${file}`,\n 'new file mode 100644',\n 'index 0000000..0000000',\n '--- /dev/null',\n `+++ b/${file}`,\n `@@ -0,0 +1,${lines.length} @@`,\n ...lines.map((line) => `+${line}`),\n ].join('\\n'));\n }\n return patches.join('\\n\\n');\n}\nexport async function currentHead(cwd: string): Promise<string> { const r = await execa('git', ['rev-parse', 'HEAD'], { cwd }); return r.stdout.trim(); }\nexport async function createRunWorktree(repoRoot: string, runId: string, artifactDir = '.xdou'): Promise<RunWorkspace> {\n const baseRef = await currentHead(repoRoot);\n const worktreePath = join(repoRoot, artifactDir, 'worktrees', runId);\n await fs.remove(worktreePath);\n await fs.ensureDir(join(worktreePath, '..'));\n await execa('git', ['worktree', 'add', '--detach', worktreePath, baseRef], { cwd: repoRoot });\n return { cwd: worktreePath, worktreePath, baseRef };\n}\nexport async function createProjectSnapshot(repoRoot: string, snapshotPath: string): Promise<string> {\n await fs.remove(snapshotPath);\n await fs.ensureDir(snapshotPath);\n const tracked = await execa('git', ['ls-files', '-z'], { cwd: repoRoot });\n const files = tracked.stdout.split('\\0').filter(Boolean);\n for (const file of files) {\n const source = join(repoRoot, file);\n const target = join(snapshotPath, file);\n await fs.ensureDir(dirname(target));\n await fs.copyFile(source, target).catch(() => undefined);\n }\n return snapshotPath;\n}\nexport interface ApplyPatchResult { filesChanged: number; files: string[] }\n\nexport async function applyPatch(cwd: string, patch: string): Promise<ApplyPatchResult> {\n if (!patch.trim() || patch.trim() === 'No diff produced.') throw new Error('Run has no diff to apply.');\n await ensureCleanWorkingTree(cwd);\n const files = [...patch.matchAll(/^diff --git a\\/(.*?) b\\/(.*?)$/gm)].map((match) => match[2]).filter((file): file is string => Boolean(file));\n const normalizedPatch = patch.endsWith('\\n') ? patch : `${patch}\\n`;\n await execa('git', ['apply', '--check', '-'], { cwd, input: normalizedPatch });\n await execa('git', ['apply', '-'], { cwd, input: normalizedPatch });\n return { filesChanged: new Set(files).size, files: [...new Set(files)] };\n}\n\nexport async function repoSummary(cwd: string): Promise<string> {\n const files = ['package.json','pyproject.toml','Cargo.toml','go.mod','README.md'];\n const parts: string[] = [];\n for (const file of files) if (await fs.pathExists(join(cwd, file))) parts.push(`## ${file}\\n${await fs.readFile(join(cwd, file), 'utf8')}`);\n return parts.join('\\n\\n').slice(0, 24_000);\n}\n","export interface MissionCheck {\n status: 'passed' | 'failed' | 'skipped';\n expectedSymbols: string[];\n missingSymbols: string[];\n message: string;\n}\n\nconst IGNORED_SYMBOLS = new Set(['add', 'update', 'print', 'test', 'run', 'export', 'import']);\n\nexport function expectedSymbolsFromMission(mission: string): string[] {\n const symbols = new Set<string>();\n for (const match of mission.matchAll(/\\b([A-Za-z_$][\\w$]*)\\s*\\(/g)) {\n const symbol = match[1];\n if (symbol && !IGNORED_SYMBOLS.has(symbol.toLowerCase())) symbols.add(symbol);\n }\n return [...symbols];\n}\n\nexport function checkMissionCompletion(mission: string, diff: string): MissionCheck {\n const expectedSymbols = expectedSymbolsFromMission(mission);\n const effectiveDiff = diff.trim() === 'No diff produced.' ? '' : diff;\n if (!expectedSymbols.length) {\n return { status: effectiveDiff.trim() ? 'passed' : 'skipped', expectedSymbols, missingSymbols: [], message: effectiveDiff.trim() ? 'No explicit function symbols found in mission; non-empty diff produced.' : 'No explicit function symbols found in mission.' };\n }\n const missingSymbols = expectedSymbols.filter((symbol) => !new RegExp(`\\\\b${escapeRegExp(symbol)}\\\\b`).test(effectiveDiff));\n return {\n status: missingSymbols.length ? 'failed' : 'passed',\n expectedSymbols,\n missingSymbols,\n message: missingSymbols.length ? `Produced diff is missing mission symbol(s): ${missingSymbols.join(', ')}` : 'Produced diff contains all explicit mission symbols.',\n };\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n","import { execa } from 'execa';\nimport { pathToFileURL } from 'node:url';\nimport { join, normalize } from 'node:path';\nimport type { ValidationResult } from '../types.js';\n\ntype KnownOperation = 'add' | 'subtract' | 'multiply' | 'divide' | 'modulo';\n\nexport interface GeneratedAcceptanceCase {\n symbol: string;\n args: number[];\n expected: number;\n}\n\nexport interface GeneratedAcceptancePlan {\n status: 'generated' | 'skipped';\n command: string;\n targetFile?: string;\n tests: GeneratedAcceptanceCase[];\n reason?: string;\n}\n\nconst OPERATION_CASES: Record<KnownOperation, Array<{ args: number[]; expected: number }>> = {\n add: [{ args: [2, 3], expected: 5 }, { args: [-1, 4], expected: 3 }],\n subtract: [{ args: [9, 4], expected: 5 }, { args: [1, 5], expected: -4 }],\n multiply: [{ args: [3, 4], expected: 12 }, { args: [-2, 5], expected: -10 }],\n divide: [{ args: [8, 2], expected: 4 }, { args: [9, 3], expected: 3 }],\n modulo: [{ args: [9, 4], expected: 1 }, { args: [10, 5], expected: 0 }],\n};\n\nexport function generateAcceptanceTests(mission: string): GeneratedAcceptancePlan {\n const targetFile = extractTargetFile(mission);\n const symbols = extractKnownOperationSymbols(mission);\n if (!targetFile) return { status: 'skipped', command: 'xdou generated-acceptance', tests: [], reason: 'No target source file detected in mission.' };\n if (!symbols.length) return { status: 'skipped', command: 'xdou generated-acceptance', targetFile, tests: [], reason: 'No known behavior template detected in mission.' };\n\n const tests = symbols.flatMap((symbol) => OPERATION_CASES[symbol].map((testCase) => ({ symbol, ...testCase })));\n return { status: 'generated', command: `xdou-acceptance ${targetFile}`, targetFile, tests };\n}\n\nexport async function runGeneratedAcceptanceTests(cwd: string, mission: string): Promise<ValidationResult> {\n const plan = generateAcceptanceTests(mission);\n if (plan.status === 'skipped') return { command: plan.command, status: 'skipped', output: plan.reason ?? 'No generated acceptance tests.' };\n\n const script = buildAcceptanceScript(cwd, plan);\n const result = await execa('node', ['--input-type=module', '--eval', script], { cwd, reject: false, timeout: 2 * 60_000, all: true });\n return {\n command: plan.command,\n status: result.exitCode === 0 ? 'passed' : 'failed',\n output: (result.all ?? '').slice(-20_000),\n ...(typeof result.exitCode === 'number' ? { exitCode: result.exitCode } : {}),\n };\n}\n\nfunction extractTargetFile(mission: string): string | undefined {\n const match = /export(?:ed)?\\s+from\\s+([\\w./\\\\-]+\\.(?:mjs|js|cjs|ts))/i.exec(mission);\n if (!match?.[1]) return undefined;\n return normalize(match[1]).replace(/\\\\/g, '/');\n}\n\nfunction extractKnownOperationSymbols(mission: string): KnownOperation[] {\n const found = new Set<KnownOperation>();\n for (const symbol of Object.keys(OPERATION_CASES) as KnownOperation[]) {\n const pattern = new RegExp(`\\\\b${symbol}\\\\s*\\\\(`, 'i');\n if (pattern.test(mission)) found.add(symbol);\n }\n return [...found];\n}\n\nfunction buildAcceptanceScript(cwd: string, plan: GeneratedAcceptancePlan): string {\n const moduleUrl = pathToFileURL(join(cwd, plan.targetFile!)).href;\n return `\nconst mod = await import(${JSON.stringify(moduleUrl)});\nconst tests = ${JSON.stringify(plan.tests)};\nlet failures = 0;\nfor (const test of tests) {\n const fn = mod[test.symbol];\n if (typeof fn !== 'function') {\n console.error(test.symbol + ' is not exported as a function');\n failures += 1;\n continue;\n }\n const actual = fn(...test.args);\n if (!Object.is(actual, test.expected)) {\n console.error(test.symbol + '(' + test.args.join(', ') + ') expected ' + test.expected + ' but got ' + actual);\n failures += 1;\n }\n}\nif (failures > 0) process.exit(1);\nconsole.log('generated acceptance tests passed: ' + tests.length);\n`;\n}\n","export type ReviewDecision = 'approve' | 'request_changes' | 'blocked';\n\nexport interface ReviewVerdict {\n verdict: ReviewDecision;\n confidence: number;\n reason: string;\n missingRequirements: string[];\n}\n\nexport function extractReviewVerdict(output: string): ReviewVerdict {\n const marker = /REVIEW_VERDICT\\s*:/i.exec(output);\n if (!marker) return blockedVerdict('Reviewer output missing REVIEW_VERDICT JSON block.');\n\n const tail = output.slice(marker.index + marker[0].length).trim();\n const json = extractFirstJsonObject(tail);\n if (!json) return blockedVerdict('Reviewer output has REVIEW_VERDICT marker but no JSON object.');\n\n try {\n const parsed = JSON.parse(json) as Partial<ReviewVerdict>;\n if (!isReviewDecision(parsed.verdict)) return blockedVerdict('Reviewer verdict must be approve, request_changes, or blocked.');\n return {\n verdict: parsed.verdict,\n confidence: clampConfidence(parsed.confidence),\n reason: typeof parsed.reason === 'string' && parsed.reason.trim() ? parsed.reason : 'No reason provided.',\n missingRequirements: Array.isArray(parsed.missingRequirements) ? parsed.missingRequirements.filter((item): item is string => typeof item === 'string') : [],\n };\n } catch (error) {\n return blockedVerdict(`Reviewer verdict JSON could not be parsed: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nexport function reviewVerdictBlocks(verdict: ReviewVerdict): boolean {\n return verdict.verdict === 'request_changes' || verdict.verdict === 'blocked';\n}\n\nfunction blockedVerdict(reason: string): ReviewVerdict {\n return { verdict: 'blocked', confidence: 1, reason, missingRequirements: ['structured semantic review verdict'] };\n}\n\nfunction isReviewDecision(value: unknown): value is ReviewDecision {\n return value === 'approve' || value === 'request_changes' || value === 'blocked';\n}\n\nfunction clampConfidence(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) ? Math.min(1, Math.max(0, value)) : 0;\n}\n\nfunction extractFirstJsonObject(text: string): string | undefined {\n const start = text.indexOf('{');\n if (start < 0) return undefined;\n let depth = 0;\n let inString = false;\n let escaped = false;\n for (let index = start; index < text.length; index += 1) {\n const char = text[index];\n if (escaped) { escaped = false; continue; }\n if (char === '\\\\') { escaped = true; continue; }\n if (char === '\"') { inString = !inString; continue; }\n if (inString) continue;\n if (char === '{') depth += 1;\n if (char === '}') {\n depth -= 1;\n if (depth === 0) return text.slice(start, index + 1);\n }\n }\n return undefined;\n}\n","import { execa } from 'execa';\nimport fs from 'fs-extra';\nimport { join } from 'node:path';\nimport type { ValidationResult } from '../types.js';\n\nexport async function detectValidationCommands(cwd: string): Promise<string[]> {\n const commands: string[] = [];\n if (await fs.pathExists(join(cwd, 'package.json'))) {\n const pkg = await fs.readJson(join(cwd, 'package.json')) as { scripts?: Record<string,string> };\n if (pkg.scripts?.test) commands.push('npm test');\n if (pkg.scripts?.typecheck) commands.push('npm run typecheck');\n if (pkg.scripts?.build) commands.push('npm run build');\n }\n if (await fs.pathExists(join(cwd, 'pyproject.toml')) || await fs.pathExists(join(cwd, 'pytest.ini'))) commands.push('python -m pytest -q');\n if (await fs.pathExists(join(cwd, 'Cargo.toml'))) commands.push('cargo test');\n if (await fs.pathExists(join(cwd, 'go.mod'))) commands.push('go test ./...');\n return commands;\n}\n\nexport async function runValidation(cwd: string, commands?: string[]): Promise<ValidationResult[]> {\n const commandsToRun = commands ?? await detectValidationCommands(cwd);\n const results: ValidationResult[] = [];\n for (const command of commandsToRun) {\n const result = await execa(command, { cwd, shell: true, reject: false, timeout: 10 * 60_000, all: true });\n const validationResult: ValidationResult = { command, status: result.exitCode === 0 ? 'passed' : 'failed', output: (result.all ?? '').slice(-20_000) };\n if (typeof result.exitCode === 'number') validationResult.exitCode = result.exitCode;\n results.push(validationResult);\n }\n if (!results.length) results.push({ command: 'auto-detect', status: 'skipped', output: 'No validation command detected.' });\n return results;\n}\n","import { execa } from 'execa';\nimport which from 'which';\nimport type { AgentAdapter, AgentInput, AgentInvocation, AgentRole, AgentRunResult, AgentType } from '../types.js';\n\nexport abstract class CliAgentAdapter implements AgentAdapter {\n abstract readonly id: string;\n abstract readonly type: AgentType;\n readonly command: string;\n readonly roles: AgentRole[];\n\n protected constructor(options: { command: string; roles: AgentRole[] }) {\n this.command = options.command;\n this.roles = options.roles;\n }\n\n abstract buildInvocation(input: AgentInput): AgentInvocation;\n\n async detect(): Promise<{ available: boolean; path?: string; version?: string; error?: string }> {\n try {\n const path = await which(this.command);\n const version = await this.readVersion();\n return { available: true, path, ...(version ? { version } : {}) };\n } catch (error) {\n return { available: false, error: error instanceof Error ? error.message : String(error) };\n }\n }\n\n async run(input: AgentInput): Promise<AgentRunResult> {\n const invocation = this.buildInvocation(input);\n const started = Date.now();\n try {\n const options = {\n cwd: invocation.cwd,\n shell: invocation.shell,\n timeout: input.timeoutMs ?? 30 * 60_000,\n reject: false,\n all: false,\n ...(invocation.stdin ? { input: invocation.stdin } : { stdin: 'ignore' as const }),\n ...(invocation.env ? { env: invocation.env } : {}),\n };\n const result = await execa(invocation.command, invocation.args, options);\n return {\n agent: this.id,\n command: invocation.command,\n args: invocation.args,\n exitCode: result.exitCode ?? 0,\n stdout: result.stdout,\n stderr: result.stderr,\n durationMs: Date.now() - started,\n ok: (result.exitCode ?? 0) === 0,\n };\n } catch (error) {\n return {\n agent: this.id,\n command: invocation.command,\n args: invocation.args,\n exitCode: 1,\n stdout: '',\n stderr: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - started,\n ok: false,\n };\n }\n }\n\n protected async readVersion(): Promise<string | undefined> {\n const result = await execa(this.command, ['--version'], { reject: false, timeout: 10_000 });\n const text = `${result.stdout}\\n${result.stderr}`.trim();\n return text || undefined;\n }\n}\n","import { CliAgentAdapter } from './base.js';\nimport type { AgentInput, AgentInvocation, AgentRole } from '../types.js';\n\nexport class ClaudeCodeAdapter extends CliAgentAdapter {\n readonly id: string;\n readonly type = 'claude-code' as const;\n private readonly maxTurns: number;\n\n constructor(options: { id?: string; command?: string; roles?: AgentRole[]; maxTurns?: number } = {}) {\n super({ command: options.command ?? 'claude', roles: options.roles ?? ['architect', 'reviewer', 'debugger'] });\n this.id = options.id ?? 'claude';\n this.maxTurns = options.maxTurns ?? 10;\n }\n\n buildInvocation(input: AgentInput): AgentInvocation {\n return { command: this.command, args: ['-p', input.prompt, '--max-turns', String(this.maxTurns), '--output-format', 'json'], cwd: input.cwd, shell: false };\n }\n}\n","import { CliAgentAdapter } from './base.js';\nimport type { AgentInput, AgentInvocation, AgentRole } from '../types.js';\n\nexport class CodexAdapter extends CliAgentAdapter {\n readonly id: string;\n readonly type = 'codex' as const;\n private readonly fullAuto: boolean;\n\n constructor(options: { id?: string; command?: string; roles?: AgentRole[]; fullAuto?: boolean } = {}) {\n super({ command: options.command ?? 'codex', roles: options.roles ?? ['implementer', 'fixer', 'critic'] });\n this.id = options.id ?? 'codex';\n this.fullAuto = options.fullAuto ?? false;\n }\n\n buildInvocation(input: AgentInput): AgentInvocation {\n const args = ['exec', '--cd', input.cwd, '-'];\n if (this.fullAuto) args.splice(3, 0, '--dangerously-bypass-approvals-and-sandbox');\n return { command: this.command, args, cwd: input.cwd, shell: false, stdin: input.prompt };\n }\n}\n","import { CliAgentAdapter } from './base.js';\nimport type { AgentInput, AgentInvocation, AgentRole } from '../types.js';\n\nexport class OpenCodeAdapter extends CliAgentAdapter {\n readonly id: string;\n readonly type = 'opencode' as const;\n private readonly model: string | undefined;\n\n constructor(options: { id?: string; command?: string; roles?: AgentRole[]; model?: string } = {}) {\n super({ command: options.command ?? 'opencode', roles: options.roles ?? ['implementer', 'reviewer'] });\n this.id = options.id ?? 'opencode';\n this.model = options.model;\n }\n\n buildInvocation(input: AgentInput): AgentInvocation {\n const args = ['run', input.prompt];\n if (this.model) args.push('--model', this.model);\n return { command: this.command, args, cwd: input.cwd, shell: false };\n }\n}\n","import { generateText } from 'ai';\nimport { createOpenRouter } from '@openrouter/ai-sdk-provider';\nimport type { AgentAdapter, AgentInput, AgentInvocation, AgentRole, AgentRunResult } from '../types.js';\n\nexport class OpenRouterAdapter implements AgentAdapter {\n readonly id: string;\n readonly type = 'openrouter' as const;\n readonly roles: AgentRole[];\n private readonly model: string;\n private readonly apiKeyEnv: string;\n\n constructor(options: { id: string; model: string; roles?: AgentRole[]; apiKeyEnv?: string }) {\n this.id = options.id;\n this.model = options.model;\n this.roles = options.roles ?? ['brainstormer', 'critic', 'reviewer'];\n this.apiKeyEnv = options.apiKeyEnv ?? 'OPENROUTER_API_KEY';\n }\n\n buildInvocation(input: AgentInput): AgentInvocation {\n return { command: 'openrouter-api', args: [this.model, input.prompt], cwd: input.cwd, shell: false };\n }\n\n detect(): Promise<{ available: boolean; path?: string; version?: string; error?: string }> {\n const key = process.env[this.apiKeyEnv];\n return Promise.resolve(key ? { available: true, version: this.model } : { available: false, error: `${this.apiKeyEnv} is not set` });\n }\n\n async run(input: AgentInput): Promise<AgentRunResult> {\n const started = Date.now();\n const apiKey = process.env[this.apiKeyEnv];\n if (!apiKey) {\n return { agent: this.id, command: 'openrouter-api', args: [this.model], exitCode: 1, stdout: '', stderr: `${this.apiKeyEnv} is not set`, durationMs: Date.now() - started, ok: false };\n }\n try {\n const openrouter = createOpenRouter({ apiKey });\n const result = await generateText({ model: openrouter.chat(this.model), prompt: input.prompt, abortSignal: AbortSignal.timeout(input.timeoutMs ?? 10 * 60_000) });\n return { agent: this.id, command: 'openrouter-api', args: [this.model], exitCode: 0, stdout: result.text, stderr: '', durationMs: Date.now() - started, ok: true };\n } catch (error) {\n return { agent: this.id, command: 'openrouter-api', args: [this.model], exitCode: 1, stdout: '', stderr: error instanceof Error ? error.message : String(error), durationMs: Date.now() - started, ok: false };\n }\n }\n}\n","import type { AgentAdapter, AgentRole, AgentType } from '../types.js';\nimport { ClaudeCodeAdapter } from './claude-code.js';\nimport { CodexAdapter } from './codex.js';\nimport { OpenCodeAdapter } from './opencode.js';\nimport { OpenRouterAdapter } from './openrouter.js';\n\nexport interface AgentDefinition { type: AgentType; command?: string | undefined; model?: string | undefined; roles?: string[] | undefined; enabled?: boolean | undefined; fullAuto?: boolean | undefined }\n\nconst SAFE_ID = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/;\nexport function assertSafeAgentId(id: string): void { if (!SAFE_ID.test(id)) throw new Error(`Invalid agent id \"${id}\". Use 1-64 letters, numbers, _ or -; no path separators.`); }\nfunction asRoles(roles: string[] | undefined, fallback: AgentRole[]): AgentRole[] { return (roles?.length ? roles : fallback) as AgentRole[]; }\n\nexport function defaultAgents(definitions: Record<string, AgentDefinition> = {}): Record<string, AgentAdapter> {\n const agents: Record<string, AgentAdapter> = {\n claude: new ClaudeCodeAdapter({ id: 'claude' }),\n codex: new CodexAdapter({ id: 'codex', fullAuto: false }),\n opencode: new OpenCodeAdapter({ id: 'opencode' }),\n };\n for (const [id, def] of Object.entries(definitions)) {\n assertSafeAgentId(id);\n if (def.enabled === false) continue;\n if (def.type === 'claude-code') agents[id] = new ClaudeCodeAdapter({ id, ...(def.command ? { command: def.command } : {}), roles: asRoles(def.roles, ['architect', 'reviewer', 'debugger']) });\n if (def.type === 'codex') agents[id] = new CodexAdapter({ id, ...(def.command ? { command: def.command } : {}), roles: asRoles(def.roles, ['implementer', 'fixer', 'critic']), fullAuto: def.fullAuto ?? false });\n if (def.type === 'opencode') agents[id] = new OpenCodeAdapter({ id, ...(def.command ? { command: def.command } : {}), roles: asRoles(def.roles, ['implementer', 'reviewer']), ...(def.model ? { model: def.model } : {}) });\n if (def.type === 'openrouter') {\n if (!def.model) throw new Error(`OpenRouter agent \"${id}\" requires model`);\n agents[id] = new OpenRouterAdapter({ id, model: def.model, roles: asRoles(def.roles, ['brainstormer', 'critic', 'reviewer']) });\n }\n }\n return agents;\n}\n\nexport function selectAgents(names: string[], agents = defaultAgents()): AgentAdapter[] {\n return names.map((name) => {\n const agent = agents[name];\n if (!agent) throw new Error(`Unknown agent \"${name}\". Known agents: ${Object.keys(agents).join(', ')}`);\n return agent;\n });\n}\n","import { z } from 'zod';\n\nconst safeId = /^[a-zA-Z0-9][a-zA-Z0-9_-]{0,63}$/;\n\nconst agentSchema = z.object({\n type: z.enum(['claude-code', 'codex', 'opencode', 'openrouter']),\n command: z.string().optional(),\n model: z.string().optional(),\n roles: z.array(z.string()).default([]),\n enabled: z.boolean().default(true),\n fullAuto: z.boolean().default(false),\n});\n\nconst teamSchema = z.object({\n brainstormers: z.array(z.string().regex(safeId)).default(['claude', 'codex']),\n architect: z.string().regex(safeId).default('claude'),\n critic: z.string().regex(safeId).default('codex'),\n implementer: z.string().regex(safeId).default('codex'),\n reviewer: z.array(z.string().regex(safeId)).default(['claude']),\n fixer: z.string().regex(safeId).default('codex'),\n});\n\nexport const configSchema = z.object({\n artifactDir: z.string().default('.xdou'),\n agents: z.record(z.string().regex(safeId), agentSchema).default({}),\n teams: z.record(z.string().regex(safeId), teamSchema).default({ default: teamSchema.parse({}) }),\n});\n\nexport type XdouConfig = z.infer<typeof configSchema>;\nexport type TeamConfig = z.infer<typeof teamSchema>;\nexport function parseConfig(input: unknown): XdouConfig { return configSchema.parse(input ?? {}); }\nexport function defaultConfig(): XdouConfig { return parseConfig({}); }\n","import { cosmiconfig } from 'cosmiconfig';\nimport YAML from 'yaml';\nimport { defaultConfig, parseConfig, type XdouConfig } from './schema.js';\n\nexport async function loadConfig(cwd: string): Promise<{ config: XdouConfig; filepath?: string }> {\n const explorer = cosmiconfig('xdou', { searchPlaces: ['xdou.yaml', 'xdou.yml', '.xdourc.yaml', 'package.json'], loaders: { '.yaml': (_p: string, content: string) => YAML.parse(content) as unknown, '.yml': (_p: string, content: string) => YAML.parse(content) as unknown } });\n const result = await explorer.search(cwd);\n if (!result) return { config: defaultConfig() };\n return { config: parseConfig(result.config), filepath: result.filepath };\n}\n"],"mappings":"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","names":["fs","pc","YAML","join","fs","join","fs","join","execa","join","execa","fs","join","execa","join","fs","join","fs","YAML","pc"]}
package/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@ofear/xdou",
3
+ "version": "1.0.0",
4
+ "description": "A terminal-native multi-agent development system where selected coding and architecture agents co-develop through council, synthesis, implementation, review, and validation loops.",
5
+ "main": "dist/cli.js",
6
+ "scripts": {
7
+ "test": "vitest run",
8
+ "build": "tsup src/cli.ts --format esm --dts --sourcemap --clean",
9
+ "dev": "tsx src/cli.ts",
10
+ "typecheck": "tsc --noEmit",
11
+ "lint": "eslint src test --ext .ts",
12
+ "prepublishOnly": "npm run lint && npm run typecheck && npm test && npm run build && npx publint",
13
+ "postbuild": "node -e \"try{require('fs').chmodSync('dist/cli.js',0o755)}catch{}\"",
14
+ "prepack": "npm run build"
15
+ },
16
+ "keywords": [
17
+ "ai",
18
+ "agents",
19
+ "cli",
20
+ "codex",
21
+ "claude",
22
+ "multi-agent",
23
+ "coding-agents",
24
+ "developer-tools",
25
+ "automation"
26
+ ],
27
+ "author": "Ofir",
28
+ "license": "MIT",
29
+ "type": "module",
30
+ "bin": {
31
+ "xdou": "dist/cli.js"
32
+ },
33
+ "engines": {
34
+ "node": ">=20.19.0"
35
+ },
36
+ "dependencies": {
37
+ "@oclif/core": "^4.11.4",
38
+ "@openrouter/ai-sdk-provider": "^2.9.0",
39
+ "ai": "^6.0.193",
40
+ "cli-table3": "^0.6.5",
41
+ "cosmiconfig": "^9.0.1",
42
+ "dotenv": "^17.4.2",
43
+ "execa": "^9.6.1",
44
+ "fs-extra": "^11.3.5",
45
+ "picocolors": "^1.1.1",
46
+ "proper-lockfile": "^4.1.2",
47
+ "strip-ansi": "^7.2.0",
48
+ "which": "^5.0.0",
49
+ "write-file-atomic": "^7.0.1",
50
+ "yaml": "^2.9.0",
51
+ "zod": "^4.4.3"
52
+ },
53
+ "devDependencies": {
54
+ "@types/fs-extra": "^11.0.4",
55
+ "@types/node": "^25.9.1",
56
+ "@types/which": "^3.0.4",
57
+ "@types/write-file-atomic": "^4.0.3",
58
+ "@typescript-eslint/eslint-plugin": "^8.60.0",
59
+ "@typescript-eslint/parser": "^8.60.0",
60
+ "eslint": "^10.4.1",
61
+ "publint": "^0.3.21",
62
+ "tempy": "^3.2.0",
63
+ "tsup": "^8.5.1",
64
+ "tsx": "^4.22.3",
65
+ "typescript": "^6.0.3",
66
+ "vitest": "^4.1.7"
67
+ },
68
+ "files": [
69
+ "dist",
70
+ "README.md"
71
+ ],
72
+ "exports": {
73
+ ".": {
74
+ "types": "./dist/cli.d.ts",
75
+ "default": "./dist/cli.js"
76
+ }
77
+ },
78
+ "types": "dist/cli.d.ts",
79
+ "repository": {
80
+ "type": "git",
81
+ "url": "git+https://github.com/Ofear/xdou.git"
82
+ },
83
+ "bugs": {
84
+ "url": "https://github.com/Ofear/xdou/issues"
85
+ },
86
+ "homepage": "https://github.com/Ofear/xdou#readme",
87
+ "publishConfig": {
88
+ "access": "public"
89
+ }
90
+ }