flow-debugger 1.9.6 → 1.9.8

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.
@@ -126,6 +126,31 @@ function flowDebugger(config) {
126
126
  }
127
127
  catch (_) { }
128
128
  }
129
+ // ✅ CAPTURE RESPONSE BODY (NEW - Phase 1)
130
+ const originalJson = res.json;
131
+ const originalSend = res.send;
132
+ // Capture JSON responses
133
+ res.json = function (body) {
134
+ if (tracer && mergedConfig.captureResponseData) {
135
+ tracer.setResponseData({
136
+ body: body,
137
+ statusCode: res.statusCode,
138
+ size: JSON.stringify(body).length
139
+ });
140
+ }
141
+ return originalJson.call(this, body);
142
+ };
143
+ // Capture text responses
144
+ res.send = function (body) {
145
+ if (tracer && mergedConfig.captureResponseData && typeof body === 'string') {
146
+ tracer.setResponseData({
147
+ body: body,
148
+ statusCode: res.statusCode,
149
+ size: body.length
150
+ });
151
+ }
152
+ return originalSend.call(this, body);
153
+ };
129
154
  // Hook into response finish
130
155
  const originalEnd = res.end;
131
156
  res.end = function (...args) {
@@ -322,25 +347,25 @@ function handleDebuggerRoute(req, res, next, analytics, config) {
322
347
  }
323
348
  /** Inline fallback dashboard if files aren't found */
324
349
  function getInlineDashboard() {
325
- return `<!DOCTYPE html>
326
- <html lang="en">
327
- <head>
328
- <meta charset="UTF-8">
329
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
330
- <title>Flow Debugger Dashboard</title>
331
- <style>body{font-family:system-ui;background:#0a0a1a;color:#e0e0e0;padding:20px}
332
- h1{color:#7c3aed}.card{background:#1a1a2e;border-radius:12px;padding:20px;margin:10px 0;border:1px solid #2a2a4a}</style>
333
- </head>
334
- <body>
335
- <h1>🔍 Flow Debugger</h1>
336
- <p>Dashboard files not found. API available at <a href="/__debugger" style="color:#7c3aed">/__debugger</a></p>
337
- <div class="card" id="data">Loading...</div>
338
- <script>
339
- fetch('/__debugger').then(r=>r.json()).then(d=>{
340
- document.getElementById('data').innerHTML='<pre>'+JSON.stringify(d,null,2)+'</pre>';
341
- });
342
- </script>
343
- </body>
350
+ return `<!DOCTYPE html>
351
+ <html lang="en">
352
+ <head>
353
+ <meta charset="UTF-8">
354
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
355
+ <title>Flow Debugger Dashboard</title>
356
+ <style>body{font-family:system-ui;background:#0a0a1a;color:#e0e0e0;padding:20px}
357
+ h1{color:#7c3aed}.card{background:#1a1a2e;border-radius:12px;padding:20px;margin:10px 0;border:1px solid #2a2a4a}</style>
358
+ </head>
359
+ <body>
360
+ <h1>🔍 Flow Debugger</h1>
361
+ <p>Dashboard files not found. API available at <a href="/__debugger" style="color:#7c3aed">/__debugger</a></p>
362
+ <div class="card" id="data">Loading...</div>
363
+ <script>
364
+ fetch('/__debugger').then(r=>r.json()).then(d=>{
365
+ document.getElementById('data').innerHTML='<pre>'+JSON.stringify(d,null,2)+'</pre>';
366
+ });
367
+ </script>
368
+ </body>
344
369
  </html>`;
345
370
  }
346
371
  //# sourceMappingURL=express.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/middleware/express.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/middleware/express.ts"],"names":[],"mappings":"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"}
@@ -1,63 +1,256 @@
1
1
  // ─────────────────────────────────────────────────────────────
2
2
  // flow-debugger — Root Cause Detection
3
3
  // Analyzes trace steps to identify the most likely failure origin
4
+ // INCLUDING SILENT FAILURES (no console error)
4
5
  // ─────────────────────────────────────────────────────────────
5
6
  /**
6
- * Detect the root cause of a trace failure or slowness.
7
+ * Enhanced root cause detection with suggestions and detailed analysis.
7
8
  *
8
- * Algorithm:
9
- * 1. If response is 500 and a step failed → root cause = first failed step
10
- * 2. If a step timed out → root cause = timeout step (CRITICAL)
11
- * 3. If DB/Redis slow and total latency high → root cause = slow dependency
12
- * 4. If no failures but overall slow root cause = slowest step
9
+ * DETECTS:
10
+ * 1. Error patterns (timeout, connection, validation, etc.)
11
+ * 2. Slow queries and bottlenecks
12
+ * 3. Memory/performance issues
13
+ * 4. SILENT FAILURES (no console error but status codes indicate problems)
14
+ * 5. Empty/null database results without errors
15
+ * 6. Performance degradation trends
16
+ *
17
+ * Provides actionable suggestions for each issue type.
13
18
  */
14
19
  export function detectRootCause(steps, statusCode, config) {
15
20
  if (steps.length === 0)
16
21
  return null;
17
22
  const slowThreshold = config.slowThreshold ?? 300;
18
- // 1. Look for timed-out steps (highest priority)
23
+ const slowQueryThreshold = config.slowQueryThreshold ?? 300;
24
+ const result = {
25
+ cause: '',
26
+ step: '',
27
+ service: 'unknown',
28
+ confidence: 0,
29
+ suggestions: [],
30
+ contributingFactors: []
31
+ };
32
+ // ✅ 1. SILENT FAILURE DETECTION - No console error but status indicates problem
33
+ if (statusCode && statusCode >= 400 && statusCode < 500) {
34
+ // Client errors - might not throw but indicate problems
35
+ if (statusCode === 404) {
36
+ result.cause = 'Resource not found (silent failure - no exception thrown)';
37
+ result.step = 'Request handling';
38
+ result.service = 'internal';
39
+ result.confidence = 90;
40
+ result.suggestions = [
41
+ 'Check if the requested resource exists',
42
+ 'Verify route parameters and IDs',
43
+ 'Review database for missing records',
44
+ 'Check if file/blob exists before accessing'
45
+ ];
46
+ return result;
47
+ }
48
+ if (statusCode === 401 || statusCode === 403) {
49
+ result.cause = 'Authentication/Authorization failed (silent rejection)';
50
+ result.step = 'Auth middleware';
51
+ result.service = 'internal';
52
+ result.confidence = 95;
53
+ result.suggestions = [
54
+ 'Verify user token/credentials',
55
+ 'Check session expiration',
56
+ 'Review permission/role configuration',
57
+ 'Ensure CORS policy allows the request'
58
+ ];
59
+ return result;
60
+ }
61
+ if (statusCode === 429) {
62
+ result.cause = 'Rate limit exceeded (throttled silently)';
63
+ result.step = 'Rate limiter';
64
+ result.service = 'internal';
65
+ result.confidence = 100;
66
+ result.suggestions = [
67
+ 'Implement request throttling on client',
68
+ 'Add exponential backoff',
69
+ 'Cache frequently accessed data',
70
+ 'Consider upgrading API plan'
71
+ ];
72
+ return result;
73
+ }
74
+ }
75
+ // ✅ 2. SILENT DATABASE ISSUES - Returns empty/null without error
76
+ const dbSteps = steps.filter(s => ['mongo', 'mysql', 'postgres', 'redis'].includes(s.service));
77
+ for (const dbStep of dbSteps) {
78
+ const metadata = dbStep.metadata;
79
+ // Check for empty results (might indicate problem)
80
+ if (metadata?.resultCount === 0 && dbStep.name.toLowerCase().includes('find')) {
81
+ result.cause = 'Database query returned empty result (no error thrown)';
82
+ result.step = dbStep.name;
83
+ result.service = dbStep.service;
84
+ result.confidence = 70;
85
+ result.suggestions = [
86
+ 'Verify query conditions are correct',
87
+ 'Check if data exists in database',
88
+ 'Review filter/criteria logic',
89
+ 'Consider if empty result is expected behavior'
90
+ ];
91
+ return result;
92
+ }
93
+ // Check for null/undefined returns
94
+ if (metadata?.result === null || metadata?.result === undefined) {
95
+ result.cause = 'Database operation returned null (silent failure)';
96
+ result.step = dbStep.name;
97
+ result.service = dbStep.service;
98
+ result.confidence = 75;
99
+ result.suggestions = [
100
+ 'Check if document/record exists',
101
+ 'Verify query syntax and collection name',
102
+ 'Review connection pool status',
103
+ 'Check database logs for warnings'
104
+ ];
105
+ return result;
106
+ }
107
+ }
108
+ // 3. Look for timed-out steps (highest priority)
19
109
  const timedOut = steps.find(s => s.status === 'timeout');
20
110
  if (timedOut) {
21
- return {
22
- cause: `${timedOut.name} timed out`,
23
- step: timedOut.name,
24
- service: timedOut.service,
25
- confidence: 100,
26
- };
111
+ result.cause = `${timedOut.name} timed out`;
112
+ result.step = timedOut.name;
113
+ result.service = timedOut.service;
114
+ result.confidence = 100;
115
+ result.suggestions = [
116
+ `Increase timeout for ${getServiceLabel(timedOut.service)} operations`,
117
+ 'Check service health and load',
118
+ 'Add retry logic with exponential backoff',
119
+ 'Consider implementing circuit breaker pattern'
120
+ ];
121
+ return result;
27
122
  }
28
- // 2. Look for failed steps when response is 5xx
29
- if (statusCode && statusCode >= 500) {
30
- const failedSteps = steps.filter(s => s.status === 'error');
31
- if (failedSteps.length > 0) {
32
- // First failure is most likely root cause
33
- const first = failedSteps[0];
34
- return {
35
- cause: `${first.name} failed: ${first.error || 'unknown error'}`,
36
- step: first.name,
37
- service: first.service,
38
- confidence: 95,
39
- };
123
+ // 4. Analyze failed steps with detailed error detection
124
+ const failedSteps = steps.filter(s => s.status === 'error');
125
+ if (failedSteps.length > 0) {
126
+ const firstFailed = failedSteps[0];
127
+ const errorDetails = firstFailed.metadata?.errorDetails;
128
+ // Enhanced error pattern detection
129
+ if (errorDetails) {
130
+ const errorMessage = errorDetails.message?.toLowerCase() || '';
131
+ const errorCode = errorDetails.code;
132
+ // Database timeout
133
+ if (errorMessage.includes('timeout') || errorCode === 'ETIMEDOUT') {
134
+ result.cause = `Database timeout in ${firstFailed.name}`;
135
+ result.step = firstFailed.name;
136
+ result.service = firstFailed.service;
137
+ result.confidence = 90;
138
+ result.errorDetails = errorDetails;
139
+ result.suggestions = [
140
+ 'Increase connection pool size',
141
+ 'Add query timeout configuration',
142
+ 'Check database server load and slow query logs',
143
+ 'Add indexes to improve query performance',
144
+ 'Consider query optimization or caching'
145
+ ];
146
+ return result;
147
+ }
148
+ // Connection refused
149
+ if (errorCode === 'ECONNREFUSED') {
150
+ result.cause = `Service unavailable: ${getServiceLabel(firstFailed.service)} connection refused`;
151
+ result.step = firstFailed.name;
152
+ result.service = firstFailed.service;
153
+ result.confidence = 95;
154
+ result.errorDetails = errorDetails;
155
+ result.suggestions = [
156
+ `Check if ${getServiceLabel(firstFailed.service)} service is running`,
157
+ 'Verify connection string and port configuration',
158
+ 'Check firewall rules and network connectivity',
159
+ 'Review service health and restart if necessary'
160
+ ];
161
+ return result;
162
+ }
163
+ // Authentication/Authorization errors
164
+ if (errorCode === 'EAUTH' || errorCode === 'UNAUTHORIZED' || errorDetails.name === 'UnauthorizedError') {
165
+ result.cause = 'Authentication/Authorization failed';
166
+ result.step = firstFailed.name;
167
+ result.service = firstFailed.service;
168
+ result.confidence = 100;
169
+ result.errorDetails = errorDetails;
170
+ result.suggestions = [
171
+ 'Verify API keys/tokens are valid and not expired',
172
+ 'Check authentication middleware configuration',
173
+ 'Review user permissions and roles',
174
+ 'Ensure CORS policy allows the request origin'
175
+ ];
176
+ return result;
177
+ }
178
+ // Validation errors
179
+ if (errorDetails.name === 'ValidationError' || errorCode === 'VALIDATION_ERROR') {
180
+ result.cause = 'Input validation failed';
181
+ result.step = firstFailed.name;
182
+ result.service = firstFailed.service;
183
+ result.confidence = 100;
184
+ result.errorDetails = errorDetails;
185
+ result.suggestions = [
186
+ `Fix validation error: ${errorDetails.message}`,
187
+ 'Validate input data before sending to API',
188
+ 'Check required fields and data types',
189
+ 'Review schema validation rules'
190
+ ];
191
+ return result;
192
+ }
193
+ // Memory issues
194
+ if (errorMessage.includes('memory') || errorCode === 'ENOMEM') {
195
+ result.cause = 'Memory exhausted';
196
+ result.step = firstFailed.name;
197
+ result.service = firstFailed.service;
198
+ result.confidence = 85;
199
+ result.errorDetails = errorDetails;
200
+ result.suggestions = [
201
+ 'Increase Node.js memory limit (--max-old-space-size)',
202
+ 'Check for memory leaks in application code',
203
+ 'Optimize large data processing (use streams)',
204
+ 'Implement pagination for large datasets',
205
+ 'Monitor memory usage with profiling tools'
206
+ ];
207
+ return result;
208
+ }
209
+ // Rate limiting
210
+ if (errorCode === 'ERATELIMIT' || statusCode === 429) {
211
+ result.cause = 'Rate limit exceeded';
212
+ result.step = firstFailed.name;
213
+ result.service = firstFailed.service;
214
+ result.confidence = 100;
215
+ result.errorDetails = errorDetails;
216
+ result.suggestions = [
217
+ 'Implement request throttling',
218
+ 'Add exponential backoff for retries',
219
+ 'Cache frequently accessed data',
220
+ 'Consider upgrading API plan for higher limits'
221
+ ];
222
+ return result;
223
+ }
40
224
  }
225
+ // Generic error fallback
226
+ result.cause = `${firstFailed.name} failed: ${firstFailed.error || 'unknown error'}`;
227
+ result.step = firstFailed.name;
228
+ result.service = firstFailed.service;
229
+ result.confidence = statusCode && statusCode >= 500 ? 90 : 80;
230
+ result.errorDetails = errorDetails;
231
+ result.suggestions = [
232
+ 'Check error logs for more details',
233
+ 'Review recent code changes',
234
+ 'Verify external service status',
235
+ 'Test with simplified input data'
236
+ ];
237
+ return result;
41
238
  }
42
- // 3. Look for any failed step (even if response isn't 500)
43
- const failedStep = steps.find(s => s.status === 'error');
44
- if (failedStep) {
45
- return {
46
- cause: `${failedStep.name} failed: ${failedStep.error || 'unknown error'}`,
47
- step: failedStep.name,
48
- service: failedStep.service,
49
- confidence: statusCode && statusCode >= 400 ? 90 : 80,
50
- };
51
- }
52
- // 4. Look for slow steps
239
+ // 5. Analyze slow requests (performance degradation)
53
240
  const slowSteps = steps.filter(s => s.duration > slowThreshold);
54
241
  if (slowSteps.length > 0) {
55
- // Slowest step is the most likely bottleneck
242
+ // Find the slowest step
56
243
  const slowest = slowSteps.reduce((a, b) => (a.duration > b.duration ? a : b));
57
244
  const totalDuration = steps.reduce((sum, s) => sum + s.duration, 0);
58
245
  const ratio = slowest.duration / totalDuration;
246
+ // Add contributing factors
247
+ result.contributingFactors = slowSteps.map(s => ({
248
+ step: s.name,
249
+ duration: s.duration,
250
+ service: s.service
251
+ }));
59
252
  // Confidence scales with how much the step dominates total time
60
- let confidence = 50; // base for any slow step
253
+ let confidence = 50;
61
254
  if (ratio > 0.8)
62
255
  confidence = 95;
63
256
  else if (ratio > 0.6)
@@ -66,12 +259,74 @@ export function detectRootCause(steps, statusCode, config) {
66
259
  confidence = 70;
67
260
  else if (ratio > 0.2)
68
261
  confidence = 60;
69
- return {
70
- cause: `Slow ${getServiceLabel(slowest.service)} query: ${slowest.name} (${Math.round(slowest.duration)}ms)`,
71
- step: slowest.name,
72
- service: slowest.service,
73
- confidence,
74
- };
262
+ result.cause = `Slow ${getServiceLabel(slowest.service)} query: ${slowest.name} (${Math.round(slowest.duration)}ms)`;
263
+ result.step = slowest.name;
264
+ result.service = slowest.service;
265
+ result.confidence = confidence;
266
+ // Generate suggestions based on service type
267
+ if (slowest.service === 'mongo') {
268
+ result.suggestions = [
269
+ `Add index to improve MongoDB query: ${slowest.name}`,
270
+ 'Review query with MongoDB profiler',
271
+ 'Consider covering indexes for frequently queried fields',
272
+ 'Use projection to limit returned fields',
273
+ 'Check for collection scans (COLLSCAN) in explain plan'
274
+ ];
275
+ }
276
+ else if (slowest.service === 'mysql' || slowest.service === 'postgres') {
277
+ result.suggestions = [
278
+ `Add index to improve SQL query: ${slowest.name}`,
279
+ 'Run EXPLAIN ANALYZE on the query',
280
+ 'Check for full table scans',
281
+ 'Consider query optimization or denormalization',
282
+ 'Review connection pool configuration'
283
+ ];
284
+ }
285
+ else if (slowest.service === 'redis') {
286
+ result.suggestions = [
287
+ `Optimize Redis operation: ${slowest.name}`,
288
+ 'Check Redis memory usage and eviction policy',
289
+ 'Use pipelining for multiple operations',
290
+ 'Consider using Redis clusters for high load',
291
+ 'Review key expiration policies'
292
+ ];
293
+ }
294
+ else if (slowest.service === 'axios' || slowest.service === 'fetch') {
295
+ result.suggestions = [
296
+ `Optimize HTTP request: ${slowest.name}`,
297
+ 'Add timeout configuration',
298
+ 'Implement request caching',
299
+ 'Use connection pooling',
300
+ 'Check external API response times'
301
+ ];
302
+ }
303
+ else {
304
+ result.suggestions = [
305
+ `Optimize slow operation: ${slowest.name}`,
306
+ 'Profile the code to identify bottlenecks',
307
+ 'Consider caching results',
308
+ 'Review algorithm complexity',
309
+ 'Add performance monitoring'
310
+ ];
311
+ }
312
+ return result;
313
+ }
314
+ // ✅ 6. PERFORMANCE DEGRADATION DETECTION (no specific slow step but overall slow)
315
+ const totalDuration = steps.reduce((sum, s) => sum + s.duration, 0);
316
+ const avgDuration = totalDuration / steps.length;
317
+ if (avgDuration > slowThreshold * 0.8) {
318
+ result.cause = `Overall performance degradation (avg: ${Math.round(avgDuration)}ms per step)`;
319
+ result.step = 'Multiple steps';
320
+ result.service = 'internal';
321
+ result.confidence = 60;
322
+ result.suggestions = [
323
+ 'Review overall request flow',
324
+ 'Check server resource utilization (CPU, memory)',
325
+ 'Monitor database connection pool',
326
+ 'Consider horizontal scaling',
327
+ 'Implement caching strategy'
328
+ ];
329
+ return result;
75
330
  }
76
331
  return null;
77
332
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RootCause.js","sourceRoot":"","sources":["../../../src/core/RootCause.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RootCause.js","sourceRoot":"","sources":["../../../src/core/RootCause.ts"],"names":[],"mappings":"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"}
@@ -25,9 +25,14 @@ const CYAN = '\x1b[36m';
25
25
  * │ [0ms] Request start
26
26
  * │ [2ms] DB find user ✔ (14ms) [mongo]
27
27
  * │ [16ms] Redis cache ❌ (3ms) [redis]
28
+ * │ └─ Connection refused
28
29
  * │ [20ms] Response 200
29
30
  * │
30
- * │ Root cause: Redis cache failed: connection refused
31
+ * │ 🔍 Root cause: Redis cache failed: connection refused
32
+ * │ Service: redis | Confidence: 95%
33
+ * │ 💡 Suggestions:
34
+ * │ 1. Check if Redis service is running
35
+ * │ 2. Verify connection string and port
31
36
  * │ Classification: ERROR
32
37
  * │ Total: 20ms
33
38
  * └────────────────────────────────────────────────────
@@ -37,6 +42,10 @@ export function renderTimeline(trace, logger = console.log) {
37
42
  const divider = '─'.repeat(50);
38
43
  lines.push('');
39
44
  lines.push(`${CYAN}┌─── flow-debugger ── ${trace.traceId} ── ${trace.method} ${trace.endpoint} ───${RESET}`);
45
+ // Status line with emoji
46
+ const statusIcon = trace.classification === 'ERROR' || trace.classification === 'CRITICAL' ? '🔴' :
47
+ trace.classification === 'WARN' ? '🟡' : '🟢';
48
+ lines.push(`${DIM}│ ${statusIcon} Status: ${trace.statusCode || '—'} | Duration: ${Math.round(trace.totalDuration)}ms | Classification: ${trace.classification}${RESET}`);
40
49
  lines.push(`${DIM}│ [0ms] Request start${RESET}`);
41
50
  for (const step of trace.steps) {
42
51
  const offset = Math.round(step.startTime);
@@ -47,8 +56,34 @@ export function renderTimeline(trace, logger = console.log) {
47
56
  const line = `│ [${offset}ms]${' '.repeat(Math.max(1, 5 - String(offset).length))}` +
48
57
  `${levelColor}${step.name} ${icon} (${dur}ms)${RESET}${serviceTag}`;
49
58
  lines.push(line);
59
+ // ✅ Enhanced error display with full details
50
60
  if (step.error) {
51
61
  lines.push(`│ ${DIM}└─ ${step.error}${RESET}`);
62
+ // Show error stack trace (first line only)
63
+ if (step.stackTrace) {
64
+ const stackLine = step.stackTrace.split('\n')[1]?.trim();
65
+ if (stackLine) {
66
+ lines.push(`│ ${DIM} at ${stackLine}${RESET}`);
67
+ }
68
+ }
69
+ // Show error details from metadata
70
+ const errorDetails = step.metadata?.errorDetails;
71
+ if (errorDetails) {
72
+ if (errorDetails.code) {
73
+ lines.push(`│ ${DIM} Code: ${errorDetails.code}${RESET}`);
74
+ }
75
+ if (errorDetails.type) {
76
+ lines.push(`│ ${DIM} Type: ${errorDetails.type}${RESET}`);
77
+ }
78
+ }
79
+ }
80
+ // ✅ Show response body preview
81
+ if (step.name === 'Response Body' && step.metadata?.body) {
82
+ const bodyPreview = JSON.stringify(step.metadata.body).substring(0, 150);
83
+ lines.push(`│ ${LEVEL_COLORS.INFO}└─ Body: ${bodyPreview}...${RESET}`);
84
+ if (step.metadata.size) {
85
+ lines.push(`│ ${DIM} Size: ${step.metadata.size} bytes${RESET}`);
86
+ }
52
87
  }
53
88
  // Slow query warning
54
89
  if (step.classification === 'WARN' && step.duration > 300) {
@@ -58,8 +93,26 @@ export function renderTimeline(trace, logger = console.log) {
58
93
  // Response line
59
94
  lines.push(`${DIM}│ [${Math.round(trace.totalDuration)}ms]${' '.repeat(Math.max(1, 5 - String(Math.round(trace.totalDuration)).length))}Response ${trace.statusCode || '—'}${RESET}`);
60
95
  lines.push('│');
61
- // Root cause
62
- if (trace.rootCause) {
96
+ // ✅ Enhanced Root cause with suggestions
97
+ if (trace.rootCause && 'suggestions' in trace.rootCause) {
98
+ const enhancedRc = trace.rootCause;
99
+ const rcColor = LEVEL_COLORS.ERROR;
100
+ lines.push(`${rcColor}│ 🔍 Root cause: ${enhancedRc.cause}${RESET}`);
101
+ lines.push(`${DIM}│ Service: ${enhancedRc.service} | Confidence: ${enhancedRc.confidence}%${RESET}`);
102
+ if (enhancedRc.suggestions && enhancedRc.suggestions.length > 0) {
103
+ lines.push(`${DIM}│ 💡 Suggestions:${RESET}`);
104
+ enhancedRc.suggestions.forEach((s, i) => {
105
+ lines.push(`${DIM}│ ${i + 1}. ${s}${RESET}`);
106
+ });
107
+ }
108
+ if (enhancedRc.contributingFactors && enhancedRc.contributingFactors.length > 0) {
109
+ lines.push(`${DIM}│ Contributing factors:${RESET}`);
110
+ enhancedRc.contributingFactors.forEach((f) => {
111
+ lines.push(`${DIM}│ - ${f.step} (${f.duration}ms) [${f.service}]${RESET}`);
112
+ });
113
+ }
114
+ }
115
+ else if (trace.rootCause) {
63
116
  const rcColor = LEVEL_COLORS.ERROR;
64
117
  lines.push(`${rcColor}│ 🔍 Root cause: ${trace.rootCause.cause}${RESET}`);
65
118
  lines.push(`${DIM}│ Service: ${trace.rootCause.service} | Confidence: ${trace.rootCause.confidence}%${RESET}`);