@wundr.io/cli 1.0.11 → 1.0.13
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/bin/wundr.js +8 -4
- package/dist/ai/ai-service.d.ts.map +1 -1
- package/dist/ai/ai-service.js.map +1 -1
- package/dist/ai/claude-client.js.map +1 -1
- package/dist/ai/conversation-manager.js.map +1 -1
- package/dist/commands/ai.d.ts.map +1 -1
- package/dist/commands/ai.js +179 -24
- package/dist/commands/ai.js.map +1 -1
- package/dist/commands/analyze-optimized.d.ts.map +1 -1
- package/dist/commands/analyze-optimized.js +15 -6
- package/dist/commands/analyze-optimized.js.map +1 -1
- package/dist/commands/batch.d.ts +22 -0
- package/dist/commands/batch.d.ts.map +1 -1
- package/dist/commands/batch.js +130 -14
- package/dist/commands/batch.js.map +1 -1
- package/dist/commands/chat.d.ts +1 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +7 -3
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/claude-init.d.ts +1 -1
- package/dist/commands/claude-init.d.ts.map +1 -1
- package/dist/commands/claude-init.js +16 -16
- package/dist/commands/claude-init.js.map +1 -1
- package/dist/commands/claude-setup.d.ts +5 -5
- package/dist/commands/claude-setup.d.ts.map +1 -1
- package/dist/commands/claude-setup.js +65 -59
- package/dist/commands/claude-setup.js.map +1 -1
- package/dist/commands/computer-setup.d.ts +1 -0
- package/dist/commands/computer-setup.d.ts.map +1 -1
- package/dist/commands/computer-setup.js +35 -7
- package/dist/commands/computer-setup.js.map +1 -1
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/govern.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/orchestrator.d.ts.map +1 -1
- package/dist/commands/orchestrator.js +11 -4
- package/dist/commands/orchestrator.js.map +1 -1
- package/dist/commands/performance-optimizer.d.ts.map +1 -1
- package/dist/commands/performance-optimizer.js.map +1 -1
- package/dist/commands/rag.d.ts.map +1 -1
- package/dist/commands/rag.js +9 -6
- package/dist/commands/rag.js.map +1 -1
- package/dist/commands/setup.d.ts +5 -10
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +35 -260
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js.map +1 -1
- package/dist/context/session-manager.js.map +1 -1
- package/dist/framework/command-interface.d.ts +349 -0
- package/dist/framework/command-interface.d.ts.map +1 -0
- package/dist/framework/command-interface.js +101 -0
- package/dist/framework/command-interface.js.map +1 -0
- package/dist/framework/command-registry.d.ts +173 -0
- package/dist/framework/command-registry.d.ts.map +1 -0
- package/dist/framework/command-registry.js +734 -0
- package/dist/framework/command-registry.js.map +1 -0
- package/dist/framework/completion-exporter.d.ts +79 -0
- package/dist/framework/completion-exporter.d.ts.map +1 -0
- package/dist/framework/completion-exporter.js +259 -0
- package/dist/framework/completion-exporter.js.map +1 -0
- package/dist/framework/debug-logger.d.ts +163 -0
- package/dist/framework/debug-logger.d.ts.map +1 -0
- package/dist/framework/debug-logger.js +373 -0
- package/dist/framework/debug-logger.js.map +1 -0
- package/dist/framework/error-handler.d.ts +196 -0
- package/dist/framework/error-handler.d.ts.map +1 -0
- package/dist/framework/error-handler.js +613 -0
- package/dist/framework/error-handler.js.map +1 -0
- package/dist/framework/help-generator.d.ts +78 -0
- package/dist/framework/help-generator.d.ts.map +1 -0
- package/dist/framework/help-generator.js +414 -0
- package/dist/framework/help-generator.js.map +1 -0
- package/dist/framework/index.d.ts +62 -0
- package/dist/framework/index.d.ts.map +1 -0
- package/dist/framework/index.js +95 -0
- package/dist/framework/index.js.map +1 -0
- package/dist/framework/interactive-repl.d.ts +138 -0
- package/dist/framework/interactive-repl.d.ts.map +1 -0
- package/dist/framework/interactive-repl.js +567 -0
- package/dist/framework/interactive-repl.js.map +1 -0
- package/dist/framework/output-formatter.d.ts +274 -0
- package/dist/framework/output-formatter.d.ts.map +1 -0
- package/dist/framework/output-formatter.js +545 -0
- package/dist/framework/output-formatter.js.map +1 -0
- package/dist/framework/progress-manager.d.ts +192 -0
- package/dist/framework/progress-manager.d.ts.map +1 -0
- package/dist/framework/progress-manager.js +408 -0
- package/dist/framework/progress-manager.js.map +1 -0
- package/dist/interactive/interactive-mode.js.map +1 -1
- package/dist/nlp/command-mapper.js.map +1 -1
- package/dist/nlp/command-parser.js.map +1 -1
- package/dist/nlp/intent-parser.d.ts.map +1 -1
- package/dist/nlp/intent-parser.js +4 -2
- package/dist/nlp/intent-parser.js.map +1 -1
- package/dist/plugins/plugin-manager.d.ts +2 -1
- package/dist/plugins/plugin-manager.d.ts.map +1 -1
- package/dist/plugins/plugin-manager.js +30 -19
- package/dist/plugins/plugin-manager.js.map +1 -1
- package/dist/utils/backup-rollback-manager.d.ts.map +1 -1
- package/dist/utils/backup-rollback-manager.js +1 -2
- package/dist/utils/backup-rollback-manager.js.map +1 -1
- package/dist/utils/logger.js.map +1 -1
- package/package.json +6 -6
- package/src/ai/ai-service.ts +16 -17
- package/src/ai/claude-client.ts +16 -16
- package/src/ai/conversation-manager.ts +29 -29
- package/src/cli.ts +4 -4
- package/src/commands/ai.ts +246 -78
- package/src/commands/alignment.ts +74 -74
- package/src/commands/analyze-optimized.ts +111 -78
- package/src/commands/analyze.ts +14 -14
- package/src/commands/batch.ts +179 -42
- package/src/commands/chat.ts +37 -30
- package/src/commands/claude-init.ts +41 -45
- package/src/commands/claude-setup.ts +204 -119
- package/src/commands/computer-setup.ts +85 -43
- package/src/commands/create-command.ts +4 -4
- package/src/commands/create.ts +27 -27
- package/src/commands/dashboard.ts +24 -24
- package/src/commands/govern.ts +25 -25
- package/src/commands/governance.ts +34 -34
- package/src/commands/guardian.ts +56 -56
- package/src/commands/init.ts +25 -22
- package/src/commands/orchestrator.ts +68 -41
- package/src/commands/performance-optimizer.ts +34 -35
- package/src/commands/plugins.ts +27 -27
- package/src/commands/project-update.ts +175 -72
- package/src/commands/rag.ts +185 -78
- package/src/commands/session.ts +35 -35
- package/src/commands/setup.ts +40 -344
- package/src/commands/test-init.ts +3 -3
- package/src/commands/test.ts +4 -4
- package/src/commands/watch.ts +28 -29
- package/src/commands/worktree.ts +49 -49
- package/src/context/context-manager.ts +10 -10
- package/src/context/session-manager.ts +41 -41
- package/src/framework/command-interface.ts +520 -0
- package/src/framework/command-registry.ts +942 -0
- package/src/framework/completion-exporter.ts +383 -0
- package/src/framework/debug-logger.ts +519 -0
- package/src/framework/error-handler.ts +867 -0
- package/src/framework/help-generator.ts +540 -0
- package/src/framework/index.ts +169 -0
- package/src/framework/interactive-repl.ts +703 -0
- package/src/framework/output-formatter.ts +834 -0
- package/src/framework/progress-manager.ts +539 -0
- package/src/index.ts +4 -4
- package/src/interactive/interactive-mode.ts +16 -16
- package/src/lib/conflict-resolution.ts +799 -9
- package/src/lib/merge-strategy.ts +529 -7
- package/src/lib/safety-mechanisms.ts +422 -18
- package/src/lib/state-detection.ts +1015 -13
- package/src/nlp/command-mapper.ts +29 -29
- package/src/nlp/command-parser.ts +17 -17
- package/src/nlp/intent-classifier.ts +7 -7
- package/src/nlp/intent-parser.ts +54 -52
- package/src/plugins/plugin-manager.ts +61 -39
- package/src/tests/computer-setup-integration.test.ts +46 -15
- package/src/types/modules.d.ts +424 -1
- package/src/utils/backup-rollback-manager.ts +11 -8
- package/src/utils/config-manager.ts +3 -3
- package/src/utils/error-handler.ts +2 -2
- package/src/utils/logger.ts +22 -22
- package/templates/batch/ci-cd.yaml +7 -7
- package/test-suites/api/health.spec.ts +20 -23
- package/test-suites/helpers/test-config.ts +14 -13
- package/test-suites/ui/accessibility.spec.ts +27 -22
- package/test-suites/ui/smoke.spec.ts +26 -21
- package/dist/commands/computer-setup-commands.d.ts +0 -53
- package/dist/commands/computer-setup-commands.d.ts.map +0 -1
- package/dist/commands/computer-setup-commands.js +0 -705
- package/dist/commands/computer-setup-commands.js.map +0 -1
- package/dist/commands/vp.d.ts +0 -7
- package/dist/commands/vp.d.ts.map +0 -1
- package/dist/commands/vp.js +0 -571
- package/dist/commands/vp.js.map +0 -1
- package/src/commands/computer-setup-commands.ts +0 -872
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Debug Logger - Verbose/debug mode with detailed logging and TTY detection.
|
|
4
|
+
*
|
|
5
|
+
* Provides:
|
|
6
|
+
* - Verbosity levels (silent, error, warn, info, debug, trace)
|
|
7
|
+
* - Pipe-friendly output (auto-detects TTY vs piped output)
|
|
8
|
+
* - Structured log entries with timestamps and context
|
|
9
|
+
* - Color-coded output with chalk (disabled for non-TTY)
|
|
10
|
+
* - Performance timing helpers
|
|
11
|
+
* - Log filtering by tag/component
|
|
12
|
+
*
|
|
13
|
+
* @module framework/debug-logger
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.TaggedLogger = exports.DebugLogger = void 0;
|
|
17
|
+
const tslib_1 = require("tslib");
|
|
18
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Constants
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
const LEVEL_ORDER = {
|
|
23
|
+
silent: 0,
|
|
24
|
+
error: 1,
|
|
25
|
+
warn: 2,
|
|
26
|
+
info: 3,
|
|
27
|
+
debug: 4,
|
|
28
|
+
trace: 5,
|
|
29
|
+
};
|
|
30
|
+
const LEVEL_LABELS = {
|
|
31
|
+
silent: '',
|
|
32
|
+
error: 'ERR',
|
|
33
|
+
warn: 'WRN',
|
|
34
|
+
info: 'INF',
|
|
35
|
+
debug: 'DBG',
|
|
36
|
+
trace: 'TRC',
|
|
37
|
+
};
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Debug Logger
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
class DebugLogger {
|
|
42
|
+
level;
|
|
43
|
+
isTTY;
|
|
44
|
+
noColor;
|
|
45
|
+
showTimestamps;
|
|
46
|
+
includeTags;
|
|
47
|
+
excludeTags;
|
|
48
|
+
write;
|
|
49
|
+
writeError;
|
|
50
|
+
timers = new Map();
|
|
51
|
+
entries = [];
|
|
52
|
+
collectEntries;
|
|
53
|
+
constructor(options = {}) {
|
|
54
|
+
this.level = options.level ?? 'info';
|
|
55
|
+
this.isTTY = options.isTTY ?? process.stdout.isTTY === true;
|
|
56
|
+
this.noColor =
|
|
57
|
+
options.noColor ?? (process.env['NO_COLOR'] === '1' || !this.isTTY);
|
|
58
|
+
this.showTimestamps =
|
|
59
|
+
options.timestamps ?? (this.level === 'debug' || this.level === 'trace');
|
|
60
|
+
this.includeTags = options.includeTags
|
|
61
|
+
? new Set(options.includeTags)
|
|
62
|
+
: null;
|
|
63
|
+
this.excludeTags = new Set(options.excludeTags ?? []);
|
|
64
|
+
this.write = options.write ?? ((msg) => process.stderr.write(msg));
|
|
65
|
+
this.writeError =
|
|
66
|
+
options.writeError ?? ((msg) => process.stderr.write(msg));
|
|
67
|
+
this.collectEntries = options.collectEntries ?? false;
|
|
68
|
+
// Disable chalk color if not TTY or noColor
|
|
69
|
+
if (this.noColor) {
|
|
70
|
+
chalk_1.default.level = 0;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Create a logger from global CLI options.
|
|
75
|
+
*/
|
|
76
|
+
static fromGlobalOptions(options) {
|
|
77
|
+
let level = 'info';
|
|
78
|
+
if (options.quiet)
|
|
79
|
+
level = 'error';
|
|
80
|
+
if (options.verbose)
|
|
81
|
+
level = 'debug';
|
|
82
|
+
return new DebugLogger({
|
|
83
|
+
level,
|
|
84
|
+
noColor: options.noColor,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// -------------------------------------------------------------------------
|
|
88
|
+
// Core log methods implementing ContextLogger
|
|
89
|
+
// -------------------------------------------------------------------------
|
|
90
|
+
debug(message, ...args) {
|
|
91
|
+
this.log('debug', message, undefined, args.length > 0 ? args : undefined);
|
|
92
|
+
}
|
|
93
|
+
info(message, ...args) {
|
|
94
|
+
this.log('info', message, undefined, args.length > 0 ? args : undefined);
|
|
95
|
+
}
|
|
96
|
+
warn(message, ...args) {
|
|
97
|
+
this.log('warn', message, undefined, args.length > 0 ? args : undefined);
|
|
98
|
+
}
|
|
99
|
+
error(message, ...args) {
|
|
100
|
+
this.log('error', message, undefined, args.length > 0 ? args : undefined);
|
|
101
|
+
}
|
|
102
|
+
success(message, ...args) {
|
|
103
|
+
this.log('info', message, undefined, args.length > 0 ? args : undefined, true);
|
|
104
|
+
}
|
|
105
|
+
trace(message, ...args) {
|
|
106
|
+
this.log('trace', message, undefined, args.length > 0 ? args : undefined);
|
|
107
|
+
}
|
|
108
|
+
// -------------------------------------------------------------------------
|
|
109
|
+
// Tagged logging
|
|
110
|
+
// -------------------------------------------------------------------------
|
|
111
|
+
/**
|
|
112
|
+
* Create a tagged sub-logger that prefixes all messages with a component tag.
|
|
113
|
+
*/
|
|
114
|
+
tagged(tag) {
|
|
115
|
+
return new TaggedLogger(this, tag);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Log a message with a specific tag.
|
|
119
|
+
*/
|
|
120
|
+
logTagged(level, tag, message, data) {
|
|
121
|
+
this.log(level, message, tag, data);
|
|
122
|
+
}
|
|
123
|
+
// -------------------------------------------------------------------------
|
|
124
|
+
// Performance timing
|
|
125
|
+
// -------------------------------------------------------------------------
|
|
126
|
+
/**
|
|
127
|
+
* Start a performance timer.
|
|
128
|
+
*
|
|
129
|
+
* @param label - Timer label
|
|
130
|
+
*/
|
|
131
|
+
time(label) {
|
|
132
|
+
this.timers.set(label, performance.now());
|
|
133
|
+
this.log('debug', `Timer started: ${label}`);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* End a performance timer and log the duration.
|
|
137
|
+
*
|
|
138
|
+
* @param label - Timer label
|
|
139
|
+
* @returns Duration in milliseconds, or -1 if timer not found
|
|
140
|
+
*/
|
|
141
|
+
timeEnd(label) {
|
|
142
|
+
const start = this.timers.get(label);
|
|
143
|
+
if (start === undefined) {
|
|
144
|
+
this.log('warn', `Timer not found: ${label}`);
|
|
145
|
+
return -1;
|
|
146
|
+
}
|
|
147
|
+
const duration = performance.now() - start;
|
|
148
|
+
this.timers.delete(label);
|
|
149
|
+
const entry = {
|
|
150
|
+
timestamp: new Date(),
|
|
151
|
+
level: 'debug',
|
|
152
|
+
message: `Timer ${label}: ${duration.toFixed(2)}ms`,
|
|
153
|
+
tag: 'perf',
|
|
154
|
+
durationMs: duration,
|
|
155
|
+
};
|
|
156
|
+
if (this.collectEntries) {
|
|
157
|
+
this.entries.push(entry);
|
|
158
|
+
}
|
|
159
|
+
this.log('debug', `${label}: ${this.formatDuration(duration)}`);
|
|
160
|
+
return duration;
|
|
161
|
+
}
|
|
162
|
+
// -------------------------------------------------------------------------
|
|
163
|
+
// Pipe-friendly output
|
|
164
|
+
// -------------------------------------------------------------------------
|
|
165
|
+
/**
|
|
166
|
+
* Write data to stdout suitable for piping.
|
|
167
|
+
* Uses plain text without colors when output is piped.
|
|
168
|
+
*
|
|
169
|
+
* @param data - Data to output
|
|
170
|
+
*/
|
|
171
|
+
stdout(data) {
|
|
172
|
+
process.stdout.write(data);
|
|
173
|
+
if (!data.endsWith('\n')) {
|
|
174
|
+
process.stdout.write('\n');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Check if output is being piped (non-TTY).
|
|
179
|
+
*/
|
|
180
|
+
isPiped() {
|
|
181
|
+
return !this.isTTY;
|
|
182
|
+
}
|
|
183
|
+
// -------------------------------------------------------------------------
|
|
184
|
+
// Configuration
|
|
185
|
+
// -------------------------------------------------------------------------
|
|
186
|
+
/**
|
|
187
|
+
* Update the log level at runtime.
|
|
188
|
+
*/
|
|
189
|
+
setLevel(level) {
|
|
190
|
+
this.level = level;
|
|
191
|
+
this.showTimestamps = level === 'debug' || level === 'trace';
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get the current log level.
|
|
195
|
+
*/
|
|
196
|
+
getLevel() {
|
|
197
|
+
return this.level;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get all collected log entries (when collectEntries is enabled).
|
|
201
|
+
*/
|
|
202
|
+
getEntries() {
|
|
203
|
+
return this.entries;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Clear collected entries.
|
|
207
|
+
*/
|
|
208
|
+
clearEntries() {
|
|
209
|
+
this.entries = [];
|
|
210
|
+
}
|
|
211
|
+
// -------------------------------------------------------------------------
|
|
212
|
+
// Private
|
|
213
|
+
// -------------------------------------------------------------------------
|
|
214
|
+
/**
|
|
215
|
+
* Core log implementation.
|
|
216
|
+
*/
|
|
217
|
+
log(level, message, tag, data, isSuccess) {
|
|
218
|
+
// Check level threshold
|
|
219
|
+
if (LEVEL_ORDER[level] > LEVEL_ORDER[this.level]) {
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
// Check tag filters
|
|
223
|
+
if (tag) {
|
|
224
|
+
if (this.excludeTags.has(tag))
|
|
225
|
+
return;
|
|
226
|
+
if (this.includeTags && !this.includeTags.has(tag))
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
// Collect entry
|
|
230
|
+
if (this.collectEntries) {
|
|
231
|
+
this.entries.push({
|
|
232
|
+
timestamp: new Date(),
|
|
233
|
+
level,
|
|
234
|
+
message,
|
|
235
|
+
tag,
|
|
236
|
+
data,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
// Format and write
|
|
240
|
+
const formatted = this.formatMessage(level, message, tag, isSuccess);
|
|
241
|
+
const writeFn = level === 'error' ? this.writeError : this.write;
|
|
242
|
+
writeFn(formatted + '\n');
|
|
243
|
+
// Write data details in debug/trace mode
|
|
244
|
+
if (data !== undefined && LEVEL_ORDER[this.level] >= LEVEL_ORDER['debug']) {
|
|
245
|
+
const dataStr = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
|
|
246
|
+
const indented = dataStr
|
|
247
|
+
.split('\n')
|
|
248
|
+
.map(line => ' ' + line)
|
|
249
|
+
.join('\n');
|
|
250
|
+
writeFn(this.colorize('gray', indented) + '\n');
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Format a log message for display.
|
|
255
|
+
*/
|
|
256
|
+
formatMessage(level, message, tag, isSuccess) {
|
|
257
|
+
const parts = [];
|
|
258
|
+
// Timestamp
|
|
259
|
+
if (this.showTimestamps) {
|
|
260
|
+
const ts = new Date().toISOString().substring(11, 23); // HH:mm:ss.SSS
|
|
261
|
+
parts.push(this.colorize('gray', ts));
|
|
262
|
+
}
|
|
263
|
+
// Level badge
|
|
264
|
+
const label = LEVEL_LABELS[level];
|
|
265
|
+
if (label) {
|
|
266
|
+
parts.push(this.colorizeLevel(level, label));
|
|
267
|
+
}
|
|
268
|
+
// Tag
|
|
269
|
+
if (tag) {
|
|
270
|
+
parts.push(this.colorize('cyan', `[${tag}]`));
|
|
271
|
+
}
|
|
272
|
+
// Message
|
|
273
|
+
if (isSuccess) {
|
|
274
|
+
parts.push(this.colorize('green', message));
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
parts.push(this.colorizeLevelMessage(level, message));
|
|
278
|
+
}
|
|
279
|
+
return parts.join(' ');
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Colorize a level badge.
|
|
283
|
+
*/
|
|
284
|
+
colorizeLevel(level, text) {
|
|
285
|
+
if (this.noColor)
|
|
286
|
+
return `[${text}]`;
|
|
287
|
+
switch (level) {
|
|
288
|
+
case 'error':
|
|
289
|
+
return chalk_1.default.red.bold(`[${text}]`);
|
|
290
|
+
case 'warn':
|
|
291
|
+
return chalk_1.default.yellow(`[${text}]`);
|
|
292
|
+
case 'info':
|
|
293
|
+
return chalk_1.default.blue(`[${text}]`);
|
|
294
|
+
case 'debug':
|
|
295
|
+
return chalk_1.default.gray(`[${text}]`);
|
|
296
|
+
case 'trace':
|
|
297
|
+
return chalk_1.default.dim(`[${text}]`);
|
|
298
|
+
default:
|
|
299
|
+
return `[${text}]`;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Colorize a message based on its level.
|
|
304
|
+
*/
|
|
305
|
+
colorizeLevelMessage(level, text) {
|
|
306
|
+
if (this.noColor)
|
|
307
|
+
return text;
|
|
308
|
+
switch (level) {
|
|
309
|
+
case 'error':
|
|
310
|
+
return chalk_1.default.red(text);
|
|
311
|
+
case 'warn':
|
|
312
|
+
return chalk_1.default.yellow(text);
|
|
313
|
+
case 'trace':
|
|
314
|
+
return chalk_1.default.dim(text);
|
|
315
|
+
default:
|
|
316
|
+
return text;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Apply a color name to text.
|
|
321
|
+
*/
|
|
322
|
+
colorize(color, text) {
|
|
323
|
+
if (this.noColor)
|
|
324
|
+
return text;
|
|
325
|
+
const colorFn = chalk_1.default[color];
|
|
326
|
+
return colorFn ? colorFn(text) : text;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Format a duration in milliseconds to a human-readable string.
|
|
330
|
+
*/
|
|
331
|
+
formatDuration(ms) {
|
|
332
|
+
if (ms < 1)
|
|
333
|
+
return `${(ms * 1000).toFixed(0)}us`;
|
|
334
|
+
if (ms < 1000)
|
|
335
|
+
return `${ms.toFixed(1)}ms`;
|
|
336
|
+
if (ms < 60000)
|
|
337
|
+
return `${(ms / 1000).toFixed(2)}s`;
|
|
338
|
+
return `${(ms / 60000).toFixed(1)}min`;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
exports.DebugLogger = DebugLogger;
|
|
342
|
+
// ---------------------------------------------------------------------------
|
|
343
|
+
// Tagged Logger
|
|
344
|
+
// ---------------------------------------------------------------------------
|
|
345
|
+
/**
|
|
346
|
+
* A logger that prepends a tag to all messages.
|
|
347
|
+
* Created via `DebugLogger.tagged('component')`.
|
|
348
|
+
*/
|
|
349
|
+
class TaggedLogger {
|
|
350
|
+
parent;
|
|
351
|
+
tag;
|
|
352
|
+
constructor(parent, tag) {
|
|
353
|
+
this.parent = parent;
|
|
354
|
+
this.tag = tag;
|
|
355
|
+
}
|
|
356
|
+
debug(message, ...args) {
|
|
357
|
+
this.parent.logTagged('debug', this.tag, message, args.length > 0 ? args : undefined);
|
|
358
|
+
}
|
|
359
|
+
info(message, ...args) {
|
|
360
|
+
this.parent.logTagged('info', this.tag, message, args.length > 0 ? args : undefined);
|
|
361
|
+
}
|
|
362
|
+
warn(message, ...args) {
|
|
363
|
+
this.parent.logTagged('warn', this.tag, message, args.length > 0 ? args : undefined);
|
|
364
|
+
}
|
|
365
|
+
error(message, ...args) {
|
|
366
|
+
this.parent.logTagged('error', this.tag, message, args.length > 0 ? args : undefined);
|
|
367
|
+
}
|
|
368
|
+
success(message, ...args) {
|
|
369
|
+
this.parent.logTagged('info', this.tag, message, args.length > 0 ? args : undefined);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
exports.TaggedLogger = TaggedLogger;
|
|
373
|
+
//# sourceMappingURL=debug-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-logger.js","sourceRoot":"","sources":["../../src/framework/debug-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Error Handler - Centralized error handling with recovery suggestions.
|
|
3
|
+
*
|
|
4
|
+
* Provides:
|
|
5
|
+
* - Typed error codes with hierarchical naming
|
|
6
|
+
* - Contextual recovery suggestions for every error
|
|
7
|
+
* - Consistent formatting across all commands
|
|
8
|
+
* - Verbose mode stack traces
|
|
9
|
+
* - Error wrapping for async operations
|
|
10
|
+
* - Custom error handler registration for extensions
|
|
11
|
+
*
|
|
12
|
+
* @module framework/error-handler
|
|
13
|
+
*/
|
|
14
|
+
import type { CommandContext, CommandDefinition } from './command-interface';
|
|
15
|
+
/**
|
|
16
|
+
* Hierarchical error code type.
|
|
17
|
+
*
|
|
18
|
+
* Format: WUNDR_{DOMAIN}_{NUMBER}
|
|
19
|
+
* Domain groups: CLI, DAEMON, CONFIG, AGENT, MEMORY, PLUGIN, BATCH, SETUP, AUDIT
|
|
20
|
+
*/
|
|
21
|
+
export type ErrorCode = 'WUNDR_CLI_001' | 'WUNDR_CLI_002' | 'WUNDR_CLI_003' | 'WUNDR_CLI_004' | 'WUNDR_CLI_005' | 'WUNDR_DAEMON_001' | 'WUNDR_DAEMON_002' | 'WUNDR_DAEMON_003' | 'WUNDR_DAEMON_004' | 'WUNDR_DAEMON_005' | 'WUNDR_DAEMON_006' | 'WUNDR_CONFIG_001' | 'WUNDR_CONFIG_002' | 'WUNDR_CONFIG_003' | 'WUNDR_CONFIG_004' | 'WUNDR_AGENT_001' | 'WUNDR_AGENT_002' | 'WUNDR_AGENT_003' | 'WUNDR_AGENT_004' | 'WUNDR_AGENT_005' | 'WUNDR_MEMORY_001' | 'WUNDR_MEMORY_002' | 'WUNDR_MEMORY_003' | 'WUNDR_MEMORY_004' | 'WUNDR_PLUGIN_001' | 'WUNDR_PLUGIN_002' | 'WUNDR_PLUGIN_003' | 'WUNDR_PLUGIN_004' | 'WUNDR_BATCH_001' | 'WUNDR_BATCH_002' | 'WUNDR_BATCH_003' | 'WUNDR_BATCH_004' | 'WUNDR_SETUP_001' | 'WUNDR_SETUP_002' | 'WUNDR_SETUP_003' | 'WUNDR_SETUP_004' | 'WUNDR_AUDIT_001' | 'WUNDR_AUDIT_002' | 'WUNDR_SYS_001' | 'WUNDR_SYS_002' | 'WUNDR_SYS_003' | 'WUNDR_SYS_004' | string;
|
|
22
|
+
/**
|
|
23
|
+
* Additional context attached to a CLI error.
|
|
24
|
+
*/
|
|
25
|
+
export interface ErrorDetails {
|
|
26
|
+
/** The command that was running when the error occurred */
|
|
27
|
+
command?: string;
|
|
28
|
+
/** Relevant file path */
|
|
29
|
+
file?: string;
|
|
30
|
+
/** Relevant port number */
|
|
31
|
+
port?: number;
|
|
32
|
+
/** Process ID */
|
|
33
|
+
pid?: number;
|
|
34
|
+
/** Agent or session ID */
|
|
35
|
+
entityId?: string;
|
|
36
|
+
/** Plugin name */
|
|
37
|
+
plugin?: string;
|
|
38
|
+
/** Original error that caused this one */
|
|
39
|
+
cause?: Error;
|
|
40
|
+
/** Arbitrary additional context */
|
|
41
|
+
[key: string]: unknown;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Recovery suggestion displayed to the user.
|
|
45
|
+
*/
|
|
46
|
+
export interface RecoverySuggestion {
|
|
47
|
+
/** Human-readable description of what to do */
|
|
48
|
+
description: string;
|
|
49
|
+
/** Optional command the user can run */
|
|
50
|
+
command?: string;
|
|
51
|
+
/** Optional documentation link */
|
|
52
|
+
docLink?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Typed CLI error with error code, details, and recovery suggestions.
|
|
56
|
+
*
|
|
57
|
+
* All framework-level errors should use this type. Commands create them
|
|
58
|
+
* via `CliErrorHandler.createError()` and throw them; the handler
|
|
59
|
+
* formats them for display.
|
|
60
|
+
*/
|
|
61
|
+
export declare class CliError extends Error {
|
|
62
|
+
readonly code: ErrorCode;
|
|
63
|
+
readonly details: ErrorDetails;
|
|
64
|
+
readonly suggestions: RecoverySuggestion[];
|
|
65
|
+
readonly recoverable: boolean;
|
|
66
|
+
readonly timestamp: Date;
|
|
67
|
+
constructor(code: ErrorCode, message: string, details?: ErrorDetails, suggestions?: RecoverySuggestion[], recoverable?: boolean);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* High-level error classification for routing error handling behavior.
|
|
71
|
+
*/
|
|
72
|
+
export type ErrorClassification = 'user' | 'system' | 'network' | 'config' | 'plugin' | 'unknown';
|
|
73
|
+
/**
|
|
74
|
+
* Classified error with category and recommended action.
|
|
75
|
+
*/
|
|
76
|
+
export interface ClassifiedError {
|
|
77
|
+
classification: ErrorClassification;
|
|
78
|
+
retryable: boolean;
|
|
79
|
+
userFacing: boolean;
|
|
80
|
+
exitCode: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Classify an error code into a high-level category.
|
|
84
|
+
*
|
|
85
|
+
* User errors: bad input, missing args, invalid config values
|
|
86
|
+
* System errors: file not found, permission denied, disk full
|
|
87
|
+
* Network errors: connection refused, timeout, DNS failure
|
|
88
|
+
* Config errors: missing config, validation failure
|
|
89
|
+
* Plugin errors: plugin not found, incompatible, activation failure
|
|
90
|
+
*/
|
|
91
|
+
export declare function classifyError(code: ErrorCode): ClassifiedError;
|
|
92
|
+
/**
|
|
93
|
+
* Classify any Error (including non-CliError) into a high-level category.
|
|
94
|
+
*/
|
|
95
|
+
export declare function classifyAnyError(error: Error): ClassifiedError;
|
|
96
|
+
/**
|
|
97
|
+
* Custom error recovery handler for extending error handling.
|
|
98
|
+
*/
|
|
99
|
+
export interface ErrorRecoveryHandler {
|
|
100
|
+
/** Whether this handler can handle the given error code */
|
|
101
|
+
canHandle(code: ErrorCode): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Attempt to recover from the error.
|
|
104
|
+
* Returns true if recovery succeeded, false otherwise.
|
|
105
|
+
*/
|
|
106
|
+
recover(error: CliError, context: CommandContext): Promise<boolean>;
|
|
107
|
+
}
|
|
108
|
+
export declare class CliErrorHandler {
|
|
109
|
+
private customHandlers;
|
|
110
|
+
private customSuggestions;
|
|
111
|
+
/**
|
|
112
|
+
* Create a typed CLI error.
|
|
113
|
+
*
|
|
114
|
+
* @param code - Error code from the registry
|
|
115
|
+
* @param message - Human-readable error message
|
|
116
|
+
* @param details - Additional context
|
|
117
|
+
* @param recoverable - Whether the error is potentially recoverable
|
|
118
|
+
* @returns A CliError instance
|
|
119
|
+
*/
|
|
120
|
+
createError(code: ErrorCode, message: string, details?: ErrorDetails, recoverable?: boolean): CliError;
|
|
121
|
+
/**
|
|
122
|
+
* Wrap a system error (ENOENT, EACCES, etc.) into a CliError.
|
|
123
|
+
*
|
|
124
|
+
* @param error - The original system error
|
|
125
|
+
* @param context - Additional context about what operation was being performed
|
|
126
|
+
* @returns A CliError with appropriate code and suggestions
|
|
127
|
+
*/
|
|
128
|
+
wrapSystemError(error: Error & {
|
|
129
|
+
code?: string;
|
|
130
|
+
}, context?: string): CliError;
|
|
131
|
+
/**
|
|
132
|
+
* Handle a command execution error.
|
|
133
|
+
*
|
|
134
|
+
* Formats the error for display, including:
|
|
135
|
+
* - Error code and message
|
|
136
|
+
* - Context details
|
|
137
|
+
* - Recovery suggestions
|
|
138
|
+
* - Stack trace (in verbose mode)
|
|
139
|
+
*
|
|
140
|
+
* @param error - The error to handle
|
|
141
|
+
* @param command - The command that was executing
|
|
142
|
+
* @param context - The command context
|
|
143
|
+
*/
|
|
144
|
+
handleCommandError(error: Error, command: CommandDefinition | undefined, context: CommandContext): void;
|
|
145
|
+
/**
|
|
146
|
+
* Wrap an async operation with consistent error handling.
|
|
147
|
+
*
|
|
148
|
+
* @param operation - The async operation to execute
|
|
149
|
+
* @param errorContext - Context string for error messages
|
|
150
|
+
* @param code - Error code to use if the operation fails
|
|
151
|
+
* @returns The operation result
|
|
152
|
+
*/
|
|
153
|
+
withErrorHandling<T>(operation: () => Promise<T>, errorContext: string, code?: ErrorCode): Promise<T>;
|
|
154
|
+
/**
|
|
155
|
+
* Register a custom error recovery handler.
|
|
156
|
+
*
|
|
157
|
+
* @param handler - The recovery handler
|
|
158
|
+
*/
|
|
159
|
+
registerHandler(handler: ErrorRecoveryHandler): void;
|
|
160
|
+
/**
|
|
161
|
+
* Register custom recovery suggestions for an error code.
|
|
162
|
+
*
|
|
163
|
+
* @param code - Error code
|
|
164
|
+
* @param suggestions - Recovery suggestions
|
|
165
|
+
*/
|
|
166
|
+
registerSuggestions(code: string, suggestions: RecoverySuggestion[]): void;
|
|
167
|
+
/**
|
|
168
|
+
* Attempt to recover from an error using registered handlers.
|
|
169
|
+
*
|
|
170
|
+
* @param error - The error to recover from
|
|
171
|
+
* @param context - Command context
|
|
172
|
+
* @returns Whether recovery was successful
|
|
173
|
+
*/
|
|
174
|
+
attemptRecovery(error: CliError, context: CommandContext): Promise<boolean>;
|
|
175
|
+
/**
|
|
176
|
+
* Get recovery suggestions for an error code, merging built-in and custom.
|
|
177
|
+
*/
|
|
178
|
+
private getSuggestions;
|
|
179
|
+
/**
|
|
180
|
+
* Format a CliError for terminal display.
|
|
181
|
+
*/
|
|
182
|
+
private formatCliError;
|
|
183
|
+
/**
|
|
184
|
+
* Format a plain Error for terminal display.
|
|
185
|
+
*/
|
|
186
|
+
private formatPlainError;
|
|
187
|
+
/**
|
|
188
|
+
* Convert an error to a JSON-serializable object.
|
|
189
|
+
*/
|
|
190
|
+
private toJson;
|
|
191
|
+
/**
|
|
192
|
+
* Format a detail value for display.
|
|
193
|
+
*/
|
|
194
|
+
private formatDetailValue;
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../src/framework/error-handler.ts"],"names":[],"mappings":"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"}
|