corbat-coco 0.1.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.
- package/LICENSE +21 -0
- package/README.md +381 -0
- package/dist/cli/index.js +4887 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +3185 -0
- package/dist/index.js +8663 -0
- package/dist/index.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/version.ts","../../src/orchestrator/project.ts","../../src/cli/commands/init.ts","../../src/config/schema.ts","../../src/config/loader.ts","../../src/phases/converge/prompts.ts","../../src/utils/errors.ts","../../src/phases/converge/discovery-parsers.ts","../../src/phases/converge/discovery.ts","../../src/phases/converge/specification-types.ts","../../src/phases/converge/specification-helpers.ts","../../src/phases/converge/specification-markdown.ts","../../src/phases/converge/specification.ts","../../src/phases/converge/persistence.ts","../../src/phases/converge/executor.ts","../../src/phases/orchestrate/types.ts","../../src/phases/orchestrate/prompts.ts","../../src/phases/orchestrate/architecture-parsers.ts","../../src/phases/orchestrate/architecture-markdown.ts","../../src/phases/orchestrate/architecture.ts","../../src/phases/orchestrate/adr.ts","../../src/phases/orchestrate/backlog.ts","../../src/phases/orchestrate/executor.ts","../../src/providers/anthropic.ts","../../src/providers/index.ts","../../src/cli/commands/plan.ts","../../src/cli/commands/build.ts","../../src/cli/commands/status.ts","../../src/cli/commands/resume.ts","../../src/cli/commands/config.ts","../../src/cli/index.ts"],"names":["fs","program","path","chalk","spinner","randomUUID","text","fillPrompt","p2","context","p3","p4","completedTasks","p5","loadConfig","p6"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Corbat-Coco version\n */\nexport const VERSION = \"0.1.0\";\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\n/**\n * Project information for initialization\n */\nexport interface ProjectInfo {\n name: string;\n description: string;\n language: string;\n framework?: string;\n}\n\n/**\n * Create the project directory structure\n */\nexport async function createProjectStructure(\n projectPath: string,\n info: ProjectInfo\n): Promise<void> {\n const cocoPath = path.join(projectPath, \".coco\");\n\n // Create directory structure\n const directories = [\n cocoPath,\n path.join(cocoPath, \"state\"),\n path.join(cocoPath, \"checkpoints\"),\n path.join(cocoPath, \"logs\"),\n path.join(cocoPath, \"discovery\"),\n path.join(cocoPath, \"spec\"),\n path.join(cocoPath, \"architecture\"),\n path.join(cocoPath, \"architecture\", \"adrs\"),\n path.join(cocoPath, \"architecture\", \"diagrams\"),\n path.join(cocoPath, \"planning\"),\n path.join(cocoPath, \"planning\", \"epics\"),\n path.join(cocoPath, \"execution\"),\n path.join(cocoPath, \"versions\"),\n path.join(cocoPath, \"reviews\"),\n path.join(cocoPath, \"delivery\"),\n ];\n\n for (const dir of directories) {\n await fs.mkdir(dir, { recursive: true });\n }\n\n // Create initial files\n await createInitialConfig(cocoPath, info);\n await createProjectState(cocoPath, info);\n await createGitignore(cocoPath);\n await createReadme(cocoPath, info);\n}\n\n/**\n * Create initial configuration file\n */\nasync function createInitialConfig(\n cocoPath: string,\n info: ProjectInfo\n): Promise<void> {\n const config = {\n project: {\n name: info.name,\n version: \"0.1.0\",\n description: info.description,\n },\n stack: {\n language: info.language,\n framework: info.framework,\n },\n provider: {\n type: \"anthropic\",\n model: \"claude-sonnet-4-20250514\",\n },\n quality: {\n minScore: 85,\n minCoverage: 80,\n maxIterations: 10,\n convergenceThreshold: 2,\n },\n persistence: {\n checkpointInterval: 300000,\n maxCheckpoints: 50,\n },\n };\n\n await fs.writeFile(\n path.join(cocoPath, \"config.json\"),\n JSON.stringify(config, null, 2),\n \"utf-8\"\n );\n}\n\n/**\n * Create initial project state\n */\nasync function createProjectState(\n cocoPath: string,\n info: ProjectInfo\n): Promise<void> {\n const state = {\n id: `proj_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 9)}`,\n name: info.name,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n currentPhase: \"idle\",\n phaseHistory: [],\n currentTask: null,\n completedTasks: [],\n pendingTasks: [],\n lastScores: null,\n qualityHistory: [],\n lastCheckpoint: null,\n };\n\n await fs.writeFile(\n path.join(cocoPath, \"state\", \"project.json\"),\n JSON.stringify(state, null, 2),\n \"utf-8\"\n );\n}\n\n/**\n * Create .gitignore for coco directory\n */\nasync function createGitignore(cocoPath: string): Promise<void> {\n const content = `# Corbat-Coco\n\n# Sensitive data\nconfig.json\n\n# Logs\nlogs/\n\n# Checkpoints (can be large)\ncheckpoints/\n\n# Session state\nstate/session.json\nstate/lock.json\n`;\n\n await fs.writeFile(path.join(cocoPath, \".gitignore\"), content, \"utf-8\");\n}\n\n/**\n * Create README for coco directory\n */\nasync function createReadme(\n cocoPath: string,\n info: ProjectInfo\n): Promise<void> {\n const content = `# Corbat-Coco Project: ${info.name}\n\nThis directory contains the Corbat-Coco project metadata and state.\n\n## Structure\n\n\\`\\`\\`\n.coco/\n├── config.json # Project configuration\n├── state/ # Current project state\n│ ├── project.json # Main state file\n│ └── session.json # Active session\n├── checkpoints/ # Recovery checkpoints\n├── logs/ # Execution logs\n├── discovery/ # Discovery phase artifacts\n├── spec/ # Specification documents\n├── architecture/ # Architecture documents\n│ ├── adrs/ # Architecture Decision Records\n│ └── diagrams/ # System diagrams\n├── planning/ # Planning phase artifacts\n│ └── epics/ # Epic definitions\n├── execution/ # Execution tracking\n├── versions/ # Task version history\n├── reviews/ # Review documents\n└── delivery/ # Deployment artifacts\n\\`\\`\\`\n\n## Commands\n\n- \\`coco status\\` - Show current progress\n- \\`coco resume\\` - Resume from last checkpoint\n- \\`coco plan\\` - Run/update planning\n- \\`coco build\\` - Execute tasks\n\n## Configuration\n\nEdit \\`config.json\\` to customize:\n- LLM provider and model\n- Quality thresholds\n- Checkpoint settings\n\n---\nGenerated by Corbat-Coco v0.1.0\n`;\n\n await fs.writeFile(path.join(cocoPath, \"README.md\"), content, \"utf-8\");\n}\n","import { Command } from \"commander\";\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { createProjectStructure } from \"../../orchestrator/project.js\";\n\nexport function registerInitCommand(program: Command): void {\n program\n .command(\"init\")\n .description(\"Initialize a new Corbat-Coco project\")\n .argument(\"[path]\", \"Project directory path\", \".\")\n .option(\"-t, --template <template>\", \"Project template to use\")\n .option(\"-y, --yes\", \"Skip prompts and use defaults\")\n .option(\"--skip-discovery\", \"Skip the discovery phase (use existing spec)\")\n .action(async (path: string, options: InitOptions) => {\n await runInit(path, options);\n });\n}\n\ninterface InitOptions {\n template?: string;\n yes?: boolean;\n skipDiscovery?: boolean;\n}\n\nasync function runInit(projectPath: string, options: InitOptions): Promise<void> {\n p.intro(chalk.cyan(\"Welcome to Corbat-Coco!\"));\n\n // Check if project already exists\n const existingProject = await checkExistingProject(projectPath);\n if (existingProject) {\n const shouldContinue = await p.confirm({\n message: \"A Corbat-Coco project already exists here. Continue anyway?\",\n });\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Initialization cancelled.\");\n process.exit(0);\n }\n }\n\n // Gather project info\n let projectInfo: ProjectInfo;\n\n if (options.yes) {\n projectInfo = getDefaultProjectInfo(projectPath);\n } else {\n const result = await gatherProjectInfo();\n if (!result) {\n p.cancel(\"Initialization cancelled.\");\n process.exit(0);\n }\n projectInfo = result;\n }\n\n // Create project structure\n const spinner = p.spinner();\n spinner.start(\"Creating project structure...\");\n\n try {\n await createProjectStructure(projectPath, projectInfo);\n spinner.stop(\"Project structure created.\");\n } catch (error) {\n spinner.stop(\"Failed to create project structure.\");\n throw error;\n }\n\n // Success message\n p.outro(chalk.green(\"Project initialized successfully!\"));\n\n console.log(\"\\nNext steps:\");\n console.log(chalk.dim(\" 1. \") + chalk.cyan(\"coco plan\") + chalk.dim(\" - Run discovery and create a development plan\"));\n console.log(chalk.dim(\" 2. \") + chalk.cyan(\"coco build\") + chalk.dim(\" - Start building the project\"));\n console.log(chalk.dim(\" 3. \") + chalk.cyan(\"coco status\") + chalk.dim(\" - Check current progress\"));\n}\n\ninterface ProjectInfo {\n name: string;\n description: string;\n language: string;\n framework?: string;\n}\n\nasync function gatherProjectInfo(): Promise<ProjectInfo | null> {\n const name = await p.text({\n message: \"What is your project name?\",\n placeholder: \"my-awesome-project\",\n validate: (value) => {\n if (!value) return \"Project name is required\";\n if (!/^[a-z0-9-]+$/.test(value)) return \"Use lowercase letters, numbers, and hyphens only\";\n return undefined;\n },\n });\n\n if (p.isCancel(name)) return null;\n\n const description = await p.text({\n message: \"Describe your project in one sentence:\",\n placeholder: \"A REST API for managing tasks\",\n });\n\n if (p.isCancel(description)) return null;\n\n const language = await p.select({\n message: \"What programming language?\",\n options: [\n { value: \"typescript\", label: \"TypeScript\", hint: \"Recommended\" },\n { value: \"python\", label: \"Python\" },\n { value: \"go\", label: \"Go\" },\n { value: \"rust\", label: \"Rust\" },\n ],\n });\n\n if (p.isCancel(language)) return null;\n\n return {\n name: name as string,\n description: (description as string) || \"\",\n language: language as string,\n };\n}\n\nfunction getDefaultProjectInfo(path: string): ProjectInfo {\n const name = path === \".\" ? \"my-project\" : path.split(\"/\").pop() || \"my-project\";\n return {\n name,\n description: \"\",\n language: \"typescript\",\n };\n}\n\nasync function checkExistingProject(path: string): Promise<boolean> {\n try {\n const fs = await import(\"node:fs/promises\");\n await fs.access(`${path}/.coco`);\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * Configuration schema for Corbat-Coco\n */\n\nimport { z } from \"zod\";\n\n/**\n * Provider configuration schema\n */\nexport const ProviderConfigSchema = z.object({\n type: z.enum([\"anthropic\", \"openai\", \"local\"]).default(\"anthropic\"),\n apiKey: z.string().optional(),\n model: z.string().default(\"claude-sonnet-4-20250514\"),\n maxTokens: z.number().min(1).max(200000).default(8192),\n temperature: z.number().min(0).max(2).default(0),\n timeout: z.number().min(1000).default(120000),\n});\n\nexport type ProviderConfig = z.infer<typeof ProviderConfigSchema>;\n\n/**\n * Quality configuration schema\n */\nexport const QualityConfigSchema = z.object({\n minScore: z.number().min(0).max(100).default(85),\n minCoverage: z.number().min(0).max(100).default(80),\n maxIterations: z.number().min(1).max(20).default(10),\n minIterations: z.number().min(1).max(10).default(2),\n convergenceThreshold: z.number().min(0).max(10).default(2),\n securityThreshold: z.number().min(0).max(100).default(100),\n});\n\nexport type QualityConfig = z.infer<typeof QualityConfigSchema>;\n\n/**\n * Persistence configuration schema\n */\nexport const PersistenceConfigSchema = z.object({\n checkpointInterval: z.number().min(60000).default(300000), // 5 min default\n maxCheckpoints: z.number().min(1).max(100).default(50),\n retentionDays: z.number().min(1).max(365).default(7),\n compressOldCheckpoints: z.boolean().default(true),\n});\n\nexport type PersistenceConfig = z.infer<typeof PersistenceConfigSchema>;\n\n/**\n * Stack configuration schema\n */\nexport const StackConfigSchema = z.object({\n language: z.enum([\"typescript\", \"python\", \"go\", \"rust\", \"java\"]),\n framework: z.string().optional(),\n profile: z.string().optional(), // Custom profile path\n});\n\nexport type StackConfig = z.infer<typeof StackConfigSchema>;\n\n/**\n * Project configuration schema\n */\nexport const ProjectConfigSchema = z.object({\n name: z.string().min(1),\n version: z.string().default(\"0.1.0\"),\n description: z.string().optional(),\n});\n\nexport type ProjectConfig = z.infer<typeof ProjectConfigSchema>;\n\n/**\n * GitHub integration configuration\n */\nexport const GitHubConfigSchema = z.object({\n enabled: z.boolean().default(false),\n token: z.string().optional(),\n repo: z.string().optional(),\n createPRs: z.boolean().default(true),\n createIssues: z.boolean().default(true),\n});\n\nexport type GitHubConfig = z.infer<typeof GitHubConfigSchema>;\n\n/**\n * Integrations configuration schema\n */\nexport const IntegrationsConfigSchema = z.object({\n github: GitHubConfigSchema.optional(),\n});\n\nexport type IntegrationsConfig = z.infer<typeof IntegrationsConfigSchema>;\n\n/**\n * Complete configuration schema\n */\nexport const CocoConfigSchema = z.object({\n project: ProjectConfigSchema,\n provider: ProviderConfigSchema.default({}),\n quality: QualityConfigSchema.default({}),\n persistence: PersistenceConfigSchema.default({}),\n stack: StackConfigSchema.optional(),\n integrations: IntegrationsConfigSchema.optional(),\n});\n\nexport type CocoConfig = z.infer<typeof CocoConfigSchema>;\n\n/**\n * Validate configuration object\n */\nexport function validateConfig(config: unknown): {\n success: boolean;\n data?: CocoConfig;\n error?: z.ZodError;\n} {\n const result = CocoConfigSchema.safeParse(config);\n if (result.success) {\n return { success: true, data: result.data };\n }\n return { success: false, error: result.error };\n}\n\n/**\n * Create default configuration\n */\nexport function createDefaultConfigObject(\n projectName: string,\n language: \"typescript\" | \"python\" | \"go\" | \"rust\" | \"java\" = \"typescript\"\n): CocoConfig {\n return {\n project: {\n name: projectName,\n version: \"0.1.0\",\n },\n provider: {\n type: \"anthropic\",\n model: \"claude-sonnet-4-20250514\",\n maxTokens: 8192,\n temperature: 0,\n timeout: 120000,\n },\n quality: {\n minScore: 85,\n minCoverage: 80,\n maxIterations: 10,\n minIterations: 2,\n convergenceThreshold: 2,\n securityThreshold: 100,\n },\n persistence: {\n checkpointInterval: 300000,\n maxCheckpoints: 50,\n retentionDays: 7,\n compressOldCheckpoints: true,\n },\n stack: {\n language,\n },\n };\n}\n","/**\n * Configuration loader for Corbat-Coco\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport JSON5 from \"json5\";\nimport {\n CocoConfigSchema,\n createDefaultConfigObject,\n type CocoConfig,\n} from \"./schema.js\";\n\n/**\n * Load configuration from file\n */\nexport async function loadConfig(configPath?: string): Promise<CocoConfig> {\n const resolvedPath = configPath || findConfigPathSync();\n\n try {\n const content = await fs.readFile(resolvedPath, \"utf-8\");\n const parsed = JSON5.parse(content);\n\n const result = CocoConfigSchema.safeParse(parsed);\n if (!result.success) {\n const issues = result.error.issues\n .map((i) => ` - ${i.path.join(\".\")}: ${i.message}`)\n .join(\"\\n\");\n throw new Error(`Invalid configuration:\\n${issues}`);\n }\n\n return result.data;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n // Config file doesn't exist, return defaults\n return createDefaultConfig(\"my-project\");\n }\n throw error;\n }\n}\n\n/**\n * Save configuration to file\n */\nexport async function saveConfig(\n config: CocoConfig,\n configPath?: string\n): Promise<void> {\n const resolvedPath = configPath || findConfigPathSync();\n const dir = path.dirname(resolvedPath);\n\n await fs.mkdir(dir, { recursive: true });\n\n const content = JSON.stringify(config, null, 2);\n await fs.writeFile(resolvedPath, content, \"utf-8\");\n}\n\n/**\n * Create default configuration\n */\nexport function createDefaultConfig(\n projectName: string,\n language: \"typescript\" | \"python\" | \"go\" | \"rust\" | \"java\" = \"typescript\"\n): CocoConfig {\n return createDefaultConfigObject(projectName, language);\n}\n\n/**\n * Find the configuration file path\n */\nexport async function findConfigPath(cwd?: string): Promise<string | undefined> {\n // Check environment variable\n const envPath = process.env[\"COCO_CONFIG_PATH\"];\n if (envPath) {\n try {\n await fs.access(envPath);\n return envPath;\n } catch {\n // Continue to look for default\n }\n }\n\n // Check in provided directory\n const basePath = cwd || process.cwd();\n const configPath = path.join(basePath, \".coco\", \"config.json\");\n\n try {\n await fs.access(configPath);\n return configPath;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Find the configuration file path (sync, for internal use)\n */\nfunction findConfigPathSync(): string {\n // Check environment variable\n const envPath = process.env[\"COCO_CONFIG_PATH\"];\n if (envPath) {\n return envPath;\n }\n\n // Default to current directory\n return path.join(process.cwd(), \".coco\", \"config.json\");\n}\n\n/**\n * Check if configuration exists\n */\nexport async function configExists(configPath?: string): Promise<boolean> {\n const resolvedPath = configPath || findConfigPathSync();\n try {\n await fs.access(resolvedPath);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get a specific configuration value by path\n */\nexport function getConfigValue<T>(\n config: CocoConfig,\n path: string\n): T | undefined {\n const keys = path.split(\".\");\n let current: unknown = config;\n\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n return current as T;\n}\n\n/**\n * Set a specific configuration value by path\n */\nexport function setConfigValue<T>(\n config: CocoConfig,\n configPath: string,\n value: T\n): CocoConfig {\n const keys = configPath.split(\".\");\n const result = structuredClone(config);\n let current: Record<string, unknown> = result as unknown as Record<string, unknown>;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!key) continue;\n if (!(key in current) || typeof current[key] !== \"object\") {\n current[key] = {};\n }\n current = current[key] as Record<string, unknown>;\n }\n\n const lastKey = keys[keys.length - 1];\n if (lastKey) {\n current[lastKey] = value;\n }\n\n return result;\n}\n\n/**\n * Merge configuration with defaults\n */\nexport function mergeWithDefaults(\n partial: Partial<CocoConfig>,\n projectName: string\n): CocoConfig {\n const defaults = createDefaultConfig(projectName);\n return {\n ...defaults,\n ...partial,\n project: { ...defaults.project, ...partial.project },\n provider: { ...defaults.provider, ...partial.provider },\n quality: { ...defaults.quality, ...partial.quality },\n persistence: { ...defaults.persistence, ...partial.persistence },\n };\n}\n","/**\n * Prompts for the CONVERGE phase\n *\n * These prompts guide the LLM in requirement discovery and specification generation\n */\n\n/**\n * System prompt for the discovery agent\n */\nexport const DISCOVERY_SYSTEM_PROMPT = `You are a senior software architect and requirements analyst. Your role is to help gather and clarify requirements for software projects.\n\nYour goals:\n1. Understand what the user wants to build\n2. Extract clear, actionable requirements\n3. Identify ambiguities and ask clarifying questions\n4. Make reasonable assumptions when appropriate\n5. Recommend technology choices when needed\n\nGuidelines:\n- Be thorough but not overwhelming\n- Ask focused, specific questions\n- Group related questions together\n- Prioritize questions by importance\n- Make assumptions for minor details\n- Always explain your reasoning\n\nYou communicate in a professional but friendly manner. You use concrete examples to clarify abstract requirements.`;\n\n/**\n * Prompt for initial analysis of user input\n */\nexport const INITIAL_ANALYSIS_PROMPT = `Analyze the following project description and extract:\n\n1. **Project Type**: What kind of software is this? (CLI, API, web app, library, service, etc.)\n2. **Complexity**: How complex is this project? (simple, moderate, complex, enterprise)\n3. **Completeness**: How complete is the description? (0-100%)\n4. **Functional Requirements**: What should the system do?\n5. **Non-Functional Requirements**: Performance, security, scalability needs\n6. **Technical Constraints**: Any specified technologies or limitations\n7. **Assumptions**: What must we assume to proceed?\n8. **Critical Questions**: What must be clarified before proceeding?\n9. **Technology Recommendations**: What tech stack would you recommend?\n\nUser's project description:\n---\n{{userInput}}\n---\n\nRespond in JSON format:\n{\n \"projectType\": \"string\",\n \"complexity\": \"simple|moderate|complex|enterprise\",\n \"completeness\": number,\n \"requirements\": [\n {\n \"category\": \"functional|non_functional|technical|constraint\",\n \"priority\": \"must_have|should_have|could_have|wont_have\",\n \"title\": \"string\",\n \"description\": \"string\",\n \"explicit\": boolean,\n \"acceptanceCriteria\": [\"string\"]\n }\n ],\n \"assumptions\": [\n {\n \"category\": \"string\",\n \"statement\": \"string\",\n \"confidence\": \"high|medium|low\",\n \"impactIfWrong\": \"string\"\n }\n ],\n \"questions\": [\n {\n \"category\": \"clarification|expansion|decision|confirmation|scope|priority\",\n \"question\": \"string\",\n \"context\": \"string\",\n \"importance\": \"critical|important|helpful\",\n \"options\": [\"string\"] | null\n }\n ],\n \"techRecommendations\": [\n {\n \"area\": \"language|framework|database|infrastructure|testing|ci_cd\",\n \"decision\": \"string\",\n \"alternatives\": [\"string\"],\n \"rationale\": \"string\"\n }\n ]\n}`;\n\n/**\n * Prompt for generating follow-up questions\n */\nexport const GENERATE_QUESTIONS_PROMPT = `Based on the current requirements and conversation, generate follow-up questions to clarify the project scope.\n\nCurrent Requirements:\n{{requirements}}\n\nPrevious Clarifications:\n{{clarifications}}\n\nOpen Assumptions:\n{{assumptions}}\n\nGenerate 1-3 focused questions that will:\n1. Clarify the most important ambiguities\n2. Confirm critical assumptions\n3. Expand on underspecified areas\n\nPrioritize questions by:\n- Critical: Blocks further progress\n- Important: Significantly affects design\n- Helpful: Nice to know for completeness\n\nRespond in JSON format:\n{\n \"questions\": [\n {\n \"category\": \"clarification|expansion|decision|confirmation|scope|priority\",\n \"question\": \"string\",\n \"context\": \"Why this matters\",\n \"importance\": \"critical|important|helpful\",\n \"defaultAnswer\": \"string | null\",\n \"options\": [\"string\"] | null\n }\n ],\n \"reasoning\": \"string\"\n}`;\n\n/**\n * Prompt for processing user answers\n */\nexport const PROCESS_ANSWER_PROMPT = `The user answered a clarification question. Update the requirements based on their response.\n\nQuestion Asked:\n{{question}}\n\nUser's Answer:\n{{answer}}\n\nCurrent Requirements:\n{{requirements}}\n\nDetermine:\n1. Which requirements are affected by this answer\n2. Whether new requirements should be added\n3. Whether any requirements should be modified\n4. Whether any assumptions can now be confirmed\n\nRespond in JSON format:\n{\n \"affectedRequirements\": [\"requirement_id\"],\n \"modifications\": [\n {\n \"requirementId\": \"string\",\n \"change\": \"string\",\n \"newValue\": \"any\"\n }\n ],\n \"newRequirements\": [\n {\n \"category\": \"functional|non_functional|technical|constraint\",\n \"priority\": \"must_have|should_have|could_have|wont_have\",\n \"title\": \"string\",\n \"description\": \"string\",\n \"acceptanceCriteria\": [\"string\"]\n }\n ],\n \"confirmedAssumptions\": [\"assumption_id\"],\n \"reasoning\": \"string\"\n}`;\n\n/**\n * Prompt for generating the specification document\n */\nexport const GENERATE_SPEC_PROMPT = `Generate a comprehensive project specification based on the gathered requirements.\n\nProject Information:\n- Name: {{projectName}}\n- Type: {{projectType}}\n- Complexity: {{complexity}}\n\nFunctional Requirements:\n{{functionalRequirements}}\n\nNon-Functional Requirements:\n{{nonFunctionalRequirements}}\n\nTechnical Constraints:\n{{technicalConstraints}}\n\nTechnology Decisions:\n{{techDecisions}}\n\nConfirmed Assumptions:\n{{confirmedAssumptions}}\n\nUnconfirmed Assumptions:\n{{unconfirmedAssumptions}}\n\nGenerate a specification document that includes:\n\n1. **Executive Summary**: Brief overview of the project\n2. **Goals & Success Criteria**: What success looks like\n3. **Target Users**: Who will use this\n4. **Functional Requirements**: Detailed functional needs\n5. **Non-Functional Requirements**: Performance, security, etc.\n6. **Technical Architecture**: High-level architecture\n7. **Technology Stack**: Chosen technologies with rationale\n8. **Integrations**: External systems\n9. **Assumptions & Risks**: What we're assuming and potential risks\n10. **Out of Scope**: What we're NOT building\n11. **Open Questions**: Any remaining uncertainties\n\nFormat the specification in Markdown with clear sections and subsections.`;\n\n/**\n * Prompt for extracting requirements from conversation\n */\nexport const EXTRACT_REQUIREMENTS_PROMPT = `Extract requirements from the following conversation message.\n\nMessage:\n{{message}}\n\nExisting Requirements:\n{{existingRequirements}}\n\nIdentify:\n1. New explicit requirements stated by the user\n2. Implicit requirements that can be inferred\n3. Requirements that modify or contradict existing ones\n4. Technology preferences or constraints mentioned\n\nRespond in JSON format:\n{\n \"newRequirements\": [\n {\n \"category\": \"functional|non_functional|technical|constraint\",\n \"priority\": \"must_have|should_have|could_have|wont_have\",\n \"title\": \"string\",\n \"description\": \"string\",\n \"explicit\": boolean,\n \"acceptanceCriteria\": [\"string\"]\n }\n ],\n \"modifiedRequirements\": [\n {\n \"id\": \"string\",\n \"modification\": \"string\"\n }\n ],\n \"techPreferences\": [\n {\n \"area\": \"language|framework|database|infrastructure\",\n \"preference\": \"string\",\n \"reason\": \"string\"\n }\n ]\n}`;\n\n/**\n * Prompt for complexity assessment\n */\nexport const COMPLEXITY_ASSESSMENT_PROMPT = `Assess the complexity of implementing this project.\n\nProject Description:\n{{projectDescription}}\n\nRequirements Count:\n- Functional: {{functionalCount}}\n- Non-Functional: {{nonFunctionalCount}}\n- Integrations: {{integrationCount}}\n\nConsider:\n1. Number of distinct features\n2. Integration complexity\n3. Security requirements\n4. Scalability needs\n5. Domain complexity\n6. Technology stack complexity\n\nProvide an assessment:\n\n{\n \"complexity\": \"simple|moderate|complex|enterprise\",\n \"estimatedEpics\": number,\n \"estimatedStories\": number,\n \"estimatedTasks\": number,\n \"mainChallenges\": [\"string\"],\n \"riskAreas\": [\"string\"],\n \"reasoning\": \"string\"\n}`;\n\n/**\n * Prompt for architecture recommendation\n */\nexport const ARCHITECTURE_PROMPT = `Recommend an architecture for this project.\n\nProject Type: {{projectType}}\nComplexity: {{complexity}}\nRequirements:\n{{requirements}}\n\nTechnology Stack:\n{{techStack}}\n\nConsider:\n1. Scalability needs\n2. Maintainability\n3. Team size (assumed: 1 developer + AI)\n4. Deployment target\n5. Future extensibility\n\nRecommend:\n1. Overall architecture pattern (layered, hexagonal, microservices, etc.)\n2. Key components and their responsibilities\n3. Data flow between components\n4. External integrations approach\n5. Testing strategy alignment\n\nRespond in JSON format:\n{\n \"pattern\": \"string\",\n \"rationale\": \"string\",\n \"components\": [\n {\n \"name\": \"string\",\n \"responsibility\": \"string\",\n \"technology\": \"string\"\n }\n ],\n \"dataFlow\": \"string description\",\n \"integrationApproach\": \"string\",\n \"testingStrategy\": \"string\",\n \"diagramMermaid\": \"string (mermaid diagram code)\"\n}`;\n\n/**\n * Helper to fill prompt templates\n */\nexport function fillPrompt(\n template: string,\n variables: Record<string, string | number | unknown>\n): string {\n let result = template;\n\n for (const [key, value] of Object.entries(variables)) {\n const placeholder = `{{${key}}}`;\n const stringValue =\n typeof value === \"string\"\n ? value\n : typeof value === \"number\"\n ? String(value)\n : JSON.stringify(value, null, 2);\n\n result = result.replaceAll(placeholder, stringValue);\n }\n\n return result;\n}\n\n/**\n * Create a conversation message for the LLM\n */\nexport function createMessage(\n role: \"system\" | \"user\" | \"assistant\",\n content: string\n): { role: \"system\" | \"user\" | \"assistant\"; content: string } {\n return { role, content };\n}\n\n/**\n * Build the conversation history for the LLM\n */\nexport function buildConversation(\n systemPrompt: string,\n messages: Array<{ role: \"user\" | \"assistant\"; content: string }>\n): Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }> {\n return [createMessage(\"system\", systemPrompt), ...messages];\n}\n","/**\n * Error handling for Corbat-Coco\n * Custom error types with context and recovery information\n */\n\n/**\n * Base error class for Corbat-Coco\n */\nexport class CocoError extends Error {\n readonly code: string;\n readonly context: Record<string, unknown>;\n readonly recoverable: boolean;\n readonly suggestion?: string;\n\n constructor(\n message: string,\n options: {\n code: string;\n context?: Record<string, unknown>;\n recoverable?: boolean;\n suggestion?: string;\n cause?: Error;\n }\n ) {\n super(message, { cause: options.cause });\n this.name = \"CocoError\";\n this.code = options.code;\n this.context = options.context ?? {};\n this.recoverable = options.recoverable ?? false;\n this.suggestion = options.suggestion;\n\n // Capture stack trace\n Error.captureStackTrace(this, CocoError);\n }\n\n /**\n * Convert to JSON for logging\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n context: this.context,\n recoverable: this.recoverable,\n suggestion: this.suggestion,\n stack: this.stack,\n cause: this.cause instanceof Error ? this.cause.message : this.cause,\n };\n }\n}\n\n/**\n * Configuration error\n */\nexport class ConfigError extends CocoError {\n constructor(\n message: string,\n options: {\n key?: string;\n value?: unknown;\n suggestion?: string;\n cause?: Error;\n } = {}\n ) {\n super(message, {\n code: \"CONFIG_ERROR\",\n context: { key: options.key, value: options.value },\n recoverable: true,\n suggestion: options.suggestion ?? \"Check your .coco/config.json file\",\n cause: options.cause,\n });\n this.name = \"ConfigError\";\n }\n}\n\n/**\n * File system error\n */\nexport class FileSystemError extends CocoError {\n constructor(\n message: string,\n options: {\n path: string;\n operation: \"read\" | \"write\" | \"delete\" | \"exists\" | \"glob\";\n cause?: Error;\n }\n ) {\n super(message, {\n code: \"FILESYSTEM_ERROR\",\n context: { path: options.path, operation: options.operation },\n recoverable: false,\n suggestion: `Check that the path exists and you have permissions: ${options.path}`,\n cause: options.cause,\n });\n this.name = \"FileSystemError\";\n }\n}\n\n/**\n * LLM provider error\n */\nexport class ProviderError extends CocoError {\n readonly provider: string;\n readonly statusCode?: number;\n\n constructor(\n message: string,\n options: {\n provider: string;\n statusCode?: number;\n retryable?: boolean;\n cause?: Error;\n }\n ) {\n super(message, {\n code: \"PROVIDER_ERROR\",\n context: { provider: options.provider, statusCode: options.statusCode },\n recoverable: options.retryable ?? false,\n suggestion: options.retryable\n ? \"The request can be retried\"\n : \"Check your API key and provider configuration\",\n cause: options.cause,\n });\n this.name = \"ProviderError\";\n this.provider = options.provider;\n this.statusCode = options.statusCode;\n }\n}\n\n/**\n * Validation error\n */\nexport class ValidationError extends CocoError {\n readonly field?: string;\n readonly issues: ValidationIssue[];\n\n constructor(\n message: string,\n options: {\n field?: string;\n issues?: ValidationIssue[];\n cause?: Error;\n } = {}\n ) {\n super(message, {\n code: \"VALIDATION_ERROR\",\n context: { field: options.field, issues: options.issues },\n recoverable: true,\n suggestion: \"Check the input data format\",\n cause: options.cause,\n });\n this.name = \"ValidationError\";\n this.field = options.field;\n this.issues = options.issues ?? [];\n }\n}\n\nexport interface ValidationIssue {\n path: string;\n message: string;\n code: string;\n}\n\n/**\n * Phase execution error\n */\nexport class PhaseError extends CocoError {\n readonly phase: string;\n\n constructor(\n message: string,\n options: {\n phase: string;\n recoverable?: boolean;\n cause?: Error;\n }\n ) {\n super(message, {\n code: \"PHASE_ERROR\",\n context: { phase: options.phase },\n recoverable: options.recoverable ?? true,\n suggestion: `Phase '${options.phase}' failed. Try 'coco resume' to continue.`,\n cause: options.cause,\n });\n this.name = \"PhaseError\";\n this.phase = options.phase;\n }\n}\n\n/**\n * Task execution error\n */\nexport class TaskError extends CocoError {\n readonly taskId: string;\n readonly iteration?: number;\n\n constructor(\n message: string,\n options: {\n taskId: string;\n iteration?: number;\n recoverable?: boolean;\n cause?: Error;\n }\n ) {\n super(message, {\n code: \"TASK_ERROR\",\n context: { taskId: options.taskId, iteration: options.iteration },\n recoverable: options.recoverable ?? true,\n suggestion: \"The task can be retried from the last checkpoint\",\n cause: options.cause,\n });\n this.name = \"TaskError\";\n this.taskId = options.taskId;\n this.iteration = options.iteration;\n }\n}\n\n/**\n * Quality threshold error\n */\nexport class QualityError extends CocoError {\n readonly score: number;\n readonly threshold: number;\n readonly dimension?: string;\n\n constructor(\n message: string,\n options: {\n score: number;\n threshold: number;\n dimension?: string;\n }\n ) {\n super(message, {\n code: \"QUALITY_ERROR\",\n context: {\n score: options.score,\n threshold: options.threshold,\n dimension: options.dimension,\n },\n recoverable: true,\n suggestion: \"Review the quality issues and iterate on the code\",\n });\n this.name = \"QualityError\";\n this.score = options.score;\n this.threshold = options.threshold;\n this.dimension = options.dimension;\n }\n}\n\n/**\n * Checkpoint/recovery error\n */\nexport class RecoveryError extends CocoError {\n readonly checkpointId?: string;\n\n constructor(\n message: string,\n options: {\n checkpointId?: string;\n cause?: Error;\n } = {}\n ) {\n super(message, {\n code: \"RECOVERY_ERROR\",\n context: { checkpointId: options.checkpointId },\n recoverable: false,\n suggestion: \"Try starting fresh with 'coco init --force'\",\n cause: options.cause,\n });\n this.name = \"RecoveryError\";\n this.checkpointId = options.checkpointId;\n }\n}\n\n/**\n * Tool execution error\n */\nexport class ToolError extends CocoError {\n readonly tool: string;\n\n constructor(\n message: string,\n options: {\n tool: string;\n cause?: Error;\n }\n ) {\n super(message, {\n code: \"TOOL_ERROR\",\n context: { tool: options.tool },\n recoverable: true,\n suggestion: `Tool '${options.tool}' failed. Check the logs for details.`,\n cause: options.cause,\n });\n this.name = \"ToolError\";\n this.tool = options.tool;\n }\n}\n\n/**\n * Timeout error\n */\nexport class TimeoutError extends CocoError {\n readonly timeoutMs: number;\n readonly operation: string;\n\n constructor(\n message: string,\n options: {\n timeoutMs: number;\n operation: string;\n }\n ) {\n super(message, {\n code: \"TIMEOUT_ERROR\",\n context: { timeoutMs: options.timeoutMs, operation: options.operation },\n recoverable: true,\n suggestion: \"Try increasing the timeout or simplifying the operation\",\n });\n this.name = \"TimeoutError\";\n this.timeoutMs = options.timeoutMs;\n this.operation = options.operation;\n }\n}\n\n/**\n * Check if error is a specific type\n */\nexport function isCocoError(error: unknown): error is CocoError {\n return error instanceof CocoError;\n}\n\n/**\n * Format error for display\n */\nexport function formatError(error: unknown): string {\n if (error instanceof CocoError) {\n let message = `[${error.code}] ${error.message}`;\n if (error.suggestion) {\n message += `\\n Suggestion: ${error.suggestion}`;\n }\n return message;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n return String(error);\n}\n\n/**\n * Wrap an async function with error handling\n */\nexport async function withErrorHandling<T>(\n fn: () => Promise<T>,\n context: { operation: string; recoverable?: boolean }\n): Promise<T> {\n try {\n return await fn();\n } catch (error) {\n if (error instanceof CocoError) {\n throw error;\n }\n\n throw new CocoError(\n error instanceof Error ? error.message : String(error),\n {\n code: \"UNEXPECTED_ERROR\",\n context: { operation: context.operation },\n recoverable: context.recoverable ?? false,\n cause: error instanceof Error ? error : undefined,\n }\n );\n }\n}\n\n/**\n * Retry an async function with exponential backoff\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n options: {\n maxAttempts?: number;\n initialDelayMs?: number;\n maxDelayMs?: number;\n shouldRetry?: (error: unknown) => boolean;\n } = {}\n): Promise<T> {\n const maxAttempts = options.maxAttempts ?? 3;\n const initialDelayMs = options.initialDelayMs ?? 1000;\n const maxDelayMs = options.maxDelayMs ?? 30000;\n const shouldRetry = options.shouldRetry ?? ((error) => {\n if (error instanceof CocoError) {\n return error.recoverable;\n }\n return false;\n });\n\n let lastError: unknown;\n let delay = initialDelayMs;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n\n if (attempt === maxAttempts || !shouldRetry(error)) {\n throw error;\n }\n\n // Wait before retry\n await new Promise((resolve) => setTimeout(resolve, delay));\n delay = Math.min(delay * 2, maxDelayMs);\n }\n }\n\n throw lastError;\n}\n","/**\n * Parser and normalizer functions for the Discovery Engine\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type {\n Requirement,\n Question,\n Assumption,\n TechDecision,\n} from \"./types.js\";\n\n/**\n * Raw requirement data from LLM response\n */\nexport interface RawRequirement {\n category?: string;\n priority?: string;\n title?: string;\n description?: string;\n explicit?: boolean;\n acceptanceCriteria?: string[];\n}\n\n/**\n * Raw question data from LLM response\n */\nexport interface RawQuestion {\n category?: string;\n question?: string;\n context?: string;\n importance?: string;\n defaultAnswer?: string | null;\n options?: string[] | null;\n}\n\n/**\n * Raw assumption data from LLM response\n */\nexport interface RawAssumption {\n category?: string;\n statement?: string;\n confidence?: string;\n impactIfWrong?: string;\n}\n\n/**\n * Raw tech hint data from LLM response\n */\nexport interface RawTechHint {\n area?: string;\n decision?: string;\n alternatives?: string[];\n rationale?: string;\n}\n\n/**\n * Normalize complexity value\n */\nexport function normalizeComplexity(\n value?: string\n): \"simple\" | \"moderate\" | \"complex\" | \"enterprise\" {\n const normalized = value?.toLowerCase();\n if (normalized === \"simple\") return \"simple\";\n if (normalized === \"moderate\") return \"moderate\";\n if (normalized === \"complex\") return \"complex\";\n if (normalized === \"enterprise\") return \"enterprise\";\n return \"moderate\";\n}\n\n/**\n * Normalize requirement category\n */\nexport function normalizeCategory(value?: string): Requirement[\"category\"] {\n const normalized = value?.toLowerCase();\n if (normalized === \"functional\") return \"functional\";\n if (normalized === \"non_functional\" || normalized === \"nonfunctional\")\n return \"non_functional\";\n if (normalized === \"technical\") return \"technical\";\n if (normalized === \"user_experience\" || normalized === \"ux\")\n return \"user_experience\";\n if (normalized === \"integration\") return \"integration\";\n if (normalized === \"deployment\") return \"deployment\";\n if (normalized === \"constraint\") return \"constraint\";\n return \"functional\";\n}\n\n/**\n * Normalize requirement priority\n */\nexport function normalizePriority(value?: string): Requirement[\"priority\"] {\n const normalized = value?.toLowerCase();\n if (normalized === \"must_have\" || normalized === \"must\") return \"must_have\";\n if (normalized === \"should_have\" || normalized === \"should\")\n return \"should_have\";\n if (normalized === \"could_have\" || normalized === \"could\")\n return \"could_have\";\n if (normalized === \"wont_have\" || normalized === \"wont\") return \"wont_have\";\n return \"should_have\";\n}\n\n/**\n * Normalize question category\n */\nexport function normalizeQuestionCategory(value?: string): Question[\"category\"] {\n const normalized = value?.toLowerCase();\n if (normalized === \"clarification\") return \"clarification\";\n if (normalized === \"expansion\") return \"expansion\";\n if (normalized === \"decision\") return \"decision\";\n if (normalized === \"confirmation\") return \"confirmation\";\n if (normalized === \"scope\") return \"scope\";\n if (normalized === \"priority\") return \"priority\";\n return \"clarification\";\n}\n\n/**\n * Normalize question importance\n */\nexport function normalizeImportance(\n value?: string\n): \"critical\" | \"important\" | \"helpful\" {\n const normalized = value?.toLowerCase();\n if (normalized === \"critical\") return \"critical\";\n if (normalized === \"important\") return \"important\";\n return \"helpful\";\n}\n\n/**\n * Normalize confidence level\n */\nexport function normalizeConfidence(value?: string): \"high\" | \"medium\" | \"low\" {\n const normalized = value?.toLowerCase();\n if (normalized === \"high\") return \"high\";\n if (normalized === \"low\") return \"low\";\n return \"medium\";\n}\n\n/**\n * Parse raw requirements from LLM response\n */\nexport function parseRequirements(data: RawRequirement[]): Requirement[] {\n return data.map((r) => ({\n id: randomUUID(),\n category: normalizeCategory(r.category),\n priority: normalizePriority(r.priority),\n title: r.title || \"Untitled\",\n description: r.description || \"\",\n sourceMessageId: \"\",\n explicit: r.explicit ?? true,\n acceptanceCriteria: r.acceptanceCriteria,\n status: \"draft\" as const,\n }));\n}\n\n/**\n * Parse raw questions from LLM response\n */\nexport function parseQuestions(data: RawQuestion[]): Question[] {\n return data.map((q) => ({\n id: randomUUID(),\n category: normalizeQuestionCategory(q.category),\n question: q.question || \"\",\n context: q.context || \"\",\n importance: normalizeImportance(q.importance),\n defaultAnswer: q.defaultAnswer || undefined,\n options: q.options || undefined,\n asked: false,\n }));\n}\n\n/**\n * Parse raw assumptions from LLM response\n */\nexport function parseAssumptions(data: RawAssumption[]): Assumption[] {\n return data.map((a) => ({\n id: randomUUID(),\n category: a.category || \"general\",\n statement: a.statement || \"\",\n confidence: normalizeConfidence(a.confidence),\n confirmed: false,\n impactIfWrong: a.impactIfWrong || \"\",\n }));\n}\n\n/**\n * Parse raw tech hints from LLM response\n */\nexport function parseTechHints(data: RawTechHint[]): Partial<TechDecision>[] {\n return data.map((t) => ({\n area: t.area as TechDecision[\"area\"],\n decision: t.decision,\n alternatives: t.alternatives || [],\n rationale: t.rationale,\n explicit: false,\n }));\n}\n","/**\n * Discovery Engine for the CONVERGE phase\n *\n * Handles requirement gathering through conversation with the user\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type {\n DiscoverySession,\n DiscoveryMessage,\n DiscoveryConfig,\n Requirement,\n Question,\n TechDecision,\n Clarification,\n InputAnalysis,\n ProjectType,\n} from \"./types.js\";\nimport {\n DISCOVERY_SYSTEM_PROMPT,\n INITIAL_ANALYSIS_PROMPT,\n GENERATE_QUESTIONS_PROMPT,\n PROCESS_ANSWER_PROMPT,\n EXTRACT_REQUIREMENTS_PROMPT,\n fillPrompt,\n} from \"./prompts.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\nimport { PhaseError } from \"../../utils/errors.js\";\n\n// Import parsers\nimport {\n normalizeComplexity,\n parseRequirements,\n parseQuestions,\n parseAssumptions,\n parseTechHints,\n} from \"./discovery-parsers.js\";\n\n/**\n * Default discovery configuration\n */\nexport const DEFAULT_DISCOVERY_CONFIG: DiscoveryConfig = {\n maxQuestionsPerRound: 3,\n minRequirements: 3,\n autoConfirmLowConfidence: false,\n defaultLanguage: \"typescript\",\n includeDiagrams: true,\n};\n\n/**\n * Discovery Engine\n *\n * Manages the requirement discovery process through conversation\n */\nexport class DiscoveryEngine {\n private session: DiscoverySession | null = null;\n private config: DiscoveryConfig;\n private llm: LLMProvider;\n\n constructor(llm: LLMProvider, config: Partial<DiscoveryConfig> = {}) {\n this.llm = llm;\n this.config = { ...DEFAULT_DISCOVERY_CONFIG, ...config };\n }\n\n /**\n * Start a new discovery session\n */\n async startSession(initialInput: string): Promise<DiscoverySession> {\n const sessionId = randomUUID();\n const now = new Date();\n\n this.session = {\n id: sessionId,\n startedAt: now,\n updatedAt: now,\n status: \"gathering\",\n initialInput,\n conversation: [],\n requirements: [],\n openQuestions: [],\n clarifications: [],\n assumptions: [],\n techDecisions: [],\n };\n\n // Add the initial input as first message\n this.addMessage(\"user\", initialInput);\n\n // Analyze the initial input\n const analysis = await this.analyzeInput(initialInput);\n\n // Apply analysis results\n this.applyAnalysis(analysis);\n\n // Update status based on analysis\n this.updateSessionStatus();\n\n return this.session;\n }\n\n /**\n * Resume an existing session\n */\n resumeSession(session: DiscoverySession): void {\n this.session = session;\n }\n\n /**\n * Get the current session\n */\n getSession(): DiscoverySession | null {\n return this.session;\n }\n\n /**\n * Analyze user input for requirements\n */\n async analyzeInput(input: string): Promise<InputAnalysis> {\n const prompt = fillPrompt(INITIAL_ANALYSIS_PROMPT, {\n userInput: input,\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: DISCOVERY_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n try {\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error(\"No JSON found in response\");\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n projectType?: string;\n complexity?: string;\n completeness?: number;\n requirements?: Array<{\n category?: string;\n priority?: string;\n title?: string;\n description?: string;\n explicit?: boolean;\n acceptanceCriteria?: string[];\n }>;\n assumptions?: Array<{\n category?: string;\n statement?: string;\n confidence?: string;\n impactIfWrong?: string;\n }>;\n questions?: Array<{\n category?: string;\n question?: string;\n context?: string;\n importance?: string;\n options?: string[] | null;\n }>;\n techRecommendations?: Array<{\n area?: string;\n decision?: string;\n alternatives?: string[];\n rationale?: string;\n }>;\n };\n\n return {\n projectType: (parsed.projectType as ProjectType) || \"unknown\",\n complexity: normalizeComplexity(parsed.complexity),\n completeness: parsed.completeness || 0,\n requirements: parseRequirements(parsed.requirements || []),\n suggestedQuestions: parseQuestions(parsed.questions || []),\n assumptions: parseAssumptions(parsed.assumptions || []),\n techHints: parseTechHints(parsed.techRecommendations || []),\n };\n } catch {\n throw new PhaseError(\n \"Failed to parse LLM response for input analysis\",\n { phase: \"converge\" }\n );\n }\n }\n\n /**\n * Process a user's answer to a question\n */\n async processAnswer(questionId: string, answer: string): Promise<void> {\n if (!this.session) {\n throw new PhaseError(\"No active discovery session\", { phase: \"converge\" });\n }\n\n const question = this.session.openQuestions.find((q) => q.id === questionId);\n if (!question) {\n throw new PhaseError(`Question not found: ${questionId}`, { phase: \"converge\" });\n }\n\n // Mark question as answered\n question.asked = true;\n question.answer = answer;\n\n // Add to conversation\n this.addMessage(\"user\", answer);\n\n // Process the answer\n const prompt = fillPrompt(PROCESS_ANSWER_PROMPT, {\n question: JSON.stringify(question),\n answer,\n requirements: JSON.stringify(this.session.requirements),\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: DISCOVERY_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n try {\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error(\"No JSON found in response\");\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n affectedRequirements?: string[];\n modifications?: Array<{\n requirementId: string;\n change: string;\n newValue?: unknown;\n }>;\n newRequirements?: Array<{\n category?: string;\n priority?: string;\n title?: string;\n description?: string;\n acceptanceCriteria?: string[];\n }>;\n confirmedAssumptions?: string[];\n };\n\n // Apply modifications\n if (parsed.modifications) {\n for (const mod of parsed.modifications) {\n const req = this.session.requirements.find(\n (r) => r.id === mod.requirementId\n );\n if (req && mod.change === \"description\" && typeof mod.newValue === \"string\") {\n req.description = mod.newValue;\n }\n }\n }\n\n // Add new requirements\n if (parsed.newRequirements) {\n const newReqs = parseRequirements(parsed.newRequirements);\n for (const req of newReqs) {\n req.sourceMessageId = this.session.conversation[\n this.session.conversation.length - 1\n ]?.id || \"\";\n this.session.requirements.push(req);\n }\n }\n\n // Confirm assumptions\n if (parsed.confirmedAssumptions) {\n for (const assumptionId of parsed.confirmedAssumptions) {\n const assumption = this.session.assumptions.find(\n (a) => a.id === assumptionId\n );\n if (assumption) {\n assumption.confirmed = true;\n }\n }\n }\n\n // Record clarification\n const clarification: Clarification = {\n questionId,\n answer,\n timestamp: new Date(),\n affectedRequirements: parsed.affectedRequirements || [],\n newRequirements: parsed.newRequirements?.map((r) => r.title || \"\") || [],\n };\n this.session.clarifications.push(clarification);\n\n // Remove answered question from open questions\n this.session.openQuestions = this.session.openQuestions.filter(\n (q) => q.id !== questionId\n );\n\n // Update session\n this.session.updatedAt = new Date();\n this.updateSessionStatus();\n } catch {\n throw new PhaseError(\"Failed to process answer\", { phase: \"converge\" });\n }\n }\n\n /**\n * Generate follow-up questions based on current state\n */\n async generateQuestions(): Promise<Question[]> {\n if (!this.session) {\n throw new PhaseError(\"No active discovery session\", { phase: \"converge\" });\n }\n\n const prompt = fillPrompt(GENERATE_QUESTIONS_PROMPT, {\n requirements: JSON.stringify(this.session.requirements),\n clarifications: JSON.stringify(this.session.clarifications),\n assumptions: JSON.stringify(\n this.session.assumptions.filter((a) => !a.confirmed)\n ),\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: DISCOVERY_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n try {\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error(\"No JSON found in response\");\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n questions?: Array<{\n category?: string;\n question?: string;\n context?: string;\n importance?: string;\n defaultAnswer?: string | null;\n options?: string[] | null;\n }>;\n };\n\n const questions = parseQuestions(parsed.questions || []);\n\n // Limit to max questions per round\n const limited = questions.slice(0, this.config.maxQuestionsPerRound);\n\n // Add to open questions\n for (const q of limited) {\n if (!this.session.openQuestions.some((oq) => oq.question === q.question)) {\n this.session.openQuestions.push(q);\n }\n }\n\n return limited;\n } catch {\n throw new PhaseError(\"Failed to generate questions\", { phase: \"converge\" });\n }\n }\n\n /**\n * Process a free-form message from the user\n */\n async processMessage(message: string): Promise<{\n newRequirements: Requirement[];\n questions: Question[];\n }> {\n if (!this.session) {\n throw new PhaseError(\"No active discovery session\", { phase: \"converge\" });\n }\n\n // Add to conversation\n this.addMessage(\"user\", message);\n\n // Extract requirements from the message\n const prompt = fillPrompt(EXTRACT_REQUIREMENTS_PROMPT, {\n message,\n existingRequirements: JSON.stringify(this.session.requirements),\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: DISCOVERY_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n try {\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error(\"No JSON found in response\");\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n newRequirements?: Array<{\n category?: string;\n priority?: string;\n title?: string;\n description?: string;\n explicit?: boolean;\n acceptanceCriteria?: string[];\n }>;\n techPreferences?: Array<{\n area?: string;\n preference?: string;\n reason?: string;\n }>;\n };\n\n // Add new requirements\n const newReqs = parseRequirements(parsed.newRequirements || []);\n const lastMsgId =\n this.session.conversation[this.session.conversation.length - 1]?.id || \"\";\n for (const req of newReqs) {\n req.sourceMessageId = lastMsgId;\n this.session.requirements.push(req);\n }\n\n // Process tech preferences\n if (parsed.techPreferences) {\n for (const pref of parsed.techPreferences) {\n if (pref.area && pref.preference) {\n const existing = this.session.techDecisions.find(\n (t) => t.area === pref.area\n );\n if (!existing) {\n this.session.techDecisions.push({\n id: randomUUID(),\n area: pref.area as TechDecision[\"area\"],\n decision: pref.preference,\n alternatives: [],\n rationale: pref.reason || \"\",\n explicit: true,\n });\n }\n }\n }\n }\n\n // Update session\n this.session.updatedAt = new Date();\n this.updateSessionStatus();\n\n // Generate follow-up questions if needed\n let questions: Question[] = [];\n if (this.session.status === \"clarifying\") {\n questions = await this.generateQuestions();\n }\n\n return { newRequirements: newReqs, questions };\n } catch {\n throw new PhaseError(\"Failed to process message\", { phase: \"converge\" });\n }\n }\n\n /**\n * Check if discovery is complete\n */\n isComplete(): boolean {\n if (!this.session) return false;\n\n return (\n this.session.status === \"complete\" ||\n this.session.status === \"spec_generated\"\n );\n }\n\n /**\n * Get unanswered questions\n */\n getOpenQuestions(): Question[] {\n if (!this.session) return [];\n return this.session.openQuestions.filter((q) => !q.asked);\n }\n\n /**\n * Get critical questions that must be answered\n */\n getCriticalQuestions(): Question[] {\n return this.getOpenQuestions().filter((q) => q.importance === \"critical\");\n }\n\n /**\n * Mark discovery as complete\n */\n markComplete(): void {\n if (!this.session) {\n throw new PhaseError(\"No active discovery session\", { phase: \"converge\" });\n }\n this.session.status = \"complete\";\n this.session.updatedAt = new Date();\n }\n\n /**\n * Force complete with current requirements\n */\n forceComplete(): void {\n if (!this.session) {\n throw new PhaseError(\"No active discovery session\", { phase: \"converge\" });\n }\n\n // Auto-confirm low confidence assumptions if configured\n if (this.config.autoConfirmLowConfidence) {\n for (const assumption of this.session.assumptions) {\n if (!assumption.confirmed && assumption.confidence !== \"high\") {\n assumption.confirmed = true;\n }\n }\n }\n\n this.session.status = \"complete\";\n this.session.updatedAt = new Date();\n }\n\n // Private helper methods\n\n private addMessage(role: \"user\" | \"assistant\", content: string): void {\n if (!this.session) return;\n\n const message: DiscoveryMessage = {\n id: randomUUID(),\n timestamp: new Date(),\n role,\n content,\n };\n\n this.session.conversation.push(message);\n this.session.updatedAt = new Date();\n }\n\n private applyAnalysis(analysis: InputAnalysis): void {\n if (!this.session) return;\n\n // Add requirements\n const lastMsgId =\n this.session.conversation[this.session.conversation.length - 1]?.id || \"\";\n for (const req of analysis.requirements) {\n req.sourceMessageId = lastMsgId;\n this.session.requirements.push(req);\n }\n\n // Add assumptions\n for (const assumption of analysis.assumptions) {\n this.session.assumptions.push(assumption);\n }\n\n // Add questions\n for (const question of analysis.suggestedQuestions) {\n this.session.openQuestions.push(question);\n }\n\n // Add tech decisions\n for (const hint of analysis.techHints) {\n if (hint.area && hint.decision) {\n this.session.techDecisions.push({\n id: randomUUID(),\n area: hint.area,\n decision: hint.decision,\n alternatives: hint.alternatives || [],\n rationale: hint.rationale || \"\",\n explicit: hint.explicit ?? false,\n });\n }\n }\n }\n\n private updateSessionStatus(): void {\n if (!this.session) return;\n\n const hasMinRequirements =\n this.session.requirements.length >= this.config.minRequirements;\n const hasCriticalQuestions = this.getCriticalQuestions().length > 0;\n const hasUnconfirmedHighImpact = this.session.assumptions.some(\n (a) => !a.confirmed && a.confidence === \"low\"\n );\n\n if (hasCriticalQuestions || hasUnconfirmedHighImpact) {\n this.session.status = \"clarifying\";\n } else if (hasMinRequirements) {\n this.session.status = \"refining\";\n } else {\n this.session.status = \"gathering\";\n }\n }\n}\n\n/**\n * Create a discovery engine with default configuration\n */\nexport function createDiscoveryEngine(\n llm: LLMProvider,\n config?: Partial<DiscoveryConfig>\n): DiscoveryEngine {\n return new DiscoveryEngine(llm, config);\n}\n","/**\n * Types and configuration for the Specification Generator\n */\n\n/**\n * Configuration for specification generation\n */\nexport interface SpecificationConfig {\n /** Include mermaid diagrams */\n includeDiagrams: boolean;\n\n /** Maximum spec document length */\n maxLength: number;\n\n /** Include risk analysis */\n includeRisks: boolean;\n\n /** Output format */\n format: \"markdown\" | \"json\";\n}\n\n/**\n * Simplified specification format (for tests and simple use cases)\n */\nexport interface SimpleSpec {\n name: string;\n description?: string;\n requirements?: {\n functional?: (string | { title?: string; description?: string })[];\n nonFunctional?: (string | { title?: string; description?: string })[];\n };\n assumptions?: string[];\n constraints?: string[];\n}\n\n/**\n * Default specification configuration\n */\nexport const DEFAULT_SPEC_CONFIG: SpecificationConfig = {\n includeDiagrams: true,\n maxLength: 50000,\n includeRisks: true,\n format: \"markdown\",\n};\n","/**\n * Helper functions for the Specification Generator\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type { DiscoverySession, Risk, Requirement, ProjectOverview } from \"./types.js\";\n\n/**\n * Extract project name from input\n */\nexport function extractProjectName(input: string): string {\n const namePatterns = [\n /(?:called|named|create|build)\\s+[\"']?([a-zA-Z][a-zA-Z0-9-_]+)[\"']?/i,\n /^([a-zA-Z][a-zA-Z0-9-_]+)\\s*[-:]/,\n /project\\s+[\"']?([a-zA-Z][a-zA-Z0-9-_]+)[\"']?/i,\n ];\n\n for (const pattern of namePatterns) {\n const match = input.match(pattern);\n if (match?.[1]) {\n return match[1];\n }\n }\n\n return \"my-project\";\n}\n\n/**\n * Infer target users from session requirements\n */\nexport function inferTargetUsers(session: DiscoverySession): string[] {\n const users: string[] = [];\n const userPatterns = [\n /(?:for|by)\\s+(developers?|users?|administrators?|customers?)/gi,\n /(developers?|users?|administrators?|customers?)\\s+(?:can|will|should)/gi,\n ];\n\n const text = session.requirements.map((r) => r.description).join(\" \");\n\n for (const pattern of userPatterns) {\n let match;\n while ((match = pattern.exec(text)) !== null) {\n const user = match[1]?.toLowerCase();\n if (user && !users.includes(user)) {\n users.push(user);\n }\n }\n }\n\n if (users.length === 0) {\n users.push(\"developers\");\n }\n\n return users;\n}\n\n/**\n * Infer project type from session\n */\nexport function inferProjectType(session: DiscoverySession): string {\n const text = session.initialInput.toLowerCase();\n\n if (text.includes(\"cli\") || text.includes(\"command line\")) return \"cli\";\n if (text.includes(\"api\") || text.includes(\"rest\") || text.includes(\"graphql\"))\n return \"api\";\n if (text.includes(\"web app\") || text.includes(\"frontend\")) return \"web_app\";\n if (text.includes(\"library\") || text.includes(\"package\")) return \"library\";\n if (text.includes(\"service\") || text.includes(\"daemon\")) return \"service\";\n if (text.includes(\"full stack\") || text.includes(\"fullstack\"))\n return \"full_stack\";\n\n return \"unknown\";\n}\n\n/**\n * Assess project complexity\n */\nexport function assessComplexity(\n session: DiscoverySession\n): \"simple\" | \"moderate\" | \"complex\" | \"enterprise\" {\n const reqCount = session.requirements.length;\n const hasIntegrations = session.requirements.some(\n (r) => r.category === \"integration\"\n );\n const hasSecurity = session.requirements.some((r) =>\n r.description.toLowerCase().includes(\"security\")\n );\n\n if (reqCount > 20 || (hasIntegrations && hasSecurity)) return \"enterprise\";\n if (reqCount > 10 || hasIntegrations) return \"complex\";\n if (reqCount > 5) return \"moderate\";\n return \"simple\";\n}\n\n/**\n * Extract integrations from session\n */\nexport function extractIntegrations(session: DiscoverySession): string[] {\n return session.requirements\n .filter((r) => r.category === \"integration\")\n .map((r) => r.title);\n}\n\n/**\n * Extract deployment info from session\n */\nexport function extractDeployment(session: DiscoverySession): string {\n const deployReq = session.requirements.find(\n (r) => r.category === \"deployment\"\n );\n const deployTech = session.techDecisions.find(\n (t) => t.area === \"infrastructure\"\n );\n\n if (deployReq) return deployReq.description;\n if (deployTech) return deployTech.decision;\n return \"Deployment strategy to be determined\";\n}\n\n/**\n * Extract out-of-scope items\n */\nexport function extractOutOfScope(session: DiscoverySession): string[] {\n return session.requirements\n .filter((r) => r.priority === \"wont_have\")\n .map((r) => r.title);\n}\n\n/**\n * Generate project overview from session\n */\nexport function generateOverview(session: DiscoverySession): ProjectOverview {\n const name = extractProjectName(session.initialInput);\n const description = session.initialInput.substring(0, 500);\n\n const goals = session.requirements\n .filter((r) => r.priority === \"must_have\")\n .slice(0, 5)\n .map((r) => r.title);\n\n const targetUsers = inferTargetUsers(session);\n\n const successCriteria = session.requirements\n .filter((r) => r.acceptanceCriteria && r.acceptanceCriteria.length > 0)\n .flatMap((r) => r.acceptanceCriteria || [])\n .slice(0, 10);\n\n return {\n name,\n description,\n goals,\n targetUsers,\n successCriteria,\n };\n}\n\n/**\n * Generate risks from session\n */\nexport function generateRisksFromSession(session: DiscoverySession): Risk[] {\n const risks: Risk[] = [];\n\n // Generate risks from unconfirmed assumptions\n for (const assumption of session.assumptions.filter((a) => !a.confirmed)) {\n if (assumption.confidence === \"low\") {\n risks.push({\n id: randomUUID(),\n description: `Assumption may be incorrect: ${assumption.statement}`,\n probability: \"medium\",\n impact: assumption.impactIfWrong ? \"high\" : \"medium\",\n mitigation: \"Validate assumption early in development\",\n });\n }\n }\n\n // Add common risks based on tech decisions\n const hasDatabase = session.techDecisions.some((t) => t.area === \"database\");\n const hasIntegrations = session.requirements.some(\n (r) => r.category === \"integration\"\n );\n\n if (hasDatabase) {\n risks.push({\n id: randomUUID(),\n description: \"Data migration complexity\",\n probability: \"medium\",\n impact: \"medium\",\n mitigation: \"Plan data model carefully, use migrations\",\n });\n }\n\n if (hasIntegrations) {\n risks.push({\n id: randomUUID(),\n description: \"Third-party API changes or unavailability\",\n probability: \"medium\",\n impact: \"high\",\n mitigation: \"Abstract integrations, implement circuit breakers\",\n });\n }\n\n return risks;\n}\n\n/**\n * Format requirement priority\n */\nexport function formatPriority(priority: Requirement[\"priority\"]): string {\n switch (priority) {\n case \"must_have\":\n return \"🔴 Must\";\n case \"should_have\":\n return \"🟠 Should\";\n case \"could_have\":\n return \"🟢 Could\";\n case \"wont_have\":\n return \"⚪ Won't\";\n default:\n return priority;\n }\n}\n","/**\n * Markdown generation for specifications\n */\n\nimport type { Specification, Requirement } from \"./types.js\";\nimport type { SimpleSpec } from \"./specification-types.js\";\nimport { formatPriority } from \"./specification-helpers.js\";\n\n/**\n * Generate markdown from simplified specification format (for tests)\n */\nexport function generateSimpleMarkdown(spec: SimpleSpec): string {\n const sections: string[] = [];\n\n sections.push(`# ${spec.name}`);\n sections.push(\"\");\n\n if (spec.description) {\n sections.push(spec.description);\n sections.push(\"\");\n }\n\n sections.push(\"## Requirements\");\n sections.push(\"\");\n\n sections.push(\"### Functional\");\n sections.push(\"\");\n const functional = spec.requirements?.functional || [];\n if (functional.length > 0) {\n for (const req of functional) {\n sections.push(`- ${typeof req === \"string\" ? req : req}`);\n }\n } else {\n sections.push(\"*No functional requirements*\");\n }\n sections.push(\"\");\n\n sections.push(\"### Non-Functional\");\n sections.push(\"\");\n const nonFunctional = spec.requirements?.nonFunctional || [];\n if (nonFunctional.length > 0) {\n for (const req of nonFunctional) {\n sections.push(`- ${typeof req === \"string\" ? req : req}`);\n }\n }\n sections.push(\"\");\n\n sections.push(\"## Assumptions\");\n sections.push(\"\");\n if (spec.assumptions?.length) {\n for (const a of spec.assumptions) {\n sections.push(`- ${typeof a === \"string\" ? a : a}`);\n }\n } else {\n sections.push(\"*No assumptions*\");\n }\n sections.push(\"\");\n\n sections.push(\"## Constraints\");\n sections.push(\"\");\n if (spec.constraints?.length) {\n for (const c of spec.constraints) {\n sections.push(`- ${typeof c === \"string\" ? c : c}`);\n }\n } else {\n sections.push(\"*No constraints*\");\n }\n sections.push(\"\");\n\n return sections.join(\"\\n\");\n}\n\n/**\n * Add requirements table to sections array\n */\nfunction addRequirementsTable(sections: string[], requirements: Requirement[]): void {\n if (requirements.length === 0) {\n sections.push(\"*No requirements in this category*\");\n return;\n }\n\n sections.push(\"| ID | Title | Priority | Description |\");\n sections.push(\"|----|-------|----------|-------------|\");\n\n for (const req of requirements) {\n const priority = formatPriority(req.priority);\n const desc = req.description.substring(0, 100).replace(/\\|/g, \"\\\\|\");\n sections.push(\n `| ${req.id.substring(0, 8)} | ${req.title} | ${priority} | ${desc} |`\n );\n }\n\n // Add detailed sections for each requirement\n sections.push(\"\");\n sections.push(\"### Details\");\n sections.push(\"\");\n\n for (const req of requirements) {\n sections.push(`#### ${req.title}`);\n sections.push(\"\");\n sections.push(req.description);\n sections.push(\"\");\n\n if (req.acceptanceCriteria && req.acceptanceCriteria.length > 0) {\n sections.push(\"**Acceptance Criteria:**\");\n for (const ac of req.acceptanceCriteria) {\n sections.push(`- [ ] ${ac}`);\n }\n sections.push(\"\");\n }\n }\n}\n\n/**\n * Generate a full markdown document from the specification\n */\nexport function generateFullMarkdown(spec: Specification): string {\n const sections: string[] = [];\n\n // Header\n sections.push(`# ${spec.overview.name} - Project Specification`);\n sections.push(\"\");\n sections.push(\n `> Generated: ${spec.generatedAt.toISOString()} | Version: ${spec.version}`\n );\n sections.push(\"\");\n\n // Table of contents\n sections.push(\"## Table of Contents\");\n sections.push(\"\");\n sections.push(\"1. [Executive Summary](#executive-summary)\");\n sections.push(\"2. [Goals & Success Criteria](#goals--success-criteria)\");\n sections.push(\"3. [Functional Requirements](#functional-requirements)\");\n sections.push(\n \"4. [Non-Functional Requirements](#non-functional-requirements)\"\n );\n sections.push(\"5. [Technical Constraints](#technical-constraints)\");\n sections.push(\"6. [Technology Stack](#technology-stack)\");\n sections.push(\"7. [Architecture](#architecture)\");\n sections.push(\"8. [Assumptions & Risks](#assumptions--risks)\");\n sections.push(\"9. [Out of Scope](#out-of-scope)\");\n if (spec.openQuestions.length > 0) {\n sections.push(\"10. [Open Questions](#open-questions)\");\n }\n sections.push(\"\");\n\n // Executive Summary\n sections.push(\"## Executive Summary\");\n sections.push(\"\");\n sections.push(spec.overview.description);\n sections.push(\"\");\n sections.push(\"**Target Users:**\");\n for (const user of spec.overview.targetUsers) {\n sections.push(`- ${user}`);\n }\n sections.push(\"\");\n\n // Goals & Success Criteria\n sections.push(\"## Goals & Success Criteria\");\n sections.push(\"\");\n sections.push(\"### Goals\");\n sections.push(\"\");\n for (const goal of spec.overview.goals) {\n sections.push(`- ${goal}`);\n }\n sections.push(\"\");\n sections.push(\"### Success Criteria\");\n sections.push(\"\");\n for (const criteria of spec.overview.successCriteria) {\n sections.push(`- [ ] ${criteria}`);\n }\n sections.push(\"\");\n\n // Functional Requirements\n sections.push(\"## Functional Requirements\");\n sections.push(\"\");\n addRequirementsTable(sections, spec.requirements.functional);\n sections.push(\"\");\n\n // Non-Functional Requirements\n sections.push(\"## Non-Functional Requirements\");\n sections.push(\"\");\n addRequirementsTable(sections, spec.requirements.nonFunctional);\n sections.push(\"\");\n\n // Technical Constraints\n sections.push(\"## Technical Constraints\");\n sections.push(\"\");\n addRequirementsTable(sections, spec.requirements.constraints);\n sections.push(\"\");\n\n // Technology Stack\n sections.push(\"## Technology Stack\");\n sections.push(\"\");\n sections.push(\"| Area | Decision | Alternatives | Rationale |\");\n sections.push(\"|------|----------|--------------|-----------|\");\n for (const tech of spec.technical.stack) {\n sections.push(\n `| ${tech.area} | **${tech.decision}** | ${tech.alternatives.join(\", \") || \"-\"} | ${tech.rationale} |`\n );\n }\n sections.push(\"\");\n\n // Architecture\n sections.push(\"## Architecture\");\n sections.push(\"\");\n sections.push(spec.technical.architecture);\n sections.push(\"\");\n\n // Integrations\n if (spec.technical.integrations.length > 0) {\n sections.push(\"### Integrations\");\n sections.push(\"\");\n for (const integration of spec.technical.integrations) {\n sections.push(`- ${integration}`);\n }\n sections.push(\"\");\n }\n\n // Deployment\n if (spec.technical.deployment) {\n sections.push(\"### Deployment\");\n sections.push(\"\");\n sections.push(spec.technical.deployment);\n sections.push(\"\");\n }\n\n // Assumptions & Risks\n sections.push(\"## Assumptions & Risks\");\n sections.push(\"\");\n\n sections.push(\"### Confirmed Assumptions\");\n sections.push(\"\");\n if (spec.assumptions.confirmed.length > 0) {\n for (const assumption of spec.assumptions.confirmed) {\n sections.push(`- ✅ ${assumption.statement}`);\n }\n } else {\n sections.push(\"*No confirmed assumptions*\");\n }\n sections.push(\"\");\n\n sections.push(\"### Unconfirmed Assumptions\");\n sections.push(\"\");\n if (spec.assumptions.unconfirmed.length > 0) {\n for (const assumption of spec.assumptions.unconfirmed) {\n sections.push(\n `- ⚠️ ${assumption.statement} (${assumption.confidence} confidence)`\n );\n if (assumption.impactIfWrong) {\n sections.push(` - *Impact if wrong:* ${assumption.impactIfWrong}`);\n }\n }\n } else {\n sections.push(\"*No unconfirmed assumptions*\");\n }\n sections.push(\"\");\n\n if (spec.assumptions.risks.length > 0) {\n sections.push(\"### Risks\");\n sections.push(\"\");\n sections.push(\"| Risk | Probability | Impact | Mitigation |\");\n sections.push(\"|------|------------|--------|------------|\");\n for (const risk of spec.assumptions.risks) {\n sections.push(\n `| ${risk.description} | ${risk.probability} | ${risk.impact} | ${risk.mitigation} |`\n );\n }\n sections.push(\"\");\n }\n\n // Out of Scope\n sections.push(\"## Out of Scope\");\n sections.push(\"\");\n if (spec.outOfScope.length > 0) {\n for (const item of spec.outOfScope) {\n sections.push(`- ${item}`);\n }\n } else {\n sections.push(\"*Nothing explicitly marked as out of scope*\");\n }\n sections.push(\"\");\n\n // Open Questions\n if (spec.openQuestions.length > 0) {\n sections.push(\"## Open Questions\");\n sections.push(\"\");\n for (const question of spec.openQuestions) {\n sections.push(`### ${question.question}`);\n sections.push(\"\");\n sections.push(`*Context:* ${question.context}`);\n sections.push(`*Importance:* ${question.importance}`);\n if (question.defaultAnswer) {\n sections.push(`*Default answer:* ${question.defaultAnswer}`);\n }\n sections.push(\"\");\n }\n }\n\n // Footer\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(\"*This specification was generated by Corbat-Coco*\");\n\n return sections.join(\"\\n\");\n}\n","/**\n * Specification Generator for the CONVERGE phase\n *\n * Generates comprehensive project specifications from discovered requirements\n */\n\nimport type { DiscoverySession, Specification } from \"./types.js\";\nimport {\n DISCOVERY_SYSTEM_PROMPT,\n ARCHITECTURE_PROMPT,\n fillPrompt,\n} from \"./prompts.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\nimport { PhaseError } from \"../../utils/errors.js\";\n\n// Re-export types for backwards compatibility\nexport type { SpecificationConfig, SimpleSpec } from \"./specification-types.js\";\nexport { DEFAULT_SPEC_CONFIG } from \"./specification-types.js\";\n\n// Import helper functions\nimport {\n generateOverview,\n generateRisksFromSession,\n extractIntegrations,\n extractDeployment,\n extractOutOfScope,\n inferProjectType,\n assessComplexity,\n} from \"./specification-helpers.js\";\n\n// Import markdown generators\nimport {\n generateSimpleMarkdown,\n generateFullMarkdown,\n} from \"./specification-markdown.js\";\n\nimport type { SpecificationConfig, SimpleSpec } from \"./specification-types.js\";\nimport { DEFAULT_SPEC_CONFIG } from \"./specification-types.js\";\n\n/**\n * Specification Generator\n *\n * Creates comprehensive project specification documents\n */\nexport class SpecificationGenerator {\n private llm: LLMProvider;\n private config: SpecificationConfig;\n\n constructor(llm: LLMProvider, config: Partial<SpecificationConfig> = {}) {\n this.llm = llm;\n this.config = { ...DEFAULT_SPEC_CONFIG, ...config };\n }\n\n /**\n * Generate a specification from a discovery session\n */\n async generate(session: DiscoverySession): Promise<Specification> {\n if (session.status !== \"complete\" && session.status !== \"refining\") {\n throw new PhaseError(\n \"Discovery session is not ready for specification\",\n { phase: \"converge\" }\n );\n }\n\n // Organize requirements by category\n const functional = session.requirements.filter(\n (r) => r.category === \"functional\"\n );\n const nonFunctional = session.requirements.filter(\n (r) =>\n r.category === \"non_functional\" ||\n r.category === \"user_experience\" ||\n r.category === \"deployment\"\n );\n const constraints = session.requirements.filter(\n (r) => r.category === \"constraint\" || r.category === \"technical\"\n );\n\n // Generate architecture if not already specified\n const architecture = await this.generateArchitecture(session);\n\n // Generate risks\n const risks = this.config.includeRisks\n ? generateRisksFromSession(session)\n : [];\n\n // Build the specification\n const spec: Specification = {\n version: \"1.0.0\",\n generatedAt: new Date(),\n\n overview: generateOverview(session),\n\n requirements: {\n functional,\n nonFunctional,\n constraints,\n },\n\n technical: {\n stack: session.techDecisions,\n architecture,\n integrations: extractIntegrations(session),\n deployment: extractDeployment(session),\n },\n\n assumptions: {\n confirmed: session.assumptions.filter((a) => a.confirmed),\n unconfirmed: session.assumptions.filter((a) => !a.confirmed),\n risks,\n },\n\n outOfScope: extractOutOfScope(session),\n\n openQuestions: session.openQuestions.filter((q) => !q.asked),\n };\n\n return spec;\n }\n\n /**\n * Generate a markdown document from the specification\n * Supports both full Specification and simplified test format\n */\n toMarkdown(spec: Specification | SimpleSpec): string {\n // Check if this is a simple specification (from tests)\n if (\"name\" in spec && !(\"overview\" in spec)) {\n return generateSimpleMarkdown(spec as SimpleSpec);\n }\n return generateFullMarkdown(spec as Specification);\n }\n\n /**\n * Generate a markdown document from the specification (alias for toMarkdown)\n */\n generateMarkdown(spec: Specification): string {\n return generateFullMarkdown(spec);\n }\n\n /**\n * Generate JSON output\n */\n generateJSON(spec: Specification): string {\n return JSON.stringify(spec, null, 2);\n }\n\n // Private helper methods\n\n private async generateArchitecture(\n session: DiscoverySession\n ): Promise<string> {\n const projectType = inferProjectType(session);\n const complexity = assessComplexity(session);\n\n const prompt = fillPrompt(ARCHITECTURE_PROMPT, {\n projectType,\n complexity,\n requirements: JSON.stringify(session.requirements),\n techStack: JSON.stringify(session.techDecisions),\n });\n\n try {\n const response = await this.llm.chat([\n { role: \"system\", content: DISCOVERY_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n\n if (jsonMatch) {\n const parsed = JSON.parse(jsonMatch[0]) as {\n pattern?: string;\n rationale?: string;\n components?: Array<{\n name?: string;\n responsibility?: string;\n technology?: string;\n }>;\n dataFlow?: string;\n diagramMermaid?: string;\n };\n\n let architecture = `### Pattern: ${parsed.pattern || \"Layered Architecture\"}\\n\\n`;\n architecture += `${parsed.rationale || \"\"}\\n\\n`;\n\n if (parsed.components && parsed.components.length > 0) {\n architecture += \"### Components\\n\\n\";\n for (const comp of parsed.components) {\n architecture += `- **${comp.name}**: ${comp.responsibility} (${comp.technology})\\n`;\n }\n architecture += \"\\n\";\n }\n\n if (parsed.dataFlow) {\n architecture += `### Data Flow\\n\\n${parsed.dataFlow}\\n\\n`;\n }\n\n if (this.config.includeDiagrams && parsed.diagramMermaid) {\n architecture += \"### Diagram\\n\\n\";\n architecture += \"```mermaid\\n\";\n architecture += parsed.diagramMermaid;\n architecture += \"\\n```\\n\";\n }\n\n return architecture;\n }\n\n return \"Architecture to be determined during ORCHESTRATE phase.\";\n } catch {\n return \"Architecture to be determined during ORCHESTRATE phase.\";\n }\n }\n}\n\n/**\n * Create a specification generator with default configuration\n */\nexport function createSpecificationGenerator(\n llm: LLMProvider,\n config?: Partial<SpecificationConfig>\n): SpecificationGenerator {\n return new SpecificationGenerator(llm, config);\n}\n\n/**\n * Validate that a specification has all required fields\n * Supports both full Specification and simplified format\n */\nexport function validateSpecification(spec: unknown): asserts spec is Specification | SimpleSpec {\n if (!spec || typeof spec !== \"object\") {\n throw new Error(\"Specification must be an object\");\n }\n\n const s = spec as Record<string, unknown>;\n\n // Check for simplified format (has name directly)\n if (\"name\" in s && !(\"overview\" in s)) {\n if (typeof s.name !== \"string\") {\n throw new Error(\"Specification must have a name\");\n }\n if (!s.requirements || typeof s.requirements !== \"object\") {\n throw new Error(\"Specification must have requirements\");\n }\n const reqs = s.requirements as Record<string, unknown>;\n if (!Array.isArray(reqs.functional)) {\n throw new Error(\"Specification must have functional requirements array\");\n }\n if (!Array.isArray(reqs.nonFunctional)) {\n throw new Error(\"Specification must have nonFunctional requirements array\");\n }\n return;\n }\n\n // Full format validation\n if (!s.overview || typeof s.overview !== \"object\") {\n throw new Error(\"Specification must have an overview\");\n }\n\n const overview = s.overview as Record<string, unknown>;\n if (!overview.name || typeof overview.name !== \"string\") {\n throw new Error(\"Specification overview must have a name\");\n }\n\n if (!s.requirements || typeof s.requirements !== \"object\") {\n throw new Error(\"Specification must have requirements\");\n }\n\n const reqs = s.requirements as Record<string, unknown>;\n if (!Array.isArray(reqs.functional)) {\n throw new Error(\"Specification must have functional requirements array\");\n }\n\n if (!Array.isArray(reqs.nonFunctional)) {\n throw new Error(\"Specification must have nonFunctional requirements array\");\n }\n}\n","/**\n * Session Persistence for the CONVERGE phase\n *\n * Handles saving and loading discovery sessions for recovery\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { DiscoverySession } from \"./types.js\";\nimport { FileSystemError } from \"../../utils/errors.js\";\n\n/**\n * Paths for persisted data\n */\nexport interface PersistencePaths {\n /** Base directory for all CONVERGE data */\n baseDir: string;\n\n /** Discovery session file */\n sessionFile: string;\n\n /** Specification file */\n specFile: string;\n\n /** Conversation log */\n conversationLog: string;\n\n /** Checkpoint file */\n checkpointFile: string;\n}\n\n/**\n * Get persistence paths for a project\n */\nexport function getPersistencePaths(projectPath: string): PersistencePaths {\n const baseDir = path.join(projectPath, \".coco\", \"spec\");\n\n return {\n baseDir,\n sessionFile: path.join(baseDir, \"discovery-session.json\"),\n specFile: path.join(baseDir, \"spec.md\"),\n conversationLog: path.join(baseDir, \"conversation.jsonl\"),\n checkpointFile: path.join(baseDir, \"checkpoint.json\"),\n };\n}\n\n/**\n * Session persistence manager\n */\nexport class SessionPersistence {\n private paths: PersistencePaths;\n\n constructor(projectPath: string) {\n this.paths = getPersistencePaths(projectPath);\n }\n\n /**\n * Ensure the persistence directory exists\n */\n async ensureDir(): Promise<void> {\n try {\n await fs.mkdir(this.paths.baseDir, { recursive: true });\n } catch {\n throw new FileSystemError(\n `Failed to create persistence directory: ${this.paths.baseDir}`,\n { path: this.paths.baseDir, operation: \"write\" }\n );\n }\n }\n\n /**\n * Save a discovery session\n */\n async saveSession(session: DiscoverySession): Promise<void> {\n await this.ensureDir();\n\n try {\n const data = JSON.stringify(session, null, 2);\n await fs.writeFile(this.paths.sessionFile, data, \"utf-8\");\n } catch {\n throw new FileSystemError(\n \"Failed to save discovery session\",\n { path: this.paths.sessionFile, operation: \"write\" }\n );\n }\n }\n\n /**\n * Load a discovery session\n */\n async loadSession(): Promise<DiscoverySession | null> {\n try {\n const data = await fs.readFile(this.paths.sessionFile, \"utf-8\");\n const parsed = JSON.parse(data) as DiscoverySession;\n\n // Convert date strings back to Date objects\n parsed.startedAt = new Date(parsed.startedAt);\n parsed.updatedAt = new Date(parsed.updatedAt);\n\n for (const msg of parsed.conversation) {\n msg.timestamp = new Date(msg.timestamp);\n }\n\n for (const clarification of parsed.clarifications) {\n clarification.timestamp = new Date(clarification.timestamp);\n }\n\n return parsed;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return null;\n }\n throw new FileSystemError(\n \"Failed to load discovery session\",\n { path: this.paths.sessionFile, operation: \"read\" }\n );\n }\n }\n\n /**\n * Check if a session exists\n */\n async hasSession(): Promise<boolean> {\n try {\n await fs.access(this.paths.sessionFile);\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Delete a session\n */\n async deleteSession(): Promise<void> {\n try {\n await fs.unlink(this.paths.sessionFile);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw new FileSystemError(\n \"Failed to delete discovery session\",\n { path: this.paths.sessionFile, operation: \"delete\" }\n );\n }\n }\n }\n\n /**\n * Save the specification markdown\n */\n async saveSpecification(content: string): Promise<void> {\n await this.ensureDir();\n\n try {\n await fs.writeFile(this.paths.specFile, content, \"utf-8\");\n } catch {\n throw new FileSystemError(\n \"Failed to save specification\",\n { path: this.paths.specFile, operation: \"write\" }\n );\n }\n }\n\n /**\n * Load the specification markdown\n */\n async loadSpecification(): Promise<string | null> {\n try {\n return await fs.readFile(this.paths.specFile, \"utf-8\");\n } catch {\n return null;\n }\n }\n\n /**\n * Append a message to the conversation log\n */\n async appendConversation(\n role: \"user\" | \"assistant\",\n content: string\n ): Promise<void> {\n await this.ensureDir();\n\n const entry = {\n timestamp: new Date().toISOString(),\n role,\n content,\n };\n\n try {\n await fs.appendFile(\n this.paths.conversationLog,\n JSON.stringify(entry) + \"\\n\",\n \"utf-8\"\n );\n } catch {\n throw new FileSystemError(\n \"Failed to append to conversation log\",\n { path: this.paths.conversationLog, operation: \"write\" }\n );\n }\n }\n\n /**\n * Load the full conversation log\n */\n async loadConversationLog(): Promise<\n Array<{ timestamp: string; role: string; content: string }>\n > {\n try {\n const data = await fs.readFile(this.paths.conversationLog, \"utf-8\");\n const lines = data.trim().split(\"\\n\");\n return lines\n .filter((line) => line.trim())\n .map((line) => JSON.parse(line) as { timestamp: string; role: string; content: string });\n } catch {\n return [];\n }\n }\n\n /**\n * Save a checkpoint\n */\n async saveCheckpoint(checkpoint: ConvergeCheckpoint): Promise<void> {\n await this.ensureDir();\n\n try {\n const data = JSON.stringify(checkpoint, null, 2);\n await fs.writeFile(this.paths.checkpointFile, data, \"utf-8\");\n } catch {\n throw new FileSystemError(\n \"Failed to save checkpoint\",\n { path: this.paths.checkpointFile, operation: \"write\" }\n );\n }\n }\n\n /**\n * Load a checkpoint\n */\n async loadCheckpoint(): Promise<ConvergeCheckpoint | null> {\n try {\n const data = await fs.readFile(this.paths.checkpointFile, \"utf-8\");\n const parsed = JSON.parse(data) as ConvergeCheckpoint;\n parsed.timestamp = new Date(parsed.timestamp);\n return parsed;\n } catch {\n return null;\n }\n }\n\n /**\n * Clear all persisted data\n */\n async clearAll(): Promise<void> {\n try {\n await fs.rm(this.paths.baseDir, { recursive: true, force: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw new FileSystemError(\n \"Failed to clear persistence data\",\n { path: this.paths.baseDir, operation: \"delete\" }\n );\n }\n }\n }\n\n /**\n * Get the specification file path\n */\n getSpecPath(): string {\n return this.paths.specFile;\n }\n}\n\n/**\n * Checkpoint data for CONVERGE phase\n */\nexport interface ConvergeCheckpoint {\n /** Checkpoint ID */\n id: string;\n\n /** When the checkpoint was created */\n timestamp: Date;\n\n /** Current step in the converge process */\n step: ConvergeStep;\n\n /** Session ID being processed */\n sessionId: string;\n\n /** Progress percentage */\n progress: number;\n\n /** Whether spec has been generated */\n specGenerated: boolean;\n\n /** Metadata for resumption */\n metadata: Record<string, unknown>;\n}\n\n/**\n * Steps in the CONVERGE process\n */\nexport type ConvergeStep =\n | \"init\"\n | \"discovery\"\n | \"clarification\"\n | \"refinement\"\n | \"spec_generation\"\n | \"complete\";\n\n/**\n * Create a checkpoint\n */\nexport function createCheckpoint(\n sessionId: string,\n step: ConvergeStep,\n progress: number,\n specGenerated: boolean = false,\n metadata: Record<string, unknown> = {}\n): ConvergeCheckpoint {\n return {\n id: `converge-${Date.now()}`,\n timestamp: new Date(),\n step,\n sessionId,\n progress,\n specGenerated,\n metadata,\n };\n}\n\n/**\n * Session manager that combines persistence with session operations\n */\nexport class SessionManager {\n private persistence: SessionPersistence;\n\n constructor(projectPath: string) {\n this.persistence = new SessionPersistence(projectPath);\n }\n\n /**\n * Get the persistence layer\n */\n getPersistence(): SessionPersistence {\n return this.persistence;\n }\n\n /**\n * Save session with automatic checkpoint\n */\n async saveWithCheckpoint(\n session: DiscoverySession,\n step: ConvergeStep,\n progress: number\n ): Promise<void> {\n await this.persistence.saveSession(session);\n\n const checkpoint = createCheckpoint(\n session.id,\n step,\n progress,\n session.status === \"spec_generated\"\n );\n await this.persistence.saveCheckpoint(checkpoint);\n }\n\n /**\n * Resume from last checkpoint\n */\n async resume(): Promise<{\n session: DiscoverySession;\n checkpoint: ConvergeCheckpoint;\n } | null> {\n const checkpoint = await this.persistence.loadCheckpoint();\n if (!checkpoint) return null;\n\n const session = await this.persistence.loadSession();\n if (!session) return null;\n\n return { session, checkpoint };\n }\n\n /**\n * Check if can resume\n */\n async canResume(): Promise<boolean> {\n const checkpoint = await this.persistence.loadCheckpoint();\n return checkpoint !== null && checkpoint.step !== \"complete\";\n }\n\n /**\n * Get resume info without loading full session\n */\n async getResumeInfo(): Promise<{\n sessionId: string;\n step: ConvergeStep;\n progress: number;\n timestamp: Date;\n } | null> {\n const checkpoint = await this.persistence.loadCheckpoint();\n if (!checkpoint) return null;\n\n return {\n sessionId: checkpoint.sessionId,\n step: checkpoint.step,\n progress: checkpoint.progress,\n timestamp: checkpoint.timestamp,\n };\n }\n\n /**\n * Complete the session and save specification\n */\n async complete(session: DiscoverySession, specMarkdown: string): Promise<void> {\n session.status = \"spec_generated\";\n session.updatedAt = new Date();\n\n await this.persistence.saveSession(session);\n await this.persistence.saveSpecification(specMarkdown);\n\n const checkpoint = createCheckpoint(\n session.id,\n \"complete\",\n 100,\n true\n );\n await this.persistence.saveCheckpoint(checkpoint);\n }\n}\n\n/**\n * Create a session manager for a project\n */\nexport function createSessionManager(projectPath: string): SessionManager {\n return new SessionManager(projectPath);\n}\n","/**\n * CONVERGE Phase Executor\n *\n * Orchestrates the discovery and specification process\n */\n\nimport type {\n PhaseExecutor,\n PhaseContext,\n PhaseResult,\n PhaseCheckpoint,\n PhaseArtifact,\n} from \"../types.js\";\nimport type { DiscoverySession, Question, Specification } from \"./types.js\";\nimport { DiscoveryEngine, createDiscoveryEngine } from \"./discovery.js\";\nimport {\n SpecificationGenerator,\n createSpecificationGenerator,\n} from \"./specification.js\";\nimport { SessionManager, createSessionManager, ConvergeStep } from \"./persistence.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\nimport { PhaseError } from \"../../utils/errors.js\";\n\n/**\n * CONVERGE phase configuration\n */\nexport interface ConvergeConfig {\n /** Maximum rounds of questions */\n maxQuestionRounds: number;\n\n /** Maximum questions per round */\n maxQuestionsPerRound: number;\n\n /** Auto-proceed if no critical questions */\n autoProceed: boolean;\n\n /** Include diagrams in specification */\n includeDiagrams: boolean;\n\n /** Callback for user interaction */\n onUserInput?: (prompt: string, options?: string[]) => Promise<string>;\n\n /** Callback for progress updates */\n onProgress?: (step: ConvergeStep, progress: number, message: string) => void;\n}\n\n/**\n * Default CONVERGE configuration\n */\nexport const DEFAULT_CONVERGE_CONFIG: ConvergeConfig = {\n maxQuestionRounds: 3,\n maxQuestionsPerRound: 3,\n autoProceed: false,\n includeDiagrams: true,\n};\n\n/**\n * CONVERGE Phase Executor\n *\n * Implements the PhaseExecutor interface for the CONVERGE phase\n */\nexport class ConvergeExecutor implements PhaseExecutor {\n readonly name = \"converge\";\n readonly description = \"Gather requirements and generate specification\";\n\n private config: ConvergeConfig;\n private discovery: DiscoveryEngine | null = null;\n private specGenerator: SpecificationGenerator | null = null;\n private sessionManager: SessionManager | null = null;\n private currentSession: DiscoverySession | null = null;\n private llm: LLMProvider | null = null;\n\n constructor(config: Partial<ConvergeConfig> = {}) {\n this.config = { ...DEFAULT_CONVERGE_CONFIG, ...config };\n }\n\n /**\n * Check if the phase can start\n */\n canStart(_context: PhaseContext): boolean {\n // CONVERGE can always start (it's the first phase)\n return true;\n }\n\n /**\n * Execute the CONVERGE phase\n */\n async execute(context: PhaseContext): Promise<PhaseResult> {\n const startTime = new Date();\n const artifacts: PhaseArtifact[] = [];\n\n try {\n // Initialize components\n await this.initialize(context);\n\n // Check for existing session to resume\n const resumeData = await this.sessionManager!.resume();\n\n if (resumeData) {\n this.currentSession = resumeData.session;\n this.discovery!.resumeSession(this.currentSession);\n this.reportProgress(\n resumeData.checkpoint.step,\n resumeData.checkpoint.progress,\n \"Resuming from checkpoint\"\n );\n } else {\n // Get initial input from user\n const initialInput = await this.getUserInput(\n \"Please describe the project you want to build:\",\n undefined\n );\n\n // Start discovery\n this.reportProgress(\"discovery\", 10, \"Starting discovery...\");\n this.currentSession = await this.discovery!.startSession(initialInput);\n await this.saveProgress(\"discovery\", 15);\n }\n\n // Run discovery loop\n await this.runDiscoveryLoop();\n\n // Mark discovery complete\n this.discovery!.markComplete();\n this.reportProgress(\"spec_generation\", 80, \"Generating specification...\");\n\n // Generate specification\n const spec = await this.specGenerator!.generate(this.currentSession!);\n const specMarkdown = this.specGenerator!.generateMarkdown(spec);\n\n // Save everything\n await this.sessionManager!.complete(this.currentSession!, specMarkdown);\n\n // Create artifacts\n artifacts.push({\n type: \"specification\",\n path: this.sessionManager!.getPersistence().getSpecPath(),\n description: \"Project specification document\",\n });\n\n this.reportProgress(\"complete\", 100, \"CONVERGE phase complete\");\n\n const endTime = new Date();\n\n return {\n phase: \"converge\",\n success: true,\n artifacts,\n metrics: {\n startTime,\n endTime,\n durationMs: endTime.getTime() - startTime.getTime(),\n llmCalls: this.currentSession!.conversation.length,\n tokensUsed: 0, // Would need to track this\n },\n };\n } catch (error) {\n return {\n phase: \"converge\",\n success: false,\n artifacts,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Check if the phase can complete\n */\n canComplete(_context: PhaseContext): boolean {\n if (!this.discovery || !this.currentSession) return false;\n\n // Can complete if discovery is done and no critical questions remain\n return (\n this.discovery.isComplete() ||\n this.discovery.getCriticalQuestions().length === 0\n );\n }\n\n /**\n * Create a checkpoint for recovery\n */\n async checkpoint(_context: PhaseContext): Promise<PhaseCheckpoint> {\n const step = this.getCurrentStep();\n const progress = this.calculateProgress();\n\n if (this.currentSession && this.sessionManager) {\n await this.sessionManager.saveWithCheckpoint(\n this.currentSession,\n step,\n progress\n );\n }\n\n return {\n phase: \"converge\",\n timestamp: new Date(),\n state: {\n artifacts: [],\n progress,\n checkpoint: null,\n },\n resumePoint: step,\n };\n }\n\n /**\n * Restore from a checkpoint\n */\n async restore(\n _checkpoint: PhaseCheckpoint,\n context: PhaseContext\n ): Promise<void> {\n await this.initialize(context);\n\n const resumeData = await this.sessionManager!.resume();\n if (resumeData) {\n this.currentSession = resumeData.session;\n this.discovery!.resumeSession(this.currentSession);\n }\n }\n\n // Private methods\n\n private async initialize(context: PhaseContext): Promise<void> {\n // Create LLM adapter from context\n this.llm = this.createLLMAdapter(context);\n\n // Initialize components\n this.discovery = createDiscoveryEngine(this.llm, {\n maxQuestionsPerRound: this.config.maxQuestionsPerRound,\n });\n\n this.specGenerator = createSpecificationGenerator(this.llm, {\n includeDiagrams: this.config.includeDiagrams,\n });\n\n this.sessionManager = createSessionManager(context.projectPath);\n }\n\n private createLLMAdapter(context: PhaseContext): LLMProvider {\n // Adapt the phase context LLM interface to our LLMProvider interface\n const llmContext = context.llm;\n\n return {\n id: \"phase-adapter\",\n name: \"Phase LLM Adapter\",\n\n async initialize() {},\n\n async chat(messages) {\n // Convert provider Message to phase Message (content can be string or array)\n const adapted = messages.map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? m.content : JSON.stringify(m.content),\n }));\n const response = await llmContext.chat(adapted);\n return {\n id: `chat-${Date.now()}`,\n content: response.content,\n stopReason: \"end_turn\" as const,\n usage: {\n inputTokens: response.usage.inputTokens,\n outputTokens: response.usage.outputTokens,\n },\n model: \"phase-adapter\",\n };\n },\n\n async chatWithTools(messages, options) {\n // Convert provider Message to phase Message\n const adapted = messages.map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? m.content : JSON.stringify(m.content),\n }));\n // Convert provider ToolDefinition to phase ToolDefinition\n const tools = options.tools.map((t) => ({\n name: t.name,\n description: t.description,\n parameters: t.input_schema as Record<string, unknown>,\n }));\n const response = await llmContext.chatWithTools(adapted, tools);\n return {\n id: `chat-${Date.now()}`,\n content: response.content,\n stopReason: \"end_turn\" as const,\n usage: {\n inputTokens: response.usage.inputTokens,\n outputTokens: response.usage.outputTokens,\n },\n model: \"phase-adapter\",\n toolCalls: (response.toolCalls || []).map((tc) => ({\n id: tc.name,\n name: tc.name,\n input: tc.arguments,\n })),\n };\n },\n\n async *stream(messages) {\n const adapted = messages.map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? m.content : JSON.stringify(m.content),\n }));\n const response = await llmContext.chat(adapted);\n yield {\n type: \"text\" as const,\n text: response.content,\n };\n yield {\n type: \"done\" as const,\n };\n },\n\n countTokens(_text: string): number {\n // Approximate token count\n return Math.ceil(_text.length / 4);\n },\n\n getContextWindow(): number {\n return 200000;\n },\n\n async isAvailable(): Promise<boolean> {\n return true;\n },\n };\n }\n\n private async runDiscoveryLoop(): Promise<void> {\n let round = 0;\n\n while (round < this.config.maxQuestionRounds) {\n round++;\n\n // Check if we can proceed\n const criticalQuestions = this.discovery!.getCriticalQuestions();\n\n if (criticalQuestions.length === 0 && this.config.autoProceed) {\n break;\n }\n\n // Generate questions if needed\n const openQuestions = this.discovery!.getOpenQuestions();\n\n if (openQuestions.length === 0) {\n const newQuestions = await this.discovery!.generateQuestions();\n if (newQuestions.length === 0) {\n break; // No more questions to ask\n }\n }\n\n // Ask questions\n const questions = this.discovery!.getOpenQuestions();\n\n if (questions.length === 0) {\n break;\n }\n\n this.reportProgress(\n \"clarification\",\n 30 + round * 15,\n `Asking clarification questions (round ${round})`\n );\n\n // Process each question\n for (const question of questions) {\n const answer = await this.askQuestion(question);\n\n if (answer.toLowerCase() === \"skip\") {\n // Use default answer if available\n if (question.defaultAnswer) {\n await this.discovery!.processAnswer(\n question.id,\n question.defaultAnswer\n );\n }\n continue;\n }\n\n if (answer.toLowerCase() === \"done\") {\n // User wants to finish\n return;\n }\n\n await this.discovery!.processAnswer(question.id, answer);\n }\n\n // Save progress\n await this.saveProgress(\"clarification\", 30 + round * 15);\n }\n }\n\n private async askQuestion(question: Question): Promise<string> {\n let prompt = question.question;\n\n if (question.context) {\n prompt += `\\n\\nContext: ${question.context}`;\n }\n\n if (question.options && question.options.length > 0) {\n prompt += \"\\n\\nOptions:\";\n for (let i = 0; i < question.options.length; i++) {\n prompt += `\\n${i + 1}. ${question.options[i]}`;\n }\n }\n\n if (question.defaultAnswer) {\n prompt += `\\n\\n(Default: ${question.defaultAnswer}, type 'skip' to use default)`;\n }\n\n prompt += \"\\n\\n(Type 'done' to finish questions and proceed)\";\n\n return this.getUserInput(prompt, question.options);\n }\n\n private async getUserInput(\n prompt: string,\n options?: string[]\n ): Promise<string> {\n if (this.config.onUserInput) {\n return this.config.onUserInput(prompt, options);\n }\n\n // Default implementation that throws - in real usage, a callback should be provided\n throw new PhaseError(\n \"No user input handler configured\",\n { phase: \"converge\" }\n );\n }\n\n private reportProgress(\n step: ConvergeStep,\n progress: number,\n message: string\n ): void {\n if (this.config.onProgress) {\n this.config.onProgress(step, progress, message);\n }\n }\n\n private async saveProgress(\n step: ConvergeStep,\n progress: number\n ): Promise<void> {\n if (this.currentSession && this.sessionManager) {\n await this.sessionManager.saveWithCheckpoint(\n this.currentSession,\n step,\n progress\n );\n }\n }\n\n private getCurrentStep(): ConvergeStep {\n if (!this.currentSession) return \"init\";\n\n switch (this.currentSession.status) {\n case \"gathering\":\n return \"discovery\";\n case \"clarifying\":\n return \"clarification\";\n case \"refining\":\n return \"refinement\";\n case \"complete\":\n return \"spec_generation\";\n case \"spec_generated\":\n return \"complete\";\n default:\n return \"discovery\";\n }\n }\n\n private calculateProgress(): number {\n if (!this.currentSession) return 0;\n\n const step = this.getCurrentStep();\n const stepProgress: Record<ConvergeStep, number> = {\n init: 0,\n discovery: 20,\n clarification: 50,\n refinement: 70,\n spec_generation: 90,\n complete: 100,\n };\n\n return stepProgress[step] || 0;\n }\n}\n\n/**\n * Create a CONVERGE phase executor\n */\nexport function createConvergeExecutor(\n config?: Partial<ConvergeConfig>\n): ConvergeExecutor {\n return new ConvergeExecutor(config);\n}\n\n/**\n * Run the CONVERGE phase directly (convenience function)\n */\nexport async function runConvergePhase(\n projectPath: string,\n llm: LLMProvider,\n config?: Partial<ConvergeConfig>\n): Promise<{\n success: boolean;\n specification?: Specification;\n specPath?: string;\n error?: string;\n}> {\n const executor = createConvergeExecutor(config);\n\n // Create a minimal phase context\n const context: PhaseContext = {\n projectPath,\n config: {\n quality: {\n minScore: 85,\n minCoverage: 80,\n maxIterations: 10,\n convergenceThreshold: 2,\n },\n timeouts: {\n phaseTimeout: 3600000, // 1 hour\n taskTimeout: 600000, // 10 minutes\n llmTimeout: 120000, // 2 minutes\n },\n },\n state: {\n artifacts: [],\n progress: 0,\n checkpoint: null,\n },\n tools: {} as PhaseContext[\"tools\"], // Not used in CONVERGE\n llm: {\n async chat(messages) {\n // Convert phase Message to provider Message\n const adapted = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n const response = await llm.chat(adapted);\n return {\n content: response.content,\n usage: response.usage,\n };\n },\n async chatWithTools(messages, tools) {\n // Convert phase Message to provider Message\n const adaptedMessages = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n // Convert phase ToolDefinition to provider ToolDefinition\n const adaptedTools = tools.map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: t.parameters as { type: \"object\"; properties: Record<string, unknown>; required?: string[] },\n }));\n const response = await llm.chatWithTools(adaptedMessages, { tools: adaptedTools });\n return {\n content: response.content,\n usage: response.usage,\n toolCalls: response.toolCalls?.map((tc) => ({\n name: tc.name,\n arguments: tc.input,\n })),\n };\n },\n },\n };\n\n const result = await executor.execute(context);\n\n if (result.success) {\n const specArtifact = result.artifacts.find(\n (a) => a.type === \"specification\"\n );\n\n return {\n success: true,\n specPath: specArtifact?.path,\n };\n }\n\n return {\n success: false,\n error: result.error,\n };\n}\n","/**\n * Types for the ORCHESTRATE phase\n *\n * This phase focuses on architecture design, ADR creation, and backlog generation\n */\n\nimport type { Specification } from \"../converge/types.js\";\nimport type { Sprint, Backlog } from \"../../types/task.js\";\n\n/**\n * Architecture document\n */\nexport interface ArchitectureDoc {\n version: string;\n generatedAt: Date;\n\n /** High-level overview */\n overview: ArchitectureOverview;\n\n /** System components */\n components: Component[];\n\n /** Component relationships */\n relationships: Relationship[];\n\n /** Data models */\n dataModels: DataModel[];\n\n /** External integrations */\n integrations: Integration[];\n\n /** Diagrams */\n diagrams: ArchitectureDiagram[];\n}\n\n/**\n * Architecture overview\n */\nexport interface ArchitectureOverview {\n pattern: ArchitecturePattern;\n description: string;\n principles: string[];\n qualityAttributes: QualityAttribute[];\n}\n\n/**\n * Architecture patterns\n */\nexport type ArchitecturePattern =\n | \"layered\"\n | \"hexagonal\"\n | \"clean\"\n | \"microservices\"\n | \"event_driven\"\n | \"cqrs\"\n | \"modular_monolith\"\n | \"serverless\";\n\n/**\n * Quality attribute\n */\nexport interface QualityAttribute {\n name: string;\n description: string;\n priority: \"high\" | \"medium\" | \"low\";\n tradeoffs?: string[];\n}\n\n/**\n * System component\n */\nexport interface Component {\n id: string;\n name: string;\n type: ComponentType;\n description: string;\n responsibilities: string[];\n technology?: string;\n layer?: string;\n dependencies: string[];\n}\n\n/**\n * Component types\n */\nexport type ComponentType =\n | \"service\"\n | \"controller\"\n | \"repository\"\n | \"adapter\"\n | \"port\"\n | \"domain\"\n | \"usecase\"\n | \"utility\"\n | \"external\";\n\n/**\n * Relationship between components\n */\nexport interface Relationship {\n from: string;\n to: string;\n type: RelationshipType;\n description?: string;\n}\n\n/**\n * Relationship types\n */\nexport type RelationshipType =\n | \"uses\"\n | \"implements\"\n | \"extends\"\n | \"depends\"\n | \"calls\"\n | \"publishes\"\n | \"subscribes\";\n\n/**\n * Data model\n */\nexport interface DataModel {\n name: string;\n description: string;\n fields: DataField[];\n relationships: DataRelationship[];\n}\n\n/**\n * Data field\n */\nexport interface DataField {\n name: string;\n type: string;\n required: boolean;\n description?: string;\n}\n\n/**\n * Data relationship\n */\nexport interface DataRelationship {\n type: \"one_to_one\" | \"one_to_many\" | \"many_to_many\";\n target: string;\n description?: string;\n}\n\n/**\n * External integration\n */\nexport interface Integration {\n name: string;\n type: IntegrationType;\n description: string;\n endpoint?: string;\n authentication?: string;\n}\n\n/**\n * Integration types\n */\nexport type IntegrationType =\n | \"rest_api\"\n | \"graphql\"\n | \"grpc\"\n | \"database\"\n | \"message_queue\"\n | \"file_system\"\n | \"external_service\";\n\n/**\n * Architecture diagram\n */\nexport interface ArchitectureDiagram {\n id: string;\n type: DiagramType;\n title: string;\n description: string;\n mermaid: string;\n}\n\n/**\n * Diagram types (C4 model + others)\n */\nexport type DiagramType =\n | \"c4_context\"\n | \"c4_container\"\n | \"c4_component\"\n | \"c4_code\"\n | \"sequence\"\n | \"class\"\n | \"er\"\n | \"flowchart\";\n\n/**\n * Architecture Decision Record\n */\nexport interface ADR {\n id: string;\n number: number;\n title: string;\n date: Date;\n status: ADRStatus;\n context: string;\n decision: string;\n consequences: ADRConsequences;\n alternatives?: Alternative[];\n references?: string[];\n}\n\n/**\n * ADR status\n */\nexport type ADRStatus =\n | \"proposed\"\n | \"accepted\"\n | \"deprecated\"\n | \"superseded\";\n\n/**\n * ADR consequences\n */\nexport interface ADRConsequences {\n positive: string[];\n negative: string[];\n neutral?: string[];\n}\n\n/**\n * Alternative considered in ADR\n */\nexport interface Alternative {\n option: string;\n pros: string[];\n cons: string[];\n reason: string;\n}\n\n/**\n * Standard templates for ADRs\n */\nexport interface ADRTemplate {\n id: string;\n category: string;\n title: string;\n contextTemplate: string;\n decisionTemplate: string;\n}\n\n/**\n * Backlog generation result\n */\nexport interface BacklogResult {\n backlog: Backlog;\n estimatedSprints: number;\n estimatedVelocity: number;\n warnings: string[];\n}\n\n/**\n * Sprint planning configuration\n */\nexport interface SprintConfig {\n /** Sprint duration in days */\n sprintDuration: number;\n\n /** Target velocity (story points per sprint) */\n targetVelocity: number;\n\n /** Maximum stories per sprint */\n maxStoriesPerSprint: number;\n\n /** Include buffer for unexpected work */\n bufferPercentage: number;\n}\n\n/**\n * Default sprint configuration\n */\nexport const DEFAULT_SPRINT_CONFIG: SprintConfig = {\n sprintDuration: 14,\n targetVelocity: 20,\n maxStoriesPerSprint: 8,\n bufferPercentage: 20,\n};\n\n/**\n * Task breakdown strategy\n */\nexport type TaskBreakdownStrategy =\n | \"by_layer\" // Break down by architectural layers\n | \"by_feature\" // Break down by feature/story\n | \"by_component\" // Break down by component\n | \"tdd\" // Test-first approach\n | \"incremental\"; // Small incremental changes\n\n/**\n * ORCHESTRATE phase configuration\n */\nexport interface OrchestrateConfig {\n /** Generate C4 diagrams */\n generateC4Diagrams: boolean;\n\n /** Generate sequence diagrams */\n generateSequenceDiagrams: boolean;\n\n /** Number of ADRs to generate for key decisions */\n maxADRs: number;\n\n /** Sprint configuration */\n sprint: SprintConfig;\n\n /** Task breakdown strategy */\n breakdownStrategy: TaskBreakdownStrategy;\n\n /** Generate deployment docs */\n generateDeploymentDocs: boolean;\n}\n\n/**\n * Default ORCHESTRATE configuration\n */\nexport const DEFAULT_ORCHESTRATE_CONFIG: OrchestrateConfig = {\n generateC4Diagrams: true,\n generateSequenceDiagrams: true,\n maxADRs: 10,\n sprint: DEFAULT_SPRINT_CONFIG,\n breakdownStrategy: \"tdd\",\n generateDeploymentDocs: true,\n};\n\n/**\n * ORCHESTRATE phase output\n */\nexport interface OrchestrateOutput {\n /** Generated architecture document */\n architecture: ArchitectureDoc;\n\n /** Generated ADRs */\n adrs: ADR[];\n\n /** Generated backlog */\n backlog: BacklogResult;\n\n /** First sprint ready to execute */\n firstSprint: Sprint;\n\n /** File paths of generated artifacts */\n artifactPaths: {\n architecture: string;\n adrs: string[];\n backlog: string;\n diagrams: string[];\n };\n}\n\n/**\n * Input to ORCHESTRATE phase\n */\nexport interface OrchestrateInput {\n /** Specification from CONVERGE phase */\n specification: Specification;\n\n /** Project path */\n projectPath: string;\n\n /** Configuration */\n config: OrchestrateConfig;\n}\n","/**\n * Prompts for the ORCHESTRATE phase\n *\n * These prompts guide the LLM in architecture design, ADR creation, and backlog generation\n */\n\n/**\n * System prompt for the architect agent\n */\nexport const ARCHITECT_SYSTEM_PROMPT = `You are a senior software architect with expertise in designing scalable, maintainable systems.\n\nYour responsibilities:\n1. Design clear, modular architectures\n2. Document key decisions with ADRs\n3. Create actionable development plans\n4. Consider quality attributes (performance, security, maintainability)\n5. Apply appropriate design patterns\n\nGuidelines:\n- Favor simplicity over complexity\n- Design for change and extensibility\n- Consider trade-offs explicitly\n- Document assumptions and risks\n- Use industry-standard patterns when appropriate\n\nYou produce structured, well-documented architectural artifacts.`;\n\n/**\n * Prompt for generating architecture\n */\nexport const GENERATE_ARCHITECTURE_PROMPT = `Based on the project specification, design a comprehensive software architecture.\n\nProject Specification:\n{{specification}}\n\nTechnology Stack:\n{{techStack}}\n\nRequirements Summary:\n- Functional: {{functionalCount}} requirements\n- Non-Functional: {{nonFunctionalCount}} requirements\n- Constraints: {{constraintCount}} constraints\n\nGenerate an architecture that:\n1. Addresses all functional requirements\n2. Satisfies non-functional requirements\n3. Respects technical constraints\n4. Is appropriately complex for the project scope\n\nRespond in JSON format:\n{\n \"overview\": {\n \"pattern\": \"layered|hexagonal|clean|microservices|event_driven|cqrs|modular_monolith|serverless\",\n \"description\": \"string\",\n \"principles\": [\"string\"],\n \"qualityAttributes\": [\n {\n \"name\": \"string\",\n \"description\": \"string\",\n \"priority\": \"high|medium|low\",\n \"tradeoffs\": [\"string\"]\n }\n ]\n },\n \"components\": [\n {\n \"id\": \"string\",\n \"name\": \"string\",\n \"type\": \"service|controller|repository|adapter|port|domain|usecase|utility|external\",\n \"description\": \"string\",\n \"responsibilities\": [\"string\"],\n \"technology\": \"string\",\n \"layer\": \"string\",\n \"dependencies\": [\"component_id\"]\n }\n ],\n \"relationships\": [\n {\n \"from\": \"component_id\",\n \"to\": \"component_id\",\n \"type\": \"uses|implements|extends|depends|calls|publishes|subscribes\",\n \"description\": \"string\"\n }\n ],\n \"dataModels\": [\n {\n \"name\": \"string\",\n \"description\": \"string\",\n \"fields\": [\n {\n \"name\": \"string\",\n \"type\": \"string\",\n \"required\": true,\n \"description\": \"string\"\n }\n ],\n \"relationships\": [\n {\n \"type\": \"one_to_one|one_to_many|many_to_many\",\n \"target\": \"model_name\",\n \"description\": \"string\"\n }\n ]\n }\n ],\n \"integrations\": [\n {\n \"name\": \"string\",\n \"type\": \"rest_api|graphql|grpc|database|message_queue|file_system|external_service\",\n \"description\": \"string\",\n \"endpoint\": \"string\",\n \"authentication\": \"string\"\n }\n ],\n \"reasoning\": \"string\"\n}`;\n\n/**\n * Prompt for generating C4 diagrams\n */\nexport const GENERATE_C4_DIAGRAMS_PROMPT = `Generate C4 model diagrams for the architecture.\n\nArchitecture Overview:\n{{architecture}}\n\nGenerate Mermaid diagrams for:\n1. Context diagram (system and external actors)\n2. Container diagram (deployable units)\n3. Component diagram (key components within containers)\n\nRespond in JSON format:\n{\n \"diagrams\": [\n {\n \"id\": \"c4_context\",\n \"type\": \"c4_context\",\n \"title\": \"System Context Diagram\",\n \"description\": \"string\",\n \"mermaid\": \"C4Context\\\\n...\"\n },\n {\n \"id\": \"c4_container\",\n \"type\": \"c4_container\",\n \"title\": \"Container Diagram\",\n \"description\": \"string\",\n \"mermaid\": \"C4Container\\\\n...\"\n },\n {\n \"id\": \"c4_component\",\n \"type\": \"c4_component\",\n \"title\": \"Component Diagram\",\n \"description\": \"string\",\n \"mermaid\": \"C4Component\\\\n...\"\n }\n ]\n}`;\n\n/**\n * Prompt for generating sequence diagrams\n */\nexport const GENERATE_SEQUENCE_DIAGRAMS_PROMPT = `Generate sequence diagrams for key user flows.\n\nArchitecture:\n{{architecture}}\n\nKey Functional Requirements:\n{{functionalRequirements}}\n\nGenerate sequence diagrams for the 3-5 most important user flows.\n\nRespond in JSON format:\n{\n \"diagrams\": [\n {\n \"id\": \"string\",\n \"type\": \"sequence\",\n \"title\": \"string\",\n \"description\": \"string\",\n \"mermaid\": \"sequenceDiagram\\\\n...\"\n }\n ]\n}`;\n\n/**\n * Prompt for generating ADRs\n */\nexport const GENERATE_ADRS_PROMPT = `Generate Architecture Decision Records for key decisions.\n\nArchitecture:\n{{architecture}}\n\nTechnology Stack:\n{{techStack}}\n\nIdentify the {{maxADRs}} most important architectural decisions and document them as ADRs.\n\nInclude ADRs for:\n1. Core architecture pattern choice\n2. Major technology selections\n3. Security approach\n4. Data storage strategy\n5. Integration patterns\n6. Testing strategy\n7. Deployment approach\n\nRespond in JSON format:\n{\n \"adrs\": [\n {\n \"number\": 1,\n \"title\": \"string\",\n \"status\": \"accepted\",\n \"context\": \"Detailed context explaining the situation and problem\",\n \"decision\": \"Clear statement of the decision made\",\n \"consequences\": {\n \"positive\": [\"string\"],\n \"negative\": [\"string\"],\n \"neutral\": [\"string\"]\n },\n \"alternatives\": [\n {\n \"option\": \"string\",\n \"pros\": [\"string\"],\n \"cons\": [\"string\"],\n \"reason\": \"Why not chosen\"\n }\n ],\n \"references\": [\"string\"]\n }\n ]\n}`;\n\n/**\n * Prompt for generating backlog\n */\nexport const GENERATE_BACKLOG_PROMPT = `Create a complete development backlog from the architecture and requirements.\n\nArchitecture:\n{{architecture}}\n\nRequirements:\n{{requirements}}\n\nBreakdown Strategy: {{breakdownStrategy}}\n\nGenerate a backlog with:\n1. Epics (major features or components)\n2. User Stories (deliverable increments)\n3. Tasks (atomic work items)\n\nFollow these guidelines:\n- Each task should be completable in 1-4 hours\n- Include tests for each feature task\n- Order by dependency and priority\n- Include infrastructure/setup tasks\n- Include documentation tasks\n\nRespond in JSON format:\n{\n \"epics\": [\n {\n \"id\": \"epic_001\",\n \"title\": \"string\",\n \"description\": \"string\",\n \"priority\": 1-5,\n \"dependencies\": [\"epic_id\"],\n \"status\": \"planned\"\n }\n ],\n \"stories\": [\n {\n \"id\": \"story_001\",\n \"epicId\": \"epic_001\",\n \"title\": \"string\",\n \"asA\": \"role\",\n \"iWant\": \"feature\",\n \"soThat\": \"benefit\",\n \"acceptanceCriteria\": [\"string\"],\n \"points\": 1|2|3|5|8|13,\n \"status\": \"backlog\"\n }\n ],\n \"tasks\": [\n {\n \"id\": \"task_001\",\n \"storyId\": \"story_001\",\n \"title\": \"string\",\n \"description\": \"string\",\n \"type\": \"feature|test|refactor|docs|infra|config\",\n \"files\": [\"expected/file/paths\"],\n \"dependencies\": [\"task_id\"],\n \"estimatedComplexity\": \"trivial|simple|moderate|complex\",\n \"status\": \"pending\"\n }\n ],\n \"estimatedSprints\": number,\n \"warnings\": [\"string\"]\n}`;\n\n/**\n * Prompt for sprint planning\n */\nexport const PLAN_SPRINT_PROMPT = `Plan the first sprint from the backlog.\n\nBacklog Summary:\n- Epics: {{epicCount}}\n- Stories: {{storyCount}}\n- Tasks: {{taskCount}}\n\nSprint Configuration:\n- Duration: {{sprintDuration}} days\n- Target Velocity: {{targetVelocity}} points\n- Max Stories: {{maxStoriesPerSprint}}\n- Buffer: {{bufferPercentage}}%\n\nStories Available:\n{{availableStories}}\n\nSelect stories for Sprint 1 following these rules:\n1. Prioritize foundation/infrastructure stories\n2. Respect dependencies\n3. Stay within velocity target (with buffer)\n4. Ensure a coherent sprint goal\n\nRespond in JSON format:\n{\n \"sprint\": {\n \"id\": \"sprint_001\",\n \"name\": \"Sprint 1: Foundation\",\n \"goal\": \"string\",\n \"stories\": [\"story_id\"],\n \"plannedPoints\": number,\n \"status\": \"planning\"\n },\n \"reasoning\": \"string\"\n}`;\n\n/**\n * Prompt for task estimation\n */\nexport const ESTIMATE_TASK_PROMPT = `Estimate the complexity of the following task.\n\nTask: {{taskTitle}}\nDescription: {{taskDescription}}\nType: {{taskType}}\nFiles: {{taskFiles}}\n\nConsider:\n1. Lines of code expected\n2. External dependencies\n3. Testing requirements\n4. Edge cases\n5. Integration complexity\n\nRespond in JSON format:\n{\n \"complexity\": \"trivial|simple|moderate|complex\",\n \"reasoning\": \"string\",\n \"estimatedLines\": number,\n \"testingEffort\": \"minimal|moderate|extensive\",\n \"risks\": [\"string\"]\n}`;\n\n/**\n * Helper to fill prompt templates\n */\nexport function fillPrompt(\n template: string,\n variables: Record<string, string | number | unknown>\n): string {\n let result = template;\n\n for (const [key, value] of Object.entries(variables)) {\n const placeholder = `{{${key}}}`;\n const stringValue =\n typeof value === \"string\"\n ? value\n : typeof value === \"number\"\n ? String(value)\n : JSON.stringify(value, null, 2);\n\n result = result.replaceAll(placeholder, stringValue);\n }\n\n return result;\n}\n","/**\n * Parsers for architecture data from LLM responses\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type {\n ArchitectureOverview,\n Component,\n Relationship,\n DataModel,\n Integration,\n ArchitecturePattern,\n} from \"./types.js\";\n\n/**\n * Raw overview data from LLM\n */\nexport interface RawOverview {\n pattern?: string;\n description?: string;\n principles?: string[];\n qualityAttributes?: Array<{\n name?: string;\n description?: string;\n priority?: string;\n tradeoffs?: string[];\n }>;\n}\n\n/**\n * Raw component data from LLM\n */\nexport interface RawComponent {\n id?: string;\n name?: string;\n type?: string;\n description?: string;\n responsibilities?: string[];\n technology?: string;\n layer?: string;\n dependencies?: string[];\n}\n\n/**\n * Raw relationship data from LLM\n */\nexport interface RawRelationship {\n from?: string;\n to?: string;\n type?: string;\n description?: string;\n}\n\n/**\n * Raw data model data from LLM\n */\nexport interface RawDataModel {\n name?: string;\n description?: string;\n fields?: Array<{\n name?: string;\n type?: string;\n required?: boolean;\n description?: string;\n }>;\n relationships?: Array<{\n type?: string;\n target?: string;\n description?: string;\n }>;\n}\n\n/**\n * Raw integration data from LLM\n */\nexport interface RawIntegration {\n name?: string;\n type?: string;\n description?: string;\n endpoint?: string;\n authentication?: string;\n}\n\n/**\n * Parse overview from raw data\n */\nexport function parseOverview(data?: RawOverview): ArchitectureOverview {\n return {\n pattern: (data?.pattern as ArchitecturePattern) || \"layered\",\n description: data?.description || \"System architecture\",\n principles: data?.principles || [],\n qualityAttributes: (data?.qualityAttributes || []).map((qa) => ({\n name: qa.name || \"\",\n description: qa.description || \"\",\n priority: (qa.priority as \"high\" | \"medium\" | \"low\") || \"medium\",\n tradeoffs: qa.tradeoffs,\n })),\n };\n}\n\n/**\n * Parse components from raw data\n */\nexport function parseComponents(data: RawComponent[]): Component[] {\n return data.map((c) => ({\n id: c.id || randomUUID(),\n name: c.name || \"Component\",\n type: (c.type as Component[\"type\"]) || \"service\",\n description: c.description || \"\",\n responsibilities: c.responsibilities || [],\n technology: c.technology,\n layer: c.layer,\n dependencies: c.dependencies || [],\n }));\n}\n\n/**\n * Parse relationships from raw data\n */\nexport function parseRelationships(data: RawRelationship[]): Relationship[] {\n return data.map((r) => ({\n from: r.from || \"\",\n to: r.to || \"\",\n type: (r.type as Relationship[\"type\"]) || \"uses\",\n description: r.description,\n }));\n}\n\n/**\n * Parse data models from raw data\n */\nexport function parseDataModels(data: RawDataModel[]): DataModel[] {\n return data.map((dm) => ({\n name: dm.name || \"Model\",\n description: dm.description || \"\",\n fields: (dm.fields || []).map((f) => ({\n name: f.name || \"\",\n type: f.type || \"string\",\n required: f.required ?? true,\n description: f.description,\n })),\n relationships: (dm.relationships || []).map((r) => ({\n type: (r.type as DataModel[\"relationships\"][0][\"type\"]) || \"one_to_many\",\n target: r.target || \"\",\n description: r.description,\n })),\n }));\n}\n\n/**\n * Parse integrations from raw data\n */\nexport function parseIntegrations(data: RawIntegration[]): Integration[] {\n return data.map((i) => ({\n name: i.name || \"Integration\",\n type: (i.type as Integration[\"type\"]) || \"rest_api\",\n description: i.description || \"\",\n endpoint: i.endpoint,\n authentication: i.authentication,\n }));\n}\n","/**\n * Markdown generation for architecture documents\n */\n\nimport type { ArchitectureDoc } from \"./types.js\";\n\n/**\n * Generate architecture markdown document\n */\nexport function generateArchitectureMarkdown(doc: ArchitectureDoc): string {\n const sections: string[] = [];\n\n // Header\n sections.push(\"# Architecture Document\");\n sections.push(\"\");\n sections.push(`> Generated: ${doc.generatedAt.toISOString()} | Version: ${doc.version}`);\n sections.push(\"\");\n\n // Overview\n sections.push(\"## Overview\");\n sections.push(\"\");\n sections.push(`**Pattern:** ${doc.overview.pattern}`);\n sections.push(\"\");\n sections.push(doc.overview.description);\n sections.push(\"\");\n\n // Principles\n if (doc.overview.principles.length > 0) {\n sections.push(\"### Design Principles\");\n sections.push(\"\");\n for (const principle of doc.overview.principles) {\n sections.push(`- ${principle}`);\n }\n sections.push(\"\");\n }\n\n // Quality Attributes\n if (doc.overview.qualityAttributes.length > 0) {\n sections.push(\"### Quality Attributes\");\n sections.push(\"\");\n sections.push(\"| Attribute | Priority | Description |\");\n sections.push(\"|-----------|----------|-------------|\");\n for (const qa of doc.overview.qualityAttributes) {\n sections.push(`| ${qa.name} | ${qa.priority} | ${qa.description} |`);\n }\n sections.push(\"\");\n }\n\n // Components\n sections.push(\"## Components\");\n sections.push(\"\");\n for (const component of doc.components) {\n sections.push(`### ${component.name}`);\n sections.push(\"\");\n sections.push(`**Type:** ${component.type}`);\n if (component.layer) sections.push(`**Layer:** ${component.layer}`);\n if (component.technology) sections.push(`**Technology:** ${component.technology}`);\n sections.push(\"\");\n sections.push(component.description);\n sections.push(\"\");\n if (component.responsibilities.length > 0) {\n sections.push(\"**Responsibilities:**\");\n for (const resp of component.responsibilities) {\n sections.push(`- ${resp}`);\n }\n sections.push(\"\");\n }\n }\n\n // Data Models\n if (doc.dataModels.length > 0) {\n sections.push(\"## Data Models\");\n sections.push(\"\");\n for (const model of doc.dataModels) {\n sections.push(`### ${model.name}`);\n sections.push(\"\");\n sections.push(model.description);\n sections.push(\"\");\n sections.push(\"| Field | Type | Required |\");\n sections.push(\"|-------|------|----------|\");\n for (const field of model.fields) {\n sections.push(`| ${field.name} | ${field.type} | ${field.required ? \"Yes\" : \"No\"} |`);\n }\n sections.push(\"\");\n }\n }\n\n // Integrations\n if (doc.integrations.length > 0) {\n sections.push(\"## Integrations\");\n sections.push(\"\");\n for (const integration of doc.integrations) {\n sections.push(`### ${integration.name}`);\n sections.push(\"\");\n sections.push(`**Type:** ${integration.type}`);\n sections.push(integration.description);\n sections.push(\"\");\n }\n }\n\n // Diagrams\n if (doc.diagrams.length > 0) {\n sections.push(\"## Diagrams\");\n sections.push(\"\");\n for (const diagram of doc.diagrams) {\n sections.push(`### ${diagram.title}`);\n sections.push(\"\");\n sections.push(diagram.description);\n sections.push(\"\");\n sections.push(\"```mermaid\");\n sections.push(diagram.mermaid);\n sections.push(\"```\");\n sections.push(\"\");\n }\n }\n\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(\"*Generated by Corbat-Coco*\");\n\n return sections.join(\"\\n\");\n}\n","/**\n * Architecture Generator for the ORCHESTRATE phase\n *\n * Generates architecture documents, components, and diagrams\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type {\n ArchitectureDoc,\n ArchitectureDiagram,\n OrchestrateConfig,\n} from \"./types.js\";\nimport type { Specification } from \"../converge/types.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\nimport {\n ARCHITECT_SYSTEM_PROMPT,\n GENERATE_ARCHITECTURE_PROMPT,\n GENERATE_C4_DIAGRAMS_PROMPT,\n GENERATE_SEQUENCE_DIAGRAMS_PROMPT,\n fillPrompt,\n} from \"./prompts.js\";\nimport { PhaseError } from \"../../utils/errors.js\";\n\n// Import parsers\nimport {\n parseOverview,\n parseComponents,\n parseRelationships,\n parseDataModels,\n parseIntegrations,\n} from \"./architecture-parsers.js\";\n\n// Re-export markdown generator for backwards compatibility\nexport { generateArchitectureMarkdown } from \"./architecture-markdown.js\";\n\n/**\n * Architecture Generator\n */\nexport class ArchitectureGenerator {\n private llm: LLMProvider;\n private config: OrchestrateConfig;\n\n constructor(llm: LLMProvider, config: OrchestrateConfig) {\n this.llm = llm;\n this.config = config;\n }\n\n /**\n * Generate architecture from specification\n */\n async generate(specification: Specification): Promise<ArchitectureDoc> {\n const baseArchitecture = await this.generateBaseArchitecture(specification);\n\n const diagrams: ArchitectureDiagram[] = [];\n\n if (this.config.generateC4Diagrams) {\n const c4Diagrams = await this.generateC4Diagrams(baseArchitecture);\n diagrams.push(...c4Diagrams);\n }\n\n if (this.config.generateSequenceDiagrams) {\n const seqDiagrams = await this.generateSequenceDiagrams(\n baseArchitecture,\n specification\n );\n diagrams.push(...seqDiagrams);\n }\n\n return {\n ...baseArchitecture,\n diagrams,\n };\n }\n\n /**\n * Generate base architecture\n */\n private async generateBaseArchitecture(\n specification: Specification\n ): Promise<ArchitectureDoc> {\n const prompt = fillPrompt(GENERATE_ARCHITECTURE_PROMPT, {\n specification: JSON.stringify(specification.overview),\n techStack: JSON.stringify(specification.technical.stack),\n functionalCount: specification.requirements.functional.length,\n nonFunctionalCount: specification.requirements.nonFunctional.length,\n constraintCount: specification.requirements.constraints.length,\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: ARCHITECT_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n try {\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error(\"No JSON found in response\");\n }\n\n const parsed = JSON.parse(jsonMatch[0]);\n\n return {\n version: \"1.0.0\",\n generatedAt: new Date(),\n overview: parseOverview(parsed.overview),\n components: parseComponents(parsed.components || []),\n relationships: parseRelationships(parsed.relationships || []),\n dataModels: parseDataModels(parsed.dataModels || []),\n integrations: parseIntegrations(parsed.integrations || []),\n diagrams: [],\n };\n } catch {\n throw new PhaseError(\"Failed to generate architecture\", { phase: \"orchestrate\" });\n }\n }\n\n /**\n * Generate C4 diagrams\n */\n private async generateC4Diagrams(\n architecture: ArchitectureDoc\n ): Promise<ArchitectureDiagram[]> {\n const prompt = fillPrompt(GENERATE_C4_DIAGRAMS_PROMPT, {\n architecture: JSON.stringify({\n overview: architecture.overview,\n components: architecture.components,\n relationships: architecture.relationships,\n }),\n });\n\n try {\n const response = await this.llm.chat([\n { role: \"system\", content: ARCHITECT_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n return this.generateFallbackC4Diagrams(architecture);\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n diagrams?: Array<{\n id?: string;\n type?: string;\n title?: string;\n description?: string;\n mermaid?: string;\n }>;\n };\n\n return (parsed.diagrams || []).map((d) => ({\n id: d.id || randomUUID(),\n type: (d.type as ArchitectureDiagram[\"type\"]) || \"c4_context\",\n title: d.title || \"Diagram\",\n description: d.description || \"\",\n mermaid: d.mermaid || \"\",\n }));\n } catch {\n return this.generateFallbackC4Diagrams(architecture);\n }\n }\n\n /**\n * Generate sequence diagrams\n */\n private async generateSequenceDiagrams(\n architecture: ArchitectureDoc,\n specification: Specification\n ): Promise<ArchitectureDiagram[]> {\n const prompt = fillPrompt(GENERATE_SEQUENCE_DIAGRAMS_PROMPT, {\n architecture: JSON.stringify({\n overview: architecture.overview,\n components: architecture.components,\n }),\n functionalRequirements: JSON.stringify(\n specification.requirements.functional.slice(0, 5)\n ),\n });\n\n try {\n const response = await this.llm.chat([\n { role: \"system\", content: ARCHITECT_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n return [];\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n diagrams?: Array<{\n id?: string;\n type?: string;\n title?: string;\n description?: string;\n mermaid?: string;\n }>;\n };\n\n return (parsed.diagrams || []).map((d) => ({\n id: d.id || randomUUID(),\n type: \"sequence\" as const,\n title: d.title || \"Sequence Diagram\",\n description: d.description || \"\",\n mermaid: d.mermaid || \"\",\n }));\n } catch {\n return [];\n }\n }\n\n /**\n * Generate fallback C4 diagrams if LLM fails\n */\n private generateFallbackC4Diagrams(\n architecture: ArchitectureDoc\n ): ArchitectureDiagram[] {\n const diagrams: ArchitectureDiagram[] = [];\n\n // Simple context diagram\n let contextMermaid = \"C4Context\\n\";\n contextMermaid += ` title System Context Diagram\\n`;\n contextMermaid += ` Person(user, \"User\", \"Primary system user\")\\n`;\n contextMermaid += ` System(system, \"${architecture.overview.description.substring(0, 30)}...\", \"The system\")\\n`;\n\n for (const integration of architecture.integrations) {\n contextMermaid += ` System_Ext(${integration.name.replace(/\\s/g, \"_\")}, \"${integration.name}\", \"${integration.type}\")\\n`;\n }\n\n contextMermaid += ` Rel(user, system, \"Uses\")\\n`;\n\n diagrams.push({\n id: \"c4_context\",\n type: \"c4_context\",\n title: \"System Context Diagram\",\n description: \"High-level view of the system and its environment\",\n mermaid: contextMermaid,\n });\n\n // Simple container diagram\n let containerMermaid = \"C4Container\\n\";\n containerMermaid += ` title Container Diagram\\n`;\n\n const layers = new Set(architecture.components.map((c) => c.layer).filter(Boolean));\n for (const layer of layers) {\n containerMermaid += ` Container_Boundary(${layer?.replace(/\\s/g, \"_\")}, \"${layer}\") {\\n`;\n for (const component of architecture.components.filter((c) => c.layer === layer)) {\n containerMermaid += ` Container(${component.id}, \"${component.name}\", \"${component.technology || \"\"}\")\\n`;\n }\n containerMermaid += ` }\\n`;\n }\n\n diagrams.push({\n id: \"c4_container\",\n type: \"c4_container\",\n title: \"Container Diagram\",\n description: \"Shows the major containers/deployable units\",\n mermaid: containerMermaid,\n });\n\n return diagrams;\n }\n}\n\n/**\n * Create an architecture generator\n */\nexport function createArchitectureGenerator(\n llm: LLMProvider,\n config: OrchestrateConfig\n): ArchitectureGenerator {\n return new ArchitectureGenerator(llm, config);\n}\n","/**\n * ADR Generator for the ORCHESTRATE phase\n *\n * Generates Architecture Decision Records\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type {\n ADR,\n ADRStatus,\n ArchitectureDoc,\n OrchestrateConfig,\n} from \"./types.js\";\nimport type { Specification } from \"../converge/types.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\nimport { ARCHITECT_SYSTEM_PROMPT, GENERATE_ADRS_PROMPT, fillPrompt } from \"./prompts.js\";\nimport { PhaseError } from \"../../utils/errors.js\";\n\n/**\n * ADR Generator\n */\nexport class ADRGenerator {\n private llm: LLMProvider;\n private config: OrchestrateConfig;\n\n constructor(llm: LLMProvider, config: OrchestrateConfig) {\n this.llm = llm;\n this.config = config;\n }\n\n /**\n * Generate ADRs from architecture and specification\n */\n async generate(\n architecture: ArchitectureDoc,\n specification: Specification\n ): Promise<ADR[]> {\n const prompt = fillPrompt(GENERATE_ADRS_PROMPT, {\n architecture: JSON.stringify({\n overview: architecture.overview,\n components: architecture.components.map((c) => ({\n name: c.name,\n type: c.type,\n technology: c.technology,\n })),\n }),\n techStack: JSON.stringify(specification.technical.stack),\n maxADRs: this.config.maxADRs,\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: ARCHITECT_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n try {\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error(\"No JSON found in response\");\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n adrs?: Array<{\n number?: number;\n title?: string;\n status?: string;\n context?: string;\n decision?: string;\n consequences?: {\n positive?: string[];\n negative?: string[];\n neutral?: string[];\n };\n alternatives?: Array<{\n option?: string;\n pros?: string[];\n cons?: string[];\n reason?: string;\n }>;\n references?: string[];\n }>;\n };\n\n return (parsed.adrs || []).map((adr, index) => this.parseADR(adr, index));\n } catch {\n throw new PhaseError(\"Failed to generate ADRs\", {\n phase: \"orchestrate\",\n });\n }\n }\n\n /**\n * Parse a single ADR from LLM response\n */\n private parseADR(\n data: {\n number?: number;\n title?: string;\n status?: string;\n context?: string;\n decision?: string;\n consequences?: {\n positive?: string[];\n negative?: string[];\n neutral?: string[];\n };\n alternatives?: Array<{\n option?: string;\n pros?: string[];\n cons?: string[];\n reason?: string;\n }>;\n references?: string[];\n },\n index: number\n ): ADR {\n return {\n id: randomUUID(),\n number: data.number || index + 1,\n title: data.title || `Decision ${index + 1}`,\n date: new Date(),\n status: (data.status as ADRStatus) || \"accepted\",\n context: data.context || \"\",\n decision: data.decision || \"\",\n consequences: {\n positive: data.consequences?.positive || [],\n negative: data.consequences?.negative || [],\n neutral: data.consequences?.neutral,\n },\n alternatives: (data.alternatives || []).map((alt) => ({\n option: alt.option || \"\",\n pros: alt.pros || [],\n cons: alt.cons || [],\n reason: alt.reason || \"\",\n })),\n references: data.references,\n };\n }\n}\n\n/**\n * Generate ADR markdown document\n */\nexport function generateADRMarkdown(adr: ADR): string {\n const sections: string[] = [];\n\n // Header\n const paddedNumber = String(adr.number).padStart(3, \"0\");\n sections.push(`# ADR ${paddedNumber}: ${adr.title}`);\n sections.push(\"\");\n sections.push(`**Date:** ${adr.date.toISOString().split(\"T\")[0]}`);\n sections.push(`**Status:** ${adr.status}`);\n sections.push(\"\");\n\n // Context\n sections.push(\"## Context\");\n sections.push(\"\");\n sections.push(adr.context);\n sections.push(\"\");\n\n // Decision\n sections.push(\"## Decision\");\n sections.push(\"\");\n sections.push(adr.decision);\n sections.push(\"\");\n\n // Consequences\n sections.push(\"## Consequences\");\n sections.push(\"\");\n\n if (adr.consequences.positive.length > 0) {\n sections.push(\"### Positive\");\n sections.push(\"\");\n for (const consequence of adr.consequences.positive) {\n sections.push(`- ✅ ${consequence}`);\n }\n sections.push(\"\");\n }\n\n if (adr.consequences.negative.length > 0) {\n sections.push(\"### Negative\");\n sections.push(\"\");\n for (const consequence of adr.consequences.negative) {\n sections.push(`- ⚠️ ${consequence}`);\n }\n sections.push(\"\");\n }\n\n if (adr.consequences.neutral && adr.consequences.neutral.length > 0) {\n sections.push(\"### Neutral\");\n sections.push(\"\");\n for (const consequence of adr.consequences.neutral) {\n sections.push(`- ${consequence}`);\n }\n sections.push(\"\");\n }\n\n // Alternatives\n if (adr.alternatives && adr.alternatives.length > 0) {\n sections.push(\"## Alternatives Considered\");\n sections.push(\"\");\n\n for (const alt of adr.alternatives) {\n sections.push(`### ${alt.option}`);\n sections.push(\"\");\n\n if (alt.pros.length > 0) {\n sections.push(\"**Pros:**\");\n for (const pro of alt.pros) {\n sections.push(`- ${pro}`);\n }\n sections.push(\"\");\n }\n\n if (alt.cons.length > 0) {\n sections.push(\"**Cons:**\");\n for (const con of alt.cons) {\n sections.push(`- ${con}`);\n }\n sections.push(\"\");\n }\n\n sections.push(`**Why not chosen:** ${alt.reason}`);\n sections.push(\"\");\n }\n }\n\n // References\n if (adr.references && adr.references.length > 0) {\n sections.push(\"## References\");\n sections.push(\"\");\n for (const ref of adr.references) {\n sections.push(`- ${ref}`);\n }\n sections.push(\"\");\n }\n\n return sections.join(\"\\n\");\n}\n\n/**\n * Generate ADR index markdown\n */\nexport function generateADRIndexMarkdown(adrs: ADR[]): string {\n const sections: string[] = [];\n\n sections.push(\"# Architecture Decision Records\");\n sections.push(\"\");\n sections.push(\"This directory contains all Architecture Decision Records (ADRs) for this project.\");\n sections.push(\"\");\n sections.push(\"## Index\");\n sections.push(\"\");\n sections.push(\"| # | Title | Status | Date |\");\n sections.push(\"|---|-------|--------|------|\");\n\n for (const adr of adrs) {\n const paddedNumber = String(adr.number).padStart(3, \"0\");\n const filename = `${paddedNumber}-${slugify(adr.title)}.md`;\n const dateStr = adr.date.toISOString().split(\"T\")[0];\n sections.push(\n `| ${adr.number} | [${adr.title}](./${filename}) | ${adr.status} | ${dateStr} |`\n );\n }\n\n sections.push(\"\");\n sections.push(\"## About ADRs\");\n sections.push(\"\");\n sections.push(\"ADRs are short documents that capture important architectural decisions.\");\n sections.push(\"Each ADR describes:\");\n sections.push(\"- The context and problem being addressed\");\n sections.push(\"- The decision made\");\n sections.push(\"- The consequences (positive and negative)\");\n sections.push(\"- Alternatives considered\");\n sections.push(\"\");\n sections.push(\"For more information, see [ADR GitHub](https://adr.github.io/).\");\n\n return sections.join(\"\\n\");\n}\n\n/**\n * Get ADR filename from number and title\n */\nexport function getADRFilename(adr: ADR): string {\n const paddedNumber = String(adr.number).padStart(3, \"0\");\n return `${paddedNumber}-${slugify(adr.title)}.md`;\n}\n\n/**\n * Convert string to URL-friendly slug\n */\nfunction slugify(str: string): string {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\n/**\n * Create an ADR generator\n */\nexport function createADRGenerator(\n llm: LLMProvider,\n config: OrchestrateConfig\n): ADRGenerator {\n return new ADRGenerator(llm, config);\n}\n\n/**\n * Standard ADR templates for common decisions\n */\nexport const ADR_TEMPLATES = {\n architecture: {\n title: \"Core Architecture Pattern\",\n contextTemplate:\n \"We need to choose an architectural pattern that supports our requirements for {{requirements}}.\",\n decisionTemplate:\n \"We will use {{pattern}} architecture because {{rationale}}.\",\n },\n language: {\n title: \"Programming Language\",\n contextTemplate:\n \"We need to choose a programming language for {{component}}.\",\n decisionTemplate:\n \"We will use {{language}} because {{rationale}}.\",\n },\n database: {\n title: \"Database Selection\",\n contextTemplate:\n \"We need to choose a database system for {{dataType}} data.\",\n decisionTemplate:\n \"We will use {{database}} because {{rationale}}.\",\n },\n testing: {\n title: \"Testing Strategy\",\n contextTemplate:\n \"We need to establish a testing strategy to ensure quality.\",\n decisionTemplate:\n \"We will use {{testFramework}} with {{approach}} because {{rationale}}.\",\n },\n deployment: {\n title: \"Deployment Strategy\",\n contextTemplate:\n \"We need to determine how the application will be deployed.\",\n decisionTemplate:\n \"We will deploy using {{strategy}} because {{rationale}}.\",\n },\n};\n","/**\n * Backlog Generator for the ORCHESTRATE phase\n *\n * Generates epics, stories, tasks, and sprint plans\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport type {\n BacklogResult,\n OrchestrateConfig,\n ArchitectureDoc,\n} from \"./types.js\";\nimport type {\n Backlog,\n Epic,\n Story,\n Task,\n Sprint,\n TaskType,\n TaskComplexity,\n} from \"../../types/task.js\";\nimport type { Specification } from \"../converge/types.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\nimport {\n ARCHITECT_SYSTEM_PROMPT,\n GENERATE_BACKLOG_PROMPT,\n PLAN_SPRINT_PROMPT,\n fillPrompt,\n} from \"./prompts.js\";\nimport { PhaseError } from \"../../utils/errors.js\";\n\n/**\n * Backlog Generator\n */\nexport class BacklogGenerator {\n private llm: LLMProvider;\n private config: OrchestrateConfig;\n\n constructor(llm: LLMProvider, config: OrchestrateConfig) {\n this.llm = llm;\n this.config = config;\n }\n\n /**\n * Generate complete backlog from architecture and specification\n */\n async generate(\n architecture: ArchitectureDoc,\n specification: Specification\n ): Promise<BacklogResult> {\n const prompt = fillPrompt(GENERATE_BACKLOG_PROMPT, {\n architecture: JSON.stringify({\n pattern: architecture.overview.pattern,\n components: architecture.components.map((c) => c.name),\n dataModels: architecture.dataModels.map((d) => d.name),\n }),\n requirements: JSON.stringify({\n functional: specification.requirements.functional.map((r) => ({\n title: r.title,\n priority: r.priority,\n })),\n nonFunctional: specification.requirements.nonFunctional.map((r) => r.title),\n }),\n breakdownStrategy: this.config.breakdownStrategy,\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: ARCHITECT_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n try {\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) {\n throw new Error(\"No JSON found in response\");\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n epics?: Array<{\n id?: string;\n title?: string;\n description?: string;\n priority?: number;\n dependencies?: string[];\n status?: string;\n }>;\n stories?: Array<{\n id?: string;\n epicId?: string;\n title?: string;\n asA?: string;\n iWant?: string;\n soThat?: string;\n acceptanceCriteria?: string[];\n points?: number;\n status?: string;\n }>;\n tasks?: Array<{\n id?: string;\n storyId?: string;\n title?: string;\n description?: string;\n type?: string;\n files?: string[];\n dependencies?: string[];\n estimatedComplexity?: string;\n status?: string;\n }>;\n estimatedSprints?: number;\n warnings?: string[];\n };\n\n const epics = this.parseEpics(parsed.epics || []);\n const stories = this.parseStories(parsed.stories || []);\n const tasks = this.parseTasks(parsed.tasks || []);\n\n // Calculate velocity based on configuration\n const totalPoints = stories.reduce((sum, s) => sum + s.points, 0);\n const estimatedSprints =\n parsed.estimatedSprints ||\n Math.ceil(totalPoints / this.config.sprint.targetVelocity);\n\n return {\n backlog: {\n epics,\n stories,\n tasks,\n currentSprint: null,\n completedSprints: [],\n },\n estimatedSprints,\n estimatedVelocity: this.config.sprint.targetVelocity,\n warnings: parsed.warnings || [],\n };\n } catch {\n throw new PhaseError(\"Failed to generate backlog\", { phase: \"orchestrate\" });\n }\n }\n\n /**\n * Plan the first sprint from the backlog\n */\n async planFirstSprint(backlog: Backlog): Promise<Sprint> {\n // Get available stories (ready and not assigned)\n const availableStories = backlog.stories.filter(\n (s) => s.status === \"backlog\" || s.status === \"ready\"\n );\n\n // Check dependencies\n const readyStories = availableStories.filter((story) => {\n const epic = backlog.epics.find((e) => e.id === story.epicId);\n if (!epic) return true;\n\n // Check if epic dependencies are met\n const depsMet = epic.dependencies.every((depId) => {\n const depEpic = backlog.epics.find((e) => e.id === depId);\n return depEpic?.status === \"done\";\n });\n\n return depsMet || epic.dependencies.length === 0;\n });\n\n const prompt = fillPrompt(PLAN_SPRINT_PROMPT, {\n epicCount: backlog.epics.length,\n storyCount: backlog.stories.length,\n taskCount: backlog.tasks.length,\n sprintDuration: this.config.sprint.sprintDuration,\n targetVelocity: this.config.sprint.targetVelocity,\n maxStoriesPerSprint: this.config.sprint.maxStoriesPerSprint,\n bufferPercentage: this.config.sprint.bufferPercentage,\n availableStories: JSON.stringify(\n readyStories.slice(0, 20).map((s) => ({\n id: s.id,\n title: s.title,\n points: s.points,\n epicId: s.epicId,\n }))\n ),\n });\n\n try {\n const response = await this.llm.chat([\n { role: \"system\", content: ARCHITECT_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n const content = response.content;\n const jsonMatch = content.match(/\\{[\\s\\S]*\\}/);\n\n if (jsonMatch) {\n const parsed = JSON.parse(jsonMatch[0]) as {\n sprint?: {\n id?: string;\n name?: string;\n goal?: string;\n stories?: string[];\n plannedPoints?: number;\n status?: string;\n };\n };\n\n if (parsed.sprint) {\n return {\n id: parsed.sprint.id || `sprint_${randomUUID().substring(0, 8)}`,\n name: parsed.sprint.name || \"Sprint 1\",\n goal: parsed.sprint.goal || \"Initial foundation\",\n startDate: new Date(),\n stories: parsed.sprint.stories || [],\n status: \"planning\",\n };\n }\n }\n\n // Fallback: auto-select stories\n return this.autoSelectSprint(backlog, readyStories);\n } catch {\n return this.autoSelectSprint(backlog, readyStories);\n }\n }\n\n /**\n * Auto-select stories for a sprint based on priority and velocity\n */\n private autoSelectSprint(backlog: Backlog, availableStories: Story[]): Sprint {\n const targetVelocity = this.config.sprint.targetVelocity;\n const bufferFactor = 1 - this.config.sprint.bufferPercentage / 100;\n const maxPoints = targetVelocity * bufferFactor;\n\n // Sort by priority (from epic) and then by points\n const sorted = [...availableStories].sort((a, b) => {\n const epicA = backlog.epics.find((e) => e.id === a.epicId);\n const epicB = backlog.epics.find((e) => e.id === b.epicId);\n const priorityDiff = (epicA?.priority || 5) - (epicB?.priority || 5);\n if (priorityDiff !== 0) return priorityDiff;\n return a.points - b.points;\n });\n\n const selectedStories: string[] = [];\n let currentPoints = 0;\n\n for (const story of sorted) {\n if (selectedStories.length >= this.config.sprint.maxStoriesPerSprint) break;\n if (currentPoints + story.points > maxPoints) continue;\n\n selectedStories.push(story.id);\n currentPoints += story.points;\n }\n\n return {\n id: `sprint_${randomUUID().substring(0, 8)}`,\n name: \"Sprint 1: Foundation\",\n goal: \"Set up project foundation and core infrastructure\",\n startDate: new Date(),\n stories: selectedStories,\n status: \"planning\",\n };\n }\n\n // Parse helpers\n\n private parseEpics(\n data: Array<{\n id?: string;\n title?: string;\n description?: string;\n priority?: number;\n dependencies?: string[];\n status?: string;\n }>\n ): Epic[] {\n return data.map((e) => ({\n id: e.id || `epic_${randomUUID().substring(0, 8)}`,\n title: e.title || \"Epic\",\n description: e.description || \"\",\n stories: [],\n priority: (e.priority as Epic[\"priority\"]) || 3,\n dependencies: e.dependencies || [],\n status: (e.status as Epic[\"status\"]) || \"planned\",\n }));\n }\n\n private parseStories(\n data: Array<{\n id?: string;\n epicId?: string;\n title?: string;\n asA?: string;\n iWant?: string;\n soThat?: string;\n acceptanceCriteria?: string[];\n points?: number;\n status?: string;\n }>\n ): Story[] {\n return data.map((s) => ({\n id: s.id || `story_${randomUUID().substring(0, 8)}`,\n epicId: s.epicId || \"\",\n title: s.title || \"Story\",\n asA: s.asA || \"user\",\n iWant: s.iWant || \"\",\n soThat: s.soThat || \"\",\n acceptanceCriteria: s.acceptanceCriteria || [],\n tasks: [],\n points: this.normalizePoints(s.points),\n status: (s.status as Story[\"status\"]) || \"backlog\",\n }));\n }\n\n private parseTasks(\n data: Array<{\n id?: string;\n storyId?: string;\n title?: string;\n description?: string;\n type?: string;\n files?: string[];\n dependencies?: string[];\n estimatedComplexity?: string;\n status?: string;\n }>\n ): Task[] {\n return data.map((t) => ({\n id: t.id || `task_${randomUUID().substring(0, 8)}`,\n storyId: t.storyId || \"\",\n title: t.title || \"Task\",\n description: t.description || \"\",\n type: (t.type as TaskType) || \"feature\",\n files: t.files || [],\n dependencies: t.dependencies || [],\n estimatedComplexity: (t.estimatedComplexity as TaskComplexity) || \"simple\",\n status: \"pending\",\n }));\n }\n\n private normalizePoints(value?: number): Story[\"points\"] {\n const fibonacciPoints = [1, 2, 3, 5, 8, 13];\n if (!value) return 3;\n const closest = fibonacciPoints.reduce((prev, curr) =>\n Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev\n );\n return closest as Story[\"points\"];\n }\n}\n\n/**\n * Generate backlog markdown document\n */\nexport function generateBacklogMarkdown(backlog: Backlog): string {\n const sections: string[] = [];\n\n // Header\n sections.push(\"# Project Backlog\");\n sections.push(\"\");\n sections.push(\"## Summary\");\n sections.push(\"\");\n sections.push(`- **Epics:** ${backlog.epics.length}`);\n sections.push(`- **Stories:** ${backlog.stories.length}`);\n sections.push(`- **Tasks:** ${backlog.tasks.length}`);\n sections.push(\n `- **Total Points:** ${backlog.stories.reduce((sum, s) => sum + s.points, 0)}`\n );\n sections.push(\"\");\n\n // Epics\n sections.push(\"## Epics\");\n sections.push(\"\");\n\n for (const epic of backlog.epics) {\n sections.push(`### ${epic.title}`);\n sections.push(\"\");\n sections.push(`**Priority:** ${epic.priority} | **Status:** ${epic.status}`);\n sections.push(\"\");\n sections.push(epic.description);\n sections.push(\"\");\n\n // Stories in this epic\n const epicStories = backlog.stories.filter((s) => s.epicId === epic.id);\n if (epicStories.length > 0) {\n sections.push(\"#### Stories\");\n sections.push(\"\");\n sections.push(\"| ID | Title | Points | Status |\");\n sections.push(\"|----|-------|--------|--------|\");\n for (const story of epicStories) {\n sections.push(\n `| ${story.id} | ${story.title} | ${story.points} | ${story.status} |`\n );\n }\n sections.push(\"\");\n }\n }\n\n // Detailed Stories\n sections.push(\"## Story Details\");\n sections.push(\"\");\n\n for (const story of backlog.stories) {\n sections.push(`### ${story.title}`);\n sections.push(\"\");\n sections.push(`**As a** ${story.asA}`);\n sections.push(`**I want** ${story.iWant}`);\n sections.push(`**So that** ${story.soThat}`);\n sections.push(\"\");\n sections.push(`**Points:** ${story.points} | **Status:** ${story.status}`);\n sections.push(\"\");\n\n if (story.acceptanceCriteria.length > 0) {\n sections.push(\"**Acceptance Criteria:**\");\n for (const ac of story.acceptanceCriteria) {\n sections.push(`- [ ] ${ac}`);\n }\n sections.push(\"\");\n }\n\n // Tasks for this story\n const storyTasks = backlog.tasks.filter((t) => t.storyId === story.id);\n if (storyTasks.length > 0) {\n sections.push(\"**Tasks:**\");\n sections.push(\"\");\n sections.push(\"| ID | Title | Type | Complexity |\");\n sections.push(\"|----|-------|------|------------|\");\n for (const task of storyTasks) {\n sections.push(\n `| ${task.id} | ${task.title} | ${task.type} | ${task.estimatedComplexity} |`\n );\n }\n sections.push(\"\");\n }\n }\n\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(\"*Generated by Corbat-Coco*\");\n\n return sections.join(\"\\n\");\n}\n\n/**\n * Generate sprint markdown document\n */\nexport function generateSprintMarkdown(sprint: Sprint, backlog: Backlog): string {\n const sections: string[] = [];\n\n sections.push(`# ${sprint.name}`);\n sections.push(\"\");\n sections.push(`**Start Date:** ${sprint.startDate.toISOString().split(\"T\")[0]}`);\n sections.push(`**Status:** ${sprint.status}`);\n sections.push(\"\");\n sections.push(\"## Goal\");\n sections.push(\"\");\n sections.push(sprint.goal);\n sections.push(\"\");\n\n // Stories in sprint\n const sprintStories = backlog.stories.filter((s) =>\n sprint.stories.includes(s.id)\n );\n\n const totalPoints = sprintStories.reduce((sum, s) => sum + s.points, 0);\n\n sections.push(\"## Stories\");\n sections.push(\"\");\n sections.push(`**Total Points:** ${totalPoints}`);\n sections.push(\"\");\n sections.push(\"| Story | Points | Status |\");\n sections.push(\"|-------|--------|--------|\");\n\n for (const story of sprintStories) {\n sections.push(`| ${story.title} | ${story.points} | ${story.status} |`);\n }\n sections.push(\"\");\n\n // Tasks breakdown\n sections.push(\"## Tasks\");\n sections.push(\"\");\n\n for (const story of sprintStories) {\n const storyTasks = backlog.tasks.filter((t) => t.storyId === story.id);\n if (storyTasks.length > 0) {\n sections.push(`### ${story.title}`);\n sections.push(\"\");\n for (const task of storyTasks) {\n const checkbox = task.status === \"completed\" ? \"[x]\" : \"[ ]\";\n sections.push(`- ${checkbox} ${task.title} (${task.type})`);\n }\n sections.push(\"\");\n }\n }\n\n return sections.join(\"\\n\");\n}\n\n/**\n * Create a backlog generator\n */\nexport function createBacklogGenerator(\n llm: LLMProvider,\n config: OrchestrateConfig\n): BacklogGenerator {\n return new BacklogGenerator(llm, config);\n}\n","/**\n * ORCHESTRATE Phase Executor\n *\n * Orchestrates the architecture design, ADR creation, and backlog generation\n */\n\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type {\n PhaseExecutor,\n PhaseContext,\n PhaseResult,\n PhaseCheckpoint,\n PhaseArtifact,\n} from \"../types.js\";\nimport type {\n OrchestrateConfig,\n OrchestrateOutput,\n ArchitectureDoc,\n ADR,\n BacklogResult,\n} from \"./types.js\";\nimport { DEFAULT_ORCHESTRATE_CONFIG } from \"./types.js\";\nimport type { Specification } from \"../converge/types.js\";\nimport type { Sprint } from \"../../types/task.js\";\nimport {\n ArchitectureGenerator,\n generateArchitectureMarkdown,\n} from \"./architecture.js\";\nimport { ADRGenerator, generateADRMarkdown, getADRFilename, generateADRIndexMarkdown } from \"./adr.js\";\nimport { BacklogGenerator, generateBacklogMarkdown, generateSprintMarkdown } from \"./backlog.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\n// FileSystemError reserved for future use\n\n/**\n * ORCHESTRATE phase executor\n */\nexport class OrchestrateExecutor implements PhaseExecutor {\n readonly name = \"orchestrate\";\n readonly description = \"Design architecture, create ADRs, and generate backlog\";\n\n private config: OrchestrateConfig;\n\n constructor(config: Partial<OrchestrateConfig> = {}) {\n this.config = { ...DEFAULT_ORCHESTRATE_CONFIG, ...config };\n }\n\n /**\n * Check if the phase can start\n */\n canStart(_context: PhaseContext): boolean {\n // ORCHESTRATE requires a specification from CONVERGE\n // For now, check if spec file exists\n return true;\n }\n\n /**\n * Execute the ORCHESTRATE phase\n */\n async execute(context: PhaseContext): Promise<PhaseResult> {\n const startTime = new Date();\n const artifacts: PhaseArtifact[] = [];\n\n try {\n // Load specification from CONVERGE phase\n const specification = await this.loadSpecification(context.projectPath);\n\n // Create LLM adapter\n const llm = this.createLLMAdapter(context);\n\n // Create generators\n const archGenerator = new ArchitectureGenerator(llm, this.config);\n const adrGenerator = new ADRGenerator(llm, this.config);\n const backlogGenerator = new BacklogGenerator(llm, this.config);\n\n // Generate architecture\n const architecture = await archGenerator.generate(specification);\n const archPath = await this.saveArchitecture(context.projectPath, architecture);\n artifacts.push({\n type: \"architecture\",\n path: archPath,\n description: \"Architecture documentation\",\n });\n\n // Generate ADRs\n const adrs = await adrGenerator.generate(architecture, specification);\n const adrPaths = await this.saveADRs(context.projectPath, adrs);\n for (const adrPath of adrPaths) {\n artifacts.push({\n type: \"adr\",\n path: adrPath,\n description: \"Architecture Decision Record\",\n });\n }\n\n // Generate backlog\n const backlogResult = await backlogGenerator.generate(\n architecture,\n specification\n );\n const backlogPath = await this.saveBacklog(context.projectPath, backlogResult);\n artifacts.push({\n type: \"backlog\",\n path: backlogPath,\n description: \"Project backlog\",\n });\n\n // Plan first sprint\n const firstSprint = await backlogGenerator.planFirstSprint(\n backlogResult.backlog\n );\n const sprintPath = await this.saveSprint(\n context.projectPath,\n firstSprint,\n backlogResult\n );\n artifacts.push({\n type: \"backlog\",\n path: sprintPath,\n description: \"Sprint 1 plan\",\n });\n\n // Save diagrams\n for (const diagram of architecture.diagrams) {\n const diagramPath = await this.saveDiagram(\n context.projectPath,\n diagram.id,\n diagram.mermaid\n );\n artifacts.push({\n type: \"diagram\",\n path: diagramPath,\n description: diagram.title,\n });\n }\n\n const endTime = new Date();\n\n return {\n phase: \"orchestrate\",\n success: true,\n artifacts,\n metrics: {\n startTime,\n endTime,\n durationMs: endTime.getTime() - startTime.getTime(),\n llmCalls: adrs.length + 3, // Approximate\n tokensUsed: 0, // Would need tracking\n },\n };\n } catch (error) {\n return {\n phase: \"orchestrate\",\n success: false,\n artifacts,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Check if the phase can complete\n */\n canComplete(_context: PhaseContext): boolean {\n // Can complete if we have architecture and backlog\n return true;\n }\n\n /**\n * Create a checkpoint\n */\n async checkpoint(_context: PhaseContext): Promise<PhaseCheckpoint> {\n return {\n phase: \"orchestrate\",\n timestamp: new Date(),\n state: {\n artifacts: [],\n progress: 0,\n checkpoint: null,\n },\n resumePoint: \"start\",\n };\n }\n\n /**\n * Restore from checkpoint\n */\n async restore(\n _checkpoint: PhaseCheckpoint,\n _context: PhaseContext\n ): Promise<void> {\n // ORCHESTRATE is typically fast enough to re-run\n }\n\n // Private methods\n\n private createLLMAdapter(context: PhaseContext): LLMProvider {\n const llmContext = context.llm;\n\n return {\n id: \"phase-adapter\",\n name: \"Phase LLM Adapter\",\n\n async initialize() {},\n\n async chat(messages) {\n const adapted = messages.map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? m.content : JSON.stringify(m.content),\n }));\n const response = await llmContext.chat(adapted);\n return {\n id: `chat-${Date.now()}`,\n content: response.content,\n stopReason: \"end_turn\" as const,\n usage: {\n inputTokens: response.usage.inputTokens,\n outputTokens: response.usage.outputTokens,\n },\n model: \"phase-adapter\",\n };\n },\n\n async chatWithTools(messages, options) {\n const adapted = messages.map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? m.content : JSON.stringify(m.content),\n }));\n const tools = options.tools.map((t) => ({\n name: t.name,\n description: t.description,\n parameters: t.input_schema as Record<string, unknown>,\n }));\n const response = await llmContext.chatWithTools(adapted, tools);\n return {\n id: `chat-${Date.now()}`,\n content: response.content,\n stopReason: \"end_turn\" as const,\n usage: {\n inputTokens: response.usage.inputTokens,\n outputTokens: response.usage.outputTokens,\n },\n model: \"phase-adapter\",\n toolCalls: (response.toolCalls || []).map((tc) => ({\n id: tc.name,\n name: tc.name,\n input: tc.arguments,\n })),\n };\n },\n\n async *stream(messages) {\n const adapted = messages.map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? m.content : JSON.stringify(m.content),\n }));\n const response = await llmContext.chat(adapted);\n yield {\n type: \"text\" as const,\n text: response.content,\n };\n yield {\n type: \"done\" as const,\n };\n },\n\n countTokens(_text: string): number {\n return Math.ceil(_text.length / 4);\n },\n\n getContextWindow(): number {\n return 200000;\n },\n\n async isAvailable(): Promise<boolean> {\n return true;\n },\n };\n }\n\n private async loadSpecification(projectPath: string): Promise<Specification> {\n try {\n // Try to load JSON version first\n const jsonPath = path.join(projectPath, \".coco\", \"spec\", \"spec.json\");\n const jsonContent = await fs.readFile(jsonPath, \"utf-8\");\n return JSON.parse(jsonContent) as Specification;\n } catch {\n // Fall back to creating a minimal specification\n // In real usage, this would parse the markdown or throw\n return this.createMinimalSpec(projectPath);\n }\n }\n\n private createMinimalSpec(projectPath: string): Specification {\n return {\n version: \"1.0.0\",\n generatedAt: new Date(),\n overview: {\n name: path.basename(projectPath),\n description: \"Project specification\",\n goals: [],\n targetUsers: [\"developers\"],\n successCriteria: [],\n },\n requirements: {\n functional: [],\n nonFunctional: [],\n constraints: [],\n },\n technical: {\n stack: [],\n architecture: \"\",\n integrations: [],\n deployment: \"\",\n },\n assumptions: {\n confirmed: [],\n unconfirmed: [],\n risks: [],\n },\n outOfScope: [],\n openQuestions: [],\n };\n }\n\n private async saveArchitecture(\n projectPath: string,\n architecture: ArchitectureDoc\n ): Promise<string> {\n const dir = path.join(projectPath, \".coco\", \"architecture\");\n await fs.mkdir(dir, { recursive: true });\n\n // Save markdown\n const mdPath = path.join(dir, \"ARCHITECTURE.md\");\n await fs.writeFile(mdPath, generateArchitectureMarkdown(architecture), \"utf-8\");\n\n // Save JSON\n const jsonPath = path.join(dir, \"architecture.json\");\n await fs.writeFile(jsonPath, JSON.stringify(architecture, null, 2), \"utf-8\");\n\n return mdPath;\n }\n\n private async saveADRs(projectPath: string, adrs: ADR[]): Promise<string[]> {\n const dir = path.join(projectPath, \".coco\", \"architecture\", \"adrs\");\n await fs.mkdir(dir, { recursive: true });\n\n const paths: string[] = [];\n\n // Save index\n const indexPath = path.join(dir, \"README.md\");\n await fs.writeFile(indexPath, generateADRIndexMarkdown(adrs), \"utf-8\");\n paths.push(indexPath);\n\n // Save individual ADRs\n for (const adr of adrs) {\n const filename = getADRFilename(adr);\n const adrPath = path.join(dir, filename);\n await fs.writeFile(adrPath, generateADRMarkdown(adr), \"utf-8\");\n paths.push(adrPath);\n }\n\n return paths;\n }\n\n private async saveBacklog(\n projectPath: string,\n backlogResult: BacklogResult\n ): Promise<string> {\n const dir = path.join(projectPath, \".coco\", \"planning\");\n await fs.mkdir(dir, { recursive: true });\n\n // Save markdown\n const mdPath = path.join(dir, \"BACKLOG.md\");\n await fs.writeFile(\n mdPath,\n generateBacklogMarkdown(backlogResult.backlog),\n \"utf-8\"\n );\n\n // Save JSON\n const jsonPath = path.join(dir, \"backlog.json\");\n await fs.writeFile(jsonPath, JSON.stringify(backlogResult, null, 2), \"utf-8\");\n\n return mdPath;\n }\n\n private async saveSprint(\n projectPath: string,\n sprint: Sprint,\n backlogResult: BacklogResult\n ): Promise<string> {\n const dir = path.join(projectPath, \".coco\", \"planning\", \"sprints\");\n await fs.mkdir(dir, { recursive: true });\n\n const filename = `${sprint.id}.md`;\n const sprintPath = path.join(dir, filename);\n await fs.writeFile(\n sprintPath,\n generateSprintMarkdown(sprint, backlogResult.backlog),\n \"utf-8\"\n );\n\n // Also save JSON\n const jsonPath = path.join(dir, `${sprint.id}.json`);\n await fs.writeFile(jsonPath, JSON.stringify(sprint, null, 2), \"utf-8\");\n\n return sprintPath;\n }\n\n private async saveDiagram(\n projectPath: string,\n id: string,\n mermaid: string\n ): Promise<string> {\n const dir = path.join(projectPath, \".coco\", \"architecture\", \"diagrams\");\n await fs.mkdir(dir, { recursive: true });\n\n const diagramPath = path.join(dir, `${id}.mmd`);\n await fs.writeFile(diagramPath, mermaid, \"utf-8\");\n\n return diagramPath;\n }\n}\n\n/**\n * Create an ORCHESTRATE phase executor\n */\nexport function createOrchestrateExecutor(\n config?: Partial<OrchestrateConfig>\n): OrchestrateExecutor {\n return new OrchestrateExecutor(config);\n}\n\n/**\n * Run the ORCHESTRATE phase directly\n */\nexport async function runOrchestratePhase(\n projectPath: string,\n llm: LLMProvider,\n config?: Partial<OrchestrateConfig>\n): Promise<OrchestrateOutput | { error: string }> {\n const executor = createOrchestrateExecutor(config);\n\n const context: PhaseContext = {\n projectPath,\n config: {\n quality: {\n minScore: 85,\n minCoverage: 80,\n maxIterations: 10,\n convergenceThreshold: 2,\n },\n timeouts: {\n phaseTimeout: 3600000,\n taskTimeout: 600000,\n llmTimeout: 120000,\n },\n },\n state: {\n artifacts: [],\n progress: 0,\n checkpoint: null,\n },\n tools: {} as PhaseContext[\"tools\"],\n llm: {\n async chat(messages) {\n const adapted = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n const response = await llm.chat(adapted);\n return {\n content: response.content,\n usage: response.usage,\n };\n },\n async chatWithTools(messages, tools) {\n const adaptedMessages = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n const adaptedTools = tools.map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: t.parameters as { type: \"object\"; properties: Record<string, unknown>; required?: string[] },\n }));\n const response = await llm.chatWithTools(adaptedMessages, { tools: adaptedTools });\n return {\n content: response.content,\n usage: response.usage,\n toolCalls: response.toolCalls?.map((tc) => ({\n name: tc.name,\n arguments: tc.input,\n })),\n };\n },\n },\n };\n\n const result = await executor.execute(context);\n\n if (result.success) {\n // Load the generated artifacts\n const archPath = result.artifacts.find((a) => a.type === \"architecture\")?.path;\n const backlogPath = result.artifacts.find((a) => a.type === \"backlog\" && a.description === \"Project backlog\")?.path;\n\n return {\n architecture: {} as ArchitectureDoc, // Would load from file\n adrs: [],\n backlog: {} as BacklogResult,\n firstSprint: {} as Sprint,\n artifactPaths: {\n architecture: archPath || \"\",\n adrs: result.artifacts.filter((a) => a.type === \"adr\").map((a) => a.path),\n backlog: backlogPath || \"\",\n diagrams: result.artifacts.filter((a) => a.type === \"diagram\").map((a) => a.path),\n },\n };\n }\n\n return { error: result.error || \"Unknown error\" };\n}\n","/**\n * Anthropic Claude provider for Corbat-Coco\n */\n\nimport Anthropic from \"@anthropic-ai/sdk\";\nimport type {\n LLMProvider,\n ProviderConfig,\n Message,\n ChatOptions,\n ChatResponse,\n ChatWithToolsOptions,\n ChatWithToolsResponse,\n StreamChunk,\n ToolCall,\n ToolDefinition,\n MessageContent,\n TextContent,\n ToolUseContent,\n ToolResultContent,\n} from \"./types.js\";\nimport { ProviderError } from \"../utils/errors.js\";\n\n/**\n * Default model\n */\nconst DEFAULT_MODEL = \"claude-sonnet-4-20250514\";\n\n/**\n * Context windows for models\n */\nconst CONTEXT_WINDOWS: Record<string, number> = {\n \"claude-sonnet-4-20250514\": 200000,\n \"claude-opus-4-20250514\": 200000,\n \"claude-3-5-sonnet-20241022\": 200000,\n \"claude-3-5-haiku-20241022\": 200000,\n \"claude-3-opus-20240229\": 200000,\n \"claude-3-sonnet-20240229\": 200000,\n \"claude-3-haiku-20240307\": 200000,\n};\n\n/**\n * Anthropic provider implementation\n */\nexport class AnthropicProvider implements LLMProvider {\n readonly id = \"anthropic\";\n readonly name = \"Anthropic Claude\";\n\n private client: Anthropic | null = null;\n private config: ProviderConfig = {};\n\n /**\n * Initialize the provider\n */\n async initialize(config: ProviderConfig): Promise<void> {\n this.config = config;\n\n const apiKey = config.apiKey ?? process.env[\"ANTHROPIC_API_KEY\"];\n if (!apiKey) {\n throw new ProviderError(\"Anthropic API key not provided\", {\n provider: this.id,\n });\n }\n\n this.client = new Anthropic({\n apiKey,\n baseURL: config.baseUrl,\n timeout: config.timeout ?? 120000,\n });\n }\n\n /**\n * Send a chat message\n */\n async chat(messages: Message[], options?: ChatOptions): Promise<ChatResponse> {\n this.ensureInitialized();\n\n try {\n const response = await this.client!.messages.create({\n model: options?.model ?? this.config.model ?? DEFAULT_MODEL,\n max_tokens: options?.maxTokens ?? this.config.maxTokens ?? 8192,\n temperature: options?.temperature ?? this.config.temperature ?? 0,\n system: options?.system,\n messages: this.convertMessages(messages),\n stop_sequences: options?.stopSequences,\n });\n\n return {\n id: response.id,\n content: this.extractTextContent(response.content),\n stopReason: this.mapStopReason(response.stop_reason),\n usage: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n },\n model: response.model,\n };\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Send a chat message with tool use\n */\n async chatWithTools(\n messages: Message[],\n options: ChatWithToolsOptions\n ): Promise<ChatWithToolsResponse> {\n this.ensureInitialized();\n\n try {\n const response = await this.client!.messages.create({\n model: options?.model ?? this.config.model ?? DEFAULT_MODEL,\n max_tokens: options?.maxTokens ?? this.config.maxTokens ?? 8192,\n temperature: options?.temperature ?? this.config.temperature ?? 0,\n system: options?.system,\n messages: this.convertMessages(messages),\n tools: this.convertTools(options.tools),\n tool_choice: options.toolChoice\n ? this.convertToolChoice(options.toolChoice)\n : undefined,\n });\n\n const toolCalls = this.extractToolCalls(response.content);\n\n return {\n id: response.id,\n content: this.extractTextContent(response.content),\n stopReason: this.mapStopReason(response.stop_reason),\n usage: {\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n },\n model: response.model,\n toolCalls,\n };\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Stream a chat response\n */\n async *stream(\n messages: Message[],\n options?: ChatOptions\n ): AsyncIterable<StreamChunk> {\n this.ensureInitialized();\n\n try {\n const stream = await this.client!.messages.stream({\n model: options?.model ?? this.config.model ?? DEFAULT_MODEL,\n max_tokens: options?.maxTokens ?? this.config.maxTokens ?? 8192,\n temperature: options?.temperature ?? this.config.temperature ?? 0,\n system: options?.system,\n messages: this.convertMessages(messages),\n });\n\n for await (const event of stream) {\n if (event.type === \"content_block_delta\") {\n const delta = event.delta as { type: string; text?: string };\n if (delta.type === \"text_delta\" && delta.text) {\n yield { type: \"text\", text: delta.text };\n }\n }\n }\n\n yield { type: \"done\" };\n } catch (error) {\n throw this.handleError(error);\n }\n }\n\n /**\n * Count tokens (approximate)\n */\n countTokens(text: string): number {\n // Anthropic uses ~4 characters per token on average\n return Math.ceil(text.length / 4);\n }\n\n /**\n * Get context window size\n */\n getContextWindow(): number {\n const model = this.config.model ?? DEFAULT_MODEL;\n return CONTEXT_WINDOWS[model] ?? 200000;\n }\n\n /**\n * Check if provider is available\n */\n async isAvailable(): Promise<boolean> {\n if (!this.client) return false;\n\n try {\n // Try a minimal request\n await this.client.messages.create({\n model: this.config.model ?? DEFAULT_MODEL,\n max_tokens: 1,\n messages: [{ role: \"user\", content: \"hi\" }],\n });\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Ensure client is initialized\n */\n private ensureInitialized(): void {\n if (!this.client) {\n throw new ProviderError(\"Provider not initialized. Call initialize() first.\", {\n provider: this.id,\n });\n }\n }\n\n /**\n * Convert messages to Anthropic format\n */\n private convertMessages(messages: Message[]): Anthropic.MessageParam[] {\n return messages\n .filter((m) => m.role !== \"system\") // System is handled separately\n .map((m) => ({\n role: m.role as \"user\" | \"assistant\",\n content: this.convertContent(m.content),\n }));\n }\n\n /**\n * Convert message content to Anthropic format\n */\n private convertContent(\n content: MessageContent\n ): string | Anthropic.ContentBlockParam[] {\n if (typeof content === \"string\") {\n return content;\n }\n\n return content.map((block) => {\n if (block.type === \"text\") {\n return { type: \"text\" as const, text: (block as TextContent).text };\n }\n if (block.type === \"tool_use\") {\n const toolUse = block as ToolUseContent;\n return {\n type: \"tool_use\" as const,\n id: toolUse.id,\n name: toolUse.name,\n input: toolUse.input,\n };\n }\n if (block.type === \"tool_result\") {\n const toolResult = block as ToolResultContent;\n return {\n type: \"tool_result\" as const,\n tool_use_id: toolResult.tool_use_id,\n content: toolResult.content,\n is_error: toolResult.is_error,\n };\n }\n return { type: \"text\" as const, text: \"\" };\n });\n }\n\n /**\n * Convert tools to Anthropic format\n */\n private convertTools(tools: ToolDefinition[]): Anthropic.Tool[] {\n return tools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n input_schema: tool.input_schema as Anthropic.Tool.InputSchema,\n }));\n }\n\n /**\n * Convert tool choice to Anthropic format\n */\n private convertToolChoice(\n choice: ChatWithToolsOptions[\"toolChoice\"]\n ): Anthropic.MessageCreateParams[\"tool_choice\"] {\n if (choice === \"auto\") return { type: \"auto\" };\n if (choice === \"any\") return { type: \"any\" };\n if (typeof choice === \"object\" && choice.type === \"tool\") {\n return { type: \"tool\", name: choice.name };\n }\n return { type: \"auto\" };\n }\n\n /**\n * Extract text content from response\n */\n private extractTextContent(content: Anthropic.ContentBlock[]): string {\n return content\n .filter((block): block is Anthropic.TextBlock => block.type === \"text\")\n .map((block) => block.text)\n .join(\"\");\n }\n\n /**\n * Extract tool calls from response\n */\n private extractToolCalls(content: Anthropic.ContentBlock[]): ToolCall[] {\n return content\n .filter((block): block is Anthropic.ToolUseBlock => block.type === \"tool_use\")\n .map((block) => ({\n id: block.id,\n name: block.name,\n input: block.input as Record<string, unknown>,\n }));\n }\n\n /**\n * Map stop reason to our format\n */\n private mapStopReason(\n reason: string | null\n ): ChatResponse[\"stopReason\"] {\n switch (reason) {\n case \"end_turn\":\n return \"end_turn\";\n case \"max_tokens\":\n return \"max_tokens\";\n case \"stop_sequence\":\n return \"stop_sequence\";\n case \"tool_use\":\n return \"tool_use\";\n default:\n return \"end_turn\";\n }\n }\n\n /**\n * Handle API errors\n */\n private handleError(error: unknown): never {\n if (error instanceof Anthropic.APIError) {\n const retryable = error.status === 429 || error.status >= 500;\n throw new ProviderError(error.message, {\n provider: this.id,\n statusCode: error.status,\n retryable,\n cause: error,\n });\n }\n\n throw new ProviderError(\n error instanceof Error ? error.message : String(error),\n {\n provider: this.id,\n cause: error instanceof Error ? error : undefined,\n }\n );\n }\n}\n\n/**\n * Create an Anthropic provider\n */\nexport function createAnthropicProvider(config?: ProviderConfig): AnthropicProvider {\n const provider = new AnthropicProvider();\n if (config) {\n provider.initialize(config).catch(() => {\n // Initialization will be handled when first method is called\n });\n }\n return provider;\n}\n","/**\n * Provider exports for Corbat-Coco\n */\n\n// Types\nexport type {\n LLMProvider,\n ProviderConfig,\n ProviderFactory,\n Message,\n MessageRole,\n MessageContent,\n TextContent,\n ImageContent,\n ToolUseContent,\n ToolResultContent,\n ToolDefinition,\n ToolCall,\n ChatOptions,\n ChatResponse,\n ChatWithToolsOptions,\n ChatWithToolsResponse,\n StreamChunk,\n} from \"./types.js\";\n\n// Anthropic provider\nexport { AnthropicProvider, createAnthropicProvider } from \"./anthropic.js\";\n\n// Provider registry\nimport type { LLMProvider, ProviderConfig } from \"./types.js\";\nimport { AnthropicProvider } from \"./anthropic.js\";\nimport { ProviderError } from \"../utils/errors.js\";\n\n/**\n * Supported provider types\n */\nexport type ProviderType = \"anthropic\" | \"openai\" | \"local\";\n\n/**\n * Create a provider by type\n */\nexport async function createProvider(\n type: ProviderType,\n config: ProviderConfig = {}\n): Promise<LLMProvider> {\n let provider: LLMProvider;\n\n switch (type) {\n case \"anthropic\":\n provider = new AnthropicProvider();\n break;\n\n case \"openai\":\n // TODO: Implement OpenAI provider\n throw new ProviderError(\"OpenAI provider not yet implemented\", {\n provider: \"openai\",\n });\n\n case \"local\":\n // TODO: Implement local provider (Ollama)\n throw new ProviderError(\"Local provider not yet implemented\", {\n provider: \"local\",\n });\n\n default:\n throw new ProviderError(`Unknown provider type: ${type}`, {\n provider: type,\n });\n }\n\n await provider.initialize(config);\n return provider;\n}\n\n/**\n * Get default provider (Anthropic)\n */\nexport async function getDefaultProvider(\n config: ProviderConfig = {}\n): Promise<LLMProvider> {\n return createProvider(\"anthropic\", config);\n}\n","/**\n * Plan command - Run discovery and create a development plan\n */\n\nimport { Command } from \"commander\";\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { loadConfig, findConfigPath } from \"../../config/loader.js\";\nimport { createConvergeExecutor } from \"../../phases/converge/executor.js\";\nimport { createOrchestrateExecutor } from \"../../phases/orchestrate/executor.js\";\nimport type { PhaseContext, PhaseResult } from \"../../phases/types.js\";\nimport type { Specification } from \"../../phases/converge/types.js\";\nimport type { ArchitectureDoc, ADR, BacklogResult } from \"../../phases/orchestrate/types.js\";\nimport { createProvider } from \"../../providers/index.js\";\n\n/**\n * Options for runPlan\n */\nexport interface PlanOptions {\n cwd?: string;\n auto?: boolean;\n skipDiscovery?: boolean;\n dryRun?: boolean;\n interactive?: boolean;\n}\n\n/**\n * Result of planning phase\n */\nexport interface PlanResult {\n specification?: Specification;\n architecture?: ArchitectureDoc;\n adrs?: ADR[];\n backlog?: BacklogResult;\n success: boolean;\n error?: string;\n}\n\n/**\n * Register the plan command\n */\nexport function registerPlanCommand(program: Command): void {\n program\n .command(\"plan\")\n .description(\"Run discovery and create a development plan\")\n .option(\"-i, --interactive\", \"Run in interactive mode (default)\")\n .option(\"--skip-discovery\", \"Skip discovery, use existing specification\")\n .option(\"--dry-run\", \"Generate plan without saving\")\n .option(\"--auto\", \"Run without confirmations\")\n .action(async (options: PlanOptions) => {\n try {\n const result = await runPlan({ ...options, cwd: process.cwd() });\n if (!result.success) {\n p.log.error(result.error || \"Planning failed\");\n process.exit(1);\n }\n } catch (error) {\n p.log.error(\n error instanceof Error ? error.message : \"An error occurred\"\n );\n process.exit(1);\n }\n });\n}\n\n/**\n * Create a minimal phase context for CLI execution\n */\nasync function createCliPhaseContext(\n projectPath: string,\n _onUserInput?: (prompt: string, options?: string[]) => Promise<string>\n): Promise<PhaseContext> {\n // Create provider - will fail gracefully if no API key\n let llm: PhaseContext[\"llm\"];\n\n try {\n const provider = await createProvider(\"anthropic\", {\n apiKey: process.env.ANTHROPIC_API_KEY,\n });\n\n llm = {\n async chat(messages) {\n const adapted = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n const response = await provider.chat(adapted);\n return {\n content: response.content,\n usage: response.usage,\n };\n },\n async chatWithTools(messages, tools) {\n const adapted = messages.map((m) => ({\n role: m.role,\n content: m.content,\n }));\n const adaptedTools = tools.map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: t.parameters as { type: \"object\"; properties: Record<string, unknown>; required?: string[] },\n }));\n const response = await provider.chatWithTools(adapted, { tools: adaptedTools });\n return {\n content: response.content,\n usage: response.usage,\n toolCalls: response.toolCalls?.map((tc: { name: string; input: Record<string, unknown> }) => ({\n name: tc.name,\n arguments: tc.input,\n })),\n };\n },\n };\n } catch {\n // Create a mock LLM for when no API key is available\n llm = {\n async chat() {\n return { content: \"{}\", usage: { inputTokens: 0, outputTokens: 0 } };\n },\n async chatWithTools() {\n return { content: \"{}\", usage: { inputTokens: 0, outputTokens: 0 } };\n },\n };\n }\n\n return {\n projectPath,\n config: {\n quality: {\n minScore: 85,\n minCoverage: 80,\n maxIterations: 10,\n convergenceThreshold: 2,\n },\n timeouts: {\n phaseTimeout: 3600000,\n taskTimeout: 600000,\n llmTimeout: 120000,\n },\n },\n state: {\n artifacts: [],\n progress: 0,\n checkpoint: null,\n },\n tools: {\n file: {\n async read(path: string) {\n const fs = await import(\"node:fs/promises\");\n return fs.readFile(path, \"utf-8\");\n },\n async write(path: string, content: string) {\n const fs = await import(\"node:fs/promises\");\n const nodePath = await import(\"node:path\");\n await fs.mkdir(nodePath.dirname(path), { recursive: true });\n await fs.writeFile(path, content, \"utf-8\");\n },\n async exists(path: string) {\n const fs = await import(\"node:fs/promises\");\n try {\n await fs.access(path);\n return true;\n } catch {\n return false;\n }\n },\n async glob(pattern: string) {\n const { glob } = await import(\"glob\");\n return glob(pattern, { cwd: projectPath });\n },\n },\n bash: {\n async exec(command: string, options = {}) {\n const { execa } = await import(\"execa\");\n try {\n const result = await execa(command, {\n shell: true,\n cwd: options.cwd || projectPath,\n timeout: options.timeout,\n env: options.env,\n });\n return {\n stdout: result.stdout,\n stderr: result.stderr,\n exitCode: result.exitCode ?? 0,\n };\n } catch (error: unknown) {\n const err = error as { stdout?: string; stderr?: string; exitCode?: number };\n return {\n stdout: err.stdout || \"\",\n stderr: err.stderr || \"\",\n exitCode: err.exitCode || 1,\n };\n }\n },\n },\n git: {\n async status() {\n return { branch: \"main\", clean: true, staged: [], unstaged: [], untracked: [] };\n },\n async commit() {},\n async push() {},\n },\n test: {\n async run() {\n return { passed: 0, failed: 0, skipped: 0, duration: 0, failures: [] };\n },\n async coverage() {\n return { lines: 0, branches: 0, functions: 0, statements: 0 };\n },\n },\n quality: {\n async lint() {\n return { errors: 0, warnings: 0, issues: [] };\n },\n async complexity() {\n return { averageComplexity: 0, maxComplexity: 0, files: [] };\n },\n async security() {\n return { vulnerabilities: 0, issues: [] };\n },\n },\n },\n llm,\n };\n}\n\n/**\n * Run the plan command programmatically\n */\nexport async function runPlan(options: PlanOptions = {}): Promise<PlanResult> {\n const cwd = options.cwd || process.cwd();\n\n // Find and load configuration\n const configPath = await findConfigPath(cwd);\n if (!configPath) {\n return {\n success: false,\n error: 'No Corbat-Coco config found. Run \"coco init\" first.',\n };\n }\n\n await loadConfig(configPath);\n\n // Show intro if not in auto mode\n if (!options.auto) {\n p.intro(chalk.cyan(\"Corbat-Coco Planning\"));\n }\n\n // Create user input handler for interactive mode\n const onUserInput = options.auto\n ? undefined\n : async (prompt: string, opts?: string[]): Promise<string> => {\n if (opts && opts.length > 0) {\n const result = await p.select({\n message: prompt,\n options: opts.map((o) => ({ value: o, label: o })),\n });\n if (p.isCancel(result)) {\n throw new Error(\"Cancelled by user\");\n }\n return result as string;\n } else {\n const result = await p.text({ message: prompt });\n if (p.isCancel(result)) {\n throw new Error(\"Cancelled by user\");\n }\n return result as string;\n }\n };\n\n // Phase 1: Converge (Discovery)\n let convergeResult: PhaseResult;\n\n if (!options.skipDiscovery) {\n if (!options.auto) {\n const shouldProceed = await p.confirm({\n message: \"Ready to start planning. Continue?\",\n });\n\n if (p.isCancel(shouldProceed) || shouldProceed === false) {\n return { success: false, error: \"Planning cancelled by user\" };\n }\n\n p.log.info(\"Phase 1: Converge - Understanding your requirements\");\n }\n\n const convergeExecutor = createConvergeExecutor({\n onUserInput,\n onProgress: (step, progress, message) => {\n if (!options.auto) {\n p.log.step(`[${step}] ${progress}% - ${message}`);\n }\n },\n });\n\n const context = await createCliPhaseContext(cwd, onUserInput);\n convergeResult = await convergeExecutor.execute(context);\n\n if (!convergeResult.success) {\n return {\n success: false,\n error: convergeResult.error || \"CONVERGE phase failed\",\n };\n }\n } else {\n // Skip discovery - create minimal result\n convergeResult = { phase: \"converge\", success: true, artifacts: [] };\n }\n\n // Phase 2: Orchestrate (Planning)\n if (!options.auto) {\n p.log.info(\"Phase 2: Orchestrate - Creating development plan\");\n }\n\n const orchestrateExecutor = createOrchestrateExecutor();\n const context = await createCliPhaseContext(cwd);\n const orchestrateResult = await orchestrateExecutor.execute(context);\n\n if (!orchestrateResult.success) {\n return {\n success: false,\n error: orchestrateResult.error || \"ORCHESTRATE phase failed\",\n };\n }\n\n if (!options.auto) {\n // Show summary\n console.log(\"\\n\" + chalk.bold(\"Planning Summary:\"));\n console.log(\n chalk.dim(\" Artifacts generated: \") + orchestrateResult.artifacts.length\n );\n\n for (const artifact of orchestrateResult.artifacts) {\n console.log(chalk.dim(` - ${artifact.type}: ${artifact.description}`));\n }\n\n p.outro(\n chalk.green(\"Planning complete! Run 'coco build' to start development.\")\n );\n }\n\n return {\n success: true,\n };\n}\n\n/**\n * Load existing specification from disk\n */\nexport async function loadExistingSpecification(cwd: string): Promise<Specification> {\n const fs = await import(\"node:fs/promises\");\n const path = await import(\"node:path\");\n\n const specPath = path.join(cwd, \".coco\", \"spec\", \"specification.json\");\n\n try {\n const content = await fs.readFile(specPath, \"utf-8\");\n return JSON.parse(content) as Specification;\n } catch {\n throw new Error(\n 'No existing specification found. Run \"coco plan\" without --skip-discovery first.'\n );\n }\n}\n","import { Command } from \"commander\";\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\n\nexport function registerBuildCommand(program: Command): void {\n program\n .command(\"build\")\n .description(\"Execute tasks and build the project\")\n .option(\"-t, --task <task-id>\", \"Build a specific task only\")\n .option(\"-s, --sprint <sprint-id>\", \"Build a specific sprint only\")\n .option(\"--no-review\", \"Skip self-review iterations\")\n .option(\"--max-iterations <n>\", \"Maximum iterations per task\", \"10\")\n .option(\"--min-quality <n>\", \"Minimum quality score\", \"85\")\n .action(async (options: BuildOptions) => {\n await runBuild(options);\n });\n}\n\ninterface BuildOptions {\n task?: string;\n sprint?: string;\n review?: boolean;\n maxIterations?: string;\n minQuality?: string;\n}\n\nasync function runBuild(options: BuildOptions): Promise<void> {\n p.intro(chalk.cyan(\"Corbat-Coco Build\"));\n\n // Check for existing project and plan\n const projectState = await checkProjectState();\n if (!projectState.hasProject) {\n p.log.error(\"No Corbat-Coco project found. Run 'coco init' first.\");\n process.exit(1);\n }\n if (!projectState.hasPlan) {\n p.log.error(\"No development plan found. Run 'coco plan' first.\");\n process.exit(1);\n }\n\n const maxIterations = parseInt(options.maxIterations || \"10\", 10);\n const minQuality = parseInt(options.minQuality || \"85\", 10);\n\n p.log.step(`Phase 3: Complete - Building with quality threshold ${minQuality}`);\n\n // Placeholder: Load tasks from backlog\n const tasks = await loadTasks(options);\n p.log.info(`Found ${tasks.length} tasks to complete`);\n\n // Process each task\n for (let i = 0; i < tasks.length; i++) {\n const task = tasks[i];\n if (!task) continue;\n\n console.log(\"\\n\" + chalk.bold(`Task ${i + 1}/${tasks.length}: ${task.title}`));\n\n await executeTask(task, {\n maxIterations,\n minQuality,\n skipReview: !options.review,\n });\n }\n\n p.outro(chalk.green(\"Build complete!\"));\n}\n\ninterface Task {\n id: string;\n title: string;\n description: string;\n}\n\ninterface ExecuteOptions {\n maxIterations: number;\n minQuality: number;\n skipReview: boolean;\n}\n\nasync function executeTask(_task: Task, options: ExecuteOptions): Promise<void> {\n const spinner = p.spinner();\n let iteration = 1;\n let score = 0;\n let previousScore = 0;\n\n do {\n // Generate code\n spinner.start(`Iteration ${iteration}: Generating code...`);\n await simulateDelay(2000);\n spinner.stop(`Iteration ${iteration}: Code generated.`);\n\n // Run tests\n spinner.start(`Iteration ${iteration}: Running tests...`);\n await simulateDelay(1500);\n spinner.stop(`Iteration ${iteration}: Tests passed.`);\n\n // Calculate quality\n spinner.start(`Iteration ${iteration}: Evaluating quality...`);\n await simulateDelay(1000);\n previousScore = score;\n score = Math.min(100, 70 + iteration * 8 + Math.random() * 5);\n spinner.stop(`Iteration ${iteration}: Quality score: ${score.toFixed(0)}/100`);\n\n // Check convergence\n if (score >= options.minQuality) {\n const converged = Math.abs(score - previousScore) < 2;\n if (converged || options.skipReview) {\n p.log.success(`Task completed in ${iteration} iterations with score ${score.toFixed(0)}`);\n break;\n }\n }\n\n // Analyze improvements\n if (iteration < options.maxIterations) {\n spinner.start(`Iteration ${iteration}: Analyzing improvements...`);\n await simulateDelay(1000);\n spinner.stop(`Iteration ${iteration}: Improvements identified.`);\n }\n\n iteration++;\n } while (iteration <= options.maxIterations);\n\n if (score < options.minQuality) {\n p.log.warn(`Task completed with score ${score.toFixed(0)} (below threshold ${options.minQuality})`);\n }\n}\n\nasync function loadTasks(_options: BuildOptions): Promise<Task[]> {\n // TODO: Load from .coco/planning/backlog.json\n // Placeholder tasks for demonstration\n return [\n { id: \"task-001\", title: \"Create user entity\", description: \"Create the User entity with validation\" },\n { id: \"task-002\", title: \"Implement registration\", description: \"Create registration endpoint\" },\n { id: \"task-003\", title: \"Add authentication\", description: \"Implement JWT authentication\" },\n ];\n}\n\ninterface ProjectState {\n hasProject: boolean;\n hasPlan: boolean;\n}\n\nasync function checkProjectState(): Promise<ProjectState> {\n const fs = await import(\"node:fs/promises\");\n\n let hasProject = false;\n let hasPlan = false;\n\n try {\n await fs.access(\".coco\");\n hasProject = true;\n } catch {\n // No project\n }\n\n try {\n await fs.access(\".coco/planning/backlog.json\");\n hasPlan = true;\n } catch {\n // No plan\n }\n\n return { hasProject, hasPlan };\n}\n\nfunction simulateDelay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","/**\n * Status command - Show current project status and progress\n */\n\nimport { Command } from \"commander\";\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { loadConfig, findConfigPath } from \"../../config/loader.js\";\nimport type { CocoConfig } from \"../../config/schema.js\";\n\n/**\n * Options for status command\n */\nexport interface StatusOptions {\n cwd?: string;\n verbose?: boolean;\n detailed?: boolean;\n json?: boolean;\n}\n\n/**\n * Phase status type\n */\nexport type PhaseStatus = \"pending\" | \"in_progress\" | \"completed\" | \"failed\";\n\n/**\n * Phase names\n */\nexport type PhaseName = \"converge\" | \"orchestrate\" | \"complete\" | \"output\" | \"idle\";\n\n/**\n * Project state\n */\nexport interface ProjectState {\n name: string;\n currentPhase: PhaseName;\n progress: number;\n currentTask?: {\n id: string;\n title: string;\n iteration: number;\n score: number;\n };\n sprint?: {\n id: string;\n name: string;\n completed: number;\n total: number;\n avgQuality: number;\n tasks: Array<{\n id: string;\n title: string;\n status: \"pending\" | \"in_progress\" | \"completed\";\n score?: number;\n }>;\n };\n metrics?: {\n averageQuality: number;\n testCoverage: number;\n securityIssues: number;\n };\n checkpoints: string[];\n lastCheckpoint?: {\n timestamp: string;\n canResume: boolean;\n };\n}\n\n/**\n * Status result\n */\nexport interface StatusResult {\n project: string;\n phase: PhaseName;\n progress: number;\n sprint?: ProjectState[\"sprint\"];\n metrics?: ProjectState[\"metrics\"];\n checkpoints: string[];\n}\n\n/**\n * Register status command\n */\nexport function registerStatusCommand(program: Command): void {\n program\n .command(\"status\")\n .description(\"Show current project status and progress\")\n .option(\"-d, --detailed\", \"Show detailed status\")\n .option(\"-v, --verbose\", \"Show verbose output including checkpoints\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (options: StatusOptions) => {\n try {\n await runStatus({ ...options, cwd: process.cwd() });\n } catch (error) {\n p.log.error(\n error instanceof Error ? error.message : \"An error occurred\"\n );\n process.exit(1);\n }\n });\n}\n\n/**\n * Run status command programmatically\n */\nexport async function runStatus(options: StatusOptions = {}): Promise<StatusResult> {\n const cwd = options.cwd || process.cwd();\n\n // Find configuration\n const configPath = await findConfigPath(cwd);\n\n if (!configPath) {\n p.log.warning(\"No project found. Run 'coco init' first.\");\n return {\n project: \"\",\n phase: \"idle\",\n progress: 0,\n checkpoints: [],\n };\n }\n\n const config = await loadConfig(configPath);\n\n // Load state\n const state = await loadProjectState(cwd, config);\n\n // Output as JSON if requested\n if (options.json) {\n console.log(JSON.stringify(state, null, 2));\n return {\n project: state.name,\n phase: state.currentPhase,\n progress: state.progress,\n sprint: state.sprint,\n metrics: state.metrics,\n checkpoints: state.checkpoints,\n };\n }\n\n // Display status\n p.log.info(chalk.bold(`Project: ${state.name}`));\n p.log.info(`Phase: ${formatPhaseStatus(state.currentPhase, getPhaseStatusForPhase(state.currentPhase))}`);\n p.log.info(`Progress: ${formatProgress(state.progress)}`);\n\n // Show sprint info\n if (state.sprint) {\n p.log.info(`Sprint: ${state.sprint.name} (${state.sprint.completed}/${state.sprint.total} tasks)`);\n }\n\n // Show quality metrics if verbose\n if (options.verbose && state.metrics) {\n p.log.info(`Average Quality: ${state.metrics.averageQuality}/100`);\n p.log.info(`Test Coverage: ${state.metrics.testCoverage}%`);\n p.log.info(`Security Issues: ${state.metrics.securityIssues}`);\n }\n\n // Show checkpoints if verbose\n if (options.verbose && state.checkpoints.length > 0) {\n p.log.info(`Checkpoints: ${state.checkpoints.length} available (checkpoint: ${state.checkpoints[0]})`);\n }\n\n return {\n project: state.name,\n phase: state.currentPhase,\n progress: state.progress,\n sprint: state.sprint,\n metrics: state.metrics,\n checkpoints: state.checkpoints,\n };\n}\n\n/**\n * Format phase status with icons\n */\nexport function formatPhaseStatus(phase: string, status: PhaseStatus): string {\n const icons: Record<PhaseStatus, string> = {\n pending: \"○\",\n in_progress: \"→\",\n completed: \"✓\",\n failed: \"✗\",\n };\n\n const colors: Record<PhaseStatus, (s: string) => string> = {\n pending: chalk.gray,\n in_progress: chalk.yellow,\n completed: chalk.green,\n failed: chalk.red,\n };\n\n const icon = icons[status];\n const color = colors[status];\n const phaseName = phase.charAt(0).toUpperCase() + phase.slice(1);\n\n return color(`${icon} ${phaseName}`);\n}\n\n/**\n * Calculate progress percentage\n */\nexport function calculateProgress(completed: number, total: number): number {\n if (total === 0) return 0;\n return Math.round((completed / total) * 100);\n}\n\n/**\n * Format progress bar\n */\nfunction formatProgress(progress: number): string {\n const percentage = Math.round(progress * 100);\n const barLength = 20;\n const filled = Math.round(barLength * progress);\n const empty = barLength - filled;\n const bar = chalk.green(\"█\".repeat(filled)) + chalk.dim(\"░\".repeat(empty));\n return `[${bar}] ${percentage}%`;\n}\n\n/**\n * Get phase status based on current phase\n */\nfunction getPhaseStatusForPhase(phase: PhaseName): PhaseStatus {\n if (phase === \"idle\") return \"pending\";\n return \"in_progress\";\n}\n\n/**\n * Load project state from disk\n */\nasync function loadProjectState(cwd: string, config: CocoConfig): Promise<ProjectState> {\n const fs = await import(\"node:fs/promises\");\n const path = await import(\"node:path\");\n\n const statePath = path.join(cwd, \".coco\", \"state.json\");\n const backlogPath = path.join(cwd, \".coco\", \"planning\", \"backlog.json\");\n const checkpointDir = path.join(cwd, \".coco\", \"checkpoints\");\n\n let currentPhase: PhaseName = \"idle\";\n let metrics: ProjectState[\"metrics\"] | undefined;\n let sprint: ProjectState[\"sprint\"] | undefined;\n let checkpoints: string[] = [];\n\n // Load state\n try {\n const stateContent = await fs.readFile(statePath, \"utf-8\");\n const stateData = JSON.parse(stateContent);\n currentPhase = stateData.currentPhase || \"idle\";\n metrics = stateData.metrics;\n } catch {\n // No state file yet\n }\n\n // Load backlog for sprint info\n try {\n const backlogContent = await fs.readFile(backlogPath, \"utf-8\");\n const backlogData = JSON.parse(backlogContent);\n\n if (backlogData.currentSprint) {\n const tasks = backlogData.tasks || [];\n const completedTasks = tasks.filter((t: { status: string }) => t.status === \"completed\");\n\n sprint = {\n id: backlogData.currentSprint.id,\n name: backlogData.currentSprint.name,\n completed: completedTasks.length,\n total: tasks.length,\n avgQuality: 0,\n tasks: tasks.map((t: { id: string; title?: string; status: string; score?: number }) => ({\n id: t.id,\n title: t.title || t.id,\n status: t.status as \"pending\" | \"in_progress\" | \"completed\",\n score: t.score,\n })),\n };\n }\n } catch {\n // No backlog yet\n }\n\n // Load checkpoints\n try {\n const files = await fs.readdir(checkpointDir);\n checkpoints = files\n .filter((f: string) => f.endsWith(\".json\"))\n .sort()\n .reverse();\n } catch {\n // No checkpoints yet\n }\n\n const totalTasks = sprint?.total || 0;\n const completedTasks = sprint?.completed || 0;\n const progress = totalTasks > 0 ? completedTasks / totalTasks : 0;\n\n return {\n name: config.project?.name || \"my-project\",\n currentPhase,\n progress,\n sprint,\n metrics,\n checkpoints,\n lastCheckpoint: checkpoints.length > 0\n ? {\n timestamp: new Date().toISOString(),\n canResume: true,\n }\n : undefined,\n };\n}\n","import { Command } from \"commander\";\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\n\nexport function registerResumeCommand(program: Command): void {\n program\n .command(\"resume\")\n .description(\"Resume from the last checkpoint after an interruption\")\n .option(\"-c, --checkpoint <id>\", \"Resume from a specific checkpoint\")\n .option(\"--list\", \"List available checkpoints\")\n .option(\"--force\", \"Force resume even if state is inconsistent\")\n .action(async (options: ResumeOptions) => {\n await runResume(options);\n });\n}\n\ninterface ResumeOptions {\n checkpoint?: string;\n list?: boolean;\n force?: boolean;\n}\n\nasync function runResume(options: ResumeOptions): Promise<void> {\n p.intro(chalk.cyan(\"Corbat-Coco Resume\"));\n\n // Check for project\n const hasProject = await checkProjectExists();\n if (!hasProject) {\n p.log.error(\"No Corbat-Coco project found.\");\n process.exit(1);\n }\n\n // List checkpoints if requested\n if (options.list) {\n await listCheckpoints();\n return;\n }\n\n // Find checkpoint to resume from\n const checkpoint = options.checkpoint\n ? await loadCheckpoint(options.checkpoint)\n : await findLatestCheckpoint();\n\n if (!checkpoint) {\n p.log.error(\"No checkpoint found to resume from.\");\n process.exit(1);\n }\n\n // Display checkpoint info\n console.log(chalk.bold(\"\\nCheckpoint Information:\"));\n console.log(chalk.dim(\" ID: \") + checkpoint.id);\n console.log(chalk.dim(\" Created: \") + checkpoint.timestamp);\n console.log(chalk.dim(\" Phase: \") + checkpoint.phase);\n console.log(chalk.dim(\" Task: \") + (checkpoint.currentTask || \"None\"));\n\n // Validate checkpoint\n const validation = await validateCheckpoint(checkpoint);\n if (!validation.valid && !options.force) {\n p.log.error(\"Checkpoint validation failed:\");\n for (const issue of validation.issues) {\n console.log(chalk.red(\" - \" + issue));\n }\n console.log(chalk.dim(\"\\nUse --force to resume anyway (may cause issues).\"));\n process.exit(1);\n }\n\n // Confirm resume\n const shouldResume = await p.confirm({\n message: `Resume from checkpoint ${checkpoint.id}?`,\n });\n\n if (p.isCancel(shouldResume) || !shouldResume) {\n p.cancel(\"Resume cancelled.\");\n process.exit(0);\n }\n\n // Restore state\n const spinner = p.spinner();\n spinner.start(\"Restoring state from checkpoint...\");\n\n try {\n await restoreFromCheckpoint(checkpoint);\n spinner.stop(\"State restored successfully.\");\n } catch (error) {\n spinner.stop(\"Failed to restore state.\");\n throw error;\n }\n\n // Continue execution\n p.log.success(`Resuming from phase: ${checkpoint.phase}`);\n p.outro(chalk.green(\"Ready to continue. Run 'coco build' to proceed.\"));\n}\n\ninterface Checkpoint {\n id: string;\n timestamp: string;\n phase: string;\n currentTask: string | null;\n completedTasks: string[];\n canResume: boolean;\n}\n\ninterface ValidationResult {\n valid: boolean;\n issues: string[];\n}\n\nasync function listCheckpoints(): Promise<void> {\n // TODO: Load from .coco/checkpoints/\n const checkpoints: Checkpoint[] = [\n {\n id: \"cp-2024-01-15-001\",\n timestamp: \"2024-01-15T10:30:00Z\",\n phase: \"complete\",\n currentTask: \"task-003\",\n completedTasks: [\"task-001\", \"task-002\"],\n canResume: true,\n },\n {\n id: \"cp-2024-01-15-002\",\n timestamp: \"2024-01-15T11:00:00Z\",\n phase: \"complete\",\n currentTask: \"task-003\",\n completedTasks: [\"task-001\", \"task-002\"],\n canResume: true,\n },\n ];\n\n console.log(chalk.bold(\"\\nAvailable Checkpoints:\"));\n console.log(\"\");\n\n for (const cp of checkpoints) {\n const status = cp.canResume ? chalk.green(\"\") : chalk.red(\"\");\n console.log(` ${status} ${chalk.cyan(cp.id)}`);\n console.log(chalk.dim(` Created: ${cp.timestamp}`));\n console.log(chalk.dim(` Phase: ${cp.phase}`));\n console.log(chalk.dim(` Task: ${cp.currentTask || \"None\"}`));\n console.log(\"\");\n }\n}\n\nasync function loadCheckpoint(id: string): Promise<Checkpoint | null> {\n // TODO: Load specific checkpoint\n return {\n id,\n timestamp: new Date().toISOString(),\n phase: \"complete\",\n currentTask: \"task-003\",\n completedTasks: [\"task-001\", \"task-002\"],\n canResume: true,\n };\n}\n\nasync function findLatestCheckpoint(): Promise<Checkpoint | null> {\n // TODO: Find latest valid checkpoint\n return {\n id: \"cp-2024-01-15-002\",\n timestamp: new Date().toISOString(),\n phase: \"complete\",\n currentTask: \"task-003\",\n completedTasks: [\"task-001\", \"task-002\"],\n canResume: true,\n };\n}\n\nasync function validateCheckpoint(_checkpoint: Checkpoint): Promise<ValidationResult> {\n const issues: string[] = [];\n\n // TODO: Implement actual validation\n // - Check if files still exist\n // - Check if state is consistent\n // - Check if dependencies are met\n\n return {\n valid: issues.length === 0,\n issues,\n };\n}\n\nasync function restoreFromCheckpoint(_checkpoint: Checkpoint): Promise<void> {\n // TODO: Implement actual state restoration\n await new Promise((resolve) => setTimeout(resolve, 1000));\n}\n\nasync function checkProjectExists(): Promise<boolean> {\n try {\n const fs = await import(\"node:fs/promises\");\n await fs.access(\".coco\");\n return true;\n } catch {\n return false;\n }\n}\n","import { Command } from \"commander\";\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\n\nexport function registerConfigCommand(program: Command): void {\n const configCmd = program\n .command(\"config\")\n .description(\"Manage Corbat-Coco configuration\");\n\n configCmd\n .command(\"get <key>\")\n .description(\"Get a configuration value\")\n .action(async (key: string) => {\n await runConfigGet(key);\n });\n\n configCmd\n .command(\"set <key> <value>\")\n .description(\"Set a configuration value\")\n .action(async (key: string, value: string) => {\n await runConfigSet(key, value);\n });\n\n configCmd\n .command(\"list\")\n .description(\"List all configuration values\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (options: { json?: boolean }) => {\n await runConfigList(options);\n });\n\n configCmd\n .command(\"init\")\n .description(\"Initialize configuration interactively\")\n .action(async () => {\n await runConfigInit();\n });\n}\n\nasync function runConfigGet(key: string): Promise<void> {\n const config = await loadConfig();\n const value = getNestedValue(config, key);\n\n if (value === undefined) {\n p.log.error(`Configuration key '${key}' not found.`);\n process.exit(1);\n }\n\n console.log(typeof value === \"object\" ? JSON.stringify(value, null, 2) : String(value));\n}\n\nasync function runConfigSet(key: string, value: string): Promise<void> {\n const config = await loadConfig();\n\n // Parse value (try JSON, fall back to string)\n let parsedValue: unknown;\n try {\n parsedValue = JSON.parse(value);\n } catch {\n parsedValue = value;\n }\n\n setNestedValue(config, key, parsedValue);\n await saveConfig(config);\n\n p.log.success(`Set ${key} = ${value}`);\n}\n\nasync function runConfigList(options: { json?: boolean }): Promise<void> {\n const config = await loadConfig();\n\n if (options.json) {\n console.log(JSON.stringify(config, null, 2));\n return;\n }\n\n console.log(chalk.bold(\"\\nCorbat-Coco Configuration:\\n\"));\n printConfig(config, \"\");\n}\n\nasync function runConfigInit(): Promise<void> {\n p.intro(chalk.cyan(\"Corbat-Coco Configuration Setup\"));\n\n // API Key\n const apiKey = await p.text({\n message: \"Enter your Anthropic API key:\",\n placeholder: \"sk-ant-...\",\n validate: (value) => {\n if (!value) return \"API key is required\";\n if (!value.startsWith(\"sk-ant-\")) return \"Invalid API key format\";\n return undefined;\n },\n });\n\n if (p.isCancel(apiKey)) {\n p.cancel(\"Configuration cancelled.\");\n process.exit(0);\n }\n\n // Model\n const model = await p.select({\n message: \"Select the default model:\",\n options: [\n { value: \"claude-sonnet-4-20250514\", label: \"Claude Sonnet 4\", hint: \"Recommended for coding\" },\n { value: \"claude-opus-4-20250514\", label: \"Claude Opus 4\", hint: \"Most capable\" },\n { value: \"claude-3-5-sonnet-20241022\", label: \"Claude 3.5 Sonnet\", hint: \"Fast and capable\" },\n ],\n });\n\n if (p.isCancel(model)) {\n p.cancel(\"Configuration cancelled.\");\n process.exit(0);\n }\n\n // Quality threshold\n const quality = await p.text({\n message: \"Minimum quality score (0-100):\",\n placeholder: \"85\",\n initialValue: \"85\",\n validate: (value) => {\n const num = parseInt(value, 10);\n if (isNaN(num) || num < 0 || num > 100) return \"Must be a number between 0 and 100\";\n return undefined;\n },\n });\n\n if (p.isCancel(quality)) {\n p.cancel(\"Configuration cancelled.\");\n process.exit(0);\n }\n\n // Save configuration\n const config = {\n provider: {\n type: \"anthropic\",\n apiKey: apiKey as string,\n model: model as string,\n },\n quality: {\n minScore: parseInt(quality as string, 10),\n minCoverage: 80,\n maxIterations: 10,\n },\n };\n\n await saveConfig(config);\n\n p.outro(chalk.green(\"Configuration saved to .coco/config.json\"));\n}\n\n// Helper functions\n\ntype ConfigObject = Record<string, unknown>;\n\nasync function loadConfig(): Promise<ConfigObject> {\n // TODO: Load from .coco/config.json\n return {\n provider: {\n type: \"anthropic\",\n model: \"claude-sonnet-4-20250514\",\n },\n quality: {\n minScore: 85,\n minCoverage: 80,\n maxIterations: 10,\n },\n persistence: {\n checkpointInterval: 300000,\n maxCheckpoints: 50,\n },\n };\n}\n\nasync function saveConfig(config: ConfigObject): Promise<void> {\n // TODO: Save to .coco/config.json\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(\".coco\", { recursive: true });\n await fs.writeFile(\".coco/config.json\", JSON.stringify(config, null, 2));\n}\n\nfunction getNestedValue(obj: ConfigObject, path: string): unknown {\n const keys = path.split(\".\");\n let current: unknown = obj;\n\n for (const key of keys) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n return undefined;\n }\n current = (current as ConfigObject)[key];\n }\n\n return current;\n}\n\nfunction setNestedValue(obj: ConfigObject, path: string, value: unknown): void {\n const keys = path.split(\".\");\n let current: ConfigObject = obj;\n\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (!key) continue;\n if (!(key in current) || typeof current[key] !== \"object\") {\n current[key] = {};\n }\n current = current[key] as ConfigObject;\n }\n\n const lastKey = keys[keys.length - 1];\n if (lastKey) {\n current[lastKey] = value;\n }\n}\n\nfunction printConfig(obj: unknown, prefix: string): void {\n if (obj === null || obj === undefined) {\n console.log(chalk.dim(prefix) + chalk.yellow(\"null\"));\n return;\n }\n\n if (typeof obj !== \"object\") {\n console.log(chalk.dim(prefix) + String(obj));\n return;\n }\n\n for (const [key, value] of Object.entries(obj as ConfigObject)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n\n if (typeof value === \"object\" && value !== null && !Array.isArray(value)) {\n printConfig(value, fullKey);\n } else {\n const displayValue = typeof value === \"string\" && value.startsWith(\"sk-\")\n ? chalk.dim(\"[hidden]\")\n : chalk.cyan(JSON.stringify(value));\n console.log(` ${chalk.dim(fullKey + \":\")} ${displayValue}`);\n }\n }\n}\n","#!/usr/bin/env node\n\n/**\n * Corbat-Coco CLI Entry Point\n */\n\nimport { Command } from \"commander\";\nimport { VERSION } from \"../version.js\";\nimport { registerInitCommand } from \"./commands/init.js\";\nimport { registerPlanCommand } from \"./commands/plan.js\";\nimport { registerBuildCommand } from \"./commands/build.js\";\nimport { registerStatusCommand } from \"./commands/status.js\";\nimport { registerResumeCommand } from \"./commands/resume.js\";\nimport { registerConfigCommand } from \"./commands/config.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"coco\")\n .description(\"Corbat-Coco: Autonomous Coding Agent with Self-Review and Quality Convergence\")\n .version(VERSION, \"-v, --version\", \"Output the current version\");\n\n// Register commands\nregisterInitCommand(program);\nregisterPlanCommand(program);\nregisterBuildCommand(program);\nregisterStatusCommand(program);\nregisterResumeCommand(program);\nregisterConfigCommand(program);\n\n// Parse and execute\nprogram.parseAsync(process.argv).catch((error: unknown) => {\n console.error(\"Fatal error:\", error);\n process.exit(1);\n});\n"]}
|