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,509 @@
1
+ /**
2
+ * Error Formatter
3
+ *
4
+ * Provides clear, actionable error messages for adoption process.
5
+ * Transforms technical errors into user-friendly messages with solutions.
6
+ *
7
+ * Core Principles:
8
+ * - Clear problem descriptions (non-technical language)
9
+ * - List possible causes
10
+ * - Provide actionable solutions
11
+ * - Include help references
12
+ * - Consistent formatting
13
+ */
14
+
15
+ const chalk = require('chalk');
16
+
17
+ /**
18
+ * Error categories for adoption process
19
+ */
20
+ const ErrorCategory = {
21
+ BACKUP: 'backup',
22
+ PERMISSION: 'permission',
23
+ DISK_SPACE: 'disk_space',
24
+ FILE_SYSTEM: 'file_system',
25
+ VERSION: 'version',
26
+ VALIDATION: 'validation',
27
+ NETWORK: 'network',
28
+ CONFIGURATION: 'configuration',
29
+ UNKNOWN: 'unknown'
30
+ };
31
+
32
+ /**
33
+ * Error Formatter for adoption errors
34
+ */
35
+ class ErrorFormatter {
36
+ /**
37
+ * Formats an error with clear explanation and solutions
38
+ *
39
+ * @param {Error|string} error - Error object or message
40
+ * @param {Object} context - Additional context about the error
41
+ * @param {string} context.operation - Operation that failed (e.g., 'backup', 'file copy')
42
+ * @param {string} context.filePath - File path related to error (if applicable)
43
+ * @param {string} context.category - Error category (optional, will be auto-detected)
44
+ * @returns {string} Formatted error message
45
+ */
46
+ static format(error, context = {}) {
47
+ // Handle null or undefined context
48
+ const ctx = context || {};
49
+
50
+ const errorMessage = error instanceof Error ? error.message : error;
51
+ const category = ctx.category || this._detectCategory(errorMessage, ctx);
52
+
53
+ const template = this._getTemplate(category);
54
+ const formatted = this._applyTemplate(template, errorMessage, ctx);
55
+
56
+ return formatted;
57
+ }
58
+
59
+ /**
60
+ * Detects error category from error message and context
61
+ *
62
+ * @param {string} errorMessage - Error message
63
+ * @param {Object} context - Error context
64
+ * @returns {string} Error category
65
+ * @private
66
+ */
67
+ static _detectCategory(errorMessage, context) {
68
+ const message = errorMessage.toLowerCase();
69
+
70
+ // Backup errors
71
+ if (message.includes('backup') || context.operation === 'backup') {
72
+ return ErrorCategory.BACKUP;
73
+ }
74
+
75
+ // Permission errors
76
+ if (message.includes('permission') || message.includes('eacces') ||
77
+ message.includes('eperm') || message.includes('access denied')) {
78
+ return ErrorCategory.PERMISSION;
79
+ }
80
+
81
+ // Disk space errors
82
+ if (message.includes('enospc') || message.includes('disk') ||
83
+ message.includes('space') || message.includes('quota')) {
84
+ return ErrorCategory.DISK_SPACE;
85
+ }
86
+
87
+ // File system errors
88
+ if (message.includes('enoent') || message.includes('not found') ||
89
+ message.includes('eexist') || message.includes('already exists') ||
90
+ message.includes('file') || message.includes('directory')) {
91
+ return ErrorCategory.FILE_SYSTEM;
92
+ }
93
+
94
+ // Version errors
95
+ if (message.includes('version') || context.operation === 'version') {
96
+ return ErrorCategory.VERSION;
97
+ }
98
+
99
+ // Configuration errors (check before validation to prioritize config)
100
+ if (message.includes('config') || message.includes('setting')) {
101
+ return ErrorCategory.CONFIGURATION;
102
+ }
103
+
104
+ // Validation errors
105
+ if (message.includes('validation') || message.includes('invalid') ||
106
+ message.includes('corrupt')) {
107
+ return ErrorCategory.VALIDATION;
108
+ }
109
+
110
+ // Network errors
111
+ if (message.includes('network') || message.includes('timeout') ||
112
+ message.includes('econnrefused') || message.includes('enotfound')) {
113
+ return ErrorCategory.NETWORK;
114
+ }
115
+
116
+ return ErrorCategory.UNKNOWN;
117
+ }
118
+
119
+ /**
120
+ * Gets error template for category
121
+ *
122
+ * @param {string} category - Error category
123
+ * @returns {ErrorTemplate} Error template
124
+ * @private
125
+ */
126
+ static _getTemplate(category) {
127
+ const templates = {
128
+ [ErrorCategory.BACKUP]: {
129
+ title: 'Backup Creation Failed',
130
+ problem: 'Unable to create backup of existing files before making changes',
131
+ causes: [
132
+ 'Insufficient disk space',
133
+ 'Permission denied for .kiro/backups/ directory',
134
+ 'File system error or corruption',
135
+ 'Another process is accessing the files'
136
+ ],
137
+ solutions: [
138
+ 'Free up disk space (need at least 50MB)',
139
+ 'Check file permissions: Run with appropriate permissions',
140
+ 'Close other programs that might be accessing the files',
141
+ 'Try running the command again',
142
+ 'If problem persists, run: kse doctor'
143
+ ]
144
+ },
145
+
146
+ [ErrorCategory.PERMISSION]: {
147
+ title: 'Permission Denied',
148
+ problem: 'Unable to access or modify files due to insufficient permissions',
149
+ causes: [
150
+ 'Files are owned by another user',
151
+ 'Directory permissions are too restrictive',
152
+ 'Files are read-only',
153
+ 'Running in a protected directory'
154
+ ],
155
+ solutions: [
156
+ 'Check file ownership and permissions',
157
+ 'Run with appropriate permissions if needed',
158
+ 'Make sure you have write access to the project directory',
159
+ 'Check if files are marked as read-only',
160
+ 'Try: chmod -R u+w .kiro/ (on Unix-like systems)'
161
+ ]
162
+ },
163
+
164
+ [ErrorCategory.DISK_SPACE]: {
165
+ title: 'Insufficient Disk Space',
166
+ problem: 'Not enough free disk space to complete the operation',
167
+ causes: [
168
+ 'Disk is full or nearly full',
169
+ 'Disk quota exceeded',
170
+ 'Large backup files taking up space'
171
+ ],
172
+ solutions: [
173
+ 'Free up disk space by deleting unnecessary files',
174
+ 'Clean up old backups: kse backup clean --old',
175
+ 'Move project to a drive with more space',
176
+ 'Check disk usage: df -h (Unix) or dir (Windows)'
177
+ ]
178
+ },
179
+
180
+ [ErrorCategory.FILE_SYSTEM]: {
181
+ title: 'File System Error',
182
+ problem: 'Unable to read or write files',
183
+ causes: [
184
+ 'File or directory not found',
185
+ 'File already exists',
186
+ 'Path is too long',
187
+ 'Invalid file name characters',
188
+ 'File system corruption'
189
+ ],
190
+ solutions: [
191
+ 'Verify the project path is correct',
192
+ 'Check if files exist: ls -la .kiro/ (Unix) or dir .kiro (Windows)',
193
+ 'Ensure file names are valid for your operating system',
194
+ 'Try running file system check/repair tools',
195
+ 'If problem persists, run: kse doctor'
196
+ ]
197
+ },
198
+
199
+ [ErrorCategory.VERSION]: {
200
+ title: 'Version Mismatch',
201
+ problem: 'Project version is incompatible with current kse version',
202
+ causes: [
203
+ 'Project was created with a newer version of kse',
204
+ 'Version information is missing or corrupted',
205
+ 'Incompatible version format'
206
+ ],
207
+ solutions: [
208
+ 'Update kse to the latest version: npm install -g kiro-spec-engine',
209
+ 'Check project version: kse version --project',
210
+ 'If downgrading, use: kse adopt --force (with caution)',
211
+ 'Backup your project before proceeding'
212
+ ]
213
+ },
214
+
215
+ [ErrorCategory.VALIDATION]: {
216
+ title: 'Validation Failed',
217
+ problem: 'Files or configuration failed validation checks',
218
+ causes: [
219
+ 'Corrupted files',
220
+ 'Invalid configuration format',
221
+ 'Missing required files',
222
+ 'Inconsistent project structure'
223
+ ],
224
+ solutions: [
225
+ 'Run project diagnostics: kse doctor',
226
+ 'Check for corrupted files',
227
+ 'Restore from backup if available: kse rollback <backup-id>',
228
+ 'Re-initialize project: kse adopt --force',
229
+ 'Contact support if issue persists'
230
+ ]
231
+ },
232
+
233
+ [ErrorCategory.NETWORK]: {
234
+ title: 'Network Error',
235
+ problem: 'Unable to connect to required services',
236
+ causes: [
237
+ 'No internet connection',
238
+ 'Firewall blocking connection',
239
+ 'Service is temporarily unavailable',
240
+ 'Proxy configuration issues'
241
+ ],
242
+ solutions: [
243
+ 'Check your internet connection',
244
+ 'Verify firewall settings',
245
+ 'Try again in a few minutes',
246
+ 'Check proxy configuration if behind a corporate firewall',
247
+ 'Use offline mode if available'
248
+ ]
249
+ },
250
+
251
+ [ErrorCategory.CONFIGURATION]: {
252
+ title: 'Configuration Error',
253
+ problem: 'Invalid or missing configuration',
254
+ causes: [
255
+ 'Configuration file is missing',
256
+ 'Configuration format is invalid',
257
+ 'Required settings are missing',
258
+ 'Configuration values are out of range'
259
+ ],
260
+ solutions: [
261
+ 'Check configuration file: .kiro/adoption-config.json',
262
+ 'Restore default configuration: kse config reset',
263
+ 'Validate configuration: kse config validate',
264
+ 'Refer to documentation for valid configuration options'
265
+ ]
266
+ },
267
+
268
+ [ErrorCategory.UNKNOWN]: {
269
+ title: 'Unexpected Error',
270
+ problem: 'An unexpected error occurred',
271
+ causes: [
272
+ 'Unknown or rare error condition',
273
+ 'Bug in the software',
274
+ 'Unusual system configuration'
275
+ ],
276
+ solutions: [
277
+ 'Try running the command again',
278
+ 'Run diagnostics: kse doctor',
279
+ 'Check the error details below',
280
+ 'Report this issue if it persists',
281
+ 'Include error details when reporting'
282
+ ]
283
+ }
284
+ };
285
+
286
+ return templates[category] || templates[ErrorCategory.UNKNOWN];
287
+ }
288
+
289
+ /**
290
+ * Applies template to create formatted error message
291
+ *
292
+ * @param {ErrorTemplate} template - Error template
293
+ * @param {string} errorMessage - Original error message
294
+ * @param {Object} context - Error context
295
+ * @returns {string} Formatted error message
296
+ * @private
297
+ */
298
+ static _applyTemplate(template, errorMessage, context) {
299
+ const lines = [];
300
+
301
+ // Header
302
+ lines.push('');
303
+ lines.push(chalk.red('❌ Error: ' + template.title));
304
+ lines.push('');
305
+
306
+ // Problem description
307
+ lines.push(chalk.bold('Problem:'));
308
+ lines.push(' ' + template.problem);
309
+ lines.push('');
310
+
311
+ // Technical details (if verbose or helpful)
312
+ if (context.verbose || this._shouldShowDetails(errorMessage)) {
313
+ lines.push(chalk.gray('Details:'));
314
+ lines.push(chalk.gray(' ' + errorMessage));
315
+ lines.push('');
316
+ }
317
+
318
+ // File path (if applicable)
319
+ if (context.filePath) {
320
+ lines.push(chalk.gray('File:'));
321
+ lines.push(chalk.gray(' ' + context.filePath));
322
+ lines.push('');
323
+ }
324
+
325
+ // Possible causes
326
+ lines.push(chalk.bold('Possible causes:'));
327
+ template.causes.forEach(cause => {
328
+ lines.push(' • ' + cause);
329
+ });
330
+ lines.push('');
331
+
332
+ // Solutions
333
+ lines.push(chalk.bold('Solutions:'));
334
+ template.solutions.forEach((solution, index) => {
335
+ lines.push(` ${index + 1}. ${solution}`);
336
+ });
337
+ lines.push('');
338
+
339
+ // Help reference
340
+ lines.push(chalk.blue('💡 Need help?'));
341
+ lines.push(chalk.blue(' Run: kse doctor'));
342
+ lines.push(chalk.blue(' Docs: https://github.com/kiro-ai/kiro-spec-engine#troubleshooting'));
343
+ lines.push('');
344
+
345
+ return lines.join('\n');
346
+ }
347
+
348
+ /**
349
+ * Determines if technical details should be shown
350
+ *
351
+ * @param {string} errorMessage - Error message
352
+ * @returns {boolean}
353
+ * @private
354
+ */
355
+ static _shouldShowDetails(errorMessage) {
356
+ // Show details if message contains useful technical info
357
+ const usefulPatterns = [
358
+ /ENOENT.*no such file/i,
359
+ /EACCES.*permission denied/i,
360
+ /ENOSPC.*no space/i,
361
+ /at line \d+/i,
362
+ /expected.*but got/i
363
+ ];
364
+
365
+ return usefulPatterns.some(pattern => pattern.test(errorMessage));
366
+ }
367
+
368
+ /**
369
+ * Formats a simple error message (without full template)
370
+ *
371
+ * @param {string} message - Error message
372
+ * @returns {string} Formatted error
373
+ */
374
+ static formatSimple(message) {
375
+ return chalk.red('❌ ' + message);
376
+ }
377
+
378
+ /**
379
+ * Formats a warning message
380
+ *
381
+ * @param {string} message - Warning message
382
+ * @returns {string} Formatted warning
383
+ */
384
+ static formatWarning(message) {
385
+ return chalk.yellow('⚠️ ' + message);
386
+ }
387
+
388
+ /**
389
+ * Formats a success message
390
+ *
391
+ * @param {string} message - Success message
392
+ * @returns {string} Formatted success
393
+ */
394
+ static formatSuccess(message) {
395
+ return chalk.green('✅ ' + message);
396
+ }
397
+
398
+ /**
399
+ * Formats an info message
400
+ *
401
+ * @param {string} message - Info message
402
+ * @returns {string} Formatted info
403
+ */
404
+ static formatInfo(message) {
405
+ return chalk.blue('ℹ️ ' + message);
406
+ }
407
+
408
+ /**
409
+ * Creates a formatted error for backup failures
410
+ *
411
+ * @param {Error} error - Backup error
412
+ * @param {Object} context - Additional context
413
+ * @returns {string} Formatted error
414
+ */
415
+ static formatBackupError(error, context = {}) {
416
+ return this.format(error, {
417
+ ...context,
418
+ category: ErrorCategory.BACKUP,
419
+ operation: 'backup'
420
+ });
421
+ }
422
+
423
+ /**
424
+ * Creates a formatted error for permission issues
425
+ *
426
+ * @param {Error} error - Permission error
427
+ * @param {Object} context - Additional context
428
+ * @returns {string} Formatted error
429
+ */
430
+ static formatPermissionError(error, context = {}) {
431
+ return this.format(error, {
432
+ ...context,
433
+ category: ErrorCategory.PERMISSION,
434
+ operation: 'permission'
435
+ });
436
+ }
437
+
438
+ /**
439
+ * Creates a formatted error for validation failures
440
+ *
441
+ * @param {Error} error - Validation error
442
+ * @param {Object} context - Additional context
443
+ * @returns {string} Formatted error
444
+ */
445
+ static formatValidationError(error, context = {}) {
446
+ return this.format(error, {
447
+ ...context,
448
+ category: ErrorCategory.VALIDATION,
449
+ operation: 'validation'
450
+ });
451
+ }
452
+
453
+ /**
454
+ * Creates a formatted error for orchestration failures
455
+ *
456
+ * @param {Error} error - Orchestration error
457
+ * @param {Object} context - Additional context
458
+ * @returns {Object} Formatted error object with message
459
+ */
460
+ static formatOrchestrationError(error, context = {}) {
461
+ const formatted = this.format(error, {
462
+ ...context,
463
+ category: ErrorCategory.UNKNOWN,
464
+ operation: 'orchestration'
465
+ });
466
+
467
+ return {
468
+ message: formatted,
469
+ category: ErrorCategory.UNKNOWN
470
+ };
471
+ }
472
+
473
+ /**
474
+ * Formats multiple errors into a summary
475
+ *
476
+ * @param {Array<Error|string>} errors - Array of errors
477
+ * @param {string} title - Summary title
478
+ * @returns {string} Formatted error summary
479
+ */
480
+ static formatMultiple(errors, title = 'Multiple Errors Occurred') {
481
+ const lines = [];
482
+
483
+ lines.push('');
484
+ lines.push(chalk.red('❌ ' + title));
485
+ lines.push('');
486
+
487
+ errors.forEach((error, index) => {
488
+ const message = error instanceof Error ? error.message : error;
489
+ lines.push(` ${index + 1}. ${message}`);
490
+ });
491
+
492
+ lines.push('');
493
+ lines.push(chalk.blue('💡 Run: kse doctor for detailed diagnostics'));
494
+ lines.push('');
495
+
496
+ return lines.join('\n');
497
+ }
498
+ }
499
+
500
+ /**
501
+ * @typedef {Object} ErrorTemplate
502
+ * @property {string} title - Error title
503
+ * @property {string} problem - Clear problem description
504
+ * @property {string[]} causes - List of possible causes
505
+ * @property {string[]} solutions - List of actionable solutions
506
+ */
507
+
508
+ module.exports = ErrorFormatter;
509
+ module.exports.ErrorCategory = ErrorCategory;