@weavelogic/knowledge-graph-agent 0.10.2 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"deep-analyzer.d.ts","sourceRoot":"","sources":["../../src/cultivation/deep-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;IACnD,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAYD;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAgD;gBAE7D,OAAO,EAAE,mBAAmB;IAWxC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC;;;OAGG;YACW,uBAAuB;IAkCrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyF5C;;OAEG;YACW,eAAe;IAK7B;;OAEG;YACW,iBAAiB;IAQ/B;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,YAAY;IA0C1B;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;YACW,kBAAkB;IAkDhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,YAAY;CA4BrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAE7E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAG7B"}
1
+ {"version":3,"file":"deep-analyzer.d.ts","sourceRoot":"","sources":["../../src/cultivation/deep-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsBH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;IACnD,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAYD;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAgD;gBAE7D,OAAO,EAAE,mBAAmB;IAWxC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAKrC;;;OAGG;YACW,uBAAuB;IAkCrC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAyF5C;;OAEG;YACW,eAAe;IAK7B;;OAEG;YACW,iBAAiB;IAQ/B;;OAEG;YACW,eAAe;IA2B7B;;OAEG;YACW,YAAY;IA0C1B;;OAEG;IACH,OAAO,CAAC,WAAW;IA8BnB;;OAEG;YACW,kBAAkB;IAmDhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB;;OAEG;IACH,OAAO,CAAC,YAAY;CA4BrB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAE7E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,kBAAkB,CAAC,CAG7B"}
@@ -257,7 +257,7 @@ claude-flow hooks post-task --task-id "${agent.type}-analysis"
257
257
  throw new Error("claude-flow is not available");
258
258
  }
