agentic-qe 2.3.4 → 2.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/CHANGELOG.md +25 -0
- package/README.md +1 -1
- package/dist/agents/ApiContractValidatorAgent.d.ts +5 -0
- package/dist/agents/ApiContractValidatorAgent.d.ts.map +1 -1
- package/dist/agents/ApiContractValidatorAgent.js +41 -0
- package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +5 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CodeComplexityAnalyzerAgent.js +47 -0
- package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +26 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +149 -1
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.d.ts +5 -0
- package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
- package/dist/agents/DeploymentReadinessAgent.js +41 -0
- package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.d.ts +5 -0
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +40 -0
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts +5 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +51 -0
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/agents/PerformanceTesterAgent.d.ts +5 -0
- package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
- package/dist/agents/PerformanceTesterAgent.js +44 -0
- package/dist/agents/PerformanceTesterAgent.js.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.d.ts +5 -0
- package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
- package/dist/agents/ProductionIntelligenceAgent.js +46 -0
- package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
- package/dist/agents/QXPartnerAgent.js +52 -0
- package/dist/agents/QXPartnerAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts +5 -0
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js +45 -0
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +40 -0
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +227 -1
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts +5 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/RegressionRiskAnalyzerAgent.js +46 -0
- package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.d.ts +5 -0
- package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
- package/dist/agents/RequirementsValidatorAgent.js +42 -0
- package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.d.ts +5 -0
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +39 -0
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/TestDataArchitectAgent.d.ts +5 -0
- package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
- package/dist/agents/TestDataArchitectAgent.js +46 -0
- package/dist/agents/TestDataArchitectAgent.js.map +1 -1
- package/dist/agents/TestExecutorAgent.d.ts +5 -0
- package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
- package/dist/agents/TestExecutorAgent.js +48 -0
- package/dist/agents/TestExecutorAgent.js.map +1 -1
- package/dist/agents/TestGeneratorAgent.d.ts +5 -0
- package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
- package/dist/agents/TestGeneratorAgent.js +36 -0
- package/dist/agents/TestGeneratorAgent.js.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.d.ts.map +1 -1
- package/dist/agents/lifecycle/AgentLifecycleManager.js +5 -2
- package/dist/agents/lifecycle/AgentLifecycleManager.js.map +1 -1
- package/dist/cli/index.js +68 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/learning/capture/ExperienceExtractor.d.ts +219 -0
- package/dist/learning/capture/ExperienceExtractor.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceExtractor.js +536 -0
- package/dist/learning/capture/ExperienceExtractor.js.map +1 -0
- package/dist/learning/capture/ExperienceStore.d.ts +196 -0
- package/dist/learning/capture/ExperienceStore.d.ts.map +1 -0
- package/dist/learning/capture/ExperienceStore.js +453 -0
- package/dist/learning/capture/ExperienceStore.js.map +1 -0
- package/dist/learning/scheduler/SleepScheduler.d.ts +2 -0
- package/dist/learning/scheduler/SleepScheduler.d.ts.map +1 -1
- package/dist/learning/scheduler/SleepScheduler.js +2 -0
- package/dist/learning/scheduler/SleepScheduler.js.map +1 -1
- package/dist/learning/synthesis/ClusteringEngine.d.ts +122 -0
- package/dist/learning/synthesis/ClusteringEngine.d.ts.map +1 -0
- package/dist/learning/synthesis/ClusteringEngine.js +356 -0
- package/dist/learning/synthesis/ClusteringEngine.js.map +1 -0
- package/dist/learning/transfer/TransferRegistry.d.ts +245 -0
- package/dist/learning/transfer/TransferRegistry.d.ts.map +1 -0
- package/dist/learning/transfer/TransferRegistry.js +410 -0
- package/dist/learning/transfer/TransferRegistry.js.map +1 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts +11 -0
- package/dist/mcp/handlers/task-orchestrate.d.ts.map +1 -1
- package/dist/mcp/handlers/task-orchestrate.js +297 -4
- package/dist/mcp/handlers/task-orchestrate.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/services/AgentRegistry.d.ts +6 -1
- package/dist/mcp/services/AgentRegistry.d.ts.map +1 -1
- package/dist/mcp/services/AgentRegistry.js +34 -3
- package/dist/mcp/services/AgentRegistry.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,536 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ExperienceExtractor - Extract learnable content from agent executions
|
|
4
|
+
*
|
|
5
|
+
* Analyzes agent execution events to extract:
|
|
6
|
+
* - Patterns and techniques used
|
|
7
|
+
* - Decisions made during execution
|
|
8
|
+
* - Errors encountered and handled
|
|
9
|
+
* - Quality metrics and scores
|
|
10
|
+
* - Vector embeddings for similarity search
|
|
11
|
+
*
|
|
12
|
+
* Part of the Nightly-Learner Phase 1 implementation.
|
|
13
|
+
*
|
|
14
|
+
* @version 1.0.0
|
|
15
|
+
* @module src/learning/capture/ExperienceExtractor
|
|
16
|
+
*/
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.ExperienceExtractor = void 0;
|
|
19
|
+
const EmbeddingGenerator_1 = require("../../core/embeddings/EmbeddingGenerator");
|
|
20
|
+
const Logger_1 = require("../../utils/Logger");
|
|
21
|
+
/**
|
|
22
|
+
* ExperienceExtractor extracts learnable content from agent executions
|
|
23
|
+
*
|
|
24
|
+
* Analyzes execution events to identify patterns, decisions, and quality metrics
|
|
25
|
+
* that can be used for learning and improvement.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```typescript
|
|
29
|
+
* const extractor = new ExperienceExtractor({
|
|
30
|
+
* generateEmbeddings: true,
|
|
31
|
+
* useMLEmbeddings: false
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* const content = await extractor.extract(executionEvent);
|
|
35
|
+
* console.log('Patterns:', content.patterns);
|
|
36
|
+
* console.log('Quality:', content.qualityScore);
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
class ExperienceExtractor {
|
|
40
|
+
constructor(config) {
|
|
41
|
+
// Statistics tracking
|
|
42
|
+
this.totalExtractions = 0;
|
|
43
|
+
this.totalPatterns = 0;
|
|
44
|
+
this.totalDecisions = 0;
|
|
45
|
+
this.totalErrors = 0;
|
|
46
|
+
this.totalEmbeddings = 0;
|
|
47
|
+
this.totalQualityScore = 0;
|
|
48
|
+
this.totalExtractionTime = 0;
|
|
49
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
50
|
+
this.config = {
|
|
51
|
+
generateEmbeddings: config?.generateEmbeddings ?? true,
|
|
52
|
+
useMLEmbeddings: config?.useMLEmbeddings ?? false,
|
|
53
|
+
embeddingDimension: config?.embeddingDimension ?? 256,
|
|
54
|
+
debug: config?.debug ?? false,
|
|
55
|
+
};
|
|
56
|
+
// Initialize embedding generator
|
|
57
|
+
this.embeddingGenerator = new EmbeddingGenerator_1.EmbeddingGenerator(10000, // Cache size
|
|
58
|
+
this.config.useMLEmbeddings // Auto-init ML models
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Extract learnable content from an agent execution event
|
|
63
|
+
*
|
|
64
|
+
* @param event - Agent execution event to analyze
|
|
65
|
+
* @returns Extracted content with patterns, decisions, and embeddings
|
|
66
|
+
*/
|
|
67
|
+
async extract(event) {
|
|
68
|
+
const startTime = Date.now();
|
|
69
|
+
try {
|
|
70
|
+
// Extract patterns from output
|
|
71
|
+
const patterns = this.extractPatterns(event.output);
|
|
72
|
+
// Extract decisions from output
|
|
73
|
+
const decisions = this.extractDecisions(event.output);
|
|
74
|
+
// Extract errors
|
|
75
|
+
const errors = this.extractErrors(event);
|
|
76
|
+
// Calculate quality score
|
|
77
|
+
const qualityScore = this.calculateQualityScore(event);
|
|
78
|
+
// Generate embedding if enabled
|
|
79
|
+
let embedding;
|
|
80
|
+
let embeddingDimension;
|
|
81
|
+
let embeddingMethod;
|
|
82
|
+
if (this.config.generateEmbeddings) {
|
|
83
|
+
const embeddingResult = await this.generateEmbedding(event);
|
|
84
|
+
embedding = embeddingResult.embedding;
|
|
85
|
+
embeddingDimension = embeddingResult.dimension;
|
|
86
|
+
embeddingMethod = embeddingResult.method;
|
|
87
|
+
this.totalEmbeddings++;
|
|
88
|
+
}
|
|
89
|
+
// Extract coverage metrics
|
|
90
|
+
const coverage = this.extractCoverage(event);
|
|
91
|
+
// Create content hash for deduplication
|
|
92
|
+
const contentHash = this.createContentHash(event);
|
|
93
|
+
// Update statistics
|
|
94
|
+
this.totalExtractions++;
|
|
95
|
+
this.totalPatterns += patterns.length;
|
|
96
|
+
this.totalDecisions += decisions.length;
|
|
97
|
+
this.totalErrors += errors.length;
|
|
98
|
+
this.totalQualityScore += qualityScore;
|
|
99
|
+
this.totalExtractionTime += Date.now() - startTime;
|
|
100
|
+
const extracted = {
|
|
101
|
+
patterns,
|
|
102
|
+
decisions,
|
|
103
|
+
errors,
|
|
104
|
+
qualityScore,
|
|
105
|
+
embedding,
|
|
106
|
+
coverage,
|
|
107
|
+
metadata: {
|
|
108
|
+
extractedAt: new Date(),
|
|
109
|
+
contentHash,
|
|
110
|
+
embeddingDimension,
|
|
111
|
+
embeddingMethod,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
if (this.config.debug) {
|
|
115
|
+
this.logger.debug('[ExperienceExtractor] Content extracted', {
|
|
116
|
+
patterns: patterns.length,
|
|
117
|
+
decisions: decisions.length,
|
|
118
|
+
errors: errors.length,
|
|
119
|
+
qualityScore: qualityScore.toFixed(2),
|
|
120
|
+
hasEmbedding: !!embedding,
|
|
121
|
+
extractionTime: Date.now() - startTime,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return extracted;
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
this.logger.error('[ExperienceExtractor] Extraction failed', { error });
|
|
128
|
+
throw new Error(`Extraction failed: ${error.message}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Extract patterns used during execution
|
|
133
|
+
*
|
|
134
|
+
* Looks for:
|
|
135
|
+
* - Explicit pattern references in output
|
|
136
|
+
* - Testing frameworks and strategies
|
|
137
|
+
* - Code patterns and techniques
|
|
138
|
+
* - Quality engineering approaches
|
|
139
|
+
*
|
|
140
|
+
* @param output - Execution output data
|
|
141
|
+
* @returns Array of pattern identifiers
|
|
142
|
+
*/
|
|
143
|
+
extractPatterns(output) {
|
|
144
|
+
const patterns = [];
|
|
145
|
+
// Direct pattern references
|
|
146
|
+
if (output.patterns && Array.isArray(output.patterns)) {
|
|
147
|
+
patterns.push(...output.patterns.map((p) => {
|
|
148
|
+
if (typeof p === 'string')
|
|
149
|
+
return p;
|
|
150
|
+
if (p && typeof p === 'object' && 'id' in p)
|
|
151
|
+
return String(p.id);
|
|
152
|
+
if (p && typeof p === 'object' && 'name' in p)
|
|
153
|
+
return String(p.name);
|
|
154
|
+
return String(p);
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
if (output.patternsApplied && Array.isArray(output.patternsApplied)) {
|
|
158
|
+
patterns.push(...output.patternsApplied.map(String));
|
|
159
|
+
}
|
|
160
|
+
if (output.patternsUsed && Array.isArray(output.patternsUsed)) {
|
|
161
|
+
patterns.push(...output.patternsUsed.map(String));
|
|
162
|
+
}
|
|
163
|
+
// Framework detection
|
|
164
|
+
if (output.framework) {
|
|
165
|
+
patterns.push(`framework:${output.framework}`);
|
|
166
|
+
}
|
|
167
|
+
if (output.testFramework) {
|
|
168
|
+
patterns.push(`test-framework:${output.testFramework}`);
|
|
169
|
+
}
|
|
170
|
+
// Strategy detection
|
|
171
|
+
if (output.strategy) {
|
|
172
|
+
patterns.push(`strategy:${output.strategy}`);
|
|
173
|
+
}
|
|
174
|
+
if (output.testStrategy) {
|
|
175
|
+
patterns.push(`test-strategy:${output.testStrategy}`);
|
|
176
|
+
}
|
|
177
|
+
// Technique detection
|
|
178
|
+
if (output.techniques && Array.isArray(output.techniques)) {
|
|
179
|
+
patterns.push(...output.techniques.map((t) => `technique:${t}`));
|
|
180
|
+
}
|
|
181
|
+
// Approach detection
|
|
182
|
+
if (output.approach) {
|
|
183
|
+
patterns.push(`approach:${output.approach}`);
|
|
184
|
+
}
|
|
185
|
+
// Method detection
|
|
186
|
+
if (output.methods && Array.isArray(output.methods)) {
|
|
187
|
+
patterns.push(...output.methods.map((m) => `method:${m}`));
|
|
188
|
+
}
|
|
189
|
+
// Tool detection
|
|
190
|
+
if (output.tools && Array.isArray(output.tools)) {
|
|
191
|
+
patterns.push(...output.tools.map((t) => `tool:${t}`));
|
|
192
|
+
}
|
|
193
|
+
// Remove duplicates and empty strings
|
|
194
|
+
return [...new Set(patterns)].filter(p => p && p.length > 0);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Extract decisions made during execution
|
|
198
|
+
*
|
|
199
|
+
* Looks for:
|
|
200
|
+
* - Strategic choices
|
|
201
|
+
* - Configuration decisions
|
|
202
|
+
* - Implementation approaches
|
|
203
|
+
* - Trade-off evaluations
|
|
204
|
+
*
|
|
205
|
+
* @param output - Execution output data
|
|
206
|
+
* @returns Array of decision descriptions
|
|
207
|
+
*/
|
|
208
|
+
extractDecisions(output) {
|
|
209
|
+
const decisions = [];
|
|
210
|
+
// Direct decision references
|
|
211
|
+
if (output.decisions && Array.isArray(output.decisions)) {
|
|
212
|
+
decisions.push(...output.decisions.map(String));
|
|
213
|
+
}
|
|
214
|
+
if (output.decisionsMade && Array.isArray(output.decisionsMade)) {
|
|
215
|
+
decisions.push(...output.decisionsMade.map(String));
|
|
216
|
+
}
|
|
217
|
+
// Strategy decisions
|
|
218
|
+
if (output.strategy) {
|
|
219
|
+
decisions.push(`strategy:${output.strategy}`);
|
|
220
|
+
}
|
|
221
|
+
// Framework decisions
|
|
222
|
+
if (output.framework) {
|
|
223
|
+
decisions.push(`framework:${output.framework}`);
|
|
224
|
+
}
|
|
225
|
+
// Configuration decisions
|
|
226
|
+
if (output.config && typeof output.config === 'object') {
|
|
227
|
+
const config = output.config;
|
|
228
|
+
Object.entries(config).forEach(([key, value]) => {
|
|
229
|
+
if (value !== null && value !== undefined) {
|
|
230
|
+
decisions.push(`config:${key}=${JSON.stringify(value)}`);
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
// Coverage target decisions
|
|
235
|
+
if (output.coverageTarget) {
|
|
236
|
+
decisions.push(`coverage-target:${output.coverageTarget}`);
|
|
237
|
+
}
|
|
238
|
+
// Test type decisions
|
|
239
|
+
if (output.testType) {
|
|
240
|
+
decisions.push(`test-type:${output.testType}`);
|
|
241
|
+
}
|
|
242
|
+
if (output.testTypes && Array.isArray(output.testTypes)) {
|
|
243
|
+
decisions.push(...output.testTypes.map((t) => `test-type:${t}`));
|
|
244
|
+
}
|
|
245
|
+
// Assertion style decisions
|
|
246
|
+
if (output.assertionStyle) {
|
|
247
|
+
decisions.push(`assertion-style:${output.assertionStyle}`);
|
|
248
|
+
}
|
|
249
|
+
// Mock strategy decisions
|
|
250
|
+
if (output.mockStrategy) {
|
|
251
|
+
decisions.push(`mock-strategy:${output.mockStrategy}`);
|
|
252
|
+
}
|
|
253
|
+
// Architecture decisions
|
|
254
|
+
if (output.architecture) {
|
|
255
|
+
decisions.push(`architecture:${output.architecture}`);
|
|
256
|
+
}
|
|
257
|
+
// Remove duplicates and empty strings
|
|
258
|
+
return [...new Set(decisions)].filter(d => d && d.length > 0);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Extract errors encountered during execution
|
|
262
|
+
*
|
|
263
|
+
* @param event - Execution event
|
|
264
|
+
* @returns Array of error messages
|
|
265
|
+
*/
|
|
266
|
+
extractErrors(event) {
|
|
267
|
+
const errors = [];
|
|
268
|
+
// Direct error from event
|
|
269
|
+
if (event.error) {
|
|
270
|
+
errors.push(event.error.message);
|
|
271
|
+
// Include stack trace hash for grouping similar errors
|
|
272
|
+
if (event.error.stack) {
|
|
273
|
+
const stackHash = this.hashString(event.error.stack.substring(0, 200));
|
|
274
|
+
errors.push(`stack-hash:${stackHash}`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// Errors in output
|
|
278
|
+
if (event.output.errors && Array.isArray(event.output.errors)) {
|
|
279
|
+
errors.push(...event.output.errors.map((e) => {
|
|
280
|
+
if (typeof e === 'string')
|
|
281
|
+
return e;
|
|
282
|
+
if (e && typeof e === 'object' && 'message' in e)
|
|
283
|
+
return String(e.message);
|
|
284
|
+
return String(e);
|
|
285
|
+
}));
|
|
286
|
+
}
|
|
287
|
+
if (event.output.error) {
|
|
288
|
+
errors.push(String(event.output.error));
|
|
289
|
+
}
|
|
290
|
+
// Warnings as potential issues
|
|
291
|
+
if (event.output.warnings && Array.isArray(event.output.warnings)) {
|
|
292
|
+
errors.push(...event.output.warnings.map((w) => `warning:${w}`));
|
|
293
|
+
}
|
|
294
|
+
return [...new Set(errors)].filter(e => e && e.length > 0);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Calculate quality score for the execution
|
|
298
|
+
*
|
|
299
|
+
* Scoring factors:
|
|
300
|
+
* - Success/failure (0.5 base)
|
|
301
|
+
* - Coverage metrics (+0.2)
|
|
302
|
+
* - Tests generated (+0.1)
|
|
303
|
+
* - Execution speed (+0.1)
|
|
304
|
+
* - Error penalties (-0.2)
|
|
305
|
+
*
|
|
306
|
+
* @param event - Execution event
|
|
307
|
+
* @returns Quality score between 0 and 1
|
|
308
|
+
*/
|
|
309
|
+
calculateQualityScore(event) {
|
|
310
|
+
let score = event.success ? 0.5 : 0.0;
|
|
311
|
+
// Metrics-based scoring
|
|
312
|
+
if (event.metrics) {
|
|
313
|
+
// Coverage bonus
|
|
314
|
+
if (event.metrics.coverage !== undefined) {
|
|
315
|
+
const coverage = Number(event.metrics.coverage);
|
|
316
|
+
if (coverage >= 90) {
|
|
317
|
+
score += 0.2;
|
|
318
|
+
}
|
|
319
|
+
else if (coverage >= 70) {
|
|
320
|
+
score += 0.15;
|
|
321
|
+
}
|
|
322
|
+
else if (coverage >= 50) {
|
|
323
|
+
score += 0.1;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Tests generated bonus
|
|
327
|
+
if (event.metrics.testsGenerated !== undefined) {
|
|
328
|
+
const testsGenerated = Number(event.metrics.testsGenerated);
|
|
329
|
+
if (testsGenerated >= 10) {
|
|
330
|
+
score += 0.1;
|
|
331
|
+
}
|
|
332
|
+
else if (testsGenerated >= 5) {
|
|
333
|
+
score += 0.05;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
// Execution speed bonus (fast execution)
|
|
337
|
+
if (event.duration !== undefined) {
|
|
338
|
+
if (event.duration < 3000) {
|
|
339
|
+
score += 0.1; // Very fast (< 3s)
|
|
340
|
+
}
|
|
341
|
+
else if (event.duration < 5000) {
|
|
342
|
+
score += 0.05; // Fast (< 5s)
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
// Code quality bonus
|
|
346
|
+
if (event.metrics.codeQuality !== undefined) {
|
|
347
|
+
const quality = Number(event.metrics.codeQuality);
|
|
348
|
+
score += quality * 0.1; // Up to +0.1 for perfect quality
|
|
349
|
+
}
|
|
350
|
+
// Coverage delta bonus (improvement)
|
|
351
|
+
if (event.metrics.coverage_delta !== undefined) {
|
|
352
|
+
const delta = Number(event.metrics.coverage_delta);
|
|
353
|
+
if (delta > 10) {
|
|
354
|
+
score += 0.05;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
// Error penalties
|
|
359
|
+
if (event.error) {
|
|
360
|
+
score -= 0.2;
|
|
361
|
+
}
|
|
362
|
+
if (event.output.errors && Array.isArray(event.output.errors)) {
|
|
363
|
+
score -= Math.min(0.2, event.output.errors.length * 0.05);
|
|
364
|
+
}
|
|
365
|
+
// Ensure score is in valid range [0, 1]
|
|
366
|
+
return Math.max(0, Math.min(1, score));
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Generate embedding for execution content
|
|
370
|
+
*
|
|
371
|
+
* Creates a vector embedding of the execution's content for similarity search.
|
|
372
|
+
* Combines input, output, patterns, and decisions into a single representation.
|
|
373
|
+
*
|
|
374
|
+
* @param event - Execution event
|
|
375
|
+
* @returns Embedding result with vector and metadata
|
|
376
|
+
*/
|
|
377
|
+
async generateEmbedding(event) {
|
|
378
|
+
// Create a text representation of the execution
|
|
379
|
+
const content = this.serializeExecutionContent(event);
|
|
380
|
+
try {
|
|
381
|
+
// Generate text embedding
|
|
382
|
+
const result = await this.embeddingGenerator.generateTextEmbedding(content, {
|
|
383
|
+
useML: this.config.useMLEmbeddings,
|
|
384
|
+
useCache: true,
|
|
385
|
+
normalize: true,
|
|
386
|
+
dimension: this.config.embeddingDimension,
|
|
387
|
+
});
|
|
388
|
+
return {
|
|
389
|
+
embedding: result.embedding,
|
|
390
|
+
dimension: result.dimension,
|
|
391
|
+
method: result.method,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
// Fallback to hash-based embedding
|
|
396
|
+
this.logger.warn('[ExperienceExtractor] ML embedding failed, using hash-based', { error: error.message });
|
|
397
|
+
const embedding = this.embeddingGenerator.generateHashEmbedding(content, this.config.embeddingDimension);
|
|
398
|
+
return {
|
|
399
|
+
embedding,
|
|
400
|
+
dimension: embedding.length,
|
|
401
|
+
method: 'hash',
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Extract coverage metrics from event
|
|
407
|
+
*
|
|
408
|
+
* @param event - Execution event
|
|
409
|
+
* @returns Coverage information
|
|
410
|
+
*/
|
|
411
|
+
extractCoverage(event) {
|
|
412
|
+
if (!event.metrics)
|
|
413
|
+
return undefined;
|
|
414
|
+
const delta = event.metrics.coverage_delta !== undefined
|
|
415
|
+
? Number(event.metrics.coverage_delta)
|
|
416
|
+
: 0;
|
|
417
|
+
const total = event.metrics.coverage !== undefined
|
|
418
|
+
? Number(event.metrics.coverage)
|
|
419
|
+
: undefined;
|
|
420
|
+
return { delta, total };
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Serialize execution content to text for embedding
|
|
424
|
+
*
|
|
425
|
+
* @param event - Execution event
|
|
426
|
+
* @returns Text representation
|
|
427
|
+
*/
|
|
428
|
+
serializeExecutionContent(event) {
|
|
429
|
+
const parts = [
|
|
430
|
+
`agent:${event.agentType}`,
|
|
431
|
+
`task:${event.taskType}`,
|
|
432
|
+
`success:${event.success}`,
|
|
433
|
+
];
|
|
434
|
+
// Add patterns
|
|
435
|
+
const patterns = this.extractPatterns(event.output);
|
|
436
|
+
if (patterns.length > 0) {
|
|
437
|
+
parts.push(`patterns:${patterns.join(',')}`);
|
|
438
|
+
}
|
|
439
|
+
// Add decisions
|
|
440
|
+
const decisions = this.extractDecisions(event.output);
|
|
441
|
+
if (decisions.length > 0) {
|
|
442
|
+
parts.push(`decisions:${decisions.join(',')}`);
|
|
443
|
+
}
|
|
444
|
+
// Add metrics
|
|
445
|
+
if (event.metrics) {
|
|
446
|
+
Object.entries(event.metrics).forEach(([key, value]) => {
|
|
447
|
+
parts.push(`metric:${key}=${value}`);
|
|
448
|
+
});
|
|
449
|
+
}
|
|
450
|
+
// Add input summary (avoid large objects)
|
|
451
|
+
if (event.input.description) {
|
|
452
|
+
parts.push(`input:${String(event.input.description).substring(0, 200)}`);
|
|
453
|
+
}
|
|
454
|
+
return parts.join('|');
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Create content hash for deduplication
|
|
458
|
+
*
|
|
459
|
+
* @param event - Execution event
|
|
460
|
+
* @returns Content hash
|
|
461
|
+
*/
|
|
462
|
+
createContentHash(event) {
|
|
463
|
+
const content = this.serializeExecutionContent(event);
|
|
464
|
+
return this.hashString(content);
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Hash a string using simple algorithm
|
|
468
|
+
*
|
|
469
|
+
* @param str - String to hash
|
|
470
|
+
* @returns Hash string
|
|
471
|
+
*/
|
|
472
|
+
hashString(str) {
|
|
473
|
+
let hash = 0;
|
|
474
|
+
for (let i = 0; i < str.length; i++) {
|
|
475
|
+
const char = str.charCodeAt(i);
|
|
476
|
+
hash = ((hash << 5) - hash) + char;
|
|
477
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
478
|
+
}
|
|
479
|
+
return Math.abs(hash).toString(16);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Get extraction statistics
|
|
483
|
+
*
|
|
484
|
+
* @returns Statistics about extraction operations
|
|
485
|
+
*/
|
|
486
|
+
getStats() {
|
|
487
|
+
return {
|
|
488
|
+
totalExtractions: this.totalExtractions,
|
|
489
|
+
patternsExtracted: this.totalPatterns,
|
|
490
|
+
decisionsExtracted: this.totalDecisions,
|
|
491
|
+
errorsExtracted: this.totalErrors,
|
|
492
|
+
embeddingsGenerated: this.totalEmbeddings,
|
|
493
|
+
avgQualityScore: this.totalExtractions > 0
|
|
494
|
+
? this.totalQualityScore / this.totalExtractions
|
|
495
|
+
: 0,
|
|
496
|
+
avgExtractionTime: this.totalExtractions > 0
|
|
497
|
+
? this.totalExtractionTime / this.totalExtractions
|
|
498
|
+
: 0,
|
|
499
|
+
};
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Reset statistics
|
|
503
|
+
*/
|
|
504
|
+
resetStats() {
|
|
505
|
+
this.totalExtractions = 0;
|
|
506
|
+
this.totalPatterns = 0;
|
|
507
|
+
this.totalDecisions = 0;
|
|
508
|
+
this.totalErrors = 0;
|
|
509
|
+
this.totalEmbeddings = 0;
|
|
510
|
+
this.totalQualityScore = 0;
|
|
511
|
+
this.totalExtractionTime = 0;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Update configuration
|
|
515
|
+
*
|
|
516
|
+
* @param config - New configuration values
|
|
517
|
+
*/
|
|
518
|
+
updateConfig(config) {
|
|
519
|
+
this.config = {
|
|
520
|
+
...this.config,
|
|
521
|
+
...config,
|
|
522
|
+
};
|
|
523
|
+
this.logger.info('[ExperienceExtractor] Configuration updated', this.config);
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Get current configuration
|
|
527
|
+
*
|
|
528
|
+
* @returns Current configuration
|
|
529
|
+
*/
|
|
530
|
+
getConfig() {
|
|
531
|
+
return { ...this.config };
|
|
532
|
+
}
|
|
533
|
+
}
|
|
534
|
+
exports.ExperienceExtractor = ExperienceExtractor;
|
|
535
|
+
exports.default = ExperienceExtractor;
|
|
536
|
+
//# sourceMappingURL=ExperienceExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExperienceExtractor.js","sourceRoot":"","sources":["../../../src/learning/capture/ExperienceExtractor.ts"],"names":[],"mappings":"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"}
|