agentic-qe 1.7.0 → 1.8.0
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/.claude/skills/sherlock-review/SKILL.md +786 -0
- package/CHANGELOG.md +531 -0
- package/README.md +37 -21
- package/dist/agents/BaseAgent.d.ts +8 -10
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +41 -43
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +2 -2
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +2 -2
- package/dist/agents/LearningAgent.d.ts.map +1 -1
- package/dist/agents/LearningAgent.js +4 -4
- package/dist/agents/LearningAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +9 -0
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +60 -0
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/examples/batchAnalyze.d.ts +252 -0
- package/dist/agents/examples/batchAnalyze.d.ts.map +1 -0
- package/dist/agents/examples/batchAnalyze.js +259 -0
- package/dist/agents/examples/batchAnalyze.js.map +1 -0
- package/dist/agents/examples/batchGenerate.d.ts +153 -0
- package/dist/agents/examples/batchGenerate.d.ts.map +1 -0
- package/dist/agents/examples/batchGenerate.js +166 -0
- package/dist/agents/examples/batchGenerate.js.map +1 -0
- package/dist/agents/generateWithPII.d.ts +128 -0
- package/dist/agents/generateWithPII.d.ts.map +1 -0
- package/dist/agents/generateWithPII.js +175 -0
- package/dist/agents/generateWithPII.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -3
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +51 -46
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +4 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +57 -0
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/index.js +14 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/AgentDBManager.d.ts +5 -0
- package/dist/core/memory/AgentDBManager.d.ts.map +1 -1
- package/dist/core/memory/AgentDBManager.js +19 -1
- package/dist/core/memory/AgentDBManager.js.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.d.ts +8 -0
- package/dist/core/memory/RealAgentDBAdapter.d.ts.map +1 -1
- package/dist/core/memory/RealAgentDBAdapter.js +74 -17
- package/dist/core/memory/RealAgentDBAdapter.js.map +1 -1
- package/dist/core/memory/ReasoningBankAdapter.d.ts +4 -0
- package/dist/core/memory/ReasoningBankAdapter.d.ts.map +1 -1
- package/dist/core/memory/ReasoningBankAdapter.js +20 -0
- package/dist/core/memory/ReasoningBankAdapter.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +8 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +33 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/learning/ImprovementLoop.js +2 -2
- package/dist/learning/ImprovementLoop.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts +11 -7
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +156 -72
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +83 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +130 -0
- package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +58 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +84 -0
- package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/index.d.ts +47 -0
- package/dist/mcp/handlers/filtered/index.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/index.js +63 -0
- package/dist/mcp/handlers/filtered/index.js.map +1 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts +57 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.js +83 -0
- package/dist/mcp/handlers/filtered/performance-tester-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts +57 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.js +93 -0
- package/dist/mcp/handlers/filtered/quality-assessor-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +54 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.js +73 -0
- package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +1 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts +61 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.d.ts.map +1 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.js +117 -0
- package/dist/mcp/handlers/filtered/test-executor-filtered.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +2 -2
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/mcp/tools/deprecated.d.ts +8 -8
- package/dist/scripts/backup-helper.d.ts +64 -0
- package/dist/scripts/backup-helper.d.ts.map +1 -0
- package/dist/scripts/backup-helper.js +251 -0
- package/dist/scripts/backup-helper.js.map +1 -0
- package/dist/scripts/migrate-with-backup.d.ts +15 -0
- package/dist/scripts/migrate-with-backup.d.ts.map +1 -0
- package/dist/scripts/migrate-with-backup.js +194 -0
- package/dist/scripts/migrate-with-backup.js.map +1 -0
- package/dist/security/pii-tokenization.d.ts +216 -0
- package/dist/security/pii-tokenization.d.ts.map +1 -0
- package/dist/security/pii-tokenization.js +325 -0
- package/dist/security/pii-tokenization.js.map +1 -0
- package/dist/utils/EmbeddingGenerator.d.ts +35 -0
- package/dist/utils/EmbeddingGenerator.d.ts.map +1 -0
- package/dist/utils/EmbeddingGenerator.js +72 -0
- package/dist/utils/EmbeddingGenerator.js.map +1 -0
- package/dist/utils/batch-operations.d.ts +215 -0
- package/dist/utils/batch-operations.d.ts.map +1 -0
- package/dist/utils/batch-operations.js +266 -0
- package/dist/utils/batch-operations.js.map +1 -0
- package/dist/utils/filtering.d.ts +180 -0
- package/dist/utils/filtering.d.ts.map +1 -0
- package/dist/utils/filtering.js +288 -0
- package/dist/utils/filtering.js.map +1 -0
- package/dist/utils/prompt-cache-examples.d.ts +111 -0
- package/dist/utils/prompt-cache-examples.d.ts.map +1 -0
- package/dist/utils/prompt-cache-examples.js +416 -0
- package/dist/utils/prompt-cache-examples.js.map +1 -0
- package/dist/utils/prompt-cache.d.ts +305 -0
- package/dist/utils/prompt-cache.d.ts.map +1 -0
- package/dist/utils/prompt-cache.js +448 -0
- package/dist/utils/prompt-cache.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Filtered Coverage Analyzer Handler (QW-1)
|
|
4
|
+
*
|
|
5
|
+
* Applies client-side filtering to coverage analysis results to reduce output tokens by 99%.
|
|
6
|
+
*
|
|
7
|
+
* **Token Reduction:**
|
|
8
|
+
* - Before: 50,000 tokens (full coverage report for 1000+ files)
|
|
9
|
+
* - After: 500 tokens (top 10 gaps + summary)
|
|
10
|
+
* - Reduction: 99%
|
|
11
|
+
*
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
* @author Agentic QE Team
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.analyzeCoverageGapsFiltered = analyzeCoverageGapsFiltered;
|
|
17
|
+
exports.loadCoverageData = loadCoverageData;
|
|
18
|
+
const filtering_js_1 = require("../../../utils/filtering.js");
|
|
19
|
+
/**
|
|
20
|
+
* Analyze coverage gaps with client-side filtering
|
|
21
|
+
*
|
|
22
|
+
* Processes full coverage data locally and returns only the most critical gaps,
|
|
23
|
+
* reducing output tokens from 50,000 to ~500 (99% reduction).
|
|
24
|
+
*
|
|
25
|
+
* @param params - Analysis parameters
|
|
26
|
+
* @param fullCoverageData - Complete coverage dataset
|
|
27
|
+
* @returns Filtered coverage analysis result
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const result = await analyzeCoverageGapsFiltered({
|
|
32
|
+
* projectPath: '/workspace/project',
|
|
33
|
+
* threshold: 80,
|
|
34
|
+
* topN: 10,
|
|
35
|
+
* priorities: ['critical', 'high']
|
|
36
|
+
* }, fullCoverageData);
|
|
37
|
+
*
|
|
38
|
+
* console.log(result.gaps.summary);
|
|
39
|
+
* // "Analyzed 1247 files, returned top 10 critical gaps"
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
async function analyzeCoverageGapsFiltered(params, fullCoverageData) {
|
|
43
|
+
const threshold = params.threshold ?? 80;
|
|
44
|
+
const topN = params.topN ?? 10;
|
|
45
|
+
const priorities = params.priorities ?? ['critical', 'high', 'medium'];
|
|
46
|
+
// Calculate overall statistics from full dataset
|
|
47
|
+
const overall = {
|
|
48
|
+
totalFiles: fullCoverageData.length,
|
|
49
|
+
totalLines: fullCoverageData.reduce((sum, f) => sum + f.lines, 0),
|
|
50
|
+
totalFunctions: fullCoverageData.reduce((sum, f) => sum + f.functions, 0),
|
|
51
|
+
totalBranches: fullCoverageData.reduce((sum, f) => sum + f.branches, 0),
|
|
52
|
+
averageCoverage: fullCoverageData.length > 0
|
|
53
|
+
? fullCoverageData.reduce((sum, f) => sum + f.coverage, 0) / fullCoverageData.length
|
|
54
|
+
: 0
|
|
55
|
+
};
|
|
56
|
+
// Filter to only files below threshold (gaps)
|
|
57
|
+
const gaps = fullCoverageData.filter(file => file.coverage < threshold);
|
|
58
|
+
// Apply client-side filtering
|
|
59
|
+
const filtered = (0, filtering_js_1.filterLargeDataset)(gaps, { threshold, topN, priorities, includeMetrics: true }, (file) => (0, filtering_js_1.calculateCoveragePriority)(file.coverage, threshold), (a, b) => a.coverage - b.coverage, // Sort by worst coverage first
|
|
60
|
+
(file) => file.coverage);
|
|
61
|
+
// Generate summary
|
|
62
|
+
const summary = (0, filtering_js_1.createFilterSummary)(filtered, 'files');
|
|
63
|
+
// Generate recommendations based on top gaps
|
|
64
|
+
const recommendations = generateCoverageRecommendations(filtered.topItems, threshold);
|
|
65
|
+
return {
|
|
66
|
+
overall: {
|
|
67
|
+
...overall,
|
|
68
|
+
averageCoverage: Math.round(overall.averageCoverage * 100) / 100
|
|
69
|
+
},
|
|
70
|
+
gaps: {
|
|
71
|
+
summary,
|
|
72
|
+
count: filtered.summary.filtered,
|
|
73
|
+
topGaps: filtered.topItems,
|
|
74
|
+
distribution: filtered.metrics.priorityDistribution,
|
|
75
|
+
metrics: {
|
|
76
|
+
avgCoverage: filtered.metrics.avgValue ?? 0,
|
|
77
|
+
worstCoverage: filtered.metrics.min ?? 0,
|
|
78
|
+
stdDev: filtered.metrics.stdDev ?? 0
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
recommendations,
|
|
82
|
+
filterInfo: {
|
|
83
|
+
totalAnalyzed: filtered.summary.total,
|
|
84
|
+
returned: filtered.summary.returned,
|
|
85
|
+
tokenReduction: filtered.summary.reductionPercent
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Generate actionable recommendations based on coverage gaps
|
|
91
|
+
*/
|
|
92
|
+
function generateCoverageRecommendations(topGaps, threshold) {
|
|
93
|
+
const recommendations = [];
|
|
94
|
+
if (topGaps.length === 0) {
|
|
95
|
+
return ['All files meet coverage threshold. Consider increasing threshold or adding edge case tests.'];
|
|
96
|
+
}
|
|
97
|
+
const criticalGaps = topGaps.filter(f => f.coverage < threshold * 0.5);
|
|
98
|
+
const highGaps = topGaps.filter(f => f.coverage >= threshold * 0.5 && f.coverage < threshold * 0.75);
|
|
99
|
+
if (criticalGaps.length > 0) {
|
|
100
|
+
recommendations.push(`🔴 CRITICAL: ${criticalGaps.length} file(s) have < ${threshold * 0.5}% coverage. Prioritize adding tests immediately.`);
|
|
101
|
+
// List specific files
|
|
102
|
+
criticalGaps.slice(0, 3).forEach(file => {
|
|
103
|
+
recommendations.push(` - ${file.file}: ${file.coverage.toFixed(1)}% coverage (${file.lines} lines)`);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
if (highGaps.length > 0) {
|
|
107
|
+
recommendations.push(`🟠 HIGH: ${highGaps.length} file(s) have ${threshold * 0.5}-${threshold * 0.75}% coverage. Add tests for uncovered branches.`);
|
|
108
|
+
}
|
|
109
|
+
// Add general recommendations
|
|
110
|
+
const avgCoverage = topGaps.reduce((sum, f) => sum + f.coverage, 0) / topGaps.length;
|
|
111
|
+
if (avgCoverage < threshold * 0.6) {
|
|
112
|
+
recommendations.push(`Recommendation: Use automated test generation to quickly improve coverage for low-coverage files.`);
|
|
113
|
+
}
|
|
114
|
+
// Suggest focusing on files with most uncovered lines
|
|
115
|
+
const fileWithMostLines = topGaps.reduce((max, f) => (f.uncoveredLines?.length ?? 0) > (max.uncoveredLines?.length ?? 0) ? f : max, topGaps[0]);
|
|
116
|
+
if (fileWithMostLines.uncoveredLines && fileWithMostLines.uncoveredLines.length > 50) {
|
|
117
|
+
recommendations.push(`Focus area: ${fileWithMostLines.file} has ${fileWithMostLines.uncoveredLines.length} uncovered lines. Break into smaller, testable functions.`);
|
|
118
|
+
}
|
|
119
|
+
return recommendations;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Mock function to load coverage data
|
|
123
|
+
* In real implementation, this would parse lcov.info or other coverage reports
|
|
124
|
+
*/
|
|
125
|
+
async function loadCoverageData(projectPath) {
|
|
126
|
+
// This is a placeholder - in real implementation would read from coverage/lcov.info
|
|
127
|
+
// For now, return empty array to indicate implementation needed
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=coverage-analyzer-filtered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage-analyzer-filtered.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/filtered/coverage-analyzer-filtered.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filtered Flaky Test Detector Handler (QW-1)
|
|
3
|
+
*
|
|
4
|
+
* Applies client-side filtering to flaky test analysis results to reduce output tokens by 98.5%.
|
|
5
|
+
*
|
|
6
|
+
* **Token Reduction:**
|
|
7
|
+
* - Before: 40,000 tokens (all test execution history)
|
|
8
|
+
* - After: 600 tokens (flaky tests + summary)
|
|
9
|
+
* - Reduction: 98.5%
|
|
10
|
+
*
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
* @author Agentic QE Team
|
|
13
|
+
*/
|
|
14
|
+
export interface FlakyTest {
|
|
15
|
+
name: string;
|
|
16
|
+
suite: string;
|
|
17
|
+
flakyRate: number;
|
|
18
|
+
totalRuns: number;
|
|
19
|
+
failures: number;
|
|
20
|
+
passes: number;
|
|
21
|
+
lastFailure?: string;
|
|
22
|
+
patterns?: string[];
|
|
23
|
+
}
|
|
24
|
+
export interface FlakyDetectionParams {
|
|
25
|
+
topN?: number;
|
|
26
|
+
priorities?: ('critical' | 'high' | 'medium' | 'low')[];
|
|
27
|
+
minFlakyRate?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface FilteredFlakyResult {
|
|
30
|
+
overall: {
|
|
31
|
+
totalTests: number;
|
|
32
|
+
flakyTests: number;
|
|
33
|
+
flakyRate: number;
|
|
34
|
+
mostUnreliable: string;
|
|
35
|
+
};
|
|
36
|
+
flaky: {
|
|
37
|
+
summary: string;
|
|
38
|
+
count: number;
|
|
39
|
+
topFlaky: FlakyTest[];
|
|
40
|
+
distribution: Record<string, number>;
|
|
41
|
+
metrics: {
|
|
42
|
+
avgFlakyRate: number;
|
|
43
|
+
worstFlakyRate: number;
|
|
44
|
+
stdDev: number;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
recommendations: string[];
|
|
48
|
+
filterInfo: {
|
|
49
|
+
totalAnalyzed: number;
|
|
50
|
+
returned: number;
|
|
51
|
+
tokenReduction: number;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Analyze flaky tests with client-side filtering
|
|
56
|
+
*/
|
|
57
|
+
export declare function analyzeFlakinessFiltered(params: FlakyDetectionParams, fullFlakyData: FlakyTest[]): Promise<FilteredFlakyResult>;
|
|
58
|
+
//# sourceMappingURL=flaky-detector-filtered.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flaky-detector-filtered.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/filtered/flaky-detector-filtered.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;IACxD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,SAAS,EAAE,CAAC;QACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE;YACP,YAAY,EAAE,MAAM,CAAC;YACrB,cAAc,EAAE,MAAM,CAAC;YACvB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,oBAAoB,EAC5B,aAAa,EAAE,SAAS,EAAE,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAuD9B"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Filtered Flaky Test Detector Handler (QW-1)
|
|
4
|
+
*
|
|
5
|
+
* Applies client-side filtering to flaky test analysis results to reduce output tokens by 98.5%.
|
|
6
|
+
*
|
|
7
|
+
* **Token Reduction:**
|
|
8
|
+
* - Before: 40,000 tokens (all test execution history)
|
|
9
|
+
* - After: 600 tokens (flaky tests + summary)
|
|
10
|
+
* - Reduction: 98.5%
|
|
11
|
+
*
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
* @author Agentic QE Team
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.analyzeFlakinessFiltered = analyzeFlakinessFiltered;
|
|
17
|
+
const filtering_js_1 = require("../../../utils/filtering.js");
|
|
18
|
+
/**
|
|
19
|
+
* Analyze flaky tests with client-side filtering
|
|
20
|
+
*/
|
|
21
|
+
async function analyzeFlakinessFiltered(params, fullFlakyData) {
|
|
22
|
+
const topN = params.topN ?? 10;
|
|
23
|
+
const priorities = params.priorities ?? ['critical', 'high'];
|
|
24
|
+
const minFlakyRate = params.minFlakyRate ?? 10; // 10% minimum
|
|
25
|
+
// Filter to only tests above minimum flaky rate
|
|
26
|
+
const flakyTests = fullFlakyData.filter(t => t.flakyRate >= minFlakyRate);
|
|
27
|
+
// Calculate overall metrics
|
|
28
|
+
const overall = {
|
|
29
|
+
totalTests: fullFlakyData.length,
|
|
30
|
+
flakyTests: flakyTests.length,
|
|
31
|
+
flakyRate: fullFlakyData.length > 0
|
|
32
|
+
? (flakyTests.length / fullFlakyData.length) * 100
|
|
33
|
+
: 0,
|
|
34
|
+
mostUnreliable: flakyTests.length > 0
|
|
35
|
+
? flakyTests.reduce((max, t) => t.flakyRate > max.flakyRate ? t : max).name
|
|
36
|
+
: 'None'
|
|
37
|
+
};
|
|
38
|
+
// Filter and sort
|
|
39
|
+
const filtered = (0, filtering_js_1.filterLargeDataset)(flakyTests, { topN, priorities, includeMetrics: true }, (test) => (0, filtering_js_1.calculateFlakyPriority)(test.flakyRate), (a, b) => b.flakyRate - a.flakyRate, // Most flaky first
|
|
40
|
+
(test) => test.flakyRate);
|
|
41
|
+
const summary = (0, filtering_js_1.createFilterSummary)(filtered, 'flaky tests');
|
|
42
|
+
const recommendations = generateFlakyRecommendations(filtered.topItems);
|
|
43
|
+
return {
|
|
44
|
+
overall: {
|
|
45
|
+
...overall,
|
|
46
|
+
flakyRate: Math.round(overall.flakyRate * 100) / 100
|
|
47
|
+
},
|
|
48
|
+
flaky: {
|
|
49
|
+
summary,
|
|
50
|
+
count: filtered.summary.filtered,
|
|
51
|
+
topFlaky: filtered.topItems,
|
|
52
|
+
distribution: filtered.metrics.priorityDistribution,
|
|
53
|
+
metrics: {
|
|
54
|
+
avgFlakyRate: filtered.metrics.avgValue ?? 0,
|
|
55
|
+
worstFlakyRate: filtered.metrics.max ?? 0,
|
|
56
|
+
stdDev: filtered.metrics.stdDev ?? 0
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
recommendations,
|
|
60
|
+
filterInfo: {
|
|
61
|
+
totalAnalyzed: filtered.summary.total,
|
|
62
|
+
returned: filtered.summary.returned,
|
|
63
|
+
tokenReduction: filtered.summary.reductionPercent
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function generateFlakyRecommendations(topFlaky) {
|
|
68
|
+
if (topFlaky.length === 0) {
|
|
69
|
+
return ['No flaky tests detected. Test suite is stable.'];
|
|
70
|
+
}
|
|
71
|
+
const recs = [];
|
|
72
|
+
const critical = topFlaky.filter(t => t.flakyRate > 50);
|
|
73
|
+
if (critical.length > 0) {
|
|
74
|
+
recs.push(`🔴 ${critical.length} test(s) fail >50% of the time. Disable or fix immediately.`);
|
|
75
|
+
}
|
|
76
|
+
const patterns = topFlaky.flatMap(t => t.patterns ?? []);
|
|
77
|
+
const uniquePatterns = [...new Set(patterns)];
|
|
78
|
+
if (uniquePatterns.length > 0) {
|
|
79
|
+
recs.push(`Common patterns: ${uniquePatterns.slice(0, 3).join(', ')}`);
|
|
80
|
+
}
|
|
81
|
+
recs.push(`Focus on fixing: ${topFlaky.slice(0, 3).map(t => t.name).join(', ')}`);
|
|
82
|
+
return recs;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=flaky-detector-filtered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flaky-detector-filtered.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/filtered/flaky-detector-filtered.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-Side Data Filtering Layer (QW-1) - Handler Exports
|
|
3
|
+
*
|
|
4
|
+
* This module exports all filtered handler implementations that apply
|
|
5
|
+
* client-side filtering to reduce output tokens by 95%+.
|
|
6
|
+
*
|
|
7
|
+
* **Performance Impact Summary:**
|
|
8
|
+
* - Coverage Analysis: 50,000 → 500 tokens (99% reduction)
|
|
9
|
+
* - Test Execution: 30,000 → 800 tokens (97.3% reduction)
|
|
10
|
+
* - Flaky Detection: 40,000 → 600 tokens (98.5% reduction)
|
|
11
|
+
* - Performance Benchmarks: 60,000 → 1,000 tokens (98.3% reduction)
|
|
12
|
+
* - Security Scanning: 25,000 → 700 tokens (97.2% reduction)
|
|
13
|
+
* - Quality Assessment: 20,000 → 500 tokens (97.5% reduction)
|
|
14
|
+
*
|
|
15
|
+
* **Total Annual Savings:** $108,030/year (based on 1,000 operations/day)
|
|
16
|
+
*
|
|
17
|
+
* @version 1.0.0
|
|
18
|
+
* @author Agentic QE Team
|
|
19
|
+
* @see docs/planning/mcp-improvement-plan-revised.md (QW-1 section)
|
|
20
|
+
*/
|
|
21
|
+
export { analyzeCoverageGapsFiltered, loadCoverageData, type CoverageFile, type CoverageAnalysisParams, type FilteredCoverageResult } from './coverage-analyzer-filtered.js';
|
|
22
|
+
export { executeTestsFiltered, type TestResult, type TestExecutionParams, type FilteredTestExecutionResult } from './test-executor-filtered.js';
|
|
23
|
+
export { analyzeFlakinessFiltered, type FlakyTest, type FlakyDetectionParams, type FilteredFlakyResult } from './flaky-detector-filtered.js';
|
|
24
|
+
export { runBenchmarksFiltered, type PerformanceResult, type PerformanceBenchmarkParams, type FilteredPerformanceResult } from './performance-tester-filtered.js';
|
|
25
|
+
export { scanVulnerabilitiesFiltered, type SecurityVulnerability, type SecurityScanParams, type FilteredSecurityResult } from './security-scanner-filtered.js';
|
|
26
|
+
export { assessQualityFiltered, type QualityIssue, type QualityAssessmentParams, type FilteredQualityResult } from './quality-assessor-filtered.js';
|
|
27
|
+
/**
|
|
28
|
+
* Usage Example:
|
|
29
|
+
*
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { analyzeCoverageGapsFiltered } from './filtered';
|
|
32
|
+
*
|
|
33
|
+
* // Full coverage data loaded locally (10,000+ files)
|
|
34
|
+
* const fullCoverage = await loadCoverageData(projectPath);
|
|
35
|
+
*
|
|
36
|
+
* // Apply filtering - returns only top 10 gaps + summary
|
|
37
|
+
* const result = await analyzeCoverageGapsFiltered(
|
|
38
|
+
* { threshold: 80, topN: 10, priorities: ['critical', 'high'] },
|
|
39
|
+
* fullCoverage
|
|
40
|
+
* );
|
|
41
|
+
*
|
|
42
|
+
* // Output: 500 tokens instead of 50,000 (99% reduction)
|
|
43
|
+
* console.log(result.gaps.summary);
|
|
44
|
+
* console.log(result.recommendations);
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/filtered/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC5B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,oBAAoB,EACpB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,2BAA2B,EACjC,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACL,wBAAwB,EACxB,KAAK,SAAS,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EACL,2BAA2B,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EACL,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC3B,MAAM,gCAAgC,CAAC;AAExC;;;;;;;;;;;;;;;;;;;GAmBG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Client-Side Data Filtering Layer (QW-1) - Handler Exports
|
|
4
|
+
*
|
|
5
|
+
* This module exports all filtered handler implementations that apply
|
|
6
|
+
* client-side filtering to reduce output tokens by 95%+.
|
|
7
|
+
*
|
|
8
|
+
* **Performance Impact Summary:**
|
|
9
|
+
* - Coverage Analysis: 50,000 → 500 tokens (99% reduction)
|
|
10
|
+
* - Test Execution: 30,000 → 800 tokens (97.3% reduction)
|
|
11
|
+
* - Flaky Detection: 40,000 → 600 tokens (98.5% reduction)
|
|
12
|
+
* - Performance Benchmarks: 60,000 → 1,000 tokens (98.3% reduction)
|
|
13
|
+
* - Security Scanning: 25,000 → 700 tokens (97.2% reduction)
|
|
14
|
+
* - Quality Assessment: 20,000 → 500 tokens (97.5% reduction)
|
|
15
|
+
*
|
|
16
|
+
* **Total Annual Savings:** $108,030/year (based on 1,000 operations/day)
|
|
17
|
+
*
|
|
18
|
+
* @version 1.0.0
|
|
19
|
+
* @author Agentic QE Team
|
|
20
|
+
* @see docs/planning/mcp-improvement-plan-revised.md (QW-1 section)
|
|
21
|
+
*/
|
|
22
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.assessQualityFiltered = exports.scanVulnerabilitiesFiltered = exports.runBenchmarksFiltered = exports.analyzeFlakinessFiltered = exports.executeTestsFiltered = exports.loadCoverageData = exports.analyzeCoverageGapsFiltered = void 0;
|
|
24
|
+
// Coverage Analysis
|
|
25
|
+
var coverage_analyzer_filtered_js_1 = require("./coverage-analyzer-filtered.js");
|
|
26
|
+
Object.defineProperty(exports, "analyzeCoverageGapsFiltered", { enumerable: true, get: function () { return coverage_analyzer_filtered_js_1.analyzeCoverageGapsFiltered; } });
|
|
27
|
+
Object.defineProperty(exports, "loadCoverageData", { enumerable: true, get: function () { return coverage_analyzer_filtered_js_1.loadCoverageData; } });
|
|
28
|
+
// Test Execution
|
|
29
|
+
var test_executor_filtered_js_1 = require("./test-executor-filtered.js");
|
|
30
|
+
Object.defineProperty(exports, "executeTestsFiltered", { enumerable: true, get: function () { return test_executor_filtered_js_1.executeTestsFiltered; } });
|
|
31
|
+
// Flaky Test Detection
|
|
32
|
+
var flaky_detector_filtered_js_1 = require("./flaky-detector-filtered.js");
|
|
33
|
+
Object.defineProperty(exports, "analyzeFlakinessFiltered", { enumerable: true, get: function () { return flaky_detector_filtered_js_1.analyzeFlakinessFiltered; } });
|
|
34
|
+
// Performance Benchmarking
|
|
35
|
+
var performance_tester_filtered_js_1 = require("./performance-tester-filtered.js");
|
|
36
|
+
Object.defineProperty(exports, "runBenchmarksFiltered", { enumerable: true, get: function () { return performance_tester_filtered_js_1.runBenchmarksFiltered; } });
|
|
37
|
+
// Security Scanning
|
|
38
|
+
var security_scanner_filtered_js_1 = require("./security-scanner-filtered.js");
|
|
39
|
+
Object.defineProperty(exports, "scanVulnerabilitiesFiltered", { enumerable: true, get: function () { return security_scanner_filtered_js_1.scanVulnerabilitiesFiltered; } });
|
|
40
|
+
// Quality Assessment
|
|
41
|
+
var quality_assessor_filtered_js_1 = require("./quality-assessor-filtered.js");
|
|
42
|
+
Object.defineProperty(exports, "assessQualityFiltered", { enumerable: true, get: function () { return quality_assessor_filtered_js_1.assessQualityFiltered; } });
|
|
43
|
+
/**
|
|
44
|
+
* Usage Example:
|
|
45
|
+
*
|
|
46
|
+
* ```typescript
|
|
47
|
+
* import { analyzeCoverageGapsFiltered } from './filtered';
|
|
48
|
+
*
|
|
49
|
+
* // Full coverage data loaded locally (10,000+ files)
|
|
50
|
+
* const fullCoverage = await loadCoverageData(projectPath);
|
|
51
|
+
*
|
|
52
|
+
* // Apply filtering - returns only top 10 gaps + summary
|
|
53
|
+
* const result = await analyzeCoverageGapsFiltered(
|
|
54
|
+
* { threshold: 80, topN: 10, priorities: ['critical', 'high'] },
|
|
55
|
+
* fullCoverage
|
|
56
|
+
* );
|
|
57
|
+
*
|
|
58
|
+
* // Output: 500 tokens instead of 50,000 (99% reduction)
|
|
59
|
+
* console.log(result.gaps.summary);
|
|
60
|
+
* console.log(result.recommendations);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/filtered/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;AAEH,oBAAoB;AACpB,iFAMyC;AALvC,4IAAA,2BAA2B,OAAA;AAC3B,iIAAA,gBAAgB,OAAA;AAMlB,iBAAiB;AACjB,yEAKqC;AAJnC,iIAAA,oBAAoB,OAAA;AAMtB,uBAAuB;AACvB,2EAKsC;AAJpC,sIAAA,wBAAwB,OAAA;AAM1B,2BAA2B;AAC3B,mFAK0C;AAJxC,uIAAA,qBAAqB,OAAA;AAMvB,oBAAoB;AACpB,+EAKwC;AAJtC,2IAAA,2BAA2B,OAAA;AAM7B,qBAAqB;AACrB,+EAKwC;AAJtC,qIAAA,qBAAqB,OAAA;AAMvB;;;;;;;;;;;;;;;;;;;GAmBG"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filtered Performance Tester Handler (QW-1)
|
|
3
|
+
*
|
|
4
|
+
* Applies client-side filtering to performance benchmark results to reduce output tokens by 98.3%.
|
|
5
|
+
*
|
|
6
|
+
* **Token Reduction:**
|
|
7
|
+
* - Before: 60,000 tokens (all benchmark results)
|
|
8
|
+
* - After: 1,000 tokens (slow endpoints + summary)
|
|
9
|
+
* - Reduction: 98.3%
|
|
10
|
+
*
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
* @author Agentic QE Team
|
|
13
|
+
*/
|
|
14
|
+
export interface PerformanceResult {
|
|
15
|
+
endpoint: string;
|
|
16
|
+
method: string;
|
|
17
|
+
avgResponseTime: number;
|
|
18
|
+
p95ResponseTime: number;
|
|
19
|
+
p99ResponseTime: number;
|
|
20
|
+
throughput: number;
|
|
21
|
+
errorRate: number;
|
|
22
|
+
}
|
|
23
|
+
export interface PerformanceBenchmarkParams {
|
|
24
|
+
threshold?: number;
|
|
25
|
+
topN?: number;
|
|
26
|
+
priorities?: ('critical' | 'high' | 'medium' | 'low')[];
|
|
27
|
+
}
|
|
28
|
+
export interface FilteredPerformanceResult {
|
|
29
|
+
overall: {
|
|
30
|
+
totalEndpoints: number;
|
|
31
|
+
avgResponseTime: number;
|
|
32
|
+
p95ResponseTime: number;
|
|
33
|
+
totalThroughput: number;
|
|
34
|
+
};
|
|
35
|
+
slowEndpoints: {
|
|
36
|
+
summary: string;
|
|
37
|
+
count: number;
|
|
38
|
+
topSlow: PerformanceResult[];
|
|
39
|
+
distribution: Record<string, number>;
|
|
40
|
+
metrics: {
|
|
41
|
+
avgResponseTime: number;
|
|
42
|
+
slowestResponseTime: number;
|
|
43
|
+
stdDev: number;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
recommendations: string[];
|
|
47
|
+
filterInfo: {
|
|
48
|
+
totalAnalyzed: number;
|
|
49
|
+
returned: number;
|
|
50
|
+
tokenReduction: number;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Run performance benchmarks with client-side filtering
|
|
55
|
+
*/
|
|
56
|
+
export declare function runBenchmarksFiltered(params: PerformanceBenchmarkParams, fullBenchmarkData: PerformanceResult[]): Promise<FilteredPerformanceResult>;
|
|
57
|
+
//# sourceMappingURL=performance-tester-filtered.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-tester-filtered.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/filtered/performance-tester-filtered.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;QACxB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,aAAa,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,iBAAiB,EAAE,CAAC;QAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE;YACP,eAAe,EAAE,MAAM,CAAC;YACxB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,0BAA0B,EAClC,iBAAiB,EAAE,iBAAiB,EAAE,GACrC,OAAO,CAAC,yBAAyB,CAAC,CAsDpC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Filtered Performance Tester Handler (QW-1)
|
|
4
|
+
*
|
|
5
|
+
* Applies client-side filtering to performance benchmark results to reduce output tokens by 98.3%.
|
|
6
|
+
*
|
|
7
|
+
* **Token Reduction:**
|
|
8
|
+
* - Before: 60,000 tokens (all benchmark results)
|
|
9
|
+
* - After: 1,000 tokens (slow endpoints + summary)
|
|
10
|
+
* - Reduction: 98.3%
|
|
11
|
+
*
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
* @author Agentic QE Team
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.runBenchmarksFiltered = runBenchmarksFiltered;
|
|
17
|
+
const filtering_js_1 = require("../../../utils/filtering.js");
|
|
18
|
+
/**
|
|
19
|
+
* Run performance benchmarks with client-side filtering
|
|
20
|
+
*/
|
|
21
|
+
async function runBenchmarksFiltered(params, fullBenchmarkData) {
|
|
22
|
+
const threshold = params.threshold ?? 200; // 200ms
|
|
23
|
+
const topN = params.topN ?? 10;
|
|
24
|
+
const priorities = params.priorities ?? ['critical', 'high'];
|
|
25
|
+
// Calculate overall metrics
|
|
26
|
+
const overall = {
|
|
27
|
+
totalEndpoints: fullBenchmarkData.length,
|
|
28
|
+
avgResponseTime: fullBenchmarkData.length > 0
|
|
29
|
+
? fullBenchmarkData.reduce((sum, r) => sum + r.avgResponseTime, 0) / fullBenchmarkData.length
|
|
30
|
+
: 0,
|
|
31
|
+
p95ResponseTime: fullBenchmarkData.length > 0
|
|
32
|
+
? fullBenchmarkData.reduce((sum, r) => sum + r.p95ResponseTime, 0) / fullBenchmarkData.length
|
|
33
|
+
: 0,
|
|
34
|
+
totalThroughput: fullBenchmarkData.reduce((sum, r) => sum + r.throughput, 0)
|
|
35
|
+
};
|
|
36
|
+
// Filter and sort
|
|
37
|
+
const filtered = (0, filtering_js_1.filterLargeDataset)(fullBenchmarkData, { threshold, topN, priorities, includeMetrics: true }, (result) => (0, filtering_js_1.calculatePerformancePriority)(result.p95ResponseTime, threshold), (a, b) => b.p95ResponseTime - a.p95ResponseTime, // Slowest first
|
|
38
|
+
(result) => result.p95ResponseTime);
|
|
39
|
+
const summary = (0, filtering_js_1.createFilterSummary)(filtered, 'endpoints');
|
|
40
|
+
const recommendations = generatePerformanceRecommendations(filtered.topItems, threshold);
|
|
41
|
+
return {
|
|
42
|
+
overall: {
|
|
43
|
+
...overall,
|
|
44
|
+
avgResponseTime: Math.round(overall.avgResponseTime * 100) / 100,
|
|
45
|
+
p95ResponseTime: Math.round(overall.p95ResponseTime * 100) / 100,
|
|
46
|
+
totalThroughput: Math.round(overall.totalThroughput * 100) / 100
|
|
47
|
+
},
|
|
48
|
+
slowEndpoints: {
|
|
49
|
+
summary,
|
|
50
|
+
count: filtered.summary.filtered,
|
|
51
|
+
topSlow: filtered.topItems,
|
|
52
|
+
distribution: filtered.metrics.priorityDistribution,
|
|
53
|
+
metrics: {
|
|
54
|
+
avgResponseTime: filtered.metrics.avgValue ?? 0,
|
|
55
|
+
slowestResponseTime: filtered.metrics.max ?? 0,
|
|
56
|
+
stdDev: filtered.metrics.stdDev ?? 0
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
recommendations,
|
|
60
|
+
filterInfo: {
|
|
61
|
+
totalAnalyzed: filtered.summary.total,
|
|
62
|
+
returned: filtered.summary.returned,
|
|
63
|
+
tokenReduction: filtered.summary.reductionPercent
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function generatePerformanceRecommendations(topSlow, threshold) {
|
|
68
|
+
if (topSlow.length === 0) {
|
|
69
|
+
return [`All endpoints meet ${threshold}ms P95 threshold.`];
|
|
70
|
+
}
|
|
71
|
+
const recs = [];
|
|
72
|
+
const critical = topSlow.filter(r => r.p95ResponseTime > threshold * 5);
|
|
73
|
+
if (critical.length > 0) {
|
|
74
|
+
recs.push(`🔴 ${critical.length} endpoint(s) exceed ${threshold * 5}ms (critical threshold).`);
|
|
75
|
+
}
|
|
76
|
+
const highErrors = topSlow.filter(r => r.errorRate > 1);
|
|
77
|
+
if (highErrors.length > 0) {
|
|
78
|
+
recs.push(`⚠️ ${highErrors.length} endpoint(s) have >1% error rate.`);
|
|
79
|
+
}
|
|
80
|
+
recs.push(`Optimize: ${topSlow.slice(0, 3).map(r => r.endpoint).join(', ')}`);
|
|
81
|
+
return recs;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=performance-tester-filtered.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"performance-tester-filtered.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/filtered/performance-tester-filtered.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;AAiDH,sDAyDC;AAxGD,8DAAoH;AA4CpH;;GAEG;AACI,KAAK,UAAU,qBAAqB,CACzC,MAAkC,EAClC,iBAAsC;IAEtC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC,QAAQ;IACnD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE7D,4BAA4B;IAC5B,MAAM,OAAO,GAAG;QACd,cAAc,EAAE,iBAAiB,CAAC,MAAM;QACxC,eAAe,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAC3C,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM;YAC7F,CAAC,CAAC,CAAC;QACL,eAAe,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;YAC3C,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM;YAC7F,CAAC,CAAC,CAAC;QACL,eAAe,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;KAC7E,CAAC;IAEF,kBAAkB;IAClB,MAAM,QAAQ,GAAG,IAAA,iCAAkB,EACjC,iBAAiB,EACjB,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,EACrD,CAAC,MAAM,EAAE,EAAE,CAAC,IAAA,2CAA4B,EAAC,MAAM,CAAC,eAAe,EAAE,SAAS,CAAC,EAC3E,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,EAAE,gBAAgB;IACjE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CACnC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAA,kCAAmB,EAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC3D,MAAM,eAAe,GAAG,kCAAkC,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAEzF,OAAO;QACL,OAAO,EAAE;YACP,GAAG,OAAO;YACV,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG;YAChE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG;YAChE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,GAAG;SACjE;QACD,aAAa,EAAE;YACb,OAAO;YACP,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ;YAChC,OAAO,EAAE,QAAQ,CAAC,QAAQ;YAC1B,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,oBAAoB;YACnD,OAAO,EAAE;gBACP,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC;gBAC/C,mBAAmB,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;gBAC9C,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC;aACrC;SACF;QACD,eAAe;QACf,UAAU,EAAE;YACV,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK;YACrC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ;YACnC,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB;SAClD;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CAAC,OAA4B,EAAE,SAAiB;IACzF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,sBAAsB,SAAS,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC;IAExE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,uBAAuB,SAAS,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACxD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,mCAAmC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE9E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filtered Quality Assessor Handler (QW-1)
|
|
3
|
+
*
|
|
4
|
+
* Applies client-side filtering to quality assessment results to reduce output tokens by 97.5%.
|
|
5
|
+
*
|
|
6
|
+
* **Token Reduction:**
|
|
7
|
+
* - Before: 20,000 tokens (all quality assessments)
|
|
8
|
+
* - After: 500 tokens (critical issues + summary)
|
|
9
|
+
* - Reduction: 97.5%
|
|
10
|
+
*
|
|
11
|
+
* @version 1.0.0
|
|
12
|
+
* @author Agentic QE Team
|
|
13
|
+
*/
|
|
14
|
+
export interface QualityIssue {
|
|
15
|
+
file: string;
|
|
16
|
+
line: number;
|
|
17
|
+
category: string;
|
|
18
|
+
severity: 'critical' | 'high' | 'medium' | 'low';
|
|
19
|
+
score: number;
|
|
20
|
+
description: string;
|
|
21
|
+
recommendation: string;
|
|
22
|
+
}
|
|
23
|
+
export interface QualityAssessmentParams {
|
|
24
|
+
scope: string;
|
|
25
|
+
threshold?: number;
|
|
26
|
+
topN?: number;
|
|
27
|
+
priorities?: ('critical' | 'high' | 'medium' | 'low')[];
|
|
28
|
+
}
|
|
29
|
+
export interface FilteredQualityResult {
|
|
30
|
+
overall: {
|
|
31
|
+
totalIssues: number;
|
|
32
|
+
averageScore: number;
|
|
33
|
+
grade: string;
|
|
34
|
+
};
|
|
35
|
+
issues: {
|
|
36
|
+
summary: string;
|
|
37
|
+
count: number;
|
|
38
|
+
topIssues: QualityIssue[];
|
|
39
|
+
distribution: Record<string, number>;
|
|
40
|
+
metrics: {
|
|
41
|
+
avgScore: number;
|
|
42
|
+
worstScore: number;
|
|
43
|
+
stdDev: number;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
recommendations: string[];
|
|
47
|
+
filterInfo: {
|
|
48
|
+
totalAnalyzed: number;
|
|
49
|
+
returned: number;
|
|
50
|
+
tokenReduction: number;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Assess quality with client-side filtering
|
|
55
|
+
*/
|
|
56
|
+
export declare function assessQualityFiltered(params: QualityAssessmentParams, fullQualityData: QualityIssue[]): Promise<FilteredQualityResult>;
|
|
57
|
+
//# sourceMappingURL=quality-assessor-filtered.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality-assessor-filtered.d.ts","sourceRoot":"","sources":["../../../../src/mcp/handlers/filtered/quality-assessor-filtered.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE;QACP,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,YAAY,EAAE,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,OAAO,EAAE;YACP,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,uBAAuB,EAC/B,eAAe,EAAE,YAAY,EAAE,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CAkDhC"}
|