@weavelogic/knowledge-graph-agent 0.10.1 → 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.
Files changed (32) hide show
  1. package/dist/_virtual/index10.js +2 -2
  2. package/dist/_virtual/index11.js +2 -2
  3. package/dist/_virtual/index8.js +2 -2
  4. package/dist/_virtual/index9.js +2 -2
  5. package/dist/agents/base-agent.js +3 -3
  6. package/dist/agents/base-agent.js.map +1 -1
  7. package/dist/cli/commands/cultivate.js +8 -3
  8. package/dist/cli/commands/cultivate.js.map +1 -1
  9. package/dist/cultivation/deep-analyzer.d.ts +8 -1
  10. package/dist/cultivation/deep-analyzer.d.ts.map +1 -1
  11. package/dist/cultivation/deep-analyzer.js +36 -8
  12. package/dist/cultivation/deep-analyzer.js.map +1 -1
  13. package/dist/generators/claude-md.js +1 -1
  14. package/dist/generators/claude-md.js.map +1 -1
  15. package/dist/generators/doc-cultivator.js +3 -6
  16. package/dist/generators/doc-cultivator.js.map +1 -1
  17. package/dist/generators/doc-generator-agents.js +18 -9
  18. package/dist/generators/doc-generator-agents.js.map +1 -1
  19. package/dist/integrations/claude-flow.js +4 -4
  20. package/dist/integrations/claude-flow.js.map +1 -1
  21. package/dist/mcp/clients/mcp-client-adapter.d.ts +1 -1
  22. package/dist/mcp/clients/mcp-client-adapter.d.ts.map +1 -1
  23. package/dist/mcp/clients/mcp-client-adapter.js +1 -1
  24. package/dist/mcp/clients/mcp-client-adapter.js.map +1 -1
  25. package/dist/node_modules/@typescript-eslint/project-service/dist/index.js +1 -1
  26. package/dist/node_modules/@typescript-eslint/types/dist/index.js +1 -1
  27. package/dist/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/dist/commonjs/index.js +1 -1
  28. package/dist/node_modules/@typescript-eslint/visitor-keys/dist/index.js +1 -1
  29. package/dist/node_modules/fdir/dist/index.js +1 -1
  30. package/dist/node_modules/tinyglobby/dist/index.js +1 -1
  31. package/dist/node_modules/ts-api-utils/lib/index.js +1 -1
  32. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md.js","sources":["../../src/generators/claude-md.ts"],"sourcesContent":["/**\n * CLAUDE.md Generator\n *\n * Generates and manages CLAUDE.md configuration files for Claude Code\n * with knowledge graph integration.\n *\n * SECURITY NOTES (Handlebars Templates):\n * - All templates use double-braces {{}} which HTML-escapes output\n * - Triple-braces {{{raw}}} are NOT used, preventing XSS in HTML contexts\n * - User input is sanitized via sanitizeTemplateInput() before template use\n * - Template content is validated and Handlebars delimiters are stripped from user input\n * - See: https://handlebarsjs.com/guide/#html-escaping\n */\n\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join, basename, resolve, normalize } from 'path';\nimport Handlebars from 'handlebars';\nimport type {\n ClaudeMdGeneratorOptions,\n ClaudeMdSection,\n ClaudeMdTemplate,\n} from '../core/types.js';\n\n/**\n * Validate that a template path is within the project directory\n * and is a markdown file\n */\nfunction validateTemplatePath(projectRoot: string, templatePath: string): string | null {\n // Resolve both paths to absolute\n const resolvedRoot = resolve(projectRoot);\n const resolvedTemplate = resolve(projectRoot, templatePath);\n const normalizedTemplate = normalize(resolvedTemplate);\n\n // Ensure template is within project directory\n if (!normalizedTemplate.startsWith(resolvedRoot + '/') && normalizedTemplate !== resolvedRoot) {\n return null; // Path traversal attempt\n }\n\n // Must be a markdown file\n if (!normalizedTemplate.endsWith('.md')) {\n return null;\n }\n\n return normalizedTemplate;\n}\n\n/**\n * Default CLAUDE.md template with knowledge graph integration\n */\nconst DEFAULT_TEMPLATE = `# Claude Code Configuration - {{projectName}}\n\n## Project Overview\n\n{{description}}\n\n## Knowledge Graph Integration\n\nThis project uses @weavelogic/knowledge-graph-agent for documentation and planning.\n\n### Quick Commands\n\n\\`\\`\\`bash\n# Initialize knowledge graph\nnpx kg init\n\n# Generate/update graph from docs\nnpx kg graph\n\n# Sync with claude-flow memory\nnpx kg sync\n\n# Initialize docs directory\nnpx kg docs init\n\n# Update CLAUDE.md\nnpx kg claude update\n\\`\\`\\`\n\n### Vault Location\n\nDocumentation is stored in: \\`{{docsPath}}\\`\n\n## File Organization\n\n{{#if customDirectories}}\n{{#each customDirectories}}\n- \\`{{this.path}}\\` - {{this.description}}\n{{/each}}\n{{else}}\n- \\`/src\\` - Source code files\n- \\`/docs\\` - Documentation and knowledge base\n- \\`/tests\\` - Test files\n- \\`/config\\` - Configuration files\n{{/if}}\n\n## Build Commands\n\n{{#each buildCommands}}\n- \\`{{this.command}}\\` - {{this.description}}\n{{/each}}\n\n## Code Style & Best Practices\n\n{{#each codeStyleRules}}\n- **{{this.name}}**: {{this.description}}\n{{/each}}\n\n{{#if includeClaudeFlow}}\n## Claude-Flow Integration\n\nThis project uses claude-flow for AI coordination:\n\n### MCP Configuration\n\n\\`\\`\\`bash\nclaude mcp add claude-flow npx claude-flow@alpha mcp start\n\\`\\`\\`\n\n### Memory Namespace\n\n- **Namespace**: \\`{{namespace}}\\`\n- **Sync on change**: {{syncOnChange}}\n\n### Available Tools\n\n- \\`mcp__claude-flow__memory_usage\\` - Store/retrieve knowledge\n- \\`mcp__claude-flow__swarm_init\\` - Initialize agent swarms\n- \\`mcp__claude-flow__task_orchestrate\\` - Coordinate tasks\n\n{{/if}}\n{{#if includeKnowledgeGraph}}\n## Knowledge Graph Commands\n\nThe knowledge graph provides semantic navigation of the codebase:\n\n### CLI Commands\n\n| Command | Description |\n|---------|-------------|\n| \\`kg init\\` | Initialize knowledge graph in project |\n| \\`kg graph\\` | Generate/update knowledge graph |\n| \\`kg docs init\\` | Initialize docs directory |\n| \\`kg docs generate\\` | Generate docs from codebase |\n| \\`kg claude update\\` | Update CLAUDE.md |\n| \\`kg sync\\` | Sync with claude-flow memory |\n| \\`kg stats\\` | Show graph statistics |\n| \\`kg search <query>\\` | Search the knowledge graph |\n\n### Graph Structure\n\n\\`\\`\\`\n{{docsPath}}/\n├── concepts/ # Abstract concepts\n├── components/ # Reusable components\n├── services/ # Backend services\n├── features/ # Product features\n├── integrations/ # External integrations\n├── standards/ # Coding standards\n├── guides/ # How-to guides\n└── references/ # API references\n\\`\\`\\`\n\n{{/if}}\n{{#if customSections}}\n{{#each customSections}}\n## {{this.title}}\n\n{{this.content}}\n\n{{/each}}\n{{/if}}\n## Important Instructions\n\n- NEVER create files unless absolutely necessary\n- ALWAYS prefer editing existing files\n- Use the knowledge graph for documentation\n- Follow the file organization above\n- Run tests before committing\n\n---\n*Generated by @weavelogic/knowledge-graph-agent*\n`;\n\n/**\n * Section templates for common configurations\n */\nconst SECTION_TEMPLATES: Record<string, ClaudeMdSection> = {\n sparc: {\n title: 'SPARC Methodology',\n order: 10,\n content: `This project follows the SPARC development methodology:\n\n1. **Specification** - Requirements analysis\n2. **Pseudocode** - Algorithm design\n3. **Architecture** - System design\n4. **Refinement** - TDD implementation\n5. **Completion** - Integration\n\n### SPARC Commands\n\n\\`\\`\\`bash\nnpx claude-flow sparc modes # List available modes\nnpx claude-flow sparc tdd \"<task>\" # Run TDD workflow\nnpx claude-flow sparc run <mode> # Execute specific mode\n\\`\\`\\``,\n },\n\n testing: {\n title: 'Testing Requirements',\n order: 20,\n content: `All code changes must include appropriate tests:\n\n- **Unit tests**: For individual functions and components\n- **Integration tests**: For API endpoints and services\n- **E2E tests**: For critical user flows\n\n### Running Tests\n\n\\`\\`\\`bash\nnpm run test # Run all tests\nnpm run test:watch # Watch mode\nnpm run test:cov # With coverage\n\\`\\`\\``,\n },\n\n security: {\n title: 'Security Guidelines',\n order: 30,\n content: `Security is a priority. Follow these guidelines:\n\n- Never hardcode secrets or API keys\n- Use environment variables for sensitive data\n- Validate all user inputs\n- Sanitize outputs to prevent XSS\n- Follow OWASP guidelines`,\n },\n\n agents: {\n title: 'Available Agents',\n order: 40,\n content: `Use Claude Code's Task tool to spawn specialized agents:\n\n### Core Agents\n\\`coder\\`, \\`reviewer\\`, \\`tester\\`, \\`planner\\`, \\`researcher\\`\n\n### SPARC Agents\n\\`sparc-coord\\`, \\`sparc-coder\\`, \\`specification\\`, \\`architecture\\`\n\n### Specialized Agents\n\\`backend-dev\\`, \\`system-architect\\`, \\`code-analyzer\\`, \\`api-docs\\`\n\n### Usage\n\n\\`\\`\\`javascript\nTask(\"Implement feature\", \"Description...\", \"coder\")\nTask(\"Review code\", \"Description...\", \"reviewer\")\n\\`\\`\\``,\n },\n};\n\n/**\n * Generate CLAUDE.md content\n */\nexport function generateClaudeMd(options: ClaudeMdGeneratorOptions): string {\n const {\n projectRoot,\n template,\n includeKnowledgeGraph = true,\n includeClaudeFlow = true,\n customSections = [],\n } = options;\n\n // Detect project info\n const projectInfo = detectProjectInfo(projectRoot);\n\n // Prepare context\n const context = {\n projectName: projectInfo.name,\n description: projectInfo.description || `${projectInfo.name} project`,\n docsPath: getDocsPath(projectRoot),\n includeKnowledgeGraph,\n includeClaudeFlow,\n namespace: 'knowledge-graph',\n syncOnChange: true,\n buildCommands: projectInfo.scripts,\n codeStyleRules: getDefaultCodeStyleRules(),\n customSections: [...customSections],\n customDirectories: null,\n };\n\n // Get template content (pass projectRoot for path validation)\n const templateContent = template ? getTemplateContent(template, projectRoot) : DEFAULT_TEMPLATE;\n\n // Compile and render\n const compiled = Handlebars.compile(templateContent);\n return compiled(context);\n}\n\n/**\n * Create or update CLAUDE.md file\n */\nexport async function updateClaudeMd(options: ClaudeMdGeneratorOptions): Promise<{\n created: boolean;\n updated: boolean;\n path: string;\n content: string;\n}> {\n const { projectRoot, outputPath } = options;\n const filePath = outputPath || join(projectRoot, 'CLAUDE.md');\n\n const exists = existsSync(filePath);\n const content = generateClaudeMd(options);\n\n writeFileSync(filePath, content, 'utf-8');\n\n return {\n created: !exists,\n updated: exists,\n path: filePath,\n content,\n };\n}\n\n/**\n * Add section to existing CLAUDE.md\n */\nexport function addSection(\n projectRoot: string,\n section: ClaudeMdSection\n): boolean {\n const filePath = join(projectRoot, 'CLAUDE.md');\n\n if (!existsSync(filePath)) {\n return false;\n }\n\n const content = readFileSync(filePath, 'utf-8');\n\n // Check if section already exists\n const sectionRegex = new RegExp(`^## ${section.title}`, 'm');\n if (sectionRegex.test(content)) {\n return false; // Section already exists\n }\n\n // Find the best position to insert (before Important Instructions or at end)\n const importantMatch = content.match(/^## Important Instructions/m);\n let newContent: string;\n\n const sectionContent = `\\n## ${section.title}\\n\\n${section.content}\\n`;\n\n if (importantMatch && importantMatch.index !== undefined) {\n newContent =\n content.slice(0, importantMatch.index) +\n sectionContent +\n '\\n' +\n content.slice(importantMatch.index);\n } else {\n newContent = content + sectionContent;\n }\n\n writeFileSync(filePath, newContent, 'utf-8');\n return true;\n}\n\n/**\n * Get predefined section template\n */\nexport function getSectionTemplate(name: string): ClaudeMdSection | null {\n return SECTION_TEMPLATES[name] || null;\n}\n\n/**\n * List available section templates\n */\nexport function listSectionTemplates(): string[] {\n return Object.keys(SECTION_TEMPLATES);\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\ninterface ProjectInfo {\n name: string;\n description?: string;\n scripts: Array<{ command: string; description: string }>;\n}\n\n/**\n * Sanitize string for safe template use\n * Prevents template injection and removes dangerous characters\n */\nfunction sanitizeForTemplate(str: string | undefined, maxLength = 200): string {\n if (!str || typeof str !== 'string') return '';\n return str\n .replace(/[<>&\"'`{}\\\\]/g, '') // Remove template-sensitive chars\n .replace(/\\{\\{/g, '') // Remove Handlebars delimiters\n .replace(/\\}\\}/g, '')\n .slice(0, maxLength)\n .trim();\n}\n\nfunction detectProjectInfo(projectRoot: string): ProjectInfo {\n const info: ProjectInfo = {\n name: sanitizeForTemplate(basename(projectRoot), 100) || 'project',\n scripts: [],\n };\n\n try {\n const pkgPath = join(projectRoot, 'package.json');\n if (existsSync(pkgPath)) {\n let pkg;\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n } catch {\n return info; // Return default info on JSON parse error\n }\n\n // Sanitize project name\n const rawName = (pkg.name || basename(projectRoot)).replace(/^@[^/]+\\//, '');\n info.name = sanitizeForTemplate(rawName, 100) || 'project';\n\n // Sanitize description\n info.description = sanitizeForTemplate(pkg.description, 500);\n\n // Extract common scripts (sanitize script names)\n if (pkg.scripts && typeof pkg.scripts === 'object') {\n const commonScripts = ['build', 'test', 'dev', 'start', 'lint', 'typecheck'];\n for (const script of commonScripts) {\n if (pkg.scripts[script] && typeof pkg.scripts[script] === 'string') {\n info.scripts.push({\n command: `npm run ${script}`,\n description: sanitizeForTemplate(\n getScriptDescription(script, pkg.scripts[script]),\n 200\n ),\n });\n }\n }\n }\n }\n } catch {\n // Ignore errors - return default info\n }\n\n // Add default scripts if none found\n if (info.scripts.length === 0) {\n info.scripts = [\n { command: 'npm run build', description: 'Build the project' },\n { command: 'npm run test', description: 'Run tests' },\n { command: 'npm run dev', description: 'Development mode' },\n ];\n }\n\n return info;\n}\n\nfunction getScriptDescription(name: string, script: string): string {\n const descriptions: Record<string, string> = {\n build: 'Build the project',\n test: 'Run tests',\n dev: 'Start development server',\n start: 'Start production server',\n lint: 'Run linter',\n typecheck: 'Type checking',\n };\n\n return descriptions[name] || `Run ${name}`;\n}\n\nfunction getDocsPath(projectRoot: string): string {\n const possiblePaths = ['docs', 'documentation', 'doc'];\n\n for (const path of possiblePaths) {\n if (existsSync(join(projectRoot, path))) {\n return path;\n }\n }\n\n return 'docs';\n}\n\nfunction getDefaultCodeStyleRules(): Array<{ name: string; description: string }> {\n return [\n { name: 'Modular Design', description: 'Files under 500 lines' },\n { name: 'Environment Safety', description: 'Never hardcode secrets' },\n { name: 'Test-First', description: 'Write tests before implementation' },\n { name: 'Clean Architecture', description: 'Separate concerns' },\n { name: 'Documentation', description: 'Keep docs updated' },\n ];\n}\n\nfunction getTemplateContent(templateName: string, projectRoot?: string): string {\n // Check for built-in templates\n if (templateName === 'minimal') {\n return `# {{projectName}}\n\n{{description}}\n\n## Commands\n\n{{#each buildCommands}}\n- \\`{{this.command}}\\` - {{this.description}}\n{{/each}}\n\n---\n*Generated by @weavelogic/knowledge-graph-agent*\n`;\n }\n\n if (templateName === 'full') {\n // Add all sections\n let content = DEFAULT_TEMPLATE;\n for (const section of Object.values(SECTION_TEMPLATES)) {\n content = content.replace(\n /^## Important Instructions/m,\n `## ${section.title}\\n\\n${section.content}\\n\\n## Important Instructions`\n );\n }\n return content;\n }\n\n // Try to read as file path - only if within project directory\n if (projectRoot && (templateName.includes('/') || templateName.includes('.'))) {\n const validatedPath = validateTemplatePath(projectRoot, templateName);\n if (validatedPath && existsSync(validatedPath)) {\n return readFileSync(validatedPath, 'utf-8');\n }\n }\n\n return DEFAULT_TEMPLATE;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-md.js","sources":["../../src/generators/claude-md.ts"],"sourcesContent":["/**\n * CLAUDE.md Generator\n *\n * Generates and manages CLAUDE.md configuration files for Claude Code\n * with knowledge graph integration.\n *\n * SECURITY NOTES (Handlebars Templates):\n * - All templates use double-braces {{}} which HTML-escapes output\n * - Triple-braces {{{raw}}} are NOT used, preventing XSS in HTML contexts\n * - User input is sanitized via sanitizeTemplateInput() before template use\n * - Template content is validated and Handlebars delimiters are stripped from user input\n * - See: https://handlebarsjs.com/guide/#html-escaping\n */\n\nimport { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join, basename, resolve, normalize } from 'path';\nimport Handlebars from 'handlebars';\nimport type {\n ClaudeMdGeneratorOptions,\n ClaudeMdSection,\n ClaudeMdTemplate,\n} from '../core/types.js';\n\n/**\n * Validate that a template path is within the project directory\n * and is a markdown file\n */\nfunction validateTemplatePath(projectRoot: string, templatePath: string): string | null {\n // Resolve both paths to absolute\n const resolvedRoot = resolve(projectRoot);\n const resolvedTemplate = resolve(projectRoot, templatePath);\n const normalizedTemplate = normalize(resolvedTemplate);\n\n // Ensure template is within project directory\n if (!normalizedTemplate.startsWith(resolvedRoot + '/') && normalizedTemplate !== resolvedRoot) {\n return null; // Path traversal attempt\n }\n\n // Must be a markdown file\n if (!normalizedTemplate.endsWith('.md')) {\n return null;\n }\n\n return normalizedTemplate;\n}\n\n/**\n * Default CLAUDE.md template with knowledge graph integration\n */\nconst DEFAULT_TEMPLATE = `# Claude Code Configuration - {{projectName}}\n\n## Project Overview\n\n{{description}}\n\n## Knowledge Graph Integration\n\nThis project uses @weavelogic/knowledge-graph-agent for documentation and planning.\n\n### Quick Commands\n\n\\`\\`\\`bash\n# Initialize knowledge graph\nnpx kg init\n\n# Generate/update graph from docs\nnpx kg graph\n\n# Sync with claude-flow memory\nnpx kg sync\n\n# Initialize docs directory\nnpx kg docs init\n\n# Update CLAUDE.md\nnpx kg claude update\n\\`\\`\\`\n\n### Vault Location\n\nDocumentation is stored in: \\`{{docsPath}}\\`\n\n## File Organization\n\n{{#if customDirectories}}\n{{#each customDirectories}}\n- \\`{{this.path}}\\` - {{this.description}}\n{{/each}}\n{{else}}\n- \\`/src\\` - Source code files\n- \\`/docs\\` - Documentation and knowledge base\n- \\`/tests\\` - Test files\n- \\`/config\\` - Configuration files\n{{/if}}\n\n## Build Commands\n\n{{#each buildCommands}}\n- \\`{{this.command}}\\` - {{this.description}}\n{{/each}}\n\n## Code Style & Best Practices\n\n{{#each codeStyleRules}}\n- **{{this.name}}**: {{this.description}}\n{{/each}}\n\n{{#if includeClaudeFlow}}\n## Claude-Flow Integration\n\nThis project uses claude-flow for AI coordination:\n\n### MCP Configuration\n\n\\`\\`\\`bash\nclaude mcp add claude-flow npx claude-flow mcp start\n\\`\\`\\`\n\n### Memory Namespace\n\n- **Namespace**: \\`{{namespace}}\\`\n- **Sync on change**: {{syncOnChange}}\n\n### Available Tools\n\n- \\`mcp__claude-flow__memory_usage\\` - Store/retrieve knowledge\n- \\`mcp__claude-flow__swarm_init\\` - Initialize agent swarms\n- \\`mcp__claude-flow__task_orchestrate\\` - Coordinate tasks\n\n{{/if}}\n{{#if includeKnowledgeGraph}}\n## Knowledge Graph Commands\n\nThe knowledge graph provides semantic navigation of the codebase:\n\n### CLI Commands\n\n| Command | Description |\n|---------|-------------|\n| \\`kg init\\` | Initialize knowledge graph in project |\n| \\`kg graph\\` | Generate/update knowledge graph |\n| \\`kg docs init\\` | Initialize docs directory |\n| \\`kg docs generate\\` | Generate docs from codebase |\n| \\`kg claude update\\` | Update CLAUDE.md |\n| \\`kg sync\\` | Sync with claude-flow memory |\n| \\`kg stats\\` | Show graph statistics |\n| \\`kg search <query>\\` | Search the knowledge graph |\n\n### Graph Structure\n\n\\`\\`\\`\n{{docsPath}}/\n├── concepts/ # Abstract concepts\n├── components/ # Reusable components\n├── services/ # Backend services\n├── features/ # Product features\n├── integrations/ # External integrations\n├── standards/ # Coding standards\n├── guides/ # How-to guides\n└── references/ # API references\n\\`\\`\\`\n\n{{/if}}\n{{#if customSections}}\n{{#each customSections}}\n## {{this.title}}\n\n{{this.content}}\n\n{{/each}}\n{{/if}}\n## Important Instructions\n\n- NEVER create files unless absolutely necessary\n- ALWAYS prefer editing existing files\n- Use the knowledge graph for documentation\n- Follow the file organization above\n- Run tests before committing\n\n---\n*Generated by @weavelogic/knowledge-graph-agent*\n`;\n\n/**\n * Section templates for common configurations\n */\nconst SECTION_TEMPLATES: Record<string, ClaudeMdSection> = {\n sparc: {\n title: 'SPARC Methodology',\n order: 10,\n content: `This project follows the SPARC development methodology:\n\n1. **Specification** - Requirements analysis\n2. **Pseudocode** - Algorithm design\n3. **Architecture** - System design\n4. **Refinement** - TDD implementation\n5. **Completion** - Integration\n\n### SPARC Commands\n\n\\`\\`\\`bash\nnpx claude-flow sparc modes # List available modes\nnpx claude-flow sparc tdd \"<task>\" # Run TDD workflow\nnpx claude-flow sparc run <mode> # Execute specific mode\n\\`\\`\\``,\n },\n\n testing: {\n title: 'Testing Requirements',\n order: 20,\n content: `All code changes must include appropriate tests:\n\n- **Unit tests**: For individual functions and components\n- **Integration tests**: For API endpoints and services\n- **E2E tests**: For critical user flows\n\n### Running Tests\n\n\\`\\`\\`bash\nnpm run test # Run all tests\nnpm run test:watch # Watch mode\nnpm run test:cov # With coverage\n\\`\\`\\``,\n },\n\n security: {\n title: 'Security Guidelines',\n order: 30,\n content: `Security is a priority. Follow these guidelines:\n\n- Never hardcode secrets or API keys\n- Use environment variables for sensitive data\n- Validate all user inputs\n- Sanitize outputs to prevent XSS\n- Follow OWASP guidelines`,\n },\n\n agents: {\n title: 'Available Agents',\n order: 40,\n content: `Use Claude Code's Task tool to spawn specialized agents:\n\n### Core Agents\n\\`coder\\`, \\`reviewer\\`, \\`tester\\`, \\`planner\\`, \\`researcher\\`\n\n### SPARC Agents\n\\`sparc-coord\\`, \\`sparc-coder\\`, \\`specification\\`, \\`architecture\\`\n\n### Specialized Agents\n\\`backend-dev\\`, \\`system-architect\\`, \\`code-analyzer\\`, \\`api-docs\\`\n\n### Usage\n\n\\`\\`\\`javascript\nTask(\"Implement feature\", \"Description...\", \"coder\")\nTask(\"Review code\", \"Description...\", \"reviewer\")\n\\`\\`\\``,\n },\n};\n\n/**\n * Generate CLAUDE.md content\n */\nexport function generateClaudeMd(options: ClaudeMdGeneratorOptions): string {\n const {\n projectRoot,\n template,\n includeKnowledgeGraph = true,\n includeClaudeFlow = true,\n customSections = [],\n } = options;\n\n // Detect project info\n const projectInfo = detectProjectInfo(projectRoot);\n\n // Prepare context\n const context = {\n projectName: projectInfo.name,\n description: projectInfo.description || `${projectInfo.name} project`,\n docsPath: getDocsPath(projectRoot),\n includeKnowledgeGraph,\n includeClaudeFlow,\n namespace: 'knowledge-graph',\n syncOnChange: true,\n buildCommands: projectInfo.scripts,\n codeStyleRules: getDefaultCodeStyleRules(),\n customSections: [...customSections],\n customDirectories: null,\n };\n\n // Get template content (pass projectRoot for path validation)\n const templateContent = template ? getTemplateContent(template, projectRoot) : DEFAULT_TEMPLATE;\n\n // Compile and render\n const compiled = Handlebars.compile(templateContent);\n return compiled(context);\n}\n\n/**\n * Create or update CLAUDE.md file\n */\nexport async function updateClaudeMd(options: ClaudeMdGeneratorOptions): Promise<{\n created: boolean;\n updated: boolean;\n path: string;\n content: string;\n}> {\n const { projectRoot, outputPath } = options;\n const filePath = outputPath || join(projectRoot, 'CLAUDE.md');\n\n const exists = existsSync(filePath);\n const content = generateClaudeMd(options);\n\n writeFileSync(filePath, content, 'utf-8');\n\n return {\n created: !exists,\n updated: exists,\n path: filePath,\n content,\n };\n}\n\n/**\n * Add section to existing CLAUDE.md\n */\nexport function addSection(\n projectRoot: string,\n section: ClaudeMdSection\n): boolean {\n const filePath = join(projectRoot, 'CLAUDE.md');\n\n if (!existsSync(filePath)) {\n return false;\n }\n\n const content = readFileSync(filePath, 'utf-8');\n\n // Check if section already exists\n const sectionRegex = new RegExp(`^## ${section.title}`, 'm');\n if (sectionRegex.test(content)) {\n return false; // Section already exists\n }\n\n // Find the best position to insert (before Important Instructions or at end)\n const importantMatch = content.match(/^## Important Instructions/m);\n let newContent: string;\n\n const sectionContent = `\\n## ${section.title}\\n\\n${section.content}\\n`;\n\n if (importantMatch && importantMatch.index !== undefined) {\n newContent =\n content.slice(0, importantMatch.index) +\n sectionContent +\n '\\n' +\n content.slice(importantMatch.index);\n } else {\n newContent = content + sectionContent;\n }\n\n writeFileSync(filePath, newContent, 'utf-8');\n return true;\n}\n\n/**\n * Get predefined section template\n */\nexport function getSectionTemplate(name: string): ClaudeMdSection | null {\n return SECTION_TEMPLATES[name] || null;\n}\n\n/**\n * List available section templates\n */\nexport function listSectionTemplates(): string[] {\n return Object.keys(SECTION_TEMPLATES);\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\ninterface ProjectInfo {\n name: string;\n description?: string;\n scripts: Array<{ command: string; description: string }>;\n}\n\n/**\n * Sanitize string for safe template use\n * Prevents template injection and removes dangerous characters\n */\nfunction sanitizeForTemplate(str: string | undefined, maxLength = 200): string {\n if (!str || typeof str !== 'string') return '';\n return str\n .replace(/[<>&\"'`{}\\\\]/g, '') // Remove template-sensitive chars\n .replace(/\\{\\{/g, '') // Remove Handlebars delimiters\n .replace(/\\}\\}/g, '')\n .slice(0, maxLength)\n .trim();\n}\n\nfunction detectProjectInfo(projectRoot: string): ProjectInfo {\n const info: ProjectInfo = {\n name: sanitizeForTemplate(basename(projectRoot), 100) || 'project',\n scripts: [],\n };\n\n try {\n const pkgPath = join(projectRoot, 'package.json');\n if (existsSync(pkgPath)) {\n let pkg;\n try {\n pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n } catch {\n return info; // Return default info on JSON parse error\n }\n\n // Sanitize project name\n const rawName = (pkg.name || basename(projectRoot)).replace(/^@[^/]+\\//, '');\n info.name = sanitizeForTemplate(rawName, 100) || 'project';\n\n // Sanitize description\n info.description = sanitizeForTemplate(pkg.description, 500);\n\n // Extract common scripts (sanitize script names)\n if (pkg.scripts && typeof pkg.scripts === 'object') {\n const commonScripts = ['build', 'test', 'dev', 'start', 'lint', 'typecheck'];\n for (const script of commonScripts) {\n if (pkg.scripts[script] && typeof pkg.scripts[script] === 'string') {\n info.scripts.push({\n command: `npm run ${script}`,\n description: sanitizeForTemplate(\n getScriptDescription(script, pkg.scripts[script]),\n 200\n ),\n });\n }\n }\n }\n }\n } catch {\n // Ignore errors - return default info\n }\n\n // Add default scripts if none found\n if (info.scripts.length === 0) {\n info.scripts = [\n { command: 'npm run build', description: 'Build the project' },\n { command: 'npm run test', description: 'Run tests' },\n { command: 'npm run dev', description: 'Development mode' },\n ];\n }\n\n return info;\n}\n\nfunction getScriptDescription(name: string, script: string): string {\n const descriptions: Record<string, string> = {\n build: 'Build the project',\n test: 'Run tests',\n dev: 'Start development server',\n start: 'Start production server',\n lint: 'Run linter',\n typecheck: 'Type checking',\n };\n\n return descriptions[name] || `Run ${name}`;\n}\n\nfunction getDocsPath(projectRoot: string): string {\n const possiblePaths = ['docs', 'documentation', 'doc'];\n\n for (const path of possiblePaths) {\n if (existsSync(join(projectRoot, path))) {\n return path;\n }\n }\n\n return 'docs';\n}\n\nfunction getDefaultCodeStyleRules(): Array<{ name: string; description: string }> {\n return [\n { name: 'Modular Design', description: 'Files under 500 lines' },\n { name: 'Environment Safety', description: 'Never hardcode secrets' },\n { name: 'Test-First', description: 'Write tests before implementation' },\n { name: 'Clean Architecture', description: 'Separate concerns' },\n { name: 'Documentation', description: 'Keep docs updated' },\n ];\n}\n\nfunction getTemplateContent(templateName: string, projectRoot?: string): string {\n // Check for built-in templates\n if (templateName === 'minimal') {\n return `# {{projectName}}\n\n{{description}}\n\n## Commands\n\n{{#each buildCommands}}\n- \\`{{this.command}}\\` - {{this.description}}\n{{/each}}\n\n---\n*Generated by @weavelogic/knowledge-graph-agent*\n`;\n }\n\n if (templateName === 'full') {\n // Add all sections\n let content = DEFAULT_TEMPLATE;\n for (const section of Object.values(SECTION_TEMPLATES)) {\n content = content.replace(\n /^## Important Instructions/m,\n `## ${section.title}\\n\\n${section.content}\\n\\n## Important Instructions`\n );\n }\n return content;\n }\n\n // Try to read as file path - only if within project directory\n if (projectRoot && (templateName.includes('/') || templateName.includes('.'))) {\n const validatedPath = validateTemplatePath(projectRoot, templateName);\n if (validatedPath && existsSync(validatedPath)) {\n return readFileSync(validatedPath, 'utf-8');\n }\n }\n\n return DEFAULT_TEMPLATE;\n}\n"],"names":[],"mappings":"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"}
@@ -354,17 +354,14 @@ async function executeCultivationSwarm(tasks, result, options) {
354
354
  }
355
355
  async function executeSwarmTask(task, options) {
356
356
  return new Promise((resolve) => {
357
- const agentProcess = spawn("npx", [
358
- "claude-flow@alpha",
357
+ const agentProcess = spawn("claude-flow", [
359
358
  "agent",
360
- "spawn",
361
- "--type",
359
+ "run",
362
360
  task.agentType,
363
- "--task",
364
361
  task.prompt.slice(0, 1e3)
365
362
  // Truncate for CLI
366
363
  ], {
367
- shell: true,
364
+ shell: false,
368
365
  timeout: 12e4
369
366
  });
370
367
  let output = "";
@@ -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('npx', [\n 'claude-flow@alpha',\n 'agent',\n 'spawn',\n '--type', task.agentType,\n '--task', task.prompt.slice(0, 1000), // Truncate for CLI\n ], {\n shell: true,\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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"}
@@ -368,26 +368,35 @@ async function executeAgentTask(task, context, verbose) {
368
368
  };
369
369
  }
370
370
  async function checkClaudeFlowAvailable() {
371
- return new Promise((resolve) => {
372
- const proc = spawn("npx", ["claude-flow@alpha", "--version"], {
371
+ const tryDirect = new Promise((resolve) => {
372
+ const proc = spawn("claude-flow", ["--version"], {
373
373
  stdio: "pipe",
374
- shell: true
375
- });
376
- proc.on("close", (code) => {
377
- resolve(code === 0);
374
+ shell: false
378
375
  });
379
- proc.on("error", () => {
376
+ proc.on("close", (code) => resolve(code === 0));
377
+ proc.on("error", () => resolve(false));
378
+ setTimeout(() => {
379
+ proc.kill();
380
380
  resolve(false);
381
+ }, 5e3);
382
+ });
383
+ if (await tryDirect) return true;
384
+ return new Promise((resolve) => {
385
+ const proc = spawn("npx", ["claude-flow", "--version"], {
386
+ stdio: "pipe",
387
+ shell: false
381
388
  });
389
+ proc.on("close", (code) => resolve(code === 0));
390
+ proc.on("error", () => resolve(false));
382
391
  setTimeout(() => {
383
392
  proc.kill();
384
393
  resolve(false);
385
- }, 5e3);
394
+ }, 3e4);
386
395
  });
387
396
  }
388
397
  async function executeWithClaudeFlow(task, context, verbose) {
389
398
  return new Promise((resolve, reject) => {
390
- const agentCmd = `npx claude-flow@alpha sparc run ${task.agentType} "${task.prompt.replace(/"/g, '\\"')}"`;
399
+ const agentCmd = `claude-flow sparc ${task.agentType} "${task.prompt.replace(/"/g, '\\"')}"`;
391
400
  if (verbose) {
392
401
  console.log(`
393
402
  Spawning ${task.agentType} agent for ${task.outputFile}...`);