agentic-qe 1.9.3 → 1.9.4

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 (108) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +30 -5
  3. package/config/.env.otel.example +25 -0
  4. package/config/OTEL-QUICK-REFERENCE.md +137 -0
  5. package/config/README-OTEL.md +222 -0
  6. package/config/alerting-rules.yml +518 -0
  7. package/config/docker-compose.otel.yml +187 -0
  8. package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
  9. package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
  10. package/config/grafana/provisioning/datasources/datasources.yml +53 -0
  11. package/config/otel-collector-config.yaml.example +145 -0
  12. package/config/prometheus.yml.example +106 -0
  13. package/dist/alerting/AlertManager.d.ts +120 -0
  14. package/dist/alerting/AlertManager.d.ts.map +1 -0
  15. package/dist/alerting/AlertManager.js +345 -0
  16. package/dist/alerting/AlertManager.js.map +1 -0
  17. package/dist/alerting/FeedbackRouter.d.ts +98 -0
  18. package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
  19. package/dist/alerting/FeedbackRouter.js +331 -0
  20. package/dist/alerting/FeedbackRouter.js.map +1 -0
  21. package/dist/alerting/StrategyApplicator.d.ts +120 -0
  22. package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
  23. package/dist/alerting/StrategyApplicator.js +299 -0
  24. package/dist/alerting/StrategyApplicator.js.map +1 -0
  25. package/dist/alerting/index.d.ts +68 -0
  26. package/dist/alerting/index.d.ts.map +1 -0
  27. package/dist/alerting/index.js +112 -0
  28. package/dist/alerting/index.js.map +1 -0
  29. package/dist/alerting/types.d.ts +118 -0
  30. package/dist/alerting/types.d.ts.map +1 -0
  31. package/dist/alerting/types.js +11 -0
  32. package/dist/alerting/types.js.map +1 -0
  33. package/dist/cli/init/claude-config.d.ts.map +1 -1
  34. package/dist/cli/init/claude-config.js +12 -7
  35. package/dist/cli/init/claude-config.js.map +1 -1
  36. package/dist/core/memory/IPatternStore.d.ts +209 -0
  37. package/dist/core/memory/IPatternStore.d.ts.map +1 -0
  38. package/dist/core/memory/IPatternStore.js +15 -0
  39. package/dist/core/memory/IPatternStore.js.map +1 -0
  40. package/dist/core/memory/MigrationTools.d.ts +192 -0
  41. package/dist/core/memory/MigrationTools.d.ts.map +1 -0
  42. package/dist/core/memory/MigrationTools.js +615 -0
  43. package/dist/core/memory/MigrationTools.js.map +1 -0
  44. package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
  45. package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
  46. package/dist/core/memory/NeuralEnhancement.js +598 -0
  47. package/dist/core/memory/NeuralEnhancement.js.map +1 -0
  48. package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
  49. package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
  50. package/dist/core/memory/PatternStoreFactory.js +370 -0
  51. package/dist/core/memory/PatternStoreFactory.js.map +1 -0
  52. package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
  53. package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
  54. package/dist/core/memory/RealAgentDBAdapter.js +28 -20
  55. package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
  56. package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
  57. package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
  58. package/dist/core/memory/RuVectorPatternStore.js +605 -0
  59. package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
  60. package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
  61. package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
  62. package/dist/core/memory/SelfHealingMonitor.js +451 -0
  63. package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
  64. package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
  65. package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
  66. package/dist/core/memory/SwarmMemoryManager.js +97 -0
  67. package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
  68. package/dist/core/memory/index.d.ts +11 -0
  69. package/dist/core/memory/index.d.ts.map +1 -1
  70. package/dist/core/memory/index.js +36 -1
  71. package/dist/core/memory/index.js.map +1 -1
  72. package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
  73. package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
  74. package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
  75. package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
  76. package/dist/reasoning/index.d.ts +2 -0
  77. package/dist/reasoning/index.d.ts.map +1 -1
  78. package/dist/reasoning/index.js +6 -1
  79. package/dist/reasoning/index.js.map +1 -1
  80. package/dist/reporting/ResultAggregator.d.ts +107 -0
  81. package/dist/reporting/ResultAggregator.d.ts.map +1 -0
  82. package/dist/reporting/ResultAggregator.js +435 -0
  83. package/dist/reporting/ResultAggregator.js.map +1 -0
  84. package/dist/reporting/index.d.ts +48 -0
  85. package/dist/reporting/index.d.ts.map +1 -0
  86. package/dist/reporting/index.js +154 -0
  87. package/dist/reporting/index.js.map +1 -0
  88. package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
  89. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
  90. package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
  91. package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
  92. package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
  93. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
  94. package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
  95. package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
  96. package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
  97. package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
  98. package/dist/reporting/reporters/JSONReporter.js +324 -0
  99. package/dist/reporting/reporters/JSONReporter.js.map +1 -0
  100. package/dist/reporting/reporters/index.d.ts +14 -0
  101. package/dist/reporting/reporters/index.d.ts.map +1 -0
  102. package/dist/reporting/reporters/index.js +19 -0
  103. package/dist/reporting/reporters/index.js.map +1 -0
  104. package/dist/reporting/types.d.ts +427 -0
  105. package/dist/reporting/types.d.ts.map +1 -0
  106. package/dist/reporting/types.js +12 -0
  107. package/dist/reporting/types.js.map +1 -0
  108. package/package.json +9 -1
