@weavelogic/knowledge-graph-agent 0.11.9 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/sparc.d.ts +14 -0
- package/dist/cli/commands/sparc.d.ts.map +1 -0
- package/dist/cli/commands/sparc.js +262 -0
- package/dist/cli/commands/sparc.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +7 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/node_modules/@typescript-eslint/project-service/dist/index.js +1 -1
- package/dist/node_modules/tinyglobby/dist/index.js +1 -1
- package/dist/sparc/consensus.d.ts +149 -0
- package/dist/sparc/consensus.d.ts.map +1 -0
- package/dist/sparc/consensus.js +356 -0
- package/dist/sparc/consensus.js.map +1 -0
- package/dist/sparc/decision-log.d.ts +131 -0
- package/dist/sparc/decision-log.d.ts.map +1 -0
- package/dist/sparc/decision-log.js +325 -0
- package/dist/sparc/decision-log.js.map +1 -0
- package/dist/sparc/index.d.ts +14 -0
- package/dist/sparc/index.d.ts.map +1 -0
- package/dist/sparc/index.js +15 -0
- package/dist/sparc/index.js.map +1 -0
- package/dist/sparc/review-process.d.ts +72 -0
- package/dist/sparc/review-process.d.ts.map +1 -0
- package/dist/sparc/review-process.js +609 -0
- package/dist/sparc/review-process.js.map +1 -0
- package/dist/sparc/sparc-planner.d.ts +144 -0
- package/dist/sparc/sparc-planner.d.ts.map +1 -0
- package/dist/sparc/sparc-planner.js +757 -0
- package/dist/sparc/sparc-planner.js.map +1 -0
- package/dist/sparc/types.d.ts +664 -0
- package/dist/sparc/types.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparc-planner.js","sources":["../../src/sparc/sparc-planner.ts"],"sourcesContent":["/**\n * SPARC Planner\n *\n * Main orchestrator for creating comprehensive SPARC plans.\n * Coordinates research, planning, consensus building, and review processes.\n *\n * @module sparc/sparc-planner\n */\n\nimport { existsSync, readdirSync, statSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, dirname, extname, relative } from 'path';\nimport { createLogger } from '../utils/index.js';\nimport { createDecisionLogManager, DecisionLogManager } from './decision-log.js';\nimport { createConsensusBuilder, ConsensusBuilder } from './consensus.js';\nimport { createReviewProcess, ReviewProcessManager } from './review-process.js';\nimport type {\n SPARCPlan,\n SPARCPhase,\n SPARCTask,\n SpecificationDocument,\n ArchitectureDocument,\n AlgorithmDesign,\n ExistingCodeAnalysis,\n ResearchFinding,\n Requirement,\n Feature,\n ArchitectureComponent,\n KGReference,\n ContextLink,\n ConfidenceLevel,\n ReviewResult,\n} from './types.js';\n\nconst logger = createLogger('sparc-planner');\n\n/**\n * Planner options\n */\nexport interface SPARCPlannerOptions {\n /** Project root path */\n projectRoot: string;\n /** Output directory for plan artifacts */\n outputDir?: string;\n /** Plan name */\n name: string;\n /** Plan description */\n description: string;\n /** Enable parallel research */\n parallelResearch?: boolean;\n /** Number of review passes */\n reviewPasses?: number;\n /** Auto-build consensus for low confidence */\n autoConsensus?: boolean;\n /** Knowledge graph integration */\n kgEnabled?: boolean;\n /** Vector database integration */\n vectorEnabled?: boolean;\n}\n\n/**\n * Research task definition\n */\ninterface ResearchTask {\n /** Task ID */\n id: string;\n /** Agent type */\n agentType: string;\n /** Task description */\n description: string;\n /** Topics to research */\n topics: string[];\n /** Context to include */\n context: string[];\n}\n\n/**\n * SPARC Planner\n *\n * Orchestrates the full SPARC planning process.\n */\nexport class SPARCPlanner {\n private readonly options: Required<SPARCPlannerOptions>;\n private plan: SPARCPlan;\n private decisionLog: DecisionLogManager;\n private consensusBuilder: ConsensusBuilder;\n\n constructor(options: SPARCPlannerOptions) {\n this.options = {\n outputDir: join(options.projectRoot, '.sparc'),\n parallelResearch: true,\n reviewPasses: 3,\n autoConsensus: true,\n kgEnabled: true,\n vectorEnabled: true,\n ...options,\n };\n\n // Initialize plan\n this.plan = this.initializePlan();\n\n // Initialize decision log\n this.decisionLog = createDecisionLogManager({\n outputDir: this.options.outputDir,\n planId: this.plan.id,\n });\n\n // Initialize consensus builder\n this.consensusBuilder = createConsensusBuilder({\n defaultThreshold: 0.67,\n method: 'majority',\n });\n\n logger.info('SPARC Planner initialized', {\n planId: this.plan.id,\n projectRoot: this.options.projectRoot,\n });\n }\n\n /**\n * Initialize a new plan\n */\n private initializePlan(): SPARCPlan {\n const now = new Date();\n const id = `plan_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;\n\n return {\n id,\n name: this.options.name,\n description: this.options.description,\n status: 'draft',\n currentPhase: 'specification',\n projectRoot: this.options.projectRoot,\n outputDir: this.options.outputDir,\n tasks: [],\n parallelGroups: [],\n criticalPath: [],\n executionOrder: [],\n researchFindings: [],\n decisionLog: {\n id: `dlog_${id}`,\n planId: id,\n decisions: [],\n statistics: {\n total: 0,\n approved: 0,\n rejected: 0,\n deferred: 0,\n highConfidence: 0,\n lowConfidence: 0,\n consensusRequired: 0,\n },\n createdAt: now,\n updatedAt: now,\n },\n createdAt: now,\n updatedAt: now,\n version: '1.0.0',\n author: 'sparc-planner',\n statistics: {\n totalTasks: 0,\n completedTasks: 0,\n parallelizableTasks: 0,\n estimatedHours: 0,\n researchFindings: 0,\n decisions: 0,\n kgNodes: 0,\n },\n };\n }\n\n /**\n * Execute the full planning process\n */\n async executePlanning(): Promise<SPARCPlan> {\n logger.info('Starting SPARC planning process', { planId: this.plan.id });\n\n try {\n // Phase 1: Research\n this.plan.status = 'researching';\n await this.executeResearchPhase();\n\n // Phase 2: Planning (Specification, Pseudocode, Architecture)\n this.plan.status = 'planning';\n await this.executeSpecificationPhase();\n await this.executePseudocodePhase();\n await this.executeArchitecturePhase();\n\n // Phase 3: Refinement (Task breakdown)\n await this.executeRefinementPhase();\n\n // Phase 4: Review\n this.plan.status = 'reviewing';\n const reviewResult = await this.executeReviewPhase();\n this.plan.reviewResult = reviewResult;\n\n // Finalize\n if (reviewResult.overallStatus === 'approved') {\n this.plan.status = 'approved';\n } else if (reviewResult.overallStatus === 'rejected') {\n this.plan.status = 'failed';\n } else {\n this.plan.status = 'planning'; // Needs more work\n }\n\n // Update statistics\n this.updateStatistics();\n\n // Save plan\n this.savePlan();\n\n logger.info('SPARC planning completed', {\n planId: this.plan.id,\n status: this.plan.status,\n tasks: this.plan.tasks.length,\n });\n\n return this.plan;\n } catch (error) {\n this.plan.status = 'failed';\n logger.error('SPARC planning failed', error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n }\n\n /**\n * Execute research phase\n */\n private async executeResearchPhase(): Promise<void> {\n logger.info('Executing research phase');\n this.plan.currentPhase = 'specification';\n\n // Analyze existing code if present\n const srcPath = join(this.options.projectRoot, 'src');\n if (existsSync(srcPath)) {\n this.plan.existingCode = await this.analyzeExistingCode(srcPath);\n this.addDecision(\n 'Existing Code Integration',\n 'Integrate with existing codebase in src/',\n 'specification',\n 'high',\n 'Existing code found and analyzed for patterns and integration points',\n ['Start from scratch', 'Partial rewrite', 'Full integration']\n );\n }\n\n // Define research tasks\n const researchTasks = this.defineResearchTasks();\n\n // Execute research (would spawn agents in real implementation)\n for (const task of researchTasks) {\n const finding = await this.executeResearchTask(task);\n this.plan.researchFindings.push(finding);\n }\n\n logger.info('Research phase completed', {\n findings: this.plan.researchFindings.length,\n hasExistingCode: !!this.plan.existingCode,\n });\n }\n\n /**\n * Analyze existing code in src directory\n */\n private async analyzeExistingCode(srcPath: string): Promise<ExistingCodeAnalysis> {\n const analysis: ExistingCodeAnalysis = {\n hasSrcDirectory: true,\n srcPath,\n fileCount: 0,\n languages: {},\n keyFiles: [],\n patterns: [],\n dependencies: [],\n entryPoints: [],\n };\n\n // Recursively analyze files\n const analyzeDir = (dir: string) => {\n const entries = readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n\n if (stat.isDirectory()) {\n if (!entry.startsWith('.') && entry !== 'node_modules') {\n analyzeDir(fullPath);\n }\n } else if (stat.isFile()) {\n analysis.fileCount++;\n\n const ext = extname(entry);\n analysis.languages[ext] = (analysis.languages[ext] || 0) + 1;\n\n // Identify key files\n if (entry === 'index.ts' || entry === 'index.js') {\n analysis.entryPoints.push(relative(this.options.projectRoot, fullPath));\n }\n\n if (entry === 'package.json') {\n try {\n const pkg = JSON.parse(readFileSync(fullPath, 'utf-8'));\n analysis.dependencies = Object.keys(pkg.dependencies || {});\n } catch {\n // Ignore parse errors\n }\n }\n }\n }\n };\n\n analyzeDir(srcPath);\n\n // Identify patterns from file structure\n if (analysis.languages['.ts'] > 0 || analysis.languages['.tsx'] > 0) {\n analysis.patterns.push('TypeScript');\n }\n if (existsSync(join(this.options.projectRoot, 'tests')) ||\n existsSync(join(this.options.projectRoot, '__tests__'))) {\n analysis.patterns.push('Test-Driven Development');\n analysis.testCoverage = { hasTests: true };\n }\n\n return analysis;\n }\n\n /**\n * Define research tasks\n */\n private defineResearchTasks(): ResearchTask[] {\n return [\n {\n id: 'research-requirements',\n agentType: 'researcher',\n description: 'Research and analyze project requirements',\n topics: ['functional requirements', 'non-functional requirements', 'constraints'],\n context: [this.options.description],\n },\n {\n id: 'research-patterns',\n agentType: 'researcher',\n description: 'Research applicable design patterns',\n topics: ['design patterns', 'architecture patterns', 'best practices'],\n context: this.plan.existingCode?.patterns || [],\n },\n {\n id: 'research-technology',\n agentType: 'researcher',\n description: 'Research technology choices and alternatives',\n topics: ['technology stack', 'frameworks', 'libraries'],\n context: this.plan.existingCode?.dependencies || [],\n },\n ];\n }\n\n /**\n * Execute a research task (stub - would spawn agent)\n */\n private async executeResearchTask(task: ResearchTask): Promise<ResearchFinding> {\n // In real implementation, this would spawn a researcher agent\n return {\n id: `finding_${task.id}`,\n agent: task.agentType,\n topic: task.topics[0],\n summary: `Research findings for ${task.description}`,\n details: `Detailed research results for topics: ${task.topics.join(', ')}`,\n confidence: 'medium' as ConfidenceLevel,\n evidence: task.context,\n relatedFindings: [],\n kgReferences: [],\n timestamp: new Date(),\n };\n }\n\n /**\n * Execute specification phase\n */\n private async executeSpecificationPhase(): Promise<void> {\n logger.info('Executing specification phase');\n this.plan.currentPhase = 'specification';\n\n // Build specification document\n const spec: SpecificationDocument = {\n id: `spec_${this.plan.id}`,\n projectName: this.options.name,\n version: '1.0.0',\n createdAt: new Date(),\n updatedAt: new Date(),\n summary: this.options.description,\n problemStatement: this.extractProblemStatement(),\n goals: this.extractGoals(),\n requirements: this.generateRequirements(),\n features: this.generateFeatures(),\n constraints: this.extractConstraints(),\n assumptions: [],\n outOfScope: [],\n successMetrics: this.generateSuccessMetrics(),\n kgReferences: [],\n };\n\n this.plan.specification = spec;\n\n // Log decision about requirements\n this.addDecision(\n 'Requirements Definition',\n `Defined ${spec.requirements.length} requirements and ${spec.features.length} features`,\n 'specification',\n 'high',\n 'Requirements derived from research findings and project description'\n );\n\n logger.info('Specification phase completed', {\n requirements: spec.requirements.length,\n features: spec.features.length,\n });\n }\n\n /**\n * Execute pseudocode phase\n */\n private async executePseudocodePhase(): Promise<void> {\n logger.info('Executing pseudocode phase');\n this.plan.currentPhase = 'pseudocode';\n\n // Generate algorithm designs for each feature\n const algorithms: AlgorithmDesign[] = [];\n\n for (const feature of this.plan.specification?.features || []) {\n const algorithm = this.generateAlgorithmDesign(feature);\n algorithms.push(algorithm);\n }\n\n this.plan.algorithms = algorithms;\n\n logger.info('Pseudocode phase completed', {\n algorithms: algorithms.length,\n });\n }\n\n /**\n * Execute architecture phase\n */\n private async executeArchitecturePhase(): Promise<void> {\n logger.info('Executing architecture phase');\n this.plan.currentPhase = 'architecture';\n\n // Build architecture document\n const arch: ArchitectureDocument = {\n id: `arch_${this.plan.id}`,\n version: '1.0.0',\n createdAt: new Date(),\n overview: this.generateArchitectureOverview(),\n patterns: this.identifyArchitecturePatterns(),\n components: this.generateComponents(),\n decisions: [],\n dataFlow: this.describeDataFlow(),\n securityConsiderations: this.identifySecurityConsiderations(),\n scalabilityConsiderations: [],\n diagrams: [],\n };\n\n this.plan.architecture = arch;\n\n // Log architecture decision\n this.addDecision(\n 'Architecture Design',\n `Defined ${arch.components.length} components using ${arch.patterns.join(', ')} patterns`,\n 'architecture',\n 'medium',\n 'Architecture designed based on requirements and existing patterns',\n ['Microservices', 'Monolith', 'Modular monolith']\n );\n\n logger.info('Architecture phase completed', {\n components: arch.components.length,\n patterns: arch.patterns.length,\n });\n }\n\n /**\n * Execute refinement phase (task breakdown)\n */\n private async executeRefinementPhase(): Promise<void> {\n logger.info('Executing refinement phase');\n this.plan.currentPhase = 'refinement';\n\n // Generate tasks from features and components\n const tasks: SPARCTask[] = [];\n\n // Research tasks\n tasks.push(this.createTask(\n 'Research and Analysis',\n 'Comprehensive research on project requirements and patterns',\n 'specification',\n 'research',\n 'high',\n 4\n ));\n\n // Implementation tasks for each component\n for (const component of this.plan.architecture?.components || []) {\n tasks.push(this.createTask(\n `Implement ${component.name}`,\n `Implement the ${component.name} component: ${component.description}`,\n 'refinement',\n 'implementation',\n this.getComponentPriority(component),\n this.estimateComponentHours(component)\n ));\n }\n\n // Testing tasks\n tasks.push(this.createTask(\n 'Unit Testing',\n 'Create comprehensive unit tests for all components',\n 'refinement',\n 'testing',\n 'high',\n 8\n ));\n\n tasks.push(this.createTask(\n 'Integration Testing',\n 'Create integration tests for component interactions',\n 'refinement',\n 'testing',\n 'medium',\n 6\n ));\n\n // Documentation tasks\n tasks.push(this.createTask(\n 'API Documentation',\n 'Document all public APIs and interfaces',\n 'completion',\n 'documentation',\n 'medium',\n 4\n ));\n\n this.plan.tasks = tasks;\n\n // Calculate parallel groups and critical path\n this.calculateParallelGroups();\n this.calculateCriticalPath();\n\n logger.info('Refinement phase completed', {\n tasks: tasks.length,\n parallelGroups: this.plan.parallelGroups.length,\n });\n }\n\n /**\n * Execute review phase\n */\n private async executeReviewPhase(): Promise<ReviewResult> {\n logger.info('Executing review phase');\n this.plan.currentPhase = 'completion';\n\n // Sync decision log\n this.plan.decisionLog = this.decisionLog.getLog();\n\n // Create review process\n const reviewProcess = createReviewProcess({\n plan: this.plan,\n passes: this.options.reviewPasses,\n autoFix: false,\n strictMode: false,\n });\n\n // Execute review\n const result = await reviewProcess.executeReview();\n\n logger.info('Review phase completed', {\n status: result.overallStatus,\n totalFindings: result.totalFindings,\n criticalFindings: result.criticalFindings,\n });\n\n return result;\n }\n\n /**\n * Add a decision to the log\n */\n private addDecision(\n title: string,\n description: string,\n phase: SPARCPhase,\n confidence: ConfidenceLevel,\n rationale: string,\n alternatives?: string[]\n ): void {\n const decision = this.decisionLog.addDecision({\n title,\n description,\n phase,\n confidence,\n rationale,\n alternatives,\n decidedBy: 'sparc-planner',\n });\n\n // Build consensus if needed\n if (this.options.autoConsensus && ConsensusBuilder.needsConsensus(confidence)) {\n logger.info('Building consensus for low-confidence decision', {\n decisionId: decision.id,\n confidence,\n });\n // In real implementation, would spawn agents for consensus\n }\n }\n\n /**\n * Create a SPARC task\n */\n private createTask(\n name: string,\n description: string,\n phase: SPARCPhase,\n type: SPARCTask['type'],\n priority: SPARCTask['priority'],\n estimatedHours: number\n ): SPARCTask {\n return {\n id: `task_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`,\n name,\n description,\n phase,\n type,\n priority,\n estimatedHours,\n dependencies: [],\n parallelizable: type === 'implementation' || type === 'testing',\n status: 'pending',\n contextLinks: [],\n kgReferences: [],\n };\n }\n\n /**\n * Calculate parallel task groups\n */\n private calculateParallelGroups(): void {\n const parallelizable = this.plan.tasks.filter(t => t.parallelizable);\n\n // Group by phase\n const groups: string[][] = [];\n const phases = ['specification', 'pseudocode', 'architecture', 'refinement', 'completion'];\n\n for (const phase of phases) {\n const phaseTasks = parallelizable.filter(t => t.phase === phase);\n if (phaseTasks.length > 0) {\n groups.push(phaseTasks.map(t => t.id));\n }\n }\n\n this.plan.parallelGroups = groups;\n }\n\n /**\n * Calculate critical path\n */\n private calculateCriticalPath(): void {\n // Simple critical path: high priority tasks in order\n const critical = this.plan.tasks\n .filter(t => t.priority === 'critical' || t.priority === 'high')\n .sort((a, b) => {\n const phaseOrder = ['specification', 'pseudocode', 'architecture', 'refinement', 'completion'];\n return phaseOrder.indexOf(a.phase) - phaseOrder.indexOf(b.phase);\n })\n .map(t => t.id);\n\n this.plan.criticalPath = critical;\n this.plan.executionOrder = this.plan.tasks.map(t => t.id);\n }\n\n /**\n * Update plan statistics\n */\n private updateStatistics(): void {\n this.plan.statistics = {\n totalTasks: this.plan.tasks.length,\n completedTasks: this.plan.tasks.filter(t => t.status === 'completed').length,\n parallelizableTasks: this.plan.tasks.filter(t => t.parallelizable).length,\n estimatedHours: this.plan.tasks.reduce((sum, t) => sum + t.estimatedHours, 0),\n researchFindings: this.plan.researchFindings.length,\n decisions: this.decisionLog.getDecisions().length,\n kgNodes: this.plan.tasks.reduce((sum, t) => sum + (t.kgReferences?.length || 0), 0),\n };\n this.plan.updatedAt = new Date();\n }\n\n /**\n * Save plan to disk\n */\n savePlan(): void {\n const dir = this.options.outputDir;\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n // Save JSON plan\n const planPath = join(dir, 'sparc-plan.json');\n writeFileSync(planPath, JSON.stringify(this.plan, null, 2));\n\n // Save markdown summary\n const mdPath = join(dir, 'sparc-plan.md');\n writeFileSync(mdPath, this.generateMarkdownSummary());\n\n // Save decision log\n this.decisionLog.save();\n this.decisionLog.saveMarkdown();\n\n logger.info('Plan saved', { dir });\n }\n\n /**\n * Generate markdown summary\n */\n private generateMarkdownSummary(): string {\n const lines: string[] = [\n `# SPARC Plan: ${this.plan.name}`,\n '',\n `**Status:** ${this.plan.status}`,\n `**Version:** ${this.plan.version}`,\n `**Created:** ${this.plan.createdAt.toISOString()}`,\n '',\n '## Summary',\n '',\n this.plan.description,\n '',\n '## Statistics',\n '',\n `| Metric | Value |`,\n `|--------|-------|`,\n `| Total Tasks | ${this.plan.statistics.totalTasks} |`,\n `| Parallelizable | ${this.plan.statistics.parallelizableTasks} |`,\n `| Estimated Hours | ${this.plan.statistics.estimatedHours} |`,\n `| Research Findings | ${this.plan.statistics.researchFindings} |`,\n `| Decisions | ${this.plan.statistics.decisions} |`,\n '',\n ];\n\n // Specification summary\n if (this.plan.specification) {\n lines.push('## Specification');\n lines.push('');\n lines.push(`- **Requirements:** ${this.plan.specification.requirements.length}`);\n lines.push(`- **Features:** ${this.plan.specification.features.length}`);\n lines.push('');\n }\n\n // Architecture summary\n if (this.plan.architecture) {\n lines.push('## Architecture');\n lines.push('');\n lines.push(`- **Components:** ${this.plan.architecture.components.length}`);\n lines.push(`- **Patterns:** ${this.plan.architecture.patterns.join(', ')}`);\n lines.push('');\n }\n\n // Tasks\n lines.push('## Tasks');\n lines.push('');\n for (const task of this.plan.tasks) {\n lines.push(`### ${task.name}`);\n lines.push('');\n lines.push(`- **Phase:** ${task.phase}`);\n lines.push(`- **Type:** ${task.type}`);\n lines.push(`- **Priority:** ${task.priority}`);\n lines.push(`- **Estimated:** ${task.estimatedHours}h`);\n lines.push(`- **Parallelizable:** ${task.parallelizable ? 'Yes' : 'No'}`);\n lines.push('');\n lines.push(task.description);\n lines.push('');\n }\n\n // Review result\n if (this.plan.reviewResult) {\n lines.push('## Review Result');\n lines.push('');\n lines.push(`- **Status:** ${this.plan.reviewResult.overallStatus}`);\n lines.push(`- **Total Findings:** ${this.plan.reviewResult.totalFindings}`);\n lines.push(`- **Critical Findings:** ${this.plan.reviewResult.criticalFindings}`);\n lines.push('');\n\n if (this.plan.reviewResult.recommendations.length > 0) {\n lines.push('### Recommendations');\n lines.push('');\n for (const rec of this.plan.reviewResult.recommendations) {\n lines.push(`- ${rec}`);\n }\n lines.push('');\n }\n }\n\n return lines.join('\\n');\n }\n\n // Helper methods for content generation\n\n private extractProblemStatement(): string {\n return `Problem to solve: ${this.options.description}`;\n }\n\n private extractGoals(): string[] {\n return [\n 'Implement all specified features',\n 'Ensure code quality and maintainability',\n 'Provide comprehensive documentation',\n 'Enable parallel development where possible',\n ];\n }\n\n private generateRequirements(): Requirement[] {\n // Generate basic requirements from description\n return [\n {\n id: 'req-001',\n type: 'functional',\n description: 'Core functionality as described',\n priority: 'must-have',\n source: 'User request',\n acceptanceCriteria: ['Feature works as specified'],\n relatedRequirements: [],\n },\n {\n id: 'req-002',\n type: 'non-functional',\n description: 'Code must be well-documented',\n priority: 'should-have',\n source: 'Best practices',\n acceptanceCriteria: ['API documentation exists'],\n relatedRequirements: [],\n },\n {\n id: 'req-003',\n type: 'non-functional',\n description: 'Test coverage must be adequate',\n priority: 'should-have',\n source: 'Best practices',\n acceptanceCriteria: ['Unit tests exist for core functionality'],\n relatedRequirements: [],\n },\n ];\n }\n\n private generateFeatures(): Feature[] {\n return [\n {\n id: 'feat-001',\n name: 'Core Implementation',\n description: 'Main feature implementation',\n userStories: [`As a user, I want ${this.options.description}`],\n requirements: ['req-001'],\n complexity: 'medium',\n dependencies: [],\n parallelizable: true,\n },\n ];\n }\n\n private extractConstraints(): string[] {\n return [\n 'Must follow existing code patterns if present',\n 'Must maintain backwards compatibility',\n ];\n }\n\n private generateSuccessMetrics(): string[] {\n return [\n 'All tests pass',\n 'Documentation is complete',\n 'Code review approved',\n ];\n }\n\n private generateAlgorithmDesign(feature: Feature): AlgorithmDesign {\n return {\n id: `algo_${feature.id}`,\n name: `${feature.name} Algorithm`,\n purpose: feature.description,\n steps: [\n {\n step: 1,\n description: 'Initialize',\n pseudocode: '// Initialize component',\n inputs: [],\n outputs: [],\n },\n {\n step: 2,\n description: 'Process',\n pseudocode: '// Process input',\n inputs: ['input'],\n outputs: ['result'],\n },\n {\n step: 3,\n description: 'Return',\n pseudocode: '// Return result',\n inputs: ['result'],\n outputs: ['output'],\n },\n ],\n timeComplexity: 'O(n)',\n spaceComplexity: 'O(1)',\n edgeCases: ['Empty input', 'Invalid input'],\n relatedFeatures: [feature.id],\n };\n }\n\n private generateArchitectureOverview(): string {\n return `Architecture for ${this.options.name}: ${this.options.description}`;\n }\n\n private identifyArchitecturePatterns(): string[] {\n const patterns: string[] = ['Modular'];\n\n if (this.plan.existingCode?.patterns.includes('TypeScript')) {\n patterns.push('Type-Safe');\n }\n if (this.plan.existingCode?.patterns.includes('Test-Driven Development')) {\n patterns.push('TDD');\n }\n\n return patterns;\n }\n\n private generateComponents(): ArchitectureComponent[] {\n return [\n {\n id: 'comp-core',\n name: 'Core Module',\n type: 'module',\n description: 'Core functionality module',\n responsibilities: ['Main feature implementation'],\n interfaces: [],\n dependencies: [],\n technologies: ['TypeScript'],\n },\n {\n id: 'comp-api',\n name: 'API Layer',\n type: 'api',\n description: 'Public API interface',\n responsibilities: ['Expose public API'],\n interfaces: [],\n dependencies: ['comp-core'],\n technologies: ['TypeScript'],\n },\n ];\n }\n\n private describeDataFlow(): string {\n return 'Input -> API Layer -> Core Module -> Output';\n }\n\n private identifySecurityConsiderations(): string[] {\n return [\n 'Input validation',\n 'Error handling',\n ];\n }\n\n private getComponentPriority(component: ArchitectureComponent): SPARCTask['priority'] {\n if (component.dependencies.length === 0) return 'high';\n return 'medium';\n }\n\n private estimateComponentHours(component: ArchitectureComponent): number {\n const base = 4;\n const depFactor = component.dependencies.length * 2;\n return base + depFactor;\n }\n\n /**\n * Get the current plan\n */\n getPlan(): SPARCPlan {\n return this.plan;\n }\n\n /**\n * Get decision log manager\n */\n getDecisionLog(): DecisionLogManager {\n return this.decisionLog;\n }\n}\n\n/**\n * Create a SPARC planner\n */\nexport function createSPARCPlanner(options: SPARCPlannerOptions): SPARCPlanner {\n return new SPARCPlanner(options);\n}\n"],"names":[],"mappings":"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"}
|