scene-capability-engine 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/CHANGELOG.md +2513 -0
  2. package/LICENSE +21 -0
  3. package/README.md +765 -0
  4. package/README.zh.md +630 -0
  5. package/bin/kiro-spec-engine.js +796 -0
  6. package/bin/kse.js +3 -0
  7. package/bin/sce.js +3 -0
  8. package/bin/sco.js +3 -0
  9. package/docs/331-poc-adaptation-roadmap.md +156 -0
  10. package/docs/331-poc-dual-track-integration-guide.md +120 -0
  11. package/docs/331-poc-weekly-delivery-checklist.md +52 -0
  12. package/docs/OFFLINE_INSTALL.md +96 -0
  13. package/docs/README.md +279 -0
  14. package/docs/adopt-migration-guide.md +599 -0
  15. package/docs/adoption-guide.md +616 -0
  16. package/docs/agent-hooks-analysis.md +815 -0
  17. package/docs/architecture.md +733 -0
  18. package/docs/articles/ai-driven-development-philosophy-and-practice-review.md +208 -0
  19. package/docs/articles/ai-driven-development-philosophy-and-practice.en.md +459 -0
  20. package/docs/articles/ai-driven-development-philosophy-and-practice.md +492 -0
  21. package/docs/autonomous-control-guide.md +851 -0
  22. package/docs/command-reference.md +1368 -0
  23. package/docs/community.md +115 -0
  24. package/docs/cross-tool-guide.md +555 -0
  25. package/docs/developer-guide.md +619 -0
  26. package/docs/document-governance.md +865 -0
  27. package/docs/environment-management-guide.md +526 -0
  28. package/docs/examples/add-export-command/design.md +194 -0
  29. package/docs/examples/add-export-command/requirements.md +110 -0
  30. package/docs/examples/add-export-command/tasks.md +88 -0
  31. package/docs/examples/add-rest-api/design.md +855 -0
  32. package/docs/examples/add-rest-api/requirements.md +323 -0
  33. package/docs/examples/add-rest-api/tasks.md +355 -0
  34. package/docs/examples/add-user-dashboard/design.md +192 -0
  35. package/docs/examples/add-user-dashboard/requirements.md +143 -0
  36. package/docs/examples/add-user-dashboard/tasks.md +91 -0
  37. package/docs/faq.md +697 -0
  38. package/docs/handoffs/evidence/ontology/moqui-template-baseline-2026-02-17-232922.json +156 -0
  39. package/docs/handoffs/evidence/ontology/moqui-template-baseline-2026-02-17-232922.md +24 -0
  40. package/docs/images/wechat-qr.png +0 -0
  41. package/docs/integration-modes.md +529 -0
  42. package/docs/integration-philosophy.md +313 -0
  43. package/docs/knowledge-management-guide.md +263 -0
  44. package/docs/manual-workflows-guide.md +418 -0
  45. package/docs/moqui-capability-matrix.md +73 -0
  46. package/docs/moqui-template-core-library-playbook.md +109 -0
  47. package/docs/multi-agent-coordination-guide.md +553 -0
  48. package/docs/multi-repo-management-guide.md +1344 -0
  49. package/docs/quick-start-with-ai-tools.md +375 -0
  50. package/docs/quick-start.md +146 -0
  51. package/docs/release-checklist.md +121 -0
  52. package/docs/releases/README.md +13 -0
  53. package/docs/releases/v1.46.2-validation.md +45 -0
  54. package/docs/releases/v1.46.2.md +50 -0
  55. package/docs/scene-runtime-guide.md +347 -0
  56. package/docs/spec-collaboration-guide.md +369 -0
  57. package/docs/spec-locking-guide.md +225 -0
  58. package/docs/spec-numbering-guide.md +348 -0
  59. package/docs/spec-workflow.md +519 -0
  60. package/docs/steering-strategy-guide.md +196 -0
  61. package/docs/team-collaboration-guide.md +465 -0
  62. package/docs/testing-strategy.md +272 -0
  63. package/docs/tools/claude-guide.md +654 -0
  64. package/docs/tools/cursor-guide.md +706 -0
  65. package/docs/tools/generic-guide.md +446 -0
  66. package/docs/tools/kiro-guide.md +308 -0
  67. package/docs/tools/vscode-guide.md +445 -0
  68. package/docs/tools/windsurf-guide.md +391 -0
  69. package/docs/troubleshooting.md +1135 -0
  70. package/docs/upgrade-guide.md +639 -0
  71. package/docs/value-observability-guide.md +127 -0
  72. package/docs/zh/README.md +341 -0
  73. package/docs/zh/quick-start.md +764 -0
  74. package/docs/zh/release-checklist.md +121 -0
  75. package/docs/zh/releases/README.md +13 -0
  76. package/docs/zh/releases/v1.46.2-validation.md +45 -0
  77. package/docs/zh/releases/v1.46.2.md +50 -0
  78. package/docs/zh/spec-numbering-guide.md +348 -0
  79. package/docs/zh/tools/claude-guide.md +349 -0
  80. package/docs/zh/tools/cursor-guide.md +281 -0
  81. package/docs/zh/tools/generic-guide.md +499 -0
  82. package/docs/zh/tools/kiro-guide.md +342 -0
  83. package/docs/zh/tools/vscode-guide.md +449 -0
  84. package/docs/zh/tools/windsurf-guide.md +378 -0
  85. package/docs/zh/value-observability-guide.md +127 -0
  86. package/docs//344/272/244/344/273/230/346/270/205/345/215/225.md +75 -0
  87. package/lib/adoption/adoption-logger.js +487 -0
  88. package/lib/adoption/adoption-strategy.js +538 -0
  89. package/lib/adoption/backup-manager.js +420 -0
  90. package/lib/adoption/conflict-resolver.js +410 -0
  91. package/lib/adoption/detection-engine.js +275 -0
  92. package/lib/adoption/diff-viewer.js +226 -0
  93. package/lib/adoption/error-formatter.js +509 -0
  94. package/lib/adoption/file-classifier.js +385 -0
  95. package/lib/adoption/progress-reporter.js +534 -0
  96. package/lib/adoption/smart-orchestrator.js +470 -0
  97. package/lib/adoption/strategy-selector.js +218 -0
  98. package/lib/adoption/summary-generator.js +493 -0
  99. package/lib/adoption/template-sync.js +605 -0
  100. package/lib/auto/autonomous-engine.js +485 -0
  101. package/lib/auto/checkpoint-manager.js +300 -0
  102. package/lib/auto/close-loop-runner.js +2476 -0
  103. package/lib/auto/config-schema.js +176 -0
  104. package/lib/auto/decision-engine.js +344 -0
  105. package/lib/auto/error-recovery-manager.js +580 -0
  106. package/lib/auto/goal-decomposer.js +278 -0
  107. package/lib/auto/progress-tracker.js +502 -0
  108. package/lib/auto/safety-manager.js +186 -0
  109. package/lib/auto/semantic-decomposer.js +137 -0
  110. package/lib/auto/state-manager.js +126 -0
  111. package/lib/auto/task-queue-manager.js +340 -0
  112. package/lib/backup/backup-system.js +372 -0
  113. package/lib/backup/selective-backup.js +207 -0
  114. package/lib/collab/agent-registry.js +240 -0
  115. package/lib/collab/collab-manager.js +285 -0
  116. package/lib/collab/contract-manager.js +320 -0
  117. package/lib/collab/coordinator.js +370 -0
  118. package/lib/collab/dependency-manager.js +280 -0
  119. package/lib/collab/index.js +20 -0
  120. package/lib/collab/integration-manager.js +202 -0
  121. package/lib/collab/merge-coordinator.js +252 -0
  122. package/lib/collab/metadata-manager.js +233 -0
  123. package/lib/collab/multi-agent-config.js +120 -0
  124. package/lib/collab/spec-lifecycle-manager.js +304 -0
  125. package/lib/collab/sync-barrier.js +88 -0
  126. package/lib/collab/visualizer.js +208 -0
  127. package/lib/commands/adopt.js +749 -0
  128. package/lib/commands/auto.js +19559 -0
  129. package/lib/commands/collab.js +275 -0
  130. package/lib/commands/context.js +99 -0
  131. package/lib/commands/docs.js +808 -0
  132. package/lib/commands/doctor.js +273 -0
  133. package/lib/commands/env.js +420 -0
  134. package/lib/commands/knowledge.js +309 -0
  135. package/lib/commands/lock.js +235 -0
  136. package/lib/commands/ops.js +409 -0
  137. package/lib/commands/orchestrate.js +446 -0
  138. package/lib/commands/prompt.js +105 -0
  139. package/lib/commands/repo.js +118 -0
  140. package/lib/commands/rollback.js +219 -0
  141. package/lib/commands/scene.js +15549 -0
  142. package/lib/commands/spec-bootstrap.js +147 -0
  143. package/lib/commands/spec-gate.js +157 -0
  144. package/lib/commands/spec-pipeline.js +205 -0
  145. package/lib/commands/status.js +321 -0
  146. package/lib/commands/task.js +199 -0
  147. package/lib/commands/templates.js +654 -0
  148. package/lib/commands/upgrade.js +231 -0
  149. package/lib/commands/value.js +569 -0
  150. package/lib/commands/watch.js +684 -0
  151. package/lib/commands/workflows.js +240 -0
  152. package/lib/commands/workspace-multi.js +325 -0
  153. package/lib/commands/workspace.js +189 -0
  154. package/lib/context/context-exporter.js +378 -0
  155. package/lib/context/prompt-generator.js +482 -0
  156. package/lib/data/moqui-capability-lexicon.json +45 -0
  157. package/lib/environment/backup-system.js +189 -0
  158. package/lib/environment/environment-manager.js +379 -0
  159. package/lib/environment/environment-registry.js +168 -0
  160. package/lib/gitignore/gitignore-backup.js +229 -0
  161. package/lib/gitignore/gitignore-detector.js +239 -0
  162. package/lib/gitignore/gitignore-integration.js +267 -0
  163. package/lib/gitignore/gitignore-transformer.js +193 -0
  164. package/lib/gitignore/layered-rules-template.js +42 -0
  165. package/lib/governance/archive-tool.js +284 -0
  166. package/lib/governance/cleanup-tool.js +237 -0
  167. package/lib/governance/config-manager.js +186 -0
  168. package/lib/governance/diagnostic-engine.js +271 -0
  169. package/lib/governance/doc-reference-checker.js +200 -0
  170. package/lib/governance/execution-logger.js +243 -0
  171. package/lib/governance/file-scanner.js +285 -0
  172. package/lib/governance/hooks-manager.js +333 -0
  173. package/lib/governance/reporter.js +337 -0
  174. package/lib/governance/validation-engine.js +181 -0
  175. package/lib/i18n.js +79 -0
  176. package/lib/knowledge/entry-manager.js +208 -0
  177. package/lib/knowledge/index-manager.js +261 -0
  178. package/lib/knowledge/knowledge-manager.js +273 -0
  179. package/lib/knowledge/template-manager.js +191 -0
  180. package/lib/lock/index.js +21 -0
  181. package/lib/lock/lock-file.js +192 -0
  182. package/lib/lock/lock-manager.js +321 -0
  183. package/lib/lock/machine-identifier.js +135 -0
  184. package/lib/lock/steering-file-lock.js +207 -0
  185. package/lib/lock/task-lock-manager.js +345 -0
  186. package/lib/operations/audit-logger.js +293 -0
  187. package/lib/operations/feedback-manager.js +1147 -0
  188. package/lib/operations/index.js +23 -0
  189. package/lib/operations/models/index.js +170 -0
  190. package/lib/operations/operations-manager.js +151 -0
  191. package/lib/operations/operations-validator.js +280 -0
  192. package/lib/operations/permission-manager.js +354 -0
  193. package/lib/operations/template-loader.js +143 -0
  194. package/lib/orchestrator/agent-spawner.js +629 -0
  195. package/lib/orchestrator/bootstrap-prompt-builder.js +236 -0
  196. package/lib/orchestrator/index.js +19 -0
  197. package/lib/orchestrator/orchestration-engine.js +1270 -0
  198. package/lib/orchestrator/orchestrator-config.js +173 -0
  199. package/lib/orchestrator/status-monitor.js +591 -0
  200. package/lib/python-checker.js +209 -0
  201. package/lib/repo/config-manager.js +580 -0
  202. package/lib/repo/errors/config-error.js +13 -0
  203. package/lib/repo/errors/git-error.js +15 -0
  204. package/lib/repo/errors/repo-error.js +14 -0
  205. package/lib/repo/git-operations.js +181 -0
  206. package/lib/repo/handlers/.gitkeep +1 -0
  207. package/lib/repo/handlers/exec-handler.js +155 -0
  208. package/lib/repo/handlers/health-handler.js +169 -0
  209. package/lib/repo/handlers/init-handler.js +197 -0
  210. package/lib/repo/handlers/status-handler.js +176 -0
  211. package/lib/repo/output-formatter.js +184 -0
  212. package/lib/repo/path-resolver.js +178 -0
  213. package/lib/repo/repo-manager.js +514 -0
  214. package/lib/scene-runtime/audit-emitter.js +59 -0
  215. package/lib/scene-runtime/binding-plugin-loader.js +351 -0
  216. package/lib/scene-runtime/binding-registry.js +349 -0
  217. package/lib/scene-runtime/eval-bridge.js +44 -0
  218. package/lib/scene-runtime/index.js +19 -0
  219. package/lib/scene-runtime/moqui-adapter.js +620 -0
  220. package/lib/scene-runtime/moqui-client.js +606 -0
  221. package/lib/scene-runtime/moqui-extractor.js +2029 -0
  222. package/lib/scene-runtime/plan-compiler.js +208 -0
  223. package/lib/scene-runtime/policy-gate.js +58 -0
  224. package/lib/scene-runtime/runtime-executor.js +358 -0
  225. package/lib/scene-runtime/scene-loader.js +96 -0
  226. package/lib/scene-runtime/scene-ontology.js +959 -0
  227. package/lib/scene-runtime/scene-template-linter.js +852 -0
  228. package/lib/scene-runtime/templates/scene-template-erp-query-v0.1.yaml +28 -0
  229. package/lib/scene-runtime/templates/scene-template-hybrid-shadow-v0.1.yaml +34 -0
  230. package/lib/spec/bootstrap/context-collector.js +48 -0
  231. package/lib/spec/bootstrap/draft-generator.js +158 -0
  232. package/lib/spec/bootstrap/questionnaire-engine.js +70 -0
  233. package/lib/spec/bootstrap/trace-emitter.js +59 -0
  234. package/lib/spec/multi-spec-orchestrate.js +93 -0
  235. package/lib/spec/pipeline/constants.js +6 -0
  236. package/lib/spec/pipeline/stage-adapters.js +118 -0
  237. package/lib/spec/pipeline/stage-runner.js +146 -0
  238. package/lib/spec/pipeline/state-store.js +119 -0
  239. package/lib/spec-gate/engine/gate-engine.js +165 -0
  240. package/lib/spec-gate/policy/default-policy.js +22 -0
  241. package/lib/spec-gate/policy/policy-loader.js +103 -0
  242. package/lib/spec-gate/result-emitter.js +81 -0
  243. package/lib/spec-gate/rules/default-rules.js +156 -0
  244. package/lib/spec-gate/rules/rule-registry.js +51 -0
  245. package/lib/steering/adoption-config.js +164 -0
  246. package/lib/steering/compliance-auto-fixer.js +204 -0
  247. package/lib/steering/compliance-cache.js +99 -0
  248. package/lib/steering/compliance-error-reporter.js +70 -0
  249. package/lib/steering/context-sync-manager.js +273 -0
  250. package/lib/steering/index.js +92 -0
  251. package/lib/steering/spec-steering.js +230 -0
  252. package/lib/steering/steering-compliance-checker.js +73 -0
  253. package/lib/steering/steering-loader.js +144 -0
  254. package/lib/steering/steering-manager.js +289 -0
  255. package/lib/task/index.js +12 -0
  256. package/lib/task/task-claimer.js +489 -0
  257. package/lib/task/task-status-store.js +418 -0
  258. package/lib/templates/cache-manager.js +440 -0
  259. package/lib/templates/content-generalizer.js +247 -0
  260. package/lib/templates/frontmatter-generator.js +128 -0
  261. package/lib/templates/git-handler.js +471 -0
  262. package/lib/templates/metadata-collector.js +328 -0
  263. package/lib/templates/path-utils.js +144 -0
  264. package/lib/templates/registry-parser.js +505 -0
  265. package/lib/templates/spec-reader.js +216 -0
  266. package/lib/templates/template-applicator.js +249 -0
  267. package/lib/templates/template-creator.js +256 -0
  268. package/lib/templates/template-error.js +143 -0
  269. package/lib/templates/template-exporter.js +502 -0
  270. package/lib/templates/template-manager.js +782 -0
  271. package/lib/templates/template-validator.js +361 -0
  272. package/lib/upgrade/migration-engine.js +382 -0
  273. package/lib/upgrade/migrations/.gitkeep +52 -0
  274. package/lib/upgrade/migrations/1.0.0-to-1.1.0.js +78 -0
  275. package/lib/utils/file-diff.js +177 -0
  276. package/lib/utils/fs-utils.js +274 -0
  277. package/lib/utils/tool-detector.js +383 -0
  278. package/lib/utils/validation.js +324 -0
  279. package/lib/value/gate-summary-emitter.js +99 -0
  280. package/lib/value/metric-contract-loader.js +210 -0
  281. package/lib/value/risk-evaluator.js +117 -0
  282. package/lib/value/weekly-snapshot-builder.js +61 -0
  283. package/lib/version/version-checker.js +156 -0
  284. package/lib/version/version-manager.js +327 -0
  285. package/lib/watch/action-executor.js +458 -0
  286. package/lib/watch/event-debouncer.js +323 -0
  287. package/lib/watch/execution-logger.js +550 -0
  288. package/lib/watch/file-watcher.js +499 -0
  289. package/lib/watch/presets.js +266 -0
  290. package/lib/watch/watch-manager.js +533 -0
  291. package/lib/workspace/multi/global-config.js +150 -0
  292. package/lib/workspace/multi/index.js +22 -0
  293. package/lib/workspace/multi/path-utils.js +173 -0
  294. package/lib/workspace/multi/workspace-context-resolver.js +244 -0
  295. package/lib/workspace/multi/workspace-registry.js +196 -0
  296. package/lib/workspace/multi/workspace-state-manager.js +537 -0
  297. package/lib/workspace/multi/workspace.js +90 -0
  298. package/lib/workspace/workspace-manager.js +370 -0
  299. package/lib/workspace/workspace-sync.js +356 -0
  300. package/locales/en.json +114 -0
  301. package/locales/zh.json +114 -0
  302. package/package.json +102 -0
  303. package/template/.kiro/README.md +247 -0
  304. package/template/.kiro/hooks/check-spec-on-create.kiro.hook +17 -0
  305. package/template/.kiro/hooks/run-tests-on-save.kiro.hook +13 -0
  306. package/template/.kiro/hooks/sync-tasks-on-edit.kiro.hook +16 -0
  307. package/template/.kiro/specs/SPEC_WORKFLOW_GUIDE.md +134 -0
  308. package/template/.kiro/steering/CORE_PRINCIPLES.md +133 -0
  309. package/template/.kiro/steering/CURRENT_CONTEXT.md +30 -0
  310. package/template/.kiro/steering/ENVIRONMENT.md +35 -0
  311. package/template/.kiro/steering/RULES_GUIDE.md +46 -0
  312. package/template/.kiro/templates/operations/default/change-impact.md +112 -0
  313. package/template/.kiro/templates/operations/default/deployment.md +91 -0
  314. package/template/.kiro/templates/operations/default/feedback-response.md +269 -0
  315. package/template/.kiro/templates/operations/default/migration-plan.md +172 -0
  316. package/template/.kiro/templates/operations/default/monitoring.md +135 -0
  317. package/template/.kiro/templates/operations/default/operations.md +135 -0
  318. package/template/.kiro/templates/operations/default/rollback.md +143 -0
  319. package/template/.kiro/templates/operations/default/tools.yaml +364 -0
  320. package/template/.kiro/templates/operations/default/troubleshooting.md +123 -0
  321. package/template/.kiro/tools/backup_manager.py +295 -0
  322. package/template/.kiro/tools/configuration_manager.py +218 -0
  323. package/template/.kiro/tools/document_evaluator.py +550 -0
  324. package/template/.kiro/tools/enhancement_logger.py +168 -0
  325. package/template/.kiro/tools/error_handler.py +335 -0
  326. package/template/.kiro/tools/improvement_identifier.py +444 -0
  327. package/template/.kiro/tools/modification_applicator.py +737 -0
  328. package/template/.kiro/tools/quality_gate_enforcer.py +207 -0
  329. package/template/.kiro/tools/quality_scorer.py +305 -0
  330. package/template/.kiro/tools/report_generator.py +154 -0
  331. package/template/.kiro/tools/ultrawork_enhancer.py +676 -0
  332. package/template/.kiro/tools/ultrawork_enhancer_refactored.py +0 -0
  333. package/template/.kiro/tools/ultrawork_enhancer_v2.py +463 -0
  334. package/template/.kiro/tools/ultrawork_enhancer_v3.py +606 -0
  335. package/template/.kiro/tools/workflow_quality_gate.py +100 -0
  336. package/template/README.md +111 -0
