@wundr.io/cli 1.0.12 → 1.0.14

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 (233) hide show
  1. package/dist/ai/ai-service.d.ts +152 -0
  2. package/dist/ai/ai-service.d.ts.map +1 -0
  3. package/dist/ai/ai-service.js +430 -0
  4. package/dist/ai/ai-service.js.map +1 -0
  5. package/dist/ai/claude-client.d.ts +130 -0
  6. package/dist/ai/claude-client.d.ts.map +1 -0
  7. package/dist/ai/claude-client.js +340 -0
  8. package/dist/ai/claude-client.js.map +1 -0
  9. package/dist/ai/conversation-manager.d.ts +164 -0
  10. package/dist/ai/conversation-manager.d.ts.map +1 -0
  11. package/dist/ai/conversation-manager.js +614 -0
  12. package/dist/ai/conversation-manager.js.map +1 -0
  13. package/dist/ai/index.d.ts +5 -0
  14. package/dist/ai/index.d.ts.map +1 -0
  15. package/dist/ai/index.js +8 -0
  16. package/dist/ai/index.js.map +1 -0
  17. package/dist/cli.d.ts +36 -0
  18. package/dist/cli.d.ts.map +1 -0
  19. package/dist/cli.js +192 -0
  20. package/dist/cli.js.map +1 -0
  21. package/dist/commands/ai.d.ts +89 -0
  22. package/dist/commands/ai.d.ts.map +1 -0
  23. package/dist/commands/ai.js +954 -0
  24. package/dist/commands/ai.js.map +1 -0
  25. package/dist/commands/alignment.d.ts +78 -0
  26. package/dist/commands/alignment.d.ts.map +1 -0
  27. package/dist/commands/alignment.js +817 -0
  28. package/dist/commands/alignment.js.map +1 -0
  29. package/dist/commands/analyze-optimized.d.ts +14 -0
  30. package/dist/commands/analyze-optimized.d.ts.map +1 -0
  31. package/dist/commands/analyze-optimized.js +609 -0
  32. package/dist/commands/analyze-optimized.js.map +1 -0
  33. package/dist/commands/analyze.d.ts +65 -0
  34. package/dist/commands/analyze.d.ts.map +1 -0
  35. package/dist/commands/analyze.js +435 -0
  36. package/dist/commands/analyze.js.map +1 -0
  37. package/dist/commands/batch.d.ts +93 -0
  38. package/dist/commands/batch.d.ts.map +1 -0
  39. package/dist/commands/batch.js +854 -0
  40. package/dist/commands/batch.js.map +1 -0
  41. package/dist/commands/chat.d.ts +72 -0
  42. package/dist/commands/chat.d.ts.map +1 -0
  43. package/dist/commands/chat.js +678 -0
  44. package/dist/commands/chat.js.map +1 -0
  45. package/dist/commands/claude-init.d.ts +28 -0
  46. package/dist/commands/claude-init.d.ts.map +1 -0
  47. package/dist/commands/claude-init.js +591 -0
  48. package/dist/commands/claude-init.js.map +1 -0
  49. package/dist/commands/claude-setup.d.ts +119 -0
  50. package/dist/commands/claude-setup.d.ts.map +1 -0
  51. package/dist/commands/claude-setup.js +1079 -0
  52. package/dist/commands/claude-setup.js.map +1 -0
  53. package/dist/commands/computer-setup.d.ts +8 -0
  54. package/dist/commands/computer-setup.d.ts.map +1 -0
  55. package/dist/commands/computer-setup.js +877 -0
  56. package/dist/commands/computer-setup.js.map +1 -0
  57. package/dist/commands/create-command.d.ts +7 -0
  58. package/dist/commands/create-command.d.ts.map +1 -0
  59. package/dist/commands/create-command.js +158 -0
  60. package/dist/commands/create-command.js.map +1 -0
  61. package/dist/commands/create.d.ts +74 -0
  62. package/dist/commands/create.d.ts.map +1 -0
  63. package/dist/commands/create.js +556 -0
  64. package/dist/commands/create.js.map +1 -0
  65. package/dist/commands/dashboard.d.ts +91 -0
  66. package/dist/commands/dashboard.d.ts.map +1 -0
  67. package/dist/commands/dashboard.js +538 -0
  68. package/dist/commands/dashboard.js.map +1 -0
  69. package/dist/commands/govern.d.ts +70 -0
  70. package/dist/commands/govern.d.ts.map +1 -0
  71. package/dist/commands/govern.js +481 -0
  72. package/dist/commands/govern.js.map +1 -0
  73. package/dist/commands/governance.d.ts +17 -0
  74. package/dist/commands/governance.d.ts.map +1 -0
  75. package/dist/commands/governance.js +703 -0
  76. package/dist/commands/governance.js.map +1 -0
  77. package/dist/commands/guardian.d.ts +20 -0
  78. package/dist/commands/guardian.d.ts.map +1 -0
  79. package/dist/commands/guardian.js +597 -0
  80. package/dist/commands/guardian.js.map +1 -0
  81. package/dist/commands/init.d.ts +59 -0
  82. package/dist/commands/init.d.ts.map +1 -0
  83. package/dist/commands/init.js +650 -0
  84. package/dist/commands/init.js.map +1 -0
  85. package/dist/commands/orchestrator.d.ts +7 -0
  86. package/dist/commands/orchestrator.d.ts.map +1 -0
  87. package/dist/commands/orchestrator.js +578 -0
  88. package/dist/commands/orchestrator.js.map +1 -0
  89. package/dist/commands/performance-optimizer.d.ts +30 -0
  90. package/dist/commands/performance-optimizer.d.ts.map +1 -0
  91. package/dist/commands/performance-optimizer.js +650 -0
  92. package/dist/commands/performance-optimizer.js.map +1 -0
  93. package/dist/commands/plugins.d.ts +87 -0
  94. package/dist/commands/plugins.d.ts.map +1 -0
  95. package/dist/commands/plugins.js +685 -0
  96. package/dist/commands/plugins.js.map +1 -0
  97. package/dist/commands/rag.d.ts +7 -0
  98. package/dist/commands/rag.d.ts.map +1 -0
  99. package/dist/commands/rag.js +751 -0
  100. package/dist/commands/rag.js.map +1 -0
  101. package/dist/commands/session.d.ts +41 -0
  102. package/dist/commands/session.d.ts.map +1 -0
  103. package/dist/commands/session.js +441 -0
  104. package/dist/commands/session.js.map +1 -0
  105. package/dist/commands/setup.d.ts +24 -0
  106. package/dist/commands/setup.d.ts.map +1 -0
  107. package/dist/commands/setup.js +172 -0
  108. package/dist/commands/setup.js.map +1 -0
  109. package/dist/commands/test-init.d.ts +9 -0
  110. package/dist/commands/test-init.d.ts.map +1 -0
  111. package/dist/commands/test-init.js +222 -0
  112. package/dist/commands/test-init.js.map +1 -0
  113. package/dist/commands/test.d.ts +25 -0
  114. package/dist/commands/test.d.ts.map +1 -0
  115. package/dist/commands/test.js +217 -0
  116. package/dist/commands/test.js.map +1 -0
  117. package/dist/commands/watch.d.ts +76 -0
  118. package/dist/commands/watch.d.ts.map +1 -0
  119. package/dist/commands/watch.js +613 -0
  120. package/dist/commands/watch.js.map +1 -0
  121. package/dist/commands/worktree.d.ts +63 -0
  122. package/dist/commands/worktree.d.ts.map +1 -0
  123. package/dist/commands/worktree.js +774 -0
  124. package/dist/commands/worktree.js.map +1 -0
  125. package/dist/context/context-manager.d.ts +155 -0
  126. package/dist/context/context-manager.d.ts.map +1 -0
  127. package/dist/context/context-manager.js +383 -0
  128. package/dist/context/context-manager.js.map +1 -0
  129. package/dist/context/index.d.ts +3 -0
  130. package/dist/context/index.d.ts.map +1 -0
  131. package/dist/context/index.js +6 -0
  132. package/dist/context/index.js.map +1 -0
  133. package/dist/context/session-manager.d.ts +207 -0
  134. package/dist/context/session-manager.d.ts.map +1 -0
  135. package/dist/context/session-manager.js +686 -0
  136. package/dist/context/session-manager.js.map +1 -0
  137. package/dist/framework/command-interface.d.ts +349 -0
  138. package/dist/framework/command-interface.d.ts.map +1 -0
  139. package/dist/framework/command-interface.js +101 -0
  140. package/dist/framework/command-interface.js.map +1 -0
  141. package/dist/framework/command-registry.d.ts +173 -0
  142. package/dist/framework/command-registry.d.ts.map +1 -0
  143. package/dist/framework/command-registry.js +734 -0
  144. package/dist/framework/command-registry.js.map +1 -0
  145. package/dist/framework/completion-exporter.d.ts +79 -0
  146. package/dist/framework/completion-exporter.d.ts.map +1 -0
  147. package/dist/framework/completion-exporter.js +259 -0
  148. package/dist/framework/completion-exporter.js.map +1 -0
  149. package/dist/framework/debug-logger.d.ts +163 -0
  150. package/dist/framework/debug-logger.d.ts.map +1 -0
  151. package/dist/framework/debug-logger.js +373 -0
  152. package/dist/framework/debug-logger.js.map +1 -0
  153. package/dist/framework/error-handler.d.ts +196 -0
  154. package/dist/framework/error-handler.d.ts.map +1 -0
  155. package/dist/framework/error-handler.js +613 -0
  156. package/dist/framework/error-handler.js.map +1 -0
  157. package/dist/framework/help-generator.d.ts +78 -0
  158. package/dist/framework/help-generator.d.ts.map +1 -0
  159. package/dist/framework/help-generator.js +414 -0
  160. package/dist/framework/help-generator.js.map +1 -0
  161. package/dist/framework/index.d.ts +62 -0
  162. package/dist/framework/index.d.ts.map +1 -0
  163. package/dist/framework/index.js +95 -0
  164. package/dist/framework/index.js.map +1 -0
  165. package/dist/framework/interactive-repl.d.ts +138 -0
  166. package/dist/framework/interactive-repl.d.ts.map +1 -0
  167. package/dist/framework/interactive-repl.js +567 -0
  168. package/dist/framework/interactive-repl.js.map +1 -0
  169. package/dist/framework/output-formatter.d.ts +274 -0
  170. package/dist/framework/output-formatter.d.ts.map +1 -0
  171. package/dist/framework/output-formatter.js +545 -0
  172. package/dist/framework/output-formatter.js.map +1 -0
  173. package/dist/framework/progress-manager.d.ts +192 -0
  174. package/dist/framework/progress-manager.d.ts.map +1 -0
  175. package/dist/framework/progress-manager.js +408 -0
  176. package/dist/framework/progress-manager.js.map +1 -0
  177. package/dist/index.d.ts +8 -0
  178. package/dist/index.d.ts.map +1 -0
  179. package/dist/index.js +51 -0
  180. package/dist/index.js.map +1 -0
  181. package/dist/interactive/interactive-mode.d.ts +76 -0
  182. package/dist/interactive/interactive-mode.d.ts.map +1 -0
  183. package/dist/interactive/interactive-mode.js +732 -0
  184. package/dist/interactive/interactive-mode.js.map +1 -0
  185. package/dist/nlp/command-mapper.d.ts +174 -0
  186. package/dist/nlp/command-mapper.d.ts.map +1 -0
  187. package/dist/nlp/command-mapper.js +624 -0
  188. package/dist/nlp/command-mapper.js.map +1 -0
  189. package/dist/nlp/command-parser.d.ts +106 -0
  190. package/dist/nlp/command-parser.d.ts.map +1 -0
  191. package/dist/nlp/command-parser.js +417 -0
  192. package/dist/nlp/command-parser.js.map +1 -0
  193. package/dist/nlp/index.d.ts +5 -0
  194. package/dist/nlp/index.d.ts.map +1 -0
  195. package/dist/nlp/index.js +8 -0
  196. package/dist/nlp/index.js.map +1 -0
  197. package/dist/nlp/intent-classifier.d.ts +59 -0
  198. package/dist/nlp/intent-classifier.d.ts.map +1 -0
  199. package/dist/nlp/intent-classifier.js +384 -0
  200. package/dist/nlp/intent-classifier.js.map +1 -0
  201. package/dist/nlp/intent-parser.d.ts +152 -0
  202. package/dist/nlp/intent-parser.d.ts.map +1 -0
  203. package/dist/nlp/intent-parser.js +746 -0
  204. package/dist/nlp/intent-parser.js.map +1 -0
  205. package/dist/plugins/plugin-manager.d.ts +121 -0
  206. package/dist/plugins/plugin-manager.d.ts.map +1 -0
  207. package/dist/plugins/plugin-manager.js +606 -0
  208. package/dist/plugins/plugin-manager.js.map +1 -0
  209. package/dist/types/index.d.ts +224 -0
  210. package/dist/types/index.d.ts.map +1 -0
  211. package/dist/types/index.js +3 -0
  212. package/dist/types/index.js.map +1 -0
  213. package/dist/utils/backup-rollback-manager.d.ts +72 -0
  214. package/dist/utils/backup-rollback-manager.d.ts.map +1 -0
  215. package/dist/utils/backup-rollback-manager.js +288 -0
  216. package/dist/utils/backup-rollback-manager.js.map +1 -0
  217. package/dist/utils/claude-config-installer.d.ts +98 -0
  218. package/dist/utils/claude-config-installer.d.ts.map +1 -0
  219. package/dist/utils/claude-config-installer.js +678 -0
  220. package/dist/utils/claude-config-installer.js.map +1 -0
  221. package/dist/utils/config-manager.d.ts +73 -0
  222. package/dist/utils/config-manager.d.ts.map +1 -0
  223. package/dist/utils/config-manager.js +339 -0
  224. package/dist/utils/config-manager.js.map +1 -0
  225. package/dist/utils/error-handler.d.ts +46 -0
  226. package/dist/utils/error-handler.d.ts.map +1 -0
  227. package/dist/utils/error-handler.js +169 -0
  228. package/dist/utils/error-handler.js.map +1 -0
  229. package/dist/utils/logger.d.ts +25 -0
  230. package/dist/utils/logger.d.ts.map +1 -0
  231. package/dist/utils/logger.js +105 -0
  232. package/dist/utils/logger.js.map +1 -0
  233. package/package.json +6 -6