@@ -0,0 +1,524 @@
1
+ "use strict";
2
+ /**
3
+ * Human-Readable Reporter
4
+ *
5
+ * Generates human-friendly console output with colors, formatting,
6
+ * and clear visual hierarchy for quality check results.
7
+ *
8
+ * @module reporting/reporters/HumanReadableReporter
9
+ * @version 1.0.0
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.HumanReadableReporter = void 0;
13
+ /**
14
+ * ANSI color utilities (fallback if chalk is not available)
15
+ */
16
+ const colors = {
17
+ reset: '\x1b[0m',
18
+ bold: '\x1b[1m',
19
+ dim: '\x1b[2m',
20
+ green: '\x1b[32m',
21
+ yellow: '\x1b[33m',
22
+ red: '\x1b[31m',
23
+ blue: '\x1b[34m',
24
+ cyan: '\x1b[36m',
25
+ gray: '\x1b[90m'
26
+ };
27
+ /**
28
+ * Human-Readable Reporter
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const reporter = new HumanReadableReporter({ useColors: true });
33
+ * const output = reporter.report(aggregatedResults);
34
+ * console.log(output.content);
35
+ * ```
36
+ */
37
+ class HumanReadableReporter {
38
+ constructor(config = {}) {
39
+ this.config = {
40
+ format: 'human',
41
+ detailLevel: config.detailLevel || 'detailed',
42
+ useColors: config.useColors !== undefined ? config.useColors : true,
43
+ includeTimestamps: config.includeTimestamps !== undefined ? config.includeTimestamps : true,
44
+ includeMetadata: config.includeMetadata !== undefined ? config.includeMetadata : true
45
+ };
46
+ this.useColors = (this.config.useColors ?? true) && this.supportsColor();
47
+ }
48
+ /**
49
+ * Generate human-readable report
50
+ */
51
+ report(results) {
52
+ const startTime = Date.now();
53
+ const lines = [];
54
+ // Header
55
+ lines.push(...this.generateHeader(results));
56
+ lines.push('');
57
+ // Summary
58
+ lines.push(...this.generateSummary(results));
59
+ lines.push('');
60
+ // Test Results
61
+ lines.push(...this.generateTestResults(results));
62
+ lines.push('');
63
+ // Coverage (if available)
64
+ if (results.coverage) {
65
+ lines.push(...this.generateCoverage(results));
66
+ lines.push('');
67
+ }
68
+ // Quality Metrics (if available)
69
+ if (results.qualityMetrics) {
70
+ lines.push(...this.generateQualityMetrics(results));
71
+ lines.push('');
72
+ }
73
+ // Security (if available)
74
+ if (results.security) {
75
+ lines.push(...this.generateSecurity(results));
76
+ lines.push('');
77
+ }
78
+ // Performance (if available)
79
+ if (results.performance && this.config.detailLevel !== 'summary') {
80
+ lines.push(...this.generatePerformance(results));
81
+ lines.push('');
82
+ }
83
+ // Recommendations
84
+ if (results.summary.recommendations.length > 0) {
85
+ lines.push(...this.generateRecommendations(results));
86
+ lines.push('');
87
+ }
88
+ // Footer
89
+ lines.push(...this.generateFooter(results));
90
+ const content = lines.join('\n');
91
+ const generationDuration = Date.now() - startTime;
92
+ return {
93
+ format: 'human',
94
+ content,
95
+ timestamp: new Date().toISOString(),
96
+ size: Buffer.byteLength(content, 'utf8'),
97
+ generationDuration
98
+ };
99
+ }
100
+ /**
101
+ * Generate header
102
+ */
103
+ generateHeader(results) {
104
+ const lines = [];
105
+ const width = 80;
106
+ lines.push(this.hr('=', width));
107
+ lines.push(this.center('QUALITY CHECK REPORT', width));
108
+ if (results.project.name) {
109
+ lines.push(this.center(results.project.name, width));
110
+ }
111
+ if (this.config.includeTimestamps) {
112
+ lines.push(this.center(new Date(results.timestamp).toLocaleString(), width));
113
+ }
114
+ lines.push(this.hr('=', width));
115
+ return lines;
116
+ }
117
+ /**
118
+ * Generate summary section
119
+ */
120
+ generateSummary(results) {
121
+ const lines = [];
122
+ lines.push(this.sectionTitle('SUMMARY'));
123
+ lines.push('');
124
+ // Overall Status
125
+ const statusIcon = this.getStatusIcon(results.status);
126
+ const statusColor = this.getStatusColor(results.status);
127
+ lines.push(` ${statusIcon} Overall Status: ${this.colorize(results.status.toUpperCase(), statusColor)}`);
128
+ lines.push(` ${this.dim(results.summary.message)}`);
129
+ lines.push('');
130
+ // Key Metrics
131
+ const metrics = [
132
+ ['Tests Passed', `${results.testResults.passed}/${results.testResults.total}`, this.getTestStatusColor(results.testResults.passRate)],
133
+ ['Pass Rate', `${(results.testResults.passRate * 100).toFixed(1)}%`, this.getTestStatusColor(results.testResults.passRate)],
134
+ ['Coverage', results.coverage ? `${results.coverage.overall.toFixed(1)}%` : 'N/A', results.coverage ? this.getCoverageColor(results.coverage.overall) : 'gray'],
135
+ ['Quality Score', results.qualityMetrics ? `${results.qualityMetrics.score} (${results.qualityMetrics.grade})` : 'N/A', results.qualityMetrics ? this.getQualityColor(results.qualityMetrics.score) : 'gray'],
136
+ ['Security Score', results.security ? `${results.security.score}` : 'N/A', results.security ? this.getSecurityColor(results.security.score) : 'gray']
137
+ ];
138
+ const maxLabelWidth = Math.max(...metrics.map(m => m[0].length));
139
+ for (const [label, value, color] of metrics) {
140
+ const paddedLabel = label.padEnd(maxLabelWidth);
141
+ lines.push(` ${this.dim(paddedLabel)} : ${this.colorize(value, color)}`);
142
+ }
143
+ // Deployment Ready
144
+ lines.push('');
145
+ const deployIcon = results.summary.deploymentReady ? '✓' : '✗';
146
+ const deployColor = results.summary.deploymentReady ? 'green' : 'red';
147
+ const deployText = results.summary.deploymentReady ? 'READY' : 'BLOCKED';
148
+ lines.push(` ${deployIcon} Deployment: ${this.colorize(deployText, deployColor)}`);
149
+ return lines;
150
+ }
151
+ /**
152
+ * Generate test results section
153
+ */
154
+ generateTestResults(results) {
155
+ const lines = [];
156
+ lines.push(this.sectionTitle('TEST RESULTS'));
157
+ lines.push('');
158
+ const { testResults } = results;
159
+ // Test counts
160
+ const data = [
161
+ ['Total', testResults.total.toString()],
162
+ ['Passed', this.colorize(testResults.passed.toString(), 'green')],
163
+ ['Failed', testResults.failed > 0 ? this.colorize(testResults.failed.toString(), 'red') : '0'],
164
+ ['Skipped', testResults.skipped.toString()],
165
+ ];
166
+ if (testResults.flaky !== undefined && testResults.flaky > 0) {
167
+ data.push(['Flaky', this.colorize(testResults.flaky.toString(), 'yellow')]);
168
+ }
169
+ data.push(['Duration', `${(testResults.duration / 1000).toFixed(2)}s`]);
170
+ lines.push(...this.formatKeyValue(data));
171
+ // Progress bar
172
+ if (testResults.total > 0) {
173
+ lines.push('');
174
+ lines.push(' ' + this.progressBar(testResults.passRate, 40));
175
+ }
176
+ // Failed tests detail
177
+ if (this.config.detailLevel !== 'summary' && testResults.failed > 0) {
178
+ lines.push('');
179
+ lines.push(this.bold(' Failed Tests:'));
180
+ const failedTests = testResults.tests
181
+ .filter(t => t.status === 'failed')
182
+ .slice(0, 10);
183
+ for (const test of failedTests) {
184
+ lines.push(` ${this.colorize('✗', 'red')} ${test.name}`);
185
+ if (test.error) {
186
+ lines.push(` ${this.dim(this.truncate(test.error, 80))}`);
187
+ }
188
+ }
189
+ if (testResults.failed > 10) {
190
+ lines.push(` ${this.dim(`... and ${testResults.failed - 10} more`)}`);
191
+ }
192
+ }
193
+ return lines;
194
+ }
195
+ /**
196
+ * Generate coverage section
197
+ */
198
+ generateCoverage(results) {
199
+ const lines = [];
200
+ if (!results.coverage) {
201
+ return lines;
202
+ }
203
+ lines.push(this.sectionTitle('CODE COVERAGE'));
204
+ lines.push('');
205
+ const { coverage } = results;
206
+ const data = [
207
+ ['Overall', `${coverage.overall.toFixed(1)}%`, this.getCoverageBar(coverage.overall)],
208
+ ['Lines', `${coverage.lines.percentage.toFixed(1)}%`, this.getCoverageBar(coverage.lines.percentage)],
209
+ ['Branches', `${coverage.branches.percentage.toFixed(1)}%`, this.getCoverageBar(coverage.branches.percentage)],
210
+ ['Functions', `${coverage.functions.percentage.toFixed(1)}%`, this.getCoverageBar(coverage.functions.percentage)],
211
+ ['Statements', `${coverage.statements.percentage.toFixed(1)}%`, this.getCoverageBar(coverage.statements.percentage)]
212
+ ];
213
+ for (const [label, value, bar] of data) {
214
+ lines.push(` ${label.padEnd(12)} ${value.padStart(7)} ${bar}`);
215
+ }
216
+ // Coverage trend
217
+ if (coverage.trend) {
218
+ lines.push('');
219
+ const trendIcon = coverage.trend === 'improving' ? '↗' : coverage.trend === 'degrading' ? '↘' : '→';
220
+ const trendColor = coverage.trend === 'improving' ? 'green' : coverage.trend === 'degrading' ? 'red' : 'gray';
221
+ lines.push(` Trend: ${this.colorize(trendIcon + ' ' + coverage.trend, trendColor)}`);
222
+ }
223
+ return lines;
224
+ }
225
+ /**
226
+ * Generate quality metrics section
227
+ */
228
+ generateQualityMetrics(results) {
229
+ const lines = [];
230
+ if (!results.qualityMetrics) {
231
+ return lines;
232
+ }
233
+ lines.push(this.sectionTitle('QUALITY METRICS'));
234
+ lines.push('');
235
+ const { qualityMetrics } = results;
236
+ lines.push(` Overall Score: ${this.colorize(qualityMetrics.score.toString(), this.getQualityColor(qualityMetrics.score))} / 100 (Grade ${this.bold(qualityMetrics.grade)})`);
237
+ lines.push('');
238
+ const data = [
239
+ ['Maintainability', qualityMetrics.codeQuality.maintainabilityIndex.toString()],
240
+ ['Complexity', qualityMetrics.codeQuality.cyclomaticComplexity.toString()],
241
+ ['Technical Debt', `${qualityMetrics.codeQuality.technicalDebt}h`],
242
+ ['Code Smells', qualityMetrics.codeQuality.codeSmells.toString()],
243
+ ['Duplications', `${qualityMetrics.codeQuality.duplications.toFixed(1)}%`]
244
+ ];
245
+ lines.push(...this.formatKeyValue(data));
246
+ if (qualityMetrics.gates) {
247
+ lines.push('');
248
+ lines.push(this.bold(' Quality Gates:'));
249
+ for (const gate of qualityMetrics.gates.slice(0, 5)) {
250
+ const icon = gate.status === 'passed' ? '✓' : '✗';
251
+ const color = gate.status === 'passed' ? 'green' : 'red';
252
+ lines.push(` ${this.colorize(icon, color)} ${gate.name}: ${gate.message}`);
253
+ }
254
+ }
255
+ return lines;
256
+ }
257
+ /**
258
+ * Generate security section
259
+ */
260
+ generateSecurity(results) {
261
+ const lines = [];
262
+ if (!results.security) {
263
+ return lines;
264
+ }
265
+ lines.push(this.sectionTitle('SECURITY'));
266
+ lines.push('');
267
+ const { security } = results;
268
+ lines.push(` Security Score: ${this.colorize(security.score.toString(), this.getSecurityColor(security.score))} / 100`);
269
+ lines.push('');
270
+ const data = [
271
+ ['Critical', security.summary.critical > 0 ? this.colorize(security.summary.critical.toString(), 'red') : '0'],
272
+ ['High', security.summary.high > 0 ? this.colorize(security.summary.high.toString(), 'yellow') : '0'],
273
+ ['Medium', security.summary.medium.toString()],
274
+ ['Low', security.summary.low.toString()],
275
+ ['Info', security.summary.info.toString()],
276
+ ['Total', security.total.toString()]
277
+ ];
278
+ lines.push(...this.formatKeyValue(data));
279
+ // Show critical vulnerabilities
280
+ if (security.summary.critical > 0 && security.vulnerabilities) {
281
+ lines.push('');
282
+ lines.push(this.colorize(' CRITICAL VULNERABILITIES:', 'red'));
283
+ const critical = security.vulnerabilities.filter(v => v.severity === 'critical').slice(0, 5);
284
+ for (const vuln of critical) {
285
+ lines.push(` • ${this.bold(vuln.title)}`);
286
+ lines.push(` ${this.dim(this.truncate(vuln.description, 80))}`);
287
+ if (vuln.file) {
288
+ lines.push(` ${this.dim(`File: ${vuln.file}`)}`);
289
+ }
290
+ }
291
+ }
292
+ return lines;
293
+ }
294
+ /**
295
+ * Generate performance section
296
+ */
297
+ generatePerformance(results) {
298
+ const lines = [];
299
+ if (!results.performance) {
300
+ return lines;
301
+ }
302
+ lines.push(this.sectionTitle('PERFORMANCE'));
303
+ lines.push('');
304
+ const { performance } = results;
305
+ const data = [
306
+ ['Response Time (P50)', `${performance.responseTime.median.toFixed(2)}ms`],
307
+ ['Response Time (P95)', `${performance.responseTime.p95.toFixed(2)}ms`],
308
+ ['Response Time (P99)', `${performance.responseTime.p99.toFixed(2)}ms`],
309
+ ['Throughput', `${performance.throughput.toFixed(2)} req/s`],
310
+ ['Error Rate', `${(performance.errorRate * 100).toFixed(2)}%`],
311
+ ['CPU Usage', `${performance.resources.cpu.toFixed(1)}%`],
312
+ ['Memory Usage', `${performance.resources.memory.toFixed(1)}MB`]
313
+ ];
314
+ lines.push(...this.formatKeyValue(data));
315
+ return lines;
316
+ }
317
+ /**
318
+ * Generate recommendations section
319
+ */
320
+ generateRecommendations(results) {
321
+ const lines = [];
322
+ lines.push(this.sectionTitle('RECOMMENDATIONS'));
323
+ lines.push('');
324
+ for (let i = 0; i < results.summary.recommendations.length; i++) {
325
+ lines.push(` ${i + 1}. ${results.summary.recommendations[i]}`);
326
+ }
327
+ return lines;
328
+ }
329
+ /**
330
+ * Generate footer
331
+ */
332
+ generateFooter(results) {
333
+ const lines = [];
334
+ const width = 80;
335
+ lines.push(this.hr('-', width));
336
+ if (this.config.includeMetadata) {
337
+ const duration = (results.metadata.duration / 1000).toFixed(2);
338
+ lines.push(this.dim(this.center(`Execution ID: ${results.executionId}`, width)));
339
+ lines.push(this.dim(this.center(`Completed in ${duration}s`, width)));
340
+ }
341
+ lines.push(this.hr('=', width));
342
+ return lines;
343
+ }
344
+ // ==================== Utility Methods ====================
345
+ getFormat() {
346
+ return 'human';
347
+ }
348
+ validateConfig(config) {
349
+ return config.format === 'human';
350
+ }
351
+ /**
352
+ * Horizontal rule
353
+ */
354
+ hr(char, width) {
355
+ return char.repeat(width);
356
+ }
357
+ /**
358
+ * Center text
359
+ */
360
+ center(text, width) {
361
+ const padding = Math.max(0, width - text.length);
362
+ const leftPad = Math.floor(padding / 2);
363
+ const rightPad = padding - leftPad;
364
+ return ' '.repeat(leftPad) + text + ' '.repeat(rightPad);
365
+ }
366
+ /**
367
+ * Section title
368
+ */
369
+ sectionTitle(title) {
370
+ return this.bold(this.colorize(`── ${title} `, 'cyan')) + this.dim('─'.repeat(80 - title.length - 4));
371
+ }
372
+ /**
373
+ * Format key-value pairs
374
+ */
375
+ formatKeyValue(data) {
376
+ const maxKeyWidth = Math.max(...data.map(([key]) => key.length));
377
+ return data.map(([key, value]) => {
378
+ const paddedKey = key.padEnd(maxKeyWidth);
379
+ return ` ${this.dim(paddedKey)} : ${value}`;
380
+ });
381
+ }
382
+ /**
383
+ * Progress bar
384
+ */
385
+ progressBar(progress, width) {
386
+ const filled = Math.round(progress * width);
387
+ const empty = width - filled;
388
+ const bar = '█'.repeat(filled) + '░'.repeat(empty);
389
+ const percentage = (progress * 100).toFixed(1);
390
+ const color = this.getProgressColor(progress);
391
+ return `${this.colorize(bar, color)} ${percentage}%`;
392
+ }
393
+ /**
394
+ * Coverage bar
395
+ */
396
+ getCoverageBar(percentage) {
397
+ return this.progressBar(percentage / 100, 20);
398
+ }
399
+ /**
400
+ * Truncate text
401
+ */
402
+ truncate(text, maxLength) {
403
+ if (text.length <= maxLength)
404
+ return text;
405
+ return text.substring(0, maxLength - 3) + '...';
406
+ }
407
+ /**
408
+ * Colorize text
409
+ */
410
+ colorize(text, color) {
411
+ if (!this.useColors)
412
+ return text;
413
+ const colorCode = colors[color] || colors.reset;
414
+ return `${colorCode}${text}${colors.reset}`;
415
+ }
416
+ /**
417
+ * Bold text
418
+ */
419
+ bold(text) {
420
+ if (!this.useColors)
421
+ return text;
422
+ return `${colors.bold}${text}${colors.reset}`;
423
+ }
424
+ /**
425
+ * Dim text
426
+ */
427
+ dim(text) {
428
+ if (!this.useColors)
429
+ return text;
430
+ return `${colors.dim}${text}${colors.reset}`;
431
+ }
432
+ /**
433
+ * Get status icon
434
+ */
435
+ getStatusIcon(status) {
436
+ const icons = {
437
+ success: '✓',
438
+ warning: '⚠',
439
+ failure: '✗',
440
+ error: '⚠'
441
+ };
442
+ return icons[status];
443
+ }
444
+ /**
445
+ * Get status color
446
+ */
447
+ getStatusColor(status) {
448
+ const colors = {
449
+ success: 'green',
450
+ warning: 'yellow',
451
+ failure: 'red',
452
+ error: 'red'
453
+ };
454
+ return colors[status];
455
+ }
456
+ /**
457
+ * Get test status color
458
+ */
459
+ getTestStatusColor(passRate) {
460
+ if (passRate >= 0.95)
461
+ return 'green';
462
+ if (passRate >= 0.85)
463
+ return 'yellow';
464
+ return 'red';
465
+ }
466
+ /**
467
+ * Get coverage color
468
+ */
469
+ getCoverageColor(percentage) {
470
+ if (percentage >= 80)
471
+ return 'green';
472
+ if (percentage >= 60)
473
+ return 'yellow';
474
+ return 'red';
475
+ }
476
+ /**
477
+ * Get quality color
478
+ */
479
+ getQualityColor(score) {
480
+ if (score >= 85)
481
+ return 'green';
482
+ if (score >= 70)
483
+ return 'yellow';
484
+ return 'red';
485
+ }
486
+ /**
487
+ * Get security color
488
+ */
489
+ getSecurityColor(score) {
490
+ if (score >= 90)
491
+ return 'green';
492
+ if (score >= 70)
493
+ return 'yellow';
494
+ return 'red';
495
+ }
496
+ /**
497
+ * Get progress color
498
+ */
499
+ getProgressColor(progress) {
500
+ if (progress >= 0.8)
501
+ return 'green';
502
+ if (progress >= 0.6)
503
+ return 'yellow';
504
+ return 'red';
505
+ }
506
+ /**
507
+ * Check if terminal supports color
508
+ */
509
+ supportsColor() {
510
+ if (typeof process === 'undefined')
511
+ return false;
512
+ if (process.env.NO_COLOR)
513
+ return false;
514
+ if (process.env.FORCE_COLOR)
515
+ return true;
516
+ if (process.platform === 'win32')
517
+ return true;
518
+ if (process.stdout && !process.stdout.isTTY)
519
+ return false;
520
+ return true;
521
+ }
522
+ }
523
+ exports.HumanReadableReporter = HumanReadableReporter;
524
+ //# sourceMappingURL=HumanReadableReporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HumanReadableReporter.js","sourceRoot":"","sources":["../../../src/reporting/reporters/HumanReadableReporter.ts"],"names":[],"mappings":"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"}