@@ -0,0 +1,176 @@
1
+ /**
2
+ * Configuration Schema for Autonomous Control
3
+ * Defines and validates autonomous execution configuration
4
+ */
5
+
6
+ const DEFAULT_CONFIG = {
7
+ version: '1.0.0',
8
+ mode: 'balanced',
9
+
10
+ checkpoints: {
11
+ requirementsReview: false,
12
+ designReview: false,
13
+ tasksReview: false,
14
+ phaseCompletion: true,
15
+ finalReview: true,
16
+ errorThreshold: 5
17
+ },
18
+
19
+ errorRecovery: {
20
+ enabled: true,
21
+ maxAttempts: 3,
22
+ strategies: ['syntax-fix', 'import-resolution', 'type-correction', 'null-check', 'error-handling'],
23
+ learningEnabled: true
24
+ },
25
+
26
+ safety: {
27
+ requireProductionConfirmation: true,
28
+ requireExternalResourceConfirmation: true,
29
+ requireDestructiveOperationConfirmation: true,
30
+ allowedOperations: [],
31
+ blockedOperations: []
32
+ },
33
+
34
+ performance: {
35
+ maxConcurrentTasks: 1,
36
+ taskTimeout: 300000, // 5 minutes
37
+ checkpointInterval: 600000 // 10 minutes
38
+ },
39
+
40
+ notifications: {
41
+ enabled: true,
42
+ onCheckpoint: true,
43
+ onError: true,
44
+ onCompletion: true
45
+ }
46
+ };
47
+
48
+ const MODE_PRESETS = {
49
+ conservative: {
50
+ checkpoints: {
51
+ requirementsReview: true,
52
+ designReview: true,
53
+ tasksReview: true,
54
+ phaseCompletion: true,
55
+ finalReview: true,
56
+ errorThreshold: 3
57
+ }
58
+ },
59
+
60
+ balanced: {
61
+ checkpoints: {
62
+ requirementsReview: false,
63
+ designReview: false,
64
+ tasksReview: false,
65
+ phaseCompletion: true,
66
+ finalReview: true,
67
+ errorThreshold: 5
68
+ }
69
+ },
70
+
71
+ aggressive: {
72
+ checkpoints: {
73
+ requirementsReview: false,
74
+ designReview: false,
75
+ tasksReview: false,
76
+ phaseCompletion: false,
77
+ finalReview: true,
78
+ errorThreshold: 10
79
+ }
80
+ }
81
+ };
82
+
83
+ /**
84
+ * Validate autonomous configuration
85
+ * @param {Object} config - Configuration to validate
86
+ * @returns {Object} - { valid: boolean, errors: string[] }
87
+ */
88
+ function validateConfig(config) {
89
+ const errors = [];
90
+
91
+ if (!config) {
92
+ return { valid: false, errors: ['Configuration is required'] };
93
+ }
94
+
95
+ // Validate mode
96
+ if (config.mode && !['conservative', 'balanced', 'aggressive'].includes(config.mode)) {
97
+ errors.push('mode must be "conservative", "balanced", or "aggressive"');
98
+ }
99
+
100
+ // Validate checkpoints
101
+ if (config.checkpoints) {
102
+ if (typeof config.checkpoints.errorThreshold === 'number' && config.checkpoints.errorThreshold < 1) {
103
+ errors.push('checkpoints.errorThreshold must be >= 1');
104
+ }
105
+ }
106
+
107
+ // Validate error recovery
108
+ if (config.errorRecovery) {
109
+ if (typeof config.errorRecovery.maxAttempts === 'number' && config.errorRecovery.maxAttempts < 1) {
110
+ errors.push('errorRecovery.maxAttempts must be >= 1');
111
+ }
112
+ }
113
+
114
+ // Validate performance
115
+ if (config.performance) {
116
+ if (typeof config.performance.maxConcurrentTasks === 'number' && config.performance.maxConcurrentTasks < 1) {
117
+ errors.push('performance.maxConcurrentTasks must be >= 1');
118
+ }
119
+ if (typeof config.performance.taskTimeout === 'number' && config.performance.taskTimeout < 1000) {
120
+ errors.push('performance.taskTimeout must be >= 1000ms');
121
+ }
122
+ }
123
+
124
+ return {
125
+ valid: errors.length === 0,
126
+ errors
127
+ };
128
+ }
129
+
130
+ /**
131
+ * Merge configurations with hierarchy: defaults < global < project
132
+ * @param {Object} globalConfig - Global configuration
133
+ * @param {Object} projectConfig - Project-specific configuration
134
+ * @returns {Object} - Merged configuration
135
+ */
136
+ function mergeConfigs(globalConfig = {}, projectConfig = {}) {
137
+ const merged = JSON.parse(JSON.stringify(DEFAULT_CONFIG));
138
+
139
+ // Apply mode preset if specified
140
+ const mode = projectConfig.mode || globalConfig.mode || DEFAULT_CONFIG.mode;
141
+ if (MODE_PRESETS[mode]) {
142
+ Object.assign(merged.checkpoints, MODE_PRESETS[mode].checkpoints);
143
+ }
144
+ merged.mode = mode;
145
+
146
+ // Deep merge global config
147
+ deepMerge(merged, globalConfig);
148
+
149
+ // Deep merge project config (overrides global)
150
+ deepMerge(merged, projectConfig);
151
+
152
+ return merged;
153
+ }
154
+
155
+ /**
156
+ * Deep merge source into target
157
+ * @param {Object} target - Target object
158
+ * @param {Object} source - Source object
159
+ */
160
+ function deepMerge(target, source) {
161
+ for (const key in source) {
162
+ if (source[key] && typeof source[key] === 'object' && !Array.isArray(source[key])) {
163
+ if (!target[key]) target[key] = {};
164
+ deepMerge(target[key], source[key]);
165
+ } else {
166
+ target[key] = source[key];
167
+ }
168
+ }
169
+ }
170
+
171
+ module.exports = {
172
+ DEFAULT_CONFIG,
173
+ MODE_PRESETS,
174
+ validateConfig,
175
+ mergeConfigs
176
+ };
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Decision Engine
3
+ * Autonomous technical decision-making with documentation
4
+ */
5
+
6
+ class DecisionEngine {
7
+ constructor(projectContext = {}) {
8
+ this.projectContext = projectContext;
9
+ this.decisionHistory = [];
10
+ this.outcomeTracking = new Map(); // decision type -> outcomes
11
+ }
12
+
13
+ /**
14
+ * Choose technology stack
15
+ * @param {Object} requirements - Requirements object
16
+ * @returns {Object} - Technology choices
17
+ */
18
+ async chooseTechnologyStack(requirements) {
19
+ const decision = {
20
+ id: this.generateDecisionId(),
21
+ timestamp: new Date().toISOString(),
22
+ category: 'technology',
23
+ decision: 'Technology Stack Selection',
24
+ rationale: 'Based on project requirements and existing patterns',
25
+ alternatives: [],
26
+ impact: 'high',
27
+ reversible: false
28
+ };
29
+
30
+ // Analyze project context
31
+ const hasTypeScript = this.projectContext.hasTypeScript || false;
32
+ const hasReact = this.projectContext.hasReact || false;
33
+
34
+ const stack = {
35
+ language: hasTypeScript ? 'TypeScript' : 'JavaScript',
36
+ testing: 'Jest',
37
+ buildTool: 'npm'
38
+ };
39
+
40
+ decision.choices = stack;
41
+ decision.rationale = `Selected ${stack.language} for consistency with existing codebase`;
42
+
43
+ this.documentDecision(decision);
44
+ return stack;
45
+ }
46
+
47
+ /**
48
+ * Select architecture pattern
49
+ * @param {Object} requirements - Requirements object
50
+ * @returns {string} - Architecture pattern
51
+ */
52
+ async selectArchitecturePattern(requirements) {
53
+ const decision = {
54
+ id: this.generateDecisionId(),
55
+ timestamp: new Date().toISOString(),
56
+ category: 'architecture',
57
+ decision: 'Architecture Pattern Selection',
58
+ alternatives: ['MVC', 'Layered', 'Microservices', 'Event-Driven'],
59
+ impact: 'high',
60
+ reversible: false
61
+ };
62
+
63
+ // Default to layered architecture for CLI tools
64
+ const pattern = 'Layered';
65
+ decision.choice = pattern;
66
+ decision.rationale = 'Layered architecture provides clear separation of concerns for CLI tools';
67
+
68
+ this.documentDecision(decision);
69
+ return pattern;
70
+ }
71
+
72
+ /**
73
+ * Choose testing framework
74
+ * @param {string} language - Programming language
75
+ * @returns {string} - Testing framework
76
+ */
77
+ async chooseTestingFramework(language) {
78
+ const frameworks = {
79
+ JavaScript: 'Jest',
80
+ TypeScript: 'Jest',
81
+ Python: 'pytest',
82
+ Java: 'JUnit'
83
+ };
84
+
85
+ const framework = frameworks[language] || 'Jest';
86
+
87
+ const decision = {
88
+ id: this.generateDecisionId(),
89
+ timestamp: new Date().toISOString(),
90
+ category: 'technology',
91
+ decision: `Testing Framework: ${framework}`,
92
+ rationale: `Standard testing framework for ${language}`,
93
+ alternatives: Object.values(frameworks).filter(f => f !== framework),
94
+ impact: 'medium',
95
+ reversible: true
96
+ };
97
+
98
+ this.documentDecision(decision);
99
+ return framework;
100
+ }
101
+
102
+ /**
103
+ * Select data structure
104
+ * @param {Object} requirements - Requirements for data structure
105
+ * @returns {string} - Data structure choice
106
+ */
107
+ async selectDataStructure(requirements) {
108
+ const { accessPattern, size, operations } = requirements;
109
+
110
+ let structure = 'Array';
111
+ let rationale = 'Default choice for simple collections';
112
+
113
+ if (operations?.includes('fast-lookup')) {
114
+ structure = 'Map';
115
+ rationale = 'Map provides O(1) lookup performance';
116
+ } else if (operations?.includes('unique')) {
117
+ structure = 'Set';
118
+ rationale = 'Set ensures uniqueness automatically';
119
+ } else if (accessPattern === 'queue') {
120
+ structure = 'Array with shift/push';
121
+ rationale = 'Array methods provide queue semantics';
122
+ }
123
+
124
+ const decision = {
125
+ id: this.generateDecisionId(),
126
+ timestamp: new Date().toISOString(),
127
+ category: 'implementation',
128
+ decision: `Data Structure: ${structure}`,
129
+ rationale,
130
+ alternatives: ['Array', 'Map', 'Set', 'Object'],
131
+ impact: 'low',
132
+ reversible: true
133
+ };
134
+
135
+ this.documentDecision(decision);
136
+ return structure;
137
+ }
138
+
139
+ /**
140
+ * Choose naming convention
141
+ * @param {Object} context - Context information
142
+ * @returns {Object} - Naming conventions
143
+ */
144
+ async chooseNamingConvention(context) {
145
+ // Detect existing patterns from project
146
+ const conventions = {
147
+ files: 'kebab-case',
148
+ classes: 'PascalCase',
149
+ functions: 'camelCase',
150
+ constants: 'UPPER_SNAKE_CASE',
151
+ variables: 'camelCase'
152
+ };
153
+
154
+ const decision = {
155
+ id: this.generateDecisionId(),
156
+ timestamp: new Date().toISOString(),
157
+ category: 'implementation',
158
+ decision: 'Naming Conventions',
159
+ rationale: 'Following JavaScript/Node.js community standards',
160
+ conventions,
161
+ impact: 'low',
162
+ reversible: true
163
+ };
164
+
165
+ this.documentDecision(decision);
166
+ return conventions;
167
+ }
168
+
169
+ /**
170
+ * Determine file structure
171
+ * @param {Array} components - Components to organize
172
+ * @returns {Object} - File structure
173
+ */
174
+ async determineFileStructure(components) {
175
+ const structure = {
176
+ pattern: 'feature-based',
177
+ directories: components.map(c => `lib/${c}`),
178
+ rationale: 'Feature-based organization for better modularity'
179
+ };
180
+
181
+ const decision = {
182
+ id: this.generateDecisionId(),
183
+ timestamp: new Date().toISOString(),
184
+ category: 'implementation',
185
+ decision: 'File Structure Organization',
186
+ rationale: structure.rationale,
187
+ structure,
188
+ impact: 'medium',
189
+ reversible: true
190
+ };
191
+
192
+ this.documentDecision(decision);
193
+ return structure;
194
+ }
195
+
196
+ /**
197
+ * Decide if code should be refactored
198
+ * @param {Object} code - Code metrics
199
+ * @param {Object} metrics - Code metrics
200
+ * @returns {boolean} - Should refactor
201
+ */
202
+ async shouldRefactor(code, metrics) {
203
+ const { complexity, duplication, length } = metrics;
204
+
205
+ const shouldRefactor = complexity > 10 || duplication > 0.2 || length > 300;
206
+
207
+ if (shouldRefactor) {
208
+ const decision = {
209
+ id: this.generateDecisionId(),
210
+ timestamp: new Date().toISOString(),
211
+ category: 'quality',
212
+ decision: 'Refactor Code',
213
+ rationale: `Complexity: ${complexity}, Duplication: ${duplication}, Length: ${length}`,
214
+ impact: 'medium',
215
+ reversible: false
216
+ };
217
+
218
+ this.documentDecision(decision);
219
+ }
220
+
221
+ return shouldRefactor;
222
+ }
223
+
224
+ /**
225
+ * Decide if tests should be added
226
+ * @param {number} coverage - Current coverage
227
+ * @param {Object} requirements - Requirements
228
+ * @returns {boolean} - Should add tests
229
+ */
230
+ async shouldAddTests(coverage, requirements) {
231
+ const targetCoverage = requirements.targetCoverage || 80;
232
+ const shouldAdd = coverage < targetCoverage;
233
+
234
+ if (shouldAdd) {
235
+ const decision = {
236
+ id: this.generateDecisionId(),
237
+ timestamp: new Date().toISOString(),
238
+ category: 'quality',
239
+ decision: 'Add Tests',
240
+ rationale: `Current coverage ${coverage}% below target ${targetCoverage}%`,
241
+ impact: 'medium',
242
+ reversible: false
243
+ };
244
+
245
+ this.documentDecision(decision);
246
+ }
247
+
248
+ return shouldAdd;
249
+ }
250
+
251
+ /**
252
+ * Decide if optimization is needed
253
+ * @param {Object} performance - Performance metrics
254
+ * @param {Object} requirements - Requirements
255
+ * @returns {boolean} - Should optimize
256
+ */
257
+ async shouldOptimize(performance, requirements) {
258
+ const { responseTime, throughput } = performance;
259
+ const { maxResponseTime, minThroughput } = requirements;
260
+
261
+ const shouldOptimize =
262
+ (maxResponseTime && responseTime > maxResponseTime) ||
263
+ (minThroughput && throughput < minThroughput);
264
+
265
+ if (shouldOptimize) {
266
+ const decision = {
267
+ id: this.generateDecisionId(),
268
+ timestamp: new Date().toISOString(),
269
+ category: 'quality',
270
+ decision: 'Optimize Performance',
271
+ rationale: `Response time: ${responseTime}ms, Throughput: ${throughput} req/s`,
272
+ impact: 'high',
273
+ reversible: false
274
+ };
275
+
276
+ this.documentDecision(decision);
277
+ }
278
+
279
+ return shouldOptimize;
280
+ }
281
+
282
+ /**
283
+ * Document a decision
284
+ * @param {Object} decision - Decision details
285
+ */
286
+ documentDecision(decision) {
287
+ this.decisionHistory.push(decision);
288
+ }
289
+
290
+ /**
291
+ * Get decision history
292
+ * @returns {Array} - Decision history
293
+ */
294
+ getDecisionHistory() {
295
+ return this.decisionHistory;
296
+ }
297
+
298
+ /**
299
+ * Track decision outcome
300
+ * @param {string} decisionId - Decision ID
301
+ * @param {boolean} success - Outcome success
302
+ */
303
+ trackOutcome(decisionId, success) {
304
+ const decision = this.decisionHistory.find(d => d.id === decisionId);
305
+ if (!decision) return;
306
+
307
+ const category = decision.category;
308
+ if (!this.outcomeTracking.has(category)) {
309
+ this.outcomeTracking.set(category, { successes: 0, failures: 0 });
310
+ }
311
+
312
+ const outcomes = this.outcomeTracking.get(category);
313
+ if (success) {
314
+ outcomes.successes++;
315
+ } else {
316
+ outcomes.failures++;
317
+ }
318
+ }
319
+
320
+ /**
321
+ * Get success rate for decision category
322
+ * @param {string} category - Decision category
323
+ * @returns {number} - Success rate (0-1)
324
+ */
325
+ getSuccessRate(category) {
326
+ const outcomes = this.outcomeTracking.get(category);
327
+ if (!outcomes) return 0;
328
+
329
+ const total = outcomes.successes + outcomes.failures;
330
+ if (total === 0) return 0;
331
+
332
+ return outcomes.successes / total;
333
+ }
334
+
335
+ /**
336
+ * Generate unique decision ID
337
+ * @returns {string} - Decision ID
338
+ */
339
+ generateDecisionId() {
340
+ return `decision-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
341
+ }
342
+ }
343
+
344
+ module.exports = DecisionEngine;