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,485 @@
1
+ /**
2
+ * Autonomous Engine
3
+ * Central orchestrator for autonomous execution
4
+ */
5
+
6
+ const StateManager = require('./state-manager');
7
+ const TaskQueueManager = require('./task-queue-manager');
8
+ const ErrorRecoveryManager = require('./error-recovery-manager');
9
+ const ProgressTracker = require('./progress-tracker');
10
+ const DecisionEngine = require('./decision-engine');
11
+ const { CheckpointManager, CHECKPOINT_TYPES } = require('./checkpoint-manager');
12
+ const SafetyManager = require('./safety-manager');
13
+ const { mergeConfigs } = require('./config-schema');
14
+ const path = require('path');
15
+
16
+ class AutonomousEngine {
17
+ constructor(specName, config = {}) {
18
+ this.specName = specName;
19
+ this.config = config;
20
+
21
+ // Initialize managers
22
+ this.stateManager = new StateManager(specName);
23
+ this.taskQueue = new TaskQueueManager();
24
+ this.errorRecovery = new ErrorRecoveryManager(config.errorRecovery);
25
+ this.progress = new ProgressTracker();
26
+ this.decisions = new DecisionEngine();
27
+ this.checkpoints = new CheckpointManager(config);
28
+ this.safety = new SafetyManager(config);
29
+
30
+ // State
31
+ this.isRunning = false;
32
+ this.isPaused = false;
33
+ this.currentTask = null;
34
+
35
+ // Set pause callback for error recovery
36
+ this.errorRecovery.setPauseCallback(async (data) => {
37
+ await this.pause();
38
+ await this.checkpoints.createCheckpoint(CHECKPOINT_TYPES.FATAL_ERROR, data);
39
+ });
40
+ }
41
+
42
+ /**
43
+ * Initialize engine
44
+ * @param {Object} options - Initialization options
45
+ */
46
+ async initialize(options = {}) {
47
+ await this.stateManager.initialize();
48
+ await this.checkpoints.initialize();
49
+
50
+ // Verify CORE_PRINCIPLES compliance
51
+ await this.verifyCoreCompliance();
52
+
53
+ // Load or create state
54
+ const existingState = await this.stateManager.loadState();
55
+ if (existingState) {
56
+ this.state = existingState;
57
+ } else {
58
+ this.state = this.stateManager.createInitialState({ config: this.config });
59
+ await this.stateManager.saveState(this.state);
60
+ }
61
+
62
+ await this.progress.logAction('engine-initialized', { specName: this.specName });
63
+ }
64
+
65
+ /**
66
+ * Verify CORE_PRINCIPLES compliance
67
+ */
68
+ async verifyCoreCompliance() {
69
+ const fs = require('fs-extra');
70
+
71
+ // Check for .kiro directory (接管标志)
72
+ const kiroDir = path.join(process.cwd(), '.kiro');
73
+ if (!await fs.pathExists(kiroDir)) {
74
+ throw new Error('CORE_PRINCIPLES violation: .kiro directory not found. Project not adopted by kse.');
75
+ }
76
+
77
+ // Check for version.json
78
+ const versionFile = path.join(kiroDir, 'version.json');
79
+ if (!await fs.pathExists(versionFile)) {
80
+ console.warn('Warning: version.json not found. Consider running kse adoption.');
81
+ }
82
+
83
+ // Check for specs directory
84
+ const specsDir = path.join(kiroDir, 'specs');
85
+ if (!await fs.pathExists(specsDir)) {
86
+ await fs.ensureDir(specsDir);
87
+ }
88
+
89
+ // Check for steering directory
90
+ const steeringDir = path.join(kiroDir, 'steering');
91
+ if (!await fs.pathExists(steeringDir)) {
92
+ console.warn('Warning: steering directory not found.');
93
+ }
94
+
95
+ await this.progress.logAction('core-compliance-verified');
96
+ }
97
+
98
+ /**
99
+ * Start autonomous execution
100
+ */
101
+ async start() {
102
+ if (this.isRunning) {
103
+ throw new Error('Engine is already running');
104
+ }
105
+
106
+ this.isRunning = true;
107
+ this.isPaused = false;
108
+
109
+ this.state.status.isRunning = true;
110
+ this.state.status.isPaused = false;
111
+ await this.stateManager.saveState(this.state);
112
+
113
+ await this.progress.logAction('engine-started');
114
+ }
115
+
116
+ /**
117
+ * Pause execution
118
+ */
119
+ async pause() {
120
+ this.isPaused = true;
121
+
122
+ this.state.status.isPaused = true;
123
+ await this.stateManager.saveState(this.state);
124
+
125
+ await this.progress.logAction('engine-paused');
126
+ }
127
+
128
+ /**
129
+ * Resume execution
130
+ */
131
+ async resume() {
132
+ if (!this.isPaused) {
133
+ throw new Error('Engine is not paused');
134
+ }
135
+
136
+ this.isPaused = false;
137
+
138
+ this.state.status.isPaused = false;
139
+ await this.stateManager.saveState(this.state);
140
+
141
+ await this.progress.logAction('engine-resumed');
142
+ }
143
+
144
+ /**
145
+ * Stop execution
146
+ */
147
+ async stop() {
148
+ this.isRunning = false;
149
+ this.isPaused = false;
150
+
151
+ this.state.status.isRunning = false;
152
+ this.state.status.isPaused = false;
153
+ await this.stateManager.saveState(this.state);
154
+
155
+ await this.progress.logAction('engine-stopped');
156
+ }
157
+
158
+ /**
159
+ * Execute task queue
160
+ */
161
+ async executeTaskQueue() {
162
+ const tasksFile = path.join(process.cwd(), '.kiro', 'specs', this.specName, 'tasks.md');
163
+ await this.taskQueue.loadTasks(tasksFile);
164
+
165
+ const queueStatus = this.taskQueue.getQueueStatus();
166
+ this.progress.updateTaskCounts(queueStatus.completed, queueStatus.total);
167
+
168
+ await this.progress.updateProgress('implementation', 0);
169
+
170
+ while (this.taskQueue.hasRemainingTasks() && this.isRunning && !this.isPaused) {
171
+ const task = this.taskQueue.getNextTask();
172
+
173
+ if (!task) {
174
+ // No ready tasks, check if blocked
175
+ const blocked = this.taskQueue.getBlockedTasks();
176
+ if (blocked.length > 0) {
177
+ await this.progress.logAction('tasks-blocked', { count: blocked.length });
178
+ break;
179
+ }
180
+ break;
181
+ }
182
+
183
+ await this.executeTask(task);
184
+
185
+ // Update progress
186
+ const status = this.taskQueue.getQueueStatus();
187
+ const progress = (status.completed / status.total) * 100;
188
+ await this.progress.updateProgress('implementation', progress);
189
+ this.progress.updateTaskCounts(status.completed, status.total);
190
+ }
191
+
192
+ return this.progress.getExecutionLog();
193
+ }
194
+
195
+ /**
196
+ * Execute single task
197
+ * @param {Object} task - Task to execute
198
+ */
199
+ async executeTask(task) {
200
+ this.currentTask = task.id;
201
+ this.progress.setCurrentTask(task.id);
202
+
203
+ await this.progress.logAction('task-started', { taskId: task.id, title: task.title });
204
+
205
+ try {
206
+ // Check safety boundaries before execution
207
+ const safetyCheck = await this.safety.checkOperation('task-execution', {
208
+ taskId: task.id,
209
+ taskTitle: task.title
210
+ });
211
+
212
+ if (!safetyCheck.allowed) {
213
+ if (safetyCheck.requiresConfirmation) {
214
+ const confirmed = await this.safety.requestUserConfirmation(safetyCheck);
215
+ if (!confirmed) {
216
+ await this.progress.logAction('task-blocked-by-safety', {
217
+ taskId: task.id,
218
+ reason: safetyCheck.reason
219
+ });
220
+ this.taskQueue.markTaskFailed(task.id, new Error(safetyCheck.reason));
221
+ return;
222
+ }
223
+ } else {
224
+ await this.progress.logAction('task-blocked-by-safety', {
225
+ taskId: task.id,
226
+ reason: safetyCheck.reason
227
+ });
228
+ this.taskQueue.markTaskFailed(task.id, new Error(safetyCheck.reason));
229
+ return;
230
+ }
231
+ }
232
+
233
+ // Log operation
234
+ this.safety.logOperation('task-execution', { taskId: task.id }, true);
235
+
236
+ // Mark task as in progress
237
+ task.status = 'in-progress';
238
+
239
+ // Simulate task execution (actual implementation would execute real task)
240
+ // For MVP, we just mark as complete
241
+ await new Promise(resolve => setTimeout(resolve, 100));
242
+
243
+ // Mark task as complete
244
+ this.taskQueue.markTaskComplete(task.id);
245
+
246
+ await this.progress.logAction('task-completed', { taskId: task.id });
247
+
248
+ } catch (error) {
249
+ await this.handleTaskError(task, error);
250
+ }
251
+ }
252
+
253
+ /**
254
+ * Handle task error
255
+ * @param {Object} task - Task that failed
256
+ * @param {Error} error - Error object
257
+ */
258
+ async handleTaskError(task, error) {
259
+ await this.progress.logError(error, { taskId: task.id });
260
+
261
+ // Attempt recovery
262
+ const recovery = await this.errorRecovery.attemptRecovery(error, { task });
263
+
264
+ if (recovery.success) {
265
+ await this.progress.logAction('error-recovered', {
266
+ taskId: task.id,
267
+ strategy: recovery.strategy
268
+ });
269
+
270
+ // Retry task
271
+ await this.executeTask(task);
272
+ } else {
273
+ // Mark task as failed
274
+ this.taskQueue.markTaskFailed(task.id, error);
275
+
276
+ await this.progress.logError(error, {
277
+ taskId: task.id,
278
+ success: false,
279
+ attemptNumber: recovery.attemptNumber
280
+ });
281
+
282
+ if (recovery.requiresUserIntervention) {
283
+ await this.pause();
284
+ }
285
+ }
286
+ }
287
+
288
+ /**
289
+ * Create checkpoint
290
+ * @param {string} type - Checkpoint type
291
+ * @param {Object} data - Checkpoint data
292
+ */
293
+ async createCheckpoint(type, data = {}) {
294
+ const checkpoint = await this.checkpoints.createCheckpoint(type, {
295
+ ...data,
296
+ phase: this.state.status.phase,
297
+ state: this.state
298
+ });
299
+
300
+ this.state.checkpoints.latest = checkpoint.id;
301
+ this.state.checkpoints.history.push(checkpoint.id);
302
+ await this.stateManager.saveState(this.state);
303
+
304
+ return checkpoint;
305
+ }
306
+
307
+ /**
308
+ * Wait for user approval at checkpoint
309
+ * @param {Object} checkpoint - Checkpoint object
310
+ */
311
+ async waitForUserApproval(checkpoint) {
312
+ if (!checkpoint.requiresUserApproval) {
313
+ return true;
314
+ }
315
+
316
+ await this.pause();
317
+ return await this.checkpoints.waitForUserInput(checkpoint);
318
+ }
319
+
320
+ /**
321
+ * Skip checkpoint
322
+ * @param {Object} checkpoint - Checkpoint object
323
+ */
324
+ async skipCheckpoint(checkpoint) {
325
+ await this.progress.logAction('checkpoint-skipped', {
326
+ checkpointId: checkpoint.id,
327
+ type: checkpoint.type
328
+ });
329
+ }
330
+
331
+ /**
332
+ * Save current state
333
+ */
334
+ async saveState() {
335
+ this.state.status.lastUpdated = new Date().toISOString();
336
+ await this.stateManager.saveState(this.state);
337
+ }
338
+
339
+ /**
340
+ * Load saved state
341
+ */
342
+ async loadState() {
343
+ const state = await this.stateManager.loadState();
344
+ if (state) {
345
+ this.state = state;
346
+ }
347
+ return state;
348
+ }
349
+
350
+ /**
351
+ * Create Spec autonomously from description
352
+ * @param {string} featureDescription - Feature description
353
+ * @returns {Object} - Creation result
354
+ */
355
+ async createSpecAutonomously(featureDescription) {
356
+ await this.progress.logAction('spec-creation-started', { description: featureDescription });
357
+
358
+ const result = {
359
+ requirementsCreated: false,
360
+ designCreated: false,
361
+ tasksCreated: false,
362
+ userConfirmationsRequested: 0
363
+ };
364
+
365
+ try {
366
+ // Generate requirements
367
+ await this.generateRequirements(featureDescription);
368
+ result.requirementsCreated = true;
369
+
370
+ // Generate design
371
+ await this.generateDesign(featureDescription);
372
+ result.designCreated = true;
373
+
374
+ // Generate tasks
375
+ await this.generateTasks(featureDescription);
376
+ result.tasksCreated = true;
377
+
378
+ await this.progress.logAction('spec-creation-completed');
379
+
380
+ } catch (error) {
381
+ await this.progress.logError(error, { phase: 'spec-creation' });
382
+ throw error;
383
+ }
384
+
385
+ return result;
386
+ }
387
+
388
+ /**
389
+ * Generate requirements document
390
+ * @param {string} featureDescription - Feature description
391
+ */
392
+ async generateRequirements(featureDescription) {
393
+ await this.progress.updateProgress('requirements', 0);
394
+
395
+ // Check safety for file write
396
+ const reqPath = path.join(process.cwd(), '.kiro', 'specs', this.specName, 'requirements.md');
397
+ const safetyCheck = await this.safety.checkOperation('file-write', { filePath: reqPath });
398
+
399
+ if (!safetyCheck.allowed) {
400
+ throw new Error(`Safety check failed: ${safetyCheck.reason}`);
401
+ }
402
+
403
+ // Simplified: In real implementation, this would use AI to generate requirements
404
+ const requirements = `# Requirements: ${featureDescription}\n\n## User Stories\n\nTBD\n`;
405
+
406
+ const fs = require('fs-extra');
407
+ await fs.writeFile(reqPath, requirements, 'utf-8');
408
+
409
+ this.safety.logOperation('file-write', { filePath: reqPath }, true);
410
+
411
+ await this.progress.updateProgress('requirements', 100);
412
+ await this.progress.logAction('requirements-generated');
413
+ }
414
+
415
+ /**
416
+ * Generate design document
417
+ * @param {string} featureDescription - Feature description
418
+ */
419
+ async generateDesign(featureDescription) {
420
+ await this.progress.updateProgress('design', 0);
421
+
422
+ // Check safety for file write
423
+ const designPath = path.join(process.cwd(), '.kiro', 'specs', this.specName, 'design.md');
424
+ const safetyCheck = await this.safety.checkOperation('file-write', { filePath: designPath });
425
+
426
+ if (!safetyCheck.allowed) {
427
+ throw new Error(`Safety check failed: ${safetyCheck.reason}`);
428
+ }
429
+
430
+ // Simplified: In real implementation, this would use AI to generate design
431
+ const design = `# Design: ${featureDescription}\n\n## Architecture\n\nTBD\n`;
432
+
433
+ const fs = require('fs-extra');
434
+ await fs.writeFile(designPath, design, 'utf-8');
435
+
436
+ this.safety.logOperation('file-write', { filePath: designPath }, true);
437
+
438
+ await this.progress.updateProgress('design', 100);
439
+ await this.progress.logAction('design-generated');
440
+ }
441
+
442
+ /**
443
+ * Generate tasks document
444
+ * @param {string} featureDescription - Feature description
445
+ */
446
+ async generateTasks(featureDescription) {
447
+ await this.progress.updateProgress('tasks', 0);
448
+
449
+ // Check safety for file write
450
+ const tasksPath = path.join(process.cwd(), '.kiro', 'specs', this.specName, 'tasks.md');
451
+ const safetyCheck = await this.safety.checkOperation('file-write', { filePath: tasksPath });
452
+
453
+ if (!safetyCheck.allowed) {
454
+ throw new Error(`Safety check failed: ${safetyCheck.reason}`);
455
+ }
456
+
457
+ // Simplified: In real implementation, this would use AI to generate tasks
458
+ const tasks = `# Tasks: ${featureDescription}\n\n- [ ] 1. Implement feature\n`;
459
+
460
+ const fs = require('fs-extra');
461
+ await fs.writeFile(tasksPath, tasks, 'utf-8');
462
+
463
+ this.safety.logOperation('file-write', { filePath: tasksPath }, true);
464
+
465
+ await this.progress.updateProgress('tasks', 100);
466
+ await this.progress.logAction('tasks-generated');
467
+ }
468
+
469
+ /**
470
+ * Get current status
471
+ * @returns {Object} - Status object
472
+ */
473
+ getStatus() {
474
+ return {
475
+ specName: this.specName,
476
+ isRunning: this.isRunning,
477
+ isPaused: this.isPaused,
478
+ currentTask: this.currentTask,
479
+ progress: this.progress.getCurrentStatus(),
480
+ queueStatus: this.taskQueue.getQueueStatus()
481
+ };
482
+ }
483
+ }
484
+
485
+ module.exports = AutonomousEngine;