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