259
259
  return new Promise((resolve2, reject) => {
260
- const args = [...commandConfig.args, "agent", "execute", type, sanitizedPrompt, "--json"];
260
+ const args = [...commandConfig.args, "agent", "run", type, sanitizedPrompt];
261
261
  const proc = spawn(commandConfig.cmd, args, {
262
262
  cwd: this.projectRoot,
263
263
  shell: false,
@@ -1 +1 @@
1
- {"version":3,"file":"deep-analyzer.js","sources":["../../src/cultivation/deep-analyzer.ts"],"sourcesContent":["/**\n * DeepAnalyzer - Claude-Flow Integration for Deep Codebase Analysis\n *\n * Uses claude-flow agents for comprehensive codebase analysis:\n * - Pattern detection and architectural insights\n * - Documentation gap analysis\n * - Standards compliance checking\n *\n * @module cultivation/deep-analyzer\n */\n\nimport { execFileSync, spawn } from 'child_process';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { createLogger } from '../utils/index.js';\n\nconst logger = createLogger('deep-analyzer');\n\n/**\n * Valid agent types for security validation\n */\nconst VALID_AGENT_TYPES = new Set([\n 'researcher',\n 'architect',\n 'analyst',\n 'coder',\n 'tester',\n 'reviewer',\n 'documenter',\n]);\n\n/**\n * Deep analyzer options\n */\nexport interface DeepAnalyzerOptions {\n /** Project root directory */\n projectRoot: string;\n /** Documentation path (relative to project root) */\n docsPath?: string;\n /** Output directory for analysis results */\n outputDir?: string;\n /** Enable verbose logging */\n verbose?: boolean;\n /** Maximum agents to spawn */\n maxAgents?: number;\n /** Agent execution mode */\n agentMode?: 'sequential' | 'parallel' | 'adaptive';\n /** Timeout for each agent (ms) */\n agentTimeout?: number;\n}\n\n/**\n * Analysis result from an agent\n */\nexport interface AgentResult {\n name: string;\n type: string;\n success: boolean;\n insights: string[];\n documents: Array<{ path: string; title: string }>;\n duration: number;\n error?: string;\n}\n\n/**\n * Deep analysis result\n */\nexport interface DeepAnalysisResult {\n success: boolean;\n agentsSpawned: number;\n insightsCount: number;\n documentsCreated: number;\n results: AgentResult[];\n duration: number;\n errors: string[];\n}\n\n/**\n * Agent configuration\n */\ninterface AgentConfig {\n name: string;\n type: 'researcher' | 'analyst' | 'coder' | 'tester' | 'reviewer';\n task: string;\n outputFile: string;\n}\n\n/**\n * DeepAnalyzer - Uses claude-flow for deep codebase analysis\n *\n * @example\n * ```typescript\n * const analyzer = new DeepAnalyzer({\n * projectRoot: '/my/project',\n * docsPath: 'docs',\n * });\n *\n * const result = await analyzer.analyze();\n * console.log(`Generated ${result.insightsCount} insights`);\n * ```\n */\nexport class DeepAnalyzer {\n private projectRoot: string;\n private docsPath: string;\n private outputDir: string;\n private verbose: boolean;\n private maxAgents: number;\n private agentMode: 'sequential' | 'parallel' | 'adaptive';\n private agentTimeout: number;\n private claudeFlowCommand: { cmd: string; args: string[] } | null = null;\n\n constructor(options: DeepAnalyzerOptions) {\n this.projectRoot = resolve(options.projectRoot);\n this.docsPath = options.docsPath || 'docs';\n this.outputDir = options.outputDir || join(this.projectRoot, this.docsPath, 'analysis');\n this.verbose = options.verbose || false;\n this.maxAgents = options.maxAgents || 5;\n this.agentMode = options.agentMode || 'adaptive';\n // Default timeout of 60 seconds (configurable via agentTimeout option)\n this.agentTimeout = options.agentTimeout || 60000;\n }\n\n /**\n * Check if claude-flow is available and determine the best command to use\n * Checks for direct command first (globally installed), then falls back to npx\n */\n async isAvailable(): Promise<boolean> {\n const command = await this.detectClaudeFlowCommand();\n return command !== null;\n }\n\n /**\n * Detect which claude-flow command to use\n * Returns the command configuration or null if not available\n */\n private async detectClaudeFlowCommand(): Promise<{ cmd: string; args: string[] } | null> {\n // Return cached result if available\n if (this.claudeFlowCommand !== null) {\n return this.claudeFlowCommand;\n }\n\n // First try direct command (globally installed claude-flow)\n try {\n // SECURITY: execFileSync does not spawn a shell by default, preventing shell injection\n execFileSync('claude-flow', ['--version'], {\n stdio: 'pipe',\n timeout: 5000,\n windowsHide: true,\n });\n this.claudeFlowCommand = { cmd: 'claude-flow', args: [] };\n return this.claudeFlowCommand;\n } catch {\n // Direct command not available, try npx\n }\n\n // Fall back to npx\n try {\n execFileSync('npx', ['claude-flow', '--version'], {\n stdio: 'pipe',\n timeout: 30000,\n windowsHide: true,\n });\n this.claudeFlowCommand = { cmd: 'npx', args: ['claude-flow'] };\n return this.claudeFlowCommand;\n } catch {\n return null;\n }\n }\n\n /**\n * Run deep analysis\n */\n async analyze(): Promise<DeepAnalysisResult> {\n const startTime = Date.now();\n\n const result: DeepAnalysisResult = {\n success: false,\n agentsSpawned: 0,\n insightsCount: 0,\n documentsCreated: 0,\n results: [],\n duration: 0,\n errors: [],\n };\n\n // Check availability\n if (!(await this.isAvailable())) {\n result.errors.push('claude-flow is not available');\n result.duration = Date.now() - startTime;\n return result;\n }\n\n // Ensure output directory exists\n if (!existsSync(this.outputDir)) {\n mkdirSync(this.outputDir, { recursive: true });\n }\n\n // Define agents\n const agents: AgentConfig[] = [\n {\n name: 'Pattern Researcher',\n type: 'researcher',\n task: 'Analyze codebase architecture, patterns, and design decisions',\n outputFile: 'architecture-patterns.md',\n },\n {\n name: 'Code Analyst',\n type: 'analyst',\n task: 'Identify code quality issues, complexity hotspots, and improvement opportunities',\n outputFile: 'code-analysis.md',\n },\n {\n name: 'Implementation Reviewer',\n type: 'coder',\n task: 'Review implementation patterns, naming conventions, and code style',\n outputFile: 'implementation-review.md',\n },\n {\n name: 'Test Analyzer',\n type: 'tester',\n task: 'Analyze test coverage, testing patterns, and testing gaps',\n outputFile: 'testing-analysis.md',\n },\n ];\n\n logger.info('Starting deep analysis', { agents: agents.length, mode: this.agentMode });\n\n // Execute agents based on mode\n if (this.agentMode === 'parallel') {\n result.results = await this.executeParallel(agents);\n } else if (this.agentMode === 'sequential') {\n result.results = await this.executeSequential(agents);\n } else {\n // Adaptive: start with 2, scale based on success\n result.results = await this.executeAdaptive(agents);\n }\n\n // Calculate totals\n result.agentsSpawned = result.results.length;\n result.insightsCount = result.results.reduce((sum, r) => sum + r.insights.length, 0);\n result.documentsCreated = result.results.reduce((sum, r) => sum + r.documents.length, 0);\n result.success = result.results.every(r => r.success);\n result.duration = Date.now() - startTime;\n\n // Collect errors\n for (const agentResult of result.results) {\n if (agentResult.error) {\n result.errors.push(`${agentResult.name}: ${agentResult.error}`);\n }\n }\n\n logger.info('Deep analysis complete', {\n success: result.success,\n insights: result.insightsCount,\n documents: result.documentsCreated,\n duration: result.duration,\n });\n\n return result;\n }\n\n /**\n * Execute agents in parallel\n */\n private async executeParallel(agents: AgentConfig[]): Promise<AgentResult[]> {\n const promises = agents.map(agent => this.executeAgent(agent));\n return Promise.all(promises);\n }\n\n /**\n * Execute agents sequentially\n */\n private async executeSequential(agents: AgentConfig[]): Promise<AgentResult[]> {\n const results: AgentResult[] = [];\n for (const agent of agents) {\n results.push(await this.executeAgent(agent));\n }\n return results;\n }\n\n /**\n * Execute agents adaptively (start with 2, scale based on success)\n */\n private async executeAdaptive(agents: AgentConfig[]): Promise<AgentResult[]> {\n const results: AgentResult[] = [];\n\n // First batch: 2 agents\n const firstBatch = agents.slice(0, 2);\n const firstResults = await Promise.all(firstBatch.map(a => this.executeAgent(a)));\n results.push(...firstResults);\n\n // Check success rate\n const successRate = firstResults.filter(r => r.success).length / firstResults.length;\n\n if (successRate >= 0.5 && agents.length > 2) {\n // Continue with remaining agents in parallel\n const remaining = agents.slice(2);\n const remainingResults = await Promise.all(remaining.map(a => this.executeAgent(a)));\n results.push(...remainingResults);\n } else if (agents.length > 2) {\n // Fall back to sequential\n logger.warn('Low success rate, switching to sequential mode');\n for (const agent of agents.slice(2)) {\n results.push(await this.executeAgent(agent));\n }\n }\n\n return results;\n }\n\n /**\n * Execute a single agent\n */\n private async executeAgent(agent: AgentConfig): Promise<AgentResult> {\n const startTime = Date.now();\n const outputPath = join(this.outputDir, agent.outputFile);\n\n const result: AgentResult = {\n name: agent.name,\n type: agent.type,\n success: false,\n insights: [],\n documents: [],\n duration: 0,\n };\n\n try {\n logger.info(`Spawning agent: ${agent.name}`, { type: agent.type });\n\n const prompt = this.buildPrompt(agent);\n\n // Execute claude-flow agent\n const output = await this.runClaudeFlowAgent(agent.type, prompt);\n\n // Parse output for insights\n result.insights = this.extractInsights(output);\n\n // Write output to file\n writeFileSync(outputPath, this.formatOutput(agent, output));\n result.documents.push({ path: outputPath, title: agent.name });\n\n result.success = true;\n\n if (this.verbose) {\n logger.debug(`Agent completed: ${agent.name}`, { insights: result.insights.length });\n }\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n logger.error(`Agent failed: ${agent.name}`, error instanceof Error ? error : new Error(String(error)));\n }\n\n result.duration = Date.now() - startTime;\n return result;\n }\n\n /**\n * Build prompt for agent\n */\n private buildPrompt(agent: AgentConfig): string {\n return `You are a ${agent.name} analyzing the project at ${this.projectRoot}.\n\n**OBJECTIVE**: ${agent.task}\n\n**COORDINATION PROTOCOL**:\n\\`\\`\\`bash\nclaude-flow hooks pre-task --description \"${agent.task}\"\n\\`\\`\\`\n\n**YOUR TASKS**:\n1. Analyze the codebase at ${this.projectRoot}\n2. Identify key patterns and conventions\n3. Document your findings with specific examples\n4. Provide actionable recommendations\n5. Generate comprehensive markdown documentation\n\n**OUTPUT REQUIREMENTS**:\n- Use clear markdown formatting\n- Include code examples from the project\n- Organize findings by category\n- Prioritize actionable insights\n\nAfter completing:\n\\`\\`\\`bash\nclaude-flow hooks post-task --task-id \"${agent.type}-analysis\"\n\\`\\`\\`\n`;\n }\n\n /**\n * Run claude-flow agent\n */\n private async runClaudeFlowAgent(type: string, prompt: string): Promise<string> {\n // Security: Validate agent type against allowlist to prevent command injection\n if (!VALID_AGENT_TYPES.has(type)) {\n throw new Error(`Invalid agent type: ${type}. Valid types: ${[...VALID_AGENT_TYPES].join(', ')}`);\n }\n\n // Security: Sanitize prompt to prevent injection via shell metacharacters\n const sanitizedPrompt = prompt.replace(/[`$\\\\]/g, '');\n\n // Get the detected command configuration\n const commandConfig = await this.detectClaudeFlowCommand();\n if (!commandConfig) {\n throw new Error('claude-flow is not available');\n }\n\n return new Promise((resolve, reject) => {\n // Build args based on detected command\n const args = [...commandConfig.args, 'agent', 'execute', type, sanitizedPrompt, '--json'];\n\n const proc = spawn(commandConfig.cmd, args, {\n cwd: this.projectRoot,\n shell: false, // Security: Disable shell to prevent command injection\n timeout: this.agentTimeout,\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve(stdout);\n } else {\n reject(new Error(stderr || `Agent exited with code ${code}`));\n }\n });\n\n proc.on('error', (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Extract insights from agent output\n */\n private extractInsights(output: string): string[] {\n const insights: string[] = [];\n\n // Look for patterns like \"- Insight:\" or \"## Finding:\"\n const patterns = [\n /[-*]\\s*(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n /##\\s*(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n /(?:key\\s+)?(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n ];\n\n for (const pattern of patterns) {\n const matches = output.matchAll(pattern);\n for (const match of matches) {\n if (match[1]) {\n insights.push(match[1].trim());\n }\n }\n }\n\n // Deduplicate\n return [...new Set(insights)];\n }\n\n /**\n * Format output for documentation\n */\n private formatOutput(agent: AgentConfig, output: string): string {\n const timestamp = new Date().toISOString();\n\n return `---\ntitle: \"${agent.name} Analysis\"\ntype: analysis\ngenerator: deep-analyzer\nagent: ${agent.type}\ncreated: ${timestamp}\n---\n\n# ${agent.name} Analysis\n\n> Generated by DeepAnalyzer using claude-flow\n\n## Overview\n\n${agent.task}\n\n## Analysis\n\n${output}\n\n---\n\n*Generated on ${new Date().toLocaleString()}*\n`;\n }\n}\n\n/**\n * Create a deep analyzer instance\n */\nexport function createDeepAnalyzer(options: DeepAnalyzerOptions): DeepAnalyzer {\n return new DeepAnalyzer(options);\n}\n\n/**\n * Run deep analysis on a project\n */\nexport async function analyzeDeep(\n projectRoot: string,\n docsPath?: string\n): Promise<DeepAnalysisResult> {\n const analyzer = new DeepAnalyzer({ projectRoot, docsPath });\n return analyzer.analyze();\n}\n"],"names":["resolve"],"mappings":"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"}
1
+ {"version":3,"file":"deep-analyzer.js","sources":["../../src/cultivation/deep-analyzer.ts"],"sourcesContent":["/**\n * DeepAnalyzer - Claude-Flow Integration for Deep Codebase Analysis\n *\n * Uses claude-flow agents for comprehensive codebase analysis:\n * - Pattern detection and architectural insights\n * - Documentation gap analysis\n * - Standards compliance checking\n *\n * @module cultivation/deep-analyzer\n */\n\nimport { execFileSync, spawn } from 'child_process';\nimport { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';\nimport { join, resolve } from 'path';\nimport { createLogger } from '../utils/index.js';\n\nconst logger = createLogger('deep-analyzer');\n\n/**\n * Valid agent types for security validation\n */\nconst VALID_AGENT_TYPES = new Set([\n 'researcher',\n 'architect',\n 'analyst',\n 'coder',\n 'tester',\n 'reviewer',\n 'documenter',\n]);\n\n/**\n * Deep analyzer options\n */\nexport interface DeepAnalyzerOptions {\n /** Project root directory */\n projectRoot: string;\n /** Documentation path (relative to project root) */\n docsPath?: string;\n /** Output directory for analysis results */\n outputDir?: string;\n /** Enable verbose logging */\n verbose?: boolean;\n /** Maximum agents to spawn */\n maxAgents?: number;\n /** Agent execution mode */\n agentMode?: 'sequential' | 'parallel' | 'adaptive';\n /** Timeout for each agent (ms) */\n agentTimeout?: number;\n}\n\n/**\n * Analysis result from an agent\n */\nexport interface AgentResult {\n name: string;\n type: string;\n success: boolean;\n insights: string[];\n documents: Array<{ path: string; title: string }>;\n duration: number;\n error?: string;\n}\n\n/**\n * Deep analysis result\n */\nexport interface DeepAnalysisResult {\n success: boolean;\n agentsSpawned: number;\n insightsCount: number;\n documentsCreated: number;\n results: AgentResult[];\n duration: number;\n errors: string[];\n}\n\n/**\n * Agent configuration\n */\ninterface AgentConfig {\n name: string;\n type: 'researcher' | 'analyst' | 'coder' | 'tester' | 'reviewer';\n task: string;\n outputFile: string;\n}\n\n/**\n * DeepAnalyzer - Uses claude-flow for deep codebase analysis\n *\n * @example\n * ```typescript\n * const analyzer = new DeepAnalyzer({\n * projectRoot: '/my/project',\n * docsPath: 'docs',\n * });\n *\n * const result = await analyzer.analyze();\n * console.log(`Generated ${result.insightsCount} insights`);\n * ```\n */\nexport class DeepAnalyzer {\n private projectRoot: string;\n private docsPath: string;\n private outputDir: string;\n private verbose: boolean;\n private maxAgents: number;\n private agentMode: 'sequential' | 'parallel' | 'adaptive';\n private agentTimeout: number;\n private claudeFlowCommand: { cmd: string; args: string[] } | null = null;\n\n constructor(options: DeepAnalyzerOptions) {\n this.projectRoot = resolve(options.projectRoot);\n this.docsPath = options.docsPath || 'docs';\n this.outputDir = options.outputDir || join(this.projectRoot, this.docsPath, 'analysis');\n this.verbose = options.verbose || false;\n this.maxAgents = options.maxAgents || 5;\n this.agentMode = options.agentMode || 'adaptive';\n // Default timeout of 60 seconds (configurable via agentTimeout option)\n this.agentTimeout = options.agentTimeout || 60000;\n }\n\n /**\n * Check if claude-flow is available and determine the best command to use\n * Checks for direct command first (globally installed), then falls back to npx\n */\n async isAvailable(): Promise<boolean> {\n const command = await this.detectClaudeFlowCommand();\n return command !== null;\n }\n\n /**\n * Detect which claude-flow command to use\n * Returns the command configuration or null if not available\n */\n private async detectClaudeFlowCommand(): Promise<{ cmd: string; args: string[] } | null> {\n // Return cached result if available\n if (this.claudeFlowCommand !== null) {\n return this.claudeFlowCommand;\n }\n\n // First try direct command (globally installed claude-flow)\n try {\n // SECURITY: execFileSync does not spawn a shell by default, preventing shell injection\n execFileSync('claude-flow', ['--version'], {\n stdio: 'pipe',\n timeout: 5000,\n windowsHide: true,\n });\n this.claudeFlowCommand = { cmd: 'claude-flow', args: [] };\n return this.claudeFlowCommand;\n } catch {\n // Direct command not available, try npx\n }\n\n // Fall back to npx\n try {\n execFileSync('npx', ['claude-flow', '--version'], {\n stdio: 'pipe',\n timeout: 30000,\n windowsHide: true,\n });\n this.claudeFlowCommand = { cmd: 'npx', args: ['claude-flow'] };\n return this.claudeFlowCommand;\n } catch {\n return null;\n }\n }\n\n /**\n * Run deep analysis\n */\n async analyze(): Promise<DeepAnalysisResult> {\n const startTime = Date.now();\n\n const result: DeepAnalysisResult = {\n success: false,\n agentsSpawned: 0,\n insightsCount: 0,\n documentsCreated: 0,\n results: [],\n duration: 0,\n errors: [],\n };\n\n // Check availability\n if (!(await this.isAvailable())) {\n result.errors.push('claude-flow is not available');\n result.duration = Date.now() - startTime;\n return result;\n }\n\n // Ensure output directory exists\n if (!existsSync(this.outputDir)) {\n mkdirSync(this.outputDir, { recursive: true });\n }\n\n // Define agents\n const agents: AgentConfig[] = [\n {\n name: 'Pattern Researcher',\n type: 'researcher',\n task: 'Analyze codebase architecture, patterns, and design decisions',\n outputFile: 'architecture-patterns.md',\n },\n {\n name: 'Code Analyst',\n type: 'analyst',\n task: 'Identify code quality issues, complexity hotspots, and improvement opportunities',\n outputFile: 'code-analysis.md',\n },\n {\n name: 'Implementation Reviewer',\n type: 'coder',\n task: 'Review implementation patterns, naming conventions, and code style',\n outputFile: 'implementation-review.md',\n },\n {\n name: 'Test Analyzer',\n type: 'tester',\n task: 'Analyze test coverage, testing patterns, and testing gaps',\n outputFile: 'testing-analysis.md',\n },\n ];\n\n logger.info('Starting deep analysis', { agents: agents.length, mode: this.agentMode });\n\n // Execute agents based on mode\n if (this.agentMode === 'parallel') {\n result.results = await this.executeParallel(agents);\n } else if (this.agentMode === 'sequential') {\n result.results = await this.executeSequential(agents);\n } else {\n // Adaptive: start with 2, scale based on success\n result.results = await this.executeAdaptive(agents);\n }\n\n // Calculate totals\n result.agentsSpawned = result.results.length;\n result.insightsCount = result.results.reduce((sum, r) => sum + r.insights.length, 0);\n result.documentsCreated = result.results.reduce((sum, r) => sum + r.documents.length, 0);\n result.success = result.results.every(r => r.success);\n result.duration = Date.now() - startTime;\n\n // Collect errors\n for (const agentResult of result.results) {\n if (agentResult.error) {\n result.errors.push(`${agentResult.name}: ${agentResult.error}`);\n }\n }\n\n logger.info('Deep analysis complete', {\n success: result.success,\n insights: result.insightsCount,\n documents: result.documentsCreated,\n duration: result.duration,\n });\n\n return result;\n }\n\n /**\n * Execute agents in parallel\n */\n private async executeParallel(agents: AgentConfig[]): Promise<AgentResult[]> {\n const promises = agents.map(agent => this.executeAgent(agent));\n return Promise.all(promises);\n }\n\n /**\n * Execute agents sequentially\n */\n private async executeSequential(agents: AgentConfig[]): Promise<AgentResult[]> {\n const results: AgentResult[] = [];\n for (const agent of agents) {\n results.push(await this.executeAgent(agent));\n }\n return results;\n }\n\n /**\n * Execute agents adaptively (start with 2, scale based on success)\n */\n private async executeAdaptive(agents: AgentConfig[]): Promise<AgentResult[]> {\n const results: AgentResult[] = [];\n\n // First batch: 2 agents\n const firstBatch = agents.slice(0, 2);\n const firstResults = await Promise.all(firstBatch.map(a => this.executeAgent(a)));\n results.push(...firstResults);\n\n // Check success rate\n const successRate = firstResults.filter(r => r.success).length / firstResults.length;\n\n if (successRate >= 0.5 && agents.length > 2) {\n // Continue with remaining agents in parallel\n const remaining = agents.slice(2);\n const remainingResults = await Promise.all(remaining.map(a => this.executeAgent(a)));\n results.push(...remainingResults);\n } else if (agents.length > 2) {\n // Fall back to sequential\n logger.warn('Low success rate, switching to sequential mode');\n for (const agent of agents.slice(2)) {\n results.push(await this.executeAgent(agent));\n }\n }\n\n return results;\n }\n\n /**\n * Execute a single agent\n */\n private async executeAgent(agent: AgentConfig): Promise<AgentResult> {\n const startTime = Date.now();\n const outputPath = join(this.outputDir, agent.outputFile);\n\n const result: AgentResult = {\n name: agent.name,\n type: agent.type,\n success: false,\n insights: [],\n documents: [],\n duration: 0,\n };\n\n try {\n logger.info(`Spawning agent: ${agent.name}`, { type: agent.type });\n\n const prompt = this.buildPrompt(agent);\n\n // Execute claude-flow agent\n const output = await this.runClaudeFlowAgent(agent.type, prompt);\n\n // Parse output for insights\n result.insights = this.extractInsights(output);\n\n // Write output to file\n writeFileSync(outputPath, this.formatOutput(agent, output));\n result.documents.push({ path: outputPath, title: agent.name });\n\n result.success = true;\n\n if (this.verbose) {\n logger.debug(`Agent completed: ${agent.name}`, { insights: result.insights.length });\n }\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n logger.error(`Agent failed: ${agent.name}`, error instanceof Error ? error : new Error(String(error)));\n }\n\n result.duration = Date.now() - startTime;\n return result;\n }\n\n /**\n * Build prompt for agent\n */\n private buildPrompt(agent: AgentConfig): string {\n return `You are a ${agent.name} analyzing the project at ${this.projectRoot}.\n\n**OBJECTIVE**: ${agent.task}\n\n**COORDINATION PROTOCOL**:\n\\`\\`\\`bash\nclaude-flow hooks pre-task --description \"${agent.task}\"\n\\`\\`\\`\n\n**YOUR TASKS**:\n1. Analyze the codebase at ${this.projectRoot}\n2. Identify key patterns and conventions\n3. Document your findings with specific examples\n4. Provide actionable recommendations\n5. Generate comprehensive markdown documentation\n\n**OUTPUT REQUIREMENTS**:\n- Use clear markdown formatting\n- Include code examples from the project\n- Organize findings by category\n- Prioritize actionable insights\n\nAfter completing:\n\\`\\`\\`bash\nclaude-flow hooks post-task --task-id \"${agent.type}-analysis\"\n\\`\\`\\`\n`;\n }\n\n /**\n * Run claude-flow agent\n */\n private async runClaudeFlowAgent(type: string, prompt: string): Promise<string> {\n // Security: Validate agent type against allowlist to prevent command injection\n if (!VALID_AGENT_TYPES.has(type)) {\n throw new Error(`Invalid agent type: ${type}. Valid types: ${[...VALID_AGENT_TYPES].join(', ')}`);\n }\n\n // Security: Sanitize prompt to prevent injection via shell metacharacters\n const sanitizedPrompt = prompt.replace(/[`$\\\\]/g, '');\n\n // Get the detected command configuration\n const commandConfig = await this.detectClaudeFlowCommand();\n if (!commandConfig) {\n throw new Error('claude-flow is not available');\n }\n\n return new Promise((resolve, reject) => {\n // Build args based on detected command\n // claude-flow agent run <type> \"<prompt>\"\n const args = [...commandConfig.args, 'agent', 'run', type, sanitizedPrompt];\n\n const proc = spawn(commandConfig.cmd, args, {\n cwd: this.projectRoot,\n shell: false, // Security: Disable shell to prevent command injection\n timeout: this.agentTimeout,\n });\n\n let stdout = '';\n let stderr = '';\n\n proc.stdout?.on('data', (data) => {\n stdout += data.toString();\n });\n\n proc.stderr?.on('data', (data) => {\n stderr += data.toString();\n });\n\n proc.on('close', (code) => {\n if (code === 0) {\n resolve(stdout);\n } else {\n reject(new Error(stderr || `Agent exited with code ${code}`));\n }\n });\n\n proc.on('error', (error) => {\n reject(error);\n });\n });\n }\n\n /**\n * Extract insights from agent output\n */\n private extractInsights(output: string): string[] {\n const insights: string[] = [];\n\n // Look for patterns like \"- Insight:\" or \"## Finding:\"\n const patterns = [\n /[-*]\\s*(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n /##\\s*(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n /(?:key\\s+)?(?:insight|finding|observation|recommendation):\\s*(.+)/gi,\n ];\n\n for (const pattern of patterns) {\n const matches = output.matchAll(pattern);\n for (const match of matches) {\n if (match[1]) {\n insights.push(match[1].trim());\n }\n }\n }\n\n // Deduplicate\n return [...new Set(insights)];\n }\n\n /**\n * Format output for documentation\n */\n private formatOutput(agent: AgentConfig, output: string): string {\n const timestamp = new Date().toISOString();\n\n return `---\ntitle: \"${agent.name} Analysis\"\ntype: analysis\ngenerator: deep-analyzer\nagent: ${agent.type}\ncreated: ${timestamp}\n---\n\n# ${agent.name} Analysis\n\n> Generated by DeepAnalyzer using claude-flow\n\n## Overview\n\n${agent.task}\n\n## Analysis\n\n${output}\n\n---\n\n*Generated on ${new Date().toLocaleString()}*\n`;\n }\n}\n\n/**\n * Create a deep analyzer instance\n */\nexport function createDeepAnalyzer(options: DeepAnalyzerOptions): DeepAnalyzer {\n return new DeepAnalyzer(options);\n}\n\n/**\n * Run deep analysis on a project\n */\nexport async function analyzeDeep(\n projectRoot: string,\n docsPath?: string\n): Promise<DeepAnalysisResult> {\n const analyzer = new DeepAnalyzer({ projectRoot, docsPath });\n return analyzer.analyze();\n}\n"],"names":["resolve"],"mappings":"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"}
@@ -356,10 +356,8 @@ async function executeSwarmTask(task, options) {
356
356
  return new Promise((resolve) => {
357
357
  const agentProcess = spawn("claude-flow", [
358
358
  "agent",
359
- "spawn",
360
- "--type",
359
+ "run",
361
360
  task.agentType,
362
- "--task",
363
361
  task.prompt.slice(0, 1e3)
364
362
  // Truncate for CLI
365
363
  ], {
@@ -1 +1 @@
1
- {"version":3,"file":"doc-cultivator.js","sources":["../../src/generators/doc-cultivator.ts"],"sourcesContent":["/**\n * Documentation Cultivator\n *\n * Long-running swarm-based process that recursively analyzes and builds out\n * all documentation, creates development plans, and integrates SOPs.\n *\n * Uses claude-flow swarm orchestration to systematically:\n * - Research and analyze existing docs\n * - Fill documentation gaps\n * - Create phased development plans\n * - Generate deployment/infrastructure plans\n * - Integrate SOP compliance\n *\n * @module generators/doc-cultivator\n */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, statSync } from 'fs';\nimport { join, basename, dirname, relative } from 'path';\nimport fg from 'fast-glob';\nimport { spawn, exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\n/**\n * Cultivation options\n */\nexport interface CultivationOptions {\n /** Run in background mode */\n background?: boolean;\n /** Verbose output */\n verbose?: boolean;\n /** Dry run - show plan without executing */\n dryRun?: boolean;\n /** Force regenerate all docs */\n force?: boolean;\n /** Include SOP compliance analysis */\n includeSops?: boolean;\n /** Generate development plan */\n generateDevPlan?: boolean;\n /** Generate deployment/infrastructure plan */\n generateInfraPlan?: boolean;\n /** Custom service directories to analyze */\n services?: string[];\n /** Maximum concurrent agents */\n maxAgents?: number;\n /** Output file for background mode */\n outputFile?: string;\n}\n\n/**\n * Service analysis result\n */\nexport interface ServiceAnalysis {\n name: string;\n path: string;\n type: 'frontend' | 'backend' | 'api' | 'admin' | 'shared' | 'unknown';\n languages: string[];\n frameworks: string[];\n existingDocs: string[];\n sourceFiles: string[];\n dependencies: string[];\n description: string;\n}\n\n/**\n * Development phase\n */\nexport interface DevelopmentPhase {\n id: string;\n name: string;\n description: string;\n priority: 'critical' | 'high' | 'medium' | 'low';\n estimatedEffort: string;\n dependencies: string[];\n services: string[];\n tasks: DevelopmentTask[];\n deliverables: string[];\n}\n\n/**\n * Development task\n */\nexport interface DevelopmentTask {\n id: string;\n title: string;\n description: string;\n service: string;\n type: 'feature' | 'infrastructure' | 'documentation' | 'testing' | 'deployment';\n priority: 'critical' | 'high' | 'medium' | 'low';\n estimatedEffort: string;\n dependencies: string[];\n acceptance: string[];\n}\n\n/**\n * Cultivation result\n */\nexport interface CultivationResult {\n success: boolean;\n projectRoot: string;\n docsPath: string;\n startTime: Date;\n endTime?: Date;\n services: ServiceAnalysis[];\n documentsGenerated: string[];\n documentsUpdated: string[];\n developmentPlan?: {\n phases: DevelopmentPhase[];\n totalEstimate: string;\n criticalPath: string[];\n };\n infrastructurePlan?: {\n environments: string[];\n services: Record<string, string>;\n deployment: string;\n };\n sopCompliance?: {\n score: number;\n gaps: string[];\n recommendations: string[];\n };\n errors: string[];\n logs: string[];\n}\n\n/**\n * Swarm agent task\n */\ninterface SwarmTask {\n id: string;\n type: 'research' | 'document' | 'plan' | 'analyze' | 'sop';\n agentType: 'researcher' | 'coder' | 'analyst' | 'architect';\n description: string;\n prompt: string;\n outputPath?: string;\n dependencies?: string[];\n}\n\n/**\n * Main cultivation function\n */\nexport async function cultivateDocs(\n projectRoot: string,\n docsPath: string,\n options: CultivationOptions = {}\n): Promise<CultivationResult> {\n const result: CultivationResult = {\n success: true,\n projectRoot,\n docsPath,\n startTime: new Date(),\n services: [],\n documentsGenerated: [],\n documentsUpdated: [],\n errors: [],\n logs: [],\n };\n\n const log = (msg: string) => {\n result.logs.push(`[${new Date().toISOString()}] ${msg}`);\n if (options.verbose) {\n console.log(msg);\n }\n };\n\n try {\n log('Starting documentation cultivation...');\n\n // Phase 1: Discover and analyze project structure\n log('Phase 1: Analyzing project structure...');\n result.services = await analyzeProjectServices(projectRoot, options);\n log(` Found ${result.services.length} services: ${result.services.map(s => s.name).join(', ')}`);\n\n // Phase 2: Scan all existing documentation\n log('Phase 2: Scanning existing documentation...');\n const existingDocs = await scanAllDocs(projectRoot, docsPath);\n log(` Found ${existingDocs.length} existing documentation files`);\n\n // Phase 3: Build cultivation tasks\n log('Phase 3: Building cultivation tasks...');\n const tasks = await buildCultivationTasks(result.services, existingDocs, docsPath, options);\n log(` Created ${tasks.length} cultivation tasks`);\n\n if (options.dryRun) {\n log('\\n[Dry Run] Would execute the following tasks:');\n for (const task of tasks) {\n log(` - [${task.type}] ${task.description} (${task.agentType} agent)`);\n if (task.outputPath) {\n log(` → ${task.outputPath}`);\n }\n }\n result.endTime = new Date();\n return result;\n }\n\n // Phase 4: Execute cultivation tasks using swarm\n log('Phase 4: Executing cultivation with claude-flow swarm...');\n const taskResults = await executeCultivationSwarm(tasks, result, options);\n\n // Phase 5: Generate development plan if requested\n if (options.generateDevPlan !== false) {\n log('Phase 5: Generating development plan...');\n const devPlan = await generateDevelopmentPlan(result.services, docsPath, options);\n result.developmentPlan = devPlan;\n log(` Generated ${devPlan!.phases.length} development phases`);\n }\n\n // Phase 6: Generate infrastructure plan if requested\n if (options.generateInfraPlan !== false) {\n log('Phase 6: Generating infrastructure plan...');\n const infraPlan = await generateInfrastructurePlan(result.services, docsPath, options);\n result.infrastructurePlan = infraPlan;\n log(` Generated infrastructure plan for ${infraPlan!.environments.length} environments`);\n }\n\n // Phase 7: SOP compliance check if requested\n if (options.includeSops) {\n log('Phase 7: Analyzing SOP compliance...');\n const sopCompliance = await analyzeSopCompliance(projectRoot, docsPath, result.services);\n result.sopCompliance = sopCompliance;\n log(` SOP compliance score: ${sopCompliance!.score}%`);\n }\n\n result.success = result.errors.length === 0;\n result.endTime = new Date();\n\n log(`\\nCultivation complete!`);\n log(` Documents generated: ${result.documentsGenerated.length}`);\n log(` Documents updated: ${result.documentsUpdated.length}`);\n log(` Errors: ${result.errors.length}`);\n\n } catch (error) {\n result.success = false;\n result.errors.push(`Cultivation failed: ${error}`);\n result.endTime = new Date();\n }\n\n return result;\n}\n\n/**\n * Analyze project services\n */\nasync function analyzeProjectServices(\n projectRoot: string,\n options: CultivationOptions\n): Promise<ServiceAnalysis[]> {\n const services: ServiceAnalysis[] = [];\n\n // Check for explicit service directories\n const serviceDirs = options.services || ['api', 'backend', 'frontend', 'admin', 'shared', 'common', 'lib'];\n\n // Look in src/ and root\n const searchPaths = [\n join(projectRoot, 'src'),\n projectRoot,\n ];\n\n for (const searchPath of searchPaths) {\n if (!existsSync(searchPath)) continue;\n\n for (const serviceName of serviceDirs) {\n const servicePath = join(searchPath, serviceName);\n if (!existsSync(servicePath)) continue;\n\n // Skip if not a directory\n try {\n if (!statSync(servicePath).isDirectory()) continue;\n } catch {\n continue;\n }\n\n const analysis = await analyzeService(servicePath, serviceName);\n if (analysis) {\n services.push(analysis);\n }\n }\n }\n\n // Also scan for any directory with a docs/ subdirectory\n const srcDir = join(projectRoot, 'src');\n if (existsSync(srcDir)) {\n try {\n const entries = readdirSync(srcDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (services.some(s => s.name === entry.name)) continue;\n\n const servicePath = join(srcDir, entry.name);\n const docsDir = join(servicePath, 'docs');\n\n if (existsSync(docsDir)) {\n const analysis = await analyzeService(servicePath, entry.name);\n if (analysis) {\n services.push(analysis);\n }\n }\n }\n } catch {\n // Ignore errors\n }\n }\n\n return services;\n}\n\n/**\n * Analyze a single service\n */\nasync function analyzeService(servicePath: string, serviceName: string): Promise<ServiceAnalysis | null> {\n try {\n const analysis: ServiceAnalysis = {\n name: serviceName,\n path: servicePath,\n type: guessServiceType(serviceName),\n languages: [],\n frameworks: [],\n existingDocs: [],\n sourceFiles: [],\n dependencies: [],\n description: '',\n };\n\n // Find source files\n const sourcePatterns = ['**/*.{ts,tsx,js,jsx,py,go,rs}'];\n const sourceFiles = await fg(sourcePatterns, {\n cwd: servicePath,\n ignore: ['node_modules/**', '.git/**', 'dist/**', 'build/**', '__pycache__/**'],\n });\n analysis.sourceFiles = sourceFiles;\n\n // Detect languages\n if (sourceFiles.some(f => f.endsWith('.ts') || f.endsWith('.tsx'))) {\n analysis.languages.push('TypeScript');\n }\n if (sourceFiles.some(f => f.endsWith('.js') || f.endsWith('.jsx'))) {\n analysis.languages.push('JavaScript');\n }\n if (sourceFiles.some(f => f.endsWith('.py'))) {\n analysis.languages.push('Python');\n }\n if (sourceFiles.some(f => f.endsWith('.go'))) {\n analysis.languages.push('Go');\n }\n if (sourceFiles.some(f => f.endsWith('.rs'))) {\n analysis.languages.push('Rust');\n }\n\n // Find existing docs\n const docsDir = join(servicePath, 'docs');\n if (existsSync(docsDir)) {\n const docFiles = await fg('**/*.md', { cwd: docsDir });\n analysis.existingDocs = docFiles;\n }\n\n // Check for package.json\n const pkgPath = join(servicePath, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n analysis.description = pkg.description || '';\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n analysis.dependencies = Object.keys(deps);\n\n // Detect frameworks\n if (deps.react) analysis.frameworks.push('React');\n if (deps.next) analysis.frameworks.push('Next.js');\n if (deps.vue) analysis.frameworks.push('Vue');\n if (deps.express) analysis.frameworks.push('Express');\n if (deps.fastify) analysis.frameworks.push('Fastify');\n if (deps['@nestjs/core']) analysis.frameworks.push('NestJS');\n } catch {\n // Ignore parse errors\n }\n }\n\n // Check for Python requirements\n const reqPath = join(servicePath, 'requirements.txt');\n if (existsSync(reqPath)) {\n try {\n const reqContent = readFileSync(reqPath, 'utf-8').toLowerCase();\n if (reqContent.includes('fastapi')) analysis.frameworks.push('FastAPI');\n if (reqContent.includes('flask')) analysis.frameworks.push('Flask');\n if (reqContent.includes('django')) analysis.frameworks.push('Django');\n if (reqContent.includes('sqlalchemy')) analysis.frameworks.push('SQLAlchemy');\n } catch {\n // Ignore\n }\n }\n\n return analysis;\n } catch {\n return null;\n }\n}\n\n/**\n * Guess service type from name\n */\nfunction guessServiceType(name: string): ServiceAnalysis['type'] {\n const nameLower = name.toLowerCase();\n if (nameLower.includes('frontend') || nameLower.includes('client') || nameLower.includes('web') || nameLower.includes('ui')) {\n return 'frontend';\n }\n if (nameLower.includes('backend') || nameLower.includes('server')) {\n return 'backend';\n }\n if (nameLower.includes('api') || nameLower.includes('gateway')) {\n return 'api';\n }\n if (nameLower.includes('admin') || nameLower.includes('dashboard')) {\n return 'admin';\n }\n if (nameLower.includes('shared') || nameLower.includes('common') || nameLower.includes('lib')) {\n return 'shared';\n }\n return 'unknown';\n}\n\n/**\n * Scan all documentation files\n */\nasync function scanAllDocs(projectRoot: string, docsPath: string): Promise<string[]> {\n const allDocs: string[] = [];\n\n // Scan main docs directory\n if (existsSync(docsPath)) {\n const mainDocs = await fg('**/*.md', {\n cwd: docsPath,\n ignore: ['node_modules/**', '.git/**'],\n });\n allDocs.push(...mainDocs.map(d => join(docsPath, d)));\n }\n\n // Scan for docs in src/{service}/docs\n const srcDir = join(projectRoot, 'src');\n if (existsSync(srcDir)) {\n const serviceDocs = await fg('*/docs/**/*.md', {\n cwd: srcDir,\n ignore: ['node_modules/**', '.git/**'],\n });\n allDocs.push(...serviceDocs.map(d => join(srcDir, d)));\n }\n\n // Scan root for any .md files\n const rootDocs = await fg('*.md', {\n cwd: projectRoot,\n ignore: ['node_modules/**', '.git/**'],\n });\n allDocs.push(...rootDocs.map(d => join(projectRoot, d)));\n\n return allDocs;\n}\n\n/**\n * Build cultivation tasks\n */\nasync function buildCultivationTasks(\n services: ServiceAnalysis[],\n existingDocs: string[],\n docsPath: string,\n options: CultivationOptions\n): Promise<SwarmTask[]> {\n const tasks: SwarmTask[] = [];\n let taskId = 0;\n\n // Task 1: Project overview research\n tasks.push({\n id: `task-${++taskId}`,\n type: 'research',\n agentType: 'researcher',\n description: 'Research and document project overview',\n prompt: buildProjectOverviewPrompt(services, existingDocs),\n outputPath: join(docsPath, 'README.md'),\n });\n\n // Task 2: Architecture documentation\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'architect',\n description: 'Document system architecture',\n prompt: buildArchitectureDocPrompt(services),\n outputPath: join(docsPath, 'concepts', 'architecture', 'system-overview.md'),\n });\n\n // Task 3: Per-service documentation\n for (const service of services) {\n // Service overview\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'coder',\n description: `Document ${service.name} service overview`,\n prompt: buildServiceDocPrompt(service),\n outputPath: join(docsPath, 'services', service.name, 'README.md'),\n });\n\n // Service API docs (if applicable)\n if (service.type === 'api' || service.type === 'backend') {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'coder',\n description: `Document ${service.name} API endpoints`,\n prompt: buildApiDocPrompt(service),\n outputPath: join(docsPath, 'services', service.name, 'api-reference.md'),\n });\n }\n\n // Service data models (if applicable)\n if (service.type === 'backend' || service.type === 'api') {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'analyst',\n description: `Document ${service.name} data models`,\n prompt: buildDataModelPrompt(service),\n outputPath: join(docsPath, 'services', service.name, 'data-models.md'),\n });\n }\n\n // Service components (if frontend)\n if (service.type === 'frontend' || service.type === 'admin') {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'coder',\n description: `Document ${service.name} components`,\n prompt: buildComponentDocPrompt(service),\n outputPath: join(docsPath, 'services', service.name, 'components.md'),\n });\n }\n }\n\n // Task 4: Integration documentation\n if (services.length > 1) {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'architect',\n description: 'Document service integrations',\n prompt: buildIntegrationDocPrompt(services),\n outputPath: join(docsPath, 'integrations', 'service-integration.md'),\n });\n }\n\n // Note: Development and infrastructure plans are generated separately in Phase 5 & 6\n // with detailed structured content, so we don't include them in swarm tasks\n\n // Task 5: SOP integration\n if (options.includeSops) {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'sop',\n agentType: 'analyst',\n description: 'Analyze and integrate SOP compliance',\n prompt: buildSopAnalysisPrompt(services),\n outputPath: join(docsPath, 'standards', 'sop-compliance.md'),\n });\n }\n\n return tasks;\n}\n\n/**\n * Execute cultivation tasks using claude-flow swarm\n */\nasync function executeCultivationSwarm(\n tasks: SwarmTask[],\n result: CultivationResult,\n options: CultivationOptions\n): Promise<void> {\n const maxAgents = options.maxAgents || 4;\n\n // Group tasks by dependencies\n const independentTasks = tasks.filter(t => !t.dependencies || t.dependencies.length === 0);\n const dependentTasks = tasks.filter(t => t.dependencies && t.dependencies.length > 0);\n\n // Execute independent tasks in batches\n for (let i = 0; i < independentTasks.length; i += maxAgents) {\n const batch = independentTasks.slice(i, i + maxAgents);\n\n const batchResults = await Promise.allSettled(\n batch.map(task => executeSwarmTask(task, options))\n );\n\n for (let j = 0; j < batchResults.length; j++) {\n const task = batch[j];\n const taskResult = batchResults[j];\n\n if (taskResult.status === 'fulfilled' && taskResult.value.success) {\n if (task.outputPath) {\n result.documentsGenerated.push(task.outputPath);\n }\n } else {\n const error = taskResult.status === 'rejected'\n ? taskResult.reason\n : taskResult.value.error;\n result.errors.push(`Task ${task.id} failed: ${error}`);\n }\n }\n }\n\n // Execute dependent tasks sequentially\n for (const task of dependentTasks) {\n try {\n const taskResult = await executeSwarmTask(task, options);\n if (taskResult.success && task.outputPath) {\n result.documentsGenerated.push(task.outputPath);\n } else {\n result.errors.push(`Task ${task.id} failed: ${taskResult.error}`);\n }\n } catch (error) {\n result.errors.push(`Task ${task.id} failed: ${error}`);\n }\n }\n}\n\n/**\n * Execute a single swarm task\n */\nasync function executeSwarmTask(\n task: SwarmTask,\n options: CultivationOptions\n): Promise<{ success: boolean; output?: string; error?: string }> {\n return new Promise((resolve) => {\n // Try using claude-flow agent spawn\n const agentProcess = spawn('claude-flow', [\n 'agent',\n 'spawn',\n '--type', task.agentType,\n '--task', task.prompt.slice(0, 1000), // Truncate for CLI\n ], {\n shell: false,\n timeout: 120000,\n });\n\n let output = '';\n let errorOutput = '';\n\n agentProcess.stdout?.on('data', (data) => {\n output += data.toString();\n });\n\n agentProcess.stderr?.on('data', (data) => {\n errorOutput += data.toString();\n });\n\n agentProcess.on('close', (code) => {\n if (code === 0 || output.length > 0) {\n // Write output to file if path specified\n if (task.outputPath && output.length > 0) {\n try {\n const dir = dirname(task.outputPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(task.outputPath, output);\n } catch (e) {\n // Fall back to template\n writeTemplateDoc(task);\n }\n } else {\n // Write template if no output\n writeTemplateDoc(task);\n }\n resolve({ success: true, output });\n } else {\n // Fall back to template generation\n writeTemplateDoc(task);\n resolve({ success: true, output: 'Generated from template' });\n }\n });\n\n agentProcess.on('error', () => {\n // Fall back to template generation\n writeTemplateDoc(task);\n resolve({ success: true, output: 'Generated from template (fallback)' });\n });\n\n // Timeout fallback\n setTimeout(() => {\n agentProcess.kill();\n writeTemplateDoc(task);\n resolve({ success: true, output: 'Generated from template (timeout)' });\n }, 60000);\n });\n}\n\n/**\n * Write template document when agent fails\n */\nfunction writeTemplateDoc(task: SwarmTask): void {\n if (!task.outputPath) return;\n\n const dir = dirname(task.outputPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const title = basename(task.outputPath, '.md')\n .split('-')\n .map(w => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n\n const content = `---\ntitle: ${title}\ntype: ${task.type}\nstatus: draft\ncreated: ${new Date().toISOString().split('T')[0]}\ntags: [auto-generated, needs-review]\n---\n\n# ${title}\n\n${task.description}\n\n## Overview\n\n*This document was auto-generated and needs to be completed.*\n\n${task.prompt.split('\\n').slice(0, 10).join('\\n')}\n\n## Next Steps\n\n- [ ] Review and expand this document\n- [ ] Add specific implementation details\n- [ ] Link related documentation\n\n---\n> Auto-generated by kg-agent cultivate\n`;\n\n writeFileSync(task.outputPath, content);\n}\n\n// Prompt builders\nfunction buildProjectOverviewPrompt(services: ServiceAnalysis[], existingDocs: string[]): string {\n return `Analyze this project and create a comprehensive README.md.\n\nServices found: ${services.map(s => `${s.name} (${s.type})`).join(', ')}\nExisting docs: ${existingDocs.length} files\n\nCreate a project overview including:\n- Project purpose and goals\n- Architecture summary\n- Services overview\n- Getting started guide\n- Development setup\n`;\n}\n\nfunction buildArchitectureDocPrompt(services: ServiceAnalysis[]): string {\n const serviceInfo = services.map(s =>\n `- ${s.name}: ${s.type} service using ${s.languages.join(', ')} with ${s.frameworks.join(', ') || 'no specific framework'}`\n ).join('\\n');\n\n return `Document the system architecture for this multi-service application.\n\nServices:\n${serviceInfo}\n\nInclude:\n- High-level architecture diagram (mermaid)\n- Service responsibilities\n- Data flow between services\n- Technology stack\n- Scalability considerations\n`;\n}\n\nfunction buildServiceDocPrompt(service: ServiceAnalysis): string {\n return `Document the ${service.name} service.\n\nType: ${service.type}\nLanguages: ${service.languages.join(', ')}\nFrameworks: ${service.frameworks.join(', ') || 'None detected'}\nSource files: ${service.sourceFiles.length}\nExisting docs: ${service.existingDocs.length}\n\nCreate documentation including:\n- Service purpose and responsibilities\n- Key components/modules\n- Configuration options\n- Dependencies\n- Usage examples\n`;\n}\n\nfunction buildApiDocPrompt(service: ServiceAnalysis): string {\n return `Document the API endpoints for ${service.name}.\n\nAnalyze the source files and document:\n- Available endpoints (REST/GraphQL)\n- Request/response formats\n- Authentication requirements\n- Error handling\n- Rate limiting (if applicable)\n- Example requests/responses\n`;\n}\n\nfunction buildDataModelPrompt(service: ServiceAnalysis): string {\n return `Document the data models for ${service.name}.\n\nAnalyze the source files and document:\n- Database schemas\n- Entity relationships (ERD if applicable)\n- Data validation rules\n- Migrations strategy\n- Data access patterns\n`;\n}\n\nfunction buildComponentDocPrompt(service: ServiceAnalysis): string {\n return `Document the UI components for ${service.name}.\n\nFrameworks: ${service.frameworks.join(', ')}\n\nDocument:\n- Component hierarchy\n- Reusable components\n- State management\n- Styling approach\n- Component props/interfaces\n`;\n}\n\nfunction buildIntegrationDocPrompt(services: ServiceAnalysis[]): string {\n return `Document how the services integrate with each other.\n\nServices: ${services.map(s => s.name).join(', ')}\n\nDocument:\n- Service communication patterns\n- API contracts between services\n- Shared data models\n- Authentication flow across services\n- Error handling across services\n`;\n}\n\nfunction buildDevPlanPrompt(services: ServiceAnalysis[]): string {\n const serviceList = services.map(s => `- ${s.name} (${s.type}): ${s.sourceFiles.length} files`).join('\\n');\n\n return `Create a phased development plan for this project.\n\nServices to plan:\n${serviceList}\n\nCreate a plan with:\n1. Phase 1: Foundation (infrastructure, auth, core services)\n2. Phase 2: Core Features (main functionality per service)\n3. Phase 3: Integration (service communication, data flow)\n4. Phase 4: Polish (UI/UX, performance, testing)\n5. Phase 5: Deployment (staging, production, monitoring)\n\nFor each phase include:\n- Goals and deliverables\n- Tasks per service\n- Dependencies\n- Estimated effort\n- Acceptance criteria\n`;\n}\n\nfunction buildInfraPlanPrompt(services: ServiceAnalysis[]): string {\n return `Create infrastructure and deployment plan.\n\nServices: ${services.map(s => `${s.name} (${s.type})`).join(', ')}\n\nDocument:\n1. Development Environment\n - Local setup requirements\n - Docker compose configuration\n - Environment variables\n\n2. Staging Environment\n - Cloud provider recommendations\n - Service deployment configuration\n - Database setup\n - CI/CD pipeline\n\n3. Production Environment\n - High availability configuration\n - Scaling strategy\n - Monitoring and logging\n - Backup and disaster recovery\n - Security considerations\n`;\n}\n\nfunction buildSopAnalysisPrompt(services: ServiceAnalysis[]): string {\n return `Analyze project for SOP (Standard Operating Procedure) compliance.\n\nServices: ${services.map(s => s.name).join(', ')}\n\nCheck compliance with:\n- AI-SDLC SOPs for development practices\n- Documentation requirements\n- Testing requirements\n- Security requirements\n- Deployment requirements\n\nGenerate:\n- Compliance score per category\n- Gap analysis\n- Recommendations for improvement\n- Priority remediation items\n`;\n}\n\n/**\n * Generate development plan\n */\nasync function generateDevelopmentPlan(\n services: ServiceAnalysis[],\n docsPath: string,\n options: CultivationOptions\n): Promise<CultivationResult['developmentPlan']> {\n const phases: DevelopmentPhase[] = [\n {\n id: 'phase-1',\n name: 'Foundation',\n description: 'Set up infrastructure, authentication, and core services',\n priority: 'critical',\n estimatedEffort: '2-3 weeks',\n dependencies: [],\n services: services.map(s => s.name),\n tasks: [\n {\n id: 'task-1-1',\n title: 'Infrastructure Setup',\n description: 'Set up development, staging, and production environments',\n service: 'all',\n type: 'infrastructure',\n priority: 'critical',\n estimatedEffort: '3-5 days',\n dependencies: [],\n acceptance: ['Environments accessible', 'CI/CD pipeline working'],\n },\n {\n id: 'task-1-2',\n title: 'Authentication System',\n description: 'Implement authentication and authorization',\n service: services.find(s => s.type === 'backend' || s.type === 'api')?.name || 'backend',\n type: 'feature',\n priority: 'critical',\n estimatedEffort: '3-5 days',\n dependencies: ['task-1-1'],\n acceptance: ['User login/logout working', 'Role-based access control'],\n },\n ],\n deliverables: ['Working development environment', 'Authentication system', 'CI/CD pipeline'],\n },\n {\n id: 'phase-2',\n name: 'Core Features',\n description: 'Implement core functionality for each service',\n priority: 'high',\n estimatedEffort: '4-6 weeks',\n dependencies: ['phase-1'],\n services: services.map(s => s.name),\n tasks: services.map((s, i) => ({\n id: `task-2-${i + 1}`,\n title: `${s.name} Core Features`,\n description: `Implement core functionality for ${s.name} service`,\n service: s.name,\n type: 'feature' as const,\n priority: 'high' as const,\n estimatedEffort: '1-2 weeks',\n dependencies: ['phase-1'],\n acceptance: ['Core features working', 'Unit tests passing'],\n })),\n deliverables: services.map(s => `${s.name} core features complete`),\n },\n {\n id: 'phase-3',\n name: 'Integration',\n description: 'Connect services and implement data flow',\n priority: 'high',\n estimatedEffort: '2-3 weeks',\n dependencies: ['phase-2'],\n services: services.map(s => s.name),\n tasks: [\n {\n id: 'task-3-1',\n title: 'Service Integration',\n description: 'Connect all services and implement API contracts',\n service: 'all',\n type: 'feature',\n priority: 'high',\n estimatedEffort: '1-2 weeks',\n dependencies: ['phase-2'],\n acceptance: ['Services communicating', 'Data flow working'],\n },\n ],\n deliverables: ['Integrated system', 'End-to-end tests passing'],\n },\n {\n id: 'phase-4',\n name: 'Polish',\n description: 'UI/UX improvements, performance optimization, comprehensive testing',\n priority: 'medium',\n estimatedEffort: '2-3 weeks',\n dependencies: ['phase-3'],\n services: services.filter(s => s.type === 'frontend' || s.type === 'admin').map(s => s.name),\n tasks: [\n {\n id: 'task-4-1',\n title: 'UI/UX Polish',\n description: 'Improve user interface and experience',\n service: services.find(s => s.type === 'frontend')?.name || 'frontend',\n type: 'feature',\n priority: 'medium',\n estimatedEffort: '1 week',\n dependencies: ['phase-3'],\n acceptance: ['UI responsive', 'Accessibility standards met'],\n },\n {\n id: 'task-4-2',\n title: 'Performance Optimization',\n description: 'Optimize application performance',\n service: 'all',\n type: 'feature',\n priority: 'medium',\n estimatedEffort: '1 week',\n dependencies: ['phase-3'],\n acceptance: ['Load times < 3s', 'Performance benchmarks met'],\n },\n ],\n deliverables: ['Polished UI', 'Performance optimized', 'Comprehensive test coverage'],\n },\n {\n id: 'phase-5',\n name: 'Deployment',\n description: 'Deploy to staging and production',\n priority: 'high',\n estimatedEffort: '1-2 weeks',\n dependencies: ['phase-4'],\n services: services.map(s => s.name),\n tasks: [\n {\n id: 'task-5-1',\n title: 'Staging Deployment',\n description: 'Deploy to staging environment',\n service: 'all',\n type: 'deployment',\n priority: 'high',\n estimatedEffort: '2-3 days',\n dependencies: ['phase-4'],\n acceptance: ['Staging environment working', 'QA sign-off'],\n },\n {\n id: 'task-5-2',\n title: 'Production Deployment',\n description: 'Deploy to production environment',\n service: 'all',\n type: 'deployment',\n priority: 'high',\n estimatedEffort: '2-3 days',\n dependencies: ['task-5-1'],\n acceptance: ['Production live', 'Monitoring active'],\n },\n ],\n deliverables: ['Staging deployed', 'Production deployed', 'Monitoring configured'],\n },\n ];\n\n // Write development plan to docs\n const planPath = join(docsPath, 'planning', 'development-plan.md');\n const planDir = dirname(planPath);\n if (!existsSync(planDir)) {\n mkdirSync(planDir, { recursive: true });\n }\n\n const planContent = generateDevPlanMarkdown(phases, services);\n writeFileSync(planPath, planContent);\n\n return {\n phases,\n totalEstimate: '12-18 weeks',\n criticalPath: ['phase-1', 'phase-2', 'phase-3', 'phase-5'],\n };\n}\n\n/**\n * Generate development plan markdown\n */\nfunction generateDevPlanMarkdown(phases: DevelopmentPhase[], services: ServiceAnalysis[]): string {\n let md = `---\ntitle: Development Plan\ntype: planning\nstatus: active\ncreated: ${new Date().toISOString().split('T')[0]}\ntags: [planning, development, phases]\n---\n\n# Development Plan\n\n## Overview\n\nThis document outlines the phased development approach for building out the project.\n\n### Services\n\n${services.map(s => `- **${s.name}** (${s.type}): ${s.languages.join(', ')}`).join('\\n')}\n\n### Timeline\n\n| Phase | Name | Duration | Priority |\n|-------|------|----------|----------|\n${phases.map(p => `| ${p.id} | ${p.name} | ${p.estimatedEffort} | ${p.priority} |`).join('\\n')}\n\n---\n\n`;\n\n for (const phase of phases) {\n md += `## ${phase.name}\n\n**Priority:** ${phase.priority}\n**Estimated Effort:** ${phase.estimatedEffort}\n**Dependencies:** ${phase.dependencies.length > 0 ? phase.dependencies.join(', ') : 'None'}\n\n${phase.description}\n\n### Tasks\n\n${phase.tasks.map(t => `\n#### ${t.title}\n\n- **Service:** ${t.service}\n- **Type:** ${t.type}\n- **Priority:** ${t.priority}\n- **Effort:** ${t.estimatedEffort}\n- **Dependencies:** ${t.dependencies.length > 0 ? t.dependencies.join(', ') : 'None'}\n\n${t.description}\n\n**Acceptance Criteria:**\n${t.acceptance.map(a => `- [ ] ${a}`).join('\\n')}\n`).join('\\n')}\n\n### Deliverables\n\n${phase.deliverables.map(d => `- [ ] ${d}`).join('\\n')}\n\n---\n\n`;\n }\n\n md += `\n## Critical Path\n\nThe critical path for this project includes:\n${phases.filter(p => p.priority === 'critical' || p.priority === 'high').map(p => `1. **${p.name}** - ${p.description}`).join('\\n')}\n\n---\n> Auto-generated by kg-agent cultivate\n`;\n\n return md;\n}\n\n/**\n * Generate infrastructure plan\n */\nasync function generateInfrastructurePlan(\n services: ServiceAnalysis[],\n docsPath: string,\n options: CultivationOptions\n): Promise<CultivationResult['infrastructurePlan']> {\n const plan = {\n environments: ['development', 'staging', 'production'],\n services: {} as Record<string, string>,\n deployment: 'containerized',\n };\n\n for (const service of services) {\n plan.services[service.name] = service.type;\n }\n\n // Write infrastructure plan to docs\n const planPath = join(docsPath, 'planning', 'infrastructure-plan.md');\n const planDir = dirname(planPath);\n if (!existsSync(planDir)) {\n mkdirSync(planDir, { recursive: true });\n }\n\n const planContent = generateInfraPlanMarkdown(plan, services);\n writeFileSync(planPath, planContent);\n\n return plan;\n}\n\n/**\n * Generate infrastructure plan markdown\n */\nfunction generateInfraPlanMarkdown(\n plan: CultivationResult['infrastructurePlan'],\n services: ServiceAnalysis[]\n): string {\n return `---\ntitle: Infrastructure Plan\ntype: planning\nstatus: active\ncreated: ${new Date().toISOString().split('T')[0]}\ntags: [infrastructure, deployment, devops]\n---\n\n# Infrastructure Plan\n\n## Overview\n\nThis document outlines the infrastructure and deployment strategy for all environments.\n\n## Environments\n\n### Development Environment\n\n**Purpose:** Local development and testing\n\n**Components:**\n- Docker Compose for local services\n- Local database instances\n- Mock external services\n\n**Setup:**\n\\`\\`\\`bash\n# Clone repository\ngit clone <repo-url>\ncd <project>\n\n# Start development environment\ndocker-compose up -d\n\n# Install dependencies\nnpm install # or appropriate package manager\n\\`\\`\\`\n\n### Staging Environment\n\n**Purpose:** Pre-production testing and QA\n\n**Infrastructure:**\n- Cloud provider: AWS/GCP/Azure (TBD)\n- Container orchestration: Kubernetes/ECS\n- Database: Managed database service\n\n**Services:**\n${services.map(s => `- **${s.name}**: ${s.type} service`).join('\\n')}\n\n**CI/CD Pipeline:**\n1. Push to staging branch\n2. Run automated tests\n3. Build container images\n4. Deploy to staging cluster\n5. Run integration tests\n\n### Production Environment\n\n**Purpose:** Live production system\n\n**Infrastructure:**\n- High-availability configuration\n- Auto-scaling enabled\n- CDN for static assets\n- Managed database with read replicas\n\n**Monitoring:**\n- Application performance monitoring\n- Log aggregation\n- Alerting and on-call rotation\n\n## Service Architecture\n\n\\`\\`\\`mermaid\ngraph TB\n subgraph Frontend\n ${services.filter(s => s.type === 'frontend' || s.type === 'admin').map(s => `${s.name}[${s.name}]`).join('\\n ')}\n end\n\n subgraph Backend\n ${services.filter(s => s.type === 'backend' || s.type === 'api').map(s => `${s.name}[${s.name}]`).join('\\n ')}\n end\n\n subgraph Data\n DB[(Database)]\n Cache[(Cache)]\n end\n\n Frontend --> Backend\n Backend --> Data\n\\`\\`\\`\n\n## Deployment Strategy\n\n### Development\n- Local Docker Compose\n- Hot reloading enabled\n- Debug logging\n\n### Staging\n- Kubernetes deployment\n- Automated from CI/CD\n- Mirrors production configuration\n\n### Production\n- Blue-green deployment\n- Automated rollback on failures\n- Canary releases for major changes\n\n## Security Considerations\n\n- [ ] SSL/TLS certificates\n- [ ] API authentication\n- [ ] Secret management (Vault/AWS Secrets Manager)\n- [ ] Network security groups\n- [ ] WAF configuration\n\n## Backup and Disaster Recovery\n\n- Database backups: Daily automated backups\n- Retention: 30 days\n- RTO: 4 hours\n- RPO: 1 hour\n\n---\n> Auto-generated by kg-agent cultivate\n`;\n}\n\n/**\n * Analyze SOP compliance\n */\nasync function analyzeSopCompliance(\n projectRoot: string,\n docsPath: string,\n services: ServiceAnalysis[]\n): Promise<CultivationResult['sopCompliance']> {\n // Basic compliance analysis\n const compliance = {\n score: 0,\n gaps: [] as string[],\n recommendations: [] as string[],\n };\n\n let totalChecks = 0;\n let passedChecks = 0;\n\n // Check for required documentation\n const requiredDocs = [\n 'README.md',\n 'concepts/architecture',\n 'guides/getting-started',\n 'standards',\n ];\n\n for (const doc of requiredDocs) {\n totalChecks++;\n if (existsSync(join(docsPath, doc))) {\n passedChecks++;\n } else {\n compliance.gaps.push(`Missing documentation: ${doc}`);\n }\n }\n\n // Check for service documentation\n for (const service of services) {\n totalChecks++;\n const serviceDoc = join(docsPath, 'services', service.name, 'README.md');\n if (existsSync(serviceDoc)) {\n passedChecks++;\n } else {\n compliance.gaps.push(`Missing service documentation: ${service.name}`);\n }\n }\n\n // Calculate score\n compliance.score = totalChecks > 0 ? Math.round((passedChecks / totalChecks) * 100) : 0;\n\n // Generate recommendations\n if (compliance.gaps.length > 0) {\n compliance.recommendations.push('Complete missing documentation items');\n }\n if (!existsSync(join(docsPath, 'standards'))) {\n compliance.recommendations.push('Add coding standards documentation');\n }\n if (!existsSync(join(docsPath, 'guides', 'getting-started'))) {\n compliance.recommendations.push('Add getting started guide for new developers');\n }\n\n // Write SOP compliance report\n const reportPath = join(docsPath, 'standards', 'sop-compliance.md');\n const reportDir = dirname(reportPath);\n if (!existsSync(reportDir)) {\n mkdirSync(reportDir, { recursive: true });\n }\n\n const reportContent = `---\ntitle: SOP Compliance Report\ntype: standard\nstatus: active\ncreated: ${new Date().toISOString().split('T')[0]}\ntags: [sop, compliance, standards]\n---\n\n# SOP Compliance Report\n\n## Score: ${compliance.score}%\n\n## Gaps\n\n${compliance.gaps.length > 0 ? compliance.gaps.map(g => `- ${g}`).join('\\n') : 'No gaps identified.'}\n\n## Recommendations\n\n${compliance.recommendations.length > 0 ? compliance.recommendations.map(r => `- ${r}`).join('\\n') : 'No recommendations at this time.'}\n\n---\n> Auto-generated by kg-agent cultivate\n`;\n\n writeFileSync(reportPath, reportContent);\n\n return compliance;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc-cultivator.js","sources":["../../src/generators/doc-cultivator.ts"],"sourcesContent":["/**\n * Documentation Cultivator\n *\n * Long-running swarm-based process that recursively analyzes and builds out\n * all documentation, creates development plans, and integrates SOPs.\n *\n * Uses claude-flow swarm orchestration to systematically:\n * - Research and analyze existing docs\n * - Fill documentation gaps\n * - Create phased development plans\n * - Generate deployment/infrastructure plans\n * - Integrate SOP compliance\n *\n * @module generators/doc-cultivator\n */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, statSync } from 'fs';\nimport { join, basename, dirname, relative } from 'path';\nimport fg from 'fast-glob';\nimport { spawn, exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\n/**\n * Cultivation options\n */\nexport interface CultivationOptions {\n /** Run in background mode */\n background?: boolean;\n /** Verbose output */\n verbose?: boolean;\n /** Dry run - show plan without executing */\n dryRun?: boolean;\n /** Force regenerate all docs */\n force?: boolean;\n /** Include SOP compliance analysis */\n includeSops?: boolean;\n /** Generate development plan */\n generateDevPlan?: boolean;\n /** Generate deployment/infrastructure plan */\n generateInfraPlan?: boolean;\n /** Custom service directories to analyze */\n services?: string[];\n /** Maximum concurrent agents */\n maxAgents?: number;\n /** Output file for background mode */\n outputFile?: string;\n}\n\n/**\n * Service analysis result\n */\nexport interface ServiceAnalysis {\n name: string;\n path: string;\n type: 'frontend' | 'backend' | 'api' | 'admin' | 'shared' | 'unknown';\n languages: string[];\n frameworks: string[];\n existingDocs: string[];\n sourceFiles: string[];\n dependencies: string[];\n description: string;\n}\n\n/**\n * Development phase\n */\nexport interface DevelopmentPhase {\n id: string;\n name: string;\n description: string;\n priority: 'critical' | 'high' | 'medium' | 'low';\n estimatedEffort: string;\n dependencies: string[];\n services: string[];\n tasks: DevelopmentTask[];\n deliverables: string[];\n}\n\n/**\n * Development task\n */\nexport interface DevelopmentTask {\n id: string;\n title: string;\n description: string;\n service: string;\n type: 'feature' | 'infrastructure' | 'documentation' | 'testing' | 'deployment';\n priority: 'critical' | 'high' | 'medium' | 'low';\n estimatedEffort: string;\n dependencies: string[];\n acceptance: string[];\n}\n\n/**\n * Cultivation result\n */\nexport interface CultivationResult {\n success: boolean;\n projectRoot: string;\n docsPath: string;\n startTime: Date;\n endTime?: Date;\n services: ServiceAnalysis[];\n documentsGenerated: string[];\n documentsUpdated: string[];\n developmentPlan?: {\n phases: DevelopmentPhase[];\n totalEstimate: string;\n criticalPath: string[];\n };\n infrastructurePlan?: {\n environments: string[];\n services: Record<string, string>;\n deployment: string;\n };\n sopCompliance?: {\n score: number;\n gaps: string[];\n recommendations: string[];\n };\n errors: string[];\n logs: string[];\n}\n\n/**\n * Swarm agent task\n */\ninterface SwarmTask {\n id: string;\n type: 'research' | 'document' | 'plan' | 'analyze' | 'sop';\n agentType: 'researcher' | 'coder' | 'analyst' | 'architect';\n description: string;\n prompt: string;\n outputPath?: string;\n dependencies?: string[];\n}\n\n/**\n * Main cultivation function\n */\nexport async function cultivateDocs(\n projectRoot: string,\n docsPath: string,\n options: CultivationOptions = {}\n): Promise<CultivationResult> {\n const result: CultivationResult = {\n success: true,\n projectRoot,\n docsPath,\n startTime: new Date(),\n services: [],\n documentsGenerated: [],\n documentsUpdated: [],\n errors: [],\n logs: [],\n };\n\n const log = (msg: string) => {\n result.logs.push(`[${new Date().toISOString()}] ${msg}`);\n if (options.verbose) {\n console.log(msg);\n }\n };\n\n try {\n log('Starting documentation cultivation...');\n\n // Phase 1: Discover and analyze project structure\n log('Phase 1: Analyzing project structure...');\n result.services = await analyzeProjectServices(projectRoot, options);\n log(` Found ${result.services.length} services: ${result.services.map(s => s.name).join(', ')}`);\n\n // Phase 2: Scan all existing documentation\n log('Phase 2: Scanning existing documentation...');\n const existingDocs = await scanAllDocs(projectRoot, docsPath);\n log(` Found ${existingDocs.length} existing documentation files`);\n\n // Phase 3: Build cultivation tasks\n log('Phase 3: Building cultivation tasks...');\n const tasks = await buildCultivationTasks(result.services, existingDocs, docsPath, options);\n log(` Created ${tasks.length} cultivation tasks`);\n\n if (options.dryRun) {\n log('\\n[Dry Run] Would execute the following tasks:');\n for (const task of tasks) {\n log(` - [${task.type}] ${task.description} (${task.agentType} agent)`);\n if (task.outputPath) {\n log(` → ${task.outputPath}`);\n }\n }\n result.endTime = new Date();\n return result;\n }\n\n // Phase 4: Execute cultivation tasks using swarm\n log('Phase 4: Executing cultivation with claude-flow swarm...');\n const taskResults = await executeCultivationSwarm(tasks, result, options);\n\n // Phase 5: Generate development plan if requested\n if (options.generateDevPlan !== false) {\n log('Phase 5: Generating development plan...');\n const devPlan = await generateDevelopmentPlan(result.services, docsPath, options);\n result.developmentPlan = devPlan;\n log(` Generated ${devPlan!.phases.length} development phases`);\n }\n\n // Phase 6: Generate infrastructure plan if requested\n if (options.generateInfraPlan !== false) {\n log('Phase 6: Generating infrastructure plan...');\n const infraPlan = await generateInfrastructurePlan(result.services, docsPath, options);\n result.infrastructurePlan = infraPlan;\n log(` Generated infrastructure plan for ${infraPlan!.environments.length} environments`);\n }\n\n // Phase 7: SOP compliance check if requested\n if (options.includeSops) {\n log('Phase 7: Analyzing SOP compliance...');\n const sopCompliance = await analyzeSopCompliance(projectRoot, docsPath, result.services);\n result.sopCompliance = sopCompliance;\n log(` SOP compliance score: ${sopCompliance!.score}%`);\n }\n\n result.success = result.errors.length === 0;\n result.endTime = new Date();\n\n log(`\\nCultivation complete!`);\n log(` Documents generated: ${result.documentsGenerated.length}`);\n log(` Documents updated: ${result.documentsUpdated.length}`);\n log(` Errors: ${result.errors.length}`);\n\n } catch (error) {\n result.success = false;\n result.errors.push(`Cultivation failed: ${error}`);\n result.endTime = new Date();\n }\n\n return result;\n}\n\n/**\n * Analyze project services\n */\nasync function analyzeProjectServices(\n projectRoot: string,\n options: CultivationOptions\n): Promise<ServiceAnalysis[]> {\n const services: ServiceAnalysis[] = [];\n\n // Check for explicit service directories\n const serviceDirs = options.services || ['api', 'backend', 'frontend', 'admin', 'shared', 'common', 'lib'];\n\n // Look in src/ and root\n const searchPaths = [\n join(projectRoot, 'src'),\n projectRoot,\n ];\n\n for (const searchPath of searchPaths) {\n if (!existsSync(searchPath)) continue;\n\n for (const serviceName of serviceDirs) {\n const servicePath = join(searchPath, serviceName);\n if (!existsSync(servicePath)) continue;\n\n // Skip if not a directory\n try {\n if (!statSync(servicePath).isDirectory()) continue;\n } catch {\n continue;\n }\n\n const analysis = await analyzeService(servicePath, serviceName);\n if (analysis) {\n services.push(analysis);\n }\n }\n }\n\n // Also scan for any directory with a docs/ subdirectory\n const srcDir = join(projectRoot, 'src');\n if (existsSync(srcDir)) {\n try {\n const entries = readdirSync(srcDir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n if (services.some(s => s.name === entry.name)) continue;\n\n const servicePath = join(srcDir, entry.name);\n const docsDir = join(servicePath, 'docs');\n\n if (existsSync(docsDir)) {\n const analysis = await analyzeService(servicePath, entry.name);\n if (analysis) {\n services.push(analysis);\n }\n }\n }\n } catch {\n // Ignore errors\n }\n }\n\n return services;\n}\n\n/**\n * Analyze a single service\n */\nasync function analyzeService(servicePath: string, serviceName: string): Promise<ServiceAnalysis | null> {\n try {\n const analysis: ServiceAnalysis = {\n name: serviceName,\n path: servicePath,\n type: guessServiceType(serviceName),\n languages: [],\n frameworks: [],\n existingDocs: [],\n sourceFiles: [],\n dependencies: [],\n description: '',\n };\n\n // Find source files\n const sourcePatterns = ['**/*.{ts,tsx,js,jsx,py,go,rs}'];\n const sourceFiles = await fg(sourcePatterns, {\n cwd: servicePath,\n ignore: ['node_modules/**', '.git/**', 'dist/**', 'build/**', '__pycache__/**'],\n });\n analysis.sourceFiles = sourceFiles;\n\n // Detect languages\n if (sourceFiles.some(f => f.endsWith('.ts') || f.endsWith('.tsx'))) {\n analysis.languages.push('TypeScript');\n }\n if (sourceFiles.some(f => f.endsWith('.js') || f.endsWith('.jsx'))) {\n analysis.languages.push('JavaScript');\n }\n if (sourceFiles.some(f => f.endsWith('.py'))) {\n analysis.languages.push('Python');\n }\n if (sourceFiles.some(f => f.endsWith('.go'))) {\n analysis.languages.push('Go');\n }\n if (sourceFiles.some(f => f.endsWith('.rs'))) {\n analysis.languages.push('Rust');\n }\n\n // Find existing docs\n const docsDir = join(servicePath, 'docs');\n if (existsSync(docsDir)) {\n const docFiles = await fg('**/*.md', { cwd: docsDir });\n analysis.existingDocs = docFiles;\n }\n\n // Check for package.json\n const pkgPath = join(servicePath, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n analysis.description = pkg.description || '';\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n analysis.dependencies = Object.keys(deps);\n\n // Detect frameworks\n if (deps.react) analysis.frameworks.push('React');\n if (deps.next) analysis.frameworks.push('Next.js');\n if (deps.vue) analysis.frameworks.push('Vue');\n if (deps.express) analysis.frameworks.push('Express');\n if (deps.fastify) analysis.frameworks.push('Fastify');\n if (deps['@nestjs/core']) analysis.frameworks.push('NestJS');\n } catch {\n // Ignore parse errors\n }\n }\n\n // Check for Python requirements\n const reqPath = join(servicePath, 'requirements.txt');\n if (existsSync(reqPath)) {\n try {\n const reqContent = readFileSync(reqPath, 'utf-8').toLowerCase();\n if (reqContent.includes('fastapi')) analysis.frameworks.push('FastAPI');\n if (reqContent.includes('flask')) analysis.frameworks.push('Flask');\n if (reqContent.includes('django')) analysis.frameworks.push('Django');\n if (reqContent.includes('sqlalchemy')) analysis.frameworks.push('SQLAlchemy');\n } catch {\n // Ignore\n }\n }\n\n return analysis;\n } catch {\n return null;\n }\n}\n\n/**\n * Guess service type from name\n */\nfunction guessServiceType(name: string): ServiceAnalysis['type'] {\n const nameLower = name.toLowerCase();\n if (nameLower.includes('frontend') || nameLower.includes('client') || nameLower.includes('web') || nameLower.includes('ui')) {\n return 'frontend';\n }\n if (nameLower.includes('backend') || nameLower.includes('server')) {\n return 'backend';\n }\n if (nameLower.includes('api') || nameLower.includes('gateway')) {\n return 'api';\n }\n if (nameLower.includes('admin') || nameLower.includes('dashboard')) {\n return 'admin';\n }\n if (nameLower.includes('shared') || nameLower.includes('common') || nameLower.includes('lib')) {\n return 'shared';\n }\n return 'unknown';\n}\n\n/**\n * Scan all documentation files\n */\nasync function scanAllDocs(projectRoot: string, docsPath: string): Promise<string[]> {\n const allDocs: string[] = [];\n\n // Scan main docs directory\n if (existsSync(docsPath)) {\n const mainDocs = await fg('**/*.md', {\n cwd: docsPath,\n ignore: ['node_modules/**', '.git/**'],\n });\n allDocs.push(...mainDocs.map(d => join(docsPath, d)));\n }\n\n // Scan for docs in src/{service}/docs\n const srcDir = join(projectRoot, 'src');\n if (existsSync(srcDir)) {\n const serviceDocs = await fg('*/docs/**/*.md', {\n cwd: srcDir,\n ignore: ['node_modules/**', '.git/**'],\n });\n allDocs.push(...serviceDocs.map(d => join(srcDir, d)));\n }\n\n // Scan root for any .md files\n const rootDocs = await fg('*.md', {\n cwd: projectRoot,\n ignore: ['node_modules/**', '.git/**'],\n });\n allDocs.push(...rootDocs.map(d => join(projectRoot, d)));\n\n return allDocs;\n}\n\n/**\n * Build cultivation tasks\n */\nasync function buildCultivationTasks(\n services: ServiceAnalysis[],\n existingDocs: string[],\n docsPath: string,\n options: CultivationOptions\n): Promise<SwarmTask[]> {\n const tasks: SwarmTask[] = [];\n let taskId = 0;\n\n // Task 1: Project overview research\n tasks.push({\n id: `task-${++taskId}`,\n type: 'research',\n agentType: 'researcher',\n description: 'Research and document project overview',\n prompt: buildProjectOverviewPrompt(services, existingDocs),\n outputPath: join(docsPath, 'README.md'),\n });\n\n // Task 2: Architecture documentation\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'architect',\n description: 'Document system architecture',\n prompt: buildArchitectureDocPrompt(services),\n outputPath: join(docsPath, 'concepts', 'architecture', 'system-overview.md'),\n });\n\n // Task 3: Per-service documentation\n for (const service of services) {\n // Service overview\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'coder',\n description: `Document ${service.name} service overview`,\n prompt: buildServiceDocPrompt(service),\n outputPath: join(docsPath, 'services', service.name, 'README.md'),\n });\n\n // Service API docs (if applicable)\n if (service.type === 'api' || service.type === 'backend') {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'coder',\n description: `Document ${service.name} API endpoints`,\n prompt: buildApiDocPrompt(service),\n outputPath: join(docsPath, 'services', service.name, 'api-reference.md'),\n });\n }\n\n // Service data models (if applicable)\n if (service.type === 'backend' || service.type === 'api') {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'analyst',\n description: `Document ${service.name} data models`,\n prompt: buildDataModelPrompt(service),\n outputPath: join(docsPath, 'services', service.name, 'data-models.md'),\n });\n }\n\n // Service components (if frontend)\n if (service.type === 'frontend' || service.type === 'admin') {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'coder',\n description: `Document ${service.name} components`,\n prompt: buildComponentDocPrompt(service),\n outputPath: join(docsPath, 'services', service.name, 'components.md'),\n });\n }\n }\n\n // Task 4: Integration documentation\n if (services.length > 1) {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'document',\n agentType: 'architect',\n description: 'Document service integrations',\n prompt: buildIntegrationDocPrompt(services),\n outputPath: join(docsPath, 'integrations', 'service-integration.md'),\n });\n }\n\n // Note: Development and infrastructure plans are generated separately in Phase 5 & 6\n // with detailed structured content, so we don't include them in swarm tasks\n\n // Task 5: SOP integration\n if (options.includeSops) {\n tasks.push({\n id: `task-${++taskId}`,\n type: 'sop',\n agentType: 'analyst',\n description: 'Analyze and integrate SOP compliance',\n prompt: buildSopAnalysisPrompt(services),\n outputPath: join(docsPath, 'standards', 'sop-compliance.md'),\n });\n }\n\n return tasks;\n}\n\n/**\n * Execute cultivation tasks using claude-flow swarm\n */\nasync function executeCultivationSwarm(\n tasks: SwarmTask[],\n result: CultivationResult,\n options: CultivationOptions\n): Promise<void> {\n const maxAgents = options.maxAgents || 4;\n\n // Group tasks by dependencies\n const independentTasks = tasks.filter(t => !t.dependencies || t.dependencies.length === 0);\n const dependentTasks = tasks.filter(t => t.dependencies && t.dependencies.length > 0);\n\n // Execute independent tasks in batches\n for (let i = 0; i < independentTasks.length; i += maxAgents) {\n const batch = independentTasks.slice(i, i + maxAgents);\n\n const batchResults = await Promise.allSettled(\n batch.map(task => executeSwarmTask(task, options))\n );\n\n for (let j = 0; j < batchResults.length; j++) {\n const task = batch[j];\n const taskResult = batchResults[j];\n\n if (taskResult.status === 'fulfilled' && taskResult.value.success) {\n if (task.outputPath) {\n result.documentsGenerated.push(task.outputPath);\n }\n } else {\n const error = taskResult.status === 'rejected'\n ? taskResult.reason\n : taskResult.value.error;\n result.errors.push(`Task ${task.id} failed: ${error}`);\n }\n }\n }\n\n // Execute dependent tasks sequentially\n for (const task of dependentTasks) {\n try {\n const taskResult = await executeSwarmTask(task, options);\n if (taskResult.success && task.outputPath) {\n result.documentsGenerated.push(task.outputPath);\n } else {\n result.errors.push(`Task ${task.id} failed: ${taskResult.error}`);\n }\n } catch (error) {\n result.errors.push(`Task ${task.id} failed: ${error}`);\n }\n }\n}\n\n/**\n * Execute a single swarm task\n */\nasync function executeSwarmTask(\n task: SwarmTask,\n options: CultivationOptions\n): Promise<{ success: boolean; output?: string; error?: string }> {\n return new Promise((resolve) => {\n // Use claude-flow agent run to execute the task\n // Syntax: claude-flow agent run <type> \"<prompt>\"\n const agentProcess = spawn('claude-flow', [\n 'agent',\n 'run',\n task.agentType,\n task.prompt.slice(0, 1000), // Truncate for CLI\n ], {\n shell: false,\n timeout: 120000,\n });\n\n let output = '';\n let errorOutput = '';\n\n agentProcess.stdout?.on('data', (data) => {\n output += data.toString();\n });\n\n agentProcess.stderr?.on('data', (data) => {\n errorOutput += data.toString();\n });\n\n agentProcess.on('close', (code) => {\n if (code === 0 || output.length > 0) {\n // Write output to file if path specified\n if (task.outputPath && output.length > 0) {\n try {\n const dir = dirname(task.outputPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n writeFileSync(task.outputPath, output);\n } catch (e) {\n // Fall back to template\n writeTemplateDoc(task);\n }\n } else {\n // Write template if no output\n writeTemplateDoc(task);\n }\n resolve({ success: true, output });\n } else {\n // Fall back to template generation\n writeTemplateDoc(task);\n resolve({ success: true, output: 'Generated from template' });\n }\n });\n\n agentProcess.on('error', () => {\n // Fall back to template generation\n writeTemplateDoc(task);\n resolve({ success: true, output: 'Generated from template (fallback)' });\n });\n\n // Timeout fallback\n setTimeout(() => {\n agentProcess.kill();\n writeTemplateDoc(task);\n resolve({ success: true, output: 'Generated from template (timeout)' });\n }, 60000);\n });\n}\n\n/**\n * Write template document when agent fails\n */\nfunction writeTemplateDoc(task: SwarmTask): void {\n if (!task.outputPath) return;\n\n const dir = dirname(task.outputPath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const title = basename(task.outputPath, '.md')\n .split('-')\n .map(w => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n\n const content = `---\ntitle: ${title}\ntype: ${task.type}\nstatus: draft\ncreated: ${new Date().toISOString().split('T')[0]}\ntags: [auto-generated, needs-review]\n---\n\n# ${title}\n\n${task.description}\n\n## Overview\n\n*This document was auto-generated and needs to be completed.*\n\n${task.prompt.split('\\n').slice(0, 10).join('\\n')}\n\n## Next Steps\n\n- [ ] Review and expand this document\n- [ ] Add specific implementation details\n- [ ] Link related documentation\n\n---\n> Auto-generated by kg-agent cultivate\n`;\n\n writeFileSync(task.outputPath, content);\n}\n\n// Prompt builders\nfunction buildProjectOverviewPrompt(services: ServiceAnalysis[], existingDocs: string[]): string {\n return `Analyze this project and create a comprehensive README.md.\n\nServices found: ${services.map(s => `${s.name} (${s.type})`).join(', ')}\nExisting docs: ${existingDocs.length} files\n\nCreate a project overview including:\n- Project purpose and goals\n- Architecture summary\n- Services overview\n- Getting started guide\n- Development setup\n`;\n}\n\nfunction buildArchitectureDocPrompt(services: ServiceAnalysis[]): string {\n const serviceInfo = services.map(s =>\n `- ${s.name}: ${s.type} service using ${s.languages.join(', ')} with ${s.frameworks.join(', ') || 'no specific framework'}`\n ).join('\\n');\n\n return `Document the system architecture for this multi-service application.\n\nServices:\n${serviceInfo}\n\nInclude:\n- High-level architecture diagram (mermaid)\n- Service responsibilities\n- Data flow between services\n- Technology stack\n- Scalability considerations\n`;\n}\n\nfunction buildServiceDocPrompt(service: ServiceAnalysis): string {\n return `Document the ${service.name} service.\n\nType: ${service.type}\nLanguages: ${service.languages.join(', ')}\nFrameworks: ${service.frameworks.join(', ') || 'None detected'}\nSource files: ${service.sourceFiles.length}\nExisting docs: ${service.existingDocs.length}\n\nCreate documentation including:\n- Service purpose and responsibilities\n- Key components/modules\n- Configuration options\n- Dependencies\n- Usage examples\n`;\n}\n\nfunction buildApiDocPrompt(service: ServiceAnalysis): string {\n return `Document the API endpoints for ${service.name}.\n\nAnalyze the source files and document:\n- Available endpoints (REST/GraphQL)\n- Request/response formats\n- Authentication requirements\n- Error handling\n- Rate limiting (if applicable)\n- Example requests/responses\n`;\n}\n\nfunction buildDataModelPrompt(service: ServiceAnalysis): string {\n return `Document the data models for ${service.name}.\n\nAnalyze the source files and document:\n- Database schemas\n- Entity relationships (ERD if applicable)\n- Data validation rules\n- Migrations strategy\n- Data access patterns\n`;\n}\n\nfunction buildComponentDocPrompt(service: ServiceAnalysis): string {\n return `Document the UI components for ${service.name}.\n\nFrameworks: ${service.frameworks.join(', ')}\n\nDocument:\n- Component hierarchy\n- Reusable components\n- State management\n- Styling approach\n- Component props/interfaces\n`;\n}\n\nfunction buildIntegrationDocPrompt(services: ServiceAnalysis[]): string {\n return `Document how the services integrate with each other.\n\nServices: ${services.map(s => s.name).join(', ')}\n\nDocument:\n- Service communication patterns\n- API contracts between services\n- Shared data models\n- Authentication flow across services\n- Error handling across services\n`;\n}\n\nfunction buildDevPlanPrompt(services: ServiceAnalysis[]): string {\n const serviceList = services.map(s => `- ${s.name} (${s.type}): ${s.sourceFiles.length} files`).join('\\n');\n\n return `Create a phased development plan for this project.\n\nServices to plan:\n${serviceList}\n\nCreate a plan with:\n1. Phase 1: Foundation (infrastructure, auth, core services)\n2. Phase 2: Core Features (main functionality per service)\n3. Phase 3: Integration (service communication, data flow)\n4. Phase 4: Polish (UI/UX, performance, testing)\n5. Phase 5: Deployment (staging, production, monitoring)\n\nFor each phase include:\n- Goals and deliverables\n- Tasks per service\n- Dependencies\n- Estimated effort\n- Acceptance criteria\n`;\n}\n\nfunction buildInfraPlanPrompt(services: ServiceAnalysis[]): string {\n return `Create infrastructure and deployment plan.\n\nServices: ${services.map(s => `${s.name} (${s.type})`).join(', ')}\n\nDocument:\n1. Development Environment\n - Local setup requirements\n - Docker compose configuration\n - Environment variables\n\n2. Staging Environment\n - Cloud provider recommendations\n - Service deployment configuration\n - Database setup\n - CI/CD pipeline\n\n3. Production Environment\n - High availability configuration\n - Scaling strategy\n - Monitoring and logging\n - Backup and disaster recovery\n - Security considerations\n`;\n}\n\nfunction buildSopAnalysisPrompt(services: ServiceAnalysis[]): string {\n return `Analyze project for SOP (Standard Operating Procedure) compliance.\n\nServices: ${services.map(s => s.name).join(', ')}\n\nCheck compliance with:\n- AI-SDLC SOPs for development practices\n- Documentation requirements\n- Testing requirements\n- Security requirements\n- Deployment requirements\n\nGenerate:\n- Compliance score per category\n- Gap analysis\n- Recommendations for improvement\n- Priority remediation items\n`;\n}\n\n/**\n * Generate development plan\n */\nasync function generateDevelopmentPlan(\n services: ServiceAnalysis[],\n docsPath: string,\n options: CultivationOptions\n): Promise<CultivationResult['developmentPlan']> {\n const phases: DevelopmentPhase[] = [\n {\n id: 'phase-1',\n name: 'Foundation',\n description: 'Set up infrastructure, authentication, and core services',\n priority: 'critical',\n estimatedEffort: '2-3 weeks',\n dependencies: [],\n services: services.map(s => s.name),\n tasks: [\n {\n id: 'task-1-1',\n title: 'Infrastructure Setup',\n description: 'Set up development, staging, and production environments',\n service: 'all',\n type: 'infrastructure',\n priority: 'critical',\n estimatedEffort: '3-5 days',\n dependencies: [],\n acceptance: ['Environments accessible', 'CI/CD pipeline working'],\n },\n {\n id: 'task-1-2',\n title: 'Authentication System',\n description: 'Implement authentication and authorization',\n service: services.find(s => s.type === 'backend' || s.type === 'api')?.name || 'backend',\n type: 'feature',\n priority: 'critical',\n estimatedEffort: '3-5 days',\n dependencies: ['task-1-1'],\n acceptance: ['User login/logout working', 'Role-based access control'],\n },\n ],\n deliverables: ['Working development environment', 'Authentication system', 'CI/CD pipeline'],\n },\n {\n id: 'phase-2',\n name: 'Core Features',\n description: 'Implement core functionality for each service',\n priority: 'high',\n estimatedEffort: '4-6 weeks',\n dependencies: ['phase-1'],\n services: services.map(s => s.name),\n tasks: services.map((s, i) => ({\n id: `task-2-${i + 1}`,\n title: `${s.name} Core Features`,\n description: `Implement core functionality for ${s.name} service`,\n service: s.name,\n type: 'feature' as const,\n priority: 'high' as const,\n estimatedEffort: '1-2 weeks',\n dependencies: ['phase-1'],\n acceptance: ['Core features working', 'Unit tests passing'],\n })),\n deliverables: services.map(s => `${s.name} core features complete`),\n },\n {\n id: 'phase-3',\n name: 'Integration',\n description: 'Connect services and implement data flow',\n priority: 'high',\n estimatedEffort: '2-3 weeks',\n dependencies: ['phase-2'],\n services: services.map(s => s.name),\n tasks: [\n {\n id: 'task-3-1',\n title: 'Service Integration',\n description: 'Connect all services and implement API contracts',\n service: 'all',\n type: 'feature',\n priority: 'high',\n estimatedEffort: '1-2 weeks',\n dependencies: ['phase-2'],\n acceptance: ['Services communicating', 'Data flow working'],\n },\n ],\n deliverables: ['Integrated system', 'End-to-end tests passing'],\n },\n {\n id: 'phase-4',\n name: 'Polish',\n description: 'UI/UX improvements, performance optimization, comprehensive testing',\n priority: 'medium',\n estimatedEffort: '2-3 weeks',\n dependencies: ['phase-3'],\n services: services.filter(s => s.type === 'frontend' || s.type === 'admin').map(s => s.name),\n tasks: [\n {\n id: 'task-4-1',\n title: 'UI/UX Polish',\n description: 'Improve user interface and experience',\n service: services.find(s => s.type === 'frontend')?.name || 'frontend',\n type: 'feature',\n priority: 'medium',\n estimatedEffort: '1 week',\n dependencies: ['phase-3'],\n acceptance: ['UI responsive', 'Accessibility standards met'],\n },\n {\n id: 'task-4-2',\n title: 'Performance Optimization',\n description: 'Optimize application performance',\n service: 'all',\n type: 'feature',\n priority: 'medium',\n estimatedEffort: '1 week',\n dependencies: ['phase-3'],\n acceptance: ['Load times < 3s', 'Performance benchmarks met'],\n },\n ],\n deliverables: ['Polished UI', 'Performance optimized', 'Comprehensive test coverage'],\n },\n {\n id: 'phase-5',\n name: 'Deployment',\n description: 'Deploy to staging and production',\n priority: 'high',\n estimatedEffort: '1-2 weeks',\n dependencies: ['phase-4'],\n services: services.map(s => s.name),\n tasks: [\n {\n id: 'task-5-1',\n title: 'Staging Deployment',\n description: 'Deploy to staging environment',\n service: 'all',\n type: 'deployment',\n priority: 'high',\n estimatedEffort: '2-3 days',\n dependencies: ['phase-4'],\n acceptance: ['Staging environment working', 'QA sign-off'],\n },\n {\n id: 'task-5-2',\n title: 'Production Deployment',\n description: 'Deploy to production environment',\n service: 'all',\n type: 'deployment',\n priority: 'high',\n estimatedEffort: '2-3 days',\n dependencies: ['task-5-1'],\n acceptance: ['Production live', 'Monitoring active'],\n },\n ],\n deliverables: ['Staging deployed', 'Production deployed', 'Monitoring configured'],\n },\n ];\n\n // Write development plan to docs\n const planPath = join(docsPath, 'planning', 'development-plan.md');\n const planDir = dirname(planPath);\n if (!existsSync(planDir)) {\n mkdirSync(planDir, { recursive: true });\n }\n\n const planContent = generateDevPlanMarkdown(phases, services);\n writeFileSync(planPath, planContent);\n\n return {\n phases,\n totalEstimate: '12-18 weeks',\n criticalPath: ['phase-1', 'phase-2', 'phase-3', 'phase-5'],\n };\n}\n\n/**\n * Generate development plan markdown\n */\nfunction generateDevPlanMarkdown(phases: DevelopmentPhase[], services: ServiceAnalysis[]): string {\n let md = `---\ntitle: Development Plan\ntype: planning\nstatus: active\ncreated: ${new Date().toISOString().split('T')[0]}\ntags: [planning, development, phases]\n---\n\n# Development Plan\n\n## Overview\n\nThis document outlines the phased development approach for building out the project.\n\n### Services\n\n${services.map(s => `- **${s.name}** (${s.type}): ${s.languages.join(', ')}`).join('\\n')}\n\n### Timeline\n\n| Phase | Name | Duration | Priority |\n|-------|------|----------|----------|\n${phases.map(p => `| ${p.id} | ${p.name} | ${p.estimatedEffort} | ${p.priority} |`).join('\\n')}\n\n---\n\n`;\n\n for (const phase of phases) {\n md += `## ${phase.name}\n\n**Priority:** ${phase.priority}\n**Estimated Effort:** ${phase.estimatedEffort}\n**Dependencies:** ${phase.dependencies.length > 0 ? phase.dependencies.join(', ') : 'None'}\n\n${phase.description}\n\n### Tasks\n\n${phase.tasks.map(t => `\n#### ${t.title}\n\n- **Service:** ${t.service}\n- **Type:** ${t.type}\n- **Priority:** ${t.priority}\n- **Effort:** ${t.estimatedEffort}\n- **Dependencies:** ${t.dependencies.length > 0 ? t.dependencies.join(', ') : 'None'}\n\n${t.description}\n\n**Acceptance Criteria:**\n${t.acceptance.map(a => `- [ ] ${a}`).join('\\n')}\n`).join('\\n')}\n\n### Deliverables\n\n${phase.deliverables.map(d => `- [ ] ${d}`).join('\\n')}\n\n---\n\n`;\n }\n\n md += `\n## Critical Path\n\nThe critical path for this project includes:\n${phases.filter(p => p.priority === 'critical' || p.priority === 'high').map(p => `1. **${p.name}** - ${p.description}`).join('\\n')}\n\n---\n> Auto-generated by kg-agent cultivate\n`;\n\n return md;\n}\n\n/**\n * Generate infrastructure plan\n */\nasync function generateInfrastructurePlan(\n services: ServiceAnalysis[],\n docsPath: string,\n options: CultivationOptions\n): Promise<CultivationResult['infrastructurePlan']> {\n const plan = {\n environments: ['development', 'staging', 'production'],\n services: {} as Record<string, string>,\n deployment: 'containerized',\n };\n\n for (const service of services) {\n plan.services[service.name] = service.type;\n }\n\n // Write infrastructure plan to docs\n const planPath = join(docsPath, 'planning', 'infrastructure-plan.md');\n const planDir = dirname(planPath);\n if (!existsSync(planDir)) {\n mkdirSync(planDir, { recursive: true });\n }\n\n const planContent = generateInfraPlanMarkdown(plan, services);\n writeFileSync(planPath, planContent);\n\n return plan;\n}\n\n/**\n * Generate infrastructure plan markdown\n */\nfunction generateInfraPlanMarkdown(\n plan: CultivationResult['infrastructurePlan'],\n services: ServiceAnalysis[]\n): string {\n return `---\ntitle: Infrastructure Plan\ntype: planning\nstatus: active\ncreated: ${new Date().toISOString().split('T')[0]}\ntags: [infrastructure, deployment, devops]\n---\n\n# Infrastructure Plan\n\n## Overview\n\nThis document outlines the infrastructure and deployment strategy for all environments.\n\n## Environments\n\n### Development Environment\n\n**Purpose:** Local development and testing\n\n**Components:**\n- Docker Compose for local services\n- Local database instances\n- Mock external services\n\n**Setup:**\n\\`\\`\\`bash\n# Clone repository\ngit clone <repo-url>\ncd <project>\n\n# Start development environment\ndocker-compose up -d\n\n# Install dependencies\nnpm install # or appropriate package manager\n\\`\\`\\`\n\n### Staging Environment\n\n**Purpose:** Pre-production testing and QA\n\n**Infrastructure:**\n- Cloud provider: AWS/GCP/Azure (TBD)\n- Container orchestration: Kubernetes/ECS\n- Database: Managed database service\n\n**Services:**\n${services.map(s => `- **${s.name}**: ${s.type} service`).join('\\n')}\n\n**CI/CD Pipeline:**\n1. Push to staging branch\n2. Run automated tests\n3. Build container images\n4. Deploy to staging cluster\n5. Run integration tests\n\n### Production Environment\n\n**Purpose:** Live production system\n\n**Infrastructure:**\n- High-availability configuration\n- Auto-scaling enabled\n- CDN for static assets\n- Managed database with read replicas\n\n**Monitoring:**\n- Application performance monitoring\n- Log aggregation\n- Alerting and on-call rotation\n\n## Service Architecture\n\n\\`\\`\\`mermaid\ngraph TB\n subgraph Frontend\n ${services.filter(s => s.type === 'frontend' || s.type === 'admin').map(s => `${s.name}[${s.name}]`).join('\\n ')}\n end\n\n subgraph Backend\n ${services.filter(s => s.type === 'backend' || s.type === 'api').map(s => `${s.name}[${s.name}]`).join('\\n ')}\n end\n\n subgraph Data\n DB[(Database)]\n Cache[(Cache)]\n end\n\n Frontend --> Backend\n Backend --> Data\n\\`\\`\\`\n\n## Deployment Strategy\n\n### Development\n- Local Docker Compose\n- Hot reloading enabled\n- Debug logging\n\n### Staging\n- Kubernetes deployment\n- Automated from CI/CD\n- Mirrors production configuration\n\n### Production\n- Blue-green deployment\n- Automated rollback on failures\n- Canary releases for major changes\n\n## Security Considerations\n\n- [ ] SSL/TLS certificates\n- [ ] API authentication\n- [ ] Secret management (Vault/AWS Secrets Manager)\n- [ ] Network security groups\n- [ ] WAF configuration\n\n## Backup and Disaster Recovery\n\n- Database backups: Daily automated backups\n- Retention: 30 days\n- RTO: 4 hours\n- RPO: 1 hour\n\n---\n> Auto-generated by kg-agent cultivate\n`;\n}\n\n/**\n * Analyze SOP compliance\n */\nasync function analyzeSopCompliance(\n projectRoot: string,\n docsPath: string,\n services: ServiceAnalysis[]\n): Promise<CultivationResult['sopCompliance']> {\n // Basic compliance analysis\n const compliance = {\n score: 0,\n gaps: [] as string[],\n recommendations: [] as string[],\n };\n\n let totalChecks = 0;\n let passedChecks = 0;\n\n // Check for required documentation\n const requiredDocs = [\n 'README.md',\n 'concepts/architecture',\n 'guides/getting-started',\n 'standards',\n ];\n\n for (const doc of requiredDocs) {\n totalChecks++;\n if (existsSync(join(docsPath, doc))) {\n passedChecks++;\n } else {\n compliance.gaps.push(`Missing documentation: ${doc}`);\n }\n }\n\n // Check for service documentation\n for (const service of services) {\n totalChecks++;\n const serviceDoc = join(docsPath, 'services', service.name, 'README.md');\n if (existsSync(serviceDoc)) {\n passedChecks++;\n } else {\n compliance.gaps.push(`Missing service documentation: ${service.name}`);\n }\n }\n\n // Calculate score\n compliance.score = totalChecks > 0 ? Math.round((passedChecks / totalChecks) * 100) : 0;\n\n // Generate recommendations\n if (compliance.gaps.length > 0) {\n compliance.recommendations.push('Complete missing documentation items');\n }\n if (!existsSync(join(docsPath, 'standards'))) {\n compliance.recommendations.push('Add coding standards documentation');\n }\n if (!existsSync(join(docsPath, 'guides', 'getting-started'))) {\n compliance.recommendations.push('Add getting started guide for new developers');\n }\n\n // Write SOP compliance report\n const reportPath = join(docsPath, 'standards', 'sop-compliance.md');\n const reportDir = dirname(reportPath);\n if (!existsSync(reportDir)) {\n mkdirSync(reportDir, { recursive: true });\n }\n\n const reportContent = `---\ntitle: SOP Compliance Report\ntype: standard\nstatus: active\ncreated: ${new Date().toISOString().split('T')[0]}\ntags: [sop, compliance, standards]\n---\n\n# SOP Compliance Report\n\n## Score: ${compliance.score}%\n\n## Gaps\n\n${compliance.gaps.length > 0 ? compliance.gaps.map(g => `- ${g}`).join('\\n') : 'No gaps identified.'}\n\n## Recommendations\n\n${compliance.recommendations.length > 0 ? compliance.recommendations.map(r => `- ${r}`).join('\\n') : 'No recommendations at this time.'}\n\n---\n> Auto-generated by kg-agent cultivate\n`;\n\n writeFileSync(reportPath, reportContent);\n\n return compliance;\n}\n"],"names":[],"mappings":"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"}
@@ -396,7 +396,7 @@ async function checkClaudeFlowAvailable() {
396
396
  }
397
397
  async function executeWithClaudeFlow(task, context, verbose) {
398
398
  return new Promise((resolve, reject) => {
399
- const agentCmd = `claude-flow sparc run ${task.agentType} "${task.prompt.replace(/"/g, '\\"')}"`;
399
+ const agentCmd = `claude-flow sparc ${task.agentType} "${task.prompt.replace(/"/g, '\\"')}"`;
400
400
  if (verbose) {
401
401
  console.log(`
402
402
  Spawning ${task.agentType} agent for ${task.outputFile}...`);
@@ -1 +1 @@
1
- {"version":3,"file":"doc-generator-agents.js","sources":["../../src/generators/doc-generator-agents.ts"],"sourcesContent":["/**\n * Agent-Driven Document Generator\n *\n * Spawns expert agents from claude-flow to analyze existing code and\n * documentation, then generates appropriate documents for each directory.\n */\n\nimport { existsSync, readFileSync, writeFileSync, readdirSync, statSync, mkdirSync, copyFileSync } from 'fs';\nimport { join, basename, extname, relative, dirname } from 'path';\nimport fg from 'fast-glob';\nimport { spawn } from 'child_process';\n\n/**\n * Service documentation found in src/{service}/docs directories\n */\ninterface ServiceDoc {\n serviceName: string;\n sourcePath: string;\n fileName: string;\n relativePath: string;\n}\n\n/**\n * Document generation context\n */\nexport interface GenerationContext {\n projectRoot: string;\n docsPath: string;\n projectName: string;\n languages: string[];\n frameworks: string[];\n existingDocs: string[];\n sourceFiles: string[];\n serviceDocs: ServiceDoc[];\n}\n\n/**\n * Generation result for a single document\n */\nexport interface GeneratedDoc {\n path: string;\n title: string;\n type: string;\n generated: boolean;\n error?: string;\n}\n\n/**\n * Overall generation result\n */\nexport interface AgentGenerationResult {\n success: boolean;\n documentsGenerated: GeneratedDoc[];\n agentsSpawned: number;\n errors: string[];\n}\n\n/**\n * Agent task definition\n */\ninterface AgentTask {\n directory: string;\n type: 'concept' | 'component' | 'service' | 'feature' | 'integration' | 'standard' | 'guide' | 'reference';\n agentType: 'researcher' | 'coder' | 'analyst';\n prompt: string;\n outputFile: string;\n}\n\n/**\n * Analyze project and generate documents using expert agents\n */\nexport async function generateDocsWithAgents(\n projectRoot: string,\n docsPath: string,\n options: {\n parallel?: boolean;\n dryRun?: boolean;\n verbose?: boolean;\n force?: boolean;\n } = {}\n): Promise<AgentGenerationResult> {\n const result: AgentGenerationResult = {\n success: true,\n documentsGenerated: [],\n agentsSpawned: 0,\n errors: [],\n };\n\n try {\n // Build context by analyzing the project\n const context = await buildGenerationContext(projectRoot, docsPath);\n\n // Determine what documents should be generated\n const tasks = await planDocumentGeneration(context, options.force);\n\n if (options.dryRun) {\n console.log('\\n[Dry Run] Would generate the following documents:');\n for (const task of tasks) {\n console.log(` - ${task.outputFile} (${task.agentType} agent)`);\n }\n if (context.serviceDocs.length > 0) {\n console.log('\\n[Dry Run] Would copy service docs:');\n for (const doc of context.serviceDocs) {\n const targetPath = `services/${doc.serviceName}/${doc.relativePath}`;\n console.log(` - ${doc.sourcePath} → ${targetPath}`);\n }\n }\n return result;\n }\n\n // Copy service docs from src/{service}/docs to main docs directory\n const copiedDocs = copyServiceDocs(context, options.force);\n\n // Execute tasks (parallel or sequential)\n if (options.parallel) {\n const results = await Promise.allSettled(\n tasks.map(task => executeAgentTask(task, context, options.verbose))\n );\n\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n result.agentsSpawned++;\n\n if (r.status === 'fulfilled') {\n result.documentsGenerated.push(r.value);\n } else {\n result.errors.push(`Failed: ${tasks[i].outputFile} - ${r.reason}`);\n result.documentsGenerated.push({\n path: tasks[i].outputFile,\n title: basename(tasks[i].outputFile, '.md'),\n type: tasks[i].type,\n generated: false,\n error: String(r.reason),\n });\n }\n }\n } else {\n // Sequential execution\n for (const task of tasks) {\n result.agentsSpawned++;\n\n try {\n const doc = await executeAgentTask(task, context, options.verbose);\n result.documentsGenerated.push(doc);\n } catch (error) {\n result.errors.push(`Failed: ${task.outputFile} - ${error}`);\n result.documentsGenerated.push({\n path: task.outputFile,\n title: basename(task.outputFile, '.md'),\n type: task.type,\n generated: false,\n error: String(error),\n });\n }\n }\n }\n\n // Add copied service docs to result\n result.documentsGenerated.push(...copiedDocs);\n\n result.success = result.errors.length === 0;\n } catch (error) {\n result.success = false;\n result.errors.push(`Generation failed: ${error}`);\n }\n\n return result;\n}\n\n/**\n * Copy service docs from src/{service}/docs to main docs directory\n */\nfunction copyServiceDocs(context: GenerationContext, force?: boolean): GeneratedDoc[] {\n const { docsPath, serviceDocs } = context;\n const copied: GeneratedDoc[] = [];\n\n for (const doc of serviceDocs) {\n const targetDir = join(docsPath, 'services', doc.serviceName);\n const targetPath = join(targetDir, doc.relativePath);\n const relativeTarget = `services/${doc.serviceName}/${doc.relativePath}`;\n\n // Skip if target exists and not forcing\n if (!force && existsSync(targetPath)) {\n continue;\n }\n\n try {\n // Create target directory if needed\n const targetFileDir = dirname(targetPath);\n if (!existsSync(targetFileDir)) {\n mkdirSync(targetFileDir, { recursive: true });\n }\n\n // Copy the file\n copyFileSync(doc.sourcePath, targetPath);\n\n copied.push({\n path: relativeTarget,\n title: doc.fileName.replace('.md', ''),\n type: 'service',\n generated: true,\n });\n } catch (error) {\n copied.push({\n path: relativeTarget,\n title: doc.fileName.replace('.md', ''),\n type: 'service',\n generated: false,\n error: String(error),\n });\n }\n }\n\n return copied;\n}\n\n/**\n * Build context by analyzing the project\n */\nasync function buildGenerationContext(\n projectRoot: string,\n docsPath: string\n): Promise<GenerationContext> {\n const context: GenerationContext = {\n projectRoot,\n docsPath,\n projectName: basename(projectRoot),\n languages: [],\n frameworks: [],\n existingDocs: [],\n sourceFiles: [],\n serviceDocs: [],\n };\n\n // Get project name from package.json\n const pkgPath = join(projectRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n context.projectName = pkg.name?.replace(/^@[^/]+\\//, '') || context.projectName;\n\n // Detect frameworks from dependencies\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n if (deps.react) context.frameworks.push('React');\n if (deps.next) context.frameworks.push('Next.js');\n if (deps.vue) context.frameworks.push('Vue');\n if (deps.express) context.frameworks.push('Express');\n if (deps.fastify) context.frameworks.push('Fastify');\n if (deps['@prisma/client'] || deps.prisma) context.frameworks.push('Prisma');\n } catch {\n // Ignore parse errors\n }\n }\n\n // Detect languages\n if (existsSync(join(projectRoot, 'tsconfig.json'))) {\n context.languages.push('TypeScript');\n }\n if (existsSync(join(projectRoot, 'package.json'))) {\n context.languages.push('JavaScript');\n }\n\n // Detect Python - check multiple locations for requirements\n const pythonConfigPaths = [\n join(projectRoot, 'requirements.txt'),\n join(projectRoot, 'pyproject.toml'),\n join(projectRoot, 'src/backend/requirements.txt'),\n join(projectRoot, 'backend/requirements.txt'),\n join(projectRoot, 'src/requirements.txt'),\n ];\n const foundPythonConfig = pythonConfigPaths.find(p => existsSync(p));\n\n // Also detect Python if we find .py files later in source scan\n // For now, check if there's a Python config file\n if (foundPythonConfig) {\n context.languages.push('Python');\n\n // Detect Python frameworks from requirements.txt or pyproject.toml\n try {\n let reqContent = readFileSync(foundPythonConfig, 'utf-8').toLowerCase();\n // Also check pyproject.toml if we found requirements.txt\n if (foundPythonConfig.includes('requirements.txt')) {\n const pyprojectPath = join(projectRoot, 'pyproject.toml');\n if (existsSync(pyprojectPath)) {\n reqContent += readFileSync(pyprojectPath, 'utf-8').toLowerCase();\n }\n }\n if (reqContent.includes('fastapi')) context.frameworks.push('FastAPI');\n if (reqContent.includes('flask')) context.frameworks.push('Flask');\n if (reqContent.includes('django')) context.frameworks.push('Django');\n if (reqContent.includes('sqlalchemy')) context.frameworks.push('SQLAlchemy');\n if (reqContent.includes('pydantic')) context.frameworks.push('Pydantic');\n if (reqContent.includes('alembic')) context.frameworks.push('Alembic');\n } catch {\n // Ignore read errors\n }\n }\n if (existsSync(join(projectRoot, 'Cargo.toml'))) {\n context.languages.push('Rust');\n }\n if (existsSync(join(projectRoot, 'go.mod'))) {\n context.languages.push('Go');\n }\n\n // Find existing docs\n const existingDocs = await fg('**/*.md', {\n cwd: docsPath,\n ignore: ['node_modules/**', '.git/**', '_templates/**'],\n });\n context.existingDocs = existingDocs;\n\n // Find source files\n const sourceFiles = await fg('**/*.{ts,tsx,js,jsx,py,rs,go}', {\n cwd: projectRoot,\n ignore: ['node_modules/**', '.git/**', 'dist/**', 'build/**', docsPath + '/**'],\n dot: true,\n });\n context.sourceFiles = sourceFiles;\n\n // Detect Python from .py files if not already detected\n if (!context.languages.includes('Python') && sourceFiles.some(f => f.endsWith('.py'))) {\n context.languages.push('Python');\n }\n\n // Scan for service docs in src/{service}/docs directories\n const serviceDocs: ServiceDoc[] = [];\n const srcDir = join(projectRoot, 'src');\n if (existsSync(srcDir)) {\n try {\n const srcEntries = readdirSync(srcDir, { withFileTypes: true });\n for (const entry of srcEntries) {\n if (entry.isDirectory()) {\n const serviceDocsDir = join(srcDir, entry.name, 'docs');\n if (existsSync(serviceDocsDir)) {\n // Find all markdown files in this service's docs directory\n const docsFiles = await fg('**/*.md', {\n cwd: serviceDocsDir,\n ignore: ['node_modules/**', '.git/**'],\n });\n for (const docFile of docsFiles) {\n serviceDocs.push({\n serviceName: entry.name,\n sourcePath: join(serviceDocsDir, docFile),\n fileName: basename(docFile),\n relativePath: docFile,\n });\n }\n }\n }\n }\n } catch {\n // Ignore errors reading src directory\n }\n }\n context.serviceDocs = serviceDocs;\n\n return context;\n}\n\n/**\n * Plan what documents should be generated based on context\n */\nasync function planDocumentGeneration(context: GenerationContext, force?: boolean): Promise<AgentTask[]> {\n const tasks: AgentTask[] = [];\n const { projectRoot, docsPath, sourceFiles, frameworks } = context;\n\n // Helper to check if doc already exists (returns false if force is true)\n const docExists = (relativePath: string) => {\n if (force) return false; // Force regeneration\n return existsSync(join(docsPath, relativePath));\n };\n\n // Analyze source structure to determine what docs to generate\n const srcDirs = new Set<string>();\n const componentFiles: string[] = [];\n const serviceFiles: string[] = [];\n const utilityFiles: string[] = [];\n const backendFiles: string[] = [];\n const modelFiles: string[] = [];\n const frontendFiles: string[] = [];\n\n for (const file of sourceFiles) {\n const dir = file.split('/')[0];\n srcDirs.add(dir);\n const fileLower = file.toLowerCase();\n\n // Categorize files (improved patterns for Python and TypeScript)\n if (fileLower.includes('component') || fileLower.includes('/ui/') || fileLower.includes('/views/')) {\n componentFiles.push(file);\n }\n if (fileLower.includes('service') || fileLower.includes('/api/') || fileLower.includes('routes') || fileLower.includes('endpoints')) {\n serviceFiles.push(file);\n }\n if (fileLower.includes('util') || fileLower.includes('helper') || fileLower.includes('/lib/') || fileLower.includes('common')) {\n utilityFiles.push(file);\n }\n if (fileLower.includes('backend') || fileLower.includes('server') || fileLower.includes('app/')) {\n backendFiles.push(file);\n }\n if (fileLower.includes('model') || fileLower.includes('schema') || fileLower.includes('entities')) {\n modelFiles.push(file);\n }\n if (fileLower.includes('frontend') || fileLower.includes('client') || fileLower.includes('pages')) {\n frontendFiles.push(file);\n }\n }\n\n // If no service files found but backend files exist, use backend files\n if (serviceFiles.length === 0 && backendFiles.length > 0) {\n serviceFiles.push(...backendFiles);\n }\n\n // Generate architecture overview if source has modules with files\n // Threshold: at least 1 directory with 3+ source files\n if (srcDirs.size >= 1 && sourceFiles.length >= 3 && !docExists('concepts/architecture/overview.md')) {\n tasks.push({\n directory: 'concepts/architecture',\n type: 'concept',\n agentType: 'analyst',\n prompt: buildArchitecturePrompt(context, Array.from(srcDirs)),\n outputFile: 'concepts/architecture/overview.md',\n });\n }\n\n // Generate component docs for detected UI frameworks\n if (frameworks.includes('React') || frameworks.includes('Vue')) {\n if (componentFiles.length > 0 && !docExists('components/ui/overview.md')) {\n tasks.push({\n directory: 'components/ui',\n type: 'component',\n agentType: 'coder',\n prompt: buildComponentPrompt(context, componentFiles.slice(0, 10)),\n outputFile: 'components/ui/overview.md',\n });\n }\n }\n\n // Generate service docs if API files detected\n if (serviceFiles.length > 0 && !docExists('services/api/overview.md')) {\n tasks.push({\n directory: 'services/api',\n type: 'service',\n agentType: 'coder',\n prompt: buildServicePrompt(context, serviceFiles.slice(0, 10)),\n outputFile: 'services/api/overview.md',\n });\n }\n\n // Generate utility docs\n if (utilityFiles.length > 0 && !docExists('components/utilities/overview.md')) {\n tasks.push({\n directory: 'components/utilities',\n type: 'component',\n agentType: 'coder',\n prompt: buildUtilityPrompt(context, utilityFiles.slice(0, 10)),\n outputFile: 'components/utilities/overview.md',\n });\n }\n\n // Generate getting started guide\n if (!docExists('guides/getting-started/quick-start.md')) {\n tasks.push({\n directory: 'guides/getting-started',\n type: 'guide',\n agentType: 'researcher',\n prompt: buildGettingStartedPrompt(context),\n outputFile: 'guides/getting-started/quick-start.md',\n });\n }\n\n // Generate standards/coding guide if tsconfig or eslint exists\n const hasLinting = existsSync(join(projectRoot, '.eslintrc.json')) ||\n existsSync(join(projectRoot, '.eslintrc.js')) ||\n existsSync(join(projectRoot, 'eslint.config.js'));\n const hasTypescript = existsSync(join(projectRoot, 'tsconfig.json'));\n\n if ((hasLinting || hasTypescript) && !docExists('standards/coding-standards/guide.md')) {\n tasks.push({\n directory: 'standards/coding-standards',\n type: 'standard',\n agentType: 'analyst',\n prompt: buildCodingStandardsPrompt(context, hasTypescript, hasLinting),\n outputFile: 'standards/coding-standards/guide.md',\n });\n }\n\n // Generate integration docs for detected databases/services\n if (frameworks.includes('Prisma') && !docExists('integrations/databases/prisma.md')) {\n tasks.push({\n directory: 'integrations/databases',\n type: 'integration',\n agentType: 'coder',\n prompt: buildPrismaPrompt(context),\n outputFile: 'integrations/databases/prisma.md',\n });\n }\n\n // Generate SQLAlchemy docs for Python projects\n if (frameworks.includes('SQLAlchemy') && !docExists('integrations/databases/sqlalchemy.md')) {\n tasks.push({\n directory: 'integrations/databases',\n type: 'integration',\n agentType: 'coder',\n prompt: buildSQLAlchemyPrompt(context, modelFiles),\n outputFile: 'integrations/databases/sqlalchemy.md',\n });\n }\n\n // Generate FastAPI docs\n if (frameworks.includes('FastAPI') && !docExists('services/api/fastapi.md')) {\n tasks.push({\n directory: 'services/api',\n type: 'service',\n agentType: 'coder',\n prompt: buildFastAPIPrompt(context, serviceFiles),\n outputFile: 'services/api/fastapi.md',\n });\n }\n\n // Generate Flask docs\n if (frameworks.includes('Flask') && !docExists('services/api/flask.md')) {\n tasks.push({\n directory: 'services/api',\n type: 'service',\n agentType: 'coder',\n prompt: buildFlaskPrompt(context, serviceFiles),\n outputFile: 'services/api/flask.md',\n });\n }\n\n return tasks;\n}\n\n/**\n * Execute a single agent task\n */\nasync function executeAgentTask(\n task: AgentTask,\n context: GenerationContext,\n verbose?: boolean\n): Promise<GeneratedDoc> {\n const { docsPath } = context;\n const outputPath = join(docsPath, task.outputFile);\n\n // Try to use claude-flow if available, otherwise generate locally\n const hasClaudeFlow = await checkClaudeFlowAvailable();\n\n let content: string;\n\n if (hasClaudeFlow) {\n content = await executeWithClaudeFlow(task, context, verbose);\n } else {\n // Fallback to local template generation\n content = generateLocalTemplate(task, context);\n }\n\n // Write the file\n writeFileSync(outputPath, content, 'utf-8');\n\n return {\n path: task.outputFile,\n title: extractTitle(content) || basename(task.outputFile, '.md'),\n type: task.type,\n generated: true,\n };\n}\n\n/**\n * Check if claude-flow is available\n */\nasync function checkClaudeFlowAvailable(): Promise<boolean> {\n // First try direct command (globally installed claude-flow)\n const tryDirect = new Promise<boolean>((resolve) => {\n const proc = spawn('claude-flow', ['--version'], {\n stdio: 'pipe',\n shell: false,\n });\n\n proc.on('close', (code) => resolve(code === 0));\n proc.on('error', () => resolve(false));\n setTimeout(() => { proc.kill(); resolve(false); }, 5000);\n });\n\n if (await tryDirect) return true;\n\n // Fall back to npx\n return new Promise((resolve) => {\n const proc = spawn('npx', ['claude-flow', '--version'], {\n stdio: 'pipe',\n shell: false,\n });\n\n proc.on('close', (code) => resolve(code === 0));\n proc.on('error', () => resolve(false));\n setTimeout(() => { proc.kill(); resolve(false); }, 30000);\n });\n}\n\n/**\n * Execute task using claude-flow expert agents\n */\nasync function executeWithClaudeFlow(\n task: AgentTask,\n context: GenerationContext,\n verbose?: boolean\n): Promise<string> {\n return new Promise((resolve, reject) => {\n const agentCmd = `claude-flow sparc run ${task.agentType} \"${task.prompt.replace(/\"/g, '\\\\\"')}\"`;\n\n if (verbose) {\n console.log(`\\n Spawning ${task.agentType} agent for ${task.outputFile}...`);\n }\n\n const proc = spawn(agentCmd, {\n shell: true,\n cwd: context.projectRoot,\n stdio: verbose ? 'inherit' : 'pipe',\n });\n\n let output = '';\n\n if (proc.stdout) {\n proc.stdout.on('data', (data) => {\n output += data.toString();\n });\n }\n\n proc.on('close', (code) => {\n if (code === 0 && output) {\n resolve(output);\n } else {\n // Fallback to local generation\n resolve(generateLocalTemplate(task, context));\n }\n });\n\n proc.on('error', () => {\n resolve(generateLocalTemplate(task, context));\n });\n\n // Timeout after 60 seconds\n setTimeout(() => {\n proc.kill();\n resolve(generateLocalTemplate(task, context));\n }, 60000);\n });\n}\n\n/**\n * Generate document using local templates (fallback)\n */\nfunction generateLocalTemplate(task: AgentTask, context: GenerationContext): string {\n const date = new Date().toISOString().split('T')[0];\n const { projectName } = context;\n\n const templates: Record<string, string> = {\n 'concepts/architecture/overview.md': `---\ntitle: Architecture Overview\ntype: concept\nstatus: active\ntags: [architecture, overview]\ncreated: ${date}\n---\n\n# Architecture Overview\n\nHigh-level architecture documentation for ${projectName}.\n\n## System Overview\n\nThis document describes the overall architecture and design patterns used in ${projectName}.\n\n## Module Structure\n\n${context.sourceFiles.slice(0, 20).map(f => `- \\`${f}\\``).join('\\n')}\n\n## Key Patterns\n\n*Document key architectural patterns here*\n\n## Design Decisions\n\n*Add Architecture Decision Records (ADRs)*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'components/ui/overview.md': `---\ntitle: UI Components Overview\ntype: technical\nstatus: active\ntags: [components, ui]\ncreated: ${date}\n---\n\n# UI Components\n\nUser interface components for ${projectName}.\n\n## Component Library\n\n${context.frameworks.includes('React') ? 'Built with **React**.' : ''}\n${context.frameworks.includes('Vue') ? 'Built with **Vue**.' : ''}\n\n## Available Components\n\n*Document available UI components*\n\n## Usage Patterns\n\n*Add component usage examples*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'services/api/overview.md': `---\ntitle: API Services Overview\ntype: service\nstatus: active\ntags: [api, services]\ncreated: ${date}\n---\n\n# API Services\n\nBackend API services for ${projectName}.\n\n## Endpoints\n\n*Document API endpoints*\n\n## Authentication\n\n*Document authentication flow*\n\n## Error Handling\n\n*Document error handling patterns*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'components/utilities/overview.md': `---\ntitle: Utilities Overview\ntype: technical\nstatus: active\ntags: [utilities, helpers]\ncreated: ${date}\n---\n\n# Utility Functions\n\nReusable utilities and helpers for ${projectName}.\n\n## Available Utilities\n\n*Document available utilities*\n\n## Usage Examples\n\n*Add code examples*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'guides/getting-started/quick-start.md': `---\ntitle: Quick Start Guide\ntype: guide\nstatus: active\ntags: [guide, getting-started]\ncreated: ${date}\n---\n\n# Quick Start\n\nGet up and running with ${projectName}.\n\n## Prerequisites\n\n${context.languages.map(l => `- ${l}`).join('\\n')}\n\n## Installation\n\n\\`\\`\\`bash\nnpm install\n\\`\\`\\`\n\n## Basic Usage\n\n*Add basic usage instructions*\n\n## Next Steps\n\n- [[concepts/architecture/overview|Architecture Overview]]\n- [[guides/_MOC|More Guides]]\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'standards/coding-standards/guide.md': `---\ntitle: Coding Standards\ntype: standard\nstatus: active\ntags: [standards, coding]\ncreated: ${date}\n---\n\n# Coding Standards\n\nCode style and conventions for ${projectName}.\n\n## Language Standards\n\n${context.languages.map(l => `### ${l}\\n\\n*Add ${l} specific standards*`).join('\\n\\n')}\n\n## Linting Configuration\n\n*Document ESLint/Prettier setup*\n\n## Best Practices\n\n*Add coding best practices*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'integrations/databases/prisma.md': `---\ntitle: Prisma Integration\ntype: integration\nstatus: active\ntags: [prisma, database, orm]\ncreated: ${date}\n---\n\n# Prisma Integration\n\nDatabase ORM configuration for ${projectName}.\n\n## Schema Location\n\n\\`prisma/schema.prisma\\`\n\n## Models\n\n*Document database models*\n\n## Migrations\n\n\\`\\`\\`bash\nnpx prisma migrate dev\n\\`\\`\\`\n\n## Client Usage\n\n*Add Prisma client usage examples*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'integrations/databases/sqlalchemy.md': `---\ntitle: SQLAlchemy Integration\ntype: integration\nstatus: active\ntags: [sqlalchemy, database, orm, python]\ncreated: ${date}\n---\n\n# SQLAlchemy Integration\n\nDatabase ORM configuration for ${projectName}.\n\n## Models\n\n*Document your SQLAlchemy models*\n\n## Database Connection\n\n\\`\\`\\`python\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import sessionmaker\n\nengine = create_engine(DATABASE_URL)\nSession = sessionmaker(bind=engine)\n\\`\\`\\`\n\n## Migrations (Alembic)\n\n\\`\\`\\`bash\nalembic upgrade head\n\\`\\`\\`\n\n## Query Examples\n\n*Add common query patterns*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'services/api/fastapi.md': `---\ntitle: FastAPI Service\ntype: service\nstatus: active\ntags: [fastapi, api, python]\ncreated: ${date}\n---\n\n# FastAPI Service\n\nAPI service documentation for ${projectName}.\n\n## Running the Server\n\n\\`\\`\\`bash\nuvicorn main:app --reload\n\\`\\`\\`\n\n## API Endpoints\n\n*Document your API endpoints*\n\n## Authentication\n\n*Document authentication flow*\n\n## Request/Response Schemas\n\n*Document Pydantic models*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'services/api/flask.md': `---\ntitle: Flask Service\ntype: service\nstatus: active\ntags: [flask, api, python]\ncreated: ${date}\n---\n\n# Flask Service\n\nAPI service documentation for ${projectName}.\n\n## Running the Server\n\n\\`\\`\\`bash\nflask run\n\\`\\`\\`\n\n## Routes\n\n*Document your Flask routes*\n\n## Blueprints\n\n*Document blueprints structure*\n\n## Error Handling\n\n*Document error handling patterns*\n\n---\n> Auto-generated by kg-agent\n`,\n };\n\n return templates[task.outputFile] || generateGenericTemplate(task, context, date);\n}\n\n/**\n * Generate a generic template for unknown task types\n */\nfunction generateGenericTemplate(\n task: AgentTask,\n context: GenerationContext,\n date: string\n): string {\n const title = basename(task.outputFile, '.md')\n .split('-')\n .map(w => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n\n return `---\ntitle: ${title}\ntype: ${task.type}\nstatus: draft\ntags: [${task.type}]\ncreated: ${date}\n---\n\n# ${title}\n\nDocumentation for ${context.projectName}.\n\n## Overview\n\n*Add overview content*\n\n## Details\n\n*Add detailed documentation*\n\n---\n> Auto-generated by kg-agent\n`;\n}\n\n/**\n * Extract title from markdown content\n */\nfunction extractTitle(content: string): string | null {\n const match = content.match(/^#\\s+(.+)$/m);\n return match ? match[1] : null;\n}\n\n// Prompt builders\n\nfunction buildArchitecturePrompt(context: GenerationContext, dirs: string[]): string {\n return `Analyze the architecture of ${context.projectName}.\nModules: ${dirs.join(', ')}.\nLanguages: ${context.languages.join(', ')}.\nGenerate an Architecture Overview markdown document with system design, patterns, and key decisions.`;\n}\n\nfunction buildComponentPrompt(context: GenerationContext, files: string[]): string {\n return `Document the UI components in ${context.projectName}.\nFrameworks: ${context.frameworks.join(', ')}.\nComponent files: ${files.join(', ')}.\nGenerate a Components Overview markdown document.`;\n}\n\nfunction buildServicePrompt(context: GenerationContext, files: string[]): string {\n return `Document the API services in ${context.projectName}.\nService files: ${files.join(', ')}.\nGenerate an API Services Overview markdown document with endpoints and patterns.`;\n}\n\nfunction buildUtilityPrompt(context: GenerationContext, files: string[]): string {\n return `Document utility functions in ${context.projectName}.\nUtility files: ${files.join(', ')}.\nGenerate a Utilities Overview markdown document.`;\n}\n\nfunction buildGettingStartedPrompt(context: GenerationContext): string {\n return `Create a Quick Start guide for ${context.projectName}.\nLanguages: ${context.languages.join(', ')}.\nFrameworks: ${context.frameworks.join(', ')}.\nGenerate a Getting Started guide with installation and basic usage.`;\n}\n\nfunction buildCodingStandardsPrompt(\n context: GenerationContext,\n hasTypescript: boolean,\n hasLinting: boolean\n): string {\n return `Document coding standards for ${context.projectName}.\nTypeScript: ${hasTypescript ? 'yes' : 'no'}.\nESLint: ${hasLinting ? 'yes' : 'no'}.\nGenerate a Coding Standards guide with style rules and best practices.`;\n}\n\nfunction buildPrismaPrompt(context: GenerationContext): string {\n return `Document Prisma database integration for ${context.projectName}.\nGenerate integration documentation with schema, models, and usage patterns.`;\n}\n\nfunction buildSQLAlchemyPrompt(context: GenerationContext, modelFiles: string[]): string {\n return `Document SQLAlchemy database integration for ${context.projectName}.\nModel files: ${modelFiles.slice(0, 10).join(', ')}.\nGenerate integration documentation with models, relationships, and query patterns.`;\n}\n\nfunction buildFastAPIPrompt(context: GenerationContext, serviceFiles: string[]): string {\n return `Document FastAPI API service for ${context.projectName}.\nAPI files: ${serviceFiles.slice(0, 10).join(', ')}.\nGenerate API documentation with endpoints, request/response schemas, and authentication.`;\n}\n\nfunction buildFlaskPrompt(context: GenerationContext, serviceFiles: string[]): string {\n return `Document Flask API service for ${context.projectName}.\nRoute files: ${serviceFiles.slice(0, 10).join(', ')}.\nGenerate API documentation with routes, blueprints, and request handling.`;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc-generator-agents.js","sources":["../../src/generators/doc-generator-agents.ts"],"sourcesContent":["/**\n * Agent-Driven Document Generator\n *\n * Spawns expert agents from claude-flow to analyze existing code and\n * documentation, then generates appropriate documents for each directory.\n */\n\nimport { existsSync, readFileSync, writeFileSync, readdirSync, statSync, mkdirSync, copyFileSync } from 'fs';\nimport { join, basename, extname, relative, dirname } from 'path';\nimport fg from 'fast-glob';\nimport { spawn } from 'child_process';\n\n/**\n * Service documentation found in src/{service}/docs directories\n */\ninterface ServiceDoc {\n serviceName: string;\n sourcePath: string;\n fileName: string;\n relativePath: string;\n}\n\n/**\n * Document generation context\n */\nexport interface GenerationContext {\n projectRoot: string;\n docsPath: string;\n projectName: string;\n languages: string[];\n frameworks: string[];\n existingDocs: string[];\n sourceFiles: string[];\n serviceDocs: ServiceDoc[];\n}\n\n/**\n * Generation result for a single document\n */\nexport interface GeneratedDoc {\n path: string;\n title: string;\n type: string;\n generated: boolean;\n error?: string;\n}\n\n/**\n * Overall generation result\n */\nexport interface AgentGenerationResult {\n success: boolean;\n documentsGenerated: GeneratedDoc[];\n agentsSpawned: number;\n errors: string[];\n}\n\n/**\n * Agent task definition\n */\ninterface AgentTask {\n directory: string;\n type: 'concept' | 'component' | 'service' | 'feature' | 'integration' | 'standard' | 'guide' | 'reference';\n agentType: 'researcher' | 'coder' | 'analyst';\n prompt: string;\n outputFile: string;\n}\n\n/**\n * Analyze project and generate documents using expert agents\n */\nexport async function generateDocsWithAgents(\n projectRoot: string,\n docsPath: string,\n options: {\n parallel?: boolean;\n dryRun?: boolean;\n verbose?: boolean;\n force?: boolean;\n } = {}\n): Promise<AgentGenerationResult> {\n const result: AgentGenerationResult = {\n success: true,\n documentsGenerated: [],\n agentsSpawned: 0,\n errors: [],\n };\n\n try {\n // Build context by analyzing the project\n const context = await buildGenerationContext(projectRoot, docsPath);\n\n // Determine what documents should be generated\n const tasks = await planDocumentGeneration(context, options.force);\n\n if (options.dryRun) {\n console.log('\\n[Dry Run] Would generate the following documents:');\n for (const task of tasks) {\n console.log(` - ${task.outputFile} (${task.agentType} agent)`);\n }\n if (context.serviceDocs.length > 0) {\n console.log('\\n[Dry Run] Would copy service docs:');\n for (const doc of context.serviceDocs) {\n const targetPath = `services/${doc.serviceName}/${doc.relativePath}`;\n console.log(` - ${doc.sourcePath} → ${targetPath}`);\n }\n }\n return result;\n }\n\n // Copy service docs from src/{service}/docs to main docs directory\n const copiedDocs = copyServiceDocs(context, options.force);\n\n // Execute tasks (parallel or sequential)\n if (options.parallel) {\n const results = await Promise.allSettled(\n tasks.map(task => executeAgentTask(task, context, options.verbose))\n );\n\n for (let i = 0; i < results.length; i++) {\n const r = results[i];\n result.agentsSpawned++;\n\n if (r.status === 'fulfilled') {\n result.documentsGenerated.push(r.value);\n } else {\n result.errors.push(`Failed: ${tasks[i].outputFile} - ${r.reason}`);\n result.documentsGenerated.push({\n path: tasks[i].outputFile,\n title: basename(tasks[i].outputFile, '.md'),\n type: tasks[i].type,\n generated: false,\n error: String(r.reason),\n });\n }\n }\n } else {\n // Sequential execution\n for (const task of tasks) {\n result.agentsSpawned++;\n\n try {\n const doc = await executeAgentTask(task, context, options.verbose);\n result.documentsGenerated.push(doc);\n } catch (error) {\n result.errors.push(`Failed: ${task.outputFile} - ${error}`);\n result.documentsGenerated.push({\n path: task.outputFile,\n title: basename(task.outputFile, '.md'),\n type: task.type,\n generated: false,\n error: String(error),\n });\n }\n }\n }\n\n // Add copied service docs to result\n result.documentsGenerated.push(...copiedDocs);\n\n result.success = result.errors.length === 0;\n } catch (error) {\n result.success = false;\n result.errors.push(`Generation failed: ${error}`);\n }\n\n return result;\n}\n\n/**\n * Copy service docs from src/{service}/docs to main docs directory\n */\nfunction copyServiceDocs(context: GenerationContext, force?: boolean): GeneratedDoc[] {\n const { docsPath, serviceDocs } = context;\n const copied: GeneratedDoc[] = [];\n\n for (const doc of serviceDocs) {\n const targetDir = join(docsPath, 'services', doc.serviceName);\n const targetPath = join(targetDir, doc.relativePath);\n const relativeTarget = `services/${doc.serviceName}/${doc.relativePath}`;\n\n // Skip if target exists and not forcing\n if (!force && existsSync(targetPath)) {\n continue;\n }\n\n try {\n // Create target directory if needed\n const targetFileDir = dirname(targetPath);\n if (!existsSync(targetFileDir)) {\n mkdirSync(targetFileDir, { recursive: true });\n }\n\n // Copy the file\n copyFileSync(doc.sourcePath, targetPath);\n\n copied.push({\n path: relativeTarget,\n title: doc.fileName.replace('.md', ''),\n type: 'service',\n generated: true,\n });\n } catch (error) {\n copied.push({\n path: relativeTarget,\n title: doc.fileName.replace('.md', ''),\n type: 'service',\n generated: false,\n error: String(error),\n });\n }\n }\n\n return copied;\n}\n\n/**\n * Build context by analyzing the project\n */\nasync function buildGenerationContext(\n projectRoot: string,\n docsPath: string\n): Promise<GenerationContext> {\n const context: GenerationContext = {\n projectRoot,\n docsPath,\n projectName: basename(projectRoot),\n languages: [],\n frameworks: [],\n existingDocs: [],\n sourceFiles: [],\n serviceDocs: [],\n };\n\n // Get project name from package.json\n const pkgPath = join(projectRoot, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n context.projectName = pkg.name?.replace(/^@[^/]+\\//, '') || context.projectName;\n\n // Detect frameworks from dependencies\n const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n if (deps.react) context.frameworks.push('React');\n if (deps.next) context.frameworks.push('Next.js');\n if (deps.vue) context.frameworks.push('Vue');\n if (deps.express) context.frameworks.push('Express');\n if (deps.fastify) context.frameworks.push('Fastify');\n if (deps['@prisma/client'] || deps.prisma) context.frameworks.push('Prisma');\n } catch {\n // Ignore parse errors\n }\n }\n\n // Detect languages\n if (existsSync(join(projectRoot, 'tsconfig.json'))) {\n context.languages.push('TypeScript');\n }\n if (existsSync(join(projectRoot, 'package.json'))) {\n context.languages.push('JavaScript');\n }\n\n // Detect Python - check multiple locations for requirements\n const pythonConfigPaths = [\n join(projectRoot, 'requirements.txt'),\n join(projectRoot, 'pyproject.toml'),\n join(projectRoot, 'src/backend/requirements.txt'),\n join(projectRoot, 'backend/requirements.txt'),\n join(projectRoot, 'src/requirements.txt'),\n ];\n const foundPythonConfig = pythonConfigPaths.find(p => existsSync(p));\n\n // Also detect Python if we find .py files later in source scan\n // For now, check if there's a Python config file\n if (foundPythonConfig) {\n context.languages.push('Python');\n\n // Detect Python frameworks from requirements.txt or pyproject.toml\n try {\n let reqContent = readFileSync(foundPythonConfig, 'utf-8').toLowerCase();\n // Also check pyproject.toml if we found requirements.txt\n if (foundPythonConfig.includes('requirements.txt')) {\n const pyprojectPath = join(projectRoot, 'pyproject.toml');\n if (existsSync(pyprojectPath)) {\n reqContent += readFileSync(pyprojectPath, 'utf-8').toLowerCase();\n }\n }\n if (reqContent.includes('fastapi')) context.frameworks.push('FastAPI');\n if (reqContent.includes('flask')) context.frameworks.push('Flask');\n if (reqContent.includes('django')) context.frameworks.push('Django');\n if (reqContent.includes('sqlalchemy')) context.frameworks.push('SQLAlchemy');\n if (reqContent.includes('pydantic')) context.frameworks.push('Pydantic');\n if (reqContent.includes('alembic')) context.frameworks.push('Alembic');\n } catch {\n // Ignore read errors\n }\n }\n if (existsSync(join(projectRoot, 'Cargo.toml'))) {\n context.languages.push('Rust');\n }\n if (existsSync(join(projectRoot, 'go.mod'))) {\n context.languages.push('Go');\n }\n\n // Find existing docs\n const existingDocs = await fg('**/*.md', {\n cwd: docsPath,\n ignore: ['node_modules/**', '.git/**', '_templates/**'],\n });\n context.existingDocs = existingDocs;\n\n // Find source files\n const sourceFiles = await fg('**/*.{ts,tsx,js,jsx,py,rs,go}', {\n cwd: projectRoot,\n ignore: ['node_modules/**', '.git/**', 'dist/**', 'build/**', docsPath + '/**'],\n dot: true,\n });\n context.sourceFiles = sourceFiles;\n\n // Detect Python from .py files if not already detected\n if (!context.languages.includes('Python') && sourceFiles.some(f => f.endsWith('.py'))) {\n context.languages.push('Python');\n }\n\n // Scan for service docs in src/{service}/docs directories\n const serviceDocs: ServiceDoc[] = [];\n const srcDir = join(projectRoot, 'src');\n if (existsSync(srcDir)) {\n try {\n const srcEntries = readdirSync(srcDir, { withFileTypes: true });\n for (const entry of srcEntries) {\n if (entry.isDirectory()) {\n const serviceDocsDir = join(srcDir, entry.name, 'docs');\n if (existsSync(serviceDocsDir)) {\n // Find all markdown files in this service's docs directory\n const docsFiles = await fg('**/*.md', {\n cwd: serviceDocsDir,\n ignore: ['node_modules/**', '.git/**'],\n });\n for (const docFile of docsFiles) {\n serviceDocs.push({\n serviceName: entry.name,\n sourcePath: join(serviceDocsDir, docFile),\n fileName: basename(docFile),\n relativePath: docFile,\n });\n }\n }\n }\n }\n } catch {\n // Ignore errors reading src directory\n }\n }\n context.serviceDocs = serviceDocs;\n\n return context;\n}\n\n/**\n * Plan what documents should be generated based on context\n */\nasync function planDocumentGeneration(context: GenerationContext, force?: boolean): Promise<AgentTask[]> {\n const tasks: AgentTask[] = [];\n const { projectRoot, docsPath, sourceFiles, frameworks } = context;\n\n // Helper to check if doc already exists (returns false if force is true)\n const docExists = (relativePath: string) => {\n if (force) return false; // Force regeneration\n return existsSync(join(docsPath, relativePath));\n };\n\n // Analyze source structure to determine what docs to generate\n const srcDirs = new Set<string>();\n const componentFiles: string[] = [];\n const serviceFiles: string[] = [];\n const utilityFiles: string[] = [];\n const backendFiles: string[] = [];\n const modelFiles: string[] = [];\n const frontendFiles: string[] = [];\n\n for (const file of sourceFiles) {\n const dir = file.split('/')[0];\n srcDirs.add(dir);\n const fileLower = file.toLowerCase();\n\n // Categorize files (improved patterns for Python and TypeScript)\n if (fileLower.includes('component') || fileLower.includes('/ui/') || fileLower.includes('/views/')) {\n componentFiles.push(file);\n }\n if (fileLower.includes('service') || fileLower.includes('/api/') || fileLower.includes('routes') || fileLower.includes('endpoints')) {\n serviceFiles.push(file);\n }\n if (fileLower.includes('util') || fileLower.includes('helper') || fileLower.includes('/lib/') || fileLower.includes('common')) {\n utilityFiles.push(file);\n }\n if (fileLower.includes('backend') || fileLower.includes('server') || fileLower.includes('app/')) {\n backendFiles.push(file);\n }\n if (fileLower.includes('model') || fileLower.includes('schema') || fileLower.includes('entities')) {\n modelFiles.push(file);\n }\n if (fileLower.includes('frontend') || fileLower.includes('client') || fileLower.includes('pages')) {\n frontendFiles.push(file);\n }\n }\n\n // If no service files found but backend files exist, use backend files\n if (serviceFiles.length === 0 && backendFiles.length > 0) {\n serviceFiles.push(...backendFiles);\n }\n\n // Generate architecture overview if source has modules with files\n // Threshold: at least 1 directory with 3+ source files\n if (srcDirs.size >= 1 && sourceFiles.length >= 3 && !docExists('concepts/architecture/overview.md')) {\n tasks.push({\n directory: 'concepts/architecture',\n type: 'concept',\n agentType: 'analyst',\n prompt: buildArchitecturePrompt(context, Array.from(srcDirs)),\n outputFile: 'concepts/architecture/overview.md',\n });\n }\n\n // Generate component docs for detected UI frameworks\n if (frameworks.includes('React') || frameworks.includes('Vue')) {\n if (componentFiles.length > 0 && !docExists('components/ui/overview.md')) {\n tasks.push({\n directory: 'components/ui',\n type: 'component',\n agentType: 'coder',\n prompt: buildComponentPrompt(context, componentFiles.slice(0, 10)),\n outputFile: 'components/ui/overview.md',\n });\n }\n }\n\n // Generate service docs if API files detected\n if (serviceFiles.length > 0 && !docExists('services/api/overview.md')) {\n tasks.push({\n directory: 'services/api',\n type: 'service',\n agentType: 'coder',\n prompt: buildServicePrompt(context, serviceFiles.slice(0, 10)),\n outputFile: 'services/api/overview.md',\n });\n }\n\n // Generate utility docs\n if (utilityFiles.length > 0 && !docExists('components/utilities/overview.md')) {\n tasks.push({\n directory: 'components/utilities',\n type: 'component',\n agentType: 'coder',\n prompt: buildUtilityPrompt(context, utilityFiles.slice(0, 10)),\n outputFile: 'components/utilities/overview.md',\n });\n }\n\n // Generate getting started guide\n if (!docExists('guides/getting-started/quick-start.md')) {\n tasks.push({\n directory: 'guides/getting-started',\n type: 'guide',\n agentType: 'researcher',\n prompt: buildGettingStartedPrompt(context),\n outputFile: 'guides/getting-started/quick-start.md',\n });\n }\n\n // Generate standards/coding guide if tsconfig or eslint exists\n const hasLinting = existsSync(join(projectRoot, '.eslintrc.json')) ||\n existsSync(join(projectRoot, '.eslintrc.js')) ||\n existsSync(join(projectRoot, 'eslint.config.js'));\n const hasTypescript = existsSync(join(projectRoot, 'tsconfig.json'));\n\n if ((hasLinting || hasTypescript) && !docExists('standards/coding-standards/guide.md')) {\n tasks.push({\n directory: 'standards/coding-standards',\n type: 'standard',\n agentType: 'analyst',\n prompt: buildCodingStandardsPrompt(context, hasTypescript, hasLinting),\n outputFile: 'standards/coding-standards/guide.md',\n });\n }\n\n // Generate integration docs for detected databases/services\n if (frameworks.includes('Prisma') && !docExists('integrations/databases/prisma.md')) {\n tasks.push({\n directory: 'integrations/databases',\n type: 'integration',\n agentType: 'coder',\n prompt: buildPrismaPrompt(context),\n outputFile: 'integrations/databases/prisma.md',\n });\n }\n\n // Generate SQLAlchemy docs for Python projects\n if (frameworks.includes('SQLAlchemy') && !docExists('integrations/databases/sqlalchemy.md')) {\n tasks.push({\n directory: 'integrations/databases',\n type: 'integration',\n agentType: 'coder',\n prompt: buildSQLAlchemyPrompt(context, modelFiles),\n outputFile: 'integrations/databases/sqlalchemy.md',\n });\n }\n\n // Generate FastAPI docs\n if (frameworks.includes('FastAPI') && !docExists('services/api/fastapi.md')) {\n tasks.push({\n directory: 'services/api',\n type: 'service',\n agentType: 'coder',\n prompt: buildFastAPIPrompt(context, serviceFiles),\n outputFile: 'services/api/fastapi.md',\n });\n }\n\n // Generate Flask docs\n if (frameworks.includes('Flask') && !docExists('services/api/flask.md')) {\n tasks.push({\n directory: 'services/api',\n type: 'service',\n agentType: 'coder',\n prompt: buildFlaskPrompt(context, serviceFiles),\n outputFile: 'services/api/flask.md',\n });\n }\n\n return tasks;\n}\n\n/**\n * Execute a single agent task\n */\nasync function executeAgentTask(\n task: AgentTask,\n context: GenerationContext,\n verbose?: boolean\n): Promise<GeneratedDoc> {\n const { docsPath } = context;\n const outputPath = join(docsPath, task.outputFile);\n\n // Try to use claude-flow if available, otherwise generate locally\n const hasClaudeFlow = await checkClaudeFlowAvailable();\n\n let content: string;\n\n if (hasClaudeFlow) {\n content = await executeWithClaudeFlow(task, context, verbose);\n } else {\n // Fallback to local template generation\n content = generateLocalTemplate(task, context);\n }\n\n // Write the file\n writeFileSync(outputPath, content, 'utf-8');\n\n return {\n path: task.outputFile,\n title: extractTitle(content) || basename(task.outputFile, '.md'),\n type: task.type,\n generated: true,\n };\n}\n\n/**\n * Check if claude-flow is available\n */\nasync function checkClaudeFlowAvailable(): Promise<boolean> {\n // First try direct command (globally installed claude-flow)\n const tryDirect = new Promise<boolean>((resolve) => {\n const proc = spawn('claude-flow', ['--version'], {\n stdio: 'pipe',\n shell: false,\n });\n\n proc.on('close', (code) => resolve(code === 0));\n proc.on('error', () => resolve(false));\n setTimeout(() => { proc.kill(); resolve(false); }, 5000);\n });\n\n if (await tryDirect) return true;\n\n // Fall back to npx\n return new Promise((resolve) => {\n const proc = spawn('npx', ['claude-flow', '--version'], {\n stdio: 'pipe',\n shell: false,\n });\n\n proc.on('close', (code) => resolve(code === 0));\n proc.on('error', () => resolve(false));\n setTimeout(() => { proc.kill(); resolve(false); }, 30000);\n });\n}\n\n/**\n * Execute task using claude-flow expert agents\n */\nasync function executeWithClaudeFlow(\n task: AgentTask,\n context: GenerationContext,\n verbose?: boolean\n): Promise<string> {\n return new Promise((resolve, reject) => {\n // Syntax: claude-flow sparc <mode> \"<task>\"\n const agentCmd = `claude-flow sparc ${task.agentType} \"${task.prompt.replace(/\"/g, '\\\\\"')}\"`;\n\n if (verbose) {\n console.log(`\\n Spawning ${task.agentType} agent for ${task.outputFile}...`);\n }\n\n const proc = spawn(agentCmd, {\n shell: true,\n cwd: context.projectRoot,\n stdio: verbose ? 'inherit' : 'pipe',\n });\n\n let output = '';\n\n if (proc.stdout) {\n proc.stdout.on('data', (data) => {\n output += data.toString();\n });\n }\n\n proc.on('close', (code) => {\n if (code === 0 && output) {\n resolve(output);\n } else {\n // Fallback to local generation\n resolve(generateLocalTemplate(task, context));\n }\n });\n\n proc.on('error', () => {\n resolve(generateLocalTemplate(task, context));\n });\n\n // Timeout after 60 seconds\n setTimeout(() => {\n proc.kill();\n resolve(generateLocalTemplate(task, context));\n }, 60000);\n });\n}\n\n/**\n * Generate document using local templates (fallback)\n */\nfunction generateLocalTemplate(task: AgentTask, context: GenerationContext): string {\n const date = new Date().toISOString().split('T')[0];\n const { projectName } = context;\n\n const templates: Record<string, string> = {\n 'concepts/architecture/overview.md': `---\ntitle: Architecture Overview\ntype: concept\nstatus: active\ntags: [architecture, overview]\ncreated: ${date}\n---\n\n# Architecture Overview\n\nHigh-level architecture documentation for ${projectName}.\n\n## System Overview\n\nThis document describes the overall architecture and design patterns used in ${projectName}.\n\n## Module Structure\n\n${context.sourceFiles.slice(0, 20).map(f => `- \\`${f}\\``).join('\\n')}\n\n## Key Patterns\n\n*Document key architectural patterns here*\n\n## Design Decisions\n\n*Add Architecture Decision Records (ADRs)*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'components/ui/overview.md': `---\ntitle: UI Components Overview\ntype: technical\nstatus: active\ntags: [components, ui]\ncreated: ${date}\n---\n\n# UI Components\n\nUser interface components for ${projectName}.\n\n## Component Library\n\n${context.frameworks.includes('React') ? 'Built with **React**.' : ''}\n${context.frameworks.includes('Vue') ? 'Built with **Vue**.' : ''}\n\n## Available Components\n\n*Document available UI components*\n\n## Usage Patterns\n\n*Add component usage examples*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'services/api/overview.md': `---\ntitle: API Services Overview\ntype: service\nstatus: active\ntags: [api, services]\ncreated: ${date}\n---\n\n# API Services\n\nBackend API services for ${projectName}.\n\n## Endpoints\n\n*Document API endpoints*\n\n## Authentication\n\n*Document authentication flow*\n\n## Error Handling\n\n*Document error handling patterns*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'components/utilities/overview.md': `---\ntitle: Utilities Overview\ntype: technical\nstatus: active\ntags: [utilities, helpers]\ncreated: ${date}\n---\n\n# Utility Functions\n\nReusable utilities and helpers for ${projectName}.\n\n## Available Utilities\n\n*Document available utilities*\n\n## Usage Examples\n\n*Add code examples*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'guides/getting-started/quick-start.md': `---\ntitle: Quick Start Guide\ntype: guide\nstatus: active\ntags: [guide, getting-started]\ncreated: ${date}\n---\n\n# Quick Start\n\nGet up and running with ${projectName}.\n\n## Prerequisites\n\n${context.languages.map(l => `- ${l}`).join('\\n')}\n\n## Installation\n\n\\`\\`\\`bash\nnpm install\n\\`\\`\\`\n\n## Basic Usage\n\n*Add basic usage instructions*\n\n## Next Steps\n\n- [[concepts/architecture/overview|Architecture Overview]]\n- [[guides/_MOC|More Guides]]\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'standards/coding-standards/guide.md': `---\ntitle: Coding Standards\ntype: standard\nstatus: active\ntags: [standards, coding]\ncreated: ${date}\n---\n\n# Coding Standards\n\nCode style and conventions for ${projectName}.\n\n## Language Standards\n\n${context.languages.map(l => `### ${l}\\n\\n*Add ${l} specific standards*`).join('\\n\\n')}\n\n## Linting Configuration\n\n*Document ESLint/Prettier setup*\n\n## Best Practices\n\n*Add coding best practices*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'integrations/databases/prisma.md': `---\ntitle: Prisma Integration\ntype: integration\nstatus: active\ntags: [prisma, database, orm]\ncreated: ${date}\n---\n\n# Prisma Integration\n\nDatabase ORM configuration for ${projectName}.\n\n## Schema Location\n\n\\`prisma/schema.prisma\\`\n\n## Models\n\n*Document database models*\n\n## Migrations\n\n\\`\\`\\`bash\nnpx prisma migrate dev\n\\`\\`\\`\n\n## Client Usage\n\n*Add Prisma client usage examples*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'integrations/databases/sqlalchemy.md': `---\ntitle: SQLAlchemy Integration\ntype: integration\nstatus: active\ntags: [sqlalchemy, database, orm, python]\ncreated: ${date}\n---\n\n# SQLAlchemy Integration\n\nDatabase ORM configuration for ${projectName}.\n\n## Models\n\n*Document your SQLAlchemy models*\n\n## Database Connection\n\n\\`\\`\\`python\nfrom sqlalchemy import create_engine\nfrom sqlalchemy.orm import sessionmaker\n\nengine = create_engine(DATABASE_URL)\nSession = sessionmaker(bind=engine)\n\\`\\`\\`\n\n## Migrations (Alembic)\n\n\\`\\`\\`bash\nalembic upgrade head\n\\`\\`\\`\n\n## Query Examples\n\n*Add common query patterns*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'services/api/fastapi.md': `---\ntitle: FastAPI Service\ntype: service\nstatus: active\ntags: [fastapi, api, python]\ncreated: ${date}\n---\n\n# FastAPI Service\n\nAPI service documentation for ${projectName}.\n\n## Running the Server\n\n\\`\\`\\`bash\nuvicorn main:app --reload\n\\`\\`\\`\n\n## API Endpoints\n\n*Document your API endpoints*\n\n## Authentication\n\n*Document authentication flow*\n\n## Request/Response Schemas\n\n*Document Pydantic models*\n\n---\n> Auto-generated by kg-agent\n`,\n\n 'services/api/flask.md': `---\ntitle: Flask Service\ntype: service\nstatus: active\ntags: [flask, api, python]\ncreated: ${date}\n---\n\n# Flask Service\n\nAPI service documentation for ${projectName}.\n\n## Running the Server\n\n\\`\\`\\`bash\nflask run\n\\`\\`\\`\n\n## Routes\n\n*Document your Flask routes*\n\n## Blueprints\n\n*Document blueprints structure*\n\n## Error Handling\n\n*Document error handling patterns*\n\n---\n> Auto-generated by kg-agent\n`,\n };\n\n return templates[task.outputFile] || generateGenericTemplate(task, context, date);\n}\n\n/**\n * Generate a generic template for unknown task types\n */\nfunction generateGenericTemplate(\n task: AgentTask,\n context: GenerationContext,\n date: string\n): string {\n const title = basename(task.outputFile, '.md')\n .split('-')\n .map(w => w.charAt(0).toUpperCase() + w.slice(1))\n .join(' ');\n\n return `---\ntitle: ${title}\ntype: ${task.type}\nstatus: draft\ntags: [${task.type}]\ncreated: ${date}\n---\n\n# ${title}\n\nDocumentation for ${context.projectName}.\n\n## Overview\n\n*Add overview content*\n\n## Details\n\n*Add detailed documentation*\n\n---\n> Auto-generated by kg-agent\n`;\n}\n\n/**\n * Extract title from markdown content\n */\nfunction extractTitle(content: string): string | null {\n const match = content.match(/^#\\s+(.+)$/m);\n return match ? match[1] : null;\n}\n\n// Prompt builders\n\nfunction buildArchitecturePrompt(context: GenerationContext, dirs: string[]): string {\n return `Analyze the architecture of ${context.projectName}.\nModules: ${dirs.join(', ')}.\nLanguages: ${context.languages.join(', ')}.\nGenerate an Architecture Overview markdown document with system design, patterns, and key decisions.`;\n}\n\nfunction buildComponentPrompt(context: GenerationContext, files: string[]): string {\n return `Document the UI components in ${context.projectName}.\nFrameworks: ${context.frameworks.join(', ')}.\nComponent files: ${files.join(', ')}.\nGenerate a Components Overview markdown document.`;\n}\n\nfunction buildServicePrompt(context: GenerationContext, files: string[]): string {\n return `Document the API services in ${context.projectName}.\nService files: ${files.join(', ')}.\nGenerate an API Services Overview markdown document with endpoints and patterns.`;\n}\n\nfunction buildUtilityPrompt(context: GenerationContext, files: string[]): string {\n return `Document utility functions in ${context.projectName}.\nUtility files: ${files.join(', ')}.\nGenerate a Utilities Overview markdown document.`;\n}\n\nfunction buildGettingStartedPrompt(context: GenerationContext): string {\n return `Create a Quick Start guide for ${context.projectName}.\nLanguages: ${context.languages.join(', ')}.\nFrameworks: ${context.frameworks.join(', ')}.\nGenerate a Getting Started guide with installation and basic usage.`;\n}\n\nfunction buildCodingStandardsPrompt(\n context: GenerationContext,\n hasTypescript: boolean,\n hasLinting: boolean\n): string {\n return `Document coding standards for ${context.projectName}.\nTypeScript: ${hasTypescript ? 'yes' : 'no'}.\nESLint: ${hasLinting ? 'yes' : 'no'}.\nGenerate a Coding Standards guide with style rules and best practices.`;\n}\n\nfunction buildPrismaPrompt(context: GenerationContext): string {\n return `Document Prisma database integration for ${context.projectName}.\nGenerate integration documentation with schema, models, and usage patterns.`;\n}\n\nfunction buildSQLAlchemyPrompt(context: GenerationContext, modelFiles: string[]): string {\n return `Document SQLAlchemy database integration for ${context.projectName}.\nModel files: ${modelFiles.slice(0, 10).join(', ')}.\nGenerate integration documentation with models, relationships, and query patterns.`;\n}\n\nfunction buildFastAPIPrompt(context: GenerationContext, serviceFiles: string[]): string {\n return `Document FastAPI API service for ${context.projectName}.\nAPI files: ${serviceFiles.slice(0, 10).join(', ')}.\nGenerate API documentation with endpoints, request/response schemas, and authentication.`;\n}\n\nfunction buildFlaskPrompt(context: GenerationContext, serviceFiles: string[]): string {\n return `Document Flask API service for ${context.projectName}.\nRoute files: ${serviceFiles.slice(0, 10).join(', ')}.\nGenerate API documentation with routes, blueprints, and request handling.`;\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { __exports as dist } from "../../../../_virtual/index7.js";
1
+ import { __exports as dist } from "../../../../_virtual/index8.js";
2
2
  import { __require as requireCreateProjectService } from "./createProjectService.js";
3
3
  var hasRequiredDist;
4
4
  function requireDist() {
@@ -1,4 +1,4 @@
1
- import { __exports as dist } from "../../../../_virtual/index6.js";
1
+ import { __exports as dist } from "../../../../_virtual/index5.js";
2
2
  import { __require as requireAstSpec } from "./generated/ast-spec.js";
3
3
  import { __require as requireLib } from "./lib.js";
4
4
  import { __require as requireParserOptions } from "./parser-options.js";
@@ -1,4 +1,4 @@
1
- import { __exports as dist } from "../../../../_virtual/index5.js";
1
+ import { __exports as dist } from "../../../../_virtual/index6.js";
2
2
  import { __require as requireGetKeys } from "./get-keys.js";
3
3
  import { __require as requireVisitorKeys } from "./visitor-keys.js";
4
4
  var hasRequiredDist;
@@ -1,4 +1,4 @@
1
- import { __exports as dist } from "../../../_virtual/index8.js";
1
+ import { __exports as dist } from "../../../_virtual/index7.js";
2
2
  import require$$1 from "fs";
3
3
  import path__default from "path";
4
4
  import require$$2 from "url";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@weavelogic/knowledge-graph-agent",
3
- "version": "0.10.2",
3
+ "version": "0.10.3",
4
4
  "description": "Knowledge graph agent for Claude Code - generates knowledge graphs, initializes docs, and integrates with claude-flow",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",