agentic-qe 1.0.5 → 1.1.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/agents/qe-quality-analyzer.md +405 -0
- package/CHANGELOG.md +109 -0
- package/CONTRIBUTING.md +51 -0
- package/README.md +669 -162
- package/bin/aqe +90 -938
- package/dist/adapters/MemoryStoreAdapter.d.ts.map +1 -1
- package/dist/adapters/MemoryStoreAdapter.js +6 -0
- package/dist/adapters/MemoryStoreAdapter.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +58 -3
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +316 -48
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +48 -4
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +217 -10
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/LearningAgent.d.ts +75 -0
- package/dist/agents/LearningAgent.d.ts.map +1 -0
- package/dist/agents/LearningAgent.js +177 -0
- package/dist/agents/LearningAgent.js.map +1 -0
- package/dist/agents/TestGeneratorAgent.d.ts +42 -2
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +232 -13
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/cli/commands/improve/index.d.ts +70 -0
- package/dist/cli/commands/improve/index.d.ts.map +1 -0
- package/dist/cli/commands/improve/index.js +530 -0
- package/dist/cli/commands/improve/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +33 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +656 -39
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +68 -0
- package/dist/cli/commands/learn/index.d.ts.map +1 -0
- package/dist/cli/commands/learn/index.js +431 -0
- package/dist/cli/commands/learn/index.js.map +1 -0
- package/dist/cli/commands/patterns/index.d.ts +75 -0
- package/dist/cli/commands/patterns/index.d.ts.map +1 -0
- package/dist/cli/commands/patterns/index.js +502 -0
- package/dist/cli/commands/patterns/index.js.map +1 -0
- package/dist/cli/index.js +367 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.d.ts +5 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +7 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/learning/FlakyFixRecommendations.d.ts +40 -0
- package/dist/learning/FlakyFixRecommendations.d.ts.map +1 -0
- package/dist/learning/FlakyFixRecommendations.js +247 -0
- package/dist/learning/FlakyFixRecommendations.js.map +1 -0
- package/dist/learning/FlakyPredictionModel.d.ts +57 -0
- package/dist/learning/FlakyPredictionModel.d.ts.map +1 -0
- package/dist/learning/FlakyPredictionModel.js +289 -0
- package/dist/learning/FlakyPredictionModel.js.map +1 -0
- package/dist/learning/FlakyTestDetector.d.ts +46 -0
- package/dist/learning/FlakyTestDetector.d.ts.map +1 -0
- package/dist/learning/FlakyTestDetector.js +215 -0
- package/dist/learning/FlakyTestDetector.js.map +1 -0
- package/dist/learning/ImprovementLoop.d.ts +119 -0
- package/dist/learning/ImprovementLoop.d.ts.map +1 -0
- package/dist/learning/ImprovementLoop.js +353 -0
- package/dist/learning/ImprovementLoop.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +144 -0
- package/dist/learning/LearningEngine.d.ts.map +1 -0
- package/dist/learning/LearningEngine.js +531 -0
- package/dist/learning/LearningEngine.js.map +1 -0
- package/dist/learning/PerformanceTracker.d.ts +118 -0
- package/dist/learning/PerformanceTracker.d.ts.map +1 -0
- package/dist/learning/PerformanceTracker.js +376 -0
- package/dist/learning/PerformanceTracker.js.map +1 -0
- package/dist/learning/StatisticalAnalysis.d.ts +47 -0
- package/dist/learning/StatisticalAnalysis.d.ts.map +1 -0
- package/dist/learning/StatisticalAnalysis.js +170 -0
- package/dist/learning/StatisticalAnalysis.js.map +1 -0
- package/dist/learning/SwarmIntegration.d.ts +107 -0
- package/dist/learning/SwarmIntegration.d.ts.map +1 -0
- package/dist/learning/SwarmIntegration.js +191 -0
- package/dist/learning/SwarmIntegration.js.map +1 -0
- package/dist/learning/index.d.ts +10 -0
- package/dist/learning/index.d.ts.map +1 -0
- package/dist/learning/index.js +16 -0
- package/dist/learning/index.js.map +1 -0
- package/dist/learning/types.d.ts +288 -0
- package/dist/learning/types.d.ts.map +1 -0
- package/dist/learning/types.js +9 -0
- package/dist/learning/types.js.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts +175 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js +693 -0
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +94 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +15 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +17 -1
- package/dist/mcp/tools.js.map +1 -1
- package/dist/reasoning/CodeSignatureGenerator.d.ts +98 -0
- package/dist/reasoning/CodeSignatureGenerator.d.ts.map +1 -0
- package/dist/reasoning/CodeSignatureGenerator.js +427 -0
- package/dist/reasoning/CodeSignatureGenerator.js.map +1 -0
- package/dist/reasoning/PatternClassifier.d.ts +98 -0
- package/dist/reasoning/PatternClassifier.d.ts.map +1 -0
- package/dist/reasoning/PatternClassifier.js +345 -0
- package/dist/reasoning/PatternClassifier.js.map +1 -0
- package/dist/reasoning/PatternExtractor.d.ts +131 -0
- package/dist/reasoning/PatternExtractor.d.ts.map +1 -0
- package/dist/reasoning/PatternExtractor.js +539 -0
- package/dist/reasoning/PatternExtractor.js.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts +102 -0
- package/dist/reasoning/PatternMemoryIntegration.d.ts.map +1 -0
- package/dist/reasoning/PatternMemoryIntegration.js +336 -0
- package/dist/reasoning/PatternMemoryIntegration.js.map +1 -0
- package/dist/reasoning/QEReasoningBank.d.ts +121 -0
- package/dist/reasoning/QEReasoningBank.d.ts.map +1 -0
- package/dist/reasoning/QEReasoningBank.js +235 -0
- package/dist/reasoning/QEReasoningBank.js.map +1 -0
- package/dist/reasoning/TestTemplateCreator.d.ts +95 -0
- package/dist/reasoning/TestTemplateCreator.d.ts.map +1 -0
- package/dist/reasoning/TestTemplateCreator.js +535 -0
- package/dist/reasoning/TestTemplateCreator.js.map +1 -0
- package/dist/reasoning/index.d.ts +10 -0
- package/dist/reasoning/index.d.ts.map +1 -0
- package/dist/reasoning/index.js +31 -0
- package/dist/reasoning/index.js.map +1 -0
- package/dist/reasoning/types.d.ts +717 -0
- package/dist/reasoning/types.d.ts.map +1 -0
- package/dist/reasoning/types.js +57 -0
- package/dist/reasoning/types.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/pattern.types.d.ts +364 -0
- package/dist/types/pattern.types.d.ts.map +1 -0
- package/dist/types/pattern.types.js +60 -0
- package/dist/types/pattern.types.js.map +1 -0
- package/package.json +25 -3
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CodeSignatureGenerator - Generate code fingerprints for pattern matching
|
|
4
|
+
* Phase 2 (v1.1.0) - Pattern Extraction Specialist
|
|
5
|
+
*
|
|
6
|
+
* Generates unique signatures for code blocks based on:
|
|
7
|
+
* - Function signatures and parameter types
|
|
8
|
+
* - Return types
|
|
9
|
+
* - Cyclomatic complexity
|
|
10
|
+
* - AST node patterns
|
|
11
|
+
* - Dependencies
|
|
12
|
+
*/
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
16
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
17
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
18
|
+
}
|
|
19
|
+
Object.defineProperty(o, k2, desc);
|
|
20
|
+
}) : (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
o[k2] = m[k];
|
|
23
|
+
}));
|
|
24
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
25
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
26
|
+
}) : function(o, v) {
|
|
27
|
+
o["default"] = v;
|
|
28
|
+
});
|
|
29
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
30
|
+
var ownKeys = function(o) {
|
|
31
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
32
|
+
var ar = [];
|
|
33
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
34
|
+
return ar;
|
|
35
|
+
};
|
|
36
|
+
return ownKeys(o);
|
|
37
|
+
};
|
|
38
|
+
return function (mod) {
|
|
39
|
+
if (mod && mod.__esModule) return mod;
|
|
40
|
+
var result = {};
|
|
41
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
42
|
+
__setModuleDefault(result, mod);
|
|
43
|
+
return result;
|
|
44
|
+
};
|
|
45
|
+
})();
|
|
46
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
exports.CodeSignatureGenerator = void 0;
|
|
48
|
+
const parser_1 = require("@babel/parser");
|
|
49
|
+
const crypto = __importStar(require("crypto"));
|
|
50
|
+
const pattern_types_1 = require("../types/pattern.types");
|
|
51
|
+
const Logger_1 = require("../utils/Logger");
|
|
52
|
+
class CodeSignatureGenerator {
|
|
53
|
+
constructor() {
|
|
54
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generate code signature from source code
|
|
58
|
+
*/
|
|
59
|
+
async generate(sourceCode, options) {
|
|
60
|
+
try {
|
|
61
|
+
const ast = this.parseAST(sourceCode, options);
|
|
62
|
+
const functionSignature = this.extractFunctionSignature(ast);
|
|
63
|
+
const parameterTypes = this.extractParameterTypes(ast);
|
|
64
|
+
const returnType = this.extractReturnType(ast);
|
|
65
|
+
const complexity = this.calculateComplexity(ast);
|
|
66
|
+
const patterns = this.identifyPatterns(ast);
|
|
67
|
+
const sourceHash = this.generateSourceHash(sourceCode);
|
|
68
|
+
const nodeTypes = this.extractNodeTypes(ast);
|
|
69
|
+
const dependencies = this.extractDependencies(ast);
|
|
70
|
+
return {
|
|
71
|
+
id: this.generateSignatureId(sourceCode),
|
|
72
|
+
functionSignature,
|
|
73
|
+
parameterTypes,
|
|
74
|
+
returnType,
|
|
75
|
+
complexity,
|
|
76
|
+
patterns,
|
|
77
|
+
sourceHash,
|
|
78
|
+
nodeTypes,
|
|
79
|
+
dependencies,
|
|
80
|
+
createdAt: new Date()
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
this.logger.error('Failed to generate code signature:', error);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Parse source code to AST
|
|
90
|
+
*/
|
|
91
|
+
parseAST(code, options) {
|
|
92
|
+
const defaultOptions = {
|
|
93
|
+
typescript: true,
|
|
94
|
+
jsx: true,
|
|
95
|
+
includeComments: false,
|
|
96
|
+
maxDepth: 50
|
|
97
|
+
};
|
|
98
|
+
const opts = { ...defaultOptions, ...options };
|
|
99
|
+
return (0, parser_1.parse)(code, {
|
|
100
|
+
sourceType: 'module',
|
|
101
|
+
plugins: opts.typescript ? ['typescript'] : []
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Extract function signature
|
|
106
|
+
*/
|
|
107
|
+
extractFunctionSignature(ast) {
|
|
108
|
+
let signature = 'unknown';
|
|
109
|
+
this.traverseAST(ast, (node) => {
|
|
110
|
+
if (node.type === 'FunctionDeclaration' ||
|
|
111
|
+
node.type === 'FunctionExpression' ||
|
|
112
|
+
node.type === 'ArrowFunctionExpression') {
|
|
113
|
+
const name = node.id?.name || 'anonymous';
|
|
114
|
+
const params = node.params.map((p) => this.getParamName(p)).join(', ');
|
|
115
|
+
signature = `${name}(${params})`;
|
|
116
|
+
}
|
|
117
|
+
if (node.type === 'ClassMethod') {
|
|
118
|
+
const name = node.key.name || 'method';
|
|
119
|
+
const params = node.params.map((p) => this.getParamName(p)).join(', ');
|
|
120
|
+
signature = `${name}(${params})`;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return signature;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Extract parameter types
|
|
127
|
+
*/
|
|
128
|
+
extractParameterTypes(ast) {
|
|
129
|
+
const parameters = [];
|
|
130
|
+
this.traverseAST(ast, (node) => {
|
|
131
|
+
if (node.type === 'FunctionDeclaration' ||
|
|
132
|
+
node.type === 'FunctionExpression' ||
|
|
133
|
+
node.type === 'ArrowFunctionExpression' ||
|
|
134
|
+
node.type === 'ClassMethod') {
|
|
135
|
+
node.params.forEach((param) => {
|
|
136
|
+
parameters.push({
|
|
137
|
+
name: this.getParamName(param),
|
|
138
|
+
type: this.getParamType(param),
|
|
139
|
+
optional: param.optional || false
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
return parameters;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Extract return type
|
|
148
|
+
*/
|
|
149
|
+
extractReturnType(ast) {
|
|
150
|
+
let returnType = 'void';
|
|
151
|
+
this.traverseAST(ast, (node) => {
|
|
152
|
+
if (node.type === 'FunctionDeclaration' ||
|
|
153
|
+
node.type === 'FunctionExpression' ||
|
|
154
|
+
node.type === 'ArrowFunctionExpression' ||
|
|
155
|
+
node.type === 'ClassMethod') {
|
|
156
|
+
if (node.returnType) {
|
|
157
|
+
returnType = this.getTypeAnnotation(node.returnType);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Infer from return statements
|
|
161
|
+
returnType = this.inferReturnType(node);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return returnType;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Calculate cyclomatic complexity
|
|
169
|
+
* Uses standard complexity metrics with proper else-if counting
|
|
170
|
+
*/
|
|
171
|
+
calculateComplexity(ast) {
|
|
172
|
+
let complexity = 1; // Base complexity
|
|
173
|
+
this.traverseAST(ast, (node) => {
|
|
174
|
+
// Increase complexity for decision points
|
|
175
|
+
if (node.type === 'IfStatement') {
|
|
176
|
+
complexity++;
|
|
177
|
+
// Count else-if as additional complexity
|
|
178
|
+
if (node.alternate && node.alternate.type === 'IfStatement') {
|
|
179
|
+
complexity++;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (node.type === 'SwitchCase' && node.test !== null)
|
|
183
|
+
complexity++;
|
|
184
|
+
if (node.type === 'ForStatement')
|
|
185
|
+
complexity++;
|
|
186
|
+
if (node.type === 'ForInStatement')
|
|
187
|
+
complexity++;
|
|
188
|
+
if (node.type === 'ForOfStatement')
|
|
189
|
+
complexity++;
|
|
190
|
+
if (node.type === 'WhileStatement')
|
|
191
|
+
complexity++;
|
|
192
|
+
if (node.type === 'DoWhileStatement')
|
|
193
|
+
complexity++;
|
|
194
|
+
if (node.type === 'ConditionalExpression')
|
|
195
|
+
complexity++;
|
|
196
|
+
if (node.type === 'LogicalExpression' && node.operator === '&&')
|
|
197
|
+
complexity++;
|
|
198
|
+
if (node.type === 'LogicalExpression' && node.operator === '||')
|
|
199
|
+
complexity++;
|
|
200
|
+
if (node.type === 'CatchClause')
|
|
201
|
+
complexity++;
|
|
202
|
+
});
|
|
203
|
+
return complexity;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Identify patterns in AST
|
|
207
|
+
*/
|
|
208
|
+
identifyPatterns(ast) {
|
|
209
|
+
const patterns = [];
|
|
210
|
+
// Identify async patterns
|
|
211
|
+
if (this.hasAsyncPattern(ast)) {
|
|
212
|
+
patterns.push({
|
|
213
|
+
type: pattern_types_1.PatternType.ASYNC_PATTERN,
|
|
214
|
+
confidence: 0.95,
|
|
215
|
+
description: 'Asynchronous execution pattern detected',
|
|
216
|
+
location: { startLine: 0, endLine: 0, startColumn: 0, endColumn: 0 },
|
|
217
|
+
data: { hasAsync: true }
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
// Identify error handling patterns
|
|
221
|
+
if (this.hasErrorHandling(ast)) {
|
|
222
|
+
patterns.push({
|
|
223
|
+
type: pattern_types_1.PatternType.ERROR_HANDLING,
|
|
224
|
+
confidence: 0.9,
|
|
225
|
+
description: 'Error handling pattern detected',
|
|
226
|
+
location: { startLine: 0, endLine: 0, startColumn: 0, endColumn: 0 },
|
|
227
|
+
data: { hasTryCatch: true }
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
// Identify boundary conditions
|
|
231
|
+
if (this.hasBoundaryChecks(ast)) {
|
|
232
|
+
patterns.push({
|
|
233
|
+
type: pattern_types_1.PatternType.BOUNDARY_CONDITION,
|
|
234
|
+
confidence: 0.85,
|
|
235
|
+
description: 'Boundary condition checks detected',
|
|
236
|
+
location: { startLine: 0, endLine: 0, startColumn: 0, endColumn: 0 },
|
|
237
|
+
data: { hasBoundaryChecks: true }
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
return patterns;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Generate source hash for change detection
|
|
244
|
+
*/
|
|
245
|
+
generateSourceHash(code) {
|
|
246
|
+
return crypto.createHash('sha256').update(code).digest('hex');
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Extract all node types in AST
|
|
250
|
+
*/
|
|
251
|
+
extractNodeTypes(ast) {
|
|
252
|
+
const types = new Set();
|
|
253
|
+
this.traverseAST(ast, (node) => {
|
|
254
|
+
if (node.type)
|
|
255
|
+
types.add(node.type);
|
|
256
|
+
});
|
|
257
|
+
return Array.from(types);
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Extract dependencies and imports
|
|
261
|
+
*/
|
|
262
|
+
extractDependencies(ast) {
|
|
263
|
+
const dependencies = [];
|
|
264
|
+
this.traverseAST(ast, (node) => {
|
|
265
|
+
if (node.type === 'ImportDeclaration') {
|
|
266
|
+
dependencies.push(node.source.value);
|
|
267
|
+
}
|
|
268
|
+
if (node.type === 'CallExpression' && node.callee.name === 'require') {
|
|
269
|
+
if (node.arguments[0] && node.arguments[0].type === 'StringLiteral') {
|
|
270
|
+
dependencies.push(node.arguments[0].value);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
return Array.from(new Set(dependencies));
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Generate unique signature ID
|
|
278
|
+
*/
|
|
279
|
+
generateSignatureId(code) {
|
|
280
|
+
const hash = crypto.createHash('md5').update(code).digest('hex').substring(0, 12);
|
|
281
|
+
return `sig-${hash}`;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Get parameter name
|
|
285
|
+
*/
|
|
286
|
+
getParamName(param) {
|
|
287
|
+
if (param.type === 'Identifier')
|
|
288
|
+
return param.name;
|
|
289
|
+
if (param.type === 'AssignmentPattern')
|
|
290
|
+
return this.getParamName(param.left);
|
|
291
|
+
if (param.type === 'RestElement')
|
|
292
|
+
return `...${this.getParamName(param.argument)}`;
|
|
293
|
+
if (param.type === 'ObjectPattern')
|
|
294
|
+
return '{...}';
|
|
295
|
+
if (param.type === 'ArrayPattern')
|
|
296
|
+
return '[...]';
|
|
297
|
+
return 'unknown';
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Get parameter type
|
|
301
|
+
*/
|
|
302
|
+
getParamType(param) {
|
|
303
|
+
if (param.typeAnnotation) {
|
|
304
|
+
return this.getTypeAnnotation(param.typeAnnotation);
|
|
305
|
+
}
|
|
306
|
+
return 'any';
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get type annotation
|
|
310
|
+
*/
|
|
311
|
+
getTypeAnnotation(typeNode) {
|
|
312
|
+
if (!typeNode)
|
|
313
|
+
return 'any';
|
|
314
|
+
if (typeNode.typeAnnotation)
|
|
315
|
+
return this.getTypeAnnotation(typeNode.typeAnnotation);
|
|
316
|
+
if (typeNode.type === 'TSStringKeyword')
|
|
317
|
+
return 'string';
|
|
318
|
+
if (typeNode.type === 'TSNumberKeyword')
|
|
319
|
+
return 'number';
|
|
320
|
+
if (typeNode.type === 'TSBooleanKeyword')
|
|
321
|
+
return 'boolean';
|
|
322
|
+
if (typeNode.type === 'TSVoidKeyword')
|
|
323
|
+
return 'void';
|
|
324
|
+
if (typeNode.type === 'TSAnyKeyword')
|
|
325
|
+
return 'any';
|
|
326
|
+
if (typeNode.type === 'TSArrayType')
|
|
327
|
+
return `${this.getTypeAnnotation(typeNode.elementType)}[]`;
|
|
328
|
+
if (typeNode.type === 'TSPromiseType')
|
|
329
|
+
return `Promise<${this.getTypeAnnotation(typeNode.typeParameter)}>`;
|
|
330
|
+
return 'unknown';
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Infer return type from return statements
|
|
334
|
+
*/
|
|
335
|
+
inferReturnType(node) {
|
|
336
|
+
let hasReturn = false;
|
|
337
|
+
let returnType = 'void';
|
|
338
|
+
this.traverseAST(node, (n) => {
|
|
339
|
+
if (n.type === 'ReturnStatement' && n.argument) {
|
|
340
|
+
hasReturn = true;
|
|
341
|
+
returnType = this.inferTypeFromExpression(n.argument);
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
return hasReturn ? returnType : 'void';
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Infer type from expression
|
|
348
|
+
*/
|
|
349
|
+
inferTypeFromExpression(expr) {
|
|
350
|
+
if (!expr)
|
|
351
|
+
return 'void';
|
|
352
|
+
if (expr.type === 'StringLiteral')
|
|
353
|
+
return 'string';
|
|
354
|
+
if (expr.type === 'NumericLiteral')
|
|
355
|
+
return 'number';
|
|
356
|
+
if (expr.type === 'BooleanLiteral')
|
|
357
|
+
return 'boolean';
|
|
358
|
+
if (expr.type === 'ArrayExpression')
|
|
359
|
+
return 'array';
|
|
360
|
+
if (expr.type === 'ObjectExpression')
|
|
361
|
+
return 'object';
|
|
362
|
+
if (expr.type === 'AwaitExpression')
|
|
363
|
+
return 'Promise<any>';
|
|
364
|
+
return 'any';
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Check for async patterns
|
|
368
|
+
*/
|
|
369
|
+
hasAsyncPattern(ast) {
|
|
370
|
+
let hasAsync = false;
|
|
371
|
+
this.traverseAST(ast, (node) => {
|
|
372
|
+
if (node.async || node.type === 'AwaitExpression') {
|
|
373
|
+
hasAsync = true;
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
return hasAsync;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Check for error handling
|
|
380
|
+
*/
|
|
381
|
+
hasErrorHandling(ast) {
|
|
382
|
+
let hasErrorHandling = false;
|
|
383
|
+
this.traverseAST(ast, (node) => {
|
|
384
|
+
if (node.type === 'TryStatement' || node.type === 'CatchClause') {
|
|
385
|
+
hasErrorHandling = true;
|
|
386
|
+
}
|
|
387
|
+
});
|
|
388
|
+
return hasErrorHandling;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Check for boundary checks
|
|
392
|
+
*/
|
|
393
|
+
hasBoundaryChecks(ast) {
|
|
394
|
+
let hasBoundary = false;
|
|
395
|
+
this.traverseAST(ast, (node) => {
|
|
396
|
+
if (node.type === 'BinaryExpression') {
|
|
397
|
+
if (['>', '<', '>=', '<=', '===', '!=='].includes(node.operator)) {
|
|
398
|
+
hasBoundary = true;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
});
|
|
402
|
+
return hasBoundary;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Traverse AST
|
|
406
|
+
*/
|
|
407
|
+
traverseAST(ast, visitor) {
|
|
408
|
+
const traverse = (node, depth = 0) => {
|
|
409
|
+
if (!node || depth > 100)
|
|
410
|
+
return;
|
|
411
|
+
visitor(node);
|
|
412
|
+
for (const key in node) {
|
|
413
|
+
if (node[key] && typeof node[key] === 'object') {
|
|
414
|
+
if (Array.isArray(node[key])) {
|
|
415
|
+
node[key].forEach((child) => traverse(child, depth + 1));
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
traverse(node[key], depth + 1);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
traverse(ast);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
exports.CodeSignatureGenerator = CodeSignatureGenerator;
|
|
427
|
+
//# sourceMappingURL=CodeSignatureGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeSignatureGenerator.js","sourceRoot":"","sources":["../../src/reasoning/CodeSignatureGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PatternClassifier - Classify and recommend patterns for code
|
|
3
|
+
* Phase 2 (v1.1.0) - Pattern Extraction Specialist
|
|
4
|
+
*
|
|
5
|
+
* Classifies patterns by type and calculates similarity scores to:
|
|
6
|
+
* - Categorize extracted patterns
|
|
7
|
+
* - Calculate pattern similarity
|
|
8
|
+
* - Recommend patterns for new code
|
|
9
|
+
* - Support pattern-based test generation
|
|
10
|
+
*/
|
|
11
|
+
import { TestPattern, PatternClassificationResult, PatternSimilarity, PatternRecommendation } from '../types/pattern.types';
|
|
12
|
+
export declare class PatternClassifier {
|
|
13
|
+
private logger;
|
|
14
|
+
private signatureGenerator;
|
|
15
|
+
private patterns;
|
|
16
|
+
constructor();
|
|
17
|
+
/**
|
|
18
|
+
* Load patterns for classification
|
|
19
|
+
*/
|
|
20
|
+
loadPatterns(patterns: TestPattern[]): void;
|
|
21
|
+
/**
|
|
22
|
+
* Classify a pattern
|
|
23
|
+
*/
|
|
24
|
+
classify(pattern: TestPattern): Promise<PatternClassificationResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Calculate similarity between two patterns
|
|
27
|
+
*/
|
|
28
|
+
calculateSimilarity(pattern1Id: string, pattern2Id: string): Promise<PatternSimilarity>;
|
|
29
|
+
/**
|
|
30
|
+
* Recommend patterns for given code
|
|
31
|
+
*/
|
|
32
|
+
recommendPatterns(sourceCode: string, limit?: number): Promise<PatternRecommendation[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Find similar patterns
|
|
35
|
+
*/
|
|
36
|
+
findSimilarPatterns(patternId: string, threshold?: number, limit?: number): Promise<PatternSimilarity[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Infer pattern type from pattern characteristics
|
|
39
|
+
*/
|
|
40
|
+
private inferPatternType;
|
|
41
|
+
/**
|
|
42
|
+
* Calculate classification confidence
|
|
43
|
+
*/
|
|
44
|
+
private calculateClassificationConfidence;
|
|
45
|
+
/**
|
|
46
|
+
* Get keywords for pattern type
|
|
47
|
+
*/
|
|
48
|
+
private getTypeKeywords;
|
|
49
|
+
/**
|
|
50
|
+
* Generate reasoning for classification
|
|
51
|
+
*/
|
|
52
|
+
private generateReasoning;
|
|
53
|
+
/**
|
|
54
|
+
* Get alternative classifications
|
|
55
|
+
*/
|
|
56
|
+
private getAlternativeClassifications;
|
|
57
|
+
/**
|
|
58
|
+
* Calculate detailed similarity metrics
|
|
59
|
+
*/
|
|
60
|
+
private calculateSimilarityDetails;
|
|
61
|
+
/**
|
|
62
|
+
* Calculate structural similarity
|
|
63
|
+
*/
|
|
64
|
+
private calculateStructuralSimilarity;
|
|
65
|
+
/**
|
|
66
|
+
* Calculate semantic similarity
|
|
67
|
+
*/
|
|
68
|
+
private calculateSemanticSimilarity;
|
|
69
|
+
/**
|
|
70
|
+
* Calculate type compatibility
|
|
71
|
+
*/
|
|
72
|
+
private calculateTypeCompatibility;
|
|
73
|
+
/**
|
|
74
|
+
* Find common patterns
|
|
75
|
+
*/
|
|
76
|
+
private findCommonPatterns;
|
|
77
|
+
/**
|
|
78
|
+
* Aggregate similarity score
|
|
79
|
+
*/
|
|
80
|
+
private aggregateSimilarityScore;
|
|
81
|
+
/**
|
|
82
|
+
* Calculate applicability of pattern to code
|
|
83
|
+
*/
|
|
84
|
+
private calculateApplicability;
|
|
85
|
+
/**
|
|
86
|
+
* Generate recommendation reason
|
|
87
|
+
*/
|
|
88
|
+
private generateRecommendationReason;
|
|
89
|
+
/**
|
|
90
|
+
* Get all loaded patterns
|
|
91
|
+
*/
|
|
92
|
+
getPatterns(): TestPattern[];
|
|
93
|
+
/**
|
|
94
|
+
* Get pattern by ID
|
|
95
|
+
*/
|
|
96
|
+
getPattern(id: string): TestPattern | undefined;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=PatternClassifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternClassifier.d.ts","sourceRoot":"","sources":["../../src/reasoning/PatternClassifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,WAAW,EAEX,2BAA2B,EAC3B,iBAAiB,EACjB,qBAAqB,EAGtB,MAAM,wBAAwB,CAAC;AAIhC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,QAAQ,CAA2B;;IAQ3C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAO3C;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAe1E;;OAEG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmB7F;;OAEG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,qBAAqB,EAAE,CAAC;IA2BnC;;OAEG;IACG,mBAAmB,CACvB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAY,EACvB,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAsB/B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAoBzC;;OAEG;IACH,OAAO,CAAC,eAAe;IAgBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAiBrC;;OAEG;YACW,0BAA0B;IAiBxC;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAYrC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAWnC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA0BpC;;OAEG;IACH,WAAW,IAAI,WAAW,EAAE;IAI5B;;OAEG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;CAGhD"}
|