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,534 @@
1
+ /**
2
+ * Progress Reporter
3
+ *
4
+ * Provides real-time progress reporting for adoption process.
5
+ * Displays clear status indicators, file operations, and progress stages.
6
+ *
7
+ * Core Responsibilities:
8
+ * - Display progress stages with status icons
9
+ * - Report file operations in real-time
10
+ * - Show file counts (processed/total)
11
+ * - Maintain clean, readable output
12
+ * - Support verbose mode for detailed logging
13
+ */
14
+
15
+ const chalk = require('chalk');
16
+
17
+ /**
18
+ * Progress stages for adoption process
19
+ */
20
+ const ProgressStage = {
21
+ ANALYZING: 'Analyzing project structure',
22
+ PLANNING: 'Creating adoption plan',
23
+ BACKING_UP: 'Creating backup',
24
+ VALIDATING: 'Validating backup',
25
+ UPDATING: 'Updating files',
26
+ CLEANING: 'Cleaning old files',
27
+ FINALIZING: 'Finalizing adoption',
28
+ COMPLETE: 'Adoption complete'
29
+ };
30
+
31
+ /**
32
+ * Status types for progress updates
33
+ */
34
+ const ProgressStatus = {
35
+ IN_PROGRESS: 'in-progress',
36
+ COMPLETE: 'complete',
37
+ ERROR: 'error',
38
+ SKIP: 'skip',
39
+ WARNING: 'warning'
40
+ };
41
+
42
+ /**
43
+ * Status icons for visual feedback
44
+ */
45
+ const StatusIcons = {
46
+ 'in-progress': '🔄',
47
+ 'complete': '✅',
48
+ 'error': '❌',
49
+ 'skip': '⏭️',
50
+ 'warning': '⚠️',
51
+ 'backup': '📦',
52
+ 'update': '📝',
53
+ 'delete': '🗑️',
54
+ 'create': '➕',
55
+ 'preserve': '💾'
56
+ };
57
+
58
+ /**
59
+ * Progress Reporter for adoption process
60
+ */
61
+ class ProgressReporter {
62
+ constructor(options = {}) {
63
+ this.verbose = options.verbose || false;
64
+ this.quiet = options.quiet || false;
65
+ this.currentStage = null;
66
+ this.stageStartTime = null;
67
+ this.totalStartTime = null;
68
+ this.fileOperations = {
69
+ processed: 0,
70
+ total: 0,
71
+ created: 0,
72
+ updated: 0,
73
+ deleted: 0,
74
+ preserved: 0
75
+ };
76
+ }
77
+
78
+ /**
79
+ * Starts progress reporting
80
+ */
81
+ start() {
82
+ this.totalStartTime = Date.now();
83
+ if (!this.quiet) {
84
+ console.log();
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Reports progress for a stage
90
+ *
91
+ * @param {string} stage - Progress stage (from ProgressStage)
92
+ * @param {string} status - Status (from ProgressStatus)
93
+ * @param {string|Object} details - Optional details or options
94
+ */
95
+ reportStage(stage, status, details = null) {
96
+ if (this.quiet) return;
97
+
98
+ // Track stage timing
99
+ if (status === ProgressStatus.IN_PROGRESS) {
100
+ this.currentStage = stage;
101
+ this.stageStartTime = Date.now();
102
+ }
103
+
104
+ const icon = StatusIcons[status] || '📝';
105
+ let message = `${icon} ${stage}`;
106
+
107
+ // Add details if provided
108
+ if (details) {
109
+ if (typeof details === 'string') {
110
+ message += ` ${details}`;
111
+ } else if (details.message) {
112
+ message += ` ${details.message}`;
113
+ }
114
+ }
115
+
116
+ // Add timing in verbose mode
117
+ if (this.verbose && status === ProgressStatus.COMPLETE && this.stageStartTime) {
118
+ const duration = Date.now() - this.stageStartTime;
119
+ message += chalk.gray(` (${this._formatDuration(duration)})`);
120
+ }
121
+
122
+ // Color based on status
123
+ if (status === ProgressStatus.ERROR) {
124
+ console.log(chalk.red(message));
125
+ } else if (status === ProgressStatus.WARNING) {
126
+ console.log(chalk.yellow(message));
127
+ } else if (status === ProgressStatus.COMPLETE) {
128
+ console.log(chalk.green(message));
129
+ } else if (status === ProgressStatus.SKIP) {
130
+ console.log(chalk.gray(message));
131
+ } else {
132
+ console.log(message);
133
+ }
134
+ }
135
+
136
+ /**
137
+ * Reports file operation progress
138
+ *
139
+ * @param {string} operation - Operation type: 'create', 'update', 'delete', 'preserve'
140
+ * @param {string} filePath - File path
141
+ * @param {Object} options - Additional options
142
+ */
143
+ reportFileOperation(operation, filePath, options = {}) {
144
+ // Update counters (always, even in quiet mode)
145
+ this.fileOperations.processed++;
146
+ if (operation === 'create') this.fileOperations.created++;
147
+ if (operation === 'update') this.fileOperations.updated++;
148
+ if (operation === 'delete') this.fileOperations.deleted++;
149
+ if (operation === 'preserve') this.fileOperations.preserved++;
150
+
151
+ // Skip output in quiet mode
152
+ if (this.quiet) return;
153
+
154
+ // Get icon for operation
155
+ const icon = StatusIcons[operation] || '📝';
156
+
157
+ // Format message
158
+ let message = ` ${icon} ${filePath}`;
159
+
160
+ // Add details if provided
161
+ if (options.details) {
162
+ message += chalk.gray(` (${options.details})`);
163
+ }
164
+
165
+ // Color based on operation
166
+ if (operation === 'create') {
167
+ console.log(chalk.green(message));
168
+ } else if (operation === 'update') {
169
+ console.log(chalk.cyan(message));
170
+ } else if (operation === 'delete') {
171
+ console.log(chalk.red(message));
172
+ } else if (operation === 'preserve') {
173
+ console.log(chalk.gray(message));
174
+ } else {
175
+ console.log(message);
176
+ }
177
+
178
+ // Show progress counter if total is known
179
+ if (this.fileOperations.total > 0 && this.verbose) {
180
+ const percent = Math.round((this.fileOperations.processed / this.fileOperations.total) * 100);
181
+ console.log(chalk.gray(` Progress: ${this.fileOperations.processed}/${this.fileOperations.total} (${percent}%)`));
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Reports batch file operations
187
+ *
188
+ * @param {string} operation - Operation type
189
+ * @param {string[]} filePaths - Array of file paths
190
+ * @param {Object} options - Additional options
191
+ */
192
+ reportBatchOperation(operation, filePaths, options = {}) {
193
+ const icon = StatusIcons[operation] || '📝';
194
+ const count = filePaths.length;
195
+
196
+ // Update counters (always, even in quiet mode)
197
+ this.fileOperations.processed += count;
198
+ if (operation === 'create') this.fileOperations.created += count;
199
+ if (operation === 'update') this.fileOperations.updated += count;
200
+ if (operation === 'delete') this.fileOperations.deleted += count;
201
+ if (operation === 'preserve') this.fileOperations.preserved += count;
202
+
203
+ // Skip output in quiet mode
204
+ if (this.quiet) return;
205
+
206
+ // Show summary
207
+ let message = ` ${icon} ${count} file(s)`;
208
+ if (options.description) {
209
+ message += ` ${options.description}`;
210
+ }
211
+
212
+ console.log(message);
213
+
214
+ // Show individual files in verbose mode
215
+ if (this.verbose && filePaths.length > 0) {
216
+ filePaths.forEach(filePath => {
217
+ console.log(chalk.gray(` - ${filePath}`));
218
+ });
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Sets total file count for progress tracking
224
+ *
225
+ * @param {number} total - Total number of files to process
226
+ */
227
+ setTotalFiles(total) {
228
+ this.fileOperations.total = total;
229
+ }
230
+
231
+ /**
232
+ * Reports backup creation
233
+ *
234
+ * @param {Object} backup - Backup result
235
+ */
236
+ reportBackup(backup) {
237
+ if (this.quiet) return;
238
+
239
+ const icon = StatusIcons.backup;
240
+ console.log(`${icon} Backup created: ${chalk.cyan(backup.id)}`);
241
+
242
+ if (this.verbose) {
243
+ console.log(chalk.gray(` Location: ${backup.location}`));
244
+ console.log(chalk.gray(` Files: ${backup.filesCount}`));
245
+ console.log(chalk.gray(` Size: ${this._formatSize(backup.totalSize)}`));
246
+ }
247
+ }
248
+
249
+ /**
250
+ * Reports validation result
251
+ *
252
+ * @param {Object} validation - Validation result
253
+ */
254
+ reportValidation(validation) {
255
+ if (this.quiet) return;
256
+
257
+ if (validation.success) {
258
+ const message = `✅ Validation complete: ${validation.filesVerified} file(s) verified`;
259
+ console.log(chalk.green(message));
260
+ } else {
261
+ const message = `❌ Validation failed: ${validation.error}`;
262
+ console.log(chalk.red(message));
263
+ }
264
+ }
265
+
266
+ /**
267
+ * Reports warning message
268
+ *
269
+ * @param {string} message - Warning message
270
+ */
271
+ reportWarning(message) {
272
+ if (this.quiet) return;
273
+ console.log(chalk.yellow(`⚠️ ${message}`));
274
+ }
275
+
276
+ /**
277
+ * Reports error message
278
+ *
279
+ * @param {string} message - Error message
280
+ */
281
+ reportError(message) {
282
+ if (this.quiet) return;
283
+ console.log(chalk.red(`❌ ${message}`));
284
+ }
285
+
286
+ /**
287
+ * Reports informational message
288
+ *
289
+ * @param {string} message - Info message
290
+ */
291
+ reportInfo(message) {
292
+ if (this.quiet) return;
293
+ console.log(chalk.blue(`ℹ️ ${message}`));
294
+ }
295
+
296
+ /**
297
+ * Reports success message
298
+ *
299
+ * @param {string} message - Success message
300
+ */
301
+ reportSuccess(message) {
302
+ if (this.quiet) return;
303
+ console.log(chalk.green(`✅ ${message}`));
304
+ }
305
+
306
+ /**
307
+ * Displays adoption plan
308
+ *
309
+ * @param {Object} plan - Adoption plan
310
+ */
311
+ displayPlan(plan) {
312
+ if (this.quiet) return;
313
+
314
+ console.log();
315
+ console.log(chalk.blue('📋 Adoption Plan:'));
316
+ console.log(` Mode: ${chalk.cyan(this._getModeDisplayName(plan.mode))}`);
317
+ console.log(' Actions:');
318
+
319
+ if (plan.requiresBackup) {
320
+ console.log(' - Backup existing files → .kiro/backups/adopt-{timestamp}/');
321
+ }
322
+
323
+ if (plan.changes.created.length > 0) {
324
+ console.log(` - Create ${plan.changes.created.length} new file(s)`);
325
+ }
326
+
327
+ if (plan.changes.updated.length > 0) {
328
+ console.log(` - Update ${plan.changes.updated.length} template file(s)`);
329
+ }
330
+
331
+ if (plan.changes.preserved.length > 0) {
332
+ console.log(` - Preserve ${plan.changes.preserved.length} user file(s)`);
333
+ }
334
+
335
+ console.log(' - Ensure environment consistency');
336
+ console.log();
337
+ }
338
+
339
+ /**
340
+ * Displays final summary
341
+ *
342
+ * @param {Object} result - Orchestration result
343
+ */
344
+ displaySummary(result) {
345
+ if (this.quiet) return;
346
+
347
+ console.log();
348
+ console.log(chalk.green('✅ Adoption completed successfully!'));
349
+ console.log();
350
+
351
+ console.log(chalk.blue('📊 Summary:'));
352
+ console.log(` Mode: ${this._getModeDisplayName(result.mode)}`);
353
+
354
+ if (result.backup) {
355
+ console.log(` Backup: ${result.backup.id}`);
356
+ }
357
+
358
+ // Show operation counts
359
+ const counts = [];
360
+ if (this.fileOperations.created > 0) {
361
+ counts.push(`${this.fileOperations.created} created`);
362
+ }
363
+ if (this.fileOperations.updated > 0) {
364
+ counts.push(`${this.fileOperations.updated} updated`);
365
+ }
366
+ if (this.fileOperations.deleted > 0) {
367
+ counts.push(`${this.fileOperations.deleted} deleted`);
368
+ }
369
+ if (this.fileOperations.preserved > 0) {
370
+ counts.push(`${this.fileOperations.preserved} preserved`);
371
+ }
372
+
373
+ if (counts.length > 0) {
374
+ console.log(` Files: ${counts.join(', ')}`);
375
+ }
376
+
377
+ // Show timing in verbose mode
378
+ if (this.verbose && this.totalStartTime) {
379
+ const totalDuration = Date.now() - this.totalStartTime;
380
+ console.log(chalk.gray(` Duration: ${this._formatDuration(totalDuration)}`));
381
+ }
382
+
383
+ console.log();
384
+
385
+ // Show detailed file lists
386
+ if (result.changes.updated.length > 0) {
387
+ console.log(chalk.blue('Updated files:'));
388
+ result.changes.updated.forEach(file => {
389
+ console.log(chalk.green(` ✅ ${file}`));
390
+ });
391
+ console.log();
392
+ }
393
+
394
+ if (result.changes.created.length > 0 && this.verbose) {
395
+ console.log(chalk.blue('Created files:'));
396
+ result.changes.created.forEach(file => {
397
+ console.log(chalk.green(` ➕ ${file}`));
398
+ });
399
+ console.log();
400
+ }
401
+
402
+ if (result.changes.preserved.length > 0) {
403
+ console.log(chalk.gray('Preserved files:'));
404
+ result.changes.preserved.forEach(file => {
405
+ console.log(chalk.gray(` ⏭️ ${file}`));
406
+ });
407
+ console.log();
408
+ }
409
+
410
+ // Show backup info
411
+ if (result.backup) {
412
+ console.log(chalk.blue('💡 Your original files are safely backed up.'));
413
+ console.log(chalk.gray(` To restore: ${chalk.cyan(`kse rollback ${result.backup.id}`)}`));
414
+ console.log();
415
+ }
416
+
417
+ // Show warnings
418
+ if (result.warnings && result.warnings.length > 0) {
419
+ console.log(chalk.yellow('⚠️ Warnings:'));
420
+ result.warnings.forEach(warning => {
421
+ console.log(chalk.yellow(` ${warning}`));
422
+ });
423
+ console.log();
424
+ }
425
+ }
426
+
427
+ /**
428
+ * Displays error summary
429
+ *
430
+ * @param {Object} result - Orchestration result with errors
431
+ */
432
+ displayErrorSummary(result) {
433
+ if (this.quiet) return;
434
+
435
+ console.log();
436
+ console.log(chalk.red('❌ Adoption failed'));
437
+ console.log();
438
+
439
+ if (result.errors && result.errors.length > 0) {
440
+ result.errors.forEach(error => {
441
+ console.log(chalk.red(` ${error}`));
442
+ });
443
+ console.log();
444
+ }
445
+
446
+ if (result.backup) {
447
+ console.log(chalk.blue('📦 Backup available:'), result.backup.id);
448
+ console.log(chalk.gray(' Run'), chalk.cyan('kse rollback'), chalk.gray('to restore'));
449
+ console.log();
450
+ }
451
+ }
452
+
453
+ /**
454
+ * Ends progress reporting
455
+ */
456
+ end() {
457
+ if (this.quiet) return;
458
+
459
+ if (this.verbose && this.totalStartTime) {
460
+ const totalDuration = Date.now() - this.totalStartTime;
461
+ console.log();
462
+ console.log(chalk.gray(`Total time: ${this._formatDuration(totalDuration)}`));
463
+ }
464
+ }
465
+
466
+ /**
467
+ * Formats duration in human-readable format
468
+ *
469
+ * @param {number} ms - Duration in milliseconds
470
+ * @returns {string}
471
+ * @private
472
+ */
473
+ _formatDuration(ms) {
474
+ if (ms < 1000) {
475
+ return `${ms}ms`;
476
+ } else if (ms < 60000) {
477
+ return `${(ms / 1000).toFixed(1)}s`;
478
+ } else {
479
+ const minutes = Math.floor(ms / 60000);
480
+ const seconds = Math.floor((ms % 60000) / 1000);
481
+ return `${minutes}m ${seconds}s`;
482
+ }
483
+ }
484
+
485
+ /**
486
+ * Formats file size in human-readable format
487
+ *
488
+ * @param {number} bytes - Size in bytes
489
+ * @returns {string}
490
+ * @private
491
+ */
492
+ _formatSize(bytes) {
493
+ if (bytes < 1024) {
494
+ return `${bytes} B`;
495
+ } else if (bytes < 1024 * 1024) {
496
+ return `${(bytes / 1024).toFixed(1)} KB`;
497
+ } else {
498
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
499
+ }
500
+ }
501
+
502
+ /**
503
+ * Gets display name for adoption mode
504
+ *
505
+ * @param {string} mode - Adoption mode
506
+ * @returns {string}
507
+ * @private
508
+ */
509
+ _getModeDisplayName(mode) {
510
+ const names = {
511
+ 'fresh': 'Fresh Adoption',
512
+ 'smart-adopt': 'Smart Adoption',
513
+ 'smart-update': 'Smart Update',
514
+ 'skip': 'Already Up-to-Date',
515
+ 'warning': 'Version Warning'
516
+ };
517
+ return names[mode] || mode;
518
+ }
519
+
520
+ /**
521
+ * Creates a new line for spacing
522
+ */
523
+ newLine() {
524
+ if (!this.quiet) {
525
+ console.log();
526
+ }
527
+ }
528
+ }
529
+
530
+ // Export class and constants
531
+ module.exports = ProgressReporter;
532
+ module.exports.ProgressStage = ProgressStage;
533
+ module.exports.ProgressStatus = ProgressStatus;
534
+ module.exports.StatusIcons = StatusIcons;