@@ -0,0 +1,613 @@
1
+ "use strict";
2
+ /**
3
+ * CLI Error Handler - Centralized error handling with recovery suggestions.
4
+ *
5
+ * Provides:
6
+ * - Typed error codes with hierarchical naming
7
+ * - Contextual recovery suggestions for every error
8
+ * - Consistent formatting across all commands
9
+ * - Verbose mode stack traces
10
+ * - Error wrapping for async operations
11
+ * - Custom error handler registration for extensions
12
+ *
13
+ * @module framework/error-handler
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.CliErrorHandler = exports.CliError = void 0;
17
+ exports.classifyError = classifyError;
18
+ exports.classifyAnyError = classifyAnyError;
19
+ const tslib_1 = require("tslib");
20
+ const chalk_1 = tslib_1.__importDefault(require("chalk"));
21
+ // ---------------------------------------------------------------------------
22
+ // CLI Error
23
+ // ---------------------------------------------------------------------------
24
+ /**
25
+ * Typed CLI error with error code, details, and recovery suggestions.
26
+ *
27
+ * All framework-level errors should use this type. Commands create them
28
+ * via `CliErrorHandler.createError()` and throw them; the handler
29
+ * formats them for display.
30
+ */
31
+ class CliError extends Error {
32
+ code;
33
+ details;
34
+ suggestions;
35
+ recoverable;
36
+ timestamp;
37
+ constructor(code, message, details = {}, suggestions = [], recoverable = false) {
38
+ super(message);
39
+ this.name = 'CliError';
40
+ this.code = code;
41
+ this.details = details;
42
+ this.suggestions = suggestions;
43
+ this.recoverable = recoverable;
44
+ this.timestamp = new Date();
45
+ // Maintain proper stack trace
46
+ if (Error.captureStackTrace) {
47
+ Error.captureStackTrace(this, CliError);
48
+ }
49
+ }
50
+ }
51
+ exports.CliError = CliError;
52
+ /**
53
+ * Classify an error code into a high-level category.
54
+ *
55
+ * User errors: bad input, missing args, invalid config values
56
+ * System errors: file not found, permission denied, disk full
57
+ * Network errors: connection refused, timeout, DNS failure
58
+ * Config errors: missing config, validation failure
59
+ * Plugin errors: plugin not found, incompatible, activation failure
60
+ */
61
+ function classifyError(code) {
62
+ if (code.includes('_CLI_')) {
63
+ return {
64
+ classification: 'user',
65
+ retryable: false,
66
+ userFacing: true,
67
+ exitCode: 1,
68
+ };
69
+ }
70
+ if (code.includes('_CONFIG_')) {
71
+ return {
72
+ classification: 'config',
73
+ retryable: false,
74
+ userFacing: true,
75
+ exitCode: 1,
76
+ };
77
+ }
78
+ if (code.includes('_PLUGIN_')) {
79
+ return {
80
+ classification: 'plugin',
81
+ retryable: true,
82
+ userFacing: true,
83
+ exitCode: 1,
84
+ };
85
+ }
86
+ if (code === 'WUNDR_SYS_003' ||
87
+ code.includes('ECONNREFUSED') ||
88
+ code.includes('ETIMEDOUT') ||
89
+ code.includes('ENOTFOUND')) {
90
+ return {
91
+ classification: 'network',
92
+ retryable: true,
93
+ userFacing: true,
94
+ exitCode: 2,
95
+ };
96
+ }
97
+ if (code.startsWith('WUNDR_SYS_')) {
98
+ return {
99
+ classification: 'system',
100
+ retryable: false,
101
+ userFacing: true,
102
+ exitCode: 3,
103
+ };
104
+ }
105
+ if (code.includes('_DAEMON_003')) {
106
+ return {
107
+ classification: 'system',
108
+ retryable: false,
109
+ userFacing: true,
110
+ exitCode: 3,
111
+ };
112
+ }
113
+ return {
114
+ classification: 'unknown',
115
+ retryable: false,
116
+ userFacing: true,
117
+ exitCode: 1,
118
+ };
119
+ }
120
+ /**
121
+ * Classify any Error (including non-CliError) into a high-level category.
122
+ */
123
+ function classifyAnyError(error) {
124
+ if (error instanceof CliError) {
125
+ return classifyError(error.code);
126
+ }
127
+ // Check for system error codes
128
+ const systemError = error;
129
+ if (systemError.code) {
130
+ const mapping = SYSTEM_ERROR_MAP[systemError.code];
131
+ if (mapping) {
132
+ return classifyError(mapping.code);
133
+ }
134
+ }
135
+ // Check message heuristics
136
+ const msg = error.message.toLowerCase();
137
+ if (msg.includes('network') ||
138
+ msg.includes('timeout') ||
139
+ msg.includes('connection')) {
140
+ return {
141
+ classification: 'network',
142
+ retryable: true,
143
+ userFacing: true,
144
+ exitCode: 2,
145
+ };
146
+ }
147
+ if (msg.includes('permission') || msg.includes('access denied')) {
148
+ return {
149
+ classification: 'system',
150
+ retryable: false,
151
+ userFacing: true,
152
+ exitCode: 3,
153
+ };
154
+ }
155
+ return {
156
+ classification: 'unknown',
157
+ retryable: false,
158
+ userFacing: true,
159
+ exitCode: 1,
160
+ };
161
+ }
162
+ // ---------------------------------------------------------------------------
163
+ // Built-in Recovery Suggestions
164
+ // ---------------------------------------------------------------------------
165
+ const BUILT_IN_SUGGESTIONS = {
166
+ WUNDR_CLI_001: [
167
+ { description: 'Check available commands', command: 'wundr --help' },
168
+ {
169
+ description: 'Search for similar commands',
170
+ command: 'wundr --help | grep <term>',
171
+ },
172
+ ],
173
+ WUNDR_CLI_002: [
174
+ { description: 'Check command syntax', command: 'wundr <command> --help' },
175
+ ],
176
+ WUNDR_CLI_005: [
177
+ {
178
+ description: 'Initialize a Wundr project',
179
+ command: 'wundr init project',
180
+ },
181
+ { description: 'Navigate to your project directory first' },
182
+ ],
183
+ WUNDR_DAEMON_001: [
184
+ { description: 'Start the orchestrator daemon', command: 'wundr start' },
185
+ {
186
+ description: 'Check daemon logs for errors',
187
+ command: 'wundr orchestrator logs',
188
+ },
189
+ ],
190
+ WUNDR_DAEMON_002: [
191
+ { description: 'Check current daemon status', command: 'wundr status' },
192
+ { description: 'Stop the running daemon first', command: 'wundr stop' },
193
+ ],
194
+ WUNDR_DAEMON_003: [
195
+ { description: 'Use a different port', command: 'wundr start --port 9000' },
196
+ { description: 'Check what is using the port', command: 'lsof -i :<port>' },
197
+ ],
198
+ WUNDR_DAEMON_004: [
199
+ {
200
+ description: 'Check if the orchestrator daemon module is installed',
201
+ command: 'npm ls @wundr/orchestrator-daemon',
202
+ },
203
+ { description: 'View daemon logs', command: 'wundr orchestrator logs' },
204
+ ],
205
+ WUNDR_CONFIG_001: [
206
+ { description: 'Create a default config', command: 'wundr config reset' },
207
+ {
208
+ description: 'Initialize a project with config',
209
+ command: 'wundr init config',
210
+ },
211
+ ],
212
+ WUNDR_CONFIG_002: [
213
+ {
214
+ description: 'Validate your configuration',
215
+ command: 'wundr config validate',
216
+ },
217
+ {
218
+ description: 'Reset to default configuration',
219
+ command: 'wundr config reset --force',
220
+ },
221
+ ],
222
+ WUNDR_CONFIG_004: [
223
+ {
224
+ description: 'View current config to find valid keys',
225
+ command: 'wundr config show',
226
+ },
227
+ ],
228
+ WUNDR_AGENT_001: [
229
+ {
230
+ description: 'Check that the daemon is running',
231
+ command: 'wundr status',
232
+ },
233
+ {
234
+ description: 'View agent limits in config',
235
+ command: 'wundr config show',
236
+ },
237
+ ],
238
+ WUNDR_AGENT_002: [
239
+ { description: 'List active agents', command: 'wundr agent list' },
240
+ ],
241
+ WUNDR_AGENT_004: [
242
+ {
243
+ description: 'Stop idle agents to free slots',
244
+ command: 'wundr agent list',
245
+ },
246
+ {
247
+ description: 'Increase maxSessions in config',
248
+ command: 'wundr orchestrator config set daemon.maxSessions=200',
249
+ },
250
+ ],
251
+ WUNDR_MEMORY_001: [
252
+ {
253
+ description: 'Initialize the memory/RAG store',
254
+ command: 'wundr init rag',
255
+ },
256
+ { description: 'Check RAG store status', command: 'wundr rag status' },
257
+ ],
258
+ WUNDR_MEMORY_003: [
259
+ { description: 'Retry the sync operation', command: 'wundr rag sync' },
260
+ {
261
+ description: 'Prune and rebuild the store',
262
+ command: 'wundr rag prune && wundr rag sync',
263
+ },
264
+ ],
265
+ WUNDR_PLUGIN_001: [
266
+ {
267
+ description: 'Search available plugins',
268
+ command: 'wundr plugin search <name>',
269
+ },
270
+ { description: 'List installed plugins', command: 'wundr plugin list' },
271
+ ],
272
+ WUNDR_PLUGIN_002: [
273
+ { description: 'Check your network connection' },
274
+ {
275
+ description: 'Try installing with --force',
276
+ command: 'wundr plugin install <name> --force',
277
+ },
278
+ ],
279
+ WUNDR_BATCH_001: [
280
+ { description: 'List available batch jobs', command: 'wundr batch list' },
281
+ {
282
+ description: 'Create a new batch job',
283
+ command: 'wundr batch create <name>',
284
+ },
285
+ ],
286
+ WUNDR_BATCH_002: [
287
+ {
288
+ description: 'Validate the batch file',
289
+ command: 'wundr batch validate <file>',
290
+ },
291
+ ],
292
+ WUNDR_SETUP_002: [
293
+ {
294
+ description: 'List available profiles',
295
+ command: 'wundr setup --interactive',
296
+ },
297
+ ],
298
+ WUNDR_SETUP_004: [
299
+ { description: 'Run with elevated permissions if needed' },
300
+ { description: 'Check file/directory permissions' },
301
+ ],
302
+ WUNDR_SYS_001: [
303
+ { description: 'Check the file path and try again' },
304
+ { description: 'Ensure you are in the correct directory' },
305
+ ],
306
+ WUNDR_SYS_002: [
307
+ { description: 'Check file and directory permissions' },
308
+ { description: 'Run with appropriate user privileges' },
309
+ ],
310
+ WUNDR_SYS_003: [
311
+ { description: 'Check your internet connection' },
312
+ { description: 'Check if a proxy is configured correctly' },
313
+ { description: 'Retry the operation' },
314
+ ],
315
+ };
316
+ // ---------------------------------------------------------------------------
317
+ // System Error Mappings
318
+ // ---------------------------------------------------------------------------
319
+ const SYSTEM_ERROR_MAP = {
320
+ ENOENT: { code: 'WUNDR_SYS_001', message: 'File or directory not found' },
321
+ EACCES: { code: 'WUNDR_SYS_002', message: 'Permission denied' },
322
+ EPERM: { code: 'WUNDR_SYS_002', message: 'Operation not permitted' },
323
+ ECONNREFUSED: { code: 'WUNDR_SYS_003', message: 'Connection refused' },
324
+ ENOTFOUND: { code: 'WUNDR_SYS_003', message: 'Host not found' },
325
+ ETIMEDOUT: { code: 'WUNDR_SYS_003', message: 'Connection timed out' },
326
+ ENOSPC: { code: 'WUNDR_SYS_004', message: 'Insufficient disk space' },
327
+ EADDRINUSE: { code: 'WUNDR_DAEMON_003', message: 'Port already in use' },
328
+ };
329
+ // ---------------------------------------------------------------------------
330
+ // CLI Error Handler
331
+ // ---------------------------------------------------------------------------
332
+ class CliErrorHandler {
333
+ customHandlers = [];
334
+ customSuggestions = new Map();
335
+ // -------------------------------------------------------------------------
336
+ // Error Creation
337
+ // -------------------------------------------------------------------------
338
+ /**
339
+ * Create a typed CLI error.
340
+ *
341
+ * @param code - Error code from the registry
342
+ * @param message - Human-readable error message
343
+ * @param details - Additional context
344
+ * @param recoverable - Whether the error is potentially recoverable
345
+ * @returns A CliError instance
346
+ */
347
+ createError(code, message, details = {}, recoverable = false) {
348
+ const suggestions = this.getSuggestions(code);
349
+ return new CliError(code, message, details, suggestions, recoverable);
350
+ }
351
+ /**
352
+ * Wrap a system error (ENOENT, EACCES, etc.) into a CliError.
353
+ *
354
+ * @param error - The original system error
355
+ * @param context - Additional context about what operation was being performed
356
+ * @returns A CliError with appropriate code and suggestions
357
+ */
358
+ wrapSystemError(error, context = '') {
359
+ const systemCode = error.code ?? '';
360
+ const mapping = SYSTEM_ERROR_MAP[systemCode];
361
+ if (mapping) {
362
+ return this.createError(mapping.code, context ? `${context}: ${mapping.message}` : mapping.message, { cause: error }, true);
363
+ }
364
+ // Unknown system error
365
+ return this.createError('WUNDR_CLI_002', context ? `${context}: ${error.message}` : error.message, { cause: error }, false);
366
+ }
367
+ // -------------------------------------------------------------------------
368
+ // Error Handling
369
+ // -------------------------------------------------------------------------
370
+ /**
371
+ * Handle a command execution error.
372
+ *
373
+ * Formats the error for display, including:
374
+ * - Error code and message
375
+ * - Context details
376
+ * - Recovery suggestions
377
+ * - Stack trace (in verbose mode)
378
+ *
379
+ * @param error - The error to handle
380
+ * @param command - The command that was executing
381
+ * @param context - The command context
382
+ */
383
+ handleCommandError(error, command, context) {
384
+ const verbose = context.globalOptions.verbose;
385
+ const json = context.globalOptions.json;
386
+ // JSON mode: output structured error
387
+ if (json) {
388
+ const errorData = this.toJson(error, command);
389
+ console.error(JSON.stringify(errorData, null, 2));
390
+ return;
391
+ }
392
+ // CLI error with full metadata
393
+ if (error instanceof CliError) {
394
+ this.formatCliError(error, verbose, command?.name);
395
+ return;
396
+ }
397
+ // Plain error
398
+ this.formatPlainError(error, verbose, command?.name);
399
+ }
400
+ /**
401
+ * Wrap an async operation with consistent error handling.
402
+ *
403
+ * @param operation - The async operation to execute
404
+ * @param errorContext - Context string for error messages
405
+ * @param code - Error code to use if the operation fails
406
+ * @returns The operation result
407
+ */
408
+ async withErrorHandling(operation, errorContext, code = 'WUNDR_CLI_002') {
409
+ try {
410
+ return await operation();
411
+ }
412
+ catch (error) {
413
+ if (error instanceof CliError) {
414
+ throw error;
415
+ }
416
+ if (error instanceof Error) {
417
+ const systemError = error;
418
+ if (systemError.code && SYSTEM_ERROR_MAP[systemError.code]) {
419
+ throw this.wrapSystemError(systemError, errorContext);
420
+ }
421
+ throw this.createError(code, `${errorContext}: ${error.message}`, { cause: error }, true);
422
+ }
423
+ throw this.createError(code, `${errorContext}: ${String(error)}`, {}, false);
424
+ }
425
+ }
426
+ // -------------------------------------------------------------------------
427
+ // Custom Handlers
428
+ // -------------------------------------------------------------------------
429
+ /**
430
+ * Register a custom error recovery handler.
431
+ *
432
+ * @param handler - The recovery handler
433
+ */
434
+ registerHandler(handler) {
435
+ this.customHandlers.push(handler);
436
+ }
437
+ /**
438
+ * Register custom recovery suggestions for an error code.
439
+ *
440
+ * @param code - Error code
441
+ * @param suggestions - Recovery suggestions
442
+ */
443
+ registerSuggestions(code, suggestions) {
444
+ this.customSuggestions.set(code, suggestions);
445
+ }
446
+ /**
447
+ * Attempt to recover from an error using registered handlers.
448
+ *
449
+ * @param error - The error to recover from
450
+ * @param context - Command context
451
+ * @returns Whether recovery was successful
452
+ */
453
+ async attemptRecovery(error, context) {
454
+ for (const handler of this.customHandlers) {
455
+ if (handler.canHandle(error.code)) {
456
+ try {
457
+ const recovered = await handler.recover(error, context);
458
+ if (recovered) {
459
+ context.logger.success('Error recovered successfully.');
460
+ return true;
461
+ }
462
+ }
463
+ catch {
464
+ // Recovery handler itself failed; continue to next
465
+ }
466
+ }
467
+ }
468
+ return false;
469
+ }
470
+ // -------------------------------------------------------------------------
471
+ // Private Helpers
472
+ // -------------------------------------------------------------------------
473
+ /**
474
+ * Get recovery suggestions for an error code, merging built-in and custom.
475
+ */
476
+ getSuggestions(code) {
477
+ const builtIn = BUILT_IN_SUGGESTIONS[code] ?? [];
478
+ const custom = this.customSuggestions.get(code) ?? [];
479
+ return [...builtIn, ...custom];
480
+ }
481
+ /**
482
+ * Format a CliError for terminal display.
483
+ */
484
+ formatCliError(error, verbose, commandName) {
485
+ // Header
486
+ console.error('');
487
+ console.error(chalk_1.default.red.bold('Error'));
488
+ console.error(chalk_1.default.red(` Code: ${error.code}`));
489
+ console.error(chalk_1.default.red(` Message: ${error.message}`));
490
+ if (commandName) {
491
+ console.error(chalk_1.default.gray(` Command: ${commandName}`));
492
+ }
493
+ // Details
494
+ if (verbose && Object.keys(error.details).length > 0) {
495
+ console.error(chalk_1.default.gray('\n Details:'));
496
+ for (const [key, value] of Object.entries(error.details)) {
497
+ if (key === 'cause')
498
+ continue; // Show cause separately
499
+ console.error(chalk_1.default.gray(` ${key}: ${this.formatDetailValue(value)}`));
500
+ }
501
+ }
502
+ // Suggestions
503
+ if (error.suggestions.length > 0) {
504
+ console.error('');
505
+ if (error.recoverable) {
506
+ console.error(chalk_1.default.yellow(' This error may be recoverable. Try:'));
507
+ }
508
+ else {
509
+ console.error(chalk_1.default.yellow(' Suggestions:'));
510
+ }
511
+ for (const suggestion of error.suggestions) {
512
+ if (suggestion.command) {
513
+ console.error(chalk_1.default.yellow(` - ${suggestion.description}`));
514
+ console.error(chalk_1.default.cyan(` $ ${suggestion.command}`));
515
+ }
516
+ else {
517
+ console.error(chalk_1.default.yellow(` - ${suggestion.description}`));
518
+ }
519
+ if (suggestion.docLink) {
520
+ console.error(chalk_1.default.gray(` Docs: ${suggestion.docLink}`));
521
+ }
522
+ }
523
+ }
524
+ // Stack trace in verbose mode
525
+ if (verbose) {
526
+ if (error.details.cause instanceof Error && error.details.cause.stack) {
527
+ console.error(chalk_1.default.gray('\n Caused by:'));
528
+ console.error(chalk_1.default.gray(` ${error.details.cause.message}`));
529
+ const causeStack = error.details.cause.stack.split('\n').slice(1, 5);
530
+ for (const line of causeStack) {
531
+ console.error(chalk_1.default.gray(` ${line.trim()}`));
532
+ }
533
+ }
534
+ if (error.stack) {
535
+ console.error(chalk_1.default.gray('\n Stack trace:'));
536
+ const stackLines = error.stack.split('\n').slice(1, 8);
537
+ for (const line of stackLines) {
538
+ console.error(chalk_1.default.gray(` ${line.trim()}`));
539
+ }
540
+ }
541
+ }
542
+ else {
543
+ console.error(chalk_1.default.gray('\n Run with --verbose for more details.'));
544
+ }
545
+ console.error('');
546
+ }
547
+ /**
548
+ * Format a plain Error for terminal display.
549
+ */
550
+ formatPlainError(error, verbose, commandName) {
551
+ console.error('');
552
+ console.error(chalk_1.default.red.bold('Error'));
553
+ console.error(chalk_1.default.red(` ${error.message}`));
554
+ if (commandName) {
555
+ console.error(chalk_1.default.gray(` Command: ${commandName}`));
556
+ }
557
+ if (verbose && error.stack) {
558
+ console.error(chalk_1.default.gray('\n Stack trace:'));
559
+ const stackLines = error.stack.split('\n').slice(1, 8);
560
+ for (const line of stackLines) {
561
+ console.error(chalk_1.default.gray(` ${line.trim()}`));
562
+ }
563
+ }
564
+ else if (!verbose) {
565
+ console.error(chalk_1.default.gray('\n Run with --verbose for more details.'));
566
+ }
567
+ console.error('');
568
+ }
569
+ /**
570
+ * Convert an error to a JSON-serializable object.
571
+ */
572
+ toJson(error, command) {
573
+ const base = {
574
+ error: true,
575
+ message: error.message,
576
+ timestamp: new Date().toISOString(),
577
+ };
578
+ if (command) {
579
+ base['command'] = command.name;
580
+ }
581
+ if (error instanceof CliError) {
582
+ base['code'] = error.code;
583
+ base['recoverable'] = error.recoverable;
584
+ base['suggestions'] = error.suggestions;
585
+ // Include non-Error details
586
+ const safeDetails = {};
587
+ for (const [key, value] of Object.entries(error.details)) {
588
+ if (value instanceof Error) {
589
+ safeDetails[key] = { message: value.message, name: value.name };
590
+ }
591
+ else {
592
+ safeDetails[key] = value;
593
+ }
594
+ }
595
+ base['details'] = safeDetails;
596
+ }
597
+ return base;
598
+ }
599
+ /**
600
+ * Format a detail value for display.
601
+ */
602
+ formatDetailValue(value) {
603
+ if (value === null || value === undefined)
604
+ return '(none)';
605
+ if (value instanceof Error)
606
+ return value.message;
607
+ if (typeof value === 'object')
608
+ return JSON.stringify(value);
609
+ return String(value);
610
+ }
611
+ }
612
+ exports.CliErrorHandler = CliErrorHandler;
613
+ //# sourceMappingURL=error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/framework/error-handler.ts"],"names":[],"mappings":"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"}