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.
- package/CHANGELOG.md +54 -0
- package/README.md +30 -5
- package/config/.env.otel.example +25 -0
- package/config/OTEL-QUICK-REFERENCE.md +137 -0
- package/config/README-OTEL.md +222 -0
- package/config/alerting-rules.yml +518 -0
- package/config/docker-compose.otel.yml +187 -0
- package/config/grafana/dashboards/agentic-qe-overview.json +286 -0
- package/config/grafana/provisioning/dashboards/dashboards.yml +19 -0
- package/config/grafana/provisioning/datasources/datasources.yml +53 -0
- package/config/otel-collector-config.yaml.example +145 -0
- package/config/prometheus.yml.example +106 -0
- package/dist/alerting/AlertManager.d.ts +120 -0
- package/dist/alerting/AlertManager.d.ts.map +1 -0
- package/dist/alerting/AlertManager.js +345 -0
- package/dist/alerting/AlertManager.js.map +1 -0
- package/dist/alerting/FeedbackRouter.d.ts +98 -0
- package/dist/alerting/FeedbackRouter.d.ts.map +1 -0
- package/dist/alerting/FeedbackRouter.js +331 -0
- package/dist/alerting/FeedbackRouter.js.map +1 -0
- package/dist/alerting/StrategyApplicator.d.ts +120 -0
- package/dist/alerting/StrategyApplicator.d.ts.map +1 -0
- package/dist/alerting/StrategyApplicator.js +299 -0
- package/dist/alerting/StrategyApplicator.js.map +1 -0
- package/dist/alerting/index.d.ts +68 -0
- package/dist/alerting/index.d.ts.map +1 -0
- package/dist/alerting/index.js +112 -0
- package/dist/alerting/index.js.map +1 -0
- package/dist/alerting/types.d.ts +118 -0
- package/dist/alerting/types.d.ts.map +1 -0
- package/dist/alerting/types.js +11 -0
- package/dist/alerting/types.js.map +1 -0
- package/dist/cli/init/claude-config.d.ts.map +1 -1
- package/dist/cli/init/claude-config.js +12 -7
- package/dist/cli/init/claude-config.js.map +1 -1
- package/dist/core/memory/IPatternStore.d.ts +209 -0
- package/dist/core/memory/IPatternStore.d.ts.map +1 -0
- package/dist/core/memory/IPatternStore.js +15 -0
- package/dist/core/memory/IPatternStore.js.map +1 -0
- package/dist/core/memory/MigrationTools.d.ts +192 -0
- package/dist/core/memory/MigrationTools.d.ts.map +1 -0
- package/dist/core/memory/MigrationTools.js +615 -0
- package/dist/core/memory/MigrationTools.js.map +1 -0
- package/dist/core/memory/NeuralEnhancement.d.ts +154 -0
- package/dist/core/memory/NeuralEnhancement.d.ts.map +1 -0
- package/dist/core/memory/NeuralEnhancement.js +598 -0
- package/dist/core/memory/NeuralEnhancement.js.map +1 -0
- package/dist/core/memory/PatternStoreFactory.d.ts +143 -0
- package/dist/core/memory/PatternStoreFactory.d.ts.map +1 -0
- package/dist/core/memory/PatternStoreFactory.js +370 -0
- package/dist/core/memory/PatternStoreFactory.js.map +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts +1 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +28 -20
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.d.ts +198 -0
- package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -0
- package/dist/core/memory/RuVectorPatternStore.js +605 -0
- package/dist/core/memory/RuVectorPatternStore.js.map +1 -0
- package/dist/core/memory/SelfHealingMonitor.d.ts +186 -0
- package/dist/core/memory/SelfHealingMonitor.d.ts.map +1 -0
- package/dist/core/memory/SelfHealingMonitor.js +451 -0
- package/dist/core/memory/SelfHealingMonitor.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +62 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +97 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +11 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +36 -1
- package/dist/core/memory/index.js.map +1 -1
- package/dist/reasoning/RuVectorReasoningAdapter.d.ts +232 -0
- package/dist/reasoning/RuVectorReasoningAdapter.d.ts.map +1 -0
- package/dist/reasoning/RuVectorReasoningAdapter.js +585 -0
- package/dist/reasoning/RuVectorReasoningAdapter.js.map +1 -0
- package/dist/reasoning/index.d.ts +2 -0
- package/dist/reasoning/index.d.ts.map +1 -1
- package/dist/reasoning/index.js +6 -1
- package/dist/reasoning/index.js.map +1 -1
- package/dist/reporting/ResultAggregator.d.ts +107 -0
- package/dist/reporting/ResultAggregator.d.ts.map +1 -0
- package/dist/reporting/ResultAggregator.js +435 -0
- package/dist/reporting/ResultAggregator.js.map +1 -0
- package/dist/reporting/index.d.ts +48 -0
- package/dist/reporting/index.d.ts.map +1 -0
- package/dist/reporting/index.js +154 -0
- package/dist/reporting/index.js.map +1 -0
- package/dist/reporting/reporters/ControlLoopReporter.d.ts +128 -0
- package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/ControlLoopReporter.js +417 -0
- package/dist/reporting/reporters/ControlLoopReporter.js.map +1 -0
- package/dist/reporting/reporters/HumanReadableReporter.d.ts +140 -0
- package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/HumanReadableReporter.js +524 -0
- package/dist/reporting/reporters/HumanReadableReporter.js.map +1 -0
- package/dist/reporting/reporters/JSONReporter.d.ts +193 -0
- package/dist/reporting/reporters/JSONReporter.d.ts.map +1 -0
- package/dist/reporting/reporters/JSONReporter.js +324 -0
- package/dist/reporting/reporters/JSONReporter.js.map +1 -0
- package/dist/reporting/reporters/index.d.ts +14 -0
- package/dist/reporting/reporters/index.d.ts.map +1 -0
- package/dist/reporting/reporters/index.js +19 -0
- package/dist/reporting/reporters/index.js.map +1 -0
- package/dist/reporting/types.d.ts +427 -0
- package/dist/reporting/types.d.ts.map +1 -0
- package/dist/reporting/types.js +12 -0
- package/dist/reporting/types.js.map +1 -0
- package/package.json +9 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Result Aggregator
|
|
3
|
+
*
|
|
4
|
+
* Collects and aggregates test results, coverage data, quality metrics,
|
|
5
|
+
* and other execution data from multiple sources into a unified structure.
|
|
6
|
+
*
|
|
7
|
+
* @module reporting/ResultAggregator
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
import { AggregatedResults, ExecutionMetadata, ProjectInfo, TestSuiteResult } from './types';
|
|
11
|
+
import { TestResult, QualityMetrics, CoverageReport, TestResultsSummary, SecurityScanResults, PerformanceMetrics } from '../mcp/tools/qe/shared/types';
|
|
12
|
+
/**
|
|
13
|
+
* Input data for aggregation
|
|
14
|
+
*/
|
|
15
|
+
export interface AggregatorInput {
|
|
16
|
+
/** Project information */
|
|
17
|
+
project: ProjectInfo;
|
|
18
|
+
/** Test results */
|
|
19
|
+
testResults?: {
|
|
20
|
+
tests: TestResult[];
|
|
21
|
+
suites?: TestSuiteResult[];
|
|
22
|
+
summary?: TestResultsSummary;
|
|
23
|
+
};
|
|
24
|
+
/** Coverage data */
|
|
25
|
+
coverage?: CoverageReport;
|
|
26
|
+
/** Quality metrics */
|
|
27
|
+
qualityMetrics?: QualityMetrics;
|
|
28
|
+
/** Performance metrics */
|
|
29
|
+
performance?: PerformanceMetrics;
|
|
30
|
+
/** Security scan results */
|
|
31
|
+
security?: SecurityScanResults;
|
|
32
|
+
/** Execution metadata */
|
|
33
|
+
metadata?: Partial<ExecutionMetadata>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Result Aggregator
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const aggregator = new ResultAggregator();
|
|
41
|
+
*
|
|
42
|
+
* const results = aggregator.aggregate({
|
|
43
|
+
* project: { name: 'my-project', version: '1.0.0' },
|
|
44
|
+
* testResults: { tests: [...], summary: {...} },
|
|
45
|
+
* coverage: coverageData,
|
|
46
|
+
* qualityMetrics: metrics
|
|
47
|
+
* });
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare class ResultAggregator {
|
|
51
|
+
private executionId;
|
|
52
|
+
private startTime;
|
|
53
|
+
constructor();
|
|
54
|
+
/**
|
|
55
|
+
* Aggregate results from multiple sources
|
|
56
|
+
*/
|
|
57
|
+
aggregate(input: AggregatorInput): AggregatedResults;
|
|
58
|
+
/**
|
|
59
|
+
* Aggregate test results
|
|
60
|
+
*/
|
|
61
|
+
private aggregateTestResults;
|
|
62
|
+
/**
|
|
63
|
+
* Aggregate coverage data
|
|
64
|
+
*/
|
|
65
|
+
private aggregateCoverage;
|
|
66
|
+
/**
|
|
67
|
+
* Aggregate quality metrics
|
|
68
|
+
*/
|
|
69
|
+
private aggregateQualityMetrics;
|
|
70
|
+
/**
|
|
71
|
+
* Aggregate performance data
|
|
72
|
+
*/
|
|
73
|
+
private aggregatePerformance;
|
|
74
|
+
/**
|
|
75
|
+
* Aggregate security data
|
|
76
|
+
*/
|
|
77
|
+
private aggregateSecurity;
|
|
78
|
+
/**
|
|
79
|
+
* Build execution metadata
|
|
80
|
+
*/
|
|
81
|
+
private buildMetadata;
|
|
82
|
+
/**
|
|
83
|
+
* Calculate overall execution status
|
|
84
|
+
*/
|
|
85
|
+
private calculateStatus;
|
|
86
|
+
/**
|
|
87
|
+
* Generate execution summary
|
|
88
|
+
*/
|
|
89
|
+
private generateSummary;
|
|
90
|
+
/**
|
|
91
|
+
* Generate status message
|
|
92
|
+
*/
|
|
93
|
+
private generateStatusMessage;
|
|
94
|
+
/**
|
|
95
|
+
* Calculate quality grade
|
|
96
|
+
*/
|
|
97
|
+
private calculateGrade;
|
|
98
|
+
/**
|
|
99
|
+
* Reset aggregator for new execution
|
|
100
|
+
*/
|
|
101
|
+
reset(): void;
|
|
102
|
+
/**
|
|
103
|
+
* Get current execution ID
|
|
104
|
+
*/
|
|
105
|
+
getExecutionId(): string;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=ResultAggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResultAggregator.d.ts","sourceRoot":"","sources":["../../src/reporting/ResultAggregator.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,iBAAiB,EAMjB,iBAAiB,EAGjB,WAAW,EACX,eAAe,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,UAAU,EACV,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,8BAA8B,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0BAA0B;IAC1B,OAAO,EAAE,WAAW,CAAC;IAErB,mBAAmB;IACnB,WAAW,CAAC,EAAE;QACZ,KAAK,EAAE,UAAU,EAAE,CAAC;QACpB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,kBAAkB,CAAC;KAC9B,CAAC;IAEF,oBAAoB;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAE1B,sBAAsB;IACtB,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC,0BAA0B;IAC1B,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAEjC,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAE/B,yBAAyB;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAS;;IAO1B;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,iBAAiB;IAiDpD;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA4C5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkEzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgD/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6CzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAkCvB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2EvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,cAAc,IAAI,MAAM;CAGzB"}
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Result Aggregator
|
|
4
|
+
*
|
|
5
|
+
* Collects and aggregates test results, coverage data, quality metrics,
|
|
6
|
+
* and other execution data from multiple sources into a unified structure.
|
|
7
|
+
*
|
|
8
|
+
* @module reporting/ResultAggregator
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ResultAggregator = void 0;
|
|
13
|
+
const uuid_1 = require("uuid");
|
|
14
|
+
/**
|
|
15
|
+
* Result Aggregator
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const aggregator = new ResultAggregator();
|
|
20
|
+
*
|
|
21
|
+
* const results = aggregator.aggregate({
|
|
22
|
+
* project: { name: 'my-project', version: '1.0.0' },
|
|
23
|
+
* testResults: { tests: [...], summary: {...} },
|
|
24
|
+
* coverage: coverageData,
|
|
25
|
+
* qualityMetrics: metrics
|
|
26
|
+
* });
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
class ResultAggregator {
|
|
30
|
+
constructor() {
|
|
31
|
+
this.executionId = (0, uuid_1.v4)();
|
|
32
|
+
this.startTime = Date.now();
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Aggregate results from multiple sources
|
|
36
|
+
*/
|
|
37
|
+
aggregate(input) {
|
|
38
|
+
const now = new Date().toISOString();
|
|
39
|
+
const executionDuration = Date.now() - this.startTime;
|
|
40
|
+
// Aggregate test results
|
|
41
|
+
const testResults = this.aggregateTestResults(input.testResults);
|
|
42
|
+
// Aggregate coverage data
|
|
43
|
+
const coverage = this.aggregateCoverage(input.coverage);
|
|
44
|
+
// Aggregate quality metrics
|
|
45
|
+
const qualityMetrics = this.aggregateQualityMetrics(input.qualityMetrics);
|
|
46
|
+
// Aggregate performance data
|
|
47
|
+
const performance = this.aggregatePerformance(input.performance);
|
|
48
|
+
// Aggregate security data
|
|
49
|
+
const security = this.aggregateSecurity(input.security);
|
|
50
|
+
// Build execution metadata
|
|
51
|
+
const metadata = this.buildMetadata(input.metadata, executionDuration);
|
|
52
|
+
// Calculate overall status
|
|
53
|
+
const status = this.calculateStatus(testResults, coverage, qualityMetrics, security);
|
|
54
|
+
// Generate summary
|
|
55
|
+
const summary = this.generateSummary(testResults, coverage, qualityMetrics, security, status);
|
|
56
|
+
return {
|
|
57
|
+
executionId: this.executionId,
|
|
58
|
+
timestamp: now,
|
|
59
|
+
project: input.project,
|
|
60
|
+
testResults,
|
|
61
|
+
coverage,
|
|
62
|
+
qualityMetrics,
|
|
63
|
+
performance,
|
|
64
|
+
security,
|
|
65
|
+
metadata,
|
|
66
|
+
status,
|
|
67
|
+
summary
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Aggregate test results
|
|
72
|
+
*/
|
|
73
|
+
aggregateTestResults(input) {
|
|
74
|
+
if (!input || !input.tests) {
|
|
75
|
+
return {
|
|
76
|
+
total: 0,
|
|
77
|
+
passed: 0,
|
|
78
|
+
failed: 0,
|
|
79
|
+
skipped: 0,
|
|
80
|
+
duration: 0,
|
|
81
|
+
tests: [],
|
|
82
|
+
passRate: 0,
|
|
83
|
+
failureRate: 0
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const tests = input.tests;
|
|
87
|
+
const summary = input.summary;
|
|
88
|
+
// Calculate totals
|
|
89
|
+
const total = summary?.total || tests.length;
|
|
90
|
+
const passed = summary?.passed || tests.filter(t => t.status === 'passed').length;
|
|
91
|
+
const failed = summary?.failed || tests.filter(t => t.status === 'failed').length;
|
|
92
|
+
const skipped = summary?.skipped || tests.filter(t => t.status === 'skipped').length;
|
|
93
|
+
const flaky = summary?.flakyTests;
|
|
94
|
+
const duration = summary?.duration || tests.reduce((sum, t) => sum + t.duration, 0);
|
|
95
|
+
const passRate = total > 0 ? passed / total : 0;
|
|
96
|
+
const failureRate = total > 0 ? failed / total : 0;
|
|
97
|
+
return {
|
|
98
|
+
total,
|
|
99
|
+
passed,
|
|
100
|
+
failed,
|
|
101
|
+
skipped,
|
|
102
|
+
flaky,
|
|
103
|
+
duration,
|
|
104
|
+
tests,
|
|
105
|
+
suites: input.suites,
|
|
106
|
+
passRate,
|
|
107
|
+
failureRate
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Aggregate coverage data
|
|
112
|
+
*/
|
|
113
|
+
aggregateCoverage(input) {
|
|
114
|
+
if (!input) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
const { summary, files } = input;
|
|
118
|
+
return {
|
|
119
|
+
overall: summary.overallPercentage,
|
|
120
|
+
lines: {
|
|
121
|
+
total: summary.totalLines,
|
|
122
|
+
covered: summary.coveredLines,
|
|
123
|
+
uncovered: summary.totalLines - summary.coveredLines,
|
|
124
|
+
percentage: summary.totalLines > 0
|
|
125
|
+
? (summary.coveredLines / summary.totalLines) * 100
|
|
126
|
+
: 0
|
|
127
|
+
},
|
|
128
|
+
branches: {
|
|
129
|
+
total: summary.totalBranches,
|
|
130
|
+
covered: summary.coveredBranches,
|
|
131
|
+
uncovered: summary.totalBranches - summary.coveredBranches,
|
|
132
|
+
percentage: summary.totalBranches > 0
|
|
133
|
+
? (summary.coveredBranches / summary.totalBranches) * 100
|
|
134
|
+
: 0
|
|
135
|
+
},
|
|
136
|
+
functions: {
|
|
137
|
+
total: summary.totalFunctions,
|
|
138
|
+
covered: summary.coveredFunctions,
|
|
139
|
+
uncovered: summary.totalFunctions - summary.coveredFunctions,
|
|
140
|
+
percentage: summary.totalFunctions > 0
|
|
141
|
+
? (summary.coveredFunctions / summary.totalFunctions) * 100
|
|
142
|
+
: 0
|
|
143
|
+
},
|
|
144
|
+
statements: {
|
|
145
|
+
total: summary.totalLines, // Approximation
|
|
146
|
+
covered: summary.coveredLines,
|
|
147
|
+
uncovered: summary.totalLines - summary.coveredLines,
|
|
148
|
+
percentage: summary.totalLines > 0
|
|
149
|
+
? (summary.coveredLines / summary.totalLines) * 100
|
|
150
|
+
: 0
|
|
151
|
+
},
|
|
152
|
+
files: files.map(file => ({
|
|
153
|
+
path: file.path,
|
|
154
|
+
lines: {
|
|
155
|
+
total: file.lines.total,
|
|
156
|
+
covered: file.lines.covered,
|
|
157
|
+
uncovered: file.lines.uncovered.length,
|
|
158
|
+
percentage: file.lines.percentage
|
|
159
|
+
},
|
|
160
|
+
branches: {
|
|
161
|
+
total: file.branches.total,
|
|
162
|
+
covered: file.branches.covered,
|
|
163
|
+
uncovered: file.branches.uncovered.length,
|
|
164
|
+
percentage: file.branches.percentage
|
|
165
|
+
},
|
|
166
|
+
functions: {
|
|
167
|
+
total: file.functions.total,
|
|
168
|
+
covered: file.functions.covered,
|
|
169
|
+
uncovered: file.functions.uncovered.length,
|
|
170
|
+
percentage: file.functions.percentage
|
|
171
|
+
},
|
|
172
|
+
uncoveredLines: file.lines.uncovered
|
|
173
|
+
}))
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Aggregate quality metrics
|
|
178
|
+
*/
|
|
179
|
+
aggregateQualityMetrics(input) {
|
|
180
|
+
if (!input) {
|
|
181
|
+
return undefined;
|
|
182
|
+
}
|
|
183
|
+
// Calculate overall quality score (weighted)
|
|
184
|
+
const weights = {
|
|
185
|
+
coverage: 0.3,
|
|
186
|
+
testQuality: 0.25,
|
|
187
|
+
security: 0.25,
|
|
188
|
+
codeQuality: 0.2
|
|
189
|
+
};
|
|
190
|
+
const coverageScore = input.coverage.overallPercentage;
|
|
191
|
+
const testQualityScore = (1 - input.testResults.failureRate) * 100;
|
|
192
|
+
const securityScore = Math.max(0, 100 - input.security.summary.critical * 50 - input.security.summary.high * 10);
|
|
193
|
+
const codeQualityScore = input.codeQuality.maintainabilityIndex;
|
|
194
|
+
const score = Math.round(coverageScore * weights.coverage +
|
|
195
|
+
testQualityScore * weights.testQuality +
|
|
196
|
+
securityScore * weights.security +
|
|
197
|
+
codeQualityScore * weights.codeQuality);
|
|
198
|
+
// Calculate grade
|
|
199
|
+
const grade = this.calculateGrade(score);
|
|
200
|
+
return {
|
|
201
|
+
score,
|
|
202
|
+
grade,
|
|
203
|
+
codeQuality: {
|
|
204
|
+
maintainabilityIndex: input.codeQuality.maintainabilityIndex,
|
|
205
|
+
cyclomaticComplexity: input.codeQuality.cyclomaticComplexity,
|
|
206
|
+
technicalDebt: input.codeQuality.technicalDebt,
|
|
207
|
+
codeSmells: input.codeQuality.codeSmells,
|
|
208
|
+
duplications: input.codeQuality.duplications
|
|
209
|
+
},
|
|
210
|
+
gatesPassed: 0, // Will be calculated by quality gate evaluation
|
|
211
|
+
gatesFailed: 0
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Aggregate performance data
|
|
216
|
+
*/
|
|
217
|
+
aggregatePerformance(input) {
|
|
218
|
+
if (!input) {
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
responseTime: {
|
|
223
|
+
min: 0, // Not provided in input
|
|
224
|
+
max: input.responseTime.max,
|
|
225
|
+
mean: (input.responseTime.p50 + input.responseTime.p95 + input.responseTime.p99) / 3,
|
|
226
|
+
median: input.responseTime.p50,
|
|
227
|
+
p95: input.responseTime.p95,
|
|
228
|
+
p99: input.responseTime.p99
|
|
229
|
+
},
|
|
230
|
+
throughput: input.throughput,
|
|
231
|
+
errorRate: input.errorRate,
|
|
232
|
+
resources: {
|
|
233
|
+
cpu: input.resourceUsage.cpu,
|
|
234
|
+
memory: input.resourceUsage.memory,
|
|
235
|
+
disk: input.resourceUsage.disk
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Aggregate security data
|
|
241
|
+
*/
|
|
242
|
+
aggregateSecurity(input) {
|
|
243
|
+
if (!input) {
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
const total = input.summary.critical +
|
|
247
|
+
input.summary.high +
|
|
248
|
+
input.summary.medium +
|
|
249
|
+
input.summary.low;
|
|
250
|
+
// Calculate security score
|
|
251
|
+
const score = Math.max(0, 100 -
|
|
252
|
+
input.summary.critical * 50 -
|
|
253
|
+
input.summary.high * 15 -
|
|
254
|
+
input.summary.medium * 5 -
|
|
255
|
+
input.summary.low * 1);
|
|
256
|
+
return {
|
|
257
|
+
total,
|
|
258
|
+
summary: {
|
|
259
|
+
critical: input.summary.critical,
|
|
260
|
+
high: input.summary.high,
|
|
261
|
+
medium: input.summary.medium,
|
|
262
|
+
low: input.summary.low,
|
|
263
|
+
info: 0 // Default to 0 if not provided
|
|
264
|
+
},
|
|
265
|
+
score,
|
|
266
|
+
vulnerabilities: input.vulnerabilities.map(v => ({
|
|
267
|
+
id: v.id,
|
|
268
|
+
severity: v.severity,
|
|
269
|
+
title: v.title,
|
|
270
|
+
description: v.description,
|
|
271
|
+
file: v.file,
|
|
272
|
+
cwe: v.cwe,
|
|
273
|
+
cvss: v.cvss
|
|
274
|
+
}))
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Build execution metadata
|
|
279
|
+
*/
|
|
280
|
+
buildMetadata(input, duration) {
|
|
281
|
+
const now = new Date().toISOString();
|
|
282
|
+
const startTime = new Date(this.startTime).toISOString();
|
|
283
|
+
return {
|
|
284
|
+
startedAt: input?.startedAt || startTime,
|
|
285
|
+
completedAt: input?.completedAt || now,
|
|
286
|
+
duration: duration || Date.now() - this.startTime,
|
|
287
|
+
ci: input?.ci,
|
|
288
|
+
agent: input?.agent,
|
|
289
|
+
environment: input?.environment
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Calculate overall execution status
|
|
294
|
+
*/
|
|
295
|
+
calculateStatus(testResults, coverage, qualityMetrics, security) {
|
|
296
|
+
// Critical failure: tests failed
|
|
297
|
+
if (testResults.failureRate > 0.05) {
|
|
298
|
+
return 'failure';
|
|
299
|
+
}
|
|
300
|
+
// Critical failure: critical security vulnerabilities
|
|
301
|
+
if (security && security.summary.critical > 0) {
|
|
302
|
+
return 'failure';
|
|
303
|
+
}
|
|
304
|
+
// Warning: low coverage
|
|
305
|
+
if (coverage && coverage.overall < 70) {
|
|
306
|
+
return 'warning';
|
|
307
|
+
}
|
|
308
|
+
// Warning: high security vulnerabilities
|
|
309
|
+
if (security && security.summary.high > 0) {
|
|
310
|
+
return 'warning';
|
|
311
|
+
}
|
|
312
|
+
// Warning: low quality score
|
|
313
|
+
if (qualityMetrics && qualityMetrics.score < 70) {
|
|
314
|
+
return 'warning';
|
|
315
|
+
}
|
|
316
|
+
return 'success';
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Generate execution summary
|
|
320
|
+
*/
|
|
321
|
+
generateSummary(testResults, coverage, qualityMetrics, security, status) {
|
|
322
|
+
const highlights = [];
|
|
323
|
+
const recommendations = [];
|
|
324
|
+
let criticalIssues = 0;
|
|
325
|
+
let warnings = 0;
|
|
326
|
+
// Test results analysis
|
|
327
|
+
if (testResults.passRate >= 0.95) {
|
|
328
|
+
highlights.push(`Excellent test pass rate: ${(testResults.passRate * 100).toFixed(1)}%`);
|
|
329
|
+
}
|
|
330
|
+
else if (testResults.failureRate > 0.05) {
|
|
331
|
+
criticalIssues++;
|
|
332
|
+
recommendations.push('Fix failing tests before deployment');
|
|
333
|
+
}
|
|
334
|
+
// Coverage analysis
|
|
335
|
+
if (coverage) {
|
|
336
|
+
if (coverage.overall >= 80) {
|
|
337
|
+
highlights.push(`Good code coverage: ${coverage.overall.toFixed(1)}%`);
|
|
338
|
+
}
|
|
339
|
+
else if (coverage.overall < 70) {
|
|
340
|
+
warnings++;
|
|
341
|
+
recommendations.push(`Increase code coverage to minimum 80% (current: ${coverage.overall.toFixed(1)}%)`);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
// Security analysis
|
|
345
|
+
if (security) {
|
|
346
|
+
if (security.summary.critical > 0) {
|
|
347
|
+
criticalIssues += security.summary.critical;
|
|
348
|
+
recommendations.push(`Address ${security.summary.critical} critical security vulnerabilities immediately`);
|
|
349
|
+
}
|
|
350
|
+
else if (security.summary.high === 0 && security.summary.medium === 0) {
|
|
351
|
+
highlights.push('No security vulnerabilities detected');
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
// Quality analysis
|
|
355
|
+
if (qualityMetrics) {
|
|
356
|
+
if (qualityMetrics.score >= 85) {
|
|
357
|
+
highlights.push(`High quality score: ${qualityMetrics.score} (${qualityMetrics.grade})`);
|
|
358
|
+
}
|
|
359
|
+
else if (qualityMetrics.score < 70) {
|
|
360
|
+
warnings++;
|
|
361
|
+
recommendations.push('Improve code quality metrics');
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// Deployment readiness
|
|
365
|
+
const deploymentReady = status === 'success' &&
|
|
366
|
+
criticalIssues === 0 &&
|
|
367
|
+
testResults.failureRate <= 0.05;
|
|
368
|
+
// Status message
|
|
369
|
+
const message = this.generateStatusMessage(status || 'success', testResults, coverage, security);
|
|
370
|
+
return {
|
|
371
|
+
status: status || 'success',
|
|
372
|
+
message,
|
|
373
|
+
criticalIssues,
|
|
374
|
+
warnings,
|
|
375
|
+
recommendations: recommendations.slice(0, 5),
|
|
376
|
+
deploymentReady,
|
|
377
|
+
highlights: highlights.slice(0, 5)
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Generate status message
|
|
382
|
+
*/
|
|
383
|
+
generateStatusMessage(status, testResults, coverage, security) {
|
|
384
|
+
switch (status) {
|
|
385
|
+
case 'success':
|
|
386
|
+
return 'All quality checks passed. Ready for deployment.';
|
|
387
|
+
case 'warning':
|
|
388
|
+
return `Quality checks completed with warnings. ${testResults.passed}/${testResults.total} tests passed. Review warnings before deployment.`;
|
|
389
|
+
case 'failure':
|
|
390
|
+
const issues = [];
|
|
391
|
+
if (testResults.failed > 0) {
|
|
392
|
+
issues.push(`${testResults.failed} test(s) failed`);
|
|
393
|
+
}
|
|
394
|
+
if (security?.summary.critical && security.summary.critical > 0) {
|
|
395
|
+
issues.push(`${security.summary.critical} critical security issue(s)`);
|
|
396
|
+
}
|
|
397
|
+
return `Quality checks failed: ${issues.join(', ')}. Deployment blocked.`;
|
|
398
|
+
case 'error':
|
|
399
|
+
return 'Quality check execution encountered errors.';
|
|
400
|
+
default:
|
|
401
|
+
return 'Quality check status unknown.';
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Calculate quality grade
|
|
406
|
+
*/
|
|
407
|
+
calculateGrade(score) {
|
|
408
|
+
if (score >= 95)
|
|
409
|
+
return 'A+';
|
|
410
|
+
if (score >= 85)
|
|
411
|
+
return 'A';
|
|
412
|
+
if (score >= 75)
|
|
413
|
+
return 'B';
|
|
414
|
+
if (score >= 65)
|
|
415
|
+
return 'C';
|
|
416
|
+
if (score >= 55)
|
|
417
|
+
return 'D';
|
|
418
|
+
return 'F';
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Reset aggregator for new execution
|
|
422
|
+
*/
|
|
423
|
+
reset() {
|
|
424
|
+
this.executionId = (0, uuid_1.v4)();
|
|
425
|
+
this.startTime = Date.now();
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Get current execution ID
|
|
429
|
+
*/
|
|
430
|
+
getExecutionId() {
|
|
431
|
+
return this.executionId;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
exports.ResultAggregator = ResultAggregator;
|
|
435
|
+
//# sourceMappingURL=ResultAggregator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResultAggregator.js","sourceRoot":"","sources":["../../src/reporting/ResultAggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reporting Module
|
|
3
|
+
*
|
|
4
|
+
* Complete output generation and reporting system for quality check results.
|
|
5
|
+
* Supports multiple output formats and provides result aggregation capabilities.
|
|
6
|
+
*
|
|
7
|
+
* @module reporting
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
export * from './types';
|
|
11
|
+
export { ResultAggregator, AggregatorInput } from './ResultAggregator';
|
|
12
|
+
export { HumanReadableReporter, JSONReporter, JSONReportOutput, ControlLoopReporter, ControlLoopConfig } from './reporters';
|
|
13
|
+
export type { Reporter, ReporterConfig, ReportFormat, ReporterOutput, AggregatedResults, ControlLoopFeedback } from './types';
|
|
14
|
+
/**
|
|
15
|
+
* Reporter Factory
|
|
16
|
+
*
|
|
17
|
+
* Creates appropriate reporter based on format
|
|
18
|
+
*/
|
|
19
|
+
import { Reporter, ReporterConfig, ReportFormat } from './types';
|
|
20
|
+
export declare class ReporterFactory {
|
|
21
|
+
/**
|
|
22
|
+
* Create reporter by format
|
|
23
|
+
*/
|
|
24
|
+
static create(format: ReportFormat, config?: Partial<ReporterConfig>): Reporter;
|
|
25
|
+
/**
|
|
26
|
+
* Create all reporters
|
|
27
|
+
*/
|
|
28
|
+
static createAll(config?: Partial<ReporterConfig>): Map<ReportFormat, Reporter>;
|
|
29
|
+
/**
|
|
30
|
+
* Get available formats
|
|
31
|
+
*/
|
|
32
|
+
static getAvailableFormats(): ReportFormat[];
|
|
33
|
+
/**
|
|
34
|
+
* Validate format
|
|
35
|
+
*/
|
|
36
|
+
static isValidFormat(format: string): format is ReportFormat;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Convenience function to generate reports in all formats
|
|
40
|
+
*/
|
|
41
|
+
import { AggregatedResults, ReporterOutput } from './types';
|
|
42
|
+
export declare function generateAllReports(results: AggregatedResults, config?: Partial<ReporterConfig>): Promise<Map<ReportFormat, ReporterOutput>>;
|
|
43
|
+
export declare function writeReports(results: AggregatedResults, outputDir: string, config?: Partial<ReporterConfig>): Promise<Map<ReportFormat, string>>;
|
|
44
|
+
/**
|
|
45
|
+
* Quick report generation helper
|
|
46
|
+
*/
|
|
47
|
+
export declare function quickReport(results: AggregatedResults, format?: ReportFormat): Promise<string>;
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporting/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGvE,OAAO,EACL,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAEjB;;;;GAIG;AACH,OAAO,EACL,QAAQ,EACR,cAAc,EACd,YAAY,EACb,MAAM,SAAS,CAAC;AAKjB,qBAAa,eAAe;IAC1B;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,QAAQ;IA8B/E;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;IAU/E;;OAEG;IACH,MAAM,CAAC,mBAAmB,IAAI,YAAY,EAAE;IAI5C;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,YAAY;CAG7D;AAED;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE5D,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAW5C;AAQD,wBAAsB,YAAY,CAChC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAgBpC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,GAAE,YAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAK7G"}
|