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,984 @@
|
|
|
1
|
+
// SPARC Pseudocode Phase
|
|
2
|
+
// Generate pseudocode and flow diagrams based on specifications
|
|
3
|
+
|
|
4
|
+
import { SparcPhase } from './phase-base.js';
|
|
5
|
+
|
|
6
|
+
export class SparcPseudocode extends SparcPhase {
|
|
7
|
+
constructor(taskDescription, options) {
|
|
8
|
+
super('pseudocode', taskDescription, options);
|
|
9
|
+
this.flowDiagram = null;
|
|
10
|
+
this.pseudocode = [];
|
|
11
|
+
this.algorithms = [];
|
|
12
|
+
this.dataStructures = [];
|
|
13
|
+
this.interfaces = [];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Execute pseudocode phase
|
|
18
|
+
*/
|
|
19
|
+
async execute() {
|
|
20
|
+
console.log('🔄 Starting Pseudocode Phase');
|
|
21
|
+
|
|
22
|
+
await this.initializePhase();
|
|
23
|
+
|
|
24
|
+
const result = {
|
|
25
|
+
flowDiagram: null,
|
|
26
|
+
pseudocode: [],
|
|
27
|
+
algorithms: [],
|
|
28
|
+
dataStructures: [],
|
|
29
|
+
interfaces: [],
|
|
30
|
+
logicFlow: [],
|
|
31
|
+
edgeCases: [],
|
|
32
|
+
complexityAnalysis: {},
|
|
33
|
+
dependencies: [],
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
// Load specification from previous phase
|
|
38
|
+
const specification = await this.retrieveFromMemory('specification_complete');
|
|
39
|
+
if (!specification) {
|
|
40
|
+
throw new Error('Specification phase must be completed first');
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Generate flow diagram
|
|
44
|
+
result.flowDiagram = await this.generateFlowDiagram(specification);
|
|
45
|
+
|
|
46
|
+
// Generate pseudocode
|
|
47
|
+
result.pseudocode = await this.generatePseudocode(specification);
|
|
48
|
+
|
|
49
|
+
// Define algorithms
|
|
50
|
+
result.algorithms = await this.defineAlgorithms(specification);
|
|
51
|
+
|
|
52
|
+
// Define data structures
|
|
53
|
+
result.dataStructures = await this.defineDataStructures(specification);
|
|
54
|
+
|
|
55
|
+
// Define interfaces
|
|
56
|
+
result.interfaces = await this.defineInterfaces(specification);
|
|
57
|
+
|
|
58
|
+
// Map logic flow
|
|
59
|
+
result.logicFlow = await this.mapLogicFlow(specification);
|
|
60
|
+
|
|
61
|
+
// Identify edge cases
|
|
62
|
+
result.edgeCases = await this.identifyEdgeCases(specification);
|
|
63
|
+
|
|
64
|
+
// Analyze complexity
|
|
65
|
+
result.complexityAnalysis = await this.analyzeComplexity(result.pseudocode);
|
|
66
|
+
|
|
67
|
+
// Identify dependencies
|
|
68
|
+
result.dependencies = await this.identifyDependencies(specification);
|
|
69
|
+
|
|
70
|
+
// Generate pseudocode document
|
|
71
|
+
await this.generatePseudocodeDocument(result);
|
|
72
|
+
|
|
73
|
+
// Store in memory
|
|
74
|
+
await this.storeInMemory('pseudocode_complete', result);
|
|
75
|
+
|
|
76
|
+
console.log('✅ Pseudocode phase completed');
|
|
77
|
+
return result;
|
|
78
|
+
} catch (error) {
|
|
79
|
+
console.error('❌ Pseudocode phase failed:', error.message);
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Generate flow diagram
|
|
86
|
+
*/
|
|
87
|
+
async generateFlowDiagram(specification) {
|
|
88
|
+
const flowDiagram = {
|
|
89
|
+
title: `Flow Diagram: ${this.taskDescription}`,
|
|
90
|
+
nodes: [],
|
|
91
|
+
edges: [],
|
|
92
|
+
entry: 'start',
|
|
93
|
+
exit: 'end',
|
|
94
|
+
type: 'sequential',
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
// Determine flow type based on requirements
|
|
98
|
+
const requirements = specification.requirements || [];
|
|
99
|
+
const hasApiRequirements = requirements.some((req) => req.toLowerCase().includes('api'));
|
|
100
|
+
const hasUiRequirements = requirements.some(
|
|
101
|
+
(req) => req.toLowerCase().includes('ui') || req.toLowerCase().includes('interface'),
|
|
102
|
+
);
|
|
103
|
+
const hasDataRequirements = requirements.some((req) => req.toLowerCase().includes('data'));
|
|
104
|
+
|
|
105
|
+
if (hasApiRequirements) {
|
|
106
|
+
flowDiagram.type = 'api';
|
|
107
|
+
flowDiagram.nodes = this.generateApiFlowNodes(requirements);
|
|
108
|
+
} else if (hasUiRequirements) {
|
|
109
|
+
flowDiagram.type = 'ui';
|
|
110
|
+
flowDiagram.nodes = this.generateUiFlowNodes(requirements);
|
|
111
|
+
} else if (hasDataRequirements) {
|
|
112
|
+
flowDiagram.type = 'data';
|
|
113
|
+
flowDiagram.nodes = this.generateDataFlowNodes(requirements);
|
|
114
|
+
} else {
|
|
115
|
+
flowDiagram.type = 'general';
|
|
116
|
+
flowDiagram.nodes = this.generateGeneralFlowNodes(requirements);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Generate edges between nodes
|
|
120
|
+
flowDiagram.edges = this.generateFlowEdges(flowDiagram.nodes);
|
|
121
|
+
|
|
122
|
+
return flowDiagram;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Generate API flow nodes
|
|
127
|
+
*/
|
|
128
|
+
generateApiFlowNodes(requirements) {
|
|
129
|
+
return [
|
|
130
|
+
{ id: 'start', type: 'start', label: 'Start' },
|
|
131
|
+
{ id: 'validate_input', type: 'process', label: 'Validate Input' },
|
|
132
|
+
{ id: 'authenticate', type: 'process', label: 'Authenticate Request' },
|
|
133
|
+
{ id: 'authorize', type: 'process', label: 'Authorize Access' },
|
|
134
|
+
{ id: 'process_request', type: 'process', label: 'Process Request' },
|
|
135
|
+
{ id: 'validate_data', type: 'decision', label: 'Data Valid?' },
|
|
136
|
+
{ id: 'handle_error', type: 'process', label: 'Handle Error' },
|
|
137
|
+
{ id: 'execute_logic', type: 'process', label: 'Execute Business Logic' },
|
|
138
|
+
{ id: 'prepare_response', type: 'process', label: 'Prepare Response' },
|
|
139
|
+
{ id: 'log_activity', type: 'process', label: 'Log Activity' },
|
|
140
|
+
{ id: 'return_response', type: 'process', label: 'Return Response' },
|
|
141
|
+
{ id: 'end', type: 'end', label: 'End' },
|
|
142
|
+
];
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Generate UI flow nodes
|
|
147
|
+
*/
|
|
148
|
+
generateUiFlowNodes(requirements) {
|
|
149
|
+
return [
|
|
150
|
+
{ id: 'start', type: 'start', label: 'Start' },
|
|
151
|
+
{ id: 'load_interface', type: 'process', label: 'Load Interface' },
|
|
152
|
+
{ id: 'initialize_state', type: 'process', label: 'Initialize State' },
|
|
153
|
+
{ id: 'render_components', type: 'process', label: 'Render Components' },
|
|
154
|
+
{ id: 'wait_user_input', type: 'input', label: 'Wait for User Input' },
|
|
155
|
+
{ id: 'validate_input', type: 'process', label: 'Validate Input' },
|
|
156
|
+
{ id: 'input_valid', type: 'decision', label: 'Input Valid?' },
|
|
157
|
+
{ id: 'show_error', type: 'process', label: 'Show Error Message' },
|
|
158
|
+
{ id: 'update_state', type: 'process', label: 'Update State' },
|
|
159
|
+
{ id: 'make_api_call', type: 'process', label: 'Make API Call' },
|
|
160
|
+
{ id: 'handle_response', type: 'process', label: 'Handle Response' },
|
|
161
|
+
{ id: 'update_ui', type: 'process', label: 'Update UI' },
|
|
162
|
+
{ id: 'end', type: 'end', label: 'End' },
|
|
163
|
+
];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Generate data flow nodes
|
|
168
|
+
*/
|
|
169
|
+
generateDataFlowNodes(requirements) {
|
|
170
|
+
return [
|
|
171
|
+
{ id: 'start', type: 'start', label: 'Start' },
|
|
172
|
+
{ id: 'connect_database', type: 'process', label: 'Connect to Database' },
|
|
173
|
+
{ id: 'validate_schema', type: 'process', label: 'Validate Schema' },
|
|
174
|
+
{ id: 'begin_transaction', type: 'process', label: 'Begin Transaction' },
|
|
175
|
+
{ id: 'execute_query', type: 'process', label: 'Execute Query' },
|
|
176
|
+
{ id: 'check_results', type: 'decision', label: 'Results Valid?' },
|
|
177
|
+
{ id: 'rollback_transaction', type: 'process', label: 'Rollback Transaction' },
|
|
178
|
+
{ id: 'transform_data', type: 'process', label: 'Transform Data' },
|
|
179
|
+
{ id: 'validate_constraints', type: 'process', label: 'Validate Constraints' },
|
|
180
|
+
{ id: 'commit_transaction', type: 'process', label: 'Commit Transaction' },
|
|
181
|
+
{ id: 'close_connection', type: 'process', label: 'Close Connection' },
|
|
182
|
+
{ id: 'end', type: 'end', label: 'End' },
|
|
183
|
+
];
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Generate general flow nodes
|
|
188
|
+
*/
|
|
189
|
+
generateGeneralFlowNodes(requirements) {
|
|
190
|
+
return [
|
|
191
|
+
{ id: 'start', type: 'start', label: 'Start' },
|
|
192
|
+
{ id: 'initialize', type: 'process', label: 'Initialize System' },
|
|
193
|
+
{ id: 'load_configuration', type: 'process', label: 'Load Configuration' },
|
|
194
|
+
{ id: 'validate_prerequisites', type: 'process', label: 'Validate Prerequisites' },
|
|
195
|
+
{ id: 'execute_main_logic', type: 'process', label: 'Execute Main Logic' },
|
|
196
|
+
{ id: 'handle_exceptions', type: 'process', label: 'Handle Exceptions' },
|
|
197
|
+
{ id: 'cleanup_resources', type: 'process', label: 'Cleanup Resources' },
|
|
198
|
+
{ id: 'end', type: 'end', label: 'End' },
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Generate flow edges
|
|
204
|
+
*/
|
|
205
|
+
generateFlowEdges(nodes) {
|
|
206
|
+
const edges = [];
|
|
207
|
+
|
|
208
|
+
for (let i = 0; i < nodes.length - 1; i++) {
|
|
209
|
+
const current = nodes[i];
|
|
210
|
+
const next = nodes[i + 1];
|
|
211
|
+
|
|
212
|
+
if (current.type === 'decision') {
|
|
213
|
+
// Decision nodes have multiple paths
|
|
214
|
+
edges.push({
|
|
215
|
+
from: current.id,
|
|
216
|
+
to: next.id,
|
|
217
|
+
label: 'Yes',
|
|
218
|
+
condition: true,
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
// Find alternative path (usually error handling)
|
|
222
|
+
const errorNode = nodes.find((n) => n.id.includes('error') || n.id.includes('handle'));
|
|
223
|
+
if (errorNode) {
|
|
224
|
+
edges.push({
|
|
225
|
+
from: current.id,
|
|
226
|
+
to: errorNode.id,
|
|
227
|
+
label: 'No',
|
|
228
|
+
condition: false,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
} else {
|
|
232
|
+
edges.push({
|
|
233
|
+
from: current.id,
|
|
234
|
+
to: next.id,
|
|
235
|
+
label: '',
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return edges;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Generate pseudocode
|
|
245
|
+
*/
|
|
246
|
+
async generatePseudocode(specification) {
|
|
247
|
+
const pseudocode = [];
|
|
248
|
+
const requirements = specification.requirements || [];
|
|
249
|
+
|
|
250
|
+
// Main function
|
|
251
|
+
pseudocode.push({
|
|
252
|
+
function: 'main',
|
|
253
|
+
description: 'Main entry point for the system',
|
|
254
|
+
steps: [
|
|
255
|
+
'BEGIN main',
|
|
256
|
+
' INITIALIZE system_configuration',
|
|
257
|
+
' VALIDATE prerequisites',
|
|
258
|
+
' CALL execute_primary_logic()',
|
|
259
|
+
' HANDLE exceptions',
|
|
260
|
+
' CLEANUP resources',
|
|
261
|
+
' RETURN success_status',
|
|
262
|
+
'END main',
|
|
263
|
+
],
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
// Generate pseudocode for each requirement
|
|
267
|
+
for (const [index, requirement] of requirements.entries()) {
|
|
268
|
+
const functionName = this.generateFunctionName(requirement);
|
|
269
|
+
const steps = this.generatePseudocodeSteps(requirement);
|
|
270
|
+
|
|
271
|
+
pseudocode.push({
|
|
272
|
+
function: functionName,
|
|
273
|
+
description: requirement,
|
|
274
|
+
steps: steps,
|
|
275
|
+
complexity: this.estimateComplexity(steps),
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
return pseudocode;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Generate function name from requirement
|
|
284
|
+
*/
|
|
285
|
+
generateFunctionName(requirement) {
|
|
286
|
+
const words = requirement.toLowerCase().split(' ');
|
|
287
|
+
const actionWords = words.filter((word) =>
|
|
288
|
+
[
|
|
289
|
+
'provide',
|
|
290
|
+
'handle',
|
|
291
|
+
'ensure',
|
|
292
|
+
'validate',
|
|
293
|
+
'process',
|
|
294
|
+
'manage',
|
|
295
|
+
'create',
|
|
296
|
+
'update',
|
|
297
|
+
'delete',
|
|
298
|
+
].includes(word),
|
|
299
|
+
);
|
|
300
|
+
const objectWords = words.filter((word) =>
|
|
301
|
+
[
|
|
302
|
+
'api',
|
|
303
|
+
'data',
|
|
304
|
+
'user',
|
|
305
|
+
'system',
|
|
306
|
+
'request',
|
|
307
|
+
'response',
|
|
308
|
+
'authentication',
|
|
309
|
+
'authorization',
|
|
310
|
+
].includes(word),
|
|
311
|
+
);
|
|
312
|
+
|
|
313
|
+
const action = actionWords[0] || 'execute';
|
|
314
|
+
const object = objectWords[0] || 'operation';
|
|
315
|
+
|
|
316
|
+
return `${action}_${object}`;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Generate pseudocode steps
|
|
321
|
+
*/
|
|
322
|
+
generatePseudocodeSteps(requirement) {
|
|
323
|
+
const steps = [];
|
|
324
|
+
const reqLower = requirement.toLowerCase();
|
|
325
|
+
|
|
326
|
+
// Common patterns
|
|
327
|
+
steps.push(`BEGIN ${this.generateFunctionName(requirement)}`);
|
|
328
|
+
|
|
329
|
+
if (reqLower.includes('validate')) {
|
|
330
|
+
steps.push(' VALIDATE input_parameters');
|
|
331
|
+
steps.push(' IF validation_fails THEN');
|
|
332
|
+
steps.push(' RETURN error_response');
|
|
333
|
+
steps.push(' END IF');
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
if (reqLower.includes('authenticate')) {
|
|
337
|
+
steps.push(' AUTHENTICATE user_credentials');
|
|
338
|
+
steps.push(' IF authentication_fails THEN');
|
|
339
|
+
steps.push(' RETURN unauthorized_error');
|
|
340
|
+
steps.push(' END IF');
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
if (reqLower.includes('data')) {
|
|
344
|
+
steps.push(' CONNECT to_database');
|
|
345
|
+
steps.push(' BEGIN transaction');
|
|
346
|
+
steps.push(' EXECUTE data_operation');
|
|
347
|
+
steps.push(' IF operation_successful THEN');
|
|
348
|
+
steps.push(' COMMIT transaction');
|
|
349
|
+
steps.push(' ELSE');
|
|
350
|
+
steps.push(' ROLLBACK transaction');
|
|
351
|
+
steps.push(' END IF');
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
if (reqLower.includes('api')) {
|
|
355
|
+
steps.push(' PARSE request_parameters');
|
|
356
|
+
steps.push(' VALIDATE request_format');
|
|
357
|
+
steps.push(' EXECUTE business_logic');
|
|
358
|
+
steps.push(' FORMAT response_data');
|
|
359
|
+
steps.push(' RETURN api_response');
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
// Generic steps if no specific patterns found
|
|
363
|
+
if (steps.length === 1) {
|
|
364
|
+
steps.push(' INITIALIZE operation_context');
|
|
365
|
+
steps.push(' EXECUTE primary_operation');
|
|
366
|
+
steps.push(' HANDLE potential_errors');
|
|
367
|
+
steps.push(' RETURN operation_result');
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
steps.push(`END ${this.generateFunctionName(requirement)}`);
|
|
371
|
+
|
|
372
|
+
return steps;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Estimate complexity
|
|
377
|
+
*/
|
|
378
|
+
estimateComplexity(steps) {
|
|
379
|
+
const decisionSteps = steps.filter(
|
|
380
|
+
(step) => step.includes('IF') || step.includes('WHILE') || step.includes('FOR'),
|
|
381
|
+
);
|
|
382
|
+
const operationSteps = steps.filter(
|
|
383
|
+
(step) => step.includes('EXECUTE') || step.includes('CALL'),
|
|
384
|
+
);
|
|
385
|
+
|
|
386
|
+
return {
|
|
387
|
+
cyclomatic: decisionSteps.length + 1,
|
|
388
|
+
operations: operationSteps.length,
|
|
389
|
+
lines: steps.length,
|
|
390
|
+
level: decisionSteps.length > 5 ? 'high' : decisionSteps.length > 2 ? 'medium' : 'low',
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Define algorithms
|
|
396
|
+
*/
|
|
397
|
+
async defineAlgorithms(specification) {
|
|
398
|
+
const algorithms = [];
|
|
399
|
+
const requirements = specification.requirements || [];
|
|
400
|
+
|
|
401
|
+
// Search for algorithmic requirements
|
|
402
|
+
for (const requirement of requirements) {
|
|
403
|
+
const reqLower = requirement.toLowerCase();
|
|
404
|
+
|
|
405
|
+
if (
|
|
406
|
+
reqLower.includes('sort') ||
|
|
407
|
+
reqLower.includes('search') ||
|
|
408
|
+
reqLower.includes('optimize')
|
|
409
|
+
) {
|
|
410
|
+
algorithms.push({
|
|
411
|
+
name: 'Search and Sort Algorithm',
|
|
412
|
+
purpose: 'Efficient data retrieval and ordering',
|
|
413
|
+
complexity: 'O(n log n)',
|
|
414
|
+
approach: 'Quick sort with binary search optimization',
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
if (reqLower.includes('cache') || reqLower.includes('performance')) {
|
|
419
|
+
algorithms.push({
|
|
420
|
+
name: 'Caching Algorithm',
|
|
421
|
+
purpose: 'Improve response time through intelligent caching',
|
|
422
|
+
complexity: 'O(1) average case',
|
|
423
|
+
approach: 'LRU cache with time-based expiration',
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
if (reqLower.includes('validate') || reqLower.includes('check')) {
|
|
428
|
+
algorithms.push({
|
|
429
|
+
name: 'Validation Algorithm',
|
|
430
|
+
purpose: 'Ensure data integrity and format compliance',
|
|
431
|
+
complexity: 'O(n)',
|
|
432
|
+
approach: 'Rule-based validation with early termination',
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// Default algorithms for common patterns
|
|
438
|
+
if (algorithms.length === 0) {
|
|
439
|
+
algorithms.push({
|
|
440
|
+
name: 'Sequential Processing Algorithm',
|
|
441
|
+
purpose: 'Process operations in defined sequence',
|
|
442
|
+
complexity: 'O(n)',
|
|
443
|
+
approach: 'Linear processing with error handling',
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return algorithms;
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* Define data structures
|
|
452
|
+
*/
|
|
453
|
+
async defineDataStructures(specification) {
|
|
454
|
+
const dataStructures = [];
|
|
455
|
+
const requirements = specification.requirements || [];
|
|
456
|
+
|
|
457
|
+
// Analyze requirements for data structure needs
|
|
458
|
+
for (const requirement of requirements) {
|
|
459
|
+
const reqLower = requirement.toLowerCase();
|
|
460
|
+
|
|
461
|
+
if (
|
|
462
|
+
reqLower.includes('list') ||
|
|
463
|
+
reqLower.includes('array') ||
|
|
464
|
+
reqLower.includes('collection')
|
|
465
|
+
) {
|
|
466
|
+
dataStructures.push({
|
|
467
|
+
name: 'Dynamic Array',
|
|
468
|
+
purpose: 'Store variable-length collections',
|
|
469
|
+
operations: ['add', 'remove', 'search', 'iterate'],
|
|
470
|
+
complexity: { access: 'O(1)', insertion: 'O(n)', deletion: 'O(n)' },
|
|
471
|
+
});
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
if (reqLower.includes('map') || reqLower.includes('dictionary') || reqLower.includes('key')) {
|
|
475
|
+
dataStructures.push({
|
|
476
|
+
name: 'Hash Map',
|
|
477
|
+
purpose: 'Key-value pair storage with fast lookup',
|
|
478
|
+
operations: ['put', 'get', 'remove', 'contains'],
|
|
479
|
+
complexity: { access: 'O(1)', insertion: 'O(1)', deletion: 'O(1)' },
|
|
480
|
+
});
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
if (reqLower.includes('queue') || reqLower.includes('fifo') || reqLower.includes('buffer')) {
|
|
484
|
+
dataStructures.push({
|
|
485
|
+
name: 'Queue',
|
|
486
|
+
purpose: 'First-in-first-out data processing',
|
|
487
|
+
operations: ['enqueue', 'dequeue', 'peek', 'isEmpty'],
|
|
488
|
+
complexity: { access: 'O(n)', insertion: 'O(1)', deletion: 'O(1)' },
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
if (reqLower.includes('stack') || reqLower.includes('lifo') || reqLower.includes('undo')) {
|
|
493
|
+
dataStructures.push({
|
|
494
|
+
name: 'Stack',
|
|
495
|
+
purpose: 'Last-in-first-out operations',
|
|
496
|
+
operations: ['push', 'pop', 'peek', 'isEmpty'],
|
|
497
|
+
complexity: { access: 'O(n)', insertion: 'O(1)', deletion: 'O(1)' },
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
// Default data structures
|
|
503
|
+
if (dataStructures.length === 0) {
|
|
504
|
+
dataStructures.push({
|
|
505
|
+
name: 'Object',
|
|
506
|
+
purpose: 'Basic data encapsulation',
|
|
507
|
+
operations: ['create', 'read', 'update', 'delete'],
|
|
508
|
+
complexity: { access: 'O(1)', insertion: 'O(1)', deletion: 'O(1)' },
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
return dataStructures;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* Define interfaces
|
|
517
|
+
*/
|
|
518
|
+
async defineInterfaces(specification) {
|
|
519
|
+
const interfaces = [];
|
|
520
|
+
const requirements = specification.requirements || [];
|
|
521
|
+
|
|
522
|
+
// API interfaces
|
|
523
|
+
if (requirements.some((req) => req.toLowerCase().includes('api'))) {
|
|
524
|
+
interfaces.push({
|
|
525
|
+
name: 'APIInterface',
|
|
526
|
+
type: 'REST API',
|
|
527
|
+
methods: [
|
|
528
|
+
{
|
|
529
|
+
name: 'GET',
|
|
530
|
+
purpose: 'Retrieve data',
|
|
531
|
+
parameters: ['id', 'filters'],
|
|
532
|
+
returns: 'data object',
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
name: 'POST',
|
|
536
|
+
purpose: 'Create new resource',
|
|
537
|
+
parameters: ['data'],
|
|
538
|
+
returns: 'created resource',
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
name: 'PUT',
|
|
542
|
+
purpose: 'Update existing resource',
|
|
543
|
+
parameters: ['id', 'data'],
|
|
544
|
+
returns: 'updated resource',
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
name: 'DELETE',
|
|
548
|
+
purpose: 'Remove resource',
|
|
549
|
+
parameters: ['id'],
|
|
550
|
+
returns: 'success status',
|
|
551
|
+
},
|
|
552
|
+
],
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
// Database interfaces
|
|
557
|
+
if (requirements.some((req) => req.toLowerCase().includes('data'))) {
|
|
558
|
+
interfaces.push({
|
|
559
|
+
name: 'DatabaseInterface',
|
|
560
|
+
type: 'Data Access Layer',
|
|
561
|
+
methods: [
|
|
562
|
+
{
|
|
563
|
+
name: 'connect',
|
|
564
|
+
purpose: 'Establish connection',
|
|
565
|
+
parameters: ['config'],
|
|
566
|
+
returns: 'connection object',
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
name: 'query',
|
|
570
|
+
purpose: 'Execute query',
|
|
571
|
+
parameters: ['sql', 'params'],
|
|
572
|
+
returns: 'result set',
|
|
573
|
+
},
|
|
574
|
+
{
|
|
575
|
+
name: 'transaction',
|
|
576
|
+
purpose: 'Execute transaction',
|
|
577
|
+
parameters: ['operations'],
|
|
578
|
+
returns: 'transaction result',
|
|
579
|
+
},
|
|
580
|
+
{ name: 'disconnect', purpose: 'Close connection', parameters: [], returns: 'void' },
|
|
581
|
+
],
|
|
582
|
+
});
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
// Service interfaces
|
|
586
|
+
interfaces.push({
|
|
587
|
+
name: 'ServiceInterface',
|
|
588
|
+
type: 'Business Logic Layer',
|
|
589
|
+
methods: [
|
|
590
|
+
{
|
|
591
|
+
name: 'initialize',
|
|
592
|
+
purpose: 'Initialize service',
|
|
593
|
+
parameters: ['config'],
|
|
594
|
+
returns: 'service instance',
|
|
595
|
+
},
|
|
596
|
+
{
|
|
597
|
+
name: 'execute',
|
|
598
|
+
purpose: 'Execute main operation',
|
|
599
|
+
parameters: ['request'],
|
|
600
|
+
returns: 'response',
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
name: 'validate',
|
|
604
|
+
purpose: 'Validate input',
|
|
605
|
+
parameters: ['data'],
|
|
606
|
+
returns: 'validation result',
|
|
607
|
+
},
|
|
608
|
+
{ name: 'cleanup', purpose: 'Clean up resources', parameters: [], returns: 'void' },
|
|
609
|
+
],
|
|
610
|
+
});
|
|
611
|
+
|
|
612
|
+
return interfaces;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* Map logic flow
|
|
617
|
+
*/
|
|
618
|
+
async mapLogicFlow(specification) {
|
|
619
|
+
const logicFlow = [];
|
|
620
|
+
const requirements = specification.requirements || [];
|
|
621
|
+
|
|
622
|
+
// Main flow
|
|
623
|
+
logicFlow.push({
|
|
624
|
+
step: 1,
|
|
625
|
+
name: 'Initialization',
|
|
626
|
+
description: 'System startup and configuration',
|
|
627
|
+
inputs: ['configuration', 'environment variables'],
|
|
628
|
+
outputs: ['initialized system'],
|
|
629
|
+
conditions: ['valid configuration', 'available resources'],
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
// Process each requirement as a flow step
|
|
633
|
+
for (const [index, requirement] of requirements.entries()) {
|
|
634
|
+
logicFlow.push({
|
|
635
|
+
step: index + 2,
|
|
636
|
+
name: this.generateFunctionName(requirement),
|
|
637
|
+
description: requirement,
|
|
638
|
+
inputs: this.identifyInputs(requirement),
|
|
639
|
+
outputs: this.identifyOutputs(requirement),
|
|
640
|
+
conditions: this.identifyConditions(requirement),
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
// Final step
|
|
645
|
+
logicFlow.push({
|
|
646
|
+
step: requirements.length + 2,
|
|
647
|
+
name: 'Finalization',
|
|
648
|
+
description: 'Cleanup and result reporting',
|
|
649
|
+
inputs: ['execution results'],
|
|
650
|
+
outputs: ['final status', 'cleanup confirmation'],
|
|
651
|
+
conditions: ['all operations completed'],
|
|
652
|
+
});
|
|
653
|
+
|
|
654
|
+
return logicFlow;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* Identify inputs for requirement
|
|
659
|
+
*/
|
|
660
|
+
identifyInputs(requirement) {
|
|
661
|
+
const inputs = [];
|
|
662
|
+
const reqLower = requirement.toLowerCase();
|
|
663
|
+
|
|
664
|
+
if (reqLower.includes('api')) inputs.push('HTTP request', 'request parameters');
|
|
665
|
+
if (reqLower.includes('data')) inputs.push('data payload', 'database connection');
|
|
666
|
+
if (reqLower.includes('user')) inputs.push('user credentials', 'user input');
|
|
667
|
+
if (reqLower.includes('validate')) inputs.push('validation rules', 'input data');
|
|
668
|
+
if (reqLower.includes('authenticate')) inputs.push('authentication credentials');
|
|
669
|
+
|
|
670
|
+
return inputs.length > 0 ? inputs : ['system input'];
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
/**
|
|
674
|
+
* Identify outputs for requirement
|
|
675
|
+
*/
|
|
676
|
+
identifyOutputs(requirement) {
|
|
677
|
+
const outputs = [];
|
|
678
|
+
const reqLower = requirement.toLowerCase();
|
|
679
|
+
|
|
680
|
+
if (reqLower.includes('api')) outputs.push('HTTP response', 'status code');
|
|
681
|
+
if (reqLower.includes('data')) outputs.push('processed data', 'transaction result');
|
|
682
|
+
if (reqLower.includes('validate')) outputs.push('validation result', 'error messages');
|
|
683
|
+
if (reqLower.includes('authenticate')) outputs.push('authentication token', 'user session');
|
|
684
|
+
|
|
685
|
+
return outputs.length > 0 ? outputs : ['operation result'];
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
/**
|
|
689
|
+
* Identify conditions for requirement
|
|
690
|
+
*/
|
|
691
|
+
identifyConditions(requirement) {
|
|
692
|
+
const conditions = [];
|
|
693
|
+
const reqLower = requirement.toLowerCase();
|
|
694
|
+
|
|
695
|
+
if (reqLower.includes('validate')) conditions.push('data is valid', 'rules are satisfied');
|
|
696
|
+
if (reqLower.includes('authenticate')) conditions.push('credentials are valid', 'user exists');
|
|
697
|
+
if (reqLower.includes('data'))
|
|
698
|
+
conditions.push('database is available', 'data integrity maintained');
|
|
699
|
+
if (reqLower.includes('api'))
|
|
700
|
+
conditions.push('request format is valid', 'service is available');
|
|
701
|
+
|
|
702
|
+
return conditions.length > 0 ? conditions : ['preconditions met'];
|
|
703
|
+
}
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* Identify edge cases
|
|
707
|
+
*/
|
|
708
|
+
async identifyEdgeCases(specification) {
|
|
709
|
+
const edgeCases = [];
|
|
710
|
+
const requirements = specification.requirements || [];
|
|
711
|
+
|
|
712
|
+
// Common edge cases
|
|
713
|
+
edgeCases.push({
|
|
714
|
+
case: 'Empty or null input',
|
|
715
|
+
description: 'System receives no input or null values',
|
|
716
|
+
handling: 'Validate inputs and return appropriate error messages',
|
|
717
|
+
severity: 'high',
|
|
718
|
+
});
|
|
719
|
+
|
|
720
|
+
edgeCases.push({
|
|
721
|
+
case: 'Network connectivity issues',
|
|
722
|
+
description: 'External services are unavailable',
|
|
723
|
+
handling: 'Implement retry logic with exponential backoff',
|
|
724
|
+
severity: 'medium',
|
|
725
|
+
});
|
|
726
|
+
|
|
727
|
+
edgeCases.push({
|
|
728
|
+
case: 'Concurrent access',
|
|
729
|
+
description: 'Multiple users access same resources simultaneously',
|
|
730
|
+
handling: 'Implement proper locking and transaction management',
|
|
731
|
+
severity: 'high',
|
|
732
|
+
});
|
|
733
|
+
|
|
734
|
+
edgeCases.push({
|
|
735
|
+
case: 'Resource exhaustion',
|
|
736
|
+
description: 'System runs out of memory or disk space',
|
|
737
|
+
handling: 'Monitor resources and implement graceful degradation',
|
|
738
|
+
severity: 'high',
|
|
739
|
+
});
|
|
740
|
+
|
|
741
|
+
// Requirement-specific edge cases
|
|
742
|
+
for (const requirement of requirements) {
|
|
743
|
+
const reqLower = requirement.toLowerCase();
|
|
744
|
+
|
|
745
|
+
if (reqLower.includes('api')) {
|
|
746
|
+
edgeCases.push({
|
|
747
|
+
case: 'API rate limiting',
|
|
748
|
+
description: 'Too many requests from single client',
|
|
749
|
+
handling: 'Implement rate limiting and throttling',
|
|
750
|
+
severity: 'medium',
|
|
751
|
+
});
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
if (reqLower.includes('data')) {
|
|
755
|
+
edgeCases.push({
|
|
756
|
+
case: 'Data corruption',
|
|
757
|
+
description: 'Database contains invalid or corrupted data',
|
|
758
|
+
handling: 'Implement data validation and recovery procedures',
|
|
759
|
+
severity: 'high',
|
|
760
|
+
});
|
|
761
|
+
}
|
|
762
|
+
|
|
763
|
+
if (reqLower.includes('authenticate')) {
|
|
764
|
+
edgeCases.push({
|
|
765
|
+
case: 'Authentication timeout',
|
|
766
|
+
description: 'User session expires during operation',
|
|
767
|
+
handling: 'Implement session refresh and re-authentication',
|
|
768
|
+
severity: 'medium',
|
|
769
|
+
});
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
return edgeCases;
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/**
|
|
777
|
+
* Analyze complexity
|
|
778
|
+
*/
|
|
779
|
+
async analyzeComplexity(pseudocode) {
|
|
780
|
+
const analysis = {
|
|
781
|
+
overall: 'medium',
|
|
782
|
+
functions: {},
|
|
783
|
+
recommendations: [],
|
|
784
|
+
};
|
|
785
|
+
|
|
786
|
+
let totalComplexity = 0;
|
|
787
|
+
let functionCount = 0;
|
|
788
|
+
|
|
789
|
+
for (const func of pseudocode) {
|
|
790
|
+
if (func.complexity) {
|
|
791
|
+
analysis.functions[func.function] = func.complexity;
|
|
792
|
+
totalComplexity += func.complexity.cyclomatic;
|
|
793
|
+
functionCount++;
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
const averageComplexity = functionCount > 0 ? totalComplexity / functionCount : 1;
|
|
798
|
+
|
|
799
|
+
if (averageComplexity > 10) {
|
|
800
|
+
analysis.overall = 'high';
|
|
801
|
+
analysis.recommendations.push('Consider breaking down complex functions');
|
|
802
|
+
} else if (averageComplexity > 5) {
|
|
803
|
+
analysis.overall = 'medium';
|
|
804
|
+
analysis.recommendations.push('Monitor function complexity during implementation');
|
|
805
|
+
} else {
|
|
806
|
+
analysis.overall = 'low';
|
|
807
|
+
analysis.recommendations.push('Complexity is manageable');
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
return analysis;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
/**
|
|
814
|
+
* Identify dependencies
|
|
815
|
+
*/
|
|
816
|
+
async identifyDependencies(specification) {
|
|
817
|
+
const dependencies = [];
|
|
818
|
+
const requirements = specification.requirements || [];
|
|
819
|
+
|
|
820
|
+
// Analyze requirements for dependencies
|
|
821
|
+
for (const requirement of requirements) {
|
|
822
|
+
const reqLower = requirement.toLowerCase();
|
|
823
|
+
|
|
824
|
+
if (reqLower.includes('api')) {
|
|
825
|
+
dependencies.push('HTTP client library');
|
|
826
|
+
dependencies.push('JSON parsing library');
|
|
827
|
+
dependencies.push('Authentication middleware');
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
if (reqLower.includes('data')) {
|
|
831
|
+
dependencies.push('Database driver');
|
|
832
|
+
dependencies.push('ORM or query builder');
|
|
833
|
+
dependencies.push('Connection pooling');
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
if (reqLower.includes('validate')) {
|
|
837
|
+
dependencies.push('Validation library');
|
|
838
|
+
dependencies.push('Schema definition');
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
if (reqLower.includes('test')) {
|
|
842
|
+
dependencies.push('Testing framework');
|
|
843
|
+
dependencies.push('Mocking library');
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
// Remove duplicates
|
|
848
|
+
return [...new Set(dependencies)];
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
/**
|
|
852
|
+
* Generate pseudocode document
|
|
853
|
+
*/
|
|
854
|
+
async generatePseudocodeDocument(result) {
|
|
855
|
+
const document = `# ${this.taskDescription} - Pseudocode
|
|
856
|
+
|
|
857
|
+
## Flow Diagram
|
|
858
|
+
**Type**: ${result.flowDiagram.type}
|
|
859
|
+
**Entry**: ${result.flowDiagram.entry}
|
|
860
|
+
**Exit**: ${result.flowDiagram.exit}
|
|
861
|
+
|
|
862
|
+
### Nodes
|
|
863
|
+
${result.flowDiagram.nodes.map((node) => `- **${node.id}** (${node.type}): ${node.label}`).join('\n')}
|
|
864
|
+
|
|
865
|
+
### Edges
|
|
866
|
+
${result.flowDiagram.edges.map((edge) => `- ${edge.from} → ${edge.to} ${edge.label ? `(${edge.label})` : ''}`).join('\n')}
|
|
867
|
+
|
|
868
|
+
## Pseudocode
|
|
869
|
+
|
|
870
|
+
${result.pseudocode
|
|
871
|
+
.map(
|
|
872
|
+
(func, index) => `
|
|
873
|
+
### ${index + 1}. ${func.function}
|
|
874
|
+
**Description**: ${func.description}
|
|
875
|
+
**Complexity**: ${func.complexity ? `Cyclomatic: ${func.complexity.cyclomatic}, Lines: ${func.complexity.lines}` : 'N/A'}
|
|
876
|
+
|
|
877
|
+
\`\`\`
|
|
878
|
+
${func.steps.join('\n')}
|
|
879
|
+
\`\`\`
|
|
880
|
+
`,
|
|
881
|
+
)
|
|
882
|
+
.join('\n')}
|
|
883
|
+
|
|
884
|
+
## Algorithms
|
|
885
|
+
|
|
886
|
+
${result.algorithms
|
|
887
|
+
.map(
|
|
888
|
+
(algo, index) => `
|
|
889
|
+
### ${index + 1}. ${algo.name}
|
|
890
|
+
**Purpose**: ${algo.purpose}
|
|
891
|
+
**Complexity**: ${algo.complexity}
|
|
892
|
+
**Approach**: ${algo.approach}
|
|
893
|
+
`,
|
|
894
|
+
)
|
|
895
|
+
.join('\n')}
|
|
896
|
+
|
|
897
|
+
## Data Structures
|
|
898
|
+
|
|
899
|
+
${result.dataStructures
|
|
900
|
+
.map(
|
|
901
|
+
(ds, index) => `
|
|
902
|
+
### ${index + 1}. ${ds.name}
|
|
903
|
+
**Purpose**: ${ds.purpose}
|
|
904
|
+
**Operations**: ${ds.operations.join(', ')}
|
|
905
|
+
**Complexity**: Access: ${ds.complexity.access}, Insertion: ${ds.complexity.insertion}, Deletion: ${ds.complexity.deletion}
|
|
906
|
+
`,
|
|
907
|
+
)
|
|
908
|
+
.join('\n')}
|
|
909
|
+
|
|
910
|
+
## Interfaces
|
|
911
|
+
|
|
912
|
+
${result.interfaces
|
|
913
|
+
.map(
|
|
914
|
+
(iface, index) => `
|
|
915
|
+
### ${index + 1}. ${iface.name}
|
|
916
|
+
**Type**: ${iface.type}
|
|
917
|
+
|
|
918
|
+
${iface.methods
|
|
919
|
+
.map(
|
|
920
|
+
(method) => `
|
|
921
|
+
#### ${method.name}
|
|
922
|
+
- **Purpose**: ${method.purpose}
|
|
923
|
+
- **Parameters**: ${method.parameters.join(', ')}
|
|
924
|
+
- **Returns**: ${method.returns}
|
|
925
|
+
`,
|
|
926
|
+
)
|
|
927
|
+
.join('\n')}
|
|
928
|
+
`,
|
|
929
|
+
)
|
|
930
|
+
.join('\n')}
|
|
931
|
+
|
|
932
|
+
## Logic Flow
|
|
933
|
+
|
|
934
|
+
${result.logicFlow
|
|
935
|
+
.map(
|
|
936
|
+
(step) => `
|
|
937
|
+
### Step ${step.step}: ${step.name}
|
|
938
|
+
**Description**: ${step.description}
|
|
939
|
+
**Inputs**: ${step.inputs.join(', ')}
|
|
940
|
+
**Outputs**: ${step.outputs.join(', ')}
|
|
941
|
+
**Conditions**: ${step.conditions.join(', ')}
|
|
942
|
+
`,
|
|
943
|
+
)
|
|
944
|
+
.join('\n')}
|
|
945
|
+
|
|
946
|
+
## Edge Cases
|
|
947
|
+
|
|
948
|
+
${result.edgeCases
|
|
949
|
+
.map(
|
|
950
|
+
(edge, index) => `
|
|
951
|
+
### ${index + 1}. ${edge.case}
|
|
952
|
+
**Description**: ${edge.description}
|
|
953
|
+
**Handling**: ${edge.handling}
|
|
954
|
+
**Severity**: ${edge.severity}
|
|
955
|
+
`,
|
|
956
|
+
)
|
|
957
|
+
.join('\n')}
|
|
958
|
+
|
|
959
|
+
## Complexity Analysis
|
|
960
|
+
**Overall Complexity**: ${result.complexityAnalysis.overall}
|
|
961
|
+
|
|
962
|
+
### Function Complexity
|
|
963
|
+
${Object.entries(result.complexityAnalysis.functions || {})
|
|
964
|
+
.map(
|
|
965
|
+
([func, complexity]) => `
|
|
966
|
+
- **${func}**: Cyclomatic: ${complexity.cyclomatic}, Lines: ${complexity.lines}, Level: ${complexity.level}
|
|
967
|
+
`,
|
|
968
|
+
)
|
|
969
|
+
.join('\n')}
|
|
970
|
+
|
|
971
|
+
### Recommendations
|
|
972
|
+
${result.complexityAnalysis.recommendations.map((rec) => `- ${rec}`).join('\n')}
|
|
973
|
+
|
|
974
|
+
## Dependencies
|
|
975
|
+
${result.dependencies.map((dep, index) => `${index + 1}. ${dep}`).join('\n')}
|
|
976
|
+
`;
|
|
977
|
+
|
|
978
|
+
// Save document
|
|
979
|
+
await this.saveArtifact('pseudocode.md', document);
|
|
980
|
+
return document;
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
export default SparcPseudocode;
|