claude-flow-novice 1.3.0 → 1.3.2
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/.claude-flow-novice/preferences/generation.json +147 -0
- package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
- package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
- package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
- package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
- package/.claude-flow-novice/preferences/project-local.json +91 -0
- package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
- package/.claude-flow-novice/preferences/team-shared.json +195 -0
- package/.claude-flow-novice/preferences/user-global.json +247 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
- package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
- package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
- package/CLAUDE.md +81 -0
- package/README-NPM.md +0 -0
- package/package.json +11 -7
- package/scripts/build/README.md +167 -0
- package/scripts/build/build-config.js +27 -0
- package/scripts/build/build-prompt-copier.sh +30 -0
- package/scripts/build/performance-monitor.js +869 -0
- package/scripts/build/prepare-publish.js +150 -0
- package/scripts/build/typescript-fixer.js +621 -0
- package/scripts/build/unified-builder.sh +428 -0
- package/scripts/build/update-bin-version.js +32 -0
- package/scripts/dev/README.md +264 -0
- package/scripts/dev/claude-flow-wrapper.sh +35 -0
- package/scripts/dev/claude-monitor.py +419 -0
- package/scripts/dev/claude-sparc.sh +562 -0
- package/scripts/dev/claude-wrapper.sh +17 -0
- package/scripts/dev/demo-phase3-compliance.js +172 -0
- package/scripts/dev/demo-task-system.ts +224 -0
- package/scripts/dev/deployment-validator.js +315 -0
- package/scripts/dev/spawn-claude-terminal.sh +32 -0
- package/scripts/dev/start-portal.sh +506 -0
- package/scripts/dev/start-web-ui.js +15 -0
- package/scripts/dev/stop-portal.sh +311 -0
- package/scripts/dev/validate-examples.ts +288 -0
- package/scripts/dev/validate-phase2.cjs +451 -0
- package/scripts/dev/validate-phase2.js +785 -0
- package/scripts/dev/validate-phase3.cjs +208 -0
- package/scripts/dev/validate-security-remediation.js +1 -0
- package/scripts/legacy/README.md +272 -0
- package/scripts/legacy/batch-fix-ts.sh +54 -0
- package/scripts/legacy/build-migration.sh +105 -0
- package/scripts/legacy/build-monitor.js +209 -0
- package/scripts/legacy/build-with-filter.sh +84 -0
- package/scripts/legacy/build-workaround.sh +71 -0
- package/scripts/legacy/fix-ts-advanced.js +358 -0
- package/scripts/legacy/fix-ts-final.sh +50 -0
- package/scripts/legacy/fix-ts-targeted.sh +49 -0
- package/scripts/legacy/fix-typescript-errors.js +305 -0
- package/scripts/legacy/force-build.sh +63 -0
- package/scripts/legacy/optimize-performance.js +400 -0
- package/scripts/legacy/performance-monitor.js +263 -0
- package/scripts/legacy/performance-monitoring.js +532 -0
- package/scripts/legacy/performance-test-runner.js +645 -0
- package/scripts/legacy/quick-fix-ts.js +281 -0
- package/scripts/legacy/safe-build.sh +63 -0
- package/scripts/migration/README.md +434 -0
- package/scripts/migration/install-arm64.js +78 -0
- package/scripts/migration/install.js +83 -0
- package/scripts/migration/migrate-hooks.js +173 -0
- package/scripts/migration/migration-examples.ts +318 -0
- package/scripts/optimization/build-optimizer.js +438 -0
- package/scripts/optimization/config-validator.js +761 -0
- package/scripts/optimization/test-optimization.js +432 -0
- package/scripts/optimization/unified-activation.js +839 -0
- package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
- package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
- package/scripts/performance/test-enhanced-backend.sh +504 -0
- package/scripts/performance-test-runner.js +698 -0
- package/scripts/security/README.md +339 -0
- package/scripts/security/install-git-hooks.sh +132 -0
- package/scripts/security/ruv-swarm-safe.js +74 -0
- package/scripts/test/README.md +236 -0
- package/scripts/test/check-links.ts +274 -0
- package/scripts/test/check-performance-regression.ts +168 -0
- package/scripts/test/coverage-report.ts +692 -0
- package/scripts/test/generate-swarm-tests.js +633 -0
- package/scripts/test/integration-test-validation.cjs +253 -0
- package/scripts/test/load-test-swarm.js +576 -0
- package/scripts/test/run-phase3-compliance-tests.js +427 -0
- package/scripts/test/test-batch-tasks.ts +29 -0
- package/scripts/test/test-byzantine-resolution.js +246 -0
- package/scripts/test/test-claude-spawn-options.sh +63 -0
- package/scripts/test/test-cli-wizard.js +331 -0
- package/scripts/test/test-comprehensive.js +401 -0
- package/scripts/test/test-coordination-features.ts +238 -0
- package/scripts/test/test-fallback-systems.js +276 -0
- package/scripts/test/test-init-command.ts +302 -0
- package/scripts/test/test-mcp.ts +251 -0
- package/scripts/test/test-runner.ts +568 -0
- package/scripts/test/test-swarm-integration.sh +92 -0
- package/scripts/test/test-swarm.ts +142 -0
- package/scripts/test/validation-summary.ts +408 -0
- package/scripts/utils/README.md +261 -0
- package/scripts/utils/clean-build-artifacts.sh +94 -0
- package/scripts/utils/cleanup-root.sh +69 -0
- package/scripts/utils/fix-cliffy-imports.js +307 -0
- package/scripts/utils/fix-duplicate-imports.js +114 -0
- package/scripts/utils/fix-error-handling.cjs +70 -0
- package/scripts/utils/fix-import-paths.js +104 -0
- package/scripts/utils/fix-imports.js +116 -0
- package/scripts/utils/fix-shebang.js +78 -0
- package/scripts/utils/fix-test-modules.js +27 -0
- package/scripts/utils/fix-timezone-issue-246.js +200 -0
- package/scripts/utils/fix-ts-comprehensive.py +182 -0
- package/scripts/utils/fix-ts-targeted-batch.js +250 -0
- package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
- package/scripts/utils/simple-test-fixer.js +190 -0
- package/scripts/utils/validate-metrics-structure.cjs +144 -0
- package/scripts/verify-mcp-server.js +86 -0
- package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
- package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
- package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
- package/src/cli/simple-commands/__tests__/task.test.js +8 -0
- package/src/cli/simple-commands/agent.js +216 -0
- package/src/cli/simple-commands/analysis.js +570 -0
- package/src/cli/simple-commands/automation-executor.js +1603 -0
- package/src/cli/simple-commands/automation.js +627 -0
- package/src/cli/simple-commands/batch-manager.js +338 -0
- package/src/cli/simple-commands/claude-telemetry.js +311 -0
- package/src/cli/simple-commands/claude-track.js +102 -0
- package/src/cli/simple-commands/concurrent-display.js +348 -0
- package/src/cli/simple-commands/config.js +319 -0
- package/src/cli/simple-commands/coordination.js +307 -0
- package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
- package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
- package/src/cli/simple-commands/fix-hook-variables.js +363 -0
- package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
- package/src/cli/simple-commands/github/github-api.js +624 -0
- package/src/cli/simple-commands/github/init.js +543 -0
- package/src/cli/simple-commands/github.js +377 -0
- package/src/cli/simple-commands/goal.js +145 -0
- package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
- package/src/cli/simple-commands/hive-mind/communication.js +740 -0
- package/src/cli/simple-commands/hive-mind/core.js +1031 -0
- package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
- package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
- package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
- package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
- package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
- package/src/cli/simple-commands/hive-mind/queen.js +809 -0
- package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
- package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
- package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
- package/src/cli/simple-commands/hive-mind.js +3112 -0
- package/src/cli/simple-commands/hive.js +140 -0
- package/src/cli/simple-commands/hook-safety.js +671 -0
- package/src/cli/simple-commands/hooks.js +1268 -0
- package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
- package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
- package/src/cli/simple-commands/init/README.md +106 -0
- package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
- package/src/cli/simple-commands/init/agent-copier.js +347 -0
- package/src/cli/simple-commands/init/batch-init.js +663 -0
- package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
- package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
- package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
- package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
- package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
- package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
- package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
- package/src/cli/simple-commands/init/help.js +110 -0
- package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
- package/src/cli/simple-commands/init/index.js +1953 -0
- package/src/cli/simple-commands/init/performance-monitor.js +344 -0
- package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
- package/src/cli/simple-commands/init/rollback/index.js +399 -0
- package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
- package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
- package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
- package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
- package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
- package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
- package/src/cli/simple-commands/init/sparc-structure.js +68 -0
- package/src/cli/simple-commands/init/template-copier.js +640 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
- package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
- package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
- package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
- package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
- package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
- package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
- package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
- package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
- package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
- package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
- package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
- package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
- package/src/cli/simple-commands/init/templates/coordination.md +16 -0
- package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
- package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
- package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
- package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
- package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
- package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
- package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
- package/src/cli/simple-commands/init/templates/settings.json +109 -0
- package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
- package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
- package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
- package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
- package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
- package/src/cli/simple-commands/init/validation/index.js +388 -0
- package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
- package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
- package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
- package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
- package/src/cli/simple-commands/init.js +4 -0
- package/src/cli/simple-commands/mcp-health.js +163 -0
- package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
- package/src/cli/simple-commands/mcp.js +420 -0
- package/src/cli/simple-commands/memory-consolidation.js +631 -0
- package/src/cli/simple-commands/memory.js +345 -0
- package/src/cli/simple-commands/migrate-hooks.js +63 -0
- package/src/cli/simple-commands/monitor.js +417 -0
- package/src/cli/simple-commands/neural.js +148 -0
- package/src/cli/simple-commands/pair-autofix-only.js +755 -0
- package/src/cli/simple-commands/pair-basic.js +751 -0
- package/src/cli/simple-commands/pair-old.js +623 -0
- package/src/cli/simple-commands/pair-working.js +849 -0
- package/src/cli/simple-commands/pair.js +849 -0
- package/src/cli/simple-commands/performance-hooks.js +149 -0
- package/src/cli/simple-commands/performance-metrics.js +601 -0
- package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
- package/src/cli/simple-commands/process-ui.js +274 -0
- package/src/cli/simple-commands/realtime-update-system.js +659 -0
- package/src/cli/simple-commands/sparc/architecture.js +1750 -0
- package/src/cli/simple-commands/sparc/commands.js +575 -0
- package/src/cli/simple-commands/sparc/completion.js +1831 -0
- package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
- package/src/cli/simple-commands/sparc/index.js +321 -0
- package/src/cli/simple-commands/sparc/phase-base.js +430 -0
- package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
- package/src/cli/simple-commands/sparc/refinement.js +1856 -0
- package/src/cli/simple-commands/sparc/specification.js +736 -0
- package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
- package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
- package/src/cli/simple-commands/sparc-modes/code.js +148 -0
- package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
- package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
- package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
- package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
- package/src/cli/simple-commands/sparc-modes/index.js +201 -0
- package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
- package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
- package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
- package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
- package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
- package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
- package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
- package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
- package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
- package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
- package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
- package/src/cli/simple-commands/sparc.js +530 -0
- package/src/cli/simple-commands/start-ui.js +147 -0
- package/src/cli/simple-commands/start-wrapper.js +285 -0
- package/src/cli/simple-commands/start.js +2 -0
- package/src/cli/simple-commands/status.js +303 -0
- package/src/cli/simple-commands/stream-chain-clean.js +221 -0
- package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
- package/src/cli/simple-commands/stream-chain-real.js +408 -0
- package/src/cli/simple-commands/stream-chain-working.js +323 -0
- package/src/cli/simple-commands/stream-chain.js +491 -0
- package/src/cli/simple-commands/stream-processor.js +340 -0
- package/src/cli/simple-commands/swarm-executor.js +253 -0
- package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
- package/src/cli/simple-commands/swarm-ui.js +741 -0
- package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
- package/src/cli/simple-commands/swarm.js +2277 -0
- package/src/cli/simple-commands/task.js +228 -0
- package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
- package/src/cli/simple-commands/timestamp-fix.js +104 -0
- package/src/cli/simple-commands/token-tracker.js +372 -0
- package/src/cli/simple-commands/tool-execution-framework.js +555 -0
- package/src/cli/simple-commands/train-and-stream.js +354 -0
- package/src/cli/simple-commands/training-pipeline.js +874 -0
- package/src/cli/simple-commands/training.js +288 -0
- package/src/cli/simple-commands/verification-hooks.js +336 -0
- package/src/cli/simple-commands/verification-integration.js +464 -0
- package/src/cli/simple-commands/verification-training-integration.js +646 -0
- package/src/cli/simple-commands/verification.js +551 -0
- package/src/cli/simple-commands/web-server.js +929 -0
- package/src/cli/simple-commands/webui-validator.js +136 -0
- package/src/language/README.md +503 -0
- package/src/language/claude-md-generator.js +618 -0
- package/src/language/cli.js +422 -0
- package/src/language/example.js +347 -0
- package/src/language/integration-system.js +619 -0
- package/src/language/language-detector.js +581 -0
|
@@ -0,0 +1,736 @@
|
|
|
1
|
+
// SPARC Specification Phase
|
|
2
|
+
// Gather requirements, define acceptance criteria, and establish project scope
|
|
3
|
+
|
|
4
|
+
import { SparcPhase } from './phase-base.js';
|
|
5
|
+
|
|
6
|
+
export class SparcSpecification extends SparcPhase {
|
|
7
|
+
constructor(taskDescription, options) {
|
|
8
|
+
super('specification', taskDescription, options);
|
|
9
|
+
this.requirements = [];
|
|
10
|
+
this.acceptanceCriteria = [];
|
|
11
|
+
this.userStories = [];
|
|
12
|
+
this.constraints = [];
|
|
13
|
+
this.assumptions = [];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Execute specification phase
|
|
18
|
+
*/
|
|
19
|
+
async execute() {
|
|
20
|
+
console.log('📋 Starting Specification Phase');
|
|
21
|
+
|
|
22
|
+
await this.initializePhase();
|
|
23
|
+
|
|
24
|
+
const result = {
|
|
25
|
+
requirements: [],
|
|
26
|
+
acceptanceCriteria: [],
|
|
27
|
+
userStories: [],
|
|
28
|
+
constraints: [],
|
|
29
|
+
assumptions: [],
|
|
30
|
+
stakeholders: [],
|
|
31
|
+
businessValue: '',
|
|
32
|
+
scope: {
|
|
33
|
+
included: [],
|
|
34
|
+
excluded: [],
|
|
35
|
+
},
|
|
36
|
+
timeline: {
|
|
37
|
+
estimated: '',
|
|
38
|
+
phases: [],
|
|
39
|
+
},
|
|
40
|
+
risks: [],
|
|
41
|
+
dependencies: [],
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
try {
|
|
45
|
+
// Analyze task description
|
|
46
|
+
const analysis = await this.analyzeTaskDescription();
|
|
47
|
+
result.analysis = analysis;
|
|
48
|
+
|
|
49
|
+
// Extract requirements
|
|
50
|
+
result.requirements = await this.extractRequirements(analysis);
|
|
51
|
+
|
|
52
|
+
// Define acceptance criteria
|
|
53
|
+
result.acceptanceCriteria = await this.defineAcceptanceCriteria(result.requirements);
|
|
54
|
+
|
|
55
|
+
// Create user stories
|
|
56
|
+
result.userStories = await this.createUserStories(result.requirements);
|
|
57
|
+
|
|
58
|
+
// Identify constraints
|
|
59
|
+
result.constraints = await this.identifyConstraints();
|
|
60
|
+
|
|
61
|
+
// Document assumptions
|
|
62
|
+
result.assumptions = await this.documentAssumptions();
|
|
63
|
+
|
|
64
|
+
// Identify stakeholders
|
|
65
|
+
result.stakeholders = await this.identifyStakeholders();
|
|
66
|
+
|
|
67
|
+
// Define business value
|
|
68
|
+
result.businessValue = await this.defineBusiness();
|
|
69
|
+
|
|
70
|
+
// Define scope
|
|
71
|
+
result.scope = await this.defineScope(result.requirements);
|
|
72
|
+
|
|
73
|
+
// Estimate timeline
|
|
74
|
+
result.timeline = await this.estimateTimeline(result.requirements);
|
|
75
|
+
|
|
76
|
+
// Identify risks
|
|
77
|
+
result.risks = await this.identifyRisks(result.requirements);
|
|
78
|
+
|
|
79
|
+
// Identify dependencies
|
|
80
|
+
result.dependencies = await this.identifyDependencies(result.requirements);
|
|
81
|
+
|
|
82
|
+
// Generate specification document
|
|
83
|
+
await this.generateSpecificationDocument(result);
|
|
84
|
+
|
|
85
|
+
// Store in memory
|
|
86
|
+
await this.storeInMemory('specification_complete', result);
|
|
87
|
+
|
|
88
|
+
console.log('✅ Specification phase completed');
|
|
89
|
+
return result;
|
|
90
|
+
} catch (error) {
|
|
91
|
+
console.error('❌ Specification phase failed:', error.message);
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Analyze task description to extract key information
|
|
98
|
+
*/
|
|
99
|
+
async analyzeTaskDescription() {
|
|
100
|
+
const analysis = {
|
|
101
|
+
type: this.categorizeTask(),
|
|
102
|
+
complexity: this.assessComplexity(),
|
|
103
|
+
domain: this.identifyDomain(),
|
|
104
|
+
keywords: this.extractKeywords(),
|
|
105
|
+
verbs: this.extractActionVerbs(),
|
|
106
|
+
entities: this.extractEntities(),
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
return analysis;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Categorize the task type
|
|
114
|
+
*/
|
|
115
|
+
categorizeTask() {
|
|
116
|
+
const taskLower = this.taskDescription.toLowerCase();
|
|
117
|
+
|
|
118
|
+
if (
|
|
119
|
+
taskLower.includes('api') ||
|
|
120
|
+
taskLower.includes('endpoint') ||
|
|
121
|
+
taskLower.includes('service')
|
|
122
|
+
) {
|
|
123
|
+
return 'api_development';
|
|
124
|
+
} else if (
|
|
125
|
+
taskLower.includes('ui') ||
|
|
126
|
+
taskLower.includes('frontend') ||
|
|
127
|
+
taskLower.includes('interface')
|
|
128
|
+
) {
|
|
129
|
+
return 'frontend_development';
|
|
130
|
+
} else if (
|
|
131
|
+
taskLower.includes('database') ||
|
|
132
|
+
taskLower.includes('data') ||
|
|
133
|
+
taskLower.includes('storage')
|
|
134
|
+
) {
|
|
135
|
+
return 'data_management';
|
|
136
|
+
} else if (taskLower.includes('test') || taskLower.includes('testing')) {
|
|
137
|
+
return 'testing';
|
|
138
|
+
} else if (taskLower.includes('deploy') || taskLower.includes('infrastructure')) {
|
|
139
|
+
return 'deployment';
|
|
140
|
+
} else if (taskLower.includes('refactor') || taskLower.includes('optimize')) {
|
|
141
|
+
return 'refactoring';
|
|
142
|
+
} else {
|
|
143
|
+
return 'general_development';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Assess task complexity
|
|
149
|
+
*/
|
|
150
|
+
assessComplexity() {
|
|
151
|
+
const wordCount = this.taskDescription.split(' ').length;
|
|
152
|
+
const complexityKeywords = [
|
|
153
|
+
'integrate',
|
|
154
|
+
'complex',
|
|
155
|
+
'multiple',
|
|
156
|
+
'advanced',
|
|
157
|
+
'enterprise',
|
|
158
|
+
'scalable',
|
|
159
|
+
];
|
|
160
|
+
const hasComplexityKeywords = complexityKeywords.some((keyword) =>
|
|
161
|
+
this.taskDescription.toLowerCase().includes(keyword),
|
|
162
|
+
);
|
|
163
|
+
|
|
164
|
+
if (wordCount > 20 || hasComplexityKeywords) {
|
|
165
|
+
return 'high';
|
|
166
|
+
} else if (wordCount > 10) {
|
|
167
|
+
return 'medium';
|
|
168
|
+
} else {
|
|
169
|
+
return 'low';
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Identify domain
|
|
175
|
+
*/
|
|
176
|
+
identifyDomain() {
|
|
177
|
+
const domains = {
|
|
178
|
+
web: ['web', 'website', 'html', 'css', 'javascript'],
|
|
179
|
+
mobile: ['mobile', 'app', 'android', 'ios'],
|
|
180
|
+
data: ['data', 'analytics', 'ml', 'ai', 'machine learning'],
|
|
181
|
+
security: ['security', 'auth', 'authentication', 'encryption'],
|
|
182
|
+
devops: ['deploy', 'ci/cd', 'docker', 'kubernetes'],
|
|
183
|
+
backend: ['api', 'server', 'database', 'backend'],
|
|
184
|
+
frontend: ['ui', 'ux', 'frontend', 'interface'],
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
const taskLower = this.taskDescription.toLowerCase();
|
|
188
|
+
|
|
189
|
+
for (const [domain, keywords] of Object.entries(domains)) {
|
|
190
|
+
if (keywords.some((keyword) => taskLower.includes(keyword))) {
|
|
191
|
+
return domain;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return 'general';
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Extract keywords from task description
|
|
200
|
+
*/
|
|
201
|
+
extractKeywords() {
|
|
202
|
+
const words = this.taskDescription.toLowerCase().split(/\s+/);
|
|
203
|
+
const stopWords = [
|
|
204
|
+
'the',
|
|
205
|
+
'a',
|
|
206
|
+
'an',
|
|
207
|
+
'and',
|
|
208
|
+
'or',
|
|
209
|
+
'but',
|
|
210
|
+
'in',
|
|
211
|
+
'on',
|
|
212
|
+
'at',
|
|
213
|
+
'to',
|
|
214
|
+
'for',
|
|
215
|
+
'of',
|
|
216
|
+
'with',
|
|
217
|
+
'by',
|
|
218
|
+
];
|
|
219
|
+
|
|
220
|
+
return words
|
|
221
|
+
.filter((word) => word.length > 2 && !stopWords.includes(word))
|
|
222
|
+
.filter((word, index, arr) => arr.indexOf(word) === index) // Remove duplicates
|
|
223
|
+
.slice(0, 10); // Top 10 keywords
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Extract action verbs
|
|
228
|
+
*/
|
|
229
|
+
extractActionVerbs() {
|
|
230
|
+
const verbs = [
|
|
231
|
+
'create',
|
|
232
|
+
'build',
|
|
233
|
+
'develop',
|
|
234
|
+
'implement',
|
|
235
|
+
'design',
|
|
236
|
+
'setup',
|
|
237
|
+
'configure',
|
|
238
|
+
'deploy',
|
|
239
|
+
'test',
|
|
240
|
+
'optimize',
|
|
241
|
+
'refactor',
|
|
242
|
+
'integrate',
|
|
243
|
+
];
|
|
244
|
+
const taskLower = this.taskDescription.toLowerCase();
|
|
245
|
+
|
|
246
|
+
return verbs.filter((verb) => taskLower.includes(verb));
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Extract entities
|
|
251
|
+
*/
|
|
252
|
+
extractEntities() {
|
|
253
|
+
const entities = [];
|
|
254
|
+
const words = this.taskDescription.split(/\s+/);
|
|
255
|
+
|
|
256
|
+
// Look for capitalized words (potential entities)
|
|
257
|
+
for (const word of words) {
|
|
258
|
+
if (
|
|
259
|
+
word.length > 2 &&
|
|
260
|
+
word[0] === word[0].toUpperCase() &&
|
|
261
|
+
word.slice(1) === word.slice(1).toLowerCase()
|
|
262
|
+
) {
|
|
263
|
+
entities.push(word);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
return entities;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Extract requirements from analysis
|
|
272
|
+
*/
|
|
273
|
+
async extractRequirements(analysis) {
|
|
274
|
+
const requirements = [];
|
|
275
|
+
|
|
276
|
+
// Functional requirements based on task type
|
|
277
|
+
switch (analysis.type) {
|
|
278
|
+
case 'api_development':
|
|
279
|
+
requirements.push(
|
|
280
|
+
'System must provide REST API endpoints',
|
|
281
|
+
'API must handle authentication and authorization',
|
|
282
|
+
'API must return appropriate HTTP status codes',
|
|
283
|
+
'API must validate input data',
|
|
284
|
+
'API must handle errors gracefully',
|
|
285
|
+
);
|
|
286
|
+
break;
|
|
287
|
+
|
|
288
|
+
case 'frontend_development':
|
|
289
|
+
requirements.push(
|
|
290
|
+
'Interface must be responsive and mobile-friendly',
|
|
291
|
+
'User interface must be intuitive and accessible',
|
|
292
|
+
'Application must handle user input validation',
|
|
293
|
+
'Interface must provide feedback for user actions',
|
|
294
|
+
'Application must be cross-browser compatible',
|
|
295
|
+
);
|
|
296
|
+
break;
|
|
297
|
+
|
|
298
|
+
case 'data_management':
|
|
299
|
+
requirements.push(
|
|
300
|
+
'System must ensure data integrity',
|
|
301
|
+
'Data must be properly normalized',
|
|
302
|
+
'System must handle concurrent access',
|
|
303
|
+
'Data must be backed up regularly',
|
|
304
|
+
'System must provide data recovery mechanisms',
|
|
305
|
+
);
|
|
306
|
+
break;
|
|
307
|
+
|
|
308
|
+
case 'testing':
|
|
309
|
+
requirements.push(
|
|
310
|
+
'Test suite must achieve minimum 80% code coverage',
|
|
311
|
+
'Tests must be automated and repeatable',
|
|
312
|
+
'Tests must validate all critical paths',
|
|
313
|
+
'Test data must be properly managed',
|
|
314
|
+
'Tests must run efficiently',
|
|
315
|
+
);
|
|
316
|
+
break;
|
|
317
|
+
|
|
318
|
+
default:
|
|
319
|
+
requirements.push(
|
|
320
|
+
'System must be reliable and performant',
|
|
321
|
+
'Code must be maintainable and well-documented',
|
|
322
|
+
'System must handle edge cases gracefully',
|
|
323
|
+
'Implementation must follow best practices',
|
|
324
|
+
'System must be secure and robust',
|
|
325
|
+
);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Add complexity-specific requirements
|
|
329
|
+
if (analysis.complexity === 'high') {
|
|
330
|
+
requirements.push(
|
|
331
|
+
'System must be scalable and handle high load',
|
|
332
|
+
'Architecture must be modular and extensible',
|
|
333
|
+
'System must have comprehensive monitoring',
|
|
334
|
+
'Implementation must include performance optimization',
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
return requirements;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Define acceptance criteria
|
|
343
|
+
*/
|
|
344
|
+
async defineAcceptanceCriteria(requirements) {
|
|
345
|
+
const criteria = [];
|
|
346
|
+
|
|
347
|
+
for (const requirement of requirements) {
|
|
348
|
+
const criterion = {
|
|
349
|
+
requirement: requirement,
|
|
350
|
+
given: this.generateGivenCondition(requirement),
|
|
351
|
+
when: this.generateWhenCondition(requirement),
|
|
352
|
+
then: this.generateThenCondition(requirement),
|
|
353
|
+
priority: this.assessRequirementPriority(requirement),
|
|
354
|
+
testable: true,
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
criteria.push(criterion);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
return criteria;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Generate Given condition for acceptance criteria
|
|
365
|
+
*/
|
|
366
|
+
generateGivenCondition(requirement) {
|
|
367
|
+
if (requirement.includes('API')) {
|
|
368
|
+
return 'Given a valid API client';
|
|
369
|
+
} else if (requirement.includes('user')) {
|
|
370
|
+
return 'Given a valid user session';
|
|
371
|
+
} else if (requirement.includes('data')) {
|
|
372
|
+
return 'Given valid input data';
|
|
373
|
+
} else {
|
|
374
|
+
return 'Given a properly configured system';
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Generate When condition for acceptance criteria
|
|
380
|
+
*/
|
|
381
|
+
generateWhenCondition(requirement) {
|
|
382
|
+
if (requirement.includes('provide')) {
|
|
383
|
+
return 'When the service is requested';
|
|
384
|
+
} else if (requirement.includes('handle')) {
|
|
385
|
+
return 'When the condition occurs';
|
|
386
|
+
} else if (requirement.includes('ensure')) {
|
|
387
|
+
return 'When the system operates';
|
|
388
|
+
} else {
|
|
389
|
+
return 'When the feature is used';
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Generate Then condition for acceptance criteria
|
|
395
|
+
*/
|
|
396
|
+
generateThenCondition(requirement) {
|
|
397
|
+
if (requirement.includes('must')) {
|
|
398
|
+
return 'Then the requirement must be satisfied';
|
|
399
|
+
} else {
|
|
400
|
+
return 'Then the expected behavior occurs';
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* Assess requirement priority
|
|
406
|
+
*/
|
|
407
|
+
assessRequirementPriority(requirement) {
|
|
408
|
+
const highPriorityKeywords = [
|
|
409
|
+
'must',
|
|
410
|
+
'critical',
|
|
411
|
+
'security',
|
|
412
|
+
'authentication',
|
|
413
|
+
'data integrity',
|
|
414
|
+
];
|
|
415
|
+
const mediumPriorityKeywords = ['should', 'performance', 'optimization', 'monitoring'];
|
|
416
|
+
|
|
417
|
+
const reqLower = requirement.toLowerCase();
|
|
418
|
+
|
|
419
|
+
if (highPriorityKeywords.some((keyword) => reqLower.includes(keyword))) {
|
|
420
|
+
return 'high';
|
|
421
|
+
} else if (mediumPriorityKeywords.some((keyword) => reqLower.includes(keyword))) {
|
|
422
|
+
return 'medium';
|
|
423
|
+
} else {
|
|
424
|
+
return 'low';
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Create user stories
|
|
430
|
+
*/
|
|
431
|
+
async createUserStories(requirements) {
|
|
432
|
+
const stories = [];
|
|
433
|
+
|
|
434
|
+
for (const requirement of requirements) {
|
|
435
|
+
const story = {
|
|
436
|
+
title: this.generateStoryTitle(requirement),
|
|
437
|
+
narrative: this.generateStoryNarrative(requirement),
|
|
438
|
+
acceptanceCriteria: this.generateStoryAcceptanceCriteria(requirement),
|
|
439
|
+
priority: this.assessRequirementPriority(requirement),
|
|
440
|
+
estimation: this.estimateStoryPoints(requirement),
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
stories.push(story);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return stories;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Generate story title
|
|
451
|
+
*/
|
|
452
|
+
generateStoryTitle(requirement) {
|
|
453
|
+
const words = requirement.split(' ');
|
|
454
|
+
const actionWord = words.find((word) =>
|
|
455
|
+
['provide', 'handle', 'ensure', 'validate'].includes(word.toLowerCase()),
|
|
456
|
+
);
|
|
457
|
+
const objectWord = words.find((word) => ['API', 'data', 'user', 'system'].includes(word));
|
|
458
|
+
|
|
459
|
+
return `${actionWord || 'Implement'} ${objectWord || 'functionality'}`;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/**
|
|
463
|
+
* Generate story narrative
|
|
464
|
+
*/
|
|
465
|
+
generateStoryNarrative(requirement) {
|
|
466
|
+
return `As a user, I want the system to ${requirement.toLowerCase()} so that I can achieve my goals effectively.`;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Generate story acceptance criteria
|
|
471
|
+
*/
|
|
472
|
+
generateStoryAcceptanceCriteria(requirement) {
|
|
473
|
+
return [`The system ${requirement.toLowerCase()}`];
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* Estimate story points
|
|
478
|
+
*/
|
|
479
|
+
estimateStoryPoints(requirement) {
|
|
480
|
+
const complexity = this.assessComplexity();
|
|
481
|
+
const priority = this.assessRequirementPriority(requirement);
|
|
482
|
+
|
|
483
|
+
if (complexity === 'high' && priority === 'high') {
|
|
484
|
+
return 8;
|
|
485
|
+
} else if (complexity === 'high' || priority === 'high') {
|
|
486
|
+
return 5;
|
|
487
|
+
} else if (complexity === 'medium' || priority === 'medium') {
|
|
488
|
+
return 3;
|
|
489
|
+
} else {
|
|
490
|
+
return 1;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Identify constraints
|
|
496
|
+
*/
|
|
497
|
+
async identifyConstraints() {
|
|
498
|
+
return [
|
|
499
|
+
'Files must be under 500 lines',
|
|
500
|
+
'No hardcoded environment variables',
|
|
501
|
+
'Must follow security best practices',
|
|
502
|
+
'Must be compatible with existing systems',
|
|
503
|
+
'Must maintain backward compatibility',
|
|
504
|
+
'Must handle concurrent users',
|
|
505
|
+
'Must have proper error handling',
|
|
506
|
+
'Must include comprehensive logging',
|
|
507
|
+
];
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Document assumptions
|
|
512
|
+
*/
|
|
513
|
+
async documentAssumptions() {
|
|
514
|
+
return [
|
|
515
|
+
'Development environment is properly configured',
|
|
516
|
+
'Required dependencies are available',
|
|
517
|
+
'Database schema is stable',
|
|
518
|
+
'Network connectivity is reliable',
|
|
519
|
+
'Third-party APIs are stable',
|
|
520
|
+
'Security protocols are established',
|
|
521
|
+
'Backup procedures are in place',
|
|
522
|
+
'Monitoring systems are operational',
|
|
523
|
+
];
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* Identify stakeholders
|
|
528
|
+
*/
|
|
529
|
+
async identifyStakeholders() {
|
|
530
|
+
return [
|
|
531
|
+
{ role: 'Product Owner', responsibility: 'Requirements definition' },
|
|
532
|
+
{ role: 'Development Team', responsibility: 'Implementation' },
|
|
533
|
+
{ role: 'QA Team', responsibility: 'Testing and validation' },
|
|
534
|
+
{ role: 'DevOps Team', responsibility: 'Deployment and operations' },
|
|
535
|
+
{ role: 'Security Team', responsibility: 'Security review' },
|
|
536
|
+
{ role: 'End Users', responsibility: 'Feedback and acceptance' },
|
|
537
|
+
];
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* Define business value
|
|
542
|
+
*/
|
|
543
|
+
async defineBusiness() {
|
|
544
|
+
const analysis = await this.analyzeTaskDescription();
|
|
545
|
+
|
|
546
|
+
switch (analysis.type) {
|
|
547
|
+
case 'api_development':
|
|
548
|
+
return 'Enables system integration and data exchange, improving operational efficiency';
|
|
549
|
+
case 'frontend_development':
|
|
550
|
+
return 'Improves user experience and engagement, potentially increasing user satisfaction';
|
|
551
|
+
case 'data_management':
|
|
552
|
+
return 'Ensures data integrity and availability, supporting business decisions';
|
|
553
|
+
case 'testing':
|
|
554
|
+
return 'Reduces bugs and improves software quality, minimizing support costs';
|
|
555
|
+
default:
|
|
556
|
+
return 'Addresses business requirements and improves system capabilities';
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* Define scope
|
|
562
|
+
*/
|
|
563
|
+
async defineScope(requirements) {
|
|
564
|
+
const included = requirements.slice(0, Math.ceil(requirements.length * 0.8));
|
|
565
|
+
const excluded = [
|
|
566
|
+
'Performance optimization beyond basic requirements',
|
|
567
|
+
'Advanced security features not specified',
|
|
568
|
+
'Integration with non-specified external systems',
|
|
569
|
+
'Custom UI themes and branding',
|
|
570
|
+
'Advanced analytics and reporting',
|
|
571
|
+
'Mobile-specific optimizations',
|
|
572
|
+
'Legacy system migration',
|
|
573
|
+
'Third-party plugin development',
|
|
574
|
+
];
|
|
575
|
+
|
|
576
|
+
return { included, excluded };
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* Estimate timeline
|
|
581
|
+
*/
|
|
582
|
+
async estimateTimeline(requirements) {
|
|
583
|
+
const totalStoryPoints = requirements.length * 3; // Average 3 points per requirement
|
|
584
|
+
const developmentVelocity = 10; // Points per sprint
|
|
585
|
+
const sprintsNeeded = Math.ceil(totalStoryPoints / developmentVelocity);
|
|
586
|
+
|
|
587
|
+
return {
|
|
588
|
+
estimated: `${sprintsNeeded * 2} weeks`,
|
|
589
|
+
phases: [
|
|
590
|
+
{ name: 'Specification', duration: '1 week' },
|
|
591
|
+
{ name: 'Architecture', duration: '1 week' },
|
|
592
|
+
{ name: 'Development', duration: `${sprintsNeeded} weeks` },
|
|
593
|
+
{ name: 'Testing', duration: '1 week' },
|
|
594
|
+
{ name: 'Deployment', duration: '1 week' },
|
|
595
|
+
],
|
|
596
|
+
};
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* Identify risks
|
|
601
|
+
*/
|
|
602
|
+
async identifyRisks(requirements) {
|
|
603
|
+
return [
|
|
604
|
+
{
|
|
605
|
+
risk: 'Technical complexity higher than estimated',
|
|
606
|
+
probability: 'Medium',
|
|
607
|
+
impact: 'High',
|
|
608
|
+
mitigation: 'Conduct proof of concept before full implementation',
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
risk: 'Requirements change during development',
|
|
612
|
+
probability: 'High',
|
|
613
|
+
impact: 'Medium',
|
|
614
|
+
mitigation: 'Implement agile development with regular reviews',
|
|
615
|
+
},
|
|
616
|
+
{
|
|
617
|
+
risk: 'Integration issues with external systems',
|
|
618
|
+
probability: 'Medium',
|
|
619
|
+
impact: 'High',
|
|
620
|
+
mitigation: 'Early integration testing and API validation',
|
|
621
|
+
},
|
|
622
|
+
{
|
|
623
|
+
risk: 'Performance issues under load',
|
|
624
|
+
probability: 'Low',
|
|
625
|
+
impact: 'High',
|
|
626
|
+
mitigation: 'Load testing and performance monitoring',
|
|
627
|
+
},
|
|
628
|
+
];
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Identify dependencies
|
|
633
|
+
*/
|
|
634
|
+
async identifyDependencies(requirements) {
|
|
635
|
+
const dependencies = [];
|
|
636
|
+
|
|
637
|
+
for (const requirement of requirements) {
|
|
638
|
+
if (requirement.includes('API')) {
|
|
639
|
+
dependencies.push('Database schema definition');
|
|
640
|
+
dependencies.push('Authentication service');
|
|
641
|
+
}
|
|
642
|
+
if (requirement.includes('data')) {
|
|
643
|
+
dependencies.push('Data model design');
|
|
644
|
+
dependencies.push('Database setup');
|
|
645
|
+
}
|
|
646
|
+
if (requirement.includes('security')) {
|
|
647
|
+
dependencies.push('Security policy definition');
|
|
648
|
+
dependencies.push('Certificate management');
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
return [...new Set(dependencies)]; // Remove duplicates
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/**
|
|
656
|
+
* Generate specification document
|
|
657
|
+
*/
|
|
658
|
+
async generateSpecificationDocument(result) {
|
|
659
|
+
const document = `# ${this.taskDescription} - Specification
|
|
660
|
+
|
|
661
|
+
## Overview
|
|
662
|
+
${result.businessValue}
|
|
663
|
+
|
|
664
|
+
## Requirements
|
|
665
|
+
${result.requirements.map((req, index) => `${index + 1}. ${req}`).join('\n')}
|
|
666
|
+
|
|
667
|
+
## Acceptance Criteria
|
|
668
|
+
${result.acceptanceCriteria
|
|
669
|
+
.map(
|
|
670
|
+
(criteria, index) => `
|
|
671
|
+
### ${index + 1}. ${criteria.requirement}
|
|
672
|
+
- **Given**: ${criteria.given}
|
|
673
|
+
- **When**: ${criteria.when}
|
|
674
|
+
- **Then**: ${criteria.then}
|
|
675
|
+
- **Priority**: ${criteria.priority}
|
|
676
|
+
`,
|
|
677
|
+
)
|
|
678
|
+
.join('\n')}
|
|
679
|
+
|
|
680
|
+
## User Stories
|
|
681
|
+
${result.userStories
|
|
682
|
+
.map(
|
|
683
|
+
(story, index) => `
|
|
684
|
+
### ${index + 1}. ${story.title}
|
|
685
|
+
${story.narrative}
|
|
686
|
+
**Acceptance Criteria**: ${story.acceptanceCriteria.join(', ')}
|
|
687
|
+
**Priority**: ${story.priority}
|
|
688
|
+
**Estimation**: ${story.estimation} points
|
|
689
|
+
`,
|
|
690
|
+
)
|
|
691
|
+
.join('\n')}
|
|
692
|
+
|
|
693
|
+
## Constraints
|
|
694
|
+
${result.constraints.map((constraint, index) => `${index + 1}. ${constraint}`).join('\n')}
|
|
695
|
+
|
|
696
|
+
## Assumptions
|
|
697
|
+
${result.assumptions.map((assumption, index) => `${index + 1}. ${assumption}`).join('\n')}
|
|
698
|
+
|
|
699
|
+
## Scope
|
|
700
|
+
### Included
|
|
701
|
+
${result.scope.included.map((item, index) => `${index + 1}. ${item}`).join('\n')}
|
|
702
|
+
|
|
703
|
+
### Excluded
|
|
704
|
+
${result.scope.excluded.map((item, index) => `${index + 1}. ${item}`).join('\n')}
|
|
705
|
+
|
|
706
|
+
## Timeline
|
|
707
|
+
**Estimated Duration**: ${result.timeline.estimated}
|
|
708
|
+
|
|
709
|
+
${result.timeline.phases.map((phase) => `- ${phase.name}: ${phase.duration}`).join('\n')}
|
|
710
|
+
|
|
711
|
+
## Risks
|
|
712
|
+
${result.risks
|
|
713
|
+
.map(
|
|
714
|
+
(risk, index) => `
|
|
715
|
+
### ${index + 1}. ${risk.risk}
|
|
716
|
+
- **Probability**: ${risk.probability}
|
|
717
|
+
- **Impact**: ${risk.impact}
|
|
718
|
+
- **Mitigation**: ${risk.mitigation}
|
|
719
|
+
`,
|
|
720
|
+
)
|
|
721
|
+
.join('\n')}
|
|
722
|
+
|
|
723
|
+
## Dependencies
|
|
724
|
+
${result.dependencies.map((dep, index) => `${index + 1}. ${dep}`).join('\n')}
|
|
725
|
+
|
|
726
|
+
## Stakeholders
|
|
727
|
+
${result.stakeholders.map((stakeholder) => `- **${stakeholder.role}**: ${stakeholder.responsibility}`).join('\n')}
|
|
728
|
+
`;
|
|
729
|
+
|
|
730
|
+
// Save document
|
|
731
|
+
await this.saveArtifact('specification.md', document);
|
|
732
|
+
return document;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
export default SparcSpecification;
|