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,28 @@
1
+ apiVersion: kse.scene/v0.2
2
+ kind: scene
3
+ metadata:
4
+ obj_id: scene.template.erp-order-query
5
+ obj_version: 0.2.0
6
+ title: ERP Order Query Template
7
+ spec:
8
+ domain: erp
9
+ intent:
10
+ goal: Query order detail and return normalized response
11
+ model_scope:
12
+ read:
13
+ - moqui.OrderHeader.orderId
14
+ - moqui.OrderHeader.statusId
15
+ write: []
16
+ capability_contract:
17
+ bindings:
18
+ - type: query
19
+ ref: spec.erp.order-query-service
20
+ timeout_ms: 2000
21
+ retry: 0
22
+ governance_contract:
23
+ risk_level: low
24
+ approval:
25
+ required: false
26
+ idempotency:
27
+ required: true
28
+ key: orderId
@@ -0,0 +1,34 @@
1
+ apiVersion: kse.scene/v0.2
2
+ kind: scene
3
+ metadata:
4
+ obj_id: scene.template.hybrid-pick-shadow
5
+ obj_version: 0.2.0
6
+ title: Hybrid Pick Shadow Template
7
+ spec:
8
+ domain: hybrid
9
+ intent:
10
+ goal: Simulate ERP reserve and robot mission dispatch in dry_run
11
+ model_scope:
12
+ read:
13
+ - moqui.OrderHeader.orderId
14
+ write:
15
+ - moqui.OrderItem.statusId
16
+ capability_contract:
17
+ bindings:
18
+ - type: service
19
+ ref: spec.erp.reserve-pick-items
20
+ side_effect: true
21
+ timeout_ms: 3000
22
+ retry: 0
23
+ - type: adapter
24
+ ref: spec.robot.dispatch-pick-mission
25
+ side_effect: true
26
+ timeout_ms: 6000
27
+ retry: 0
28
+ governance_contract:
29
+ risk_level: high
30
+ approval:
31
+ required: true
32
+ idempotency:
33
+ required: true
34
+ key: orderId
@@ -0,0 +1,48 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+
4
+ class ContextCollector {
5
+ constructor(projectPath = process.cwd()) {
6
+ this.projectPath = projectPath;
7
+ }
8
+
9
+ async collect() {
10
+ const kiroDir = path.join(this.projectPath, '.kiro');
11
+ const specsDir = path.join(kiroDir, 'specs');
12
+ const hasKiro = await fs.pathExists(kiroDir);
13
+ const existingSpecs = await this._listSpecs(specsDir);
14
+
15
+ return {
16
+ projectPath: this.projectPath,
17
+ hasKiro,
18
+ specsDir,
19
+ existingSpecs,
20
+ totalSpecs: existingSpecs.length,
21
+ preferredLanguage: this._detectLanguagePreference()
22
+ };
23
+ }
24
+
25
+ async _listSpecs(specsDir) {
26
+ if (!await fs.pathExists(specsDir)) {
27
+ return [];
28
+ }
29
+
30
+ const entries = await fs.readdir(specsDir, { withFileTypes: true });
31
+ return entries
32
+ .filter(entry => entry.isDirectory())
33
+ .map(entry => entry.name)
34
+ .sort((left, right) => left.localeCompare(right));
35
+ }
36
+
37
+ _detectLanguagePreference() {
38
+ const lang = `${process.env.KSE_LANG || process.env.LANG || ''}`.toLowerCase();
39
+ if (lang.includes('zh')) {
40
+ return 'zh';
41
+ }
42
+
43
+ return 'en';
44
+ }
45
+ }
46
+
47
+ module.exports = { ContextCollector };
48
+
@@ -0,0 +1,158 @@
1
+ class DraftGenerator {
2
+ generate(input = {}) {
3
+ const specName = input.specName;
4
+ const profile = input.profile || 'general';
5
+ const template = input.template || 'default';
6
+ const context = input.context || {};
7
+ const answers = input.answers || {};
8
+
9
+ const requirementIds = ['Requirement 1', 'Requirement 2', 'Requirement 3'];
10
+ const designIds = ['Design 1', 'Design 2', 'Design 3'];
11
+
12
+ const requirements = this._buildRequirements(specName, profile, template, answers);
13
+ const design = this._buildDesign(specName, profile, template, requirementIds, designIds, answers);
14
+ const tasks = this._buildTasks(requirementIds, designIds);
15
+
16
+ return {
17
+ requirements,
18
+ design,
19
+ tasks,
20
+ metadata: {
21
+ profile,
22
+ template,
23
+ projectPath: context.projectPath,
24
+ preferredLanguage: context.preferredLanguage || 'en',
25
+ existingSpecCount: context.totalSpecs || 0,
26
+ mapping: {
27
+ requirements: requirementIds,
28
+ design: designIds,
29
+ taskCount: 6
30
+ }
31
+ }
32
+ };
33
+ }
34
+
35
+ _buildRequirements(specName, profile, template, answers) {
36
+ return `# Requirements Document
37
+
38
+ ## Introduction
39
+
40
+ This Spec bootstrap draft was generated for ${specName} with profile ${profile} and template hint ${template}.
41
+
42
+ ## Context Snapshot
43
+
44
+ - Problem statement: ${answers.problemStatement}
45
+ - Primary flow: ${answers.primaryFlow}
46
+ - Verification plan: ${answers.verificationPlan}
47
+
48
+ ## Requirements
49
+
50
+ ### Requirement 1: Establish command entry
51
+
52
+ **User Story:** As a user, I want one command to initialize a complete Spec draft.
53
+
54
+ #### Acceptance Criteria
55
+
56
+ 1. THE CLI SHALL expose an entry command for bootstrap generation
57
+ 2. THE command SHALL support explicit naming and non-interactive execution
58
+
59
+ ### Requirement 2: Collect minimum context
60
+
61
+ **User Story:** As an implementer, I want the wizard to use project context with a controlled question set.
62
+
63
+ #### Acceptance Criteria
64
+
65
+ 1. THE SYSTEM SHALL collect project metadata and existing Spec inventory
66
+ 2. THE wizard SHALL keep the questionnaire small and default-driven
67
+ 3. WHEN non-interactive mode is enabled THEN generation SHALL rely on arguments and defaults only
68
+
69
+ ### Requirement 3: Generate traceable draft docs
70
+
71
+ **User Story:** As a team member, I want requirements/design/tasks to stay mapped and auditable.
72
+
73
+ #### Acceptance Criteria
74
+
75
+ 1. THE SYSTEM SHALL output requirements.md, design.md, and tasks.md together
76
+ 2. THE output SHALL contain requirement-design-task mapping references
77
+ 3. THE output SHALL capture generation trace information for governance and audit
78
+ `;
79
+ }
80
+
81
+ _buildDesign(specName, profile, template, requirementIds, designIds, answers) {
82
+ return `# Design Document
83
+
84
+ ## Overview
85
+
86
+ This design document defines the bootstrap generation flow for ${specName}.
87
+
88
+ - Profile: ${profile}
89
+ - Template hint: ${template}
90
+
91
+ ## Requirement Mapping
92
+
93
+ | Requirement | Design Component | Notes |
94
+ | --- | --- | --- |
95
+ | ${requirementIds[0]} | ${designIds[0]} | CLI entry and argument handling |
96
+ | ${requirementIds[1]} | ${designIds[1]} | Context collector and questionnaire |
97
+ | ${requirementIds[2]} | ${designIds[2]} | Draft generation and trace output |
98
+
99
+ ## Design Components
100
+
101
+ ### Design 1: Bootstrap command orchestration
102
+
103
+ - Parse name/template/profile/non-interactive/dry-run/json options
104
+ - Handle write mode and dry-run preview mode consistently
105
+
106
+ ### Design 2: Context and prompt pipeline
107
+
108
+ - Collect project metadata and existing Spec list
109
+ - Keep questionnaire minimal with defaults
110
+ - Input guidance: ${answers.primaryFlow}
111
+
112
+ ### Design 3: Draft and trace emitter
113
+
114
+ - Generate linked requirements/design/tasks content
115
+ - Emit trace metadata (template, profile, key parameters)
116
+ - Validation guidance: ${answers.verificationPlan}
117
+ `;
118
+ }
119
+
120
+ _buildTasks(requirementIds, designIds) {
121
+ return `# Implementation Tasks
122
+
123
+ ## Task List
124
+
125
+ - [ ] 1. Implement command entry and option parsing
126
+ - **Requirement**: ${requirementIds[0]}
127
+ - **Design**: ${designIds[0]}
128
+ - **Validation**: Acceptance Criteria 1.1, 1.2
129
+
130
+ - [ ] 2. Implement dry-run and write-mode behavior
131
+ - **Requirement**: ${requirementIds[0]}
132
+ - **Design**: ${designIds[0]}
133
+ - **Validation**: Acceptance Criteria 1.1
134
+
135
+ - [ ] 3. Implement context collector
136
+ - **Requirement**: ${requirementIds[1]}
137
+ - **Design**: ${designIds[1]}
138
+ - **Validation**: Acceptance Criteria 2.1
139
+
140
+ - [ ] 4. Implement minimal questionnaire with defaults
141
+ - **Requirement**: ${requirementIds[1]}
142
+ - **Design**: ${designIds[1]}
143
+ - **Validation**: Acceptance Criteria 2.2, 2.3
144
+
145
+ - [ ] 5. Implement linked document generation
146
+ - **Requirement**: ${requirementIds[2]}
147
+ - **Design**: ${designIds[2]}
148
+ - **Validation**: Acceptance Criteria 3.1, 3.2
149
+
150
+ - [ ] 6. Implement trace output and JSON mode
151
+ - **Requirement**: ${requirementIds[2]}
152
+ - **Design**: ${designIds[2]}
153
+ - **Validation**: Acceptance Criteria 3.3
154
+ `;
155
+ }
156
+ }
157
+
158
+ module.exports = { DraftGenerator };
@@ -0,0 +1,70 @@
1
+ const inquirer = require('inquirer');
2
+
3
+ const DEFAULT_ANSWERS = {
4
+ problemStatement: 'Define the feature scope and the expected business outcome.',
5
+ primaryFlow: 'Capture user flow, data flow, and observable outputs.',
6
+ verificationPlan: 'Define verification checks and acceptance coverage.'
7
+ };
8
+
9
+ class QuestionnaireEngine {
10
+ constructor(options = {}) {
11
+ this.maxQuestions = options.maxQuestions || 3;
12
+ this.prompt = options.prompt || inquirer.prompt;
13
+ }
14
+
15
+ async collect(options = {}) {
16
+ const defaults = this._buildDefaults(options);
17
+
18
+ if (options.nonInteractive) {
19
+ return defaults;
20
+ }
21
+
22
+ const questions = [
23
+ {
24
+ type: 'input',
25
+ name: 'specName',
26
+ message: 'Spec name (for example: 112-00-feature-name):',
27
+ default: defaults.specName,
28
+ validate: input => input && input.trim() ? true : 'Spec name is required'
29
+ },
30
+ {
31
+ type: 'input',
32
+ name: 'problemStatement',
33
+ message: 'What problem should this Spec solve?',
34
+ default: defaults.problemStatement
35
+ },
36
+ {
37
+ type: 'input',
38
+ name: 'primaryFlow',
39
+ message: 'What is the primary implementation flow?',
40
+ default: defaults.primaryFlow
41
+ },
42
+ {
43
+ type: 'input',
44
+ name: 'verificationPlan',
45
+ message: 'How should this Spec be validated?',
46
+ default: defaults.verificationPlan
47
+ }
48
+ ].slice(0, this.maxQuestions + 1);
49
+
50
+ const answers = await this.prompt(questions);
51
+ return {
52
+ ...defaults,
53
+ ...answers,
54
+ questionCount: questions.length
55
+ };
56
+ }
57
+
58
+ _buildDefaults(options = {}) {
59
+ return {
60
+ specName: options.specName || '',
61
+ problemStatement: options.problemStatement || DEFAULT_ANSWERS.problemStatement,
62
+ primaryFlow: options.primaryFlow || DEFAULT_ANSWERS.primaryFlow,
63
+ verificationPlan: options.verificationPlan || DEFAULT_ANSWERS.verificationPlan,
64
+ questionCount: 0
65
+ };
66
+ }
67
+ }
68
+
69
+ module.exports = { QuestionnaireEngine, DEFAULT_ANSWERS };
70
+
@@ -0,0 +1,59 @@
1
+ const chalk = require('chalk');
2
+
3
+ class TraceEmitter {
4
+ emit(result, options = {}) {
5
+ if (options.json) {
6
+ console.log(JSON.stringify(result, null, 2));
7
+ return;
8
+ }
9
+
10
+ console.log(chalk.red('🔥') + ' Spec Bootstrap Wizard');
11
+ console.log();
12
+ console.log(`${chalk.gray('Spec:')} ${result.specName}`);
13
+ console.log(`${chalk.gray('Mode:')} ${result.dryRun ? 'dry-run' : 'write'}`);
14
+ console.log(`${chalk.gray('Template:')} ${result.trace.template}`);
15
+ console.log(`${chalk.gray('Profile:')} ${result.trace.profile}`);
16
+ console.log();
17
+
18
+ if (result.dryRun) {
19
+ console.log(chalk.yellow('âš  Dry-run mode: no files were written.'));
20
+ console.log();
21
+ this._printPreview(result.preview || {});
22
+ } else {
23
+ console.log(chalk.green('✅ Draft files generated:'));
24
+ Object.values(result.files || {}).forEach(filePath => {
25
+ console.log(` - ${filePath}`);
26
+ });
27
+ }
28
+
29
+ console.log();
30
+ console.log(chalk.blue('📌 Trace Summary'));
31
+ console.log(` - existing specs: ${result.trace.context.totalSpecs}`);
32
+ console.log(` - preferred language: ${result.trace.context.preferredLanguage}`);
33
+ console.log(` - non-interactive: ${result.trace.parameters.nonInteractive}`);
34
+ }
35
+
36
+ _printPreview(preview) {
37
+ const sections = ['requirements', 'design', 'tasks'];
38
+
39
+ sections.forEach(section => {
40
+ const content = preview[section];
41
+ if (!content) {
42
+ return;
43
+ }
44
+
45
+ const lines = content
46
+ .split(/\r?\n/)
47
+ .filter(Boolean)
48
+ .slice(0, 5);
49
+
50
+ console.log(chalk.cyan(`--- ${section}.md preview ---`));
51
+ lines.forEach(line => console.log(` ${line}`));
52
+ console.log(' ...');
53
+ console.log();
54
+ });
55
+ }
56
+ }
57
+
58
+ module.exports = { TraceEmitter };
59
+
@@ -0,0 +1,93 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const chalk = require('chalk');
4
+
5
+ /**
6
+ * Parse --spec / --specs options into a de-duplicated list.
7
+ *
8
+ * @param {object} options
9
+ * @returns {string[]}
10
+ */
11
+ function parseSpecTargets(options = {}) {
12
+ const fromSpec = (options.spec || '').trim();
13
+ const fromSpecs = `${options.specs || ''}`
14
+ .split(',')
15
+ .map(item => item.trim())
16
+ .filter(Boolean);
17
+
18
+ const merged = [];
19
+ if (fromSpec) {
20
+ merged.push(fromSpec);
21
+ }
22
+ merged.push(...fromSpecs);
23
+
24
+ return Array.from(new Set(merged));
25
+ }
26
+
27
+ /**
28
+ * Execute multi-spec work through orchestrate mode.
29
+ *
30
+ * @param {object} options
31
+ * @param {string[]} options.specTargets
32
+ * @param {string} options.projectPath
33
+ * @param {object} options.commandOptions
34
+ * @param {Function} options.runOrchestration
35
+ * @param {string} options.commandLabel
36
+ * @param {string} options.nextActionLabel
37
+ * @returns {Promise<object>}
38
+ */
39
+ async function runMultiSpecViaOrchestrate(options = {}) {
40
+ const {
41
+ specTargets,
42
+ projectPath,
43
+ commandOptions,
44
+ runOrchestration,
45
+ commandLabel,
46
+ nextActionLabel
47
+ } = options;
48
+
49
+ const orchestrationResult = await runOrchestration({
50
+ specs: specTargets.join(','),
51
+ maxParallel: commandOptions.maxParallel,
52
+ json: false,
53
+ silent: true
54
+ }, {
55
+ workspaceRoot: projectPath
56
+ });
57
+
58
+ const result = {
59
+ mode: 'orchestrate',
60
+ spec_ids: specTargets,
61
+ status: orchestrationResult.status,
62
+ orchestrate_result: orchestrationResult,
63
+ next_actions: [
64
+ nextActionLabel,
65
+ 'Use kse orchestrate status to inspect live orchestration state.'
66
+ ]
67
+ };
68
+
69
+ if (commandOptions.out) {
70
+ const outPath = path.isAbsolute(commandOptions.out)
71
+ ? commandOptions.out
72
+ : path.join(projectPath, commandOptions.out);
73
+ await fs.ensureDir(path.dirname(outPath));
74
+ await fs.writeJson(outPath, result, { spaces: 2 });
75
+ result.output_file = outPath;
76
+ }
77
+
78
+ if (commandOptions.json) {
79
+ console.log(JSON.stringify(result, null, 2));
80
+ } else {
81
+ console.log(chalk.blue('🚀') + ` ${commandLabel} defaulted to orchestrate mode for ${specTargets.length} specs.`);
82
+ console.log(chalk.gray(` Specs: ${specTargets.join(', ')}`));
83
+ console.log(chalk.gray(` Status: ${orchestrationResult.status}`));
84
+ }
85
+
86
+ return result;
87
+ }
88
+
89
+ module.exports = {
90
+ parseSpecTargets,
91
+ runMultiSpecViaOrchestrate
92
+ };
93
+
@@ -0,0 +1,6 @@
1
+ const STAGE_ORDER = ['requirements', 'design', 'tasks', 'gate'];
2
+
3
+ module.exports = {
4
+ STAGE_ORDER
5
+ };
6
+
@@ -0,0 +1,118 @@
1
+ const fs = require('fs-extra');
2
+ const path = require('path');
3
+ const { runSpecBootstrap } = require('../../commands/spec-bootstrap');
4
+ const { runSpecGate } = require('../../commands/spec-gate');
5
+
6
+ function createDefaultStageAdapters(projectPath = process.cwd()) {
7
+ return {
8
+ requirements: async context => {
9
+ const specDir = path.join(projectPath, '.kiro', 'specs', context.specId);
10
+ const requirementsPath = path.join(specDir, 'requirements.md');
11
+
12
+ if (!await fs.pathExists(requirementsPath)) {
13
+ await runSpecBootstrap({
14
+ name: context.specId,
15
+ nonInteractive: true,
16
+ profile: 'pipeline',
17
+ dryRun: false,
18
+ json: false
19
+ }, {
20
+ projectPath
21
+ });
22
+
23
+ return {
24
+ success: true,
25
+ details: {
26
+ action: 'bootstrap-generated'
27
+ }
28
+ };
29
+ }
30
+
31
+ return {
32
+ success: true,
33
+ details: {
34
+ action: 'requirements-existing'
35
+ }
36
+ };
37
+ },
38
+
39
+ design: async context => {
40
+ const designPath = path.join(projectPath, '.kiro', 'specs', context.specId, 'design.md');
41
+ const exists = await fs.pathExists(designPath);
42
+
43
+ if (!exists) {
44
+ await runSpecBootstrap({
45
+ name: context.specId,
46
+ nonInteractive: true,
47
+ profile: 'pipeline',
48
+ dryRun: false,
49
+ json: false
50
+ }, {
51
+ projectPath
52
+ });
53
+ }
54
+
55
+ return {
56
+ success: true,
57
+ warnings: exists ? [] : ['design.md was created from bootstrap defaults'],
58
+ details: {
59
+ action: exists ? 'design-existing' : 'design-generated'
60
+ }
61
+ };
62
+ },
63
+
64
+ tasks: async context => {
65
+ const tasksPath = path.join(projectPath, '.kiro', 'specs', context.specId, 'tasks.md');
66
+ const exists = await fs.pathExists(tasksPath);
67
+
68
+ if (!exists) {
69
+ await runSpecBootstrap({
70
+ name: context.specId,
71
+ nonInteractive: true,
72
+ profile: 'pipeline',
73
+ dryRun: false,
74
+ json: false
75
+ }, {
76
+ projectPath
77
+ });
78
+ }
79
+
80
+ return {
81
+ success: true,
82
+ warnings: exists ? [] : ['tasks.md was created from bootstrap defaults'],
83
+ details: {
84
+ action: exists ? 'tasks-existing' : 'tasks-generated'
85
+ }
86
+ };
87
+ },
88
+
89
+ gate: async context => {
90
+ const gateResult = await runSpecGate({
91
+ spec: context.specId,
92
+ json: false,
93
+ strict: !!context.strict,
94
+ out: context.gateOut,
95
+ silent: true
96
+ }, {
97
+ projectPath
98
+ });
99
+
100
+ const success = gateResult.decision === 'go' || gateResult.decision === 'conditional-go';
101
+
102
+ return {
103
+ success,
104
+ warnings: gateResult.warnings ? gateResult.warnings.map(item => item.message) : [],
105
+ details: {
106
+ decision: gateResult.decision,
107
+ score: gateResult.score,
108
+ failed_checks: gateResult.failed_checks || []
109
+ }
110
+ };
111
+ }
112
+ };
113
+ }
114
+
115
+ module.exports = {
116
+ createDefaultStageAdapters
117
+ };
118
+