agentic-qe 1.3.3 → 1.3.5
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/agents/qe-api-contract-validator.md +20 -0
- package/.claude/agents/qe-chaos-engineer.md +20 -0
- package/.claude/agents/qe-coverage-analyzer.md +21 -0
- package/.claude/agents/qe-deployment-readiness.md +20 -0
- package/.claude/agents/qe-flaky-test-hunter.md +20 -0
- package/.claude/agents/qe-fleet-commander.md +20 -0
- package/.claude/agents/qe-performance-tester.md +21 -0
- package/.claude/agents/qe-production-intelligence.md +20 -0
- package/.claude/agents/qe-quality-analyzer.md +20 -0
- package/.claude/agents/qe-quality-gate.md +20 -0
- package/.claude/agents/qe-regression-risk-analyzer.md +20 -0
- package/.claude/agents/qe-requirements-validator.md +20 -0
- package/.claude/agents/qe-security-scanner.md +21 -0
- package/.claude/agents/qe-test-data-architect.md +19 -0
- package/.claude/agents/qe-test-executor.md +20 -0
- package/.claude/agents/qe-test-generator.md +22 -0
- package/.claude/agents/qe-visual-tester.md +22 -0
- package/CHANGELOG.md +252 -0
- package/README.md +325 -1019
- package/README.md.backup-20251026 +1366 -0
- package/bin/aqe-mcp +1 -1
- package/dist/agents/BaseAgent.js +1 -1
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +16 -16
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +1 -1
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +71 -37
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/routing/index.d.ts +1 -1
- package/dist/cli/commands/routing/index.d.ts.map +1 -1
- package/dist/cli/commands/routing/index.js +29 -19
- package/dist/cli/commands/routing/index.js.map +1 -1
- package/dist/core/memory/EnhancedAgentDBService.d.ts +127 -0
- package/dist/core/memory/EnhancedAgentDBService.d.ts.map +1 -0
- package/dist/core/memory/EnhancedAgentDBService.js +298 -0
- package/dist/core/memory/EnhancedAgentDBService.js.map +1 -0
- package/dist/core/neural/NeuralTrainer.js +2 -2
- package/dist/core/neural/NeuralTrainer.js.map +1 -1
- package/dist/learning/ExperienceReplayBuffer.d.ts +143 -0
- package/dist/learning/ExperienceReplayBuffer.d.ts.map +1 -0
- package/dist/learning/ExperienceReplayBuffer.js +255 -0
- package/dist/learning/ExperienceReplayBuffer.js.map +1 -0
- package/dist/learning/FixRecommendationEngine.d.ts +68 -0
- package/dist/learning/FixRecommendationEngine.d.ts.map +1 -0
- package/dist/learning/FixRecommendationEngine.js +500 -0
- package/dist/learning/FixRecommendationEngine.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +19 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -1
- package/dist/learning/FlakyTestDetector.js +121 -2
- package/dist/learning/FlakyTestDetector.js.map +1 -1
- package/dist/learning/LearningEngine.d.ts +50 -1
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +140 -0
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/QLearning.d.ts +154 -0
- package/dist/learning/QLearning.d.ts.map +1 -0
- package/dist/learning/QLearning.js +337 -0
- package/dist/learning/QLearning.js.map +1 -0
- package/dist/learning/index.d.ts +4 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +7 -0
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/types.d.ts +11 -0
- package/dist/learning/types.d.ts.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts +11 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.d.ts.map +1 -1
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js +12 -0
- package/dist/mcp/streaming/CoverageAnalyzeStreamHandler.js.map +1 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts +10 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.d.ts.map +1 -1
- package/dist/mcp/streaming/TestExecuteStreamHandler.js +11 -0
- package/dist/mcp/streaming/TestExecuteStreamHandler.js.map +1 -1
- package/dist/reasoning/PatternQualityScorer.d.ts +134 -0
- package/dist/reasoning/PatternQualityScorer.d.ts.map +1 -0
- package/dist/reasoning/PatternQualityScorer.js +340 -0
- package/dist/reasoning/PatternQualityScorer.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +138 -4
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -1
- package/dist/reasoning/QEReasoningBank.js +560 -12
- package/dist/reasoning/QEReasoningBank.js.map +1 -1
- package/dist/reasoning/VectorSimilarity.d.ts +131 -0
- package/dist/reasoning/VectorSimilarity.d.ts.map +1 -0
- package/dist/reasoning/VectorSimilarity.js +250 -0
- package/dist/reasoning/VectorSimilarity.js.map +1 -0
- package/dist/reasoning/index.d.ts +8 -1
- package/dist/reasoning/index.d.ts.map +1 -1
- package/dist/reasoning/index.js +13 -2
- package/dist/reasoning/index.js.map +1 -1
- package/dist/streaming/BaseStreamHandler.d.ts +89 -0
- package/dist/streaming/BaseStreamHandler.d.ts.map +1 -0
- package/dist/streaming/BaseStreamHandler.js +168 -0
- package/dist/streaming/BaseStreamHandler.js.map +1 -0
- package/dist/streaming/TestGenerateStreamHandler.d.ts +103 -0
- package/dist/streaming/TestGenerateStreamHandler.d.ts.map +1 -0
- package/dist/streaming/TestGenerateStreamHandler.js +321 -0
- package/dist/streaming/TestGenerateStreamHandler.js.map +1 -0
- package/dist/streaming/index.d.ts +16 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +39 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/utils/__mocks__/Logger.d.ts +26 -0
- package/dist/utils/__mocks__/Logger.d.ts.map +1 -0
- package/dist/utils/__mocks__/Logger.js +42 -0
- package/dist/utils/__mocks__/Logger.js.map +1 -0
- package/package.json +15 -3
- package/dist/agents/mixins/NeuralCapableMixin.d.ts +0 -130
- package/dist/agents/mixins/NeuralCapableMixin.d.ts.map +0 -1
- package/dist/agents/mixins/NeuralCapableMixin.js +0 -358
- package/dist/agents/mixins/NeuralCapableMixin.js.map +0 -1
- package/dist/agents/mixins/QUICCapableMixin.d.ts +0 -34
- package/dist/agents/mixins/QUICCapableMixin.d.ts.map +0 -1
- package/dist/agents/mixins/QUICCapableMixin.js +0 -346
- package/dist/agents/mixins/QUICCapableMixin.js.map +0 -1
- package/dist/core/security/CertificateValidator.d.ts +0 -130
- package/dist/core/security/CertificateValidator.d.ts.map +0 -1
- package/dist/core/security/CertificateValidator.js +0 -376
- package/dist/core/security/CertificateValidator.js.map +0 -1
- package/dist/core/transport/QUICTransport.d.ts +0 -62
- package/dist/core/transport/QUICTransport.d.ts.map +0 -1
- package/dist/core/transport/QUICTransport.js +0 -381
- package/dist/core/transport/QUICTransport.js.map +0 -1
- package/dist/core/transport/SecureQUICTransport.d.ts +0 -71
- package/dist/core/transport/SecureQUICTransport.d.ts.map +0 -1
- package/dist/core/transport/SecureQUICTransport.js +0 -253
- package/dist/core/transport/SecureQUICTransport.js.map +0 -1
- package/dist/learning/AdvancedFeatureExtractor.d.ts +0 -123
- package/dist/learning/AdvancedFeatureExtractor.d.ts.map +0 -1
- package/dist/learning/AdvancedFeatureExtractor.js +0 -423
- package/dist/learning/AdvancedFeatureExtractor.js.map +0 -1
- package/dist/learning/NeuralPatternMatcher.d.ts +0 -184
- package/dist/learning/NeuralPatternMatcher.d.ts.map +0 -1
- package/dist/learning/NeuralPatternMatcher.js +0 -702
- package/dist/learning/NeuralPatternMatcher.js.map +0 -1
- package/dist/learning/NeuralTrainer.d.ts +0 -209
- package/dist/learning/NeuralTrainer.d.ts.map +0 -1
- package/dist/learning/NeuralTrainer.js +0 -478
- package/dist/learning/NeuralTrainer.js.map +0 -1
- package/dist/transport/QUICTransport.d.ts +0 -340
- package/dist/transport/QUICTransport.d.ts.map +0 -1
- package/dist/transport/QUICTransport.js +0 -814
- package/dist/transport/QUICTransport.js.map +0 -1
- package/dist/transport/UDPTransport.d.ts +0 -348
- package/dist/transport/UDPTransport.d.ts.map +0 -1
- package/dist/transport/UDPTransport.js +0 -820
- package/dist/transport/UDPTransport.js.map +0 -1
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PatternQualityScorer - Comprehensive pattern quality assessment
|
|
4
|
+
*
|
|
5
|
+
* Calculates multi-dimensional quality scores for test patterns
|
|
6
|
+
* Includes readability, completeness, specificity, reusability, and success rate
|
|
7
|
+
*
|
|
8
|
+
* @module reasoning/PatternQualityScorer
|
|
9
|
+
* @version 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PatternQualityScorer = void 0;
|
|
13
|
+
/**
|
|
14
|
+
* PatternQualityScorer for comprehensive quality assessment
|
|
15
|
+
*/
|
|
16
|
+
class PatternQualityScorer {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.weights = {
|
|
19
|
+
readability: 0.2,
|
|
20
|
+
completeness: 0.2,
|
|
21
|
+
specificity: 0.2,
|
|
22
|
+
reusability: 0.2,
|
|
23
|
+
successRate: 0.2
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Calculate comprehensive quality score for a pattern
|
|
28
|
+
*
|
|
29
|
+
* @param pattern - Pattern to score
|
|
30
|
+
* @returns Quality components and overall score
|
|
31
|
+
*/
|
|
32
|
+
calculateQuality(pattern) {
|
|
33
|
+
const readability = this.scoreReadability(pattern.code);
|
|
34
|
+
const completeness = this.scoreCompleteness(pattern);
|
|
35
|
+
const specificity = this.scoreSpecificity(pattern);
|
|
36
|
+
const reusability = this.scoreReusability(pattern);
|
|
37
|
+
const successRate = pattern.metadata?.successRate ?? 0.5;
|
|
38
|
+
const overall = readability * this.weights.readability +
|
|
39
|
+
completeness * this.weights.completeness +
|
|
40
|
+
specificity * this.weights.specificity +
|
|
41
|
+
reusability * this.weights.reusability +
|
|
42
|
+
successRate * this.weights.successRate;
|
|
43
|
+
return {
|
|
44
|
+
readability,
|
|
45
|
+
completeness,
|
|
46
|
+
specificity,
|
|
47
|
+
reusability,
|
|
48
|
+
successRate,
|
|
49
|
+
overall
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Score code readability
|
|
54
|
+
* Factors: line length, complexity, comments, naming
|
|
55
|
+
*
|
|
56
|
+
* @param code - Code to score
|
|
57
|
+
* @returns Readability score (0-1)
|
|
58
|
+
*/
|
|
59
|
+
scoreReadability(code) {
|
|
60
|
+
let score = 1.0;
|
|
61
|
+
// Line length penalty
|
|
62
|
+
const lines = code.split('\n');
|
|
63
|
+
const avgLineLength = lines.reduce((sum, line) => sum + line.length, 0) / lines.length;
|
|
64
|
+
if (avgLineLength > 100) {
|
|
65
|
+
score -= 0.2;
|
|
66
|
+
}
|
|
67
|
+
else if (avgLineLength > 80) {
|
|
68
|
+
score -= 0.1;
|
|
69
|
+
}
|
|
70
|
+
// Complexity penalty (nesting depth)
|
|
71
|
+
const maxNesting = this.calculateMaxNesting(code);
|
|
72
|
+
if (maxNesting > 4) {
|
|
73
|
+
score -= 0.3;
|
|
74
|
+
}
|
|
75
|
+
else if (maxNesting > 3) {
|
|
76
|
+
score -= 0.15;
|
|
77
|
+
}
|
|
78
|
+
// Comment bonus
|
|
79
|
+
const commentRatio = this.calculateCommentRatio(code);
|
|
80
|
+
if (commentRatio > 0.1 && commentRatio < 0.4) {
|
|
81
|
+
score += 0.1;
|
|
82
|
+
}
|
|
83
|
+
// Descriptive naming bonus
|
|
84
|
+
const hasDescriptiveNames = this.hasDescriptiveNaming(code);
|
|
85
|
+
if (hasDescriptiveNames) {
|
|
86
|
+
score += 0.1;
|
|
87
|
+
}
|
|
88
|
+
return Math.max(0, Math.min(1, score));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Score pattern completeness
|
|
92
|
+
* Factors: assertions, setup/teardown, error handling, documentation
|
|
93
|
+
*
|
|
94
|
+
* @param pattern - Pattern to score
|
|
95
|
+
* @returns Completeness score (0-1)
|
|
96
|
+
*/
|
|
97
|
+
scoreCompleteness(pattern) {
|
|
98
|
+
let score = 0;
|
|
99
|
+
// Has assertions
|
|
100
|
+
if (this.hasAssertions(pattern.code)) {
|
|
101
|
+
score += 0.3;
|
|
102
|
+
}
|
|
103
|
+
// Has setup/teardown
|
|
104
|
+
if (this.hasSetupTeardown(pattern.code)) {
|
|
105
|
+
score += 0.2;
|
|
106
|
+
}
|
|
107
|
+
// Has error handling
|
|
108
|
+
if (this.hasErrorHandling(pattern.code)) {
|
|
109
|
+
score += 0.2;
|
|
110
|
+
}
|
|
111
|
+
// Has description
|
|
112
|
+
if (pattern.description && pattern.description.length > 20) {
|
|
113
|
+
score += 0.15;
|
|
114
|
+
}
|
|
115
|
+
// Has tags
|
|
116
|
+
if (pattern.tags && pattern.tags.length > 0) {
|
|
117
|
+
score += 0.1;
|
|
118
|
+
}
|
|
119
|
+
// Has template
|
|
120
|
+
if (pattern.template) {
|
|
121
|
+
score += 0.05;
|
|
122
|
+
}
|
|
123
|
+
return Math.min(1, score);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Score pattern specificity
|
|
127
|
+
* Higher score = more specific and targeted pattern
|
|
128
|
+
* Factors: domain-specific terms, clear use case, focused scope
|
|
129
|
+
*
|
|
130
|
+
* @param pattern - Pattern to score
|
|
131
|
+
* @returns Specificity score (0-1)
|
|
132
|
+
*/
|
|
133
|
+
scoreSpecificity(pattern) {
|
|
134
|
+
let score = 0.5; // Base score
|
|
135
|
+
// Domain-specific terms bonus
|
|
136
|
+
const domainTerms = this.countDomainTerms(pattern);
|
|
137
|
+
score += Math.min(domainTerms * 0.1, 0.3);
|
|
138
|
+
// Clear use case (description)
|
|
139
|
+
if (pattern.description) {
|
|
140
|
+
const hasUseCase = /should|when|given|test|verify/i.test(pattern.description);
|
|
141
|
+
if (hasUseCase) {
|
|
142
|
+
score += 0.1;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Focused scope (not too generic)
|
|
146
|
+
const isGeneric = this.isGenericPattern(pattern);
|
|
147
|
+
if (!isGeneric) {
|
|
148
|
+
score += 0.1;
|
|
149
|
+
}
|
|
150
|
+
return Math.max(0, Math.min(1, score));
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Score pattern reusability
|
|
154
|
+
* Factors: parameterization, modularity, usage count, adaptability
|
|
155
|
+
*
|
|
156
|
+
* @param pattern - Pattern to score
|
|
157
|
+
* @returns Reusability score (0-1)
|
|
158
|
+
*/
|
|
159
|
+
scoreReusability(pattern) {
|
|
160
|
+
let score = 0;
|
|
161
|
+
// Has parameterization
|
|
162
|
+
if (this.hasParameterization(pattern.code)) {
|
|
163
|
+
score += 0.3;
|
|
164
|
+
}
|
|
165
|
+
// Is modular (focused, single responsibility)
|
|
166
|
+
if (this.isModular(pattern.code)) {
|
|
167
|
+
score += 0.2;
|
|
168
|
+
}
|
|
169
|
+
// Usage count (proven reusability)
|
|
170
|
+
const usageCount = pattern.usageCount || 0;
|
|
171
|
+
if (usageCount > 10) {
|
|
172
|
+
score += 0.3;
|
|
173
|
+
}
|
|
174
|
+
else if (usageCount > 5) {
|
|
175
|
+
score += 0.2;
|
|
176
|
+
}
|
|
177
|
+
else if (usageCount > 0) {
|
|
178
|
+
score += 0.1;
|
|
179
|
+
}
|
|
180
|
+
// Has template (enables adaptation)
|
|
181
|
+
if (pattern.template) {
|
|
182
|
+
score += 0.2;
|
|
183
|
+
}
|
|
184
|
+
return Math.min(1, score);
|
|
185
|
+
}
|
|
186
|
+
// Private helper methods
|
|
187
|
+
/**
|
|
188
|
+
* Calculate maximum nesting depth in code
|
|
189
|
+
*/
|
|
190
|
+
calculateMaxNesting(code) {
|
|
191
|
+
let maxDepth = 0;
|
|
192
|
+
let currentDepth = 0;
|
|
193
|
+
for (const char of code) {
|
|
194
|
+
if (char === '{' || char === '(') {
|
|
195
|
+
currentDepth++;
|
|
196
|
+
maxDepth = Math.max(maxDepth, currentDepth);
|
|
197
|
+
}
|
|
198
|
+
else if (char === '}' || char === ')') {
|
|
199
|
+
currentDepth--;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return maxDepth;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Calculate comment ratio in code
|
|
206
|
+
*/
|
|
207
|
+
calculateCommentRatio(code) {
|
|
208
|
+
const lines = code.split('\n');
|
|
209
|
+
const commentLines = lines.filter(line => line.trim().startsWith('//') || line.trim().startsWith('/*') || line.trim().startsWith('*')).length;
|
|
210
|
+
return commentLines / Math.max(lines.length, 1);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Check if code has descriptive naming
|
|
214
|
+
*/
|
|
215
|
+
hasDescriptiveNaming(code) {
|
|
216
|
+
// Check for meaningful variable/function names (not single char or generic)
|
|
217
|
+
const identifiers = code.match(/\b[a-z_][a-zA-Z0-9_]{2,}\b/g) || [];
|
|
218
|
+
const descriptive = identifiers.filter(id => !['test', 'data', 'result', 'value', 'temp', 'tmp', 'foo', 'bar'].includes(id.toLowerCase()));
|
|
219
|
+
return descriptive.length / Math.max(identifiers.length, 1) > 0.6;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Check if code has assertions
|
|
223
|
+
*/
|
|
224
|
+
hasAssertions(code) {
|
|
225
|
+
const assertionPatterns = [
|
|
226
|
+
/expect\(/,
|
|
227
|
+
/assert\./,
|
|
228
|
+
/should\./,
|
|
229
|
+
/\.to\./,
|
|
230
|
+
/\.toBe/,
|
|
231
|
+
/\.toEqual/,
|
|
232
|
+
/\.toContain/
|
|
233
|
+
];
|
|
234
|
+
return assertionPatterns.some(pattern => pattern.test(code));
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Check if code has setup/teardown
|
|
238
|
+
*/
|
|
239
|
+
hasSetupTeardown(code) {
|
|
240
|
+
const setupPatterns = [
|
|
241
|
+
/beforeEach/,
|
|
242
|
+
/afterEach/,
|
|
243
|
+
/beforeAll/,
|
|
244
|
+
/afterAll/,
|
|
245
|
+
/setUp/,
|
|
246
|
+
/tearDown/
|
|
247
|
+
];
|
|
248
|
+
return setupPatterns.some(pattern => pattern.test(code));
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Check if code has error handling
|
|
252
|
+
*/
|
|
253
|
+
hasErrorHandling(code) {
|
|
254
|
+
const errorPatterns = [
|
|
255
|
+
/try\s*{/,
|
|
256
|
+
/catch\s*\(/,
|
|
257
|
+
/toThrow/,
|
|
258
|
+
/\.rejects/,
|
|
259
|
+
/Error\(/
|
|
260
|
+
];
|
|
261
|
+
return errorPatterns.some(pattern => pattern.test(code));
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Count domain-specific terms in pattern
|
|
265
|
+
*/
|
|
266
|
+
countDomainTerms(pattern) {
|
|
267
|
+
const text = `${pattern.name} ${pattern.description || ''} ${pattern.tags?.join(' ') || ''}`;
|
|
268
|
+
const domainTerms = [
|
|
269
|
+
'authentication', 'authorization', 'validation', 'api', 'database',
|
|
270
|
+
'service', 'controller', 'repository', 'model', 'entity',
|
|
271
|
+
'async', 'promise', 'callback', 'middleware', 'handler',
|
|
272
|
+
'request', 'response', 'endpoint', 'route', 'query'
|
|
273
|
+
];
|
|
274
|
+
let count = 0;
|
|
275
|
+
for (const term of domainTerms) {
|
|
276
|
+
if (text.toLowerCase().includes(term)) {
|
|
277
|
+
count++;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return count;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Check if pattern is too generic
|
|
284
|
+
*/
|
|
285
|
+
isGenericPattern(pattern) {
|
|
286
|
+
const genericNames = [
|
|
287
|
+
'test', 'basic test', 'simple test', 'example', 'sample',
|
|
288
|
+
'generic', 'default', 'standard', 'common'
|
|
289
|
+
];
|
|
290
|
+
const name = pattern.name.toLowerCase();
|
|
291
|
+
return genericNames.some(generic => name.includes(generic));
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Check if code has parameterization
|
|
295
|
+
*/
|
|
296
|
+
hasParameterization(code) {
|
|
297
|
+
// Check for function parameters or template placeholders
|
|
298
|
+
const hasParams = /\([a-zA-Z_][a-zA-Z0-9_,\s]*\)/.test(code);
|
|
299
|
+
const hasPlaceholders = /\{\{[^}]+\}\}/.test(code);
|
|
300
|
+
return hasParams || hasPlaceholders;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Check if code is modular (focused, single responsibility)
|
|
304
|
+
*/
|
|
305
|
+
isModular(code) {
|
|
306
|
+
const lines = code.split('\n').filter(line => line.trim().length > 0);
|
|
307
|
+
// Not too long (focused)
|
|
308
|
+
if (lines.length > 50) {
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
// Single describe/test block (not nested)
|
|
312
|
+
const describeCount = (code.match(/describe\(/g) || []).length;
|
|
313
|
+
const testCount = (code.match(/\b(it|test)\(/g) || []).length;
|
|
314
|
+
return describeCount <= 1 && testCount <= 3;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Set custom weights for quality components
|
|
318
|
+
*
|
|
319
|
+
* @param weights - Custom weights (must sum to 1.0)
|
|
320
|
+
*/
|
|
321
|
+
setWeights(weights) {
|
|
322
|
+
this.weights = { ...this.weights, ...weights };
|
|
323
|
+
// Normalize to sum to 1.0
|
|
324
|
+
const sum = Object.values(this.weights).reduce((a, b) => a + b, 0);
|
|
325
|
+
if (sum !== 1.0) {
|
|
326
|
+
for (const key in this.weights) {
|
|
327
|
+
this.weights[key] /= sum;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Get current weights
|
|
333
|
+
*/
|
|
334
|
+
getWeights() {
|
|
335
|
+
return { ...this.weights };
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
exports.PatternQualityScorer = PatternQualityScorer;
|
|
339
|
+
exports.default = PatternQualityScorer;
|
|
340
|
+
//# sourceMappingURL=PatternQualityScorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternQualityScorer.js","sourceRoot":"","sources":["../../src/reasoning/PatternQualityScorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,13 +33,14 @@ export interface TestPattern {
|
|
|
33
33
|
name: string;
|
|
34
34
|
description: string;
|
|
35
35
|
category: 'unit' | 'integration' | 'e2e' | 'performance' | 'security';
|
|
36
|
-
framework: 'jest' | 'mocha' | 'vitest' | 'playwright';
|
|
36
|
+
framework: 'jest' | 'mocha' | 'vitest' | 'playwright' | 'cypress' | 'jasmine' | 'ava';
|
|
37
37
|
language: 'typescript' | 'javascript' | 'python';
|
|
38
38
|
template: string;
|
|
39
39
|
examples: string[];
|
|
40
40
|
confidence: number;
|
|
41
41
|
usageCount: number;
|
|
42
42
|
successRate: number;
|
|
43
|
+
quality?: number;
|
|
43
44
|
metadata: {
|
|
44
45
|
createdAt: Date;
|
|
45
46
|
updatedAt: Date;
|
|
@@ -50,6 +51,7 @@ export interface TestPattern {
|
|
|
50
51
|
export interface PatternMatch {
|
|
51
52
|
pattern: TestPattern;
|
|
52
53
|
confidence: number;
|
|
54
|
+
similarity: number;
|
|
53
55
|
reasoning: string;
|
|
54
56
|
applicability: number;
|
|
55
57
|
}
|
|
@@ -73,9 +75,22 @@ export interface PatternMatch {
|
|
|
73
75
|
export declare class QEReasoningBank {
|
|
74
76
|
private patterns;
|
|
75
77
|
private patternIndex;
|
|
78
|
+
private keywordIndex;
|
|
79
|
+
private frameworkIndex;
|
|
76
80
|
private versionHistory;
|
|
81
|
+
private vectorSimilarity;
|
|
82
|
+
private qualityScorer;
|
|
83
|
+
private vectorCache;
|
|
84
|
+
private similarityCache;
|
|
85
|
+
private cacheExpiryTime;
|
|
86
|
+
private lastCacheCleanup;
|
|
87
|
+
private minQuality;
|
|
88
|
+
private performanceMetrics;
|
|
89
|
+
constructor(config?: {
|
|
90
|
+
minQuality?: number;
|
|
91
|
+
});
|
|
77
92
|
/**
|
|
78
|
-
* Store a new test pattern
|
|
93
|
+
* Store a new test pattern with quality scoring and vector indexing
|
|
79
94
|
*/
|
|
80
95
|
storePattern(pattern: TestPattern): Promise<void>;
|
|
81
96
|
/**
|
|
@@ -83,25 +98,64 @@ export declare class QEReasoningBank {
|
|
|
83
98
|
*/
|
|
84
99
|
getPattern(id: string): Promise<TestPattern | null>;
|
|
85
100
|
/**
|
|
86
|
-
* Find matching patterns
|
|
101
|
+
* Find matching patterns using vector similarity with performance optimizations
|
|
102
|
+
* Target: 85%+ matching accuracy, <50ms p95 latency
|
|
103
|
+
*
|
|
104
|
+
* **Optimizations:**
|
|
105
|
+
* - Caching: Frequently accessed patterns cached for 5 minutes
|
|
106
|
+
* - Indexing: Multi-level indexes (keyword, framework, tag) for fast lookup
|
|
107
|
+
* - Early termination: Stop processing when enough high-quality matches found
|
|
108
|
+
* - Batch processing: Process multiple candidates in batches
|
|
87
109
|
*/
|
|
88
110
|
findMatchingPatterns(context: {
|
|
89
111
|
codeType: string;
|
|
90
112
|
framework?: string;
|
|
91
113
|
language?: string;
|
|
92
114
|
keywords?: string[];
|
|
115
|
+
sourceCode?: string;
|
|
93
116
|
}, limit?: number): Promise<PatternMatch[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Get cache key for context
|
|
119
|
+
*/
|
|
120
|
+
private getCacheKey;
|
|
121
|
+
/**
|
|
122
|
+
* Get indexed candidates for fast lookup
|
|
123
|
+
* Uses multi-level indexes (framework, keywords, tags)
|
|
124
|
+
*/
|
|
125
|
+
private getIndexedCandidates;
|
|
126
|
+
/**
|
|
127
|
+
* Score indexed candidates efficiently
|
|
128
|
+
*/
|
|
129
|
+
private scoreIndexedCandidates;
|
|
130
|
+
/**
|
|
131
|
+
* Fallback vector similarity search
|
|
132
|
+
*/
|
|
133
|
+
private vectorSimilaritySearch;
|
|
134
|
+
/**
|
|
135
|
+
* Record lookup time for performance monitoring
|
|
136
|
+
*/
|
|
137
|
+
private recordLookupTime;
|
|
138
|
+
/**
|
|
139
|
+
* Cleanup cache if needed (every 5 minutes)
|
|
140
|
+
*/
|
|
141
|
+
private cleanupCacheIfNeeded;
|
|
142
|
+
/**
|
|
143
|
+
* Find similar patterns by example code
|
|
144
|
+
* Uses vector similarity for code-based matching
|
|
145
|
+
*/
|
|
146
|
+
findSimilarPatterns(exampleCode: string, framework?: string, limit?: number): Promise<PatternMatch[]>;
|
|
94
147
|
/**
|
|
95
148
|
* Update pattern success metrics
|
|
96
149
|
*/
|
|
97
150
|
updatePatternMetrics(patternId: string, success: boolean): Promise<void>;
|
|
98
151
|
/**
|
|
99
|
-
* Get pattern statistics
|
|
152
|
+
* Get pattern statistics (alias for getStats for backward compatibility)
|
|
100
153
|
*/
|
|
101
154
|
getStatistics(): Promise<{
|
|
102
155
|
totalPatterns: number;
|
|
103
156
|
averageConfidence: number;
|
|
104
157
|
averageSuccessRate: number;
|
|
158
|
+
averageQuality: number;
|
|
105
159
|
byCategory: Record<string, number>;
|
|
106
160
|
byFramework: Record<string, number>;
|
|
107
161
|
}>;
|
|
@@ -116,6 +170,86 @@ export declare class QEReasoningBank {
|
|
|
116
170
|
private updateIndex;
|
|
117
171
|
private calculateMatchConfidence;
|
|
118
172
|
private generateReasoning;
|
|
173
|
+
/**
|
|
174
|
+
* Build query text from context for vector matching
|
|
175
|
+
*/
|
|
176
|
+
private buildQueryText;
|
|
177
|
+
/**
|
|
178
|
+
* Get pattern text for vector embedding
|
|
179
|
+
*/
|
|
180
|
+
private getPatternText;
|
|
181
|
+
/**
|
|
182
|
+
* Extract keywords from code
|
|
183
|
+
*/
|
|
184
|
+
private extractKeywords;
|
|
185
|
+
/**
|
|
186
|
+
* Match a pattern by exact ID
|
|
187
|
+
* Alias for getPattern for consistency with pattern matching API
|
|
188
|
+
*/
|
|
189
|
+
matchPattern(patternId: string): Promise<TestPattern | null>;
|
|
190
|
+
/**
|
|
191
|
+
* Find patterns using flexible search criteria
|
|
192
|
+
* Supports multiple search strategies: vector similarity, tag matching, keyword search
|
|
193
|
+
*/
|
|
194
|
+
findPattern(criteria: {
|
|
195
|
+
query?: string;
|
|
196
|
+
category?: TestPattern['category'];
|
|
197
|
+
framework?: TestPattern['framework'];
|
|
198
|
+
language?: TestPattern['language'];
|
|
199
|
+
tags?: string[];
|
|
200
|
+
minConfidence?: number;
|
|
201
|
+
minQuality?: number;
|
|
202
|
+
}, limit?: number): Promise<PatternMatch[]>;
|
|
203
|
+
/**
|
|
204
|
+
* Calculate similarity score between two patterns
|
|
205
|
+
* Returns a score between 0-1 indicating how similar the patterns are
|
|
206
|
+
*/
|
|
207
|
+
calculateSimilarity(pattern1: TestPattern, pattern2: TestPattern): number;
|
|
208
|
+
/**
|
|
209
|
+
* Search patterns by similarity to a reference pattern
|
|
210
|
+
*/
|
|
211
|
+
searchSimilarPatterns(referencePattern: TestPattern, limit?: number): Promise<PatternMatch[]>;
|
|
212
|
+
/**
|
|
213
|
+
* Load patterns from registry file
|
|
214
|
+
*/
|
|
215
|
+
loadFromRegistry(registryPath: string): Promise<number>;
|
|
216
|
+
/**
|
|
217
|
+
* Save patterns to registry file
|
|
218
|
+
*/
|
|
219
|
+
saveToRegistry(registryPath: string, filter?: Partial<TestPattern>): Promise<void>;
|
|
220
|
+
/**
|
|
221
|
+
* Export patterns for cross-project sharing
|
|
222
|
+
*/
|
|
223
|
+
exportPatterns(filter?: Partial<TestPattern>): TestPattern[];
|
|
224
|
+
/**
|
|
225
|
+
* Import patterns from another project
|
|
226
|
+
*/
|
|
227
|
+
importPatterns(patterns: TestPattern[]): Promise<void>;
|
|
228
|
+
/**
|
|
229
|
+
* Get pattern statistics including quality metrics
|
|
230
|
+
*/
|
|
231
|
+
getStats(): {
|
|
232
|
+
totalPatterns: number;
|
|
233
|
+
byFramework: Record<string, number>;
|
|
234
|
+
byCategory: Record<string, number>;
|
|
235
|
+
averageQuality: number;
|
|
236
|
+
averageSuccessRate: number;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* Get performance metrics (NEW)
|
|
240
|
+
* Returns timing statistics for pattern matching operations
|
|
241
|
+
*/
|
|
242
|
+
getPerformanceMetrics(): {
|
|
243
|
+
avgLookupTime: number;
|
|
244
|
+
p95LookupTime: number;
|
|
245
|
+
p99LookupTime: number;
|
|
246
|
+
cacheHitRate: number;
|
|
247
|
+
totalLookups: number;
|
|
248
|
+
};
|
|
249
|
+
/**
|
|
250
|
+
* Reset performance metrics (for testing)
|
|
251
|
+
*/
|
|
252
|
+
resetPerformanceMetrics(): void;
|
|
119
253
|
}
|
|
120
254
|
export default QEReasoningBank;
|
|
121
255
|
//# sourceMappingURL=QEReasoningBank.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QEReasoningBank.d.ts","sourceRoot":"","sources":["../../src/reasoning/QEReasoningBank.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;
|
|
1
|
+
{"version":3,"file":"QEReasoningBank.d.ts","sourceRoot":"","sources":["../../src/reasoning/QEReasoningBank.ts"],"names":[],"mappings":"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"}
|