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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/errors.ts","../src/utils/logger.ts","../src/tools/registry.ts","../src/tools/test.ts","../src/version.ts","../src/phases/converge/prompts.ts","../src/phases/converge/discovery.ts","../src/phases/converge/discovery-parsers.ts","../src/phases/converge/specification.ts","../src/phases/converge/specification-types.ts","../src/phases/converge/specification-helpers.ts","../src/phases/converge/specification-markdown.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.ts","../src/phases/orchestrate/architecture-parsers.ts","../src/phases/orchestrate/architecture-markdown.ts","../src/phases/orchestrate/adr.ts","../src/phases/orchestrate/backlog.ts","../src/phases/orchestrate/executor.ts","../src/phases/complete/types.ts","../src/phases/complete/prompts.ts","../src/phases/complete/generator.ts","../src/phases/complete/reviewer.ts","../src/phases/complete/iterator.ts","../src/phases/complete/executor.ts","../src/phases/complete/llm-adapter.ts","../src/phases/output/types.ts","../src/phases/output/cicd.ts","../src/phases/output/docker.ts","../src/phases/output/docs.ts","../src/phases/output/executor.ts","../src/providers/anthropic.ts","../src/providers/index.ts","../src/orchestrator/orchestrator.ts","../src/config/schema.ts","../src/config/loader.ts","../src/tools/index.ts","../src/tools/file.ts","../src/tools/bash.ts","../src/tools/git.ts","../src/tools/quality.ts","../src/quality/types.ts","../src/index.ts"],"names":["fs","path","z","execa","randomUUID","fillPrompt","tools","glob","getCoverageTool"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 * Logging system for Corbat-Coco\n * Based on tslog with structured output\n */\n\nimport { Logger, ILogObj } from \"tslog\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Log levels\n */\nexport type LogLevel = \"silly\" | \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\n/**\n * Logger configuration\n */\nexport interface LoggerConfig {\n name: string;\n level: LogLevel;\n prettyPrint: boolean;\n logToFile: boolean;\n logDir?: string;\n}\n\n/**\n * Default logger configuration\n */\nconst DEFAULT_CONFIG: LoggerConfig = {\n name: \"coco\",\n level: \"info\",\n prettyPrint: true,\n logToFile: false,\n};\n\n/**\n * Map log level string to tslog minLevel number\n */\nfunction levelToNumber(level: LogLevel): number {\n const levels: Record<LogLevel, number> = {\n silly: 0,\n trace: 1,\n debug: 2,\n info: 3,\n warn: 4,\n error: 5,\n fatal: 6,\n };\n return levels[level];\n}\n\n/**\n * Create a logger instance\n */\nexport function createLogger(config: Partial<LoggerConfig> = {}): Logger<ILogObj> {\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\n\n const logger = new Logger<ILogObj>({\n name: finalConfig.name,\n minLevel: levelToNumber(finalConfig.level),\n prettyLogTemplate: finalConfig.prettyPrint\n ? \"{{yyyy}}-{{mm}}-{{dd}} {{hh}}:{{MM}}:{{ss}} {{logLevelName}} [{{name}}] \"\n : undefined,\n prettyLogTimeZone: \"local\",\n stylePrettyLogs: finalConfig.prettyPrint,\n });\n\n // Add file transport if enabled\n if (finalConfig.logToFile && finalConfig.logDir) {\n setupFileLogging(logger, finalConfig.logDir, finalConfig.name);\n }\n\n return logger;\n}\n\n/**\n * Setup file logging\n */\nfunction setupFileLogging(\n logger: Logger<ILogObj>,\n logDir: string,\n name: string\n): void {\n // Ensure log directory exists\n if (!fs.existsSync(logDir)) {\n fs.mkdirSync(logDir, { recursive: true });\n }\n\n const logFile = path.join(logDir, `${name}.log`);\n\n logger.attachTransport((logObj) => {\n const line = JSON.stringify(logObj) + \"\\n\";\n fs.appendFileSync(logFile, line);\n });\n}\n\n/**\n * Create a child logger with a specific name\n */\nexport function createChildLogger(\n parent: Logger<ILogObj>,\n name: string\n): Logger<ILogObj> {\n return parent.getSubLogger({ name });\n}\n\n/**\n * Global logger instance\n */\nlet globalLogger: Logger<ILogObj> | null = null;\n\n/**\n * Get the global logger instance\n */\nexport function getLogger(): Logger<ILogObj> {\n if (!globalLogger) {\n globalLogger = createLogger();\n }\n return globalLogger;\n}\n\n/**\n * Set the global logger instance\n */\nexport function setLogger(logger: Logger<ILogObj>): void {\n globalLogger = logger;\n}\n\n/**\n * Initialize logging for a project\n */\nexport function initializeLogging(projectPath: string, level: LogLevel = \"info\"): Logger<ILogObj> {\n const logDir = path.join(projectPath, \".coco\", \"logs\");\n\n const logger = createLogger({\n name: \"coco\",\n level,\n prettyPrint: process.stdout.isTTY ?? true,\n logToFile: true,\n logDir,\n });\n\n setLogger(logger);\n return logger;\n}\n\n/**\n * Log a structured event (for analytics/debugging)\n */\nexport function logEvent(\n logger: Logger<ILogObj>,\n event: string,\n data: Record<string, unknown> = {}\n): void {\n logger.info({ event, ...data });\n}\n\n/**\n * Log execution timing\n */\nexport async function logTiming<T>(\n logger: Logger<ILogObj>,\n operation: string,\n fn: () => Promise<T>\n): Promise<T> {\n const start = performance.now();\n try {\n const result = await fn();\n const duration = performance.now() - start;\n logger.debug({ operation, durationMs: duration.toFixed(2), status: \"success\" });\n return result;\n } catch (error) {\n const duration = performance.now() - start;\n logger.error({ operation, durationMs: duration.toFixed(2), status: \"error\", error });\n throw error;\n }\n}\n","/**\n * Tool Registry for Corbat-Coco\n * Central management of all available tools\n */\n\nimport { z } from \"zod\";\n// ToolError reserved for future error handling\nimport { getLogger } from \"../utils/logger.js\";\n\n/**\n * Tool definition\n */\nexport interface ToolDefinition<TInput = unknown, TOutput = unknown> {\n name: string;\n description: string;\n category: ToolCategory;\n parameters: z.ZodSchema<TInput>;\n execute: (params: TInput) => Promise<TOutput>;\n}\n\n/**\n * Tool categories\n */\nexport type ToolCategory =\n | \"file\" // File operations\n | \"bash\" // Shell commands\n | \"git\" // Version control\n | \"test\" // Testing\n | \"quality\" // Code quality\n | \"build\" // Build tools\n | \"deploy\"; // Deployment\n\n/**\n * Tool execution result\n */\nexport interface ToolResult<T = unknown> {\n success: boolean;\n data?: T;\n error?: string;\n duration: number;\n}\n\n/**\n * Tool registry\n */\nexport class ToolRegistry {\n private tools: Map<string, ToolDefinition> = new Map();\n private logger = getLogger();\n\n /**\n * Register a tool\n */\n register<TInput, TOutput>(tool: ToolDefinition<TInput, TOutput>): void {\n if (this.tools.has(tool.name)) {\n this.logger.warn(`Tool '${tool.name}' already registered, overwriting`);\n }\n this.tools.set(tool.name, tool as ToolDefinition);\n this.logger.debug(`Registered tool: ${tool.name}`);\n }\n\n /**\n * Unregister a tool\n */\n unregister(name: string): boolean {\n const removed = this.tools.delete(name);\n if (removed) {\n this.logger.debug(`Unregistered tool: ${name}`);\n }\n return removed;\n }\n\n /**\n * Get a tool by name\n */\n get<TInput = unknown, TOutput = unknown>(\n name: string\n ): ToolDefinition<TInput, TOutput> | undefined {\n return this.tools.get(name) as ToolDefinition<TInput, TOutput> | undefined;\n }\n\n /**\n * Check if a tool exists\n */\n has(name: string): boolean {\n return this.tools.has(name);\n }\n\n /**\n * Get all tools\n */\n getAll(): ToolDefinition[] {\n return Array.from(this.tools.values());\n }\n\n /**\n * Get tools by category\n */\n getByCategory(category: ToolCategory): ToolDefinition[] {\n return this.getAll().filter((tool) => tool.category === category);\n }\n\n /**\n * Execute a tool\n */\n async execute<TInput, TOutput>(\n name: string,\n params: TInput\n ): Promise<ToolResult<TOutput>> {\n const startTime = performance.now();\n const tool = this.get<TInput, TOutput>(name);\n\n if (!tool) {\n return {\n success: false,\n error: `Tool '${name}' not found`,\n duration: performance.now() - startTime,\n };\n }\n\n try {\n // Validate parameters\n const validatedParams = tool.parameters.parse(params);\n\n // Execute tool\n this.logger.debug(`Executing tool: ${name}`, { params: validatedParams });\n const result = await tool.execute(validatedParams);\n\n const duration = performance.now() - startTime;\n this.logger.debug(`Tool '${name}' completed`, { duration: `${duration.toFixed(2)}ms` });\n\n return {\n success: true,\n data: result,\n duration,\n };\n } catch (error) {\n const duration = performance.now() - startTime;\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n this.logger.error(`Tool '${name}' failed`, { error: errorMessage, duration });\n\n return {\n success: false,\n error: errorMessage,\n duration,\n };\n }\n }\n\n /**\n * Get tool definitions for LLM (simplified format)\n */\n getToolDefinitionsForLLM(): Array<{\n name: string;\n description: string;\n input_schema: Record<string, unknown>;\n }> {\n return this.getAll().map((tool) => ({\n name: tool.name,\n description: tool.description,\n // Convert Zod schema to JSON schema\n input_schema: zodToJsonSchema(tool.parameters),\n }));\n }\n}\n\n/**\n * Convert Zod schema to JSON schema (simplified)\n */\nfunction zodToJsonSchema(schema: z.ZodSchema): Record<string, unknown> {\n // For now, use a basic conversion\n // In production, use a library like zod-to-json-schema\n try {\n const jsonSchema = (schema as z.ZodObject<z.ZodRawShape>)._def;\n\n if (jsonSchema.typeName === \"ZodObject\") {\n const shape = (schema as z.ZodObject<z.ZodRawShape>).shape;\n const properties: Record<string, unknown> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n const fieldSchema = value as z.ZodTypeAny;\n properties[key] = zodFieldToJsonSchema(fieldSchema);\n\n // Check if required (not optional)\n if (!fieldSchema.isOptional()) {\n required.push(key);\n }\n }\n\n return {\n type: \"object\",\n properties,\n required: required.length > 0 ? required : undefined,\n };\n }\n\n return { type: \"object\" };\n } catch {\n return { type: \"object\" };\n }\n}\n\n/**\n * Convert a Zod field to JSON schema\n */\nfunction zodFieldToJsonSchema(field: z.ZodTypeAny): Record<string, unknown> {\n const def = field._def;\n\n switch (def.typeName) {\n case \"ZodString\":\n return { type: \"string\" };\n case \"ZodNumber\":\n return { type: \"number\" };\n case \"ZodBoolean\":\n return { type: \"boolean\" };\n case \"ZodArray\":\n return {\n type: \"array\",\n items: zodFieldToJsonSchema(def.type),\n };\n case \"ZodOptional\":\n return zodFieldToJsonSchema(def.innerType);\n case \"ZodDefault\":\n return zodFieldToJsonSchema(def.innerType);\n case \"ZodEnum\":\n return {\n type: \"string\",\n enum: def.values,\n };\n default:\n return {};\n }\n}\n\n/**\n * Global tool registry instance\n */\nlet globalRegistry: ToolRegistry | null = null;\n\n/**\n * Get the global tool registry\n */\nexport function getToolRegistry(): ToolRegistry {\n if (!globalRegistry) {\n globalRegistry = new ToolRegistry();\n }\n return globalRegistry;\n}\n\n/**\n * Create a new tool registry\n */\nexport function createToolRegistry(): ToolRegistry {\n return new ToolRegistry();\n}\n\n/**\n * Helper to create a tool definition with type safety\n */\nexport function defineTool<TInput, TOutput>(\n definition: ToolDefinition<TInput, TOutput>\n): ToolDefinition<TInput, TOutput> {\n return definition;\n}\n","/**\n * Test tools for Corbat-Coco\n * Run tests and collect coverage\n */\n\nimport { z } from \"zod\";\nimport { execa } from \"execa\";\nimport path from \"node:path\";\nimport fs from \"node:fs/promises\";\nimport { defineTool, type ToolDefinition } from \"./registry.js\";\nimport { ToolError } from \"../utils/errors.js\";\n\n/**\n * Test result interface\n */\nexport interface TestResult {\n passed: number;\n failed: number;\n skipped: number;\n total: number;\n duration: number;\n success: boolean;\n failures: TestFailure[];\n coverage?: CoverageResult;\n}\n\n/**\n * Test failure interface\n */\nexport interface TestFailure {\n name: string;\n file: string;\n message: string;\n stack?: string;\n}\n\n/**\n * Coverage result interface\n */\nexport interface CoverageResult {\n lines: number;\n branches: number;\n functions: number;\n statements: number;\n}\n\n/**\n * Detect test framework in project\n */\nasync function detectTestFramework(cwd: string): Promise<string | null> {\n try {\n const pkgPath = path.join(cwd, \"package.json\");\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent) as {\n devDependencies?: Record<string, string>;\n dependencies?: Record<string, string>;\n };\n\n const deps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n // Check for common test frameworks\n if (deps.vitest) return \"vitest\";\n if (deps.jest) return \"jest\";\n if (deps.mocha) return \"mocha\";\n if (deps.ava) return \"ava\";\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Run tests tool\n */\nexport const runTestsTool: ToolDefinition<\n {\n cwd?: string;\n pattern?: string;\n coverage?: boolean;\n framework?: string;\n watch?: boolean;\n },\n TestResult\n> = defineTool({\n name: \"run_tests\",\n description: \"Run tests in the project\",\n category: \"test\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Project directory\"),\n pattern: z.string().optional().describe(\"Test file pattern\"),\n coverage: z.boolean().optional().default(false).describe(\"Collect coverage\"),\n framework: z.string().optional().describe(\"Test framework (vitest, jest, mocha)\"),\n watch: z.boolean().optional().default(false).describe(\"Watch mode\"),\n }),\n async execute({ cwd, pattern, coverage, framework, watch }) {\n const projectDir = cwd ?? process.cwd();\n const detectedFramework = framework ?? (await detectTestFramework(projectDir));\n\n if (!detectedFramework) {\n throw new ToolError(\"No test framework detected. Install vitest, jest, or mocha.\", {\n tool: \"run_tests\",\n });\n }\n\n const startTime = performance.now();\n\n try {\n const args: string[] = [];\n let command = \"npx\";\n\n switch (detectedFramework) {\n case \"vitest\":\n args.push(\"vitest\", \"run\");\n if (coverage) args.push(\"--coverage\");\n if (pattern) args.push(pattern);\n if (watch) args.splice(1, 1); // Remove 'run' for watch mode\n args.push(\"--reporter=json\");\n break;\n\n case \"jest\":\n args.push(\"jest\");\n if (coverage) args.push(\"--coverage\");\n if (pattern) args.push(pattern);\n if (watch) args.push(\"--watch\");\n args.push(\"--json\");\n break;\n\n case \"mocha\":\n args.push(\"mocha\");\n if (pattern) args.push(pattern);\n args.push(\"--reporter\", \"json\");\n break;\n\n default:\n throw new ToolError(`Unsupported test framework: ${detectedFramework}`, {\n tool: \"run_tests\",\n });\n }\n\n const result = await execa(command, args, {\n cwd: projectDir,\n reject: false,\n timeout: 300000, // 5 minute timeout\n });\n\n const duration = performance.now() - startTime;\n\n // Parse results based on framework\n return parseTestResults(\n detectedFramework,\n result.stdout,\n result.stderr,\n result.exitCode ?? 0,\n duration\n );\n } catch (error) {\n throw new ToolError(\n `Test execution failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"run_tests\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Parse test results from framework output\n */\nfunction parseTestResults(\n framework: string,\n stdout: string,\n stderr: string,\n exitCode: number,\n duration: number\n): TestResult {\n // Try to parse JSON output\n try {\n const jsonMatch = stdout.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n const json = JSON.parse(jsonMatch[0]);\n\n if (framework === \"vitest\" || framework === \"jest\") {\n return parseJestLikeResults(json, duration);\n }\n }\n } catch {\n // Fall back to basic parsing\n }\n\n // Basic parsing from output\n const passMatch = stdout.match(/(\\d+)\\s*(?:passed|passing)/i);\n const failMatch = stdout.match(/(\\d+)\\s*(?:failed|failing)/i);\n const skipMatch = stdout.match(/(\\d+)\\s*(?:skipped|pending)/i);\n\n const passed = passMatch ? parseInt(passMatch[1] ?? \"0\", 10) : 0;\n const failed = failMatch ? parseInt(failMatch[1] ?? \"0\", 10) : 0;\n const skipped = skipMatch ? parseInt(skipMatch[1] ?? \"0\", 10) : 0;\n\n return {\n passed,\n failed,\n skipped,\n total: passed + failed + skipped,\n duration,\n success: exitCode === 0,\n failures: failed > 0 ? parseFailuresFromOutput(stderr || stdout) : [],\n };\n}\n\n/**\n * Parse Jest/Vitest-like JSON results\n */\nfunction parseJestLikeResults(\n json: {\n numPassedTests?: number;\n numFailedTests?: number;\n numPendingTests?: number;\n testResults?: Array<{\n assertionResults?: Array<{\n title?: string;\n status?: string;\n failureMessages?: string[];\n }>;\n }>;\n },\n duration: number\n): TestResult {\n const passed = json.numPassedTests ?? 0;\n const failed = json.numFailedTests ?? 0;\n const skipped = json.numPendingTests ?? 0;\n\n const failures: TestFailure[] = [];\n\n if (json.testResults) {\n for (const suite of json.testResults) {\n if (suite.assertionResults) {\n for (const test of suite.assertionResults) {\n if (test.status === \"failed\" && test.failureMessages) {\n failures.push({\n name: test.title ?? \"Unknown test\",\n file: \"\",\n message: test.failureMessages.join(\"\\n\"),\n });\n }\n }\n }\n }\n }\n\n return {\n passed,\n failed,\n skipped,\n total: passed + failed + skipped,\n duration,\n success: failed === 0,\n failures,\n };\n}\n\n/**\n * Parse failures from raw output\n */\nfunction parseFailuresFromOutput(output: string): TestFailure[] {\n const failures: TestFailure[] = [];\n\n // Try to find failure patterns\n const failureMatches = output.matchAll(/(?:FAIL|Error|AssertionError)[\\s:]+(.+?)(?:\\n|$)/gi);\n\n for (const match of failureMatches) {\n failures.push({\n name: \"Test failure\",\n file: \"\",\n message: match[1] ?? \"Unknown error\",\n });\n }\n\n return failures;\n}\n\n/**\n * Get coverage tool\n */\nexport const getCoverageTool: ToolDefinition<\n { cwd?: string; format?: \"summary\" | \"detailed\" },\n CoverageResult & { report?: string }\n> = defineTool({\n name: \"get_coverage\",\n description: \"Get test coverage report\",\n category: \"test\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Project directory\"),\n format: z.enum([\"summary\", \"detailed\"]).optional().default(\"summary\").describe(\"Report format\"),\n }),\n async execute({ cwd, format }) {\n const projectDir = cwd ?? process.cwd();\n\n try {\n // Try to read coverage from common locations\n const coverageLocations = [\n path.join(projectDir, \"coverage\", \"coverage-summary.json\"),\n path.join(projectDir, \"coverage\", \"coverage-final.json\"),\n path.join(projectDir, \".nyc_output\", \"coverage-summary.json\"),\n ];\n\n for (const location of coverageLocations) {\n try {\n const content = await fs.readFile(location, \"utf-8\");\n const coverage = JSON.parse(content) as {\n total?: {\n lines?: { pct?: number };\n branches?: { pct?: number };\n functions?: { pct?: number };\n statements?: { pct?: number };\n };\n };\n\n if (coverage.total) {\n return {\n lines: coverage.total.lines?.pct ?? 0,\n branches: coverage.total.branches?.pct ?? 0,\n functions: coverage.total.functions?.pct ?? 0,\n statements: coverage.total.statements?.pct ?? 0,\n report: format === \"detailed\" ? content : undefined,\n };\n }\n } catch {\n // Try next location\n }\n }\n\n throw new ToolError(\"Coverage data not found. Run tests with --coverage first.\", {\n tool: \"get_coverage\",\n });\n } catch (error) {\n if (error instanceof ToolError) throw error;\n\n throw new ToolError(\n `Failed to read coverage: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"get_coverage\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Run single test file tool\n */\nexport const runTestFileTool: ToolDefinition<\n { cwd?: string; file: string; framework?: string },\n TestResult\n> = defineTool({\n name: \"run_test_file\",\n description: \"Run tests in a specific file\",\n category: \"test\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Project directory\"),\n file: z.string().describe(\"Test file path\"),\n framework: z.string().optional().describe(\"Test framework\"),\n }),\n async execute({ cwd, file, framework }) {\n // Delegate to run_tests with the file as pattern\n return runTestsTool.execute({\n cwd,\n pattern: file,\n coverage: false,\n framework,\n watch: false,\n });\n },\n});\n\n/**\n * All test tools\n */\nexport const testTools = [runTestsTool, getCoverageTool, runTestFileTool];\n","/**\n * Corbat-Coco version\n */\nexport const VERSION = \"0.1.0\";\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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * 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 * Types for the COMPLETE phase\n *\n * This phase focuses on task execution with quality iteration\n */\n\nimport type { Task, TaskVersion, Sprint } from \"../../types/task.js\";\nimport type { QualityScores, QualityDimensions } from \"../../quality/types.js\";\n\n/**\n * Task execution result\n */\nexport interface TaskExecutionResult {\n taskId: string;\n success: boolean;\n versions: TaskVersion[];\n finalScore: number;\n converged: boolean;\n iterations: number;\n error?: string;\n}\n\n/**\n * Task execution context\n */\nexport interface TaskExecutionContext {\n task: Task;\n projectPath: string;\n sprint: Sprint;\n previousVersions: TaskVersion[];\n qualityConfig: QualityConfig;\n}\n\n/**\n * Quality configuration for iterations\n */\nexport interface QualityConfig {\n /** Minimum acceptable score */\n minScore: number;\n\n /** Minimum coverage percentage */\n minCoverage: number;\n\n /** Maximum iterations before giving up */\n maxIterations: number;\n\n /** Score improvement threshold for convergence */\n convergenceThreshold: number;\n\n /** Minimum iterations before considering convergence */\n minConvergenceIterations: number;\n}\n\n/**\n * Default quality configuration\n */\nexport const DEFAULT_QUALITY_CONFIG: QualityConfig = {\n minScore: 85,\n minCoverage: 80,\n maxIterations: 10,\n convergenceThreshold: 2,\n minConvergenceIterations: 2,\n};\n\n/**\n * Code generation request\n */\nexport interface CodeGenerationRequest {\n task: Task;\n context: string;\n previousCode?: string;\n feedback?: string;\n iteration: number;\n}\n\n/**\n * Code generation response\n */\nexport interface CodeGenerationResponse {\n files: GeneratedFile[];\n explanation: string;\n confidence: number;\n}\n\n/**\n * Generated file\n */\nexport interface GeneratedFile {\n path: string;\n content: string;\n action: \"create\" | \"modify\" | \"delete\";\n}\n\n/**\n * Code review result\n */\nexport interface CodeReviewResult {\n passed: boolean;\n scores: QualityScores;\n issues: ReviewIssue[];\n suggestions: ReviewSuggestion[];\n testResults: TestExecutionResult;\n}\n\n/**\n * Review issue\n */\nexport interface ReviewIssue {\n severity: \"critical\" | \"major\" | \"minor\" | \"info\";\n category: keyof QualityDimensions;\n message: string;\n file?: string;\n line?: number;\n suggestion?: string;\n}\n\n/**\n * Review suggestion\n */\nexport interface ReviewSuggestion {\n type: \"improvement\" | \"refactor\" | \"test\" | \"documentation\";\n description: string;\n priority: \"high\" | \"medium\" | \"low\";\n impact: number;\n}\n\n/**\n * Test execution result\n */\nexport interface TestExecutionResult {\n passed: number;\n failed: number;\n skipped: number;\n coverage: {\n lines: number;\n branches: number;\n functions: number;\n statements: number;\n };\n failures: TestFailureDetail[];\n duration: number;\n}\n\n/**\n * Test failure detail\n */\nexport interface TestFailureDetail {\n name: string;\n file: string;\n message: string;\n stack?: string;\n expected?: string;\n actual?: string;\n}\n\n/**\n * Iteration result\n */\nexport interface IterationResult {\n iteration: number;\n version: TaskVersion;\n review: CodeReviewResult;\n shouldContinue: boolean;\n reason: string;\n}\n\n/**\n * Convergence check result\n */\nexport interface ConvergenceCheck {\n converged: boolean;\n reason: string;\n scoreHistory: number[];\n improvement: number;\n}\n\n/**\n * Sprint execution result\n */\nexport interface SprintExecutionResult {\n sprintId: string;\n success: boolean;\n tasksCompleted: number;\n tasksTotal: number;\n averageQuality: number;\n totalIterations: number;\n taskResults: TaskExecutionResult[];\n duration: number;\n}\n\n/**\n * COMPLETE phase configuration\n */\nexport interface CompleteConfig {\n /** Quality configuration */\n quality: QualityConfig;\n\n /** Enable parallel task execution */\n parallelExecution: boolean;\n\n /** Maximum parallel tasks */\n maxParallelTasks: number;\n\n /** Save intermediate versions */\n saveVersions: boolean;\n\n /** Run tests after each iteration */\n runTestsEachIteration: boolean;\n\n /** Callback for progress updates */\n onProgress?: (progress: CompleteProgress) => void;\n\n /** Callback for user interaction */\n onUserInput?: (prompt: string) => Promise<string>;\n}\n\n/**\n * Default COMPLETE configuration\n */\nexport const DEFAULT_COMPLETE_CONFIG: CompleteConfig = {\n quality: DEFAULT_QUALITY_CONFIG,\n parallelExecution: false,\n maxParallelTasks: 3,\n saveVersions: true,\n runTestsEachIteration: true,\n};\n\n/**\n * Progress update\n */\nexport interface CompleteProgress {\n phase: \"executing\" | \"reviewing\" | \"iterating\" | \"complete\";\n sprintId: string;\n taskId?: string;\n taskTitle?: string;\n iteration?: number;\n currentScore?: number;\n tasksCompleted: number;\n tasksTotal: number;\n message: string;\n}\n\n/**\n * Version diff\n */\nexport interface VersionDiff {\n file: string;\n additions: number;\n deletions: number;\n diff: string;\n}\n\n/**\n * Rollback request\n */\nexport interface RollbackRequest {\n taskId: string;\n targetVersion: number;\n reason: string;\n}\n\n/**\n * Task state machine\n */\nexport type TaskState =\n | \"pending\"\n | \"generating\"\n | \"reviewing\"\n | \"iterating\"\n | \"testing\"\n | \"completed\"\n | \"failed\"\n | \"rolled_back\";\n\n/**\n * State transition\n */\nexport interface StateTransition {\n from: TaskState;\n to: TaskState;\n timestamp: Date;\n trigger: string;\n metadata?: Record<string, unknown>;\n}\n","/**\n * Prompts for the COMPLETE phase\n *\n * These prompts guide the LLM in code generation, review, and iteration\n */\n\n/**\n * System prompt for the code generation agent\n */\nexport const CODE_GENERATION_SYSTEM_PROMPT = `You are a senior software developer with expertise in writing clean, maintainable, well-tested code.\n\nYour responsibilities:\n1. Write production-quality code\n2. Follow best practices and design patterns\n3. Include comprehensive tests\n4. Handle errors gracefully\n5. Write clear documentation\n\nQuality standards:\n- Code must be readable and self-documenting\n- Functions should be small and focused\n- Error handling must be robust\n- Tests should cover edge cases\n- Types must be explicit and strict\n\nYou produce code that is ready for production deployment.`;\n\n/**\n * System prompt for the code review agent\n */\nexport const CODE_REVIEW_SYSTEM_PROMPT = `You are a senior code reviewer with expertise in evaluating code quality.\n\nYour responsibilities:\n1. Evaluate code against quality standards\n2. Identify bugs, vulnerabilities, and issues\n3. Suggest improvements\n4. Verify test coverage\n5. Ensure maintainability\n\nReview criteria:\n- Correctness: Does the code work correctly?\n- Completeness: Does it fulfill requirements?\n- Robustness: Does it handle edge cases?\n- Readability: Is it easy to understand?\n- Maintainability: Is it easy to modify?\n- Security: Are there vulnerabilities?\n- Performance: Are there bottlenecks?\n\nYou provide constructive, actionable feedback.`;\n\n/**\n * Prompt for generating code\n */\nexport const GENERATE_CODE_PROMPT = `Generate production-quality code for the following task.\n\nTask: {{taskTitle}}\nDescription: {{taskDescription}}\nType: {{taskType}}\nExpected Files: {{expectedFiles}}\n\nProject Context:\n{{projectContext}}\n\n{{previousCodeSection}}\n\n{{feedbackSection}}\n\nRequirements:\n1. Write clean, well-structured code\n2. Include comprehensive tests (TDD approach)\n3. Add appropriate error handling\n4. Include necessary documentation\n5. Follow the project's coding standards\n\nRespond in JSON format:\n{\n \"files\": [\n {\n \"path\": \"string\",\n \"content\": \"string (full file content)\",\n \"action\": \"create|modify\"\n }\n ],\n \"explanation\": \"Brief explanation of the implementation\",\n \"confidence\": 0-100\n}`;\n\n/**\n * Prompt for reviewing code\n */\nexport const REVIEW_CODE_PROMPT = `Review the following code implementation for quality and correctness.\n\nTask: {{taskTitle}}\nDescription: {{taskDescription}}\n\nFiles to review:\n{{filesToReview}}\n\nTest Results:\n{{testResults}}\n\nEvaluate against these criteria:\n1. Correctness (15%): Does it work correctly?\n2. Completeness (10%): Does it fulfill all requirements?\n3. Robustness (10%): Does it handle edge cases?\n4. Readability (10%): Is the code clear and well-structured?\n5. Maintainability (10%): Is it easy to modify?\n6. Complexity (8%): Is the complexity appropriate?\n7. Duplication (7%): Is there unnecessary duplication?\n8. Test Coverage (10%): Are tests comprehensive?\n9. Test Quality (5%): Are tests meaningful?\n10. Security (8%): Are there security issues?\n11. Documentation (4%): Is documentation adequate?\n12. Style (3%): Does it follow coding standards?\n\nRespond in JSON format:\n{\n \"passed\": boolean,\n \"scores\": {\n \"correctness\": 0-100,\n \"completeness\": 0-100,\n \"robustness\": 0-100,\n \"readability\": 0-100,\n \"maintainability\": 0-100,\n \"complexity\": 0-100,\n \"duplication\": 0-100,\n \"testCoverage\": 0-100,\n \"testQuality\": 0-100,\n \"security\": 0-100,\n \"documentation\": 0-100,\n \"style\": 0-100\n },\n \"issues\": [\n {\n \"severity\": \"critical|major|minor|info\",\n \"category\": \"correctness|completeness|robustness|readability|maintainability|complexity|duplication|testCoverage|testQuality|security|documentation|style\",\n \"message\": \"string\",\n \"file\": \"string (optional)\",\n \"line\": number (optional),\n \"suggestion\": \"string (optional)\"\n }\n ],\n \"suggestions\": [\n {\n \"type\": \"improvement|refactor|test|documentation\",\n \"description\": \"string\",\n \"priority\": \"high|medium|low\",\n \"impact\": 0-10\n }\n ],\n \"summary\": \"string\"\n}`;\n\n/**\n * Prompt for improving code based on feedback\n */\nexport const IMPROVE_CODE_PROMPT = `Improve the code based on the review feedback.\n\nTask: {{taskTitle}}\nIteration: {{iteration}}\n\nCurrent Implementation:\n{{currentCode}}\n\nReview Feedback:\n- Score: {{currentScore}}/100\n- Issues: {{issueCount}}\n- Critical Issues: {{criticalIssues}}\n\nIssues to Address:\n{{issues}}\n\nSuggestions to Consider:\n{{suggestions}}\n\nFocus on:\n1. Fix all critical and major issues\n2. Address as many minor issues as practical\n3. Implement high-priority suggestions\n4. Improve test coverage if below target\n5. Maintain or improve readability\n\nRespond in JSON format:\n{\n \"files\": [\n {\n \"path\": \"string\",\n \"content\": \"string (full file content)\",\n \"action\": \"create|modify\"\n }\n ],\n \"changesApplied\": [\"string\"],\n \"issuesFixed\": [\"issue_index\"],\n \"suggestionsImplemented\": [\"suggestion_index\"],\n \"explanation\": \"string\",\n \"confidence\": 0-100\n}`;\n\n/**\n * Prompt for generating tests\n */\nexport const GENERATE_TESTS_PROMPT = `Generate comprehensive tests for the following implementation.\n\nCode to test:\n{{codeToTest}}\n\nRequirements:\n- Cover all public functions/methods\n- Include edge cases\n- Test error handling\n- Aim for {{targetCoverage}}% coverage\n\nCurrent coverage:\n- Lines: {{lineCoverage}}%\n- Branches: {{branchCoverage}}%\n- Functions: {{functionCoverage}}%\n\nRespond in JSON format:\n{\n \"testFiles\": [\n {\n \"path\": \"string\",\n \"content\": \"string (test file content)\"\n }\n ],\n \"expectedCoverage\": {\n \"lines\": number,\n \"branches\": number,\n \"functions\": number\n },\n \"testCases\": [\n {\n \"name\": \"string\",\n \"description\": \"string\",\n \"type\": \"unit|integration|edge_case\"\n }\n ]\n}`;\n\n/**\n * Prompt for analyzing test failures\n */\nexport const ANALYZE_FAILURES_PROMPT = `Analyze the following test failures and suggest fixes.\n\nTest Failures:\n{{failures}}\n\nSource Code:\n{{sourceCode}}\n\nFor each failure, provide:\n1. Root cause analysis\n2. Suggested fix\n3. Confidence level\n\nRespond in JSON format:\n{\n \"analyses\": [\n {\n \"testName\": \"string\",\n \"rootCause\": \"string\",\n \"suggestedFix\": \"string\",\n \"codeChange\": {\n \"file\": \"string\",\n \"line\": number,\n \"oldCode\": \"string\",\n \"newCode\": \"string\"\n },\n \"confidence\": 0-100\n }\n ]\n}`;\n\n/**\n * Prompt for determining if iteration should continue\n */\nexport const SHOULD_CONTINUE_PROMPT = `Determine if we should continue iterating on this task.\n\nTask: {{taskTitle}}\nIteration: {{iteration}}\nMax Iterations: {{maxIterations}}\n\nScore History:\n{{scoreHistory}}\n\nCurrent Score: {{currentScore}}\nTarget Score: {{targetScore}}\n\nRecent Issues:\n{{recentIssues}}\n\nConsider:\n1. Is the score above the minimum threshold?\n2. Is the score improving significantly?\n3. Are there critical issues remaining?\n4. Have we reached convergence?\n5. Are remaining issues worth another iteration?\n\nRespond in JSON format:\n{\n \"shouldContinue\": boolean,\n \"reason\": \"string\",\n \"recommendation\": \"continue|stop|rollback\",\n \"estimatedIterationsRemaining\": number\n}`;\n\n/**\n * Prompt for generating project context\n */\nexport const PROJECT_CONTEXT_PROMPT = `Summarize the project context for code generation.\n\nArchitecture:\n{{architecture}}\n\nRelated Files:\n{{relatedFiles}}\n\nCoding Standards:\n{{codingStandards}}\n\nProvide a concise context summary that will help generate consistent code.`;\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 * Build previous code section for prompts\n */\nexport function buildPreviousCodeSection(previousCode?: string): string {\n if (!previousCode) {\n return \"\";\n }\n\n return `\nPrevious Implementation (needs improvement):\n\\`\\`\\`\n${previousCode}\n\\`\\`\\`\n`;\n}\n\n/**\n * Build feedback section for prompts\n */\nexport function buildFeedbackSection(\n feedback?: string,\n issues?: Array<{ severity: string; message: string }>\n): string {\n if (!feedback && (!issues || issues.length === 0)) {\n return \"\";\n }\n\n let section = \"\\nFeedback from Previous Review:\\n\";\n\n if (feedback) {\n section += `${feedback}\\n`;\n }\n\n if (issues && issues.length > 0) {\n section += \"\\nIssues to Address:\\n\";\n for (const issue of issues) {\n section += `- [${issue.severity}] ${issue.message}\\n`;\n }\n }\n\n return section;\n}\n","/**\n * Code Generator for the COMPLETE phase\n *\n * Generates code based on task requirements\n */\n\nimport type {\n CodeGenerationRequest,\n CodeGenerationResponse,\n GeneratedFile,\n} from \"./types.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\nimport {\n CODE_GENERATION_SYSTEM_PROMPT,\n GENERATE_CODE_PROMPT,\n IMPROVE_CODE_PROMPT,\n GENERATE_TESTS_PROMPT,\n fillPrompt,\n buildPreviousCodeSection,\n buildFeedbackSection,\n} from \"./prompts.js\";\nimport { PhaseError } from \"../../utils/errors.js\";\n\n/**\n * Code Generator\n */\nexport class CodeGenerator {\n private llm: LLMProvider;\n\n constructor(llm: LLMProvider) {\n this.llm = llm;\n }\n\n /**\n * Generate initial code for a task\n */\n async generate(request: CodeGenerationRequest): Promise<CodeGenerationResponse> {\n const previousCodeSection = buildPreviousCodeSection(request.previousCode);\n const feedbackSection = buildFeedbackSection(request.feedback);\n\n const prompt = fillPrompt(GENERATE_CODE_PROMPT, {\n taskTitle: request.task.title,\n taskDescription: request.task.description,\n taskType: request.task.type,\n expectedFiles: JSON.stringify(request.task.files),\n projectContext: request.context,\n previousCodeSection,\n feedbackSection,\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: CODE_GENERATION_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n return this.parseGenerationResponse(response.content);\n }\n\n /**\n * Improve existing code based on feedback\n */\n async improve(\n currentCode: string,\n issues: Array<{ severity: string; message: string; suggestion?: string }>,\n suggestions: Array<{ description: string; priority: string }>,\n request: CodeGenerationRequest\n ): Promise<CodeGenerationResponse> {\n const prompt = fillPrompt(IMPROVE_CODE_PROMPT, {\n taskTitle: request.task.title,\n iteration: request.iteration,\n currentCode,\n currentScore: 0, // Would be passed in\n issueCount: issues.length,\n criticalIssues: issues.filter((i) => i.severity === \"critical\").length,\n issues: JSON.stringify(issues),\n suggestions: JSON.stringify(suggestions),\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: CODE_GENERATION_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n return this.parseImprovementResponse(response.content);\n }\n\n /**\n * Generate tests for existing code\n */\n async generateTests(\n codeToTest: string,\n targetCoverage: number,\n currentCoverage: { lines: number; branches: number; functions: number }\n ): Promise<GeneratedFile[]> {\n const prompt = fillPrompt(GENERATE_TESTS_PROMPT, {\n codeToTest,\n targetCoverage,\n lineCoverage: currentCoverage.lines,\n branchCoverage: currentCoverage.branches,\n functionCoverage: currentCoverage.functions,\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: CODE_GENERATION_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 return [];\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n testFiles?: Array<{\n path?: string;\n content?: string;\n }>;\n };\n\n return (parsed.testFiles || []).map((f) => ({\n path: f.path || \"test.ts\",\n content: f.content || \"\",\n action: \"create\" as const,\n }));\n } catch {\n return [];\n }\n }\n\n /**\n * Parse generation response from LLM\n */\n private parseGenerationResponse(content: string): CodeGenerationResponse {\n try {\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 files?: Array<{\n path?: string;\n content?: string;\n action?: string;\n }>;\n explanation?: string;\n confidence?: number;\n };\n\n return {\n files: (parsed.files || []).map((f) => ({\n path: f.path || \"file.ts\",\n content: f.content || \"\",\n action: (f.action as GeneratedFile[\"action\"]) || \"create\",\n })),\n explanation: parsed.explanation || \"\",\n confidence: parsed.confidence || 50,\n };\n } catch {\n throw new PhaseError(\"Failed to parse code generation response\", { phase: \"complete\" });\n }\n }\n\n /**\n * Parse improvement response from LLM\n */\n private parseImprovementResponse(content: string): CodeGenerationResponse {\n try {\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 files?: Array<{\n path?: string;\n content?: string;\n action?: string;\n }>;\n changesApplied?: string[];\n explanation?: string;\n confidence?: number;\n };\n\n return {\n files: (parsed.files || []).map((f) => ({\n path: f.path || \"file.ts\",\n content: f.content || \"\",\n action: (f.action as GeneratedFile[\"action\"]) || \"modify\",\n })),\n explanation:\n parsed.explanation ||\n (parsed.changesApplied || []).join(\", \"),\n confidence: parsed.confidence || 50,\n };\n } catch {\n throw new PhaseError(\"Failed to parse improvement response\", { phase: \"complete\" });\n }\n }\n}\n\n/**\n * Create a code generator\n */\nexport function createCodeGenerator(llm: LLMProvider): CodeGenerator {\n return new CodeGenerator(llm);\n}\n","/**\n * Code Reviewer for the COMPLETE phase\n *\n * Reviews generated code and calculates quality scores\n */\n\nimport type {\n CodeReviewResult,\n ReviewIssue,\n ReviewSuggestion,\n TestExecutionResult,\n QualityConfig,\n} from \"./types.js\";\nimport type { QualityScores, QualityDimensions } from \"../../quality/types.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\nimport {\n CODE_REVIEW_SYSTEM_PROMPT,\n REVIEW_CODE_PROMPT,\n ANALYZE_FAILURES_PROMPT,\n fillPrompt,\n} from \"./prompts.js\";\n// PhaseError not currently used but kept for future error handling\n\n/**\n * Code Reviewer\n */\nexport class CodeReviewer {\n private llm: LLMProvider;\n private config: QualityConfig;\n\n constructor(llm: LLMProvider, config: QualityConfig) {\n this.llm = llm;\n this.config = config;\n }\n\n /**\n * Review code and generate quality scores\n */\n async review(\n taskTitle: string,\n taskDescription: string,\n files: Array<{ path: string; content: string }>,\n testResults: TestExecutionResult\n ): Promise<CodeReviewResult> {\n const filesToReview = files\n .map((f) => `### ${f.path}\\n\\`\\`\\`\\n${f.content}\\n\\`\\`\\``)\n .join(\"\\n\\n\");\n\n const prompt = fillPrompt(REVIEW_CODE_PROMPT, {\n taskTitle,\n taskDescription,\n filesToReview,\n testResults: JSON.stringify(testResults),\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: CODE_REVIEW_SYSTEM_PROMPT },\n { role: \"user\", content: prompt },\n ]);\n\n return this.parseReviewResponse(response.content, testResults);\n }\n\n /**\n * Analyze test failures and suggest fixes\n */\n async analyzeFailures(\n failures: Array<{ name: string; message: string; stack?: string }>,\n sourceCode: string\n ): Promise<Array<{\n testName: string;\n rootCause: string;\n suggestedFix: string;\n confidence: number;\n }>> {\n const prompt = fillPrompt(ANALYZE_FAILURES_PROMPT, {\n failures: JSON.stringify(failures),\n sourceCode,\n });\n\n const response = await this.llm.chat([\n { role: \"system\", content: CODE_REVIEW_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 return [];\n }\n\n const parsed = JSON.parse(jsonMatch[0]) as {\n analyses?: Array<{\n testName?: string;\n rootCause?: string;\n suggestedFix?: string;\n confidence?: number;\n }>;\n };\n\n return (parsed.analyses || []).map((a) => ({\n testName: a.testName || \"\",\n rootCause: a.rootCause || \"\",\n suggestedFix: a.suggestedFix || \"\",\n confidence: a.confidence || 50,\n }));\n } catch {\n return [];\n }\n }\n\n /**\n * Check if review passes quality thresholds\n */\n checkPassed(scores: QualityScores): boolean {\n return (\n scores.overall >= this.config.minScore &&\n scores.dimensions.testCoverage >= this.config.minCoverage\n );\n }\n\n /**\n * Get critical issues from review\n */\n getCriticalIssues(issues: ReviewIssue[]): ReviewIssue[] {\n return issues.filter((i) => i.severity === \"critical\");\n }\n\n /**\n * Get high-priority suggestions\n */\n getHighPrioritySuggestions(suggestions: ReviewSuggestion[]): ReviewSuggestion[] {\n return suggestions.filter((s) => s.priority === \"high\");\n }\n\n /**\n * Parse review response from LLM\n */\n private parseReviewResponse(\n content: string,\n testResults: TestExecutionResult\n ): CodeReviewResult {\n try {\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 passed?: boolean;\n scores?: Partial<QualityDimensions>;\n issues?: Array<{\n severity?: string;\n category?: string;\n message?: string;\n file?: string;\n line?: number;\n suggestion?: string;\n }>;\n suggestions?: Array<{\n type?: string;\n description?: string;\n priority?: string;\n impact?: number;\n }>;\n };\n\n const dimensions = this.normalizeDimensions(parsed.scores || {});\n const overall = this.calculateOverallScore(dimensions);\n\n const scores: QualityScores = {\n overall,\n dimensions,\n evaluatedAt: new Date(),\n evaluationDurationMs: 0,\n };\n\n const issues = (parsed.issues || []).map((i) => this.normalizeIssue(i));\n const suggestions = (parsed.suggestions || []).map((s) =>\n this.normalizeSuggestion(s)\n );\n\n // Override testCoverage with actual coverage\n if (testResults.coverage) {\n dimensions.testCoverage = testResults.coverage.lines;\n }\n\n const passed = this.checkPassed(scores);\n\n return {\n passed,\n scores,\n issues,\n suggestions,\n testResults,\n };\n } catch {\n // Return a default failed review if parsing fails\n return this.createDefaultReview(testResults);\n }\n }\n\n /**\n * Normalize dimension scores\n */\n private normalizeDimensions(\n data: Partial<QualityDimensions>\n ): QualityDimensions {\n return {\n correctness: this.normalizeScore(data.correctness),\n completeness: this.normalizeScore(data.completeness),\n robustness: this.normalizeScore(data.robustness),\n readability: this.normalizeScore(data.readability),\n maintainability: this.normalizeScore(data.maintainability),\n complexity: this.normalizeScore(data.complexity),\n duplication: this.normalizeScore(data.duplication),\n testCoverage: this.normalizeScore(data.testCoverage),\n testQuality: this.normalizeScore(data.testQuality),\n security: this.normalizeScore(data.security),\n documentation: this.normalizeScore(data.documentation),\n style: this.normalizeScore(data.style),\n };\n }\n\n /**\n * Normalize a single score\n */\n private normalizeScore(value?: number): number {\n if (value === undefined || value === null) return 50;\n return Math.max(0, Math.min(100, value));\n }\n\n /**\n * Calculate overall score from dimensions\n */\n private calculateOverallScore(dimensions: QualityDimensions): number {\n const weights: QualityDimensions = {\n correctness: 0.15,\n completeness: 0.10,\n robustness: 0.10,\n readability: 0.10,\n maintainability: 0.10,\n complexity: 0.08,\n duplication: 0.07,\n testCoverage: 0.10,\n testQuality: 0.05,\n security: 0.08,\n documentation: 0.04,\n style: 0.03,\n };\n\n let total = 0;\n for (const key of Object.keys(weights) as (keyof QualityDimensions)[]) {\n total += dimensions[key] * weights[key];\n }\n\n return Math.round(total);\n }\n\n /**\n * Normalize an issue\n */\n private normalizeIssue(data: {\n severity?: string;\n category?: string;\n message?: string;\n file?: string;\n line?: number;\n suggestion?: string;\n }): ReviewIssue {\n return {\n severity: this.normalizeSeverity(data.severity),\n category: this.normalizeCategory(data.category),\n message: data.message || \"\",\n file: data.file,\n line: data.line,\n suggestion: data.suggestion,\n };\n }\n\n /**\n * Normalize a suggestion\n */\n private normalizeSuggestion(data: {\n type?: string;\n description?: string;\n priority?: string;\n impact?: number;\n }): ReviewSuggestion {\n return {\n type: this.normalizeSuggestionType(data.type),\n description: data.description || \"\",\n priority: this.normalizePriority(data.priority),\n impact: data.impact || 5,\n };\n }\n\n /**\n * Normalize severity\n */\n private normalizeSeverity(\n value?: string\n ): \"critical\" | \"major\" | \"minor\" | \"info\" {\n const normalized = value?.toLowerCase();\n if (normalized === \"critical\") return \"critical\";\n if (normalized === \"major\") return \"major\";\n if (normalized === \"minor\") return \"minor\";\n return \"info\";\n }\n\n /**\n * Normalize category\n */\n private normalizeCategory(value?: string): keyof QualityDimensions {\n const normalized = value?.toLowerCase();\n const valid: (keyof QualityDimensions)[] = [\n \"correctness\",\n \"completeness\",\n \"robustness\",\n \"readability\",\n \"maintainability\",\n \"complexity\",\n \"duplication\",\n \"testCoverage\",\n \"testQuality\",\n \"security\",\n \"documentation\",\n \"style\",\n ];\n\n for (const v of valid) {\n if (normalized === v.toLowerCase()) return v;\n }\n\n return \"correctness\";\n }\n\n /**\n * Normalize suggestion type\n */\n private normalizeSuggestionType(\n value?: string\n ): \"improvement\" | \"refactor\" | \"test\" | \"documentation\" {\n const normalized = value?.toLowerCase();\n if (normalized === \"improvement\") return \"improvement\";\n if (normalized === \"refactor\") return \"refactor\";\n if (normalized === \"test\") return \"test\";\n if (normalized === \"documentation\") return \"documentation\";\n return \"improvement\";\n }\n\n /**\n * Normalize priority\n */\n private normalizePriority(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 * Create a default failed review\n */\n private createDefaultReview(testResults: TestExecutionResult): CodeReviewResult {\n return {\n passed: false,\n scores: {\n overall: 0,\n dimensions: {\n correctness: 0,\n completeness: 0,\n robustness: 0,\n readability: 0,\n maintainability: 0,\n complexity: 0,\n duplication: 0,\n testCoverage: testResults.coverage?.lines || 0,\n testQuality: 0,\n security: 0,\n documentation: 0,\n style: 0,\n },\n evaluatedAt: new Date(),\n evaluationDurationMs: 0,\n },\n issues: [\n {\n severity: \"critical\",\n category: \"correctness\",\n message: \"Failed to review code\",\n },\n ],\n suggestions: [],\n testResults,\n };\n }\n}\n\n/**\n * Create a code reviewer\n */\nexport function createCodeReviewer(\n llm: LLMProvider,\n config: QualityConfig\n): CodeReviewer {\n return new CodeReviewer(llm, config);\n}\n","/**\n * Task Iterator for the COMPLETE phase\n *\n * Manages the quality convergence loop for tasks\n */\n\nimport type {\n TaskExecutionResult,\n TaskExecutionContext,\n ConvergenceCheck,\n CodeReviewResult,\n TestExecutionResult,\n GeneratedFile,\n QualityConfig,\n} from \"./types.js\";\nimport type { TaskVersion, TaskChanges, IssueCategory } from \"../../types/task.js\";\nimport type { QualityDimensions } from \"../../quality/types.js\";\nimport { CodeGenerator } from \"./generator.js\";\nimport { CodeReviewer } from \"./reviewer.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\n\n/**\n * Task Iterator\n *\n * Manages the generate-review-iterate cycle\n */\nexport class TaskIterator {\n private generator: CodeGenerator;\n private reviewer: CodeReviewer;\n private config: QualityConfig;\n\n constructor(llm: LLMProvider, config: QualityConfig) {\n this.generator = new CodeGenerator(llm);\n this.reviewer = new CodeReviewer(llm, config);\n this.config = config;\n }\n\n /**\n * Execute a task with quality iteration\n */\n async execute(\n context: TaskExecutionContext,\n runTests: () => Promise<TestExecutionResult>,\n saveFiles: (files: GeneratedFile[]) => Promise<void>,\n onProgress?: (iteration: number, score: number) => void\n ): Promise<TaskExecutionResult> {\n const versions: TaskVersion[] = [];\n let iteration = 0;\n let lastReview: CodeReviewResult | null = null;\n let currentFiles: GeneratedFile[] = [];\n const scoreHistory: number[] = [];\n\n try {\n // Generate initial code\n const initial = await this.generator.generate({\n task: context.task,\n context: this.buildContext(context),\n iteration: 0,\n });\n\n currentFiles = initial.files;\n await saveFiles(currentFiles);\n\n // Iteration loop\n while (iteration < this.config.maxIterations) {\n iteration++;\n\n // Run tests\n const testResults = await runTests();\n\n // Review code\n const review = await this.reviewer.review(\n context.task.title,\n context.task.description,\n currentFiles.map((f) => ({ path: f.path, content: f.content })),\n testResults\n );\n\n lastReview = review;\n scoreHistory.push(review.scores.overall);\n\n // Report progress\n if (onProgress) {\n onProgress(iteration, review.scores.overall);\n }\n\n // Create version snapshot\n const version = this.createVersion(\n iteration,\n currentFiles,\n review,\n testResults\n );\n versions.push(version);\n\n // Check if we should stop\n const convergence = this.checkConvergence(\n scoreHistory,\n review,\n iteration\n );\n\n if (convergence.converged) {\n return {\n taskId: context.task.id,\n success: true,\n versions,\n finalScore: review.scores.overall,\n converged: true,\n iterations: iteration,\n };\n }\n\n // Check if we passed quality threshold\n if (this.reviewer.checkPassed(review.scores)) {\n return {\n taskId: context.task.id,\n success: true,\n versions,\n finalScore: review.scores.overall,\n converged: true,\n iterations: iteration,\n };\n }\n\n // Improve code for next iteration\n const improved = await this.generator.improve(\n this.filesToString(currentFiles),\n review.issues.map((i) => ({\n severity: i.severity,\n message: i.message,\n suggestion: i.suggestion,\n })),\n review.suggestions.map((s) => ({\n description: s.description,\n priority: s.priority,\n })),\n {\n task: context.task,\n context: this.buildContext(context),\n previousCode: this.filesToString(currentFiles),\n feedback: this.buildFeedback(review),\n iteration,\n }\n );\n\n currentFiles = improved.files;\n await saveFiles(currentFiles);\n }\n\n // Max iterations reached\n return {\n taskId: context.task.id,\n success: lastReview ? this.reviewer.checkPassed(lastReview.scores) : false,\n versions,\n finalScore: lastReview?.scores.overall || 0,\n converged: false,\n iterations: iteration,\n error: \"Max iterations reached without convergence\",\n };\n } catch (error) {\n return {\n taskId: context.task.id,\n success: false,\n versions,\n finalScore: 0,\n converged: false,\n iterations: iteration,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n /**\n * Check if quality has converged\n */\n checkConvergence(\n scoreHistory: number[],\n review: CodeReviewResult,\n iteration: number\n ): ConvergenceCheck {\n // Not enough iterations\n if (iteration < this.config.minConvergenceIterations) {\n return {\n converged: false,\n reason: \"Minimum iterations not reached\",\n scoreHistory,\n improvement: 0,\n };\n }\n\n // Check if above minimum score\n if (review.scores.overall < this.config.minScore) {\n return {\n converged: false,\n reason: `Score ${review.scores.overall} below minimum ${this.config.minScore}`,\n scoreHistory,\n improvement: this.calculateImprovement(scoreHistory),\n };\n }\n\n // Check if no critical issues\n const criticalIssues = this.reviewer.getCriticalIssues(review.issues);\n if (criticalIssues.length > 0) {\n return {\n converged: false,\n reason: `${criticalIssues.length} critical issues remain`,\n scoreHistory,\n improvement: this.calculateImprovement(scoreHistory),\n };\n }\n\n // Check if score has stabilized\n const improvement = this.calculateImprovement(scoreHistory);\n if (Math.abs(improvement) < this.config.convergenceThreshold) {\n return {\n converged: true,\n reason: \"Score has stabilized\",\n scoreHistory,\n improvement,\n };\n }\n\n // If improvement is negative, something is wrong\n if (improvement < -5) {\n return {\n converged: false,\n reason: \"Score is decreasing\",\n scoreHistory,\n improvement,\n };\n }\n\n return {\n converged: false,\n reason: \"Still improving\",\n scoreHistory,\n improvement,\n };\n }\n\n /**\n * Calculate improvement from score history\n */\n private calculateImprovement(scoreHistory: number[]): number {\n if (scoreHistory.length < 2) return 0;\n\n const recent = scoreHistory.slice(-3);\n if (recent.length < 2) return 0;\n\n const current = recent[recent.length - 1] || 0;\n const previous = recent[recent.length - 2] || 0;\n\n return current - previous;\n }\n\n /**\n * Build context string for code generation\n */\n private buildContext(context: TaskExecutionContext): string {\n const parts: string[] = [];\n\n parts.push(`Project: ${context.projectPath}`);\n parts.push(`Sprint: ${context.sprint.name}`);\n parts.push(`Sprint Goal: ${context.sprint.goal}`);\n\n if (context.previousVersions.length > 0) {\n parts.push(`Previous Iterations: ${context.previousVersions.length}`);\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Build feedback string from review\n */\n private buildFeedback(review: CodeReviewResult): string {\n const parts: string[] = [];\n\n parts.push(`Overall Score: ${review.scores.overall}/100`);\n\n if (review.issues.length > 0) {\n parts.push(`\\nIssues (${review.issues.length}):`);\n for (const issue of review.issues.slice(0, 5)) {\n parts.push(`- [${issue.severity}] ${issue.message}`);\n }\n }\n\n if (review.suggestions.length > 0) {\n parts.push(`\\nSuggestions (${review.suggestions.length}):`);\n for (const suggestion of review.suggestions.slice(0, 3)) {\n parts.push(`- [${suggestion.priority}] ${suggestion.description}`);\n }\n }\n\n return parts.join(\"\\n\");\n }\n\n /**\n * Convert files array to string\n */\n private filesToString(files: GeneratedFile[]): string {\n return files\n .map((f) => `### ${f.path}\\n\\`\\`\\`\\n${f.content}\\n\\`\\`\\``)\n .join(\"\\n\\n\");\n }\n\n /**\n * Map QualityDimensions key to IssueCategory\n */\n private mapToIssueCategory(key: keyof QualityDimensions): IssueCategory {\n const mapping: Record<keyof QualityDimensions, IssueCategory> = {\n correctness: \"correctness\",\n completeness: \"completeness\",\n robustness: \"robustness\",\n readability: \"readability\",\n maintainability: \"maintainability\",\n complexity: \"maintainability\", // Map complexity to maintainability\n duplication: \"maintainability\", // Map duplication to maintainability\n testCoverage: \"testing\",\n testQuality: \"testing\",\n security: \"security\",\n documentation: \"documentation\",\n style: \"style\",\n };\n return mapping[key];\n }\n\n /**\n * Create a version snapshot\n */\n private createVersion(\n iteration: number,\n files: GeneratedFile[],\n review: CodeReviewResult,\n testResults: TestExecutionResult\n ): TaskVersion {\n const changes: TaskChanges = {\n filesCreated: files.filter((f) => f.action === \"create\").map((f) => f.path),\n filesModified: files.filter((f) => f.action === \"modify\").map((f) => f.path),\n filesDeleted: files.filter((f) => f.action === \"delete\").map((f) => f.path),\n };\n\n return {\n version: iteration,\n timestamp: new Date(),\n changes,\n diffs: files.map((f) => ({\n file: f.path,\n diff: f.content, // Full content for now\n additions: f.content.split(\"\\n\").length,\n deletions: 0,\n })),\n scores: review.scores,\n testResults: {\n passed: testResults.passed,\n failed: testResults.failed,\n skipped: testResults.skipped,\n coverage: {\n lines: testResults.coverage.lines,\n branches: testResults.coverage.branches,\n functions: testResults.coverage.functions,\n },\n failures: testResults.failures.map((f) => ({\n name: f.name,\n file: f.file,\n message: f.message,\n stack: f.stack,\n })),\n },\n analysis: {\n issuesFound: review.issues.map((i) => ({\n category: this.mapToIssueCategory(i.category),\n severity: i.severity,\n message: i.message,\n file: i.file,\n line: i.line,\n suggestion: i.suggestion,\n })),\n improvementsApplied: [],\n reasoning: review.suggestions\n .map((s) => s.description)\n .slice(0, 3)\n .join(\"; \"),\n confidence: 70, // Would calculate based on review\n },\n };\n }\n}\n\n/**\n * Create a task iterator\n */\nexport function createTaskIterator(\n llm: LLMProvider,\n config: QualityConfig\n): TaskIterator {\n return new TaskIterator(llm, config);\n}\n","/**\n * COMPLETE Phase Executor\n *\n * Orchestrates task execution with quality iteration\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 CompleteConfig,\n CompleteProgress,\n SprintExecutionResult,\n TaskExecutionResult,\n TestExecutionResult,\n GeneratedFile,\n} from \"./types.js\";\nimport { DEFAULT_COMPLETE_CONFIG } from \"./types.js\";\nimport type { Task, Sprint, Backlog } from \"../../types/task.js\";\nimport { TaskIterator, createTaskIterator } from \"./iterator.js\";\nimport { PhaseError } from \"../../utils/errors.js\";\nimport { createLLMAdapter } from \"./llm-adapter.js\";\n\n/**\n * COMPLETE phase executor\n */\nexport class CompleteExecutor implements PhaseExecutor {\n readonly name = \"complete\";\n readonly description = \"Execute tasks with quality iteration\";\n\n private config: CompleteConfig;\n private iterator: TaskIterator | null = null;\n private currentSprint: Sprint | null = null;\n private backlog: Backlog | null = null;\n\n constructor(config: Partial<CompleteConfig> = {}) {\n this.config = { ...DEFAULT_COMPLETE_CONFIG, ...config };\n }\n\n /**\n * Check if the phase can start\n */\n canStart(_context: PhaseContext): boolean {\n return true;\n }\n\n /**\n * Execute the COMPLETE phase\n */\n async execute(context: PhaseContext): Promise<PhaseResult> {\n const startTime = new Date();\n const artifacts: PhaseArtifact[] = [];\n\n try {\n this.backlog = await this.loadBacklog(context.projectPath);\n this.currentSprint = this.backlog.currentSprint || await this.loadCurrentSprint(context.projectPath);\n\n if (!this.currentSprint) {\n throw new PhaseError(\"No sprint to execute\", { phase: \"complete\" });\n }\n\n const llm = createLLMAdapter(context);\n this.iterator = createTaskIterator(llm, this.config.quality);\n\n const result = await this.executeSprint(context, this.currentSprint, this.backlog);\n\n const resultsPath = await this.saveSprintResults(context.projectPath, result);\n artifacts.push({\n type: \"documentation\",\n path: resultsPath,\n description: \"Sprint execution results\",\n });\n\n for (const taskResult of result.taskResults) {\n if (taskResult.success && taskResult.versions.length > 0) {\n const lastVersion = taskResult.versions[taskResult.versions.length - 1];\n if (lastVersion) {\n for (const change of lastVersion.changes.filesCreated) {\n artifacts.push({\n type: \"code\",\n path: change,\n description: `Created for task ${taskResult.taskId}`,\n });\n }\n }\n }\n }\n\n const endTime = new Date();\n\n return {\n phase: \"complete\",\n success: result.success,\n artifacts,\n metrics: {\n startTime,\n endTime,\n durationMs: endTime.getTime() - startTime.getTime(),\n llmCalls: result.totalIterations * 2,\n tokensUsed: 0,\n },\n };\n } catch (error) {\n return {\n phase: \"complete\",\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 return true;\n }\n\n /**\n * Create a checkpoint\n */\n async checkpoint(_context: PhaseContext): Promise<PhaseCheckpoint> {\n return {\n phase: \"complete\",\n timestamp: new Date(),\n state: {\n artifacts: [],\n progress: 0,\n checkpoint: null,\n },\n resumePoint: this.currentSprint?.id || \"start\",\n };\n }\n\n /**\n * Restore from checkpoint\n */\n async restore(_checkpoint: PhaseCheckpoint, _context: PhaseContext): Promise<void> {\n // Load state from checkpoint\n }\n\n /**\n * Execute a sprint\n */\n private async executeSprint(\n context: PhaseContext,\n sprint: Sprint,\n backlog: Backlog\n ): Promise<SprintExecutionResult> {\n const startTime = Date.now();\n const taskResults: TaskExecutionResult[] = [];\n const sprintTasks = this.getSprintTasks(sprint, backlog);\n\n this.reportProgress({\n phase: \"executing\",\n sprintId: sprint.id,\n tasksCompleted: 0,\n tasksTotal: sprintTasks.length,\n message: `Starting ${sprint.name}`,\n });\n\n for (let i = 0; i < sprintTasks.length; i++) {\n const task = sprintTasks[i];\n if (!task) continue;\n\n this.reportProgress({\n phase: \"executing\",\n sprintId: sprint.id,\n taskId: task.id,\n taskTitle: task.title,\n tasksCompleted: i,\n tasksTotal: sprintTasks.length,\n message: `Executing task: ${task.title}`,\n });\n\n const result = await this.executeTask(context, task, sprint);\n taskResults.push(result);\n\n this.reportProgress({\n phase: result.success ? \"complete\" : \"iterating\",\n sprintId: sprint.id,\n taskId: task.id,\n taskTitle: task.title,\n iteration: result.iterations,\n currentScore: result.finalScore,\n tasksCompleted: i + 1,\n tasksTotal: sprintTasks.length,\n message: result.success\n ? `Task completed: ${task.title} (score: ${result.finalScore})`\n : `Task failed: ${task.title}`,\n });\n }\n\n const duration = Date.now() - startTime;\n const completedTasks = taskResults.filter((r) => r.success).length;\n const avgQuality =\n taskResults.reduce((sum, r) => sum + r.finalScore, 0) / taskResults.length || 0;\n const totalIterations = taskResults.reduce((sum, r) => sum + r.iterations, 0);\n\n return {\n sprintId: sprint.id,\n success: completedTasks === sprintTasks.length,\n tasksCompleted: completedTasks,\n tasksTotal: sprintTasks.length,\n averageQuality: avgQuality,\n totalIterations,\n taskResults,\n duration,\n };\n }\n\n /**\n * Execute a single task\n */\n private async executeTask(\n context: PhaseContext,\n task: Task,\n sprint: Sprint\n ): Promise<TaskExecutionResult> {\n if (!this.iterator) {\n throw new PhaseError(\"Iterator not initialized\", { phase: \"complete\" });\n }\n\n const taskContext = {\n task,\n projectPath: context.projectPath,\n sprint,\n previousVersions: [],\n qualityConfig: this.config.quality,\n };\n\n const runTests = async (): Promise<TestExecutionResult> => {\n return this.runTests(context, task);\n };\n\n const saveFiles = async (files: GeneratedFile[]): Promise<void> => {\n for (const file of files) {\n const filePath = path.join(context.projectPath, file.path);\n const dir = path.dirname(filePath);\n await fs.mkdir(dir, { recursive: true });\n\n if (file.action === \"delete\") {\n await fs.unlink(filePath).catch(() => {});\n } else {\n await fs.writeFile(filePath, file.content, \"utf-8\");\n }\n }\n };\n\n const onProgress = (iteration: number, score: number) => {\n this.reportProgress({\n phase: \"iterating\",\n sprintId: sprint.id,\n taskId: task.id,\n taskTitle: task.title,\n iteration,\n currentScore: score,\n tasksCompleted: 0,\n tasksTotal: 1,\n message: `Iteration ${iteration}: score ${score}`,\n });\n };\n\n return this.iterator.execute(taskContext, runTests, saveFiles, onProgress);\n }\n\n /**\n * Run tests for a task\n */\n private async runTests(context: PhaseContext, _task: Task): Promise<TestExecutionResult> {\n try {\n if (context.tools.test) {\n const result = await context.tools.test.run();\n const coverage = await context.tools.test.coverage();\n\n return {\n passed: result.passed,\n failed: result.failed,\n skipped: result.skipped,\n coverage: {\n lines: coverage.lines,\n branches: coverage.branches,\n functions: coverage.functions,\n statements: coverage.statements,\n },\n failures: result.failures.map((f) => ({\n name: f.name,\n file: \"\",\n message: f.message,\n stack: f.stack,\n })),\n duration: result.duration,\n };\n }\n } catch {\n // Fall through to default\n }\n\n return {\n passed: 0,\n failed: 0,\n skipped: 0,\n coverage: { lines: 0, branches: 0, functions: 0, statements: 0 },\n failures: [],\n duration: 0,\n };\n }\n\n /**\n * Get tasks for a sprint\n */\n private getSprintTasks(sprint: Sprint, backlog: Backlog): Task[] {\n const sprintStories = backlog.stories.filter((s) => sprint.stories.includes(s.id));\n const storyIds = sprintStories.map((s) => s.id);\n return backlog.tasks.filter((t) => storyIds.includes(t.storyId));\n }\n\n /**\n * Report progress\n */\n private reportProgress(progress: CompleteProgress): void {\n if (this.config.onProgress) {\n this.config.onProgress(progress);\n }\n }\n\n /**\n * Load backlog\n */\n private async loadBacklog(projectPath: string): Promise<Backlog> {\n try {\n const backlogPath = path.join(projectPath, \".coco\", \"planning\", \"backlog.json\");\n const content = await fs.readFile(backlogPath, \"utf-8\");\n const data = JSON.parse(content) as { backlog: Backlog };\n return data.backlog;\n } catch {\n return { epics: [], stories: [], tasks: [], currentSprint: null, completedSprints: [] };\n }\n }\n\n /**\n * Load current sprint\n */\n private async loadCurrentSprint(projectPath: string): Promise<Sprint | null> {\n try {\n const sprintsDir = path.join(projectPath, \".coco\", \"planning\", \"sprints\");\n const files = await fs.readdir(sprintsDir);\n const jsonFiles = files.filter((f) => f.endsWith(\".json\"));\n\n if (jsonFiles.length === 0) return null;\n\n const sprintPath = path.join(sprintsDir, jsonFiles[0] || \"\");\n const content = await fs.readFile(sprintPath, \"utf-8\");\n const sprint = JSON.parse(content) as Sprint;\n sprint.startDate = new Date(sprint.startDate);\n\n return sprint;\n } catch {\n return null;\n }\n }\n\n /**\n * Save sprint results\n */\n private async saveSprintResults(\n projectPath: string,\n result: SprintExecutionResult\n ): Promise<string> {\n const resultsDir = path.join(projectPath, \".coco\", \"results\");\n await fs.mkdir(resultsDir, { recursive: true });\n\n const resultsPath = path.join(resultsDir, `${result.sprintId}-results.json`);\n await fs.writeFile(resultsPath, JSON.stringify(result, null, 2), \"utf-8\");\n\n const mdPath = path.join(resultsDir, `${result.sprintId}-results.md`);\n await fs.writeFile(mdPath, this.generateResultsMarkdown(result), \"utf-8\");\n\n return resultsPath;\n }\n\n /**\n * Generate results markdown\n */\n private generateResultsMarkdown(result: SprintExecutionResult): string {\n const sections: string[] = [];\n\n sections.push(`# Sprint Results: ${result.sprintId}`);\n sections.push(\"\");\n sections.push(\"## Summary\");\n sections.push(\"\");\n sections.push(`- **Status:** ${result.success ? \"✅ Success\" : \"❌ Failed\"}`);\n sections.push(`- **Tasks Completed:** ${result.tasksCompleted}/${result.tasksTotal}`);\n sections.push(`- **Average Quality:** ${result.averageQuality.toFixed(1)}/100`);\n sections.push(`- **Total Iterations:** ${result.totalIterations}`);\n sections.push(`- **Duration:** ${(result.duration / 1000 / 60).toFixed(1)} minutes`);\n sections.push(\"\");\n sections.push(\"## Task Results\");\n sections.push(\"\");\n sections.push(\"| Task | Status | Score | Iterations | Converged |\");\n sections.push(\"|------|--------|-------|------------|-----------|\");\n\n for (const task of result.taskResults) {\n const status = task.success ? \"✅\" : \"❌\";\n const converged = task.converged ? \"Yes\" : \"No\";\n sections.push(`| ${task.taskId} | ${status} | ${task.finalScore} | ${task.iterations} | ${converged} |`);\n }\n\n sections.push(\"\");\n sections.push(\"---\");\n sections.push(\"\");\n sections.push(\"*Generated by Corbat-Coco*\");\n\n return sections.join(\"\\n\");\n }\n}\n\n/**\n * Create a COMPLETE phase executor\n */\nexport function createCompleteExecutor(config?: Partial<CompleteConfig>): CompleteExecutor {\n return new CompleteExecutor(config);\n}\n","/**\n * LLM Adapter for the COMPLETE phase\n *\n * Creates an LLM provider adapter from phase context\n */\n\nimport type { PhaseContext } from \"../types.js\";\nimport type { LLMProvider } from \"../../providers/types.js\";\n\n/**\n * Create LLM adapter from phase context\n */\nexport function 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 * Types for the OUTPUT phase\n *\n * This phase focuses on CI/CD generation, documentation, and deployment\n */\n\n/**\n * CI/CD configuration\n */\nexport interface CICDConfig {\n provider: CICDProvider;\n features: CICDFeatures;\n environments: Environment[];\n secrets: SecretReference[];\n}\n\n/**\n * CI/CD providers\n */\nexport type CICDProvider =\n | \"github_actions\"\n | \"gitlab_ci\"\n | \"jenkins\"\n | \"circleci\"\n | \"azure_devops\";\n\n/**\n * CI/CD features to enable\n */\nexport interface CICDFeatures {\n /** Run tests on push/PR */\n tests: boolean;\n\n /** Run linting */\n lint: boolean;\n\n /** Generate coverage reports */\n coverage: boolean;\n\n /** Build artifacts */\n build: boolean;\n\n /** Create releases */\n release: boolean;\n\n /** Deploy to environments */\n deploy: boolean;\n\n /** Security scanning */\n security: boolean;\n\n /** Dependency updates */\n dependabot: boolean;\n}\n\n/**\n * Deployment environment\n */\nexport interface Environment {\n name: string;\n type: EnvironmentType;\n branch?: string;\n approvalRequired: boolean;\n secrets: string[];\n}\n\n/**\n * Environment types\n */\nexport type EnvironmentType =\n | \"development\"\n | \"staging\"\n | \"production\";\n\n/**\n * Secret reference\n */\nexport interface SecretReference {\n name: string;\n description: string;\n required: boolean;\n}\n\n/**\n * Generated CI/CD file\n */\nexport interface CICDFile {\n path: string;\n content: string;\n description: string;\n}\n\n/**\n * Dockerfile configuration\n */\nexport interface DockerConfig {\n baseImage: string;\n port?: number;\n buildArgs: Record<string, string>;\n envVars: Record<string, string>;\n stages: DockerStage[];\n}\n\n/**\n * Docker stage (multi-stage build)\n */\nexport interface DockerStage {\n name: string;\n baseImage: string;\n commands: string[];\n}\n\n/**\n * Docker Compose configuration\n */\nexport interface ComposeConfig {\n version: string;\n services: ComposeService[];\n networks: string[];\n volumes: string[];\n}\n\n/**\n * Docker Compose service\n */\nexport interface ComposeService {\n name: string;\n image?: string;\n build?: string;\n ports: string[];\n environment: Record<string, string>;\n volumes: string[];\n dependsOn: string[];\n}\n\n/**\n * Documentation structure\n */\nexport interface DocumentationSet {\n readme: string;\n contributing: string;\n changelog: string;\n api?: string;\n deployment?: string;\n development?: string;\n}\n\n/**\n * Release configuration\n */\nexport interface ReleaseConfig {\n versioning: \"semver\" | \"calver\" | \"custom\";\n changelog: boolean;\n assets: string[];\n prerelease: boolean;\n}\n\n/**\n * OUTPUT phase configuration\n */\nexport interface OutputConfig {\n /** CI/CD configuration */\n cicd: {\n provider: CICDProvider;\n features: Partial<CICDFeatures>;\n };\n\n /** Docker configuration */\n docker: {\n enabled: boolean;\n compose: boolean;\n };\n\n /** Documentation to generate */\n docs: {\n readme: boolean;\n contributing: boolean;\n changelog: boolean;\n api: boolean;\n };\n\n /** Release configuration */\n release: Partial<ReleaseConfig>;\n}\n\n/**\n * Default OUTPUT configuration\n */\nexport const DEFAULT_OUTPUT_CONFIG: OutputConfig = {\n cicd: {\n provider: \"github_actions\",\n features: {\n tests: true,\n lint: true,\n coverage: true,\n build: true,\n release: true,\n deploy: false,\n security: true,\n dependabot: true,\n },\n },\n docker: {\n enabled: true,\n compose: true,\n },\n docs: {\n readme: true,\n contributing: true,\n changelog: true,\n api: true,\n },\n release: {\n versioning: \"semver\",\n changelog: true,\n prerelease: false,\n },\n};\n\n/**\n * OUTPUT phase result\n */\nexport interface OutputResult {\n cicdFiles: CICDFile[];\n dockerFiles: string[];\n documentation: DocumentationSet;\n artifactPaths: string[];\n}\n\n/**\n * Project metadata for output generation\n */\nexport interface ProjectMetadata {\n name: string;\n description: string;\n version: string;\n language: string;\n packageManager: string;\n testCommand: string;\n buildCommand: string;\n startCommand: string;\n author?: string;\n license?: string;\n repository?: string;\n}\n","/**\n * CI/CD Generator for the OUTPUT phase\n *\n * Generates CI/CD configurations for various providers\n */\n\nimport type {\n CICDConfig,\n CICDFile,\n CICDProvider,\n ProjectMetadata,\n} from \"./types.js\";\n\n/**\n * CI/CD Generator\n */\nexport class CICDGenerator {\n private metadata: ProjectMetadata;\n private config: CICDConfig;\n\n constructor(metadata: ProjectMetadata, config: CICDConfig) {\n this.metadata = metadata;\n this.config = config;\n }\n\n /**\n * Generate CI/CD files based on configuration\n */\n generate(): CICDFile[] {\n switch (this.config.provider) {\n case \"github_actions\":\n return this.generateGitHubActions();\n case \"gitlab_ci\":\n return this.generateGitLabCI();\n default:\n return this.generateGitHubActions();\n }\n }\n\n /**\n * Generate GitHub Actions workflows\n */\n private generateGitHubActions(): CICDFile[] {\n const files: CICDFile[] = [];\n\n // Main CI workflow\n files.push({\n path: \".github/workflows/ci.yml\",\n content: this.generateGitHubCI(),\n description: \"Main CI workflow\",\n });\n\n // Release workflow\n if (this.config.features.release) {\n files.push({\n path: \".github/workflows/release.yml\",\n content: this.generateGitHubRelease(),\n description: \"Release workflow\",\n });\n }\n\n // Dependabot\n if (this.config.features.dependabot) {\n files.push({\n path: \".github/dependabot.yml\",\n content: this.generateDependabot(),\n description: \"Dependabot configuration\",\n });\n }\n\n return files;\n }\n\n /**\n * Generate GitHub Actions CI workflow\n */\n private generateGitHubCI(): string {\n const nodeVersion = \"22\";\n const packageManager = this.metadata.packageManager || \"npm\";\n\n const lines: string[] = [];\n\n lines.push(\"name: CI\");\n lines.push(\"\");\n lines.push(\"on:\");\n lines.push(\" push:\");\n lines.push(\" branches: [main, master]\");\n lines.push(\" pull_request:\");\n lines.push(\" branches: [main, master]\");\n lines.push(\"\");\n lines.push(\"jobs:\");\n lines.push(\" build:\");\n lines.push(\" runs-on: ubuntu-latest\");\n lines.push(\"\");\n lines.push(\" steps:\");\n lines.push(\" - uses: actions/checkout@v4\");\n lines.push(\"\");\n lines.push(\" - name: Setup Node.js\");\n lines.push(\" uses: actions/setup-node@v4\");\n lines.push(\" with:\");\n lines.push(` node-version: '${nodeVersion}'`);\n\n if (packageManager === \"pnpm\") {\n lines.push(\" cache: 'pnpm'\");\n lines.push(\"\");\n lines.push(\" - name: Install pnpm\");\n lines.push(\" uses: pnpm/action-setup@v3\");\n lines.push(\" with:\");\n lines.push(\" version: 9\");\n } else if (packageManager === \"npm\") {\n lines.push(\" cache: 'npm'\");\n }\n\n lines.push(\"\");\n lines.push(\" - name: Install dependencies\");\n lines.push(` run: ${packageManager} install`);\n\n if (this.config.features.lint) {\n lines.push(\"\");\n lines.push(\" - name: Lint\");\n lines.push(` run: ${packageManager} run lint`);\n }\n\n if (this.config.features.build) {\n lines.push(\"\");\n lines.push(\" - name: Build\");\n lines.push(` run: ${packageManager} run build`);\n }\n\n if (this.config.features.tests) {\n lines.push(\"\");\n lines.push(\" - name: Test\");\n lines.push(` run: ${packageManager} run test`);\n }\n\n if (this.config.features.coverage) {\n lines.push(\"\");\n lines.push(\" - name: Test with coverage\");\n lines.push(` run: ${packageManager} run test:coverage`);\n lines.push(\"\");\n lines.push(\" - name: Upload coverage\");\n lines.push(\" uses: codecov/codecov-action@v4\");\n lines.push(\" with:\");\n lines.push(\" fail_ci_if_error: false\");\n }\n\n if (this.config.features.security) {\n lines.push(\"\");\n lines.push(\" security:\");\n lines.push(\" runs-on: ubuntu-latest\");\n lines.push(\" steps:\");\n lines.push(\" - uses: actions/checkout@v4\");\n lines.push(\" - name: Run security audit\");\n lines.push(` run: ${packageManager} audit --audit-level=high`);\n }\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Generate GitHub Actions release workflow\n */\n private generateGitHubRelease(): string {\n const packageManager = this.metadata.packageManager || \"npm\";\n\n const lines: string[] = [];\n\n lines.push(\"name: Release\");\n lines.push(\"\");\n lines.push(\"on:\");\n lines.push(\" push:\");\n lines.push(\" tags:\");\n lines.push(\" - 'v*'\");\n lines.push(\"\");\n lines.push(\"jobs:\");\n lines.push(\" release:\");\n lines.push(\" runs-on: ubuntu-latest\");\n lines.push(\"\");\n lines.push(\" steps:\");\n lines.push(\" - uses: actions/checkout@v4\");\n lines.push(\"\");\n lines.push(\" - name: Setup Node.js\");\n lines.push(\" uses: actions/setup-node@v4\");\n lines.push(\" with:\");\n lines.push(\" node-version: '22'\");\n lines.push(\" registry-url: 'https://registry.npmjs.org'\");\n\n if (packageManager === \"pnpm\") {\n lines.push(\"\");\n lines.push(\" - name: Install pnpm\");\n lines.push(\" uses: pnpm/action-setup@v3\");\n lines.push(\" with:\");\n lines.push(\" version: 9\");\n }\n\n lines.push(\"\");\n lines.push(\" - name: Install dependencies\");\n lines.push(` run: ${packageManager} install`);\n lines.push(\"\");\n lines.push(\" - name: Build\");\n lines.push(` run: ${packageManager} run build`);\n lines.push(\"\");\n lines.push(\" - name: Publish to npm\");\n lines.push(` run: ${packageManager} publish --access public`);\n lines.push(\" env:\");\n lines.push(\" NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\");\n lines.push(\"\");\n lines.push(\" - name: Create GitHub Release\");\n lines.push(\" uses: softprops/action-gh-release@v2\");\n lines.push(\" with:\");\n lines.push(\" generate_release_notes: true\");\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Generate Dependabot configuration\n */\n private generateDependabot(): string {\n const lines: string[] = [];\n\n lines.push(\"version: 2\");\n lines.push(\"updates:\");\n lines.push(\" - package-ecosystem: npm\");\n lines.push(\" directory: /\");\n lines.push(\" schedule:\");\n lines.push(\" interval: weekly\");\n lines.push(\" groups:\");\n lines.push(\" development-dependencies:\");\n lines.push(\" dependency-type: development\");\n lines.push(\" production-dependencies:\");\n lines.push(\" dependency-type: production\");\n lines.push(\"\");\n lines.push(\" - package-ecosystem: github-actions\");\n lines.push(\" directory: /\");\n lines.push(\" schedule:\");\n lines.push(\" interval: weekly\");\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Generate GitLab CI\n */\n private generateGitLabCI(): CICDFile[] {\n const packageManager = this.metadata.packageManager || \"npm\";\n\n const content = `image: node:22\n\nstages:\n - install\n - lint\n - test\n - build\n - release\n\ncache:\n paths:\n - node_modules/\n\ninstall:\n stage: install\n script:\n - ${packageManager} install\n\nlint:\n stage: lint\n script:\n - ${packageManager} run lint\n\ntest:\n stage: test\n script:\n - ${packageManager} run test\n coverage: '/All files\\\\s+\\\\|\\\\s+[\\\\d.]+/'\n\nbuild:\n stage: build\n script:\n - ${packageManager} run build\n artifacts:\n paths:\n - dist/\n\nrelease:\n stage: release\n only:\n - tags\n script:\n - ${packageManager} publish\n`;\n\n return [\n {\n path: \".gitlab-ci.yml\",\n content,\n description: \"GitLab CI/CD configuration\",\n },\n ];\n }\n}\n\n/**\n * Create default CI/CD configuration\n */\nexport function createDefaultCICDConfig(\n provider: CICDProvider = \"github_actions\"\n): CICDConfig {\n return {\n provider,\n features: {\n tests: true,\n lint: true,\n coverage: true,\n build: true,\n release: true,\n deploy: false,\n security: true,\n dependabot: true,\n },\n environments: [\n {\n name: \"production\",\n type: \"production\",\n branch: \"main\",\n approvalRequired: true,\n secrets: [\"NPM_TOKEN\"],\n },\n ],\n secrets: [\n {\n name: \"NPM_TOKEN\",\n description: \"NPM publish token\",\n required: true,\n },\n ],\n };\n}\n\n/**\n * Create a CI/CD generator\n */\nexport function createCICDGenerator(\n metadata: ProjectMetadata,\n config: CICDConfig\n): CICDGenerator {\n return new CICDGenerator(metadata, config);\n}\n","/**\n * Docker Generator for the OUTPUT phase\n *\n * Generates Dockerfile and Docker Compose configurations\n */\n\nimport type {\n DockerConfig,\n ComposeConfig,\n ProjectMetadata,\n} from \"./types.js\";\n\n/**\n * Docker Generator\n */\nexport class DockerGenerator {\n private metadata: ProjectMetadata;\n\n constructor(metadata: ProjectMetadata) {\n this.metadata = metadata;\n }\n\n /**\n * Generate Dockerfile\n */\n generateDockerfile(config?: Partial<DockerConfig>): string {\n const language = this.metadata.language.toLowerCase();\n\n switch (language) {\n case \"typescript\":\n case \"javascript\":\n return this.generateNodeDockerfile(config);\n case \"python\":\n return this.generatePythonDockerfile(config);\n case \"go\":\n return this.generateGoDockerfile(config);\n default:\n return this.generateNodeDockerfile(config);\n }\n }\n\n /**\n * Generate Node.js Dockerfile (multi-stage)\n */\n private generateNodeDockerfile(config?: Partial<DockerConfig>): string {\n const port = config?.port || 3000;\n const packageManager = this.metadata.packageManager || \"npm\";\n\n let installCmd = \"npm ci\";\n let runInstall = \"npm ci --production\";\n\n if (packageManager === \"pnpm\") {\n installCmd = \"pnpm install --frozen-lockfile\";\n runInstall = \"pnpm install --prod --frozen-lockfile\";\n }\n\n return `# Build stage\nFROM node:22-alpine AS builder\n\nWORKDIR /app\n\n# Copy package files\nCOPY package*.json ./\n${packageManager === \"pnpm\" ? \"COPY pnpm-lock.yaml ./\\n\" : \"\"}\n# Install dependencies\nRUN ${installCmd}\n\n# Copy source\nCOPY . .\n\n# Build\nRUN npm run build\n\n# Production stage\nFROM node:22-alpine AS production\n\nWORKDIR /app\n\n# Copy package files\nCOPY package*.json ./\n${packageManager === \"pnpm\" ? \"COPY pnpm-lock.yaml ./\\n\" : \"\"}\n# Install production dependencies only\nRUN ${runInstall}\n\n# Copy built files\nCOPY --from=builder /app/dist ./dist\n\n# Set environment\nENV NODE_ENV=production\nENV PORT=${port}\n\nEXPOSE ${port}\n\n# Non-root user\nUSER node\n\n# Start\nCMD [\"node\", \"dist/index.js\"]\n`;\n }\n\n /**\n * Generate Python Dockerfile\n */\n private generatePythonDockerfile(config?: Partial<DockerConfig>): string {\n const port = config?.port || 8000;\n\n return `# Build stage\nFROM python:3.12-slim AS builder\n\nWORKDIR /app\n\n# Install build dependencies\nRUN pip install --no-cache-dir poetry\n\n# Copy dependency files\nCOPY pyproject.toml poetry.lock ./\n\n# Install dependencies\nRUN poetry config virtualenvs.create false && \\\\\n poetry install --no-interaction --no-ansi --no-root --only main\n\n# Production stage\nFROM python:3.12-slim AS production\n\nWORKDIR /app\n\n# Copy dependencies from builder\nCOPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages\nCOPY --from=builder /usr/local/bin /usr/local/bin\n\n# Copy source\nCOPY . .\n\nENV PYTHONUNBUFFERED=1\nENV PORT=${port}\n\nEXPOSE ${port}\n\n# Non-root user\nRUN useradd -m appuser\nUSER appuser\n\nCMD [\"python\", \"-m\", \"uvicorn\", \"main:app\", \"--host\", \"0.0.0.0\", \"--port\", \"${port}\"]\n`;\n }\n\n /**\n * Generate Go Dockerfile\n */\n private generateGoDockerfile(config?: Partial<DockerConfig>): string {\n const port = config?.port || 8080;\n\n return `# Build stage\nFROM golang:1.22-alpine AS builder\n\nWORKDIR /app\n\n# Copy go mod files\nCOPY go.mod go.sum ./\n\n# Download dependencies\nRUN go mod download\n\n# Copy source\nCOPY . .\n\n# Build\nRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .\n\n# Production stage\nFROM alpine:latest AS production\n\nWORKDIR /app\n\n# Install ca-certificates\nRUN apk --no-cache add ca-certificates\n\n# Copy binary\nCOPY --from=builder /app/main .\n\nENV PORT=${port}\n\nEXPOSE ${port}\n\n# Non-root user\nRUN adduser -D appuser\nUSER appuser\n\nCMD [\"./main\"]\n`;\n }\n\n /**\n * Generate Docker Compose file\n */\n generateDockerCompose(_config?: Partial<ComposeConfig>): string {\n const port = 3000;\n const serviceName = this.metadata.name.toLowerCase().replace(/[^a-z0-9]/g, \"-\");\n\n return `version: '3.8'\n\nservices:\n ${serviceName}:\n build:\n context: .\n dockerfile: Dockerfile\n ports:\n - \"\\${PORT:-${port}}:${port}\"\n environment:\n - NODE_ENV=\\${NODE_ENV:-development}\n volumes:\n - .:/app\n - /app/node_modules\n restart: unless-stopped\n\n # Add additional services as needed\n # db:\n # image: postgres:16-alpine\n # environment:\n # POSTGRES_USER: \\${DB_USER:-app}\n # POSTGRES_PASSWORD: \\${DB_PASSWORD:-secret}\n # POSTGRES_DB: \\${DB_NAME:-app}\n # volumes:\n # - db-data:/var/lib/postgresql/data\n # ports:\n # - \"5432:5432\"\n\nvolumes:\n # db-data:\n\nnetworks:\n default:\n name: ${serviceName}-network\n`;\n }\n\n /**\n * Generate .dockerignore file\n */\n generateDockerignore(): string {\n return `# Dependencies\nnode_modules\n.pnpm-store\n\n# Build output\ndist\nbuild\n\n# Development\n.git\n.gitignore\n.env\n.env.*\n!.env.example\n\n# IDE\n.idea\n.vscode\n*.swp\n*.swo\n\n# Testing\ncoverage\n.nyc_output\n\n# Documentation\ndocs\n*.md\n!README.md\n\n# CI/CD\n.github\n.gitlab-ci.yml\n\n# Docker\nDockerfile\ndocker-compose*.yml\n.dockerignore\n\n# Misc\n*.log\n.DS_Store\nThumbs.db\n`;\n }\n}\n\n/**\n * Create a Docker generator\n */\nexport function createDockerGenerator(metadata: ProjectMetadata): DockerGenerator {\n return new DockerGenerator(metadata);\n}\n","/**\n * Documentation Generator for the OUTPUT phase\n *\n * Generates README, CONTRIBUTING, and other documentation\n */\n\nimport type { ProjectMetadata, DocumentationSet } from \"./types.js\";\n\n/**\n * Documentation Generator\n */\nexport class DocsGenerator {\n private metadata: ProjectMetadata;\n\n constructor(metadata: ProjectMetadata) {\n this.metadata = metadata;\n }\n\n /**\n * Generate all documentation\n */\n generate(): DocumentationSet {\n return {\n readme: this.generateReadme(),\n contributing: this.generateContributing(),\n changelog: this.generateChangelog(),\n api: this.generateApiDocs(),\n deployment: this.generateDeploymentDocs(),\n development: this.generateDevelopmentDocs(),\n };\n }\n\n /**\n * Generate README.md\n */\n generateReadme(): string {\n const { name, description, packageManager } = this.metadata;\n const pm = packageManager || \"npm\";\n const installCmd = pm === \"pnpm\" ? \"pnpm add\" : \"npm install\";\n const runCmd = pm === \"pnpm\" ? \"pnpm\" : \"npm run\";\n\n return `# ${name}\n\n${description}\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D22.0.0-brightgreen)](https://nodejs.org)\n\n## Installation\n\n\\`\\`\\`bash\n${installCmd} ${name}\n\\`\\`\\`\n\n## Quick Start\n\n\\`\\`\\`bash\n# Install dependencies\n${pm} install\n\n# Run in development\n${runCmd} dev\n\n# Build for production\n${runCmd} build\n\n# Run tests\n${runCmd} test\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`typescript\nimport { ... } from '${name}';\n\n// Your code here\n\\`\\`\\`\n\n## Documentation\n\n- [API Reference](./docs/api.md)\n- [Contributing Guide](./CONTRIBUTING.md)\n- [Changelog](./CHANGELOG.md)\n\n## Development\n\n\\`\\`\\`bash\n# Install dependencies\n${pm} install\n\n# Run tests\n${runCmd} test\n\n# Run tests with coverage\n${runCmd} test:coverage\n\n# Lint code\n${runCmd} lint\n\n# Format code\n${runCmd} format\n\\`\\`\\`\n\n## Contributing\n\nContributions are welcome! Please read the [Contributing Guide](./CONTRIBUTING.md) first.\n\n## License\n\nMIT License - see [LICENSE](./LICENSE) for details.\n\n---\n\nGenerated by [Corbat-Coco](https://github.com/corbat/corbat-coco)\n`;\n }\n\n /**\n * Generate CONTRIBUTING.md\n */\n generateContributing(): string {\n const { name, packageManager } = this.metadata;\n const pm = packageManager || \"npm\";\n const runCmd = pm === \"pnpm\" ? \"pnpm\" : \"npm run\";\n\n return `# Contributing to ${name}\n\nThank you for your interest in contributing! This guide will help you get started.\n\n## Development Setup\n\n1. Fork and clone the repository\n2. Install dependencies:\n \\`\\`\\`bash\n ${pm} install\n \\`\\`\\`\n3. Create a new branch for your feature:\n \\`\\`\\`bash\n git checkout -b feature/my-feature\n \\`\\`\\`\n\n## Development Workflow\n\n### Running Tests\n\n\\`\\`\\`bash\n# Run all tests\n${runCmd} test\n\n# Run tests in watch mode\n${runCmd} test:watch\n\n# Run tests with coverage\n${runCmd} test:coverage\n\\`\\`\\`\n\n### Linting and Formatting\n\n\\`\\`\\`bash\n# Lint code\n${runCmd} lint\n\n# Format code\n${runCmd} format\n\\`\\`\\`\n\n### Building\n\n\\`\\`\\`bash\n# Build for production\n${runCmd} build\n\n# Build in watch mode\n${runCmd} dev\n\\`\\`\\`\n\n## Commit Guidelines\n\nWe follow [Conventional Commits](https://www.conventionalcommits.org/):\n\n- \\`feat:\\` New features\n- \\`fix:\\` Bug fixes\n- \\`docs:\\` Documentation changes\n- \\`style:\\` Code style changes (formatting, etc.)\n- \\`refactor:\\` Code refactoring\n- \\`test:\\` Test additions or changes\n- \\`chore:\\` Maintenance tasks\n\nExample:\n\\`\\`\\`\nfeat: add user authentication\n\n- Add login endpoint\n- Add JWT token generation\n- Add session management\n\\`\\`\\`\n\n## Pull Request Process\n\n1. Update documentation if needed\n2. Add tests for new features\n3. Ensure all tests pass\n4. Update the CHANGELOG.md\n5. Submit your pull request\n\n### PR Checklist\n\n- [ ] Tests added/updated\n- [ ] Documentation updated\n- [ ] CHANGELOG.md updated\n- [ ] All tests passing\n- [ ] Code formatted and linted\n\n## Code Style\n\n- Use TypeScript for all new code\n- Follow existing code patterns\n- Add JSDoc comments for public APIs\n- Keep functions small and focused\n- Write meaningful variable names\n\n## Questions?\n\nFeel free to open an issue if you have questions or need help!\n`;\n }\n\n /**\n * Generate CHANGELOG.md\n */\n generateChangelog(): string {\n const { name, version } = this.metadata;\n const date = new Date().toISOString().split(\"T\")[0];\n\n return `# Changelog\n\nAll notable changes to ${name} will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [${version}] - ${date}\n\n### Added\n- Initial release\n- Core functionality\n\n### Changed\n- N/A\n\n### Deprecated\n- N/A\n\n### Removed\n- N/A\n\n### Fixed\n- N/A\n\n### Security\n- N/A\n\n---\n\n## Release Notes Format\n\n### Added\nFor new features.\n\n### Changed\nFor changes in existing functionality.\n\n### Deprecated\nFor soon-to-be removed features.\n\n### Removed\nFor now removed features.\n\n### Fixed\nFor any bug fixes.\n\n### Security\nFor vulnerabilities.\n`;\n }\n\n /**\n * Generate API documentation\n */\n generateApiDocs(): string {\n const { name } = this.metadata;\n\n return `# API Reference\n\n## ${name}\n\nThis document provides the API reference for ${name}.\n\n## Table of Contents\n\n1. [Installation](#installation)\n2. [Configuration](#configuration)\n3. [API](#api)\n4. [Examples](#examples)\n\n## Installation\n\n\\`\\`\\`bash\nnpm install ${name}\n\\`\\`\\`\n\n## Configuration\n\nConfiguration options:\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| ... | ... | ... | ... |\n\n## API\n\n### Functions\n\n#### \\`functionName(params)\\`\n\nDescription of the function.\n\n**Parameters:**\n- \\`param1\\` (Type): Description\n\n**Returns:**\n- Type: Description\n\n**Example:**\n\\`\\`\\`typescript\nconst result = functionName(param1);\n\\`\\`\\`\n\n## Examples\n\n### Basic Usage\n\n\\`\\`\\`typescript\nimport { ... } from '${name}';\n\n// Example code\n\\`\\`\\`\n\n### Advanced Usage\n\n\\`\\`\\`typescript\n// Advanced example\n\\`\\`\\`\n`;\n }\n\n /**\n * Generate deployment documentation\n */\n generateDeploymentDocs(): string {\n const { name } = this.metadata;\n\n return `# Deployment Guide\n\n## ${name}\n\nThis guide covers deploying ${name} to various environments.\n\n## Prerequisites\n\n- Node.js 22+\n- Docker (optional)\n- Cloud provider account (for cloud deployment)\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| NODE_ENV | No | development | Environment mode |\n| PORT | No | 3000 | Server port |\n\n## Deployment Options\n\n### 1. Docker Deployment\n\n\\`\\`\\`bash\n# Build the image\ndocker build -t ${name} .\n\n# Run the container\ndocker run -p 3000:3000 ${name}\n\\`\\`\\`\n\n### 2. Docker Compose\n\n\\`\\`\\`bash\ndocker compose up -d\n\\`\\`\\`\n\n### 3. Cloud Platforms\n\n#### AWS (ECS/Fargate)\n\n1. Push image to ECR\n2. Create ECS task definition\n3. Create ECS service\n\n#### Google Cloud (Cloud Run)\n\n\\`\\`\\`bash\ngcloud run deploy ${name} --source .\n\\`\\`\\`\n\n#### Azure (Container Apps)\n\n\\`\\`\\`bash\naz containerapp up --name ${name} --source .\n\\`\\`\\`\n\n## Health Checks\n\nThe application exposes health endpoints:\n\n- \\`GET /health\\` - Basic health check\n- \\`GET /ready\\` - Readiness check\n\n## Monitoring\n\nConfigure monitoring with your preferred provider:\n\n- Prometheus metrics (optional)\n- Structured logging (JSON)\n- Error tracking (Sentry, etc.)\n\n## Scaling\n\nHorizontal scaling recommendations:\n\n- CPU-based: 70% threshold\n- Memory: 80% threshold\n- Request latency: p99 < 500ms\n`;\n }\n\n /**\n * Generate development documentation\n */\n generateDevelopmentDocs(): string {\n const { packageManager } = this.metadata;\n const pm = packageManager || \"npm\";\n const runCmd = pm === \"pnpm\" ? \"pnpm\" : \"npm run\";\n\n return `# Development Guide\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js 22+\n- ${pm}\n\n### Setup\n\n\\`\\`\\`bash\n# Clone the repository\ngit clone <repository-url>\ncd <project-directory>\n\n# Install dependencies\n${pm} install\n\n# Start development server\n${runCmd} dev\n\\`\\`\\`\n\n## Project Structure\n\n\\`\\`\\`\n├── src/ # Source code\n│ ├── index.ts # Entry point\n│ └── ...\n├── tests/ # Test files\n├── docs/ # Documentation\n├── dist/ # Build output\n├── package.json # Dependencies\n└── tsconfig.json # TypeScript config\n\\`\\`\\`\n\n## Development Commands\n\n| Command | Description |\n|---------|-------------|\n| \\`${runCmd} dev\\` | Start development server |\n| \\`${runCmd} build\\` | Build for production |\n| \\`${runCmd} test\\` | Run tests |\n| \\`${runCmd} test:watch\\` | Run tests in watch mode |\n| \\`${runCmd} test:coverage\\` | Run tests with coverage |\n| \\`${runCmd} lint\\` | Lint code |\n| \\`${runCmd} format\\` | Format code |\n\n## Debugging\n\n### VS Code\n\n1. Open the project in VS Code\n2. Press F5 or use the debug panel\n3. Select \"Debug Node.js\" configuration\n\n### Node Inspector\n\n\\`\\`\\`bash\nnode --inspect dist/index.js\n\\`\\`\\`\n\n## Testing\n\n### Running Tests\n\n\\`\\`\\`bash\n# All tests\n${runCmd} test\n\n# Specific test file\n${runCmd} test path/to/test.ts\n\n# With coverage\n${runCmd} test:coverage\n\\`\\`\\`\n\n### Writing Tests\n\n\\`\\`\\`typescript\nimport { describe, it, expect } from 'vitest';\n\ndescribe('MyFunction', () => {\n it('should work correctly', () => {\n expect(myFunction()).toBe(expected);\n });\n});\n\\`\\`\\`\n\n## Code Style\n\n- TypeScript strict mode\n- ESLint for linting\n- Prettier for formatting\n\n## Troubleshooting\n\n### Common Issues\n\n1. **Node version mismatch**\n - Use \\`nvm use\\` to switch to correct version\n\n2. **Dependency issues**\n - Delete \\`node_modules\\` and reinstall\n\n3. **Build errors**\n - Check TypeScript configuration\n - Ensure all types are correct\n`;\n }\n}\n\n/**\n * Create a documentation generator\n */\nexport function createDocsGenerator(metadata: ProjectMetadata): DocsGenerator {\n return new DocsGenerator(metadata);\n}\n","/**\n * OUTPUT Phase Executor\n *\n * Orchestrates CI/CD, Docker, and documentation 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 { OutputConfig, ProjectMetadata } from \"./types.js\";\nimport { DEFAULT_OUTPUT_CONFIG } from \"./types.js\";\nexport { DEFAULT_OUTPUT_CONFIG } from \"./types.js\";\nimport { CICDGenerator, createDefaultCICDConfig } from \"./cicd.js\";\nimport { DockerGenerator } from \"./docker.js\";\nimport { DocsGenerator } from \"./docs.js\";\n\n/**\n * OUTPUT phase executor\n */\nexport class OutputExecutor implements PhaseExecutor {\n readonly name = \"output\";\n readonly description = \"Generate CI/CD, Docker, and documentation\";\n\n private config: OutputConfig;\n\n constructor(config: Partial<OutputConfig> = {}) {\n this.config = this.mergeConfig(DEFAULT_OUTPUT_CONFIG, config);\n }\n\n /**\n * Deep merge configuration\n */\n private mergeConfig(\n defaults: OutputConfig,\n overrides: Partial<OutputConfig>\n ): OutputConfig {\n return {\n cicd: {\n ...defaults.cicd,\n ...overrides.cicd,\n features: {\n ...defaults.cicd.features,\n ...overrides.cicd?.features,\n },\n },\n docker: {\n ...defaults.docker,\n ...overrides.docker,\n },\n docs: {\n ...defaults.docs,\n ...overrides.docs,\n },\n release: {\n ...defaults.release,\n ...overrides.release,\n },\n };\n }\n\n /**\n * Check if the phase can start\n */\n canStart(_context: PhaseContext): boolean {\n return true;\n }\n\n /**\n * Execute the OUTPUT phase\n */\n async execute(context: PhaseContext): Promise<PhaseResult> {\n const startTime = new Date();\n const artifacts: PhaseArtifact[] = [];\n\n try {\n // Load project metadata\n const metadata = await this.loadMetadata(context.projectPath);\n\n // Generate CI/CD files\n const cicdConfig = createDefaultCICDConfig(this.config.cicd.provider);\n cicdConfig.features = {\n ...cicdConfig.features,\n ...this.config.cicd.features,\n };\n\n const cicdGenerator = new CICDGenerator(metadata, cicdConfig);\n const cicdFiles = cicdGenerator.generate();\n\n for (const file of cicdFiles) {\n const filePath = path.join(context.projectPath, file.path);\n await this.ensureDir(path.dirname(filePath));\n await fs.writeFile(filePath, file.content, \"utf-8\");\n artifacts.push({\n type: \"cicd\",\n path: filePath,\n description: file.description,\n });\n }\n\n // Generate Docker files\n if (this.config.docker.enabled) {\n const dockerGenerator = new DockerGenerator(metadata);\n\n // Dockerfile\n const dockerfile = dockerGenerator.generateDockerfile();\n const dockerfilePath = path.join(context.projectPath, \"Dockerfile\");\n await fs.writeFile(dockerfilePath, dockerfile, \"utf-8\");\n artifacts.push({\n type: \"deployment\",\n path: dockerfilePath,\n description: \"Dockerfile\",\n });\n\n // .dockerignore\n const dockerignore = dockerGenerator.generateDockerignore();\n const dockerignorePath = path.join(context.projectPath, \".dockerignore\");\n await fs.writeFile(dockerignorePath, dockerignore, \"utf-8\");\n artifacts.push({\n type: \"deployment\",\n path: dockerignorePath,\n description: \".dockerignore\",\n });\n\n // docker-compose.yml\n if (this.config.docker.compose) {\n const compose = dockerGenerator.generateDockerCompose();\n const composePath = path.join(context.projectPath, \"docker-compose.yml\");\n await fs.writeFile(composePath, compose, \"utf-8\");\n artifacts.push({\n type: \"deployment\",\n path: composePath,\n description: \"Docker Compose configuration\",\n });\n }\n }\n\n // Generate documentation\n const docsGenerator = new DocsGenerator(metadata);\n const docs = docsGenerator.generate();\n\n // README.md\n if (this.config.docs.readme) {\n const readmePath = path.join(context.projectPath, \"README.md\");\n await fs.writeFile(readmePath, docs.readme, \"utf-8\");\n artifacts.push({\n type: \"documentation\",\n path: readmePath,\n description: \"README\",\n });\n }\n\n // CONTRIBUTING.md\n if (this.config.docs.contributing) {\n const contributingPath = path.join(context.projectPath, \"CONTRIBUTING.md\");\n await fs.writeFile(contributingPath, docs.contributing, \"utf-8\");\n artifacts.push({\n type: \"documentation\",\n path: contributingPath,\n description: \"Contributing guide\",\n });\n }\n\n // CHANGELOG.md\n if (this.config.docs.changelog) {\n const changelogPath = path.join(context.projectPath, \"CHANGELOG.md\");\n await fs.writeFile(changelogPath, docs.changelog, \"utf-8\");\n artifacts.push({\n type: \"documentation\",\n path: changelogPath,\n description: \"Changelog\",\n });\n }\n\n // docs/api.md\n if (this.config.docs.api) {\n const docsDir = path.join(context.projectPath, \"docs\");\n await this.ensureDir(docsDir);\n\n if (docs.api) {\n const apiPath = path.join(docsDir, \"api.md\");\n await fs.writeFile(apiPath, docs.api, \"utf-8\");\n artifacts.push({\n type: \"documentation\",\n path: apiPath,\n description: \"API documentation\",\n });\n }\n\n if (docs.deployment) {\n const deployPath = path.join(docsDir, \"deployment.md\");\n await fs.writeFile(deployPath, docs.deployment, \"utf-8\");\n artifacts.push({\n type: \"documentation\",\n path: deployPath,\n description: \"Deployment guide\",\n });\n }\n\n if (docs.development) {\n const devPath = path.join(docsDir, \"development.md\");\n await fs.writeFile(devPath, docs.development, \"utf-8\");\n artifacts.push({\n type: \"documentation\",\n path: devPath,\n description: \"Development guide\",\n });\n }\n }\n\n const endTime = new Date();\n\n return {\n phase: \"output\",\n success: true,\n artifacts,\n metrics: {\n startTime,\n endTime,\n durationMs: endTime.getTime() - startTime.getTime(),\n llmCalls: 0,\n tokensUsed: 0,\n },\n };\n } catch (error) {\n return {\n phase: \"output\",\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 return true;\n }\n\n /**\n * Create a checkpoint\n */\n async checkpoint(_context: PhaseContext): Promise<PhaseCheckpoint> {\n return {\n phase: \"output\",\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 // OUTPUT is fast enough to re-run\n }\n\n /**\n * Load project metadata from package.json\n */\n private async loadMetadata(projectPath: string): Promise<ProjectMetadata> {\n try {\n const packagePath = path.join(projectPath, \"package.json\");\n const content = await fs.readFile(packagePath, \"utf-8\");\n const pkg = JSON.parse(content) as {\n name?: string;\n description?: string;\n version?: string;\n author?: string;\n license?: string;\n repository?: { url?: string } | string;\n scripts?: {\n test?: string;\n build?: string;\n start?: string;\n };\n };\n\n // Detect package manager\n let packageManager = \"npm\";\n try {\n await fs.access(path.join(projectPath, \"pnpm-lock.yaml\"));\n packageManager = \"pnpm\";\n } catch {\n try {\n await fs.access(path.join(projectPath, \"yarn.lock\"));\n packageManager = \"yarn\";\n } catch {\n // Default to npm\n }\n }\n\n // Get repository URL\n let repository: string | undefined;\n if (typeof pkg.repository === \"string\") {\n repository = pkg.repository;\n } else if (pkg.repository?.url) {\n repository = pkg.repository.url;\n }\n\n return {\n name: pkg.name || path.basename(projectPath),\n description: pkg.description || \"\",\n version: pkg.version || \"0.1.0\",\n language: \"typescript\",\n packageManager,\n testCommand: pkg.scripts?.test || \"test\",\n buildCommand: pkg.scripts?.build || \"build\",\n startCommand: pkg.scripts?.start || \"start\",\n author: pkg.author,\n license: pkg.license || \"MIT\",\n repository,\n };\n } catch {\n // Return defaults\n return {\n name: path.basename(projectPath),\n description: \"\",\n version: \"0.1.0\",\n language: \"typescript\",\n packageManager: \"npm\",\n testCommand: \"test\",\n buildCommand: \"build\",\n startCommand: \"start\",\n license: \"MIT\",\n };\n }\n }\n\n /**\n * Ensure directory exists\n */\n private async ensureDir(dir: string): Promise<void> {\n await fs.mkdir(dir, { recursive: true });\n }\n}\n\n/**\n * Create an OUTPUT phase executor\n */\nexport function createOutputExecutor(\n config?: Partial<OutputConfig>\n): OutputExecutor {\n return new OutputExecutor(config);\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","import type { Phase, PhaseResult, PhaseContext, PhaseExecutor } from \"../phases/types.js\";\nimport type {\n Orchestrator,\n OrchestratorConfig,\n OrchestratorEvents,\n Progress,\n ProjectState,\n} from \"./types.js\";\nimport { createConvergeExecutor } from \"../phases/converge/executor.js\";\nimport { createOrchestrateExecutor } from \"../phases/orchestrate/executor.js\";\nimport { createCompleteExecutor } from \"../phases/complete/executor.js\";\nimport { createOutputExecutor } from \"../phases/output/executor.js\";\nimport { createProvider } from \"../providers/index.js\";\n\n/**\n * Create a new orchestrator instance\n */\nexport function createOrchestrator(config: OrchestratorConfig): Orchestrator {\n // Internal state\n let state: ProjectState = createInitialState(config);\n const listeners = new Map<keyof OrchestratorEvents, Set<OrchestratorEvents[keyof OrchestratorEvents]>>();\n\n // Event emitter\n function emit<K extends keyof OrchestratorEvents>(\n event: K,\n ...args: Parameters<OrchestratorEvents[K]>\n ): void {\n const handlers = listeners.get(event);\n if (handlers) {\n for (const handler of handlers) {\n try {\n // @ts-expect-error - TypeScript can't infer the correct handler type\n handler(...args);\n } catch (error) {\n console.error(`Error in event handler for ${event}:`, error);\n }\n }\n }\n }\n\n // Orchestrator implementation\n const orchestrator: Orchestrator = {\n async initialize(projectPath: string): Promise<void> {\n state.path = projectPath;\n state.updatedAt = new Date();\n\n // Load existing state if available\n const existingState = await loadExistingState(projectPath);\n if (existingState) {\n state = existingState;\n }\n },\n\n async start(): Promise<void> {\n if (state.currentPhase === \"idle\") {\n await orchestrator.transitionTo(\"converge\");\n }\n },\n\n async pause(): Promise<void> {\n // Save current state\n await saveState(state);\n },\n\n async resume(): Promise<void> {\n // Resume from current phase\n if (state.currentPhase !== \"idle\") {\n emit(\"phase:start\", state.currentPhase);\n }\n },\n\n async stop(): Promise<void> {\n await saveState(state);\n },\n\n getCurrentPhase(): Phase {\n return state.currentPhase;\n },\n\n async transitionTo(phase: Phase): Promise<PhaseResult> {\n const previousPhase = state.currentPhase;\n\n // Record transition\n state.phaseHistory.push({\n from: previousPhase,\n to: phase,\n timestamp: new Date(),\n reason: \"manual_transition\",\n });\n\n state.currentPhase = phase;\n state.updatedAt = new Date();\n\n emit(\"phase:start\", phase);\n\n // Execute phase\n const result = await executePhase(phase, state, config);\n\n emit(\"phase:complete\", phase, result);\n\n return result;\n },\n\n getState(): ProjectState {\n return { ...state };\n },\n\n getProgress(): Progress {\n return calculateProgress(state);\n },\n\n on<K extends keyof OrchestratorEvents>(event: K, handler: OrchestratorEvents[K]): void {\n if (!listeners.has(event)) {\n listeners.set(event, new Set());\n }\n listeners.get(event)!.add(handler);\n },\n\n off<K extends keyof OrchestratorEvents>(event: K, handler: OrchestratorEvents[K]): void {\n const handlers = listeners.get(event);\n if (handlers) {\n handlers.delete(handler);\n }\n },\n };\n\n return orchestrator;\n}\n\n/**\n * Create initial project state\n */\nfunction createInitialState(config: OrchestratorConfig): ProjectState {\n return {\n id: generateId(),\n name: \"\",\n path: config.projectPath,\n createdAt: new Date(),\n updatedAt: new Date(),\n currentPhase: \"idle\",\n phaseHistory: [],\n currentTask: null,\n completedTasks: [],\n pendingTasks: [],\n lastScores: null,\n qualityHistory: [],\n lastCheckpoint: null,\n };\n}\n\n/**\n * Load existing state from disk\n */\nasync function loadExistingState(projectPath: string): Promise<ProjectState | null> {\n try {\n const fs = await import(\"node:fs/promises\");\n const statePath = `${projectPath}/.coco/state/project.json`;\n const content = await fs.readFile(statePath, \"utf-8\");\n const data = JSON.parse(content) as ProjectState;\n\n // Convert date strings back to Date objects\n data.createdAt = new Date(data.createdAt);\n data.updatedAt = new Date(data.updatedAt);\n\n return data;\n } catch {\n return null;\n }\n}\n\n/**\n * Save state to disk\n */\nasync function saveState(state: ProjectState): Promise<void> {\n const fs = await import(\"node:fs/promises\");\n const statePath = `${state.path}/.coco/state`;\n\n await fs.mkdir(statePath, { recursive: true });\n await fs.writeFile(\n `${statePath}/project.json`,\n JSON.stringify(state, null, 2),\n \"utf-8\"\n );\n}\n\n/**\n * Get executor for a phase\n */\nfunction getPhaseExecutor(phase: Phase): PhaseExecutor | null {\n switch (phase) {\n case \"converge\":\n return createConvergeExecutor();\n case \"orchestrate\":\n return createOrchestrateExecutor();\n case \"complete\":\n return createCompleteExecutor();\n case \"output\":\n return createOutputExecutor();\n default:\n return null;\n }\n}\n\n/**\n * Create a phase context from orchestrator config\n */\nasync function createPhaseContext(\n config: OrchestratorConfig,\n state: ProjectState\n): Promise<PhaseContext> {\n // Create LLM provider\n const provider = await createProvider(config.provider.type, {\n apiKey: config.provider.apiKey,\n model: config.provider.model,\n maxTokens: config.provider.maxTokens,\n });\n\n // Create LLM interface that adapts the provider\n const llm: PhaseContext[\"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 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 provider.chatWithTools(adaptedMessages, { 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\n // Create minimal tool implementations\n const tools: PhaseContext[\"tools\"] = {\n file: {\n async read(path: string): Promise<string> {\n const fs = await import(\"node:fs/promises\");\n return fs.readFile(path, \"utf-8\");\n },\n async write(path: string, content: string): Promise<void> {\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): Promise<boolean> {\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): Promise<string[]> {\n // Simplified glob implementation\n const { glob } = await import(\"glob\");\n return glob(pattern, { cwd: state.path });\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 || state.path,\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 const { execa } = await import(\"execa\");\n const result = await execa(\"git\", [\"status\", \"--porcelain\", \"-b\"], { cwd: state.path });\n const lines = result.stdout.split(\"\\n\");\n const branchLine = lines[0] || \"\";\n const branch = branchLine.replace(\"## \", \"\").split(\"...\")[0] || \"main\";\n return {\n branch,\n clean: lines.length <= 1,\n staged: [],\n unstaged: [],\n untracked: [],\n };\n },\n async commit(message: string, files?: string[]) {\n const { execa } = await import(\"execa\");\n if (files && files.length > 0) {\n await execa(\"git\", [\"add\", ...files], { cwd: state.path });\n }\n await execa(\"git\", [\"commit\", \"-m\", message], { cwd: state.path });\n },\n async push() {\n const { execa } = await import(\"execa\");\n await execa(\"git\", [\"push\"], { cwd: state.path });\n },\n },\n test: {\n async run(pattern?: string) {\n const { execa } = await import(\"execa\");\n try {\n const args = [\"test\", \"--reporter=json\"];\n if (pattern) args.push(pattern);\n await execa(\"pnpm\", args, { cwd: state.path });\n return {\n passed: 0,\n failed: 0,\n skipped: 0,\n duration: 0,\n failures: [],\n };\n } catch {\n return {\n passed: 0,\n failed: 1,\n skipped: 0,\n duration: 0,\n failures: [{ name: \"test\", message: \"Tests failed\" }],\n };\n }\n },\n async coverage() {\n return {\n lines: 0,\n branches: 0,\n functions: 0,\n statements: 0,\n };\n },\n },\n quality: {\n async lint(_files: string[]) {\n return {\n errors: 0,\n warnings: 0,\n issues: [],\n };\n },\n async complexity(_files: string[]) {\n return {\n averageComplexity: 0,\n maxComplexity: 0,\n files: [],\n };\n },\n async security(_files: string[]) {\n return {\n vulnerabilities: 0,\n issues: [],\n };\n },\n },\n };\n\n return {\n projectPath: state.path,\n config: {\n quality: {\n minScore: config.quality.minScore,\n minCoverage: config.quality.minCoverage,\n maxIterations: config.quality.maxIterations,\n convergenceThreshold: config.quality.convergenceThreshold,\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 llm,\n };\n}\n\n/**\n * Execute a phase with real executors\n */\nasync function executePhase(\n phase: Phase,\n state: ProjectState,\n config: OrchestratorConfig\n): Promise<PhaseResult> {\n const executor = getPhaseExecutor(phase);\n\n if (!executor) {\n return {\n phase: \"idle\",\n success: false,\n artifacts: [],\n error: `Unknown phase: ${phase}`,\n };\n }\n\n try {\n const context = await createPhaseContext(config, state);\n\n // Check if phase can start\n if (!executor.canStart(context)) {\n return {\n phase,\n success: false,\n artifacts: [],\n error: `Phase ${phase} cannot start in current state`,\n };\n }\n\n // Execute the phase\n const result = await executor.execute(context);\n\n // Save state after execution\n await saveState(state);\n\n return result;\n } catch (error) {\n return {\n phase,\n success: false,\n artifacts: [],\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Calculate current progress\n */\nfunction calculateProgress(state: ProjectState): Progress {\n const phaseOrder: Phase[] = [\"converge\", \"orchestrate\", \"complete\", \"output\"];\n const currentIndex = phaseOrder.indexOf(state.currentPhase);\n const overallProgress = currentIndex >= 0 ? currentIndex / phaseOrder.length : 0;\n\n return {\n phase: state.currentPhase,\n phaseProgress: 0, // TODO: Calculate based on phase-specific progress\n overallProgress,\n startedAt: state.createdAt,\n task: state.currentTask\n ? {\n id: state.currentTask.id,\n title: state.currentTask.title,\n iteration: state.currentTask.iteration,\n currentScore: state.currentTask.scores.length > 0\n ? state.currentTask.scores[state.currentTask.scores.length - 1]?.overall ?? 0\n : 0,\n }\n : undefined,\n };\n}\n\n/**\n * Generate a unique ID\n */\nfunction generateId(): string {\n return `proj_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 9)}`;\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 * Tool exports for Corbat-Coco\n */\n\n// Registry\nexport {\n ToolRegistry,\n getToolRegistry,\n createToolRegistry,\n defineTool,\n type ToolDefinition,\n type ToolCategory,\n type ToolResult,\n} from \"./registry.js\";\n\n// File tools\nexport {\n readFileTool,\n writeFileTool,\n editFileTool,\n globTool,\n fileExistsTool,\n listDirTool,\n deleteFileTool,\n fileTools,\n} from \"./file.js\";\n\n// Bash tools\nexport {\n bashExecTool,\n bashBackgroundTool,\n commandExistsTool,\n getEnvTool,\n bashTools,\n} from \"./bash.js\";\n\n// Git tools\nexport {\n gitStatusTool,\n gitDiffTool,\n gitAddTool,\n gitCommitTool,\n gitLogTool,\n gitBranchTool,\n gitCheckoutTool,\n gitPushTool,\n gitPullTool,\n gitInitTool,\n gitTools,\n} from \"./git.js\";\n\n// Test tools\nexport {\n runTestsTool,\n getCoverageTool,\n runTestFileTool,\n testTools,\n type TestResult,\n type TestFailure,\n type CoverageResult,\n} from \"./test.js\";\n\n// Quality tools\nexport {\n runLinterTool,\n analyzeComplexityTool,\n calculateQualityTool,\n qualityTools,\n type LintResult,\n type LintIssue,\n type ComplexityResult,\n type FileComplexity,\n type FunctionComplexity,\n} from \"./quality.js\";\n\n/**\n * Register all tools with a registry\n */\nimport { ToolRegistry, type ToolDefinition } from \"./registry.js\";\nimport { fileTools } from \"./file.js\";\nimport { bashTools } from \"./bash.js\";\nimport { gitTools } from \"./git.js\";\nimport { testTools } from \"./test.js\";\nimport { qualityTools } from \"./quality.js\";\n\nexport function registerAllTools(registry: ToolRegistry): void {\n const allTools = [\n ...fileTools,\n ...bashTools,\n ...gitTools,\n ...testTools,\n ...qualityTools,\n ];\n\n for (const tool of allTools) {\n // Use type assertion since tools have different generic parameters\n // but all conform to the base ToolDefinition interface\n registry.register(tool as ToolDefinition<unknown, unknown>);\n }\n}\n\n/**\n * Create a registry with all tools registered\n */\nexport function createFullToolRegistry(): ToolRegistry {\n const registry = new ToolRegistry();\n registerAllTools(registry);\n return registry;\n}\n","/**\n * File tools for Corbat-Coco\n * Read, write, edit, and search files\n */\n\nimport { z } from \"zod\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { glob } from \"glob\";\nimport { defineTool, type ToolDefinition } from \"./registry.js\";\nimport { FileSystemError } from \"../utils/errors.js\";\n\n/**\n * Read file tool\n */\nexport const readFileTool: ToolDefinition<\n { path: string; encoding?: string },\n { content: string; lines: number; size: number }\n> = defineTool({\n name: \"read_file\",\n description: \"Read the contents of a file\",\n category: \"file\",\n parameters: z.object({\n path: z.string().describe(\"Absolute or relative path to the file\"),\n encoding: z.string().optional().default(\"utf-8\").describe(\"File encoding\"),\n }),\n async execute({ path: filePath, encoding }) {\n try {\n const absolutePath = path.resolve(filePath);\n const content = await fs.readFile(absolutePath, encoding as BufferEncoding);\n const stats = await fs.stat(absolutePath);\n\n return {\n content,\n lines: content.split(\"\\n\").length,\n size: stats.size,\n };\n } catch (error) {\n throw new FileSystemError(`Failed to read file: ${filePath}`, {\n path: filePath,\n operation: \"read\",\n cause: error instanceof Error ? error : undefined,\n });\n }\n },\n});\n\n/**\n * Write file tool\n */\nexport const writeFileTool: ToolDefinition<\n { path: string; content: string; createDirs?: boolean },\n { path: string; size: number }\n> = defineTool({\n name: \"write_file\",\n description: \"Write content to a file, creating it if it doesn't exist\",\n category: \"file\",\n parameters: z.object({\n path: z.string().describe(\"Absolute or relative path to the file\"),\n content: z.string().describe(\"Content to write\"),\n createDirs: z.boolean().optional().default(true).describe(\"Create parent directories if needed\"),\n }),\n async execute({ path: filePath, content, createDirs }) {\n try {\n const absolutePath = path.resolve(filePath);\n\n if (createDirs) {\n await fs.mkdir(path.dirname(absolutePath), { recursive: true });\n }\n\n await fs.writeFile(absolutePath, content, \"utf-8\");\n const stats = await fs.stat(absolutePath);\n\n return {\n path: absolutePath,\n size: stats.size,\n };\n } catch (error) {\n throw new FileSystemError(`Failed to write file: ${filePath}`, {\n path: filePath,\n operation: \"write\",\n cause: error instanceof Error ? error : undefined,\n });\n }\n },\n});\n\n/**\n * Edit file tool (find and replace)\n */\nexport const editFileTool: ToolDefinition<\n { path: string; oldText: string; newText: string; all?: boolean },\n { path: string; replacements: number }\n> = defineTool({\n name: \"edit_file\",\n description: \"Edit a file by replacing text\",\n category: \"file\",\n parameters: z.object({\n path: z.string().describe(\"Path to the file to edit\"),\n oldText: z.string().describe(\"Text to find\"),\n newText: z.string().describe(\"Text to replace with\"),\n all: z.boolean().optional().default(false).describe(\"Replace all occurrences\"),\n }),\n async execute({ path: filePath, oldText, newText, all }) {\n try {\n const absolutePath = path.resolve(filePath);\n let content = await fs.readFile(absolutePath, \"utf-8\");\n\n // Count replacements\n let replacements = 0;\n if (all) {\n const regex = new RegExp(escapeRegex(oldText), \"g\");\n const matches = content.match(regex);\n replacements = matches?.length ?? 0;\n content = content.replace(regex, newText);\n } else {\n if (content.includes(oldText)) {\n content = content.replace(oldText, newText);\n replacements = 1;\n }\n }\n\n if (replacements === 0) {\n throw new Error(`Text not found in file: \"${oldText.slice(0, 50)}...\"`);\n }\n\n await fs.writeFile(absolutePath, content, \"utf-8\");\n\n return {\n path: absolutePath,\n replacements,\n };\n } catch (error) {\n throw new FileSystemError(`Failed to edit file: ${filePath}`, {\n path: filePath,\n operation: \"write\",\n cause: error instanceof Error ? error : undefined,\n });\n }\n },\n});\n\n/**\n * Glob tool (find files by pattern)\n */\nexport const globTool: ToolDefinition<\n { pattern: string; cwd?: string; ignore?: string[] },\n { files: string[]; count: number }\n> = defineTool({\n name: \"glob\",\n description: \"Find files matching a glob pattern\",\n category: \"file\",\n parameters: z.object({\n pattern: z.string().describe(\"Glob pattern (e.g., '**/*.ts')\"),\n cwd: z.string().optional().describe(\"Base directory for search\"),\n ignore: z.array(z.string()).optional().describe(\"Patterns to ignore\"),\n }),\n async execute({ pattern, cwd, ignore }) {\n try {\n const files = await glob(pattern, {\n cwd: cwd ?? process.cwd(),\n ignore: ignore ?? [\"**/node_modules/**\", \"**/.git/**\"],\n absolute: true,\n });\n\n return {\n files,\n count: files.length,\n };\n } catch (error) {\n throw new FileSystemError(`Glob search failed: ${pattern}`, {\n path: cwd ?? process.cwd(),\n operation: \"glob\",\n cause: error instanceof Error ? error : undefined,\n });\n }\n },\n});\n\n/**\n * File exists tool\n */\nexport const fileExistsTool: ToolDefinition<\n { path: string },\n { exists: boolean; isFile: boolean; isDirectory: boolean }\n> = defineTool({\n name: \"file_exists\",\n description: \"Check if a file or directory exists\",\n category: \"file\",\n parameters: z.object({\n path: z.string().describe(\"Path to check\"),\n }),\n async execute({ path: filePath }) {\n try {\n const absolutePath = path.resolve(filePath);\n const stats = await fs.stat(absolutePath);\n\n return {\n exists: true,\n isFile: stats.isFile(),\n isDirectory: stats.isDirectory(),\n };\n } catch {\n return {\n exists: false,\n isFile: false,\n isDirectory: false,\n };\n }\n },\n});\n\n/**\n * List directory tool\n */\nexport const listDirTool: ToolDefinition<\n { path: string; recursive?: boolean },\n { entries: Array<{ name: string; type: \"file\" | \"directory\"; size?: number }> }\n> = defineTool({\n name: \"list_dir\",\n description: \"List contents of a directory\",\n category: \"file\",\n parameters: z.object({\n path: z.string().describe(\"Directory path\"),\n recursive: z.boolean().optional().default(false).describe(\"List recursively\"),\n }),\n async execute({ path: dirPath, recursive }) {\n try {\n const absolutePath = path.resolve(dirPath);\n const entries: Array<{ name: string; type: \"file\" | \"directory\"; size?: number }> = [];\n\n async function listDir(dir: string, prefix: string = \"\") {\n const items = await fs.readdir(dir, { withFileTypes: true });\n\n for (const item of items) {\n const fullPath = path.join(dir, item.name);\n const relativePath = prefix ? `${prefix}/${item.name}` : item.name;\n\n if (item.isDirectory()) {\n entries.push({ name: relativePath, type: \"directory\" });\n if (recursive) {\n await listDir(fullPath, relativePath);\n }\n } else if (item.isFile()) {\n const stats = await fs.stat(fullPath);\n entries.push({ name: relativePath, type: \"file\", size: stats.size });\n }\n }\n }\n\n await listDir(absolutePath);\n\n return { entries };\n } catch (error) {\n throw new FileSystemError(`Failed to list directory: ${dirPath}`, {\n path: dirPath,\n operation: \"read\",\n cause: error instanceof Error ? error : undefined,\n });\n }\n },\n});\n\n/**\n * Delete file tool\n */\nexport const deleteFileTool: ToolDefinition<\n { path: string; recursive?: boolean },\n { deleted: boolean }\n> = defineTool({\n name: \"delete_file\",\n description: \"Delete a file or directory\",\n category: \"file\",\n parameters: z.object({\n path: z.string().describe(\"Path to delete\"),\n recursive: z.boolean().optional().default(false).describe(\"Delete directories recursively\"),\n }),\n async execute({ path: filePath, recursive }) {\n try {\n const absolutePath = path.resolve(filePath);\n const stats = await fs.stat(absolutePath);\n\n if (stats.isDirectory()) {\n if (!recursive) {\n throw new Error(\"Cannot delete directory without recursive flag\");\n }\n await fs.rm(absolutePath, { recursive: true });\n } else {\n await fs.unlink(absolutePath);\n }\n\n return { deleted: true };\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return { deleted: false };\n }\n throw new FileSystemError(`Failed to delete: ${filePath}`, {\n path: filePath,\n operation: \"delete\",\n cause: error instanceof Error ? error : undefined,\n });\n }\n },\n});\n\n/**\n * All file tools\n */\nexport const fileTools = [\n readFileTool,\n writeFileTool,\n editFileTool,\n globTool,\n fileExistsTool,\n listDirTool,\n deleteFileTool,\n];\n\n/**\n * Escape regex special characters\n */\nfunction escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","/**\n * Bash/Shell tools for Corbat-Coco\n * Execute shell commands with safety controls\n */\n\nimport { z } from \"zod\";\nimport { execa, type Options as ExecaOptions } from \"execa\";\nimport { defineTool, type ToolDefinition } from \"./registry.js\";\nimport { ToolError, TimeoutError } from \"../utils/errors.js\";\n\n/**\n * Default timeout for commands (2 minutes)\n */\nconst DEFAULT_TIMEOUT_MS = 120000;\n\n/**\n * Maximum output size (1MB)\n */\nconst MAX_OUTPUT_SIZE = 1024 * 1024;\n\n/**\n * Dangerous commands that should be blocked or warned\n */\nconst DANGEROUS_PATTERNS = [\n /\\brm\\s+-rf\\s+\\/(?!\\w)/, // rm -rf / (root)\n /\\bsudo\\s+rm\\s+-rf/, // sudo rm -rf\n /\\b:?\\(\\)\\s*\\{.*\\}/, // Fork bomb pattern\n /\\bdd\\s+if=.*of=\\/dev\\//, // dd to device\n /\\bmkfs\\./, // Format filesystem\n /\\bformat\\s+/, // Windows format\n];\n\n/**\n * Execute bash command tool\n */\nexport const bashExecTool: ToolDefinition<\n {\n command: string;\n cwd?: string;\n timeout?: number;\n env?: Record<string, string>;\n },\n {\n stdout: string;\n stderr: string;\n exitCode: number;\n duration: number;\n }\n> = defineTool({\n name: \"bash_exec\",\n description: \"Execute a bash/shell command\",\n category: \"bash\",\n parameters: z.object({\n command: z.string().describe(\"Command to execute\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n timeout: z.number().optional().describe(\"Timeout in milliseconds\"),\n env: z.record(z.string()).optional().describe(\"Environment variables\"),\n }),\n async execute({ command, cwd, timeout, env }) {\n // Check for dangerous commands\n for (const pattern of DANGEROUS_PATTERNS) {\n if (pattern.test(command)) {\n throw new ToolError(\n `Potentially dangerous command blocked: ${command.slice(0, 100)}`,\n { tool: \"bash_exec\" }\n );\n }\n }\n\n const startTime = performance.now();\n const timeoutMs = timeout ?? DEFAULT_TIMEOUT_MS;\n\n try {\n const options: ExecaOptions = {\n cwd: cwd ?? process.cwd(),\n timeout: timeoutMs,\n env: { ...process.env, ...env },\n shell: true,\n reject: false,\n maxBuffer: MAX_OUTPUT_SIZE,\n };\n\n const result = await execa(command, options);\n\n return {\n stdout: truncateOutput(typeof result.stdout === \"string\" ? result.stdout : String(result.stdout ?? \"\")),\n stderr: truncateOutput(typeof result.stderr === \"string\" ? result.stderr : String(result.stderr ?? \"\")),\n exitCode: result.exitCode ?? 0,\n duration: performance.now() - startTime,\n };\n } catch (error) {\n if ((error as { timedOut?: boolean }).timedOut) {\n throw new TimeoutError(`Command timed out after ${timeoutMs}ms`, {\n timeoutMs,\n operation: command.slice(0, 100),\n });\n }\n\n throw new ToolError(\n `Command execution failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"bash_exec\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Execute bash command in background tool\n */\nexport const bashBackgroundTool: ToolDefinition<\n {\n command: string;\n cwd?: string;\n env?: Record<string, string>;\n },\n {\n pid: number;\n command: string;\n }\n> = defineTool({\n name: \"bash_background\",\n description: \"Execute a command in the background (returns immediately)\",\n category: \"bash\",\n parameters: z.object({\n command: z.string().describe(\"Command to execute\"),\n cwd: z.string().optional().describe(\"Working directory\"),\n env: z.record(z.string()).optional().describe(\"Environment variables\"),\n }),\n async execute({ command, cwd, env }) {\n // Check for dangerous commands\n for (const pattern of DANGEROUS_PATTERNS) {\n if (pattern.test(command)) {\n throw new ToolError(\n `Potentially dangerous command blocked: ${command.slice(0, 100)}`,\n { tool: \"bash_background\" }\n );\n }\n }\n\n try {\n const subprocess = execa(command, {\n cwd: cwd ?? process.cwd(),\n env: { ...process.env, ...env },\n shell: true,\n detached: true,\n stdio: \"ignore\",\n });\n\n // Unref to allow parent to exit\n subprocess.unref();\n\n return {\n pid: subprocess.pid ?? 0,\n command,\n };\n } catch (error) {\n throw new ToolError(\n `Failed to start background command: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"bash_background\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Check if command exists tool\n */\nexport const commandExistsTool: ToolDefinition<\n { command: string },\n { exists: boolean; path?: string }\n> = defineTool({\n name: \"command_exists\",\n description: \"Check if a command is available in PATH\",\n category: \"bash\",\n parameters: z.object({\n command: z.string().describe(\"Command name to check\"),\n }),\n async execute({ command }) {\n try {\n const whichCommand = process.platform === \"win32\" ? \"where\" : \"which\";\n const result = await execa(whichCommand, [command], {\n reject: false,\n });\n\n if (result.exitCode === 0 && result.stdout) {\n return {\n exists: true,\n path: result.stdout.trim().split(\"\\n\")[0],\n };\n }\n\n return { exists: false };\n } catch {\n return { exists: false };\n }\n },\n});\n\n/**\n * Get environment variable tool\n */\nexport const getEnvTool: ToolDefinition<\n { name: string },\n { value: string | null; exists: boolean }\n> = defineTool({\n name: \"get_env\",\n description: \"Get an environment variable value\",\n category: \"bash\",\n parameters: z.object({\n name: z.string().describe(\"Environment variable name\"),\n }),\n async execute({ name }) {\n const value = process.env[name];\n return {\n value: value ?? null,\n exists: value !== undefined,\n };\n },\n});\n\n/**\n * All bash tools\n */\nexport const bashTools = [\n bashExecTool,\n bashBackgroundTool,\n commandExistsTool,\n getEnvTool,\n];\n\n/**\n * Truncate output if too long\n */\nfunction truncateOutput(output: string, maxLength: number = 50000): string {\n if (output.length <= maxLength) {\n return output;\n }\n const truncated = output.slice(0, maxLength);\n return `${truncated}\\n\\n[Output truncated - ${output.length - maxLength} more characters]`;\n}\n","/**\n * Git tools for Corbat-Coco\n * Version control operations\n */\n\nimport { z } from \"zod\";\nimport { simpleGit, type SimpleGit, type StatusResult, type LogResult } from \"simple-git\";\nimport { defineTool, type ToolDefinition } from \"./registry.js\";\nimport { ToolError } from \"../utils/errors.js\";\n\n/**\n * Get git instance for a directory\n */\nfunction getGit(cwd?: string): SimpleGit {\n return simpleGit(cwd ?? process.cwd());\n}\n\n/**\n * Git status tool\n */\nexport const gitStatusTool: ToolDefinition<\n { cwd?: string },\n {\n branch: string;\n tracking?: string;\n ahead: number;\n behind: number;\n staged: string[];\n modified: string[];\n untracked: string[];\n conflicted: string[];\n isClean: boolean;\n }\n> = defineTool({\n name: \"git_status\",\n description: \"Get the current git repository status\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n }),\n async execute({ cwd }) {\n try {\n const git = getGit(cwd);\n const status: StatusResult = await git.status();\n\n return {\n branch: status.current ?? \"HEAD\",\n tracking: status.tracking ?? undefined,\n ahead: status.ahead,\n behind: status.behind,\n staged: status.staged,\n modified: status.modified,\n untracked: status.not_added,\n conflicted: status.conflicted,\n isClean: status.isClean(),\n };\n } catch (error) {\n throw new ToolError(\n `Git status failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_status\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git diff tool\n */\nexport const gitDiffTool: ToolDefinition<\n { cwd?: string; staged?: boolean; files?: string[] },\n { diff: string; filesChanged: number; insertions: number; deletions: number }\n> = defineTool({\n name: \"git_diff\",\n description: \"Get git diff for changes\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n staged: z.boolean().optional().default(false).describe(\"Show staged changes\"),\n files: z.array(z.string()).optional().describe(\"Specific files to diff\"),\n }),\n async execute({ cwd, staged, files }) {\n try {\n const git = getGit(cwd);\n const args = staged ? [\"--staged\"] : [];\n\n if (files && files.length > 0) {\n args.push(\"--\", ...files);\n }\n\n const diff = await git.diff(args);\n\n // Parse diffstat\n const diffStat = await git.diffSummary(args);\n\n return {\n diff,\n filesChanged: diffStat.changed,\n insertions: diffStat.insertions,\n deletions: diffStat.deletions,\n };\n } catch (error) {\n throw new ToolError(\n `Git diff failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_diff\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git add tool\n */\nexport const gitAddTool: ToolDefinition<\n { cwd?: string; files: string[] },\n { added: string[] }\n> = defineTool({\n name: \"git_add\",\n description: \"Stage files for commit\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n files: z.array(z.string()).describe(\"Files to stage (use '.' for all)\"),\n }),\n async execute({ cwd, files }) {\n try {\n const git = getGit(cwd);\n await git.add(files);\n\n return { added: files };\n } catch (error) {\n throw new ToolError(\n `Git add failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_add\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git commit tool\n */\nexport const gitCommitTool: ToolDefinition<\n { cwd?: string; message: string; author?: string },\n { hash: string; summary: string }\n> = defineTool({\n name: \"git_commit\",\n description: \"Create a git commit\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n message: z.string().describe(\"Commit message\"),\n author: z.string().optional().describe(\"Author (format: 'Name <email>')\"),\n }),\n async execute({ cwd, message, author }) {\n try {\n const git = getGit(cwd);\n const options: Record<string, string> = {};\n\n if (author) {\n options[\"--author\"] = author;\n }\n\n const result = await git.commit(message, undefined, options);\n\n return {\n hash: result.commit,\n summary: result.summary.changes\n ? `${result.summary.insertions} insertions, ${result.summary.deletions} deletions`\n : \"No changes\",\n };\n } catch (error) {\n throw new ToolError(\n `Git commit failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_commit\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git log tool\n */\nexport const gitLogTool: ToolDefinition<\n { cwd?: string; maxCount?: number; file?: string },\n {\n commits: Array<{\n hash: string;\n message: string;\n author: string;\n date: string;\n }>;\n }\n> = defineTool({\n name: \"git_log\",\n description: \"Get git commit history\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n maxCount: z.number().optional().default(10).describe(\"Maximum commits to return\"),\n file: z.string().optional().describe(\"Filter by file path\"),\n }),\n async execute({ cwd, maxCount, file }) {\n try {\n const git = getGit(cwd);\n const options: Record<string, unknown> = {\n maxCount,\n };\n\n if (file) {\n options.file = file;\n }\n\n const log: LogResult = await git.log(options);\n\n return {\n commits: log.all.map((commit) => ({\n hash: commit.hash,\n message: commit.message,\n author: commit.author_name,\n date: commit.date,\n })),\n };\n } catch (error) {\n throw new ToolError(\n `Git log failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_log\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git branch tool\n */\nexport const gitBranchTool: ToolDefinition<\n { cwd?: string; create?: string; delete?: string; list?: boolean },\n { branches: string[]; current: string }\n> = defineTool({\n name: \"git_branch\",\n description: \"Manage git branches\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n create: z.string().optional().describe(\"Create a new branch\"),\n delete: z.string().optional().describe(\"Delete a branch\"),\n list: z.boolean().optional().default(true).describe(\"List branches\"),\n }),\n async execute({ cwd, create, delete: deleteBranch, list }) {\n try {\n const git = getGit(cwd);\n\n if (create) {\n await git.checkoutLocalBranch(create);\n }\n\n if (deleteBranch) {\n await git.deleteLocalBranch(deleteBranch);\n }\n\n if (list || (!create && !deleteBranch)) {\n const branchSummary = await git.branchLocal();\n return {\n branches: branchSummary.all,\n current: branchSummary.current,\n };\n }\n\n const status = await git.status();\n return {\n branches: [],\n current: status.current ?? \"HEAD\",\n };\n } catch (error) {\n throw new ToolError(\n `Git branch failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_branch\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git checkout tool\n */\nexport const gitCheckoutTool: ToolDefinition<\n { cwd?: string; branch: string; create?: boolean },\n { branch: string }\n> = defineTool({\n name: \"git_checkout\",\n description: \"Switch branches\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n branch: z.string().describe(\"Branch to checkout\"),\n create: z.boolean().optional().default(false).describe(\"Create branch if it doesn't exist\"),\n }),\n async execute({ cwd, branch, create }) {\n try {\n const git = getGit(cwd);\n\n if (create) {\n await git.checkoutLocalBranch(branch);\n } else {\n await git.checkout(branch);\n }\n\n return { branch };\n } catch (error) {\n throw new ToolError(\n `Git checkout failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_checkout\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git push tool\n */\nexport const gitPushTool: ToolDefinition<\n { cwd?: string; remote?: string; branch?: string; setUpstream?: boolean },\n { pushed: boolean; remote: string; branch: string }\n> = defineTool({\n name: \"git_push\",\n description: \"Push commits to remote\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n remote: z.string().optional().default(\"origin\").describe(\"Remote name\"),\n branch: z.string().optional().describe(\"Branch to push\"),\n setUpstream: z.boolean().optional().default(false).describe(\"Set upstream tracking\"),\n }),\n async execute({ cwd, remote, branch, setUpstream }) {\n try {\n const git = getGit(cwd);\n const status = await git.status();\n const pushBranch = branch ?? status.current ?? \"main\";\n\n const options: string[] = [];\n if (setUpstream) {\n options.push(\"-u\");\n }\n\n await git.push(remote, pushBranch, options);\n\n return {\n pushed: true,\n remote: remote ?? \"origin\",\n branch: pushBranch,\n };\n } catch (error) {\n throw new ToolError(\n `Git push failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_push\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git pull tool\n */\nexport const gitPullTool: ToolDefinition<\n { cwd?: string; remote?: string; branch?: string; rebase?: boolean },\n { updated: boolean; summary: string }\n> = defineTool({\n name: \"git_pull\",\n description: \"Pull changes from remote\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Repository directory\"),\n remote: z.string().optional().default(\"origin\").describe(\"Remote name\"),\n branch: z.string().optional().describe(\"Branch to pull\"),\n rebase: z.boolean().optional().default(false).describe(\"Use rebase instead of merge\"),\n }),\n async execute({ cwd, remote, branch, rebase }) {\n try {\n const git = getGit(cwd);\n const options: Record<string, null> = {};\n\n if (rebase) {\n options[\"--rebase\"] = null;\n }\n\n const result = await git.pull(remote, branch, options);\n\n return {\n updated: (result.files?.length ?? 0) > 0,\n summary: result.summary\n ? `${result.summary.insertions} insertions, ${result.summary.deletions} deletions`\n : \"Already up to date\",\n };\n } catch (error) {\n throw new ToolError(\n `Git pull failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_pull\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Git init tool\n */\nexport const gitInitTool: ToolDefinition<\n { cwd?: string; bare?: boolean },\n { initialized: boolean; path: string }\n> = defineTool({\n name: \"git_init\",\n description: \"Initialize a new git repository\",\n category: \"git\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Directory to initialize\"),\n bare: z.boolean().optional().default(false).describe(\"Create a bare repository\"),\n }),\n async execute({ cwd, bare }) {\n try {\n const git = getGit(cwd);\n await git.init(bare ? [\"--bare\"] : []);\n\n return {\n initialized: true,\n path: cwd ?? process.cwd(),\n };\n } catch (error) {\n throw new ToolError(\n `Git init failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"git_init\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * All git tools\n */\nexport const gitTools = [\n gitStatusTool,\n gitDiffTool,\n gitAddTool,\n gitCommitTool,\n gitLogTool,\n gitBranchTool,\n gitCheckoutTool,\n gitPushTool,\n gitPullTool,\n gitInitTool,\n];\n","/**\n * Quality tools for Corbat-Coco\n * Linting, complexity analysis, security scanning\n */\n\nimport { z } from \"zod\";\nimport { execa } from \"execa\";\nimport path from \"node:path\";\nimport fs from \"node:fs/promises\";\nimport { defineTool, type ToolDefinition } from \"./registry.js\";\nimport { ToolError } from \"../utils/errors.js\";\nimport type { QualityScores, QualityDimensions } from \"../quality/types.js\";\nimport { DEFAULT_QUALITY_WEIGHTS } from \"../quality/types.js\";\n\n/**\n * Lint result interface\n */\nexport interface LintResult {\n errors: number;\n warnings: number;\n fixable: number;\n issues: LintIssue[];\n score: number; // 0-100\n}\n\n/**\n * Lint issue interface\n */\nexport interface LintIssue {\n file: string;\n line: number;\n column: number;\n severity: \"error\" | \"warning\";\n message: string;\n rule: string;\n}\n\n/**\n * Complexity result interface\n */\nexport interface ComplexityResult {\n averageComplexity: number;\n maxComplexity: number;\n totalFunctions: number;\n complexFunctions: number; // Functions with complexity > 10\n score: number; // 0-100\n files: FileComplexity[];\n}\n\n/**\n * File complexity interface\n */\nexport interface FileComplexity {\n file: string;\n complexity: number;\n functions: FunctionComplexity[];\n}\n\n/**\n * Function complexity interface\n */\nexport interface FunctionComplexity {\n name: string;\n complexity: number;\n line: number;\n}\n\n/**\n * Detect linter in project\n */\nasync function detectLinter(cwd: string): Promise<string | null> {\n try {\n const pkgPath = path.join(cwd, \"package.json\");\n const pkgContent = await fs.readFile(pkgPath, \"utf-8\");\n const pkg = JSON.parse(pkgContent) as {\n devDependencies?: Record<string, string>;\n dependencies?: Record<string, string>;\n };\n\n const deps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n if (deps.oxlint) return \"oxlint\";\n if (deps.eslint) return \"eslint\";\n if (deps.biome || deps[\"@biomejs/biome\"]) return \"biome\";\n\n return null;\n } catch {\n return null;\n }\n}\n\n/**\n * Run linter tool\n */\nexport const runLinterTool: ToolDefinition<\n { cwd?: string; files?: string[]; fix?: boolean; linter?: string },\n LintResult\n> = defineTool({\n name: \"run_linter\",\n description: \"Run linter on the codebase\",\n category: \"quality\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Project directory\"),\n files: z.array(z.string()).optional().describe(\"Specific files to lint\"),\n fix: z.boolean().optional().default(false).describe(\"Auto-fix issues\"),\n linter: z.string().optional().describe(\"Linter to use (eslint, oxlint, biome)\"),\n }),\n async execute({ cwd, files, fix, linter }) {\n const projectDir = cwd ?? process.cwd();\n const detectedLinter = linter ?? (await detectLinter(projectDir));\n\n if (!detectedLinter) {\n // Return empty result if no linter found\n return {\n errors: 0,\n warnings: 0,\n fixable: 0,\n issues: [],\n score: 100,\n };\n }\n\n try {\n const args: string[] = [];\n let command = \"npx\";\n\n switch (detectedLinter) {\n case \"oxlint\":\n args.push(\"oxlint\");\n if (files && files.length > 0) {\n args.push(...files);\n } else {\n args.push(\"src\");\n }\n if (fix) args.push(\"--fix\");\n args.push(\"--format\", \"json\");\n break;\n\n case \"eslint\":\n args.push(\"eslint\");\n if (files && files.length > 0) {\n args.push(...files);\n } else {\n args.push(\"src\");\n }\n if (fix) args.push(\"--fix\");\n args.push(\"--format\", \"json\");\n break;\n\n case \"biome\":\n args.push(\"biome\", \"lint\");\n if (files && files.length > 0) {\n args.push(...files);\n } else {\n args.push(\"src\");\n }\n if (fix) args.push(\"--apply\");\n args.push(\"--reporter\", \"json\");\n break;\n\n default:\n throw new ToolError(`Unsupported linter: ${detectedLinter}`, {\n tool: \"run_linter\",\n });\n }\n\n const result = await execa(command, args, {\n cwd: projectDir,\n reject: false,\n timeout: 120000,\n });\n\n return parseLintResults(detectedLinter, result.stdout, result.stderr);\n } catch (error) {\n throw new ToolError(\n `Linting failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"run_linter\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Parse lint results from output\n */\nfunction parseLintResults(_linter: string, stdout: string, _stderr: string): LintResult {\n const issues: LintIssue[] = [];\n let errors = 0;\n let warnings = 0;\n let fixable = 0;\n\n try {\n // Try to parse JSON output\n const jsonMatch = stdout.match(/\\[[\\s\\S]*\\]/);\n if (jsonMatch) {\n const json = JSON.parse(jsonMatch[0]) as Array<{\n filePath?: string;\n messages?: Array<{\n line?: number;\n column?: number;\n severity?: number;\n message?: string;\n ruleId?: string;\n fix?: unknown;\n }>;\n }>;\n\n for (const file of json) {\n if (file.messages) {\n for (const msg of file.messages) {\n const severity = msg.severity === 2 ? \"error\" : \"warning\";\n if (severity === \"error\") errors++;\n else warnings++;\n if (msg.fix) fixable++;\n\n issues.push({\n file: file.filePath ?? \"\",\n line: msg.line ?? 0,\n column: msg.column ?? 0,\n severity,\n message: msg.message ?? \"\",\n rule: msg.ruleId ?? \"\",\n });\n }\n }\n }\n }\n } catch {\n // Parse from raw output\n const errorMatch = stdout.match(/(\\d+)\\s*error/i);\n const warningMatch = stdout.match(/(\\d+)\\s*warning/i);\n\n errors = errorMatch ? parseInt(errorMatch[1] ?? \"0\", 10) : 0;\n warnings = warningMatch ? parseInt(warningMatch[1] ?? \"0\", 10) : 0;\n }\n\n // Calculate score (100 = no issues, deduct 5 for each error, 2 for each warning)\n const score = Math.max(0, 100 - errors * 5 - warnings * 2);\n\n return { errors, warnings, fixable, issues, score };\n}\n\n/**\n * Analyze complexity tool\n */\nexport const analyzeComplexityTool: ToolDefinition<\n { cwd?: string; files?: string[]; threshold?: number },\n ComplexityResult\n> = defineTool({\n name: \"analyze_complexity\",\n description: \"Analyze code complexity\",\n category: \"quality\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Project directory\"),\n files: z.array(z.string()).optional().describe(\"Specific files to analyze\"),\n threshold: z.number().optional().default(10).describe(\"Complexity threshold\"),\n }),\n async execute({ cwd, files, threshold }) {\n const projectDir = cwd ?? process.cwd();\n\n try {\n // Use a simple heuristic for now (could integrate with plato or escomplex)\n const targetFiles = files ?? (await findSourceFiles(projectDir));\n const fileResults: FileComplexity[] = [];\n\n let totalComplexity = 0;\n let maxComplexity = 0;\n let totalFunctions = 0;\n let complexFunctions = 0;\n\n for (const file of targetFiles) {\n const content = await fs.readFile(file, \"utf-8\");\n const fileComplexity = analyzeFileComplexity(content, file);\n\n fileResults.push(fileComplexity);\n totalComplexity += fileComplexity.complexity;\n maxComplexity = Math.max(maxComplexity, fileComplexity.complexity);\n\n for (const fn of fileComplexity.functions) {\n totalFunctions++;\n if (fn.complexity > (threshold ?? 10)) {\n complexFunctions++;\n }\n }\n }\n\n const averageComplexity = totalFunctions > 0 ? totalComplexity / totalFunctions : 0;\n\n // Score: 100 if average <= 5, decreasing to 0 at average >= 20\n const score = Math.max(0, Math.min(100, 100 - (averageComplexity - 5) * 6.67));\n\n return {\n averageComplexity,\n maxComplexity,\n totalFunctions,\n complexFunctions,\n score,\n files: fileResults,\n };\n } catch (error) {\n throw new ToolError(\n `Complexity analysis failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"analyze_complexity\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * Find source files in project\n */\nasync function findSourceFiles(cwd: string): Promise<string[]> {\n const { glob } = await import(\"glob\");\n return glob(\"src/**/*.{ts,js,tsx,jsx}\", {\n cwd,\n absolute: true,\n ignore: [\"**/*.test.*\", \"**/*.spec.*\", \"**/node_modules/**\"],\n });\n}\n\n/**\n * Simple complexity analysis for a file\n */\nfunction analyzeFileComplexity(content: string, file: string): FileComplexity {\n const functions: FunctionComplexity[] = [];\n\n // Simple heuristic: count decision points (if, while, for, case, &&, ||, ?:)\n const lines = content.split(\"\\n\");\n let currentFunction = \"\";\n let functionStart = 0;\n let braceDepth = 0;\n let functionComplexity = 1;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i] ?? \"\";\n\n // Detect function start (simplified)\n const funcMatch = line.match(/(?:function|async function)\\s+(\\w+)|(\\w+)\\s*(?:=|:)\\s*(?:async\\s*)?\\(?.*\\)?\\s*=>/);\n if (funcMatch && braceDepth === 0) {\n if (currentFunction) {\n functions.push({\n name: currentFunction,\n complexity: functionComplexity,\n line: functionStart,\n });\n }\n currentFunction = funcMatch[1] ?? funcMatch[2] ?? \"anonymous\";\n functionStart = i + 1;\n functionComplexity = 1;\n }\n\n // Count decision points\n const decisions = (line.match(/\\b(if|else if|while|for|case|catch)\\b/g) || []).length;\n const logicalOps = (line.match(/(&&|\\|\\|)/g) || []).length;\n const ternary = (line.match(/\\?.*:/g) || []).length;\n functionComplexity += decisions + logicalOps + ternary;\n\n // Track brace depth\n braceDepth += (line.match(/\\{/g) || []).length;\n braceDepth -= (line.match(/\\}/g) || []).length;\n }\n\n // Add last function\n if (currentFunction) {\n functions.push({\n name: currentFunction,\n complexity: functionComplexity,\n line: functionStart,\n });\n }\n\n const totalComplexity = functions.reduce((sum, f) => sum + f.complexity, 0);\n\n return {\n file,\n complexity: totalComplexity,\n functions,\n };\n}\n\n/**\n * Calculate full quality scores\n */\nexport const calculateQualityTool: ToolDefinition<\n { cwd?: string; files?: string[] },\n QualityScores\n> = defineTool({\n name: \"calculate_quality\",\n description: \"Calculate comprehensive quality scores\",\n category: \"quality\",\n parameters: z.object({\n cwd: z.string().optional().describe(\"Project directory\"),\n files: z.array(z.string()).optional().describe(\"Specific files to analyze\"),\n }),\n async execute({ cwd, files }) {\n const projectDir = cwd ?? process.cwd();\n const startTime = performance.now();\n\n try {\n // Run all quality checks in parallel\n const [lintResult, complexityResult] = await Promise.all([\n runLinterTool.execute({ cwd: projectDir, files }),\n analyzeComplexityTool.execute({ cwd: projectDir, files }),\n ]);\n\n // Try to get coverage (may not be available)\n let testCoverage = 0;\n try {\n const { getCoverageTool } = await import(\"./test.js\");\n const coverage = await getCoverageTool.execute({ cwd: projectDir });\n testCoverage = (coverage.lines + coverage.branches + coverage.functions) / 3;\n } catch {\n // Coverage not available\n }\n\n // Calculate dimensions\n const dimensions: QualityDimensions = {\n correctness: 85, // Would need test results\n completeness: 80, // Would need requirements analysis\n robustness: 75, // Would need test analysis\n readability: Math.min(100, 100 - complexityResult.averageComplexity * 2),\n maintainability: Math.min(100, 100 - complexityResult.complexFunctions * 5),\n complexity: complexityResult.score,\n duplication: 90, // Would need duplication analysis\n testCoverage,\n testQuality: 70, // Would need test analysis\n security: 100, // Would need security scan\n documentation: 60, // Would need doc analysis\n style: lintResult.score,\n };\n\n // Calculate overall weighted score\n const overall = Object.entries(dimensions).reduce((sum, [key, value]) => {\n const weight = DEFAULT_QUALITY_WEIGHTS[key as keyof typeof DEFAULT_QUALITY_WEIGHTS] ?? 0;\n return sum + value * weight;\n }, 0);\n\n return {\n overall,\n dimensions,\n evaluatedAt: new Date(),\n evaluationDurationMs: performance.now() - startTime,\n };\n } catch (error) {\n throw new ToolError(\n `Quality calculation failed: ${error instanceof Error ? error.message : String(error)}`,\n { tool: \"calculate_quality\", cause: error instanceof Error ? error : undefined }\n );\n }\n },\n});\n\n/**\n * All quality tools\n */\nexport const qualityTools = [runLinterTool, analyzeComplexityTool, calculateQualityTool];\n","/**\n * Quality system types for Corbat-Coco\n */\n\n/**\n * Multi-dimensional quality scores\n */\nexport interface QualityScores {\n /**\n * Overall weighted score (0-100)\n */\n overall: number;\n\n /**\n * Individual dimension scores\n */\n dimensions: QualityDimensions;\n\n /**\n * Metadata\n */\n evaluatedAt: Date;\n evaluationDurationMs: number;\n}\n\n/**\n * Quality dimensions\n */\nexport interface QualityDimensions {\n /**\n * Does the code work correctly? (tests pass, logic correct)\n */\n correctness: number;\n\n /**\n * Are all requirements met?\n */\n completeness: number;\n\n /**\n * Are edge cases handled?\n */\n robustness: number;\n\n /**\n * Is the code clear and understandable?\n */\n readability: number;\n\n /**\n * Is the code easy to modify?\n */\n maintainability: number;\n\n /**\n * Cyclomatic complexity score (inverted - higher is better)\n */\n complexity: number;\n\n /**\n * DRY score - code duplication (inverted - higher is better)\n */\n duplication: number;\n\n /**\n * Line and branch coverage\n */\n testCoverage: number;\n\n /**\n * Test meaningfulness and quality\n */\n testQuality: number;\n\n /**\n * Security vulnerability score (100 = no vulnerabilities)\n */\n security: number;\n\n /**\n * Documentation coverage\n */\n documentation: number;\n\n /**\n * Linting and style compliance\n */\n style: number;\n}\n\n/**\n * Weights for quality dimensions (must sum to 1.0)\n */\nexport interface QualityWeights {\n correctness: number;\n completeness: number;\n robustness: number;\n readability: number;\n maintainability: number;\n complexity: number;\n duplication: number;\n testCoverage: number;\n testQuality: number;\n security: number;\n documentation: number;\n style: number;\n}\n\n/**\n * Default quality weights\n */\nexport const DEFAULT_QUALITY_WEIGHTS: QualityWeights = {\n correctness: 0.15,\n completeness: 0.10,\n robustness: 0.10,\n readability: 0.10,\n maintainability: 0.10,\n complexity: 0.08,\n duplication: 0.07,\n testCoverage: 0.10,\n testQuality: 0.05,\n security: 0.08,\n documentation: 0.04,\n style: 0.03,\n};\n\n/**\n * Quality thresholds\n */\nexport interface QualityThresholds {\n /**\n * Minimum acceptable scores (must achieve to pass)\n */\n minimum: {\n overall: number;\n testCoverage: number;\n security: number;\n };\n\n /**\n * Target scores (excellent quality)\n */\n target: {\n overall: number;\n testCoverage: number;\n };\n\n /**\n * Convergence threshold (max score delta to consider converged)\n */\n convergenceThreshold: number;\n\n /**\n * Maximum iterations before forced completion\n */\n maxIterations: number;\n\n /**\n * Minimum iterations before checking convergence\n */\n minIterations: number;\n}\n\n/**\n * Default quality thresholds\n */\nexport const DEFAULT_QUALITY_THRESHOLDS: QualityThresholds = {\n minimum: {\n overall: 85,\n testCoverage: 80,\n security: 100, // No vulnerabilities allowed\n },\n target: {\n overall: 95,\n testCoverage: 90,\n },\n convergenceThreshold: 2,\n maxIterations: 10,\n minIterations: 2,\n};\n\n/**\n * Quality evaluation result\n */\nexport interface QualityEvaluation {\n scores: QualityScores;\n meetsMinimum: boolean;\n meetsTarget: boolean;\n converged: boolean;\n issues: QualityIssue[];\n suggestions: QualitySuggestion[];\n}\n\n/**\n * Quality issue found during evaluation\n */\nexport interface QualityIssue {\n dimension: keyof QualityDimensions;\n severity: \"critical\" | \"major\" | \"minor\";\n message: string;\n file?: string;\n line?: number;\n suggestion?: string;\n}\n\n/**\n * Suggestion for improving quality\n */\nexport interface QualitySuggestion {\n dimension: keyof QualityDimensions;\n priority: \"high\" | \"medium\" | \"low\";\n description: string;\n estimatedImpact: number; // Expected score increase\n}\n\n/**\n * Quality history for tracking improvement\n */\nexport interface QualityHistory {\n taskId: string;\n iterations: QualityIteration[];\n}\n\n/**\n * Single iteration in quality history\n */\nexport interface QualityIteration {\n iteration: number;\n timestamp: Date;\n scores: QualityScores;\n delta: number; // Change from previous iteration\n issues: QualityIssue[];\n improvements: string[]; // What was improved\n}\n\n/**\n * Convergence check result\n */\nexport interface ConvergenceResult {\n converged: boolean;\n reason: ConvergenceReason;\n currentScore: number;\n previousScore: number;\n delta: number;\n iterationCount: number;\n}\n\n/**\n * Reasons for convergence determination\n */\nexport type ConvergenceReason =\n | \"score_converged\" // Score delta below threshold\n | \"target_reached\" // Reached target score\n | \"max_iterations\" // Hit max iterations limit\n | \"below_minimum\" // Below minimum after min iterations\n | \"not_converged\"; // Still improving\n","/**\n * Corbat-Coco: Autonomous Coding Agent\n *\n * An autonomous coding agent with self-review, quality convergence,\n * and production-ready output following the COCO methodology:\n * CONVERGE → ORCHESTRATE → COMPLETE → OUTPUT\n *\n * @packageDocumentation\n */\n\n// Version\nexport { VERSION } from \"./version.js\";\n\n// Orchestrator\nexport { createOrchestrator } from \"./orchestrator/index.js\";\nexport type { Orchestrator, OrchestratorConfig, ProjectState, Progress } from \"./orchestrator/types.js\";\n\n// Configuration\nexport { loadConfig, saveConfig, createDefaultConfig, configExists } from \"./config/index.js\";\nexport type { CocoConfig } from \"./config/index.js\";\n\n// Phases - Core types\nexport type { Phase, PhaseResult, PhaseExecutor, PhaseContext } from \"./phases/types.js\";\n\n// Phases - CONVERGE\nexport {\n DiscoveryEngine,\n createDiscoveryEngine,\n SpecificationGenerator,\n createSpecificationGenerator,\n SessionManager,\n createSessionManager,\n ConvergeExecutor,\n createConvergeExecutor,\n} from \"./phases/converge/index.js\";\n\n// Phases - ORCHESTRATE\nexport {\n ArchitectureGenerator,\n createArchitectureGenerator,\n ADRGenerator,\n createADRGenerator,\n BacklogGenerator,\n createBacklogGenerator,\n OrchestrateExecutor,\n createOrchestrateExecutor,\n} from \"./phases/orchestrate/index.js\";\n\n// Phases - COMPLETE\nexport {\n CodeGenerator,\n createCodeGenerator,\n CodeReviewer,\n createCodeReviewer,\n TaskIterator,\n createTaskIterator,\n CompleteExecutor,\n createCompleteExecutor,\n} from \"./phases/complete/index.js\";\n\n// Phases - OUTPUT\nexport {\n CICDGenerator,\n createCICDGenerator,\n DockerGenerator,\n createDockerGenerator,\n DocsGenerator,\n createDocsGenerator,\n OutputExecutor,\n createOutputExecutor,\n} from \"./phases/output/index.js\";\n\n// Quality\nexport type { QualityScores, QualityDimensions, QualityThresholds } from \"./quality/types.js\";\n\n// Tasks\nexport type { Task, TaskVersion, TaskHistory, Sprint, Story, Epic, Backlog } from \"./types/task.js\";\n\n// Providers\nexport { AnthropicProvider, createAnthropicProvider, createProvider } from \"./providers/index.js\";\nexport type { LLMProvider, Message, ChatResponse, ChatOptions } from \"./providers/types.js\";\n\n// Tools\nexport { ToolRegistry, createToolRegistry, registerAllTools, createFullToolRegistry } from \"./tools/index.js\";\n\n// Utilities\nexport { CocoError, ConfigError, PhaseError, TaskError } from \"./utils/errors.js\";\nexport { createLogger } from \"./utils/logger.js\";\n"]}