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,1750 @@
|
|
|
1
|
+
// SPARC Architecture Phase
|
|
2
|
+
// Design system architecture and component planning
|
|
3
|
+
|
|
4
|
+
import { SparcPhase } from './phase-base.js';
|
|
5
|
+
|
|
6
|
+
export class SparcArchitecture extends SparcPhase {
|
|
7
|
+
constructor(taskDescription, options) {
|
|
8
|
+
super('architecture', taskDescription, options);
|
|
9
|
+
this.components = [];
|
|
10
|
+
this.designPatterns = [];
|
|
11
|
+
this.systemDesign = null;
|
|
12
|
+
this.dataModel = null;
|
|
13
|
+
this.apiDesign = null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Execute architecture phase
|
|
18
|
+
*/
|
|
19
|
+
async execute() {
|
|
20
|
+
console.log('🏗️ Starting Architecture Phase');
|
|
21
|
+
|
|
22
|
+
await this.initializePhase();
|
|
23
|
+
|
|
24
|
+
const result = {
|
|
25
|
+
systemDesign: null,
|
|
26
|
+
components: [],
|
|
27
|
+
designPatterns: [],
|
|
28
|
+
dataModel: null,
|
|
29
|
+
apiDesign: null,
|
|
30
|
+
deploymentArchitecture: null,
|
|
31
|
+
securityArchitecture: null,
|
|
32
|
+
scalabilityPlan: null,
|
|
33
|
+
integrationPoints: [],
|
|
34
|
+
qualityAttributes: {},
|
|
35
|
+
architecturalDecisions: [],
|
|
36
|
+
riskAssessment: [],
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
// Load previous phases
|
|
41
|
+
const specification = await this.retrieveFromMemory('specification_complete');
|
|
42
|
+
const pseudocode = await this.retrieveFromMemory('pseudocode_complete');
|
|
43
|
+
|
|
44
|
+
if (!specification || !pseudocode) {
|
|
45
|
+
throw new Error('Specification and Pseudocode phases must be completed first');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Design system architecture
|
|
49
|
+
result.systemDesign = await this.designSystemArchitecture(specification, pseudocode);
|
|
50
|
+
|
|
51
|
+
// Define components
|
|
52
|
+
result.components = await this.defineComponents(specification, pseudocode);
|
|
53
|
+
|
|
54
|
+
// Select design patterns
|
|
55
|
+
result.designPatterns = await this.selectDesignPatterns(specification, pseudocode);
|
|
56
|
+
|
|
57
|
+
// Design data model
|
|
58
|
+
result.dataModel = await this.designDataModel(specification);
|
|
59
|
+
|
|
60
|
+
// Design API structure
|
|
61
|
+
result.apiDesign = await this.designApiStructure(specification);
|
|
62
|
+
|
|
63
|
+
// Plan deployment architecture
|
|
64
|
+
result.deploymentArchitecture = await this.planDeploymentArchitecture(specification);
|
|
65
|
+
|
|
66
|
+
// Design security architecture
|
|
67
|
+
result.securityArchitecture = await this.designSecurityArchitecture(specification);
|
|
68
|
+
|
|
69
|
+
// Plan scalability
|
|
70
|
+
result.scalabilityPlan = await this.planScalability(specification);
|
|
71
|
+
|
|
72
|
+
// Identify integration points
|
|
73
|
+
result.integrationPoints = await this.identifyIntegrationPoints(specification);
|
|
74
|
+
|
|
75
|
+
// Define quality attributes
|
|
76
|
+
result.qualityAttributes = await this.defineQualityAttributes(specification);
|
|
77
|
+
|
|
78
|
+
// Document architectural decisions
|
|
79
|
+
result.architecturalDecisions = await this.documentArchitecturalDecisions(result);
|
|
80
|
+
|
|
81
|
+
// Assess risks
|
|
82
|
+
result.riskAssessment = await this.assessArchitecturalRisks(result);
|
|
83
|
+
|
|
84
|
+
// Generate architecture document
|
|
85
|
+
await this.generateArchitectureDocument(result);
|
|
86
|
+
|
|
87
|
+
// Store in memory
|
|
88
|
+
await this.storeInMemory('architecture_complete', result);
|
|
89
|
+
|
|
90
|
+
console.log('✅ Architecture phase completed');
|
|
91
|
+
return result;
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error('❌ Architecture phase failed:', error.message);
|
|
94
|
+
throw error;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Design system architecture
|
|
100
|
+
*/
|
|
101
|
+
async designSystemArchitecture(specification, pseudocode) {
|
|
102
|
+
const architecture = {
|
|
103
|
+
style: 'layered',
|
|
104
|
+
layers: [],
|
|
105
|
+
components: [],
|
|
106
|
+
dataFlow: [],
|
|
107
|
+
controlFlow: [],
|
|
108
|
+
boundaries: [],
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
// Determine architecture style based on requirements
|
|
112
|
+
const requirements = specification.requirements || [];
|
|
113
|
+
const hasApiRequirements = requirements.some((req) => req.toLowerCase().includes('api'));
|
|
114
|
+
const hasUiRequirements = requirements.some((req) => req.toLowerCase().includes('ui'));
|
|
115
|
+
const hasDataRequirements = requirements.some((req) => req.toLowerCase().includes('data'));
|
|
116
|
+
const hasDistributedRequirements = requirements.some(
|
|
117
|
+
(req) =>
|
|
118
|
+
req.toLowerCase().includes('distributed') || req.toLowerCase().includes('microservice'),
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
if (hasDistributedRequirements) {
|
|
122
|
+
architecture.style = 'microservices';
|
|
123
|
+
architecture.layers = [
|
|
124
|
+
{ name: 'API Gateway', responsibility: 'Request routing and authentication' },
|
|
125
|
+
{ name: 'Service Layer', responsibility: 'Business logic microservices' },
|
|
126
|
+
{ name: 'Data Layer', responsibility: 'Database and storage services' },
|
|
127
|
+
{ name: 'Infrastructure Layer', responsibility: 'Monitoring and deployment' },
|
|
128
|
+
];
|
|
129
|
+
} else if (hasApiRequirements && hasUiRequirements) {
|
|
130
|
+
architecture.style = 'mvc';
|
|
131
|
+
architecture.layers = [
|
|
132
|
+
{ name: 'Presentation Layer', responsibility: 'User interface and user experience' },
|
|
133
|
+
{ name: 'Controller Layer', responsibility: 'Request handling and routing' },
|
|
134
|
+
{ name: 'Service Layer', responsibility: 'Business logic and processing' },
|
|
135
|
+
{ name: 'Data Access Layer', responsibility: 'Database operations' },
|
|
136
|
+
{ name: 'Infrastructure Layer', responsibility: 'Cross-cutting concerns' },
|
|
137
|
+
];
|
|
138
|
+
} else if (hasApiRequirements) {
|
|
139
|
+
architecture.style = 'layered';
|
|
140
|
+
architecture.layers = [
|
|
141
|
+
{ name: 'API Layer', responsibility: 'External interface and contracts' },
|
|
142
|
+
{ name: 'Business Layer', responsibility: 'Core business logic' },
|
|
143
|
+
{ name: 'Data Layer', responsibility: 'Data persistence and retrieval' },
|
|
144
|
+
{ name: 'Infrastructure Layer', responsibility: 'Logging, monitoring, security' },
|
|
145
|
+
];
|
|
146
|
+
} else {
|
|
147
|
+
architecture.style = 'modular';
|
|
148
|
+
architecture.layers = [
|
|
149
|
+
{ name: 'Interface Layer', responsibility: 'External interactions' },
|
|
150
|
+
{ name: 'Processing Layer', responsibility: 'Core processing logic' },
|
|
151
|
+
{ name: 'Storage Layer', responsibility: 'Data management' },
|
|
152
|
+
{ name: 'Utility Layer', responsibility: 'Common utilities and helpers' },
|
|
153
|
+
];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// Define data flow
|
|
157
|
+
architecture.dataFlow = this.defineDataFlow(architecture.layers);
|
|
158
|
+
|
|
159
|
+
// Define control flow
|
|
160
|
+
architecture.controlFlow = this.defineControlFlow(architecture.layers);
|
|
161
|
+
|
|
162
|
+
// Define boundaries
|
|
163
|
+
architecture.boundaries = this.defineBoundaries(architecture.layers);
|
|
164
|
+
|
|
165
|
+
return architecture;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Define data flow
|
|
170
|
+
*/
|
|
171
|
+
defineDataFlow(layers) {
|
|
172
|
+
const dataFlow = [];
|
|
173
|
+
|
|
174
|
+
for (let i = 0; i < layers.length - 1; i++) {
|
|
175
|
+
dataFlow.push({
|
|
176
|
+
from: layers[i].name,
|
|
177
|
+
to: layers[i + 1].name,
|
|
178
|
+
direction: 'downstream',
|
|
179
|
+
dataType: 'processed data',
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
dataFlow.push({
|
|
183
|
+
from: layers[i + 1].name,
|
|
184
|
+
to: layers[i].name,
|
|
185
|
+
direction: 'upstream',
|
|
186
|
+
dataType: 'results/responses',
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
return dataFlow;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Define control flow
|
|
195
|
+
*/
|
|
196
|
+
defineControlFlow(layers) {
|
|
197
|
+
return layers.map((layer, index) => ({
|
|
198
|
+
layer: layer.name,
|
|
199
|
+
order: index + 1,
|
|
200
|
+
triggers: index === 0 ? ['external request'] : [`${layers[index - 1].name} completion`],
|
|
201
|
+
actions: ['process', 'validate', 'transform', 'forward'],
|
|
202
|
+
outcomes:
|
|
203
|
+
index === layers.length - 1 ? ['final response'] : [`trigger ${layers[index + 1].name}`],
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Define boundaries
|
|
209
|
+
*/
|
|
210
|
+
defineBoundaries(layers) {
|
|
211
|
+
return layers.map((layer) => ({
|
|
212
|
+
layer: layer.name,
|
|
213
|
+
type: 'logical',
|
|
214
|
+
encapsulation: 'interface-based',
|
|
215
|
+
dependencies: 'unidirectional',
|
|
216
|
+
contracts: 'well-defined APIs',
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* Define components
|
|
222
|
+
*/
|
|
223
|
+
async defineComponents(specification, pseudocode) {
|
|
224
|
+
const components = [];
|
|
225
|
+
const requirements = specification.requirements || [];
|
|
226
|
+
const functions = pseudocode.pseudocode || [];
|
|
227
|
+
|
|
228
|
+
// Create components based on functional requirements
|
|
229
|
+
for (const requirement of requirements) {
|
|
230
|
+
const component = this.createComponentFromRequirement(requirement);
|
|
231
|
+
components.push(component);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// Create components based on pseudocode functions
|
|
235
|
+
for (const func of functions) {
|
|
236
|
+
const component = this.createComponentFromFunction(func);
|
|
237
|
+
components.push(component);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Add infrastructure components
|
|
241
|
+
components.push(...this.createInfrastructureComponents());
|
|
242
|
+
|
|
243
|
+
// Remove duplicates and merge similar components
|
|
244
|
+
const uniqueComponents = this.mergeComponents(components);
|
|
245
|
+
|
|
246
|
+
return uniqueComponents;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Create component from requirement
|
|
251
|
+
*/
|
|
252
|
+
createComponentFromRequirement(requirement) {
|
|
253
|
+
const reqLower = requirement.toLowerCase();
|
|
254
|
+
|
|
255
|
+
if (reqLower.includes('api')) {
|
|
256
|
+
return {
|
|
257
|
+
name: 'APIController',
|
|
258
|
+
type: 'controller',
|
|
259
|
+
responsibility: 'Handle API requests and responses',
|
|
260
|
+
interfaces: ['HTTP', 'REST'],
|
|
261
|
+
dependencies: ['AuthenticationService', 'ValidationService'],
|
|
262
|
+
patterns: ['Controller', 'Facade'],
|
|
263
|
+
complexity: 'medium',
|
|
264
|
+
};
|
|
265
|
+
} else if (reqLower.includes('authenticate')) {
|
|
266
|
+
return {
|
|
267
|
+
name: 'AuthenticationService',
|
|
268
|
+
type: 'service',
|
|
269
|
+
responsibility: 'Manage user authentication and authorization',
|
|
270
|
+
interfaces: ['IAuthenticationService'],
|
|
271
|
+
dependencies: ['UserRepository', 'TokenManager'],
|
|
272
|
+
patterns: ['Service', 'Strategy'],
|
|
273
|
+
complexity: 'high',
|
|
274
|
+
};
|
|
275
|
+
} else if (reqLower.includes('data')) {
|
|
276
|
+
return {
|
|
277
|
+
name: 'DataRepository',
|
|
278
|
+
type: 'repository',
|
|
279
|
+
responsibility: 'Manage data persistence and retrieval',
|
|
280
|
+
interfaces: ['IRepository'],
|
|
281
|
+
dependencies: ['DatabaseConnection', 'DataMapper'],
|
|
282
|
+
patterns: ['Repository', 'Unit of Work'],
|
|
283
|
+
complexity: 'medium',
|
|
284
|
+
};
|
|
285
|
+
} else if (reqLower.includes('validate')) {
|
|
286
|
+
return {
|
|
287
|
+
name: 'ValidationService',
|
|
288
|
+
type: 'service',
|
|
289
|
+
responsibility: 'Validate input data and business rules',
|
|
290
|
+
interfaces: ['IValidationService'],
|
|
291
|
+
dependencies: ['ValidationRules', 'ErrorHandler'],
|
|
292
|
+
patterns: ['Strategy', 'Chain of Responsibility'],
|
|
293
|
+
complexity: 'low',
|
|
294
|
+
};
|
|
295
|
+
} else {
|
|
296
|
+
return {
|
|
297
|
+
name: 'GenericService',
|
|
298
|
+
type: 'service',
|
|
299
|
+
responsibility: 'Handle general business logic',
|
|
300
|
+
interfaces: ['IService'],
|
|
301
|
+
dependencies: ['CommonUtilities'],
|
|
302
|
+
patterns: ['Service'],
|
|
303
|
+
complexity: 'low',
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* Create component from function
|
|
310
|
+
*/
|
|
311
|
+
createComponentFromFunction(func) {
|
|
312
|
+
return {
|
|
313
|
+
name: this.toPascalCase(func.function) + 'Component',
|
|
314
|
+
type: 'component',
|
|
315
|
+
responsibility: func.description,
|
|
316
|
+
interfaces: [`I${this.toPascalCase(func.function)}`],
|
|
317
|
+
dependencies: this.extractDependencies(func.steps),
|
|
318
|
+
patterns: this.inferPatterns(func.steps),
|
|
319
|
+
complexity: func.complexity ? func.complexity.level : 'medium',
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Create infrastructure components
|
|
325
|
+
*/
|
|
326
|
+
createInfrastructureComponents() {
|
|
327
|
+
return [
|
|
328
|
+
{
|
|
329
|
+
name: 'Logger',
|
|
330
|
+
type: 'utility',
|
|
331
|
+
responsibility: 'Centralized logging and monitoring',
|
|
332
|
+
interfaces: ['ILogger'],
|
|
333
|
+
dependencies: ['LoggingProvider'],
|
|
334
|
+
patterns: ['Singleton', 'Factory'],
|
|
335
|
+
complexity: 'low',
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
name: 'ConfigurationManager',
|
|
339
|
+
type: 'utility',
|
|
340
|
+
responsibility: 'Manage application configuration',
|
|
341
|
+
interfaces: ['IConfigurationManager'],
|
|
342
|
+
dependencies: ['EnvironmentProvider'],
|
|
343
|
+
patterns: ['Singleton'],
|
|
344
|
+
complexity: 'low',
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
name: 'ErrorHandler',
|
|
348
|
+
type: 'utility',
|
|
349
|
+
responsibility: 'Global error handling and reporting',
|
|
350
|
+
interfaces: ['IErrorHandler'],
|
|
351
|
+
dependencies: ['Logger'],
|
|
352
|
+
patterns: ['Strategy', 'Chain of Responsibility'],
|
|
353
|
+
complexity: 'medium',
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
name: 'CacheManager',
|
|
357
|
+
type: 'utility',
|
|
358
|
+
responsibility: 'Caching and performance optimization',
|
|
359
|
+
interfaces: ['ICacheManager'],
|
|
360
|
+
dependencies: ['CacheProvider'],
|
|
361
|
+
patterns: ['Proxy', 'Decorator'],
|
|
362
|
+
complexity: 'medium',
|
|
363
|
+
},
|
|
364
|
+
];
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Merge similar components
|
|
369
|
+
*/
|
|
370
|
+
mergeComponents(components) {
|
|
371
|
+
const componentMap = new Map();
|
|
372
|
+
|
|
373
|
+
for (const component of components) {
|
|
374
|
+
const key = component.name;
|
|
375
|
+
|
|
376
|
+
if (componentMap.has(key)) {
|
|
377
|
+
const existing = componentMap.get(key);
|
|
378
|
+
// Merge dependencies and interfaces
|
|
379
|
+
existing.dependencies = [...new Set([...existing.dependencies, ...component.dependencies])];
|
|
380
|
+
existing.interfaces = [...new Set([...existing.interfaces, ...component.interfaces])];
|
|
381
|
+
existing.patterns = [...new Set([...existing.patterns, ...component.patterns])];
|
|
382
|
+
} else {
|
|
383
|
+
componentMap.set(key, component);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
return Array.from(componentMap.values());
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* Convert to PascalCase
|
|
392
|
+
*/
|
|
393
|
+
toPascalCase(str) {
|
|
394
|
+
return str
|
|
395
|
+
.replace(/_([a-z])/g, (match, letter) => letter.toUpperCase())
|
|
396
|
+
.replace(/^([a-z])/, (match, letter) => letter.toUpperCase());
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Extract dependencies from steps
|
|
401
|
+
*/
|
|
402
|
+
extractDependencies(steps) {
|
|
403
|
+
const dependencies = [];
|
|
404
|
+
|
|
405
|
+
for (const step of steps) {
|
|
406
|
+
if (step.includes('database')) dependencies.push('DatabaseConnection');
|
|
407
|
+
if (step.includes('authenticate')) dependencies.push('AuthenticationService');
|
|
408
|
+
if (step.includes('validate')) dependencies.push('ValidationService');
|
|
409
|
+
if (step.includes('log')) dependencies.push('Logger');
|
|
410
|
+
if (step.includes('cache')) dependencies.push('CacheManager');
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
return [...new Set(dependencies)];
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Infer patterns from steps
|
|
418
|
+
*/
|
|
419
|
+
inferPatterns(steps) {
|
|
420
|
+
const patterns = [];
|
|
421
|
+
|
|
422
|
+
if (steps.some((step) => step.includes('CALL'))) patterns.push('Command');
|
|
423
|
+
if (steps.some((step) => step.includes('IF'))) patterns.push('Strategy');
|
|
424
|
+
if (steps.some((step) => step.includes('VALIDATE'))) patterns.push('Chain of Responsibility');
|
|
425
|
+
if (steps.some((step) => step.includes('RETURN'))) patterns.push('Factory');
|
|
426
|
+
|
|
427
|
+
return patterns.length > 0 ? patterns : ['Service'];
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/**
|
|
431
|
+
* Select design patterns
|
|
432
|
+
*/
|
|
433
|
+
async selectDesignPatterns(specification, pseudocode) {
|
|
434
|
+
const patterns = [];
|
|
435
|
+
const requirements = specification.requirements || [];
|
|
436
|
+
|
|
437
|
+
// Creational patterns
|
|
438
|
+
if (
|
|
439
|
+
requirements.some(
|
|
440
|
+
(req) => req.toLowerCase().includes('create') || req.toLowerCase().includes('instantiate'),
|
|
441
|
+
)
|
|
442
|
+
) {
|
|
443
|
+
patterns.push({
|
|
444
|
+
name: 'Factory Pattern',
|
|
445
|
+
type: 'creational',
|
|
446
|
+
purpose: 'Create objects without specifying exact classes',
|
|
447
|
+
applicability: 'Object creation with varying configurations',
|
|
448
|
+
implementation: 'Factory classes with creation methods',
|
|
449
|
+
benefits: ['Loose coupling', 'Easy extensibility', 'Centralized creation logic'],
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// Structural patterns
|
|
454
|
+
if (
|
|
455
|
+
requirements.some(
|
|
456
|
+
(req) => req.toLowerCase().includes('interface') || req.toLowerCase().includes('adapt'),
|
|
457
|
+
)
|
|
458
|
+
) {
|
|
459
|
+
patterns.push({
|
|
460
|
+
name: 'Adapter Pattern',
|
|
461
|
+
type: 'structural',
|
|
462
|
+
purpose: 'Allow incompatible interfaces to work together',
|
|
463
|
+
applicability: 'Integration with external systems',
|
|
464
|
+
implementation: 'Wrapper classes implementing target interfaces',
|
|
465
|
+
benefits: ['Code reuse', 'Separation of concerns', 'Easy integration'],
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Behavioral patterns
|
|
470
|
+
if (
|
|
471
|
+
requirements.some(
|
|
472
|
+
(req) => req.toLowerCase().includes('strategy') || req.toLowerCase().includes('algorithm'),
|
|
473
|
+
)
|
|
474
|
+
) {
|
|
475
|
+
patterns.push({
|
|
476
|
+
name: 'Strategy Pattern',
|
|
477
|
+
type: 'behavioral',
|
|
478
|
+
purpose: 'Define family of algorithms and make them interchangeable',
|
|
479
|
+
applicability: 'Multiple ways to perform operations',
|
|
480
|
+
implementation: 'Strategy interfaces with concrete implementations',
|
|
481
|
+
benefits: ['Flexibility', 'Open/closed principle', 'Runtime selection'],
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
// Common patterns for all systems
|
|
486
|
+
patterns.push({
|
|
487
|
+
name: 'Repository Pattern',
|
|
488
|
+
type: 'architectural',
|
|
489
|
+
purpose: 'Separate data access logic from business logic',
|
|
490
|
+
applicability: 'Data persistence operations',
|
|
491
|
+
implementation: 'Repository interfaces with concrete implementations',
|
|
492
|
+
benefits: ['Testability', 'Loose coupling', 'Centralized data access'],
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
patterns.push({
|
|
496
|
+
name: 'Dependency Injection',
|
|
497
|
+
type: 'architectural',
|
|
498
|
+
purpose: 'Manage dependencies between objects',
|
|
499
|
+
applicability: 'All components requiring external dependencies',
|
|
500
|
+
implementation: 'Constructor injection with DI container',
|
|
501
|
+
benefits: ['Testability', 'Loose coupling', 'Flexibility'],
|
|
502
|
+
});
|
|
503
|
+
|
|
504
|
+
patterns.push({
|
|
505
|
+
name: 'Observer Pattern',
|
|
506
|
+
type: 'behavioral',
|
|
507
|
+
purpose: 'Notify multiple objects about state changes',
|
|
508
|
+
applicability: 'Event-driven communication',
|
|
509
|
+
implementation: 'Subject-observer relationships with event notifications',
|
|
510
|
+
benefits: ['Loose coupling', 'Dynamic relationships', 'Broadcast communication'],
|
|
511
|
+
});
|
|
512
|
+
|
|
513
|
+
return patterns;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Design data model
|
|
518
|
+
*/
|
|
519
|
+
async designDataModel(specification) {
|
|
520
|
+
const dataModel = {
|
|
521
|
+
entities: [],
|
|
522
|
+
relationships: [],
|
|
523
|
+
constraints: [],
|
|
524
|
+
indexes: [],
|
|
525
|
+
views: [],
|
|
526
|
+
};
|
|
527
|
+
|
|
528
|
+
// Extract entities from requirements
|
|
529
|
+
const requirements = specification.requirements || [];
|
|
530
|
+
const entities = this.extractEntities(requirements);
|
|
531
|
+
|
|
532
|
+
for (const entityName of entities) {
|
|
533
|
+
const entity = {
|
|
534
|
+
name: entityName,
|
|
535
|
+
attributes: this.generateAttributes(entityName),
|
|
536
|
+
primaryKey: 'id',
|
|
537
|
+
foreignKeys: [],
|
|
538
|
+
constraints: this.generateConstraints(entityName),
|
|
539
|
+
indexes: this.generateIndexes(entityName),
|
|
540
|
+
};
|
|
541
|
+
|
|
542
|
+
dataModel.entities.push(entity);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// Define relationships
|
|
546
|
+
dataModel.relationships = this.defineRelationships(dataModel.entities);
|
|
547
|
+
|
|
548
|
+
// Define global constraints
|
|
549
|
+
dataModel.constraints = this.defineGlobalConstraints();
|
|
550
|
+
|
|
551
|
+
// Define indexes
|
|
552
|
+
dataModel.indexes = this.defineGlobalIndexes(dataModel.entities);
|
|
553
|
+
|
|
554
|
+
// Define views
|
|
555
|
+
dataModel.views = this.defineViews(dataModel.entities);
|
|
556
|
+
|
|
557
|
+
return dataModel;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
/**
|
|
561
|
+
* Extract entities from requirements
|
|
562
|
+
*/
|
|
563
|
+
extractEntities(requirements) {
|
|
564
|
+
const entities = new Set();
|
|
565
|
+
|
|
566
|
+
for (const requirement of requirements) {
|
|
567
|
+
const words = requirement.split(' ');
|
|
568
|
+
|
|
569
|
+
for (const word of words) {
|
|
570
|
+
// Look for nouns that could be entities
|
|
571
|
+
if (
|
|
572
|
+
word.length > 3 &&
|
|
573
|
+
!['system', 'must', 'should', 'will', 'data', 'user', 'interface'].includes(
|
|
574
|
+
word.toLowerCase(),
|
|
575
|
+
)
|
|
576
|
+
) {
|
|
577
|
+
if (word[0] === word[0].toUpperCase()) {
|
|
578
|
+
entities.add(word);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
// Add default entities if none found
|
|
585
|
+
if (entities.size === 0) {
|
|
586
|
+
entities.add('User');
|
|
587
|
+
entities.add('Session');
|
|
588
|
+
entities.add('Configuration');
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
return Array.from(entities);
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
/**
|
|
595
|
+
* Generate attributes for entity
|
|
596
|
+
*/
|
|
597
|
+
generateAttributes(entityName) {
|
|
598
|
+
const commonAttributes = [
|
|
599
|
+
{ name: 'id', type: 'UUID', nullable: false, unique: true },
|
|
600
|
+
{ name: 'created_at', type: 'TIMESTAMP', nullable: false, default: 'CURRENT_TIMESTAMP' },
|
|
601
|
+
{ name: 'updated_at', type: 'TIMESTAMP', nullable: false, default: 'CURRENT_TIMESTAMP' },
|
|
602
|
+
{ name: 'version', type: 'INTEGER', nullable: false, default: '1' },
|
|
603
|
+
];
|
|
604
|
+
|
|
605
|
+
const specificAttributes = [];
|
|
606
|
+
const entityLower = entityName.toLowerCase();
|
|
607
|
+
|
|
608
|
+
if (entityLower.includes('user')) {
|
|
609
|
+
specificAttributes.push(
|
|
610
|
+
{ name: 'username', type: 'VARCHAR(50)', nullable: false, unique: true },
|
|
611
|
+
{ name: 'email', type: 'VARCHAR(255)', nullable: false, unique: true },
|
|
612
|
+
{ name: 'password_hash', type: 'VARCHAR(255)', nullable: false },
|
|
613
|
+
{ name: 'is_active', type: 'BOOLEAN', nullable: false, default: 'true' },
|
|
614
|
+
{ name: 'last_login', type: 'TIMESTAMP', nullable: true },
|
|
615
|
+
);
|
|
616
|
+
} else if (entityLower.includes('session')) {
|
|
617
|
+
specificAttributes.push(
|
|
618
|
+
{ name: 'user_id', type: 'UUID', nullable: false },
|
|
619
|
+
{ name: 'token', type: 'VARCHAR(255)', nullable: false, unique: true },
|
|
620
|
+
{ name: 'expires_at', type: 'TIMESTAMP', nullable: false },
|
|
621
|
+
{ name: 'ip_address', type: 'INET', nullable: true },
|
|
622
|
+
{ name: 'user_agent', type: 'TEXT', nullable: true },
|
|
623
|
+
);
|
|
624
|
+
} else {
|
|
625
|
+
specificAttributes.push(
|
|
626
|
+
{ name: 'name', type: 'VARCHAR(255)', nullable: false },
|
|
627
|
+
{ name: 'description', type: 'TEXT', nullable: true },
|
|
628
|
+
{ name: 'status', type: 'VARCHAR(50)', nullable: false, default: "'active'" },
|
|
629
|
+
);
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
return [...commonAttributes, ...specificAttributes];
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
/**
|
|
636
|
+
* Generate constraints for entity
|
|
637
|
+
*/
|
|
638
|
+
generateConstraints(entityName) {
|
|
639
|
+
const constraints = [
|
|
640
|
+
{ name: `${entityName.toLowerCase()}_id_pk`, type: 'PRIMARY KEY', column: 'id' },
|
|
641
|
+
{
|
|
642
|
+
name: `${entityName.toLowerCase()}_version_positive`,
|
|
643
|
+
type: 'CHECK',
|
|
644
|
+
condition: 'version > 0',
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
name: `${entityName.toLowerCase()}_created_before_updated`,
|
|
648
|
+
type: 'CHECK',
|
|
649
|
+
condition: 'created_at <= updated_at',
|
|
650
|
+
},
|
|
651
|
+
];
|
|
652
|
+
|
|
653
|
+
const entityLower = entityName.toLowerCase();
|
|
654
|
+
|
|
655
|
+
if (entityLower.includes('user')) {
|
|
656
|
+
constraints.push(
|
|
657
|
+
{
|
|
658
|
+
name: 'user_email_format',
|
|
659
|
+
type: 'CHECK',
|
|
660
|
+
condition: "email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$'",
|
|
661
|
+
},
|
|
662
|
+
{ name: 'user_username_length', type: 'CHECK', condition: 'length(username) >= 3' },
|
|
663
|
+
);
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
return constraints;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
/**
|
|
670
|
+
* Generate indexes for entity
|
|
671
|
+
*/
|
|
672
|
+
generateIndexes(entityName) {
|
|
673
|
+
const indexes = [
|
|
674
|
+
{
|
|
675
|
+
name: `idx_${entityName.toLowerCase()}_created_at`,
|
|
676
|
+
type: 'BTREE',
|
|
677
|
+
columns: ['created_at'],
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
name: `idx_${entityName.toLowerCase()}_updated_at`,
|
|
681
|
+
type: 'BTREE',
|
|
682
|
+
columns: ['updated_at'],
|
|
683
|
+
},
|
|
684
|
+
];
|
|
685
|
+
|
|
686
|
+
const entityLower = entityName.toLowerCase();
|
|
687
|
+
|
|
688
|
+
if (entityLower.includes('user')) {
|
|
689
|
+
indexes.push(
|
|
690
|
+
{ name: 'idx_user_email', type: 'BTREE', columns: ['email'] },
|
|
691
|
+
{ name: 'idx_user_username', type: 'BTREE', columns: ['username'] },
|
|
692
|
+
{ name: 'idx_user_active', type: 'BTREE', columns: ['is_active'] },
|
|
693
|
+
);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
return indexes;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
/**
|
|
700
|
+
* Define relationships between entities
|
|
701
|
+
*/
|
|
702
|
+
defineRelationships(entities) {
|
|
703
|
+
const relationships = [];
|
|
704
|
+
|
|
705
|
+
// Look for entities that could have relationships
|
|
706
|
+
const userEntity = entities.find((e) => e.name.toLowerCase().includes('user'));
|
|
707
|
+
const sessionEntity = entities.find((e) => e.name.toLowerCase().includes('session'));
|
|
708
|
+
|
|
709
|
+
if (userEntity && sessionEntity) {
|
|
710
|
+
relationships.push({
|
|
711
|
+
name: 'user_sessions',
|
|
712
|
+
type: 'one-to-many',
|
|
713
|
+
parent: userEntity.name,
|
|
714
|
+
child: sessionEntity.name,
|
|
715
|
+
parentKey: 'id',
|
|
716
|
+
childKey: 'user_id',
|
|
717
|
+
onDelete: 'CASCADE',
|
|
718
|
+
onUpdate: 'RESTRICT',
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
return relationships;
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
/**
|
|
726
|
+
* Define global constraints
|
|
727
|
+
*/
|
|
728
|
+
defineGlobalConstraints() {
|
|
729
|
+
return [
|
|
730
|
+
{ name: 'no_future_created_at', type: 'CHECK', condition: 'created_at <= CURRENT_TIMESTAMP' },
|
|
731
|
+
{ name: 'no_future_updated_at', type: 'CHECK', condition: 'updated_at <= CURRENT_TIMESTAMP' },
|
|
732
|
+
];
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/**
|
|
736
|
+
* Define global indexes
|
|
737
|
+
*/
|
|
738
|
+
defineGlobalIndexes(entities) {
|
|
739
|
+
const indexes = [];
|
|
740
|
+
|
|
741
|
+
// Add composite indexes for common query patterns
|
|
742
|
+
for (const entity of entities) {
|
|
743
|
+
indexes.push({
|
|
744
|
+
name: `idx_${entity.name.toLowerCase()}_status_created`,
|
|
745
|
+
type: 'BTREE',
|
|
746
|
+
table: entity.name,
|
|
747
|
+
columns: ['status', 'created_at'],
|
|
748
|
+
});
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
return indexes;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
/**
|
|
755
|
+
* Define views
|
|
756
|
+
*/
|
|
757
|
+
defineViews(entities) {
|
|
758
|
+
const views = [];
|
|
759
|
+
|
|
760
|
+
// Create a view for active entities
|
|
761
|
+
for (const entity of entities) {
|
|
762
|
+
if (entity.attributes.some((attr) => attr.name === 'is_active' || attr.name === 'status')) {
|
|
763
|
+
views.push({
|
|
764
|
+
name: `active_${entity.name.toLowerCase()}s`,
|
|
765
|
+
definition: `SELECT * FROM ${entity.name} WHERE ${entity.attributes.some((attr) => attr.name === 'is_active') ? 'is_active = true' : "status = 'active'"}`,
|
|
766
|
+
purpose: `Show only active ${entity.name.toLowerCase()} records`,
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
return views;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* Design API structure
|
|
776
|
+
*/
|
|
777
|
+
async designApiStructure(specification) {
|
|
778
|
+
const apiDesign = {
|
|
779
|
+
version: 'v1',
|
|
780
|
+
baseUrl: '/api/v1',
|
|
781
|
+
authentication: 'Bearer Token',
|
|
782
|
+
endpoints: [],
|
|
783
|
+
schemas: [],
|
|
784
|
+
errorHandling: {},
|
|
785
|
+
rateLimiting: {},
|
|
786
|
+
versioning: {},
|
|
787
|
+
};
|
|
788
|
+
|
|
789
|
+
// Generate endpoints based on requirements
|
|
790
|
+
const requirements = specification.requirements || [];
|
|
791
|
+
|
|
792
|
+
for (const requirement of requirements) {
|
|
793
|
+
if (requirement.toLowerCase().includes('api')) {
|
|
794
|
+
const endpoints = this.generateEndpoints(requirement);
|
|
795
|
+
apiDesign.endpoints.push(...endpoints);
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
// Generate schemas
|
|
800
|
+
apiDesign.schemas = this.generateApiSchemas(apiDesign.endpoints);
|
|
801
|
+
|
|
802
|
+
// Define error handling
|
|
803
|
+
apiDesign.errorHandling = this.defineApiErrorHandling();
|
|
804
|
+
|
|
805
|
+
// Define rate limiting
|
|
806
|
+
apiDesign.rateLimiting = this.defineApiRateLimiting();
|
|
807
|
+
|
|
808
|
+
// Define versioning strategy
|
|
809
|
+
apiDesign.versioning = this.defineApiVersioning();
|
|
810
|
+
|
|
811
|
+
return apiDesign;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
/**
|
|
815
|
+
* Generate endpoints from requirement
|
|
816
|
+
*/
|
|
817
|
+
generateEndpoints(requirement) {
|
|
818
|
+
const endpoints = [];
|
|
819
|
+
|
|
820
|
+
// Basic CRUD endpoints
|
|
821
|
+
endpoints.push(
|
|
822
|
+
{
|
|
823
|
+
path: '/resources',
|
|
824
|
+
method: 'GET',
|
|
825
|
+
summary: 'List all resources',
|
|
826
|
+
parameters: [
|
|
827
|
+
{ name: 'page', type: 'integer', description: 'Page number' },
|
|
828
|
+
{ name: 'limit', type: 'integer', description: 'Items per page' },
|
|
829
|
+
{ name: 'sort', type: 'string', description: 'Sort field' },
|
|
830
|
+
],
|
|
831
|
+
responses: {
|
|
832
|
+
200: { description: 'Success', schema: 'ResourceList' },
|
|
833
|
+
400: { description: 'Bad Request', schema: 'Error' },
|
|
834
|
+
401: { description: 'Unauthorized', schema: 'Error' },
|
|
835
|
+
},
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
path: '/resources/{id}',
|
|
839
|
+
method: 'GET',
|
|
840
|
+
summary: 'Get resource by ID',
|
|
841
|
+
parameters: [{ name: 'id', type: 'string', description: 'Resource ID', required: true }],
|
|
842
|
+
responses: {
|
|
843
|
+
200: { description: 'Success', schema: 'Resource' },
|
|
844
|
+
404: { description: 'Not Found', schema: 'Error' },
|
|
845
|
+
401: { description: 'Unauthorized', schema: 'Error' },
|
|
846
|
+
},
|
|
847
|
+
},
|
|
848
|
+
{
|
|
849
|
+
path: '/resources',
|
|
850
|
+
method: 'POST',
|
|
851
|
+
summary: 'Create new resource',
|
|
852
|
+
requestBody: { schema: 'CreateResourceRequest' },
|
|
853
|
+
responses: {
|
|
854
|
+
201: { description: 'Created', schema: 'Resource' },
|
|
855
|
+
400: { description: 'Bad Request', schema: 'Error' },
|
|
856
|
+
401: { description: 'Unauthorized', schema: 'Error' },
|
|
857
|
+
},
|
|
858
|
+
},
|
|
859
|
+
{
|
|
860
|
+
path: '/resources/{id}',
|
|
861
|
+
method: 'PUT',
|
|
862
|
+
summary: 'Update resource',
|
|
863
|
+
parameters: [{ name: 'id', type: 'string', description: 'Resource ID', required: true }],
|
|
864
|
+
requestBody: { schema: 'UpdateResourceRequest' },
|
|
865
|
+
responses: {
|
|
866
|
+
200: { description: 'Updated', schema: 'Resource' },
|
|
867
|
+
404: { description: 'Not Found', schema: 'Error' },
|
|
868
|
+
400: { description: 'Bad Request', schema: 'Error' },
|
|
869
|
+
401: { description: 'Unauthorized', schema: 'Error' },
|
|
870
|
+
},
|
|
871
|
+
},
|
|
872
|
+
{
|
|
873
|
+
path: '/resources/{id}',
|
|
874
|
+
method: 'DELETE',
|
|
875
|
+
summary: 'Delete resource',
|
|
876
|
+
parameters: [{ name: 'id', type: 'string', description: 'Resource ID', required: true }],
|
|
877
|
+
responses: {
|
|
878
|
+
204: { description: 'Deleted' },
|
|
879
|
+
404: { description: 'Not Found', schema: 'Error' },
|
|
880
|
+
401: { description: 'Unauthorized', schema: 'Error' },
|
|
881
|
+
},
|
|
882
|
+
},
|
|
883
|
+
);
|
|
884
|
+
|
|
885
|
+
return endpoints;
|
|
886
|
+
}
|
|
887
|
+
|
|
888
|
+
/**
|
|
889
|
+
* Generate API schemas
|
|
890
|
+
*/
|
|
891
|
+
generateApiSchemas(endpoints) {
|
|
892
|
+
const schemas = [];
|
|
893
|
+
|
|
894
|
+
// Basic resource schema
|
|
895
|
+
schemas.push({
|
|
896
|
+
name: 'Resource',
|
|
897
|
+
type: 'object',
|
|
898
|
+
properties: {
|
|
899
|
+
id: { type: 'string', format: 'uuid' },
|
|
900
|
+
name: { type: 'string' },
|
|
901
|
+
description: { type: 'string' },
|
|
902
|
+
status: { type: 'string', enum: ['active', 'inactive'] },
|
|
903
|
+
created_at: { type: 'string', format: 'date-time' },
|
|
904
|
+
updated_at: { type: 'string', format: 'date-time' },
|
|
905
|
+
},
|
|
906
|
+
required: ['id', 'name', 'status'],
|
|
907
|
+
});
|
|
908
|
+
|
|
909
|
+
// Resource list schema
|
|
910
|
+
schemas.push({
|
|
911
|
+
name: 'ResourceList',
|
|
912
|
+
type: 'object',
|
|
913
|
+
properties: {
|
|
914
|
+
data: { type: 'array', items: { $ref: '#/schemas/Resource' } },
|
|
915
|
+
pagination: {
|
|
916
|
+
type: 'object',
|
|
917
|
+
properties: {
|
|
918
|
+
page: { type: 'integer' },
|
|
919
|
+
limit: { type: 'integer' },
|
|
920
|
+
total: { type: 'integer' },
|
|
921
|
+
pages: { type: 'integer' },
|
|
922
|
+
},
|
|
923
|
+
},
|
|
924
|
+
},
|
|
925
|
+
});
|
|
926
|
+
|
|
927
|
+
// Error schema
|
|
928
|
+
schemas.push({
|
|
929
|
+
name: 'Error',
|
|
930
|
+
type: 'object',
|
|
931
|
+
properties: {
|
|
932
|
+
error: { type: 'string' },
|
|
933
|
+
message: { type: 'string' },
|
|
934
|
+
details: { type: 'array', items: { type: 'string' } },
|
|
935
|
+
timestamp: { type: 'string', format: 'date-time' },
|
|
936
|
+
},
|
|
937
|
+
required: ['error', 'message'],
|
|
938
|
+
});
|
|
939
|
+
|
|
940
|
+
return schemas;
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
/**
|
|
944
|
+
* Define API error handling
|
|
945
|
+
*/
|
|
946
|
+
defineApiErrorHandling() {
|
|
947
|
+
return {
|
|
948
|
+
strategy: 'Consistent error responses with proper HTTP status codes',
|
|
949
|
+
errorCodes: {
|
|
950
|
+
400: 'Bad Request - Invalid input data',
|
|
951
|
+
401: 'Unauthorized - Authentication required',
|
|
952
|
+
403: 'Forbidden - Insufficient permissions',
|
|
953
|
+
404: 'Not Found - Resource not found',
|
|
954
|
+
409: 'Conflict - Resource already exists',
|
|
955
|
+
422: 'Unprocessable Entity - Validation errors',
|
|
956
|
+
429: 'Too Many Requests - Rate limit exceeded',
|
|
957
|
+
500: 'Internal Server Error - Server error',
|
|
958
|
+
503: 'Service Unavailable - Service temporarily unavailable',
|
|
959
|
+
},
|
|
960
|
+
errorFormat: {
|
|
961
|
+
error: 'Error type',
|
|
962
|
+
message: 'Human-readable error message',
|
|
963
|
+
details: 'Array of specific error details',
|
|
964
|
+
timestamp: 'ISO 8601 timestamp',
|
|
965
|
+
},
|
|
966
|
+
logging: 'All errors logged with request ID and stack trace',
|
|
967
|
+
};
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
/**
|
|
971
|
+
* Define API rate limiting
|
|
972
|
+
*/
|
|
973
|
+
defineApiRateLimiting() {
|
|
974
|
+
return {
|
|
975
|
+
strategy: 'Token bucket algorithm with per-user and per-IP limits',
|
|
976
|
+
limits: {
|
|
977
|
+
authenticated: { requests: 1000, window: '1 hour' },
|
|
978
|
+
anonymous: { requests: 100, window: '1 hour' },
|
|
979
|
+
burst: { requests: 10, window: '1 minute' },
|
|
980
|
+
},
|
|
981
|
+
headers: {
|
|
982
|
+
'X-RateLimit-Limit': 'Request limit for current window',
|
|
983
|
+
'X-RateLimit-Remaining': 'Remaining requests in current window',
|
|
984
|
+
'X-RateLimit-Reset': 'Unix timestamp when limit resets',
|
|
985
|
+
},
|
|
986
|
+
handling: 'Return 429 status with retry-after header',
|
|
987
|
+
};
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
/**
|
|
991
|
+
* Define API versioning
|
|
992
|
+
*/
|
|
993
|
+
defineApiVersioning() {
|
|
994
|
+
return {
|
|
995
|
+
strategy: 'URL path versioning with backward compatibility',
|
|
996
|
+
format: '/api/v{major}',
|
|
997
|
+
lifecycle: {
|
|
998
|
+
development: 'Active development with breaking changes',
|
|
999
|
+
stable: 'Stable API with backward compatibility',
|
|
1000
|
+
deprecated: 'Deprecated with migration guide',
|
|
1001
|
+
retired: 'No longer supported',
|
|
1002
|
+
},
|
|
1003
|
+
migration: 'Gradual migration with parallel support periods',
|
|
1004
|
+
};
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
/**
|
|
1008
|
+
* Plan deployment architecture
|
|
1009
|
+
*/
|
|
1010
|
+
async planDeploymentArchitecture(specification) {
|
|
1011
|
+
const deployment = {
|
|
1012
|
+
strategy: 'containerized',
|
|
1013
|
+
environments: [],
|
|
1014
|
+
infrastructure: {},
|
|
1015
|
+
monitoring: {},
|
|
1016
|
+
security: {},
|
|
1017
|
+
scalability: {},
|
|
1018
|
+
};
|
|
1019
|
+
|
|
1020
|
+
// Define environments
|
|
1021
|
+
deployment.environments = [
|
|
1022
|
+
{
|
|
1023
|
+
name: 'development',
|
|
1024
|
+
purpose: 'Development and testing',
|
|
1025
|
+
resources: 'Single node with shared resources',
|
|
1026
|
+
database: 'SQLite or embedded database',
|
|
1027
|
+
monitoring: 'Basic logging',
|
|
1028
|
+
},
|
|
1029
|
+
{
|
|
1030
|
+
name: 'staging',
|
|
1031
|
+
purpose: 'Pre-production testing',
|
|
1032
|
+
resources: 'Production-like environment with reduced capacity',
|
|
1033
|
+
database: 'Managed database service',
|
|
1034
|
+
monitoring: 'Full monitoring stack',
|
|
1035
|
+
},
|
|
1036
|
+
{
|
|
1037
|
+
name: 'production',
|
|
1038
|
+
purpose: 'Live application serving users',
|
|
1039
|
+
resources: 'Multiple nodes with load balancing',
|
|
1040
|
+
database: 'High-availability managed database',
|
|
1041
|
+
monitoring: 'Comprehensive monitoring and alerting',
|
|
1042
|
+
},
|
|
1043
|
+
];
|
|
1044
|
+
|
|
1045
|
+
// Define infrastructure
|
|
1046
|
+
deployment.infrastructure = {
|
|
1047
|
+
platform: 'Container orchestration (Kubernetes/Docker Swarm)',
|
|
1048
|
+
compute: 'Auto-scaling container instances',
|
|
1049
|
+
storage: 'Persistent volumes with backup',
|
|
1050
|
+
networking: 'Load balancer with SSL termination',
|
|
1051
|
+
dns: 'Managed DNS with health checks',
|
|
1052
|
+
};
|
|
1053
|
+
|
|
1054
|
+
// Define monitoring
|
|
1055
|
+
deployment.monitoring = {
|
|
1056
|
+
metrics: 'Application and infrastructure metrics',
|
|
1057
|
+
logging: 'Centralized logging with log aggregation',
|
|
1058
|
+
tracing: 'Distributed tracing for request flow',
|
|
1059
|
+
alerting: 'Multi-channel alerting for critical issues',
|
|
1060
|
+
dashboards: 'Real-time dashboards for system health',
|
|
1061
|
+
};
|
|
1062
|
+
|
|
1063
|
+
// Define security
|
|
1064
|
+
deployment.security = {
|
|
1065
|
+
secrets: 'Encrypted secrets management',
|
|
1066
|
+
network: 'Network policies and firewall rules',
|
|
1067
|
+
access: 'Role-based access control',
|
|
1068
|
+
scanning: 'Container and dependency vulnerability scanning',
|
|
1069
|
+
compliance: 'Security compliance monitoring',
|
|
1070
|
+
};
|
|
1071
|
+
|
|
1072
|
+
// Define scalability
|
|
1073
|
+
deployment.scalability = {
|
|
1074
|
+
horizontal: 'Auto-scaling based on CPU/memory/requests',
|
|
1075
|
+
vertical: 'Resource limits and requests optimization',
|
|
1076
|
+
database: 'Database scaling with read replicas',
|
|
1077
|
+
caching: 'Multi-layer caching strategy',
|
|
1078
|
+
cdn: 'Content delivery network for static assets',
|
|
1079
|
+
};
|
|
1080
|
+
|
|
1081
|
+
return deployment;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
/**
|
|
1085
|
+
* Design security architecture
|
|
1086
|
+
*/
|
|
1087
|
+
async designSecurityArchitecture(specification) {
|
|
1088
|
+
const security = {
|
|
1089
|
+
authentication: {},
|
|
1090
|
+
authorization: {},
|
|
1091
|
+
dataProtection: {},
|
|
1092
|
+
networkSecurity: {},
|
|
1093
|
+
monitoring: {},
|
|
1094
|
+
compliance: {},
|
|
1095
|
+
};
|
|
1096
|
+
|
|
1097
|
+
// Authentication design
|
|
1098
|
+
security.authentication = {
|
|
1099
|
+
mechanism: 'JWT tokens with refresh token rotation',
|
|
1100
|
+
providers: ['Local credentials', 'OAuth2/OpenID Connect'],
|
|
1101
|
+
session: 'Stateless with secure token storage',
|
|
1102
|
+
mfa: 'Multi-factor authentication for sensitive operations',
|
|
1103
|
+
passwordPolicy: 'Strong password requirements with complexity rules',
|
|
1104
|
+
};
|
|
1105
|
+
|
|
1106
|
+
// Authorization design
|
|
1107
|
+
security.authorization = {
|
|
1108
|
+
model: 'Role-based access control (RBAC)',
|
|
1109
|
+
permissions: 'Fine-grained permissions with resource-level access',
|
|
1110
|
+
policies: 'Attribute-based access control for complex rules',
|
|
1111
|
+
delegation: 'Secure delegation with time-limited tokens',
|
|
1112
|
+
auditing: 'Complete audit trail of access decisions',
|
|
1113
|
+
};
|
|
1114
|
+
|
|
1115
|
+
// Data protection design
|
|
1116
|
+
security.dataProtection = {
|
|
1117
|
+
encryption: {
|
|
1118
|
+
atRest: 'AES-256 encryption for stored data',
|
|
1119
|
+
inTransit: 'TLS 1.3 for all network communication',
|
|
1120
|
+
keys: 'Hardware security module or managed key service',
|
|
1121
|
+
},
|
|
1122
|
+
privacy: {
|
|
1123
|
+
pii: 'Personal information identification and protection',
|
|
1124
|
+
anonymization: 'Data anonymization for analytics',
|
|
1125
|
+
retention: 'Data retention policies with automatic deletion',
|
|
1126
|
+
},
|
|
1127
|
+
backup: {
|
|
1128
|
+
encryption: 'Encrypted backups with separate key management',
|
|
1129
|
+
testing: 'Regular backup restoration testing',
|
|
1130
|
+
offsite: 'Geographically distributed backup storage',
|
|
1131
|
+
},
|
|
1132
|
+
};
|
|
1133
|
+
|
|
1134
|
+
// Network security design
|
|
1135
|
+
security.networkSecurity = {
|
|
1136
|
+
firewall: 'Web application firewall with DDoS protection',
|
|
1137
|
+
segmentation: 'Network segmentation with micro-segmentation',
|
|
1138
|
+
monitoring: 'Network traffic monitoring and analysis',
|
|
1139
|
+
vpn: 'VPN access for administrative operations',
|
|
1140
|
+
certificates: 'Automated certificate management and renewal',
|
|
1141
|
+
};
|
|
1142
|
+
|
|
1143
|
+
// Security monitoring design
|
|
1144
|
+
security.monitoring = {
|
|
1145
|
+
siem: 'Security information and event management',
|
|
1146
|
+
ids: 'Intrusion detection and prevention systems',
|
|
1147
|
+
behavior: 'User and entity behavior analytics',
|
|
1148
|
+
threat: 'Threat intelligence integration',
|
|
1149
|
+
incident: 'Automated incident response workflows',
|
|
1150
|
+
};
|
|
1151
|
+
|
|
1152
|
+
// Compliance design
|
|
1153
|
+
security.compliance = {
|
|
1154
|
+
frameworks: ['GDPR', 'SOC 2', 'ISO 27001'],
|
|
1155
|
+
auditing: 'Regular security audits and penetration testing',
|
|
1156
|
+
documentation: 'Security policies and procedures documentation',
|
|
1157
|
+
training: 'Security awareness training for all personnel',
|
|
1158
|
+
reporting: 'Compliance reporting and evidence collection',
|
|
1159
|
+
};
|
|
1160
|
+
|
|
1161
|
+
return security;
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
/**
|
|
1165
|
+
* Plan scalability
|
|
1166
|
+
*/
|
|
1167
|
+
async planScalability(specification) {
|
|
1168
|
+
const scalability = {
|
|
1169
|
+
horizontalScaling: {},
|
|
1170
|
+
verticalScaling: {},
|
|
1171
|
+
dataScaling: {},
|
|
1172
|
+
performanceOptimization: {},
|
|
1173
|
+
monitoring: {},
|
|
1174
|
+
};
|
|
1175
|
+
|
|
1176
|
+
// Horizontal scaling plan
|
|
1177
|
+
scalability.horizontalScaling = {
|
|
1178
|
+
strategy: 'Auto-scaling based on demand metrics',
|
|
1179
|
+
triggers: ['CPU utilization > 70%', 'Memory utilization > 80%', 'Request queue length > 10'],
|
|
1180
|
+
limits: { minimum: 2, maximum: 20, scaleUpRate: 2, scaleDownRate: 1 },
|
|
1181
|
+
loadBalancing: 'Round-robin with health checks',
|
|
1182
|
+
sessionAffinity: 'Stateless design with external session storage',
|
|
1183
|
+
};
|
|
1184
|
+
|
|
1185
|
+
// Vertical scaling plan
|
|
1186
|
+
scalability.verticalScaling = {
|
|
1187
|
+
strategy: 'Resource optimization based on usage patterns',
|
|
1188
|
+
monitoring: 'Continuous resource utilization monitoring',
|
|
1189
|
+
recommendations: 'Automated resource recommendation engine',
|
|
1190
|
+
limits: 'Resource limits to prevent resource exhaustion',
|
|
1191
|
+
optimization: 'Container resource optimization',
|
|
1192
|
+
};
|
|
1193
|
+
|
|
1194
|
+
// Data scaling plan
|
|
1195
|
+
scalability.dataScaling = {
|
|
1196
|
+
database: {
|
|
1197
|
+
readReplicas: 'Read replicas for read-heavy workloads',
|
|
1198
|
+
sharding: 'Database sharding for large datasets',
|
|
1199
|
+
caching: 'Multi-layer caching with Redis/Memcached',
|
|
1200
|
+
indexing: 'Optimized indexing strategies',
|
|
1201
|
+
},
|
|
1202
|
+
storage: {
|
|
1203
|
+
tiering: 'Storage tiering based on access patterns',
|
|
1204
|
+
compression: 'Data compression for storage efficiency',
|
|
1205
|
+
archiving: 'Automatic archiving of old data',
|
|
1206
|
+
partitioning: 'Data partitioning for improved performance',
|
|
1207
|
+
},
|
|
1208
|
+
};
|
|
1209
|
+
|
|
1210
|
+
// Performance optimization plan
|
|
1211
|
+
scalability.performanceOptimization = {
|
|
1212
|
+
caching: {
|
|
1213
|
+
application: 'In-memory application caching',
|
|
1214
|
+
database: 'Database query result caching',
|
|
1215
|
+
cdn: 'Content delivery network for static assets',
|
|
1216
|
+
browser: 'Browser caching with appropriate headers',
|
|
1217
|
+
},
|
|
1218
|
+
optimization: {
|
|
1219
|
+
queries: 'Database query optimization',
|
|
1220
|
+
algorithms: 'Algorithm complexity optimization',
|
|
1221
|
+
resources: 'Resource usage optimization',
|
|
1222
|
+
networking: 'Network latency optimization',
|
|
1223
|
+
},
|
|
1224
|
+
};
|
|
1225
|
+
|
|
1226
|
+
// Monitoring plan
|
|
1227
|
+
scalability.monitoring = {
|
|
1228
|
+
metrics: [
|
|
1229
|
+
'Response time and latency',
|
|
1230
|
+
'Throughput and requests per second',
|
|
1231
|
+
'Error rates and success rates',
|
|
1232
|
+
'Resource utilization (CPU, memory, disk)',
|
|
1233
|
+
'Database performance metrics',
|
|
1234
|
+
],
|
|
1235
|
+
alerting: 'Proactive alerting for performance degradation',
|
|
1236
|
+
capacity: 'Capacity planning based on growth projections',
|
|
1237
|
+
testing: 'Regular performance testing and load testing',
|
|
1238
|
+
};
|
|
1239
|
+
|
|
1240
|
+
return scalability;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
/**
|
|
1244
|
+
* Identify integration points
|
|
1245
|
+
*/
|
|
1246
|
+
async identifyIntegrationPoints(specification) {
|
|
1247
|
+
const integrations = [];
|
|
1248
|
+
const requirements = specification.requirements || [];
|
|
1249
|
+
|
|
1250
|
+
// Analyze requirements for integration needs
|
|
1251
|
+
for (const requirement of requirements) {
|
|
1252
|
+
const reqLower = requirement.toLowerCase();
|
|
1253
|
+
|
|
1254
|
+
if (reqLower.includes('external') || reqLower.includes('third-party')) {
|
|
1255
|
+
integrations.push({
|
|
1256
|
+
name: 'External API Integration',
|
|
1257
|
+
type: 'REST API',
|
|
1258
|
+
purpose: 'Integrate with external services',
|
|
1259
|
+
protocol: 'HTTPS',
|
|
1260
|
+
authentication: 'API Key or OAuth2',
|
|
1261
|
+
dataFormat: 'JSON',
|
|
1262
|
+
errorHandling: 'Retry with exponential backoff',
|
|
1263
|
+
monitoring: 'API health checks and response time monitoring',
|
|
1264
|
+
});
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
if (reqLower.includes('database') || reqLower.includes('data')) {
|
|
1268
|
+
integrations.push({
|
|
1269
|
+
name: 'Database Integration',
|
|
1270
|
+
type: 'Database',
|
|
1271
|
+
purpose: 'Data persistence and retrieval',
|
|
1272
|
+
protocol: 'Database-specific protocol',
|
|
1273
|
+
authentication: 'Connection string with credentials',
|
|
1274
|
+
dataFormat: 'SQL or NoSQL',
|
|
1275
|
+
errorHandling: 'Connection pooling and retry logic',
|
|
1276
|
+
monitoring: 'Database performance and connection monitoring',
|
|
1277
|
+
});
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
if (reqLower.includes('message') || reqLower.includes('event')) {
|
|
1281
|
+
integrations.push({
|
|
1282
|
+
name: 'Message Queue Integration',
|
|
1283
|
+
type: 'Message Queue',
|
|
1284
|
+
purpose: 'Asynchronous communication',
|
|
1285
|
+
protocol: 'AMQP or proprietary',
|
|
1286
|
+
authentication: 'Queue-specific authentication',
|
|
1287
|
+
dataFormat: 'JSON or Binary',
|
|
1288
|
+
errorHandling: 'Dead letter queues and retry policies',
|
|
1289
|
+
monitoring: 'Queue depth and processing time monitoring',
|
|
1290
|
+
});
|
|
1291
|
+
}
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
// Add common integrations
|
|
1295
|
+
integrations.push({
|
|
1296
|
+
name: 'Logging Integration',
|
|
1297
|
+
type: 'Logging Service',
|
|
1298
|
+
purpose: 'Centralized logging and monitoring',
|
|
1299
|
+
protocol: 'HTTP/HTTPS',
|
|
1300
|
+
authentication: 'API Key',
|
|
1301
|
+
dataFormat: 'Structured logs (JSON)',
|
|
1302
|
+
errorHandling: 'Local buffering with batch sending',
|
|
1303
|
+
monitoring: 'Log ingestion and processing monitoring',
|
|
1304
|
+
});
|
|
1305
|
+
|
|
1306
|
+
return integrations;
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
/**
|
|
1310
|
+
* Define quality attributes
|
|
1311
|
+
*/
|
|
1312
|
+
async defineQualityAttributes(specification) {
|
|
1313
|
+
return {
|
|
1314
|
+
performance: {
|
|
1315
|
+
responseTime: 'API responses under 200ms for 95th percentile',
|
|
1316
|
+
throughput: 'Handle 1000+ requests per second',
|
|
1317
|
+
scalability: 'Scale horizontally to handle load increases',
|
|
1318
|
+
efficiency: 'Optimize resource usage and minimize waste',
|
|
1319
|
+
},
|
|
1320
|
+
reliability: {
|
|
1321
|
+
availability: '99.9% uptime with planned maintenance windows',
|
|
1322
|
+
faultTolerance: 'Graceful degradation when components fail',
|
|
1323
|
+
recoverability: 'Automatic recovery from transient failures',
|
|
1324
|
+
durability: 'Data persistence with backup and recovery',
|
|
1325
|
+
},
|
|
1326
|
+
security: {
|
|
1327
|
+
confidentiality: 'Protect sensitive data with encryption',
|
|
1328
|
+
integrity: 'Ensure data accuracy and prevent tampering',
|
|
1329
|
+
authentication: 'Verify user identity before access',
|
|
1330
|
+
authorization: 'Control access based on user permissions',
|
|
1331
|
+
},
|
|
1332
|
+
usability: {
|
|
1333
|
+
learnability: 'Intuitive interfaces requiring minimal training',
|
|
1334
|
+
efficiency: 'Allow experienced users to work efficiently',
|
|
1335
|
+
memorability: 'Easy to remember after periods of non-use',
|
|
1336
|
+
errors: 'Minimize user errors and provide clear error messages',
|
|
1337
|
+
},
|
|
1338
|
+
maintainability: {
|
|
1339
|
+
modifiability: 'Easy to modify and extend functionality',
|
|
1340
|
+
testability: 'Comprehensive test coverage and automated testing',
|
|
1341
|
+
reusability: 'Modular design with reusable components',
|
|
1342
|
+
analyzability: 'Clear code structure and documentation',
|
|
1343
|
+
},
|
|
1344
|
+
};
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
/**
|
|
1348
|
+
* Document architectural decisions
|
|
1349
|
+
*/
|
|
1350
|
+
async documentArchitecturalDecisions(result) {
|
|
1351
|
+
const decisions = [];
|
|
1352
|
+
|
|
1353
|
+
// Architecture style decision
|
|
1354
|
+
decisions.push({
|
|
1355
|
+
id: 'AD-001',
|
|
1356
|
+
title: `Use ${result.systemDesign.style} Architecture`,
|
|
1357
|
+
status: 'Accepted',
|
|
1358
|
+
context: 'Need to choose appropriate architectural style for the system',
|
|
1359
|
+
decision: `Implement ${result.systemDesign.style} architecture with ${result.systemDesign.layers.length} layers`,
|
|
1360
|
+
consequences: {
|
|
1361
|
+
positive: [
|
|
1362
|
+
'Clear separation of concerns',
|
|
1363
|
+
'Maintainable code structure',
|
|
1364
|
+
'Scalable design',
|
|
1365
|
+
],
|
|
1366
|
+
negative: ['Potential performance overhead', 'Added complexity for simple operations'],
|
|
1367
|
+
},
|
|
1368
|
+
alternatives: ['Monolithic', 'Microservices', 'Event-driven'],
|
|
1369
|
+
date: new Date().toISOString(),
|
|
1370
|
+
});
|
|
1371
|
+
|
|
1372
|
+
// Design patterns decision
|
|
1373
|
+
decisions.push({
|
|
1374
|
+
id: 'AD-002',
|
|
1375
|
+
title: 'Apply Standard Design Patterns',
|
|
1376
|
+
status: 'Accepted',
|
|
1377
|
+
context: 'Need to ensure consistent and well-understood design patterns',
|
|
1378
|
+
decision: `Implement ${result.designPatterns.length} design patterns including Repository, Factory, and Strategy patterns`,
|
|
1379
|
+
consequences: {
|
|
1380
|
+
positive: [
|
|
1381
|
+
'Improved code maintainability',
|
|
1382
|
+
'Better testability',
|
|
1383
|
+
'Consistent design approach',
|
|
1384
|
+
],
|
|
1385
|
+
negative: ['Learning curve for developers', 'Potential over-engineering'],
|
|
1386
|
+
},
|
|
1387
|
+
alternatives: ['Ad-hoc design', 'Framework-specific patterns'],
|
|
1388
|
+
date: new Date().toISOString(),
|
|
1389
|
+
});
|
|
1390
|
+
|
|
1391
|
+
// Data model decision
|
|
1392
|
+
decisions.push({
|
|
1393
|
+
id: 'AD-003',
|
|
1394
|
+
title: 'Relational Database Design',
|
|
1395
|
+
status: 'Accepted',
|
|
1396
|
+
context: 'Need to choose appropriate data storage and modeling approach',
|
|
1397
|
+
decision: `Use relational database with ${result.dataModel.entities.length} entities and normalized schema`,
|
|
1398
|
+
consequences: {
|
|
1399
|
+
positive: ['ACID compliance', 'Strong consistency', 'Mature ecosystem'],
|
|
1400
|
+
negative: ['Potential scalability limitations', 'Schema migration complexity'],
|
|
1401
|
+
},
|
|
1402
|
+
alternatives: ['NoSQL database', 'Document database', 'Graph database'],
|
|
1403
|
+
date: new Date().toISOString(),
|
|
1404
|
+
});
|
|
1405
|
+
|
|
1406
|
+
return decisions;
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
/**
|
|
1410
|
+
* Assess architectural risks
|
|
1411
|
+
*/
|
|
1412
|
+
async assessArchitecturalRisks(result) {
|
|
1413
|
+
const risks = [];
|
|
1414
|
+
|
|
1415
|
+
// Complexity risk
|
|
1416
|
+
risks.push({
|
|
1417
|
+
id: 'AR-001',
|
|
1418
|
+
category: 'Complexity',
|
|
1419
|
+
description: 'System complexity may lead to maintenance challenges',
|
|
1420
|
+
probability: 'Medium',
|
|
1421
|
+
impact: 'High',
|
|
1422
|
+
riskLevel: 'High',
|
|
1423
|
+
mitigation: [
|
|
1424
|
+
'Implement comprehensive documentation',
|
|
1425
|
+
'Provide developer training',
|
|
1426
|
+
'Establish coding standards',
|
|
1427
|
+
'Regular code reviews',
|
|
1428
|
+
],
|
|
1429
|
+
monitoring: 'Code complexity metrics and maintainability index',
|
|
1430
|
+
});
|
|
1431
|
+
|
|
1432
|
+
// Performance risk
|
|
1433
|
+
risks.push({
|
|
1434
|
+
id: 'AR-002',
|
|
1435
|
+
category: 'Performance',
|
|
1436
|
+
description: 'Layered architecture may introduce performance overhead',
|
|
1437
|
+
probability: 'Low',
|
|
1438
|
+
impact: 'Medium',
|
|
1439
|
+
riskLevel: 'Medium',
|
|
1440
|
+
mitigation: [
|
|
1441
|
+
'Performance testing and profiling',
|
|
1442
|
+
'Caching strategies',
|
|
1443
|
+
'Database optimization',
|
|
1444
|
+
'Load balancing',
|
|
1445
|
+
],
|
|
1446
|
+
monitoring: 'Response time and throughput monitoring',
|
|
1447
|
+
});
|
|
1448
|
+
|
|
1449
|
+
// Security risk
|
|
1450
|
+
risks.push({
|
|
1451
|
+
id: 'AR-003',
|
|
1452
|
+
category: 'Security',
|
|
1453
|
+
description: 'Multiple integration points increase attack surface',
|
|
1454
|
+
probability: 'Medium',
|
|
1455
|
+
impact: 'High',
|
|
1456
|
+
riskLevel: 'High',
|
|
1457
|
+
mitigation: [
|
|
1458
|
+
'Security architecture review',
|
|
1459
|
+
'Regular security testing',
|
|
1460
|
+
'Input validation and sanitization',
|
|
1461
|
+
'Secure communication protocols',
|
|
1462
|
+
],
|
|
1463
|
+
monitoring: 'Security event monitoring and alerting',
|
|
1464
|
+
});
|
|
1465
|
+
|
|
1466
|
+
// Scalability risk
|
|
1467
|
+
risks.push({
|
|
1468
|
+
id: 'AR-004',
|
|
1469
|
+
category: 'Scalability',
|
|
1470
|
+
description: 'Database may become bottleneck under high load',
|
|
1471
|
+
probability: 'Medium',
|
|
1472
|
+
impact: 'High',
|
|
1473
|
+
riskLevel: 'High',
|
|
1474
|
+
mitigation: [
|
|
1475
|
+
'Database optimization',
|
|
1476
|
+
'Read replicas and caching',
|
|
1477
|
+
'Connection pooling',
|
|
1478
|
+
'Horizontal scaling strategies',
|
|
1479
|
+
],
|
|
1480
|
+
monitoring: 'Database performance and connection monitoring',
|
|
1481
|
+
});
|
|
1482
|
+
|
|
1483
|
+
return risks;
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
/**
|
|
1487
|
+
* Generate architecture document
|
|
1488
|
+
*/
|
|
1489
|
+
async generateArchitectureDocument(result) {
|
|
1490
|
+
const document = `# ${this.taskDescription} - Architecture Design
|
|
1491
|
+
|
|
1492
|
+
## System Architecture
|
|
1493
|
+
|
|
1494
|
+
### Architecture Style
|
|
1495
|
+
**Style**: ${result.systemDesign.style}
|
|
1496
|
+
**Layers**: ${result.systemDesign.layers.length}
|
|
1497
|
+
|
|
1498
|
+
${result.systemDesign.layers
|
|
1499
|
+
.map(
|
|
1500
|
+
(layer, index) => `
|
|
1501
|
+
#### ${index + 1}. ${layer.name}
|
|
1502
|
+
**Responsibility**: ${layer.responsibility}
|
|
1503
|
+
`,
|
|
1504
|
+
)
|
|
1505
|
+
.join('\n')}
|
|
1506
|
+
|
|
1507
|
+
### Data Flow
|
|
1508
|
+
${result.systemDesign.dataFlow.map((flow) => `- ${flow.from} → ${flow.to} (${flow.direction}): ${flow.dataType}`).join('\n')}
|
|
1509
|
+
|
|
1510
|
+
### Control Flow
|
|
1511
|
+
${result.systemDesign.controlFlow
|
|
1512
|
+
.map(
|
|
1513
|
+
(flow) => `
|
|
1514
|
+
#### ${flow.layer}
|
|
1515
|
+
- **Order**: ${flow.order}
|
|
1516
|
+
- **Triggers**: ${flow.triggers.join(', ')}
|
|
1517
|
+
- **Actions**: ${flow.actions.join(', ')}
|
|
1518
|
+
- **Outcomes**: ${flow.outcomes.join(', ')}
|
|
1519
|
+
`,
|
|
1520
|
+
)
|
|
1521
|
+
.join('\n')}
|
|
1522
|
+
|
|
1523
|
+
## Components
|
|
1524
|
+
|
|
1525
|
+
${result.components
|
|
1526
|
+
.map(
|
|
1527
|
+
(component, index) => `
|
|
1528
|
+
### ${index + 1}. ${component.name}
|
|
1529
|
+
**Type**: ${component.type}
|
|
1530
|
+
**Responsibility**: ${component.responsibility}
|
|
1531
|
+
**Interfaces**: ${component.interfaces.join(', ')}
|
|
1532
|
+
**Dependencies**: ${component.dependencies.join(', ')}
|
|
1533
|
+
**Patterns**: ${component.patterns.join(', ')}
|
|
1534
|
+
**Complexity**: ${component.complexity}
|
|
1535
|
+
`,
|
|
1536
|
+
)
|
|
1537
|
+
.join('\n')}
|
|
1538
|
+
|
|
1539
|
+
## Design Patterns
|
|
1540
|
+
|
|
1541
|
+
${result.designPatterns
|
|
1542
|
+
.map(
|
|
1543
|
+
(pattern, index) => `
|
|
1544
|
+
### ${index + 1}. ${pattern.name}
|
|
1545
|
+
**Type**: ${pattern.type}
|
|
1546
|
+
**Purpose**: ${pattern.purpose}
|
|
1547
|
+
**Applicability**: ${pattern.applicability}
|
|
1548
|
+
**Implementation**: ${pattern.implementation}
|
|
1549
|
+
**Benefits**: ${pattern.benefits.join(', ')}
|
|
1550
|
+
`,
|
|
1551
|
+
)
|
|
1552
|
+
.join('\n')}
|
|
1553
|
+
|
|
1554
|
+
## Data Model
|
|
1555
|
+
|
|
1556
|
+
### Entities
|
|
1557
|
+
${result.dataModel.entities
|
|
1558
|
+
.map(
|
|
1559
|
+
(entity, index) => `
|
|
1560
|
+
#### ${index + 1}. ${entity.name}
|
|
1561
|
+
**Primary Key**: ${entity.primaryKey}
|
|
1562
|
+
**Attributes**:
|
|
1563
|
+
${entity.attributes.map((attr) => `- ${attr.name}: ${attr.type}${attr.nullable ? '' : ' NOT NULL'}${attr.unique ? ' UNIQUE' : ''}${attr.default ? ` DEFAULT ${attr.default}` : ''}`).join('\n')}
|
|
1564
|
+
|
|
1565
|
+
**Constraints**:
|
|
1566
|
+
${entity.constraints.map((constraint) => `- ${constraint.name}: ${constraint.type}${constraint.condition ? ` (${constraint.condition})` : ''}`).join('\n')}
|
|
1567
|
+
|
|
1568
|
+
**Indexes**:
|
|
1569
|
+
${entity.indexes.map((index) => `- ${index.name}: ${index.type} (${index.columns.join(', ')})`).join('\n')}
|
|
1570
|
+
`,
|
|
1571
|
+
)
|
|
1572
|
+
.join('\n')}
|
|
1573
|
+
|
|
1574
|
+
### Relationships
|
|
1575
|
+
${result.dataModel.relationships
|
|
1576
|
+
.map(
|
|
1577
|
+
(rel, index) => `
|
|
1578
|
+
#### ${index + 1}. ${rel.name}
|
|
1579
|
+
**Type**: ${rel.type}
|
|
1580
|
+
**Parent**: ${rel.parent} (${rel.parentKey})
|
|
1581
|
+
**Child**: ${rel.child} (${rel.childKey})
|
|
1582
|
+
**On Delete**: ${rel.onDelete}
|
|
1583
|
+
**On Update**: ${rel.onUpdate}
|
|
1584
|
+
`,
|
|
1585
|
+
)
|
|
1586
|
+
.join('\n')}
|
|
1587
|
+
|
|
1588
|
+
## API Design
|
|
1589
|
+
|
|
1590
|
+
### General Information
|
|
1591
|
+
**Version**: ${result.apiDesign.version}
|
|
1592
|
+
**Base URL**: ${result.apiDesign.baseUrl}
|
|
1593
|
+
**Authentication**: ${result.apiDesign.authentication}
|
|
1594
|
+
|
|
1595
|
+
### Endpoints
|
|
1596
|
+
${result.apiDesign.endpoints
|
|
1597
|
+
.map(
|
|
1598
|
+
(endpoint, index) => `
|
|
1599
|
+
#### ${index + 1}. ${endpoint.method} ${endpoint.path}
|
|
1600
|
+
**Summary**: ${endpoint.summary}
|
|
1601
|
+
**Parameters**: ${endpoint.parameters ? endpoint.parameters.map((p) => `${p.name} (${p.type})`).join(', ') : 'None'}
|
|
1602
|
+
**Request Body**: ${endpoint.requestBody ? endpoint.requestBody.schema : 'None'}
|
|
1603
|
+
**Responses**: ${Object.entries(endpoint.responses)
|
|
1604
|
+
.map(([code, resp]) => `${code}: ${resp.description}`)
|
|
1605
|
+
.join(', ')}
|
|
1606
|
+
`,
|
|
1607
|
+
)
|
|
1608
|
+
.join('\n')}
|
|
1609
|
+
|
|
1610
|
+
### Schemas
|
|
1611
|
+
${result.apiDesign.schemas
|
|
1612
|
+
.map(
|
|
1613
|
+
(schema, index) => `
|
|
1614
|
+
#### ${index + 1}. ${schema.name}
|
|
1615
|
+
**Type**: ${schema.type}
|
|
1616
|
+
**Properties**:
|
|
1617
|
+
${Object.entries(schema.properties)
|
|
1618
|
+
.map(
|
|
1619
|
+
([name, prop]) =>
|
|
1620
|
+
`- ${name}: ${prop.type}${prop.format ? ` (${prop.format})` : ''}${prop.enum ? ` [${prop.enum.join(', ')}]` : ''}`,
|
|
1621
|
+
)
|
|
1622
|
+
.join('\n')}
|
|
1623
|
+
**Required**: ${schema.required ? schema.required.join(', ') : 'None'}
|
|
1624
|
+
`,
|
|
1625
|
+
)
|
|
1626
|
+
.join('\n')}
|
|
1627
|
+
|
|
1628
|
+
## Deployment Architecture
|
|
1629
|
+
|
|
1630
|
+
### Environments
|
|
1631
|
+
${result.deploymentArchitecture.environments
|
|
1632
|
+
.map(
|
|
1633
|
+
(env, index) => `
|
|
1634
|
+
#### ${index + 1}. ${env.name}
|
|
1635
|
+
**Purpose**: ${env.purpose}
|
|
1636
|
+
**Resources**: ${env.resources}
|
|
1637
|
+
**Database**: ${env.database}
|
|
1638
|
+
**Monitoring**: ${env.monitoring}
|
|
1639
|
+
`,
|
|
1640
|
+
)
|
|
1641
|
+
.join('\n')}
|
|
1642
|
+
|
|
1643
|
+
### Infrastructure
|
|
1644
|
+
**Platform**: ${result.deploymentArchitecture.infrastructure.platform}
|
|
1645
|
+
**Compute**: ${result.deploymentArchitecture.infrastructure.compute}
|
|
1646
|
+
**Storage**: ${result.deploymentArchitecture.infrastructure.storage}
|
|
1647
|
+
**Networking**: ${result.deploymentArchitecture.infrastructure.networking}
|
|
1648
|
+
**DNS**: ${result.deploymentArchitecture.infrastructure.dns}
|
|
1649
|
+
|
|
1650
|
+
## Security Architecture
|
|
1651
|
+
|
|
1652
|
+
### Authentication
|
|
1653
|
+
**Mechanism**: ${result.securityArchitecture.authentication.mechanism}
|
|
1654
|
+
**Providers**: ${result.securityArchitecture.authentication.providers.join(', ')}
|
|
1655
|
+
**Session**: ${result.securityArchitecture.authentication.session}
|
|
1656
|
+
**MFA**: ${result.securityArchitecture.authentication.mfa}
|
|
1657
|
+
|
|
1658
|
+
### Authorization
|
|
1659
|
+
**Model**: ${result.securityArchitecture.authorization.model}
|
|
1660
|
+
**Permissions**: ${result.securityArchitecture.authorization.permissions}
|
|
1661
|
+
**Policies**: ${result.securityArchitecture.authorization.policies}
|
|
1662
|
+
|
|
1663
|
+
### Data Protection
|
|
1664
|
+
**Encryption at Rest**: ${result.securityArchitecture.dataProtection.encryption.atRest}
|
|
1665
|
+
**Encryption in Transit**: ${result.securityArchitecture.dataProtection.encryption.inTransit}
|
|
1666
|
+
**Key Management**: ${result.securityArchitecture.dataProtection.encryption.keys}
|
|
1667
|
+
|
|
1668
|
+
## Scalability Plan
|
|
1669
|
+
|
|
1670
|
+
### Horizontal Scaling
|
|
1671
|
+
**Strategy**: ${result.scalabilityPlan.horizontalScaling.strategy}
|
|
1672
|
+
**Triggers**: ${result.scalabilityPlan.horizontalScaling.triggers.join(', ')}
|
|
1673
|
+
**Limits**: Min: ${result.scalabilityPlan.horizontalScaling.limits.minimum}, Max: ${result.scalabilityPlan.horizontalScaling.limits.maximum}
|
|
1674
|
+
|
|
1675
|
+
### Data Scaling
|
|
1676
|
+
**Read Replicas**: ${result.scalabilityPlan.dataScaling.database.readReplicas}
|
|
1677
|
+
**Sharding**: ${result.scalabilityPlan.dataScaling.database.sharding}
|
|
1678
|
+
**Caching**: ${result.scalabilityPlan.dataScaling.database.caching}
|
|
1679
|
+
|
|
1680
|
+
## Quality Attributes
|
|
1681
|
+
|
|
1682
|
+
${Object.entries(result.qualityAttributes)
|
|
1683
|
+
.map(
|
|
1684
|
+
([category, attributes]) => `
|
|
1685
|
+
### ${category.charAt(0).toUpperCase() + category.slice(1)}
|
|
1686
|
+
${Object.entries(attributes)
|
|
1687
|
+
.map(([attr, desc]) => `- **${attr}**: ${desc}`)
|
|
1688
|
+
.join('\n')}
|
|
1689
|
+
`,
|
|
1690
|
+
)
|
|
1691
|
+
.join('\n')}
|
|
1692
|
+
|
|
1693
|
+
## Architectural Decisions
|
|
1694
|
+
|
|
1695
|
+
${result.architecturalDecisions
|
|
1696
|
+
.map(
|
|
1697
|
+
(decision, index) => `
|
|
1698
|
+
### ${decision.id}: ${decision.title}
|
|
1699
|
+
**Status**: ${decision.status}
|
|
1700
|
+
**Context**: ${decision.context}
|
|
1701
|
+
**Decision**: ${decision.decision}
|
|
1702
|
+
**Positive Consequences**: ${decision.consequences.positive.join(', ')}
|
|
1703
|
+
**Negative Consequences**: ${decision.consequences.negative.join(', ')}
|
|
1704
|
+
**Alternatives Considered**: ${decision.alternatives.join(', ')}
|
|
1705
|
+
**Date**: ${decision.date}
|
|
1706
|
+
`,
|
|
1707
|
+
)
|
|
1708
|
+
.join('\n')}
|
|
1709
|
+
|
|
1710
|
+
## Risk Assessment
|
|
1711
|
+
|
|
1712
|
+
${result.riskAssessment
|
|
1713
|
+
.map(
|
|
1714
|
+
(risk, index) => `
|
|
1715
|
+
### ${risk.id}: ${risk.category}
|
|
1716
|
+
**Description**: ${risk.description}
|
|
1717
|
+
**Probability**: ${risk.probability}
|
|
1718
|
+
**Impact**: ${risk.impact}
|
|
1719
|
+
**Risk Level**: ${risk.riskLevel}
|
|
1720
|
+
**Mitigation**: ${risk.mitigation.join(', ')}
|
|
1721
|
+
**Monitoring**: ${risk.monitoring}
|
|
1722
|
+
`,
|
|
1723
|
+
)
|
|
1724
|
+
.join('\n')}
|
|
1725
|
+
|
|
1726
|
+
## Integration Points
|
|
1727
|
+
|
|
1728
|
+
${result.integrationPoints
|
|
1729
|
+
.map(
|
|
1730
|
+
(integration, index) => `
|
|
1731
|
+
### ${index + 1}. ${integration.name}
|
|
1732
|
+
**Type**: ${integration.type}
|
|
1733
|
+
**Purpose**: ${integration.purpose}
|
|
1734
|
+
**Protocol**: ${integration.protocol}
|
|
1735
|
+
**Authentication**: ${integration.authentication}
|
|
1736
|
+
**Data Format**: ${integration.dataFormat}
|
|
1737
|
+
**Error Handling**: ${integration.errorHandling}
|
|
1738
|
+
**Monitoring**: ${integration.monitoring}
|
|
1739
|
+
`,
|
|
1740
|
+
)
|
|
1741
|
+
.join('\n')}
|
|
1742
|
+
`;
|
|
1743
|
+
|
|
1744
|
+
// Save document
|
|
1745
|
+
await this.saveArtifact('architecture.md', document);
|
|
1746
|
+
return document;
|
|
1747
|
+
}
|
|
1748
|
+
}
|
|
1749
|
+
|
|
1750
|
+
export default SparcArchitecture;
|