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.
- package/CHANGELOG.md +2513 -0
- package/LICENSE +21 -0
- package/README.md +765 -0
- package/README.zh.md +630 -0
- package/bin/kiro-spec-engine.js +796 -0
- package/bin/kse.js +3 -0
- package/bin/sce.js +3 -0
- package/bin/sco.js +3 -0
- package/docs/331-poc-adaptation-roadmap.md +156 -0
- package/docs/331-poc-dual-track-integration-guide.md +120 -0
- package/docs/331-poc-weekly-delivery-checklist.md +52 -0
- package/docs/OFFLINE_INSTALL.md +96 -0
- package/docs/README.md +279 -0
- package/docs/adopt-migration-guide.md +599 -0
- package/docs/adoption-guide.md +616 -0
- package/docs/agent-hooks-analysis.md +815 -0
- package/docs/architecture.md +733 -0
- package/docs/articles/ai-driven-development-philosophy-and-practice-review.md +208 -0
- package/docs/articles/ai-driven-development-philosophy-and-practice.en.md +459 -0
- package/docs/articles/ai-driven-development-philosophy-and-practice.md +492 -0
- package/docs/autonomous-control-guide.md +851 -0
- package/docs/command-reference.md +1368 -0
- package/docs/community.md +115 -0
- package/docs/cross-tool-guide.md +555 -0
- package/docs/developer-guide.md +619 -0
- package/docs/document-governance.md +865 -0
- package/docs/environment-management-guide.md +526 -0
- package/docs/examples/add-export-command/design.md +194 -0
- package/docs/examples/add-export-command/requirements.md +110 -0
- package/docs/examples/add-export-command/tasks.md +88 -0
- package/docs/examples/add-rest-api/design.md +855 -0
- package/docs/examples/add-rest-api/requirements.md +323 -0
- package/docs/examples/add-rest-api/tasks.md +355 -0
- package/docs/examples/add-user-dashboard/design.md +192 -0
- package/docs/examples/add-user-dashboard/requirements.md +143 -0
- package/docs/examples/add-user-dashboard/tasks.md +91 -0
- package/docs/faq.md +697 -0
- package/docs/handoffs/evidence/ontology/moqui-template-baseline-2026-02-17-232922.json +156 -0
- package/docs/handoffs/evidence/ontology/moqui-template-baseline-2026-02-17-232922.md +24 -0
- package/docs/images/wechat-qr.png +0 -0
- package/docs/integration-modes.md +529 -0
- package/docs/integration-philosophy.md +313 -0
- package/docs/knowledge-management-guide.md +263 -0
- package/docs/manual-workflows-guide.md +418 -0
- package/docs/moqui-capability-matrix.md +73 -0
- package/docs/moqui-template-core-library-playbook.md +109 -0
- package/docs/multi-agent-coordination-guide.md +553 -0
- package/docs/multi-repo-management-guide.md +1344 -0
- package/docs/quick-start-with-ai-tools.md +375 -0
- package/docs/quick-start.md +146 -0
- package/docs/release-checklist.md +121 -0
- package/docs/releases/README.md +13 -0
- package/docs/releases/v1.46.2-validation.md +45 -0
- package/docs/releases/v1.46.2.md +50 -0
- package/docs/scene-runtime-guide.md +347 -0
- package/docs/spec-collaboration-guide.md +369 -0
- package/docs/spec-locking-guide.md +225 -0
- package/docs/spec-numbering-guide.md +348 -0
- package/docs/spec-workflow.md +519 -0
- package/docs/steering-strategy-guide.md +196 -0
- package/docs/team-collaboration-guide.md +465 -0
- package/docs/testing-strategy.md +272 -0
- package/docs/tools/claude-guide.md +654 -0
- package/docs/tools/cursor-guide.md +706 -0
- package/docs/tools/generic-guide.md +446 -0
- package/docs/tools/kiro-guide.md +308 -0
- package/docs/tools/vscode-guide.md +445 -0
- package/docs/tools/windsurf-guide.md +391 -0
- package/docs/troubleshooting.md +1135 -0
- package/docs/upgrade-guide.md +639 -0
- package/docs/value-observability-guide.md +127 -0
- package/docs/zh/README.md +341 -0
- package/docs/zh/quick-start.md +764 -0
- package/docs/zh/release-checklist.md +121 -0
- package/docs/zh/releases/README.md +13 -0
- package/docs/zh/releases/v1.46.2-validation.md +45 -0
- package/docs/zh/releases/v1.46.2.md +50 -0
- package/docs/zh/spec-numbering-guide.md +348 -0
- package/docs/zh/tools/claude-guide.md +349 -0
- package/docs/zh/tools/cursor-guide.md +281 -0
- package/docs/zh/tools/generic-guide.md +499 -0
- package/docs/zh/tools/kiro-guide.md +342 -0
- package/docs/zh/tools/vscode-guide.md +449 -0
- package/docs/zh/tools/windsurf-guide.md +378 -0
- package/docs/zh/value-observability-guide.md +127 -0
- package/docs//344/272/244/344/273/230/346/270/205/345/215/225.md +75 -0
- package/lib/adoption/adoption-logger.js +487 -0
- package/lib/adoption/adoption-strategy.js +538 -0
- package/lib/adoption/backup-manager.js +420 -0
- package/lib/adoption/conflict-resolver.js +410 -0
- package/lib/adoption/detection-engine.js +275 -0
- package/lib/adoption/diff-viewer.js +226 -0
- package/lib/adoption/error-formatter.js +509 -0
- package/lib/adoption/file-classifier.js +385 -0
- package/lib/adoption/progress-reporter.js +534 -0
- package/lib/adoption/smart-orchestrator.js +470 -0
- package/lib/adoption/strategy-selector.js +218 -0
- package/lib/adoption/summary-generator.js +493 -0
- package/lib/adoption/template-sync.js +605 -0
- package/lib/auto/autonomous-engine.js +485 -0
- package/lib/auto/checkpoint-manager.js +300 -0
- package/lib/auto/close-loop-runner.js +2476 -0
- package/lib/auto/config-schema.js +176 -0
- package/lib/auto/decision-engine.js +344 -0
- package/lib/auto/error-recovery-manager.js +580 -0
- package/lib/auto/goal-decomposer.js +278 -0
- package/lib/auto/progress-tracker.js +502 -0
- package/lib/auto/safety-manager.js +186 -0
- package/lib/auto/semantic-decomposer.js +137 -0
- package/lib/auto/state-manager.js +126 -0
- package/lib/auto/task-queue-manager.js +340 -0
- package/lib/backup/backup-system.js +372 -0
- package/lib/backup/selective-backup.js +207 -0
- package/lib/collab/agent-registry.js +240 -0
- package/lib/collab/collab-manager.js +285 -0
- package/lib/collab/contract-manager.js +320 -0
- package/lib/collab/coordinator.js +370 -0
- package/lib/collab/dependency-manager.js +280 -0
- package/lib/collab/index.js +20 -0
- package/lib/collab/integration-manager.js +202 -0
- package/lib/collab/merge-coordinator.js +252 -0
- package/lib/collab/metadata-manager.js +233 -0
- package/lib/collab/multi-agent-config.js +120 -0
- package/lib/collab/spec-lifecycle-manager.js +304 -0
- package/lib/collab/sync-barrier.js +88 -0
- package/lib/collab/visualizer.js +208 -0
- package/lib/commands/adopt.js +749 -0
- package/lib/commands/auto.js +19559 -0
- package/lib/commands/collab.js +275 -0
- package/lib/commands/context.js +99 -0
- package/lib/commands/docs.js +808 -0
- package/lib/commands/doctor.js +273 -0
- package/lib/commands/env.js +420 -0
- package/lib/commands/knowledge.js +309 -0
- package/lib/commands/lock.js +235 -0
- package/lib/commands/ops.js +409 -0
- package/lib/commands/orchestrate.js +446 -0
- package/lib/commands/prompt.js +105 -0
- package/lib/commands/repo.js +118 -0
- package/lib/commands/rollback.js +219 -0
- package/lib/commands/scene.js +15549 -0
- package/lib/commands/spec-bootstrap.js +147 -0
- package/lib/commands/spec-gate.js +157 -0
- package/lib/commands/spec-pipeline.js +205 -0
- package/lib/commands/status.js +321 -0
- package/lib/commands/task.js +199 -0
- package/lib/commands/templates.js +654 -0
- package/lib/commands/upgrade.js +231 -0
- package/lib/commands/value.js +569 -0
- package/lib/commands/watch.js +684 -0
- package/lib/commands/workflows.js +240 -0
- package/lib/commands/workspace-multi.js +325 -0
- package/lib/commands/workspace.js +189 -0
- package/lib/context/context-exporter.js +378 -0
- package/lib/context/prompt-generator.js +482 -0
- package/lib/data/moqui-capability-lexicon.json +45 -0
- package/lib/environment/backup-system.js +189 -0
- package/lib/environment/environment-manager.js +379 -0
- package/lib/environment/environment-registry.js +168 -0
- package/lib/gitignore/gitignore-backup.js +229 -0
- package/lib/gitignore/gitignore-detector.js +239 -0
- package/lib/gitignore/gitignore-integration.js +267 -0
- package/lib/gitignore/gitignore-transformer.js +193 -0
- package/lib/gitignore/layered-rules-template.js +42 -0
- package/lib/governance/archive-tool.js +284 -0
- package/lib/governance/cleanup-tool.js +237 -0
- package/lib/governance/config-manager.js +186 -0
- package/lib/governance/diagnostic-engine.js +271 -0
- package/lib/governance/doc-reference-checker.js +200 -0
- package/lib/governance/execution-logger.js +243 -0
- package/lib/governance/file-scanner.js +285 -0
- package/lib/governance/hooks-manager.js +333 -0
- package/lib/governance/reporter.js +337 -0
- package/lib/governance/validation-engine.js +181 -0
- package/lib/i18n.js +79 -0
- package/lib/knowledge/entry-manager.js +208 -0
- package/lib/knowledge/index-manager.js +261 -0
- package/lib/knowledge/knowledge-manager.js +273 -0
- package/lib/knowledge/template-manager.js +191 -0
- package/lib/lock/index.js +21 -0
- package/lib/lock/lock-file.js +192 -0
- package/lib/lock/lock-manager.js +321 -0
- package/lib/lock/machine-identifier.js +135 -0
- package/lib/lock/steering-file-lock.js +207 -0
- package/lib/lock/task-lock-manager.js +345 -0
- package/lib/operations/audit-logger.js +293 -0
- package/lib/operations/feedback-manager.js +1147 -0
- package/lib/operations/index.js +23 -0
- package/lib/operations/models/index.js +170 -0
- package/lib/operations/operations-manager.js +151 -0
- package/lib/operations/operations-validator.js +280 -0
- package/lib/operations/permission-manager.js +354 -0
- package/lib/operations/template-loader.js +143 -0
- package/lib/orchestrator/agent-spawner.js +629 -0
- package/lib/orchestrator/bootstrap-prompt-builder.js +236 -0
- package/lib/orchestrator/index.js +19 -0
- package/lib/orchestrator/orchestration-engine.js +1270 -0
- package/lib/orchestrator/orchestrator-config.js +173 -0
- package/lib/orchestrator/status-monitor.js +591 -0
- package/lib/python-checker.js +209 -0
- package/lib/repo/config-manager.js +580 -0
- package/lib/repo/errors/config-error.js +13 -0
- package/lib/repo/errors/git-error.js +15 -0
- package/lib/repo/errors/repo-error.js +14 -0
- package/lib/repo/git-operations.js +181 -0
- package/lib/repo/handlers/.gitkeep +1 -0
- package/lib/repo/handlers/exec-handler.js +155 -0
- package/lib/repo/handlers/health-handler.js +169 -0
- package/lib/repo/handlers/init-handler.js +197 -0
- package/lib/repo/handlers/status-handler.js +176 -0
- package/lib/repo/output-formatter.js +184 -0
- package/lib/repo/path-resolver.js +178 -0
- package/lib/repo/repo-manager.js +514 -0
- package/lib/scene-runtime/audit-emitter.js +59 -0
- package/lib/scene-runtime/binding-plugin-loader.js +351 -0
- package/lib/scene-runtime/binding-registry.js +349 -0
- package/lib/scene-runtime/eval-bridge.js +44 -0
- package/lib/scene-runtime/index.js +19 -0
- package/lib/scene-runtime/moqui-adapter.js +620 -0
- package/lib/scene-runtime/moqui-client.js +606 -0
- package/lib/scene-runtime/moqui-extractor.js +2029 -0
- package/lib/scene-runtime/plan-compiler.js +208 -0
- package/lib/scene-runtime/policy-gate.js +58 -0
- package/lib/scene-runtime/runtime-executor.js +358 -0
- package/lib/scene-runtime/scene-loader.js +96 -0
- package/lib/scene-runtime/scene-ontology.js +959 -0
- package/lib/scene-runtime/scene-template-linter.js +852 -0
- package/lib/scene-runtime/templates/scene-template-erp-query-v0.1.yaml +28 -0
- package/lib/scene-runtime/templates/scene-template-hybrid-shadow-v0.1.yaml +34 -0
- package/lib/spec/bootstrap/context-collector.js +48 -0
- package/lib/spec/bootstrap/draft-generator.js +158 -0
- package/lib/spec/bootstrap/questionnaire-engine.js +70 -0
- package/lib/spec/bootstrap/trace-emitter.js +59 -0
- package/lib/spec/multi-spec-orchestrate.js +93 -0
- package/lib/spec/pipeline/constants.js +6 -0
- package/lib/spec/pipeline/stage-adapters.js +118 -0
- package/lib/spec/pipeline/stage-runner.js +146 -0
- package/lib/spec/pipeline/state-store.js +119 -0
- package/lib/spec-gate/engine/gate-engine.js +165 -0
- package/lib/spec-gate/policy/default-policy.js +22 -0
- package/lib/spec-gate/policy/policy-loader.js +103 -0
- package/lib/spec-gate/result-emitter.js +81 -0
- package/lib/spec-gate/rules/default-rules.js +156 -0
- package/lib/spec-gate/rules/rule-registry.js +51 -0
- package/lib/steering/adoption-config.js +164 -0
- package/lib/steering/compliance-auto-fixer.js +204 -0
- package/lib/steering/compliance-cache.js +99 -0
- package/lib/steering/compliance-error-reporter.js +70 -0
- package/lib/steering/context-sync-manager.js +273 -0
- package/lib/steering/index.js +92 -0
- package/lib/steering/spec-steering.js +230 -0
- package/lib/steering/steering-compliance-checker.js +73 -0
- package/lib/steering/steering-loader.js +144 -0
- package/lib/steering/steering-manager.js +289 -0
- package/lib/task/index.js +12 -0
- package/lib/task/task-claimer.js +489 -0
- package/lib/task/task-status-store.js +418 -0
- package/lib/templates/cache-manager.js +440 -0
- package/lib/templates/content-generalizer.js +247 -0
- package/lib/templates/frontmatter-generator.js +128 -0
- package/lib/templates/git-handler.js +471 -0
- package/lib/templates/metadata-collector.js +328 -0
- package/lib/templates/path-utils.js +144 -0
- package/lib/templates/registry-parser.js +505 -0
- package/lib/templates/spec-reader.js +216 -0
- package/lib/templates/template-applicator.js +249 -0
- package/lib/templates/template-creator.js +256 -0
- package/lib/templates/template-error.js +143 -0
- package/lib/templates/template-exporter.js +502 -0
- package/lib/templates/template-manager.js +782 -0
- package/lib/templates/template-validator.js +361 -0
- package/lib/upgrade/migration-engine.js +382 -0
- package/lib/upgrade/migrations/.gitkeep +52 -0
- package/lib/upgrade/migrations/1.0.0-to-1.1.0.js +78 -0
- package/lib/utils/file-diff.js +177 -0
- package/lib/utils/fs-utils.js +274 -0
- package/lib/utils/tool-detector.js +383 -0
- package/lib/utils/validation.js +324 -0
- package/lib/value/gate-summary-emitter.js +99 -0
- package/lib/value/metric-contract-loader.js +210 -0
- package/lib/value/risk-evaluator.js +117 -0
- package/lib/value/weekly-snapshot-builder.js +61 -0
- package/lib/version/version-checker.js +156 -0
- package/lib/version/version-manager.js +327 -0
- package/lib/watch/action-executor.js +458 -0
- package/lib/watch/event-debouncer.js +323 -0
- package/lib/watch/execution-logger.js +550 -0
- package/lib/watch/file-watcher.js +499 -0
- package/lib/watch/presets.js +266 -0
- package/lib/watch/watch-manager.js +533 -0
- package/lib/workspace/multi/global-config.js +150 -0
- package/lib/workspace/multi/index.js +22 -0
- package/lib/workspace/multi/path-utils.js +173 -0
- package/lib/workspace/multi/workspace-context-resolver.js +244 -0
- package/lib/workspace/multi/workspace-registry.js +196 -0
- package/lib/workspace/multi/workspace-state-manager.js +537 -0
- package/lib/workspace/multi/workspace.js +90 -0
- package/lib/workspace/workspace-manager.js +370 -0
- package/lib/workspace/workspace-sync.js +356 -0
- package/locales/en.json +114 -0
- package/locales/zh.json +114 -0
- package/package.json +102 -0
- package/template/.kiro/README.md +247 -0
- package/template/.kiro/hooks/check-spec-on-create.kiro.hook +17 -0
- package/template/.kiro/hooks/run-tests-on-save.kiro.hook +13 -0
- package/template/.kiro/hooks/sync-tasks-on-edit.kiro.hook +16 -0
- package/template/.kiro/specs/SPEC_WORKFLOW_GUIDE.md +134 -0
- package/template/.kiro/steering/CORE_PRINCIPLES.md +133 -0
- package/template/.kiro/steering/CURRENT_CONTEXT.md +30 -0
- package/template/.kiro/steering/ENVIRONMENT.md +35 -0
- package/template/.kiro/steering/RULES_GUIDE.md +46 -0
- package/template/.kiro/templates/operations/default/change-impact.md +112 -0
- package/template/.kiro/templates/operations/default/deployment.md +91 -0
- package/template/.kiro/templates/operations/default/feedback-response.md +269 -0
- package/template/.kiro/templates/operations/default/migration-plan.md +172 -0
- package/template/.kiro/templates/operations/default/monitoring.md +135 -0
- package/template/.kiro/templates/operations/default/operations.md +135 -0
- package/template/.kiro/templates/operations/default/rollback.md +143 -0
- package/template/.kiro/templates/operations/default/tools.yaml +364 -0
- package/template/.kiro/templates/operations/default/troubleshooting.md +123 -0
- package/template/.kiro/tools/backup_manager.py +295 -0
- package/template/.kiro/tools/configuration_manager.py +218 -0
- package/template/.kiro/tools/document_evaluator.py +550 -0
- package/template/.kiro/tools/enhancement_logger.py +168 -0
- package/template/.kiro/tools/error_handler.py +335 -0
- package/template/.kiro/tools/improvement_identifier.py +444 -0
- package/template/.kiro/tools/modification_applicator.py +737 -0
- package/template/.kiro/tools/quality_gate_enforcer.py +207 -0
- package/template/.kiro/tools/quality_scorer.py +305 -0
- package/template/.kiro/tools/report_generator.py +154 -0
- package/template/.kiro/tools/ultrawork_enhancer.py +676 -0
- package/template/.kiro/tools/ultrawork_enhancer_refactored.py +0 -0
- package/template/.kiro/tools/ultrawork_enhancer_v2.py +463 -0
- package/template/.kiro/tools/ultrawork_enhancer_v3.py +606 -0
- package/template/.kiro/tools/workflow_quality_gate.py +100 -0
- 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;
|