agentic-qe 2.5.8 → 2.5.9
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 +47 -0
- package/README.md +1 -1
- package/dist/agents/BaseAgent.d.ts +92 -7
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +167 -7
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +20 -23
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +95 -145
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.d.ts +2 -2
- package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
- package/dist/agents/QualityGateAgent.d.ts +35 -18
- package/dist/agents/QualityGateAgent.d.ts.map +1 -1
- package/dist/agents/QualityGateAgent.js +72 -97
- package/dist/agents/QualityGateAgent.js.map +1 -1
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +17 -4
- package/dist/agents/index.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/tools.d.ts +6 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +121 -0
- package/dist/mcp/tools.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CoverageAnalyzerAgent - O(log n) coverage optimization and gap analysis
|
|
3
3
|
* Phase 2 (v1.1.0) - Enhanced with Learning Capabilities
|
|
4
|
+
* Phase 0.5 (v2.5.9) - Migrated to BaseAgent for RuVector integration
|
|
4
5
|
*
|
|
5
6
|
* Implements sublinear algorithms from SPARC Phase 2 Section 3 with continuous
|
|
6
7
|
* improvement through reinforcement learning and performance tracking.
|
|
7
8
|
*/
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
export interface CoverageAnalyzerConfig {
|
|
11
|
-
id: AgentId;
|
|
12
|
-
memoryStore?: MemoryStore;
|
|
13
|
-
enableLearning?: boolean;
|
|
9
|
+
import { TestSuite, CoverageReport, QETask } from '../types';
|
|
10
|
+
import { BaseAgent, BaseAgentConfig } from './BaseAgent';
|
|
11
|
+
export interface CoverageAnalyzerConfig extends BaseAgentConfig {
|
|
14
12
|
enablePatterns?: boolean;
|
|
15
13
|
targetImprovement?: number;
|
|
16
14
|
improvementPeriodDays?: number;
|
|
@@ -68,35 +66,34 @@ export interface CoverageOptimizationResult {
|
|
|
68
66
|
patternsApplied: number;
|
|
69
67
|
};
|
|
70
68
|
}
|
|
71
|
-
export declare class CoverageAnalyzerAgent extends
|
|
72
|
-
private id;
|
|
73
|
-
private status;
|
|
74
|
-
private memoryStore?;
|
|
75
|
-
private logger;
|
|
69
|
+
export declare class CoverageAnalyzerAgent extends BaseAgent {
|
|
76
70
|
private sublinearCore;
|
|
77
71
|
private coverageEngine;
|
|
78
72
|
private gapDetector;
|
|
79
|
-
private learningEngine?;
|
|
80
|
-
private performanceTracker?;
|
|
81
73
|
private improvementLoop?;
|
|
82
74
|
private reasoningBank?;
|
|
83
75
|
private experienceCapture?;
|
|
84
76
|
private cachedPatterns;
|
|
85
77
|
private agentDB?;
|
|
86
|
-
private
|
|
78
|
+
private coverageConfig;
|
|
79
|
+
private coverageLogger;
|
|
87
80
|
constructor(config: CoverageAnalyzerConfig);
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
capabilities: string[];
|
|
81
|
+
protected initializeComponents(): Promise<void>;
|
|
82
|
+
protected performTask(task: QETask): Promise<any>;
|
|
83
|
+
protected loadKnowledge(): Promise<void>;
|
|
84
|
+
protected cleanup(): Promise<void>;
|
|
85
|
+
/**
|
|
86
|
+
* Get coverage-specific status including optimization metrics
|
|
87
|
+
*/
|
|
88
|
+
getCoverageStatus(): {
|
|
97
89
|
performance: any;
|
|
98
90
|
learning?: any;
|
|
91
|
+
ruvector: {
|
|
92
|
+
enabled: boolean;
|
|
93
|
+
cacheHitRate: number;
|
|
94
|
+
};
|
|
99
95
|
};
|
|
96
|
+
private getAgentIdStr;
|
|
100
97
|
/**
|
|
101
98
|
* Optimize coverage using sublinear algorithms with learning enhancement
|
|
102
99
|
* Based on SPARC Phase 2 Algorithm: OptimizeCoverageSublinear
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoverageAnalyzerAgent.d.ts","sourceRoot":"","sources":["../../src/agents/CoverageAnalyzerAgent.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"CoverageAnalyzerAgent.d.ts","sourceRoot":"","sources":["../../src/agents/CoverageAnalyzerAgent.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,156 +2,101 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* CoverageAnalyzerAgent - O(log n) coverage optimization and gap analysis
|
|
4
4
|
* Phase 2 (v1.1.0) - Enhanced with Learning Capabilities
|
|
5
|
+
* Phase 0.5 (v2.5.9) - Migrated to BaseAgent for RuVector integration
|
|
5
6
|
*
|
|
6
7
|
* Implements sublinear algorithms from SPARC Phase 2 Section 3 with continuous
|
|
7
8
|
* improvement through reinforcement learning and performance tracking.
|
|
8
9
|
*/
|
|
9
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
11
|
exports.CoverageAnalyzerAgent = void 0;
|
|
11
|
-
const events_1 = require("events");
|
|
12
12
|
const SecureRandom_js_1 = require("../utils/SecureRandom.js");
|
|
13
|
-
const
|
|
14
|
-
const LearningEngine_1 = require("../learning/LearningEngine");
|
|
15
|
-
const PerformanceTracker_1 = require("../learning/PerformanceTracker");
|
|
13
|
+
const BaseAgent_1 = require("./BaseAgent");
|
|
16
14
|
const ImprovementLoop_1 = require("../learning/ImprovementLoop");
|
|
17
15
|
const QEReasoningBank_1 = require("../reasoning/QEReasoningBank");
|
|
18
16
|
const Logger_1 = require("../utils/Logger");
|
|
19
17
|
const ExperienceCapture_1 = require("../learning/capture/ExperienceCapture");
|
|
20
18
|
// ============================================================================
|
|
21
|
-
// Main Agent Class
|
|
19
|
+
// Main Agent Class - Now extends BaseAgent for RuVector integration
|
|
22
20
|
// ============================================================================
|
|
23
|
-
class CoverageAnalyzerAgent extends
|
|
24
|
-
constructor(
|
|
25
|
-
super();
|
|
26
|
-
this.status = types_1.AgentStatus.INITIALIZING;
|
|
21
|
+
class CoverageAnalyzerAgent extends BaseAgent_1.BaseAgent {
|
|
22
|
+
constructor(config) {
|
|
23
|
+
super(config);
|
|
27
24
|
// Cached patterns for confidence boosting
|
|
28
25
|
this.cachedPatterns = [];
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
// It's an AgentId (backward compatibility)
|
|
38
|
-
this.id = configOrId;
|
|
39
|
-
this.memoryStore = memoryStore;
|
|
40
|
-
this.config = {
|
|
41
|
-
id: configOrId,
|
|
42
|
-
memoryStore,
|
|
43
|
-
enableLearning: true,
|
|
44
|
-
enablePatterns: true,
|
|
45
|
-
targetImprovement: 0.20,
|
|
46
|
-
improvementPeriodDays: 30
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
this.logger = Logger_1.Logger.getInstance();
|
|
26
|
+
this.coverageLogger = Logger_1.Logger.getInstance();
|
|
27
|
+
this.coverageConfig = {
|
|
28
|
+
enablePatterns: config.enablePatterns !== false,
|
|
29
|
+
targetImprovement: config.targetImprovement || 0.20,
|
|
30
|
+
improvementPeriodDays: config.improvementPeriodDays || 30,
|
|
31
|
+
};
|
|
50
32
|
// Initialize core engines
|
|
51
33
|
this.sublinearCore = new SublinearOptimizer();
|
|
52
34
|
this.coverageEngine = new CoverageEngine();
|
|
53
35
|
this.gapDetector = new GapDetector();
|
|
54
|
-
// Initialize
|
|
55
|
-
this.
|
|
56
|
-
}
|
|
57
|
-
// ============================================================================
|
|
58
|
-
// Learning Initialization
|
|
59
|
-
// ============================================================================
|
|
60
|
-
initializeLearning() {
|
|
61
|
-
if (this.config.enableLearning !== false && this.memoryStore) {
|
|
62
|
-
const agentIdStr = typeof this.id === 'string' ? this.id : this.id.id;
|
|
63
|
-
const memoryManager = this.memoryStore;
|
|
64
|
-
this.learningEngine = new LearningEngine_1.LearningEngine(agentIdStr, memoryManager);
|
|
65
|
-
this.performanceTracker = new PerformanceTracker_1.PerformanceTracker(agentIdStr, memoryManager);
|
|
66
|
-
this.improvementLoop = new ImprovementLoop_1.ImprovementLoop(agentIdStr, memoryManager, this.learningEngine, this.performanceTracker);
|
|
67
|
-
}
|
|
68
|
-
if (this.config.enablePatterns !== false) {
|
|
36
|
+
// Initialize reasoning bank if patterns enabled
|
|
37
|
+
if (this.coverageConfig.enablePatterns) {
|
|
69
38
|
this.reasoningBank = new QEReasoningBank_1.QEReasoningBank();
|
|
70
39
|
}
|
|
71
40
|
}
|
|
72
41
|
// ============================================================================
|
|
73
|
-
//
|
|
42
|
+
// BaseAgent Abstract Method Implementations
|
|
74
43
|
// ============================================================================
|
|
75
|
-
async
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
// Load learned gap detection patterns
|
|
95
|
-
await this.loadGapPatterns();
|
|
96
|
-
// Initialize ExperienceCapture for Nightly-Learner integration
|
|
97
|
-
this.experienceCapture = await ExperienceCapture_1.ExperienceCapture.getSharedInstance();
|
|
98
|
-
this.logger?.info('[CoverageAnalyzer] ExperienceCapture initialized for Nightly-Learner');
|
|
99
|
-
// Load and cache patterns for confidence boosting at task start
|
|
100
|
-
await this.loadAndCachePatternsForConfidence();
|
|
101
|
-
// Store initialization state
|
|
102
|
-
if (this.memoryStore) {
|
|
103
|
-
await this.memoryStore.set('coverage-analyzer-initialized', true, 'agents');
|
|
104
|
-
}
|
|
105
|
-
this.status = types_1.AgentStatus.IDLE;
|
|
106
|
-
this.emit('agent.initialized', { agentId: this.id });
|
|
107
|
-
this.logger?.info(`CoverageAnalyzerAgent initialized with learning: ${!!this.learningEngine}, patterns cached: ${this.cachedPatterns.length}`);
|
|
108
|
-
}
|
|
109
|
-
catch (error) {
|
|
110
|
-
this.status = types_1.AgentStatus.ERROR;
|
|
111
|
-
this.emit('agent.error', { agentId: this.id, error });
|
|
112
|
-
throw error;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
async executeTask(task) {
|
|
44
|
+
async initializeComponents() {
|
|
45
|
+
// Initialize optimization engines
|
|
46
|
+
await this.sublinearCore.initialize();
|
|
47
|
+
await this.coverageEngine.initialize();
|
|
48
|
+
await this.gapDetector.initialize();
|
|
49
|
+
// Initialize improvement loop if learning is enabled
|
|
50
|
+
if (this.learningEngine && this.performanceTracker) {
|
|
51
|
+
this.improvementLoop = new ImprovementLoop_1.ImprovementLoop(this.getAgentIdStr(), this.memoryStore, this.learningEngine, this.performanceTracker);
|
|
52
|
+
await this.improvementLoop.initialize();
|
|
53
|
+
}
|
|
54
|
+
// Initialize ExperienceCapture for Nightly-Learner integration
|
|
55
|
+
this.experienceCapture = await ExperienceCapture_1.ExperienceCapture.getSharedInstance();
|
|
56
|
+
this.coverageLogger?.info('[CoverageAnalyzer] ExperienceCapture initialized for Nightly-Learner');
|
|
57
|
+
// Load historical patterns
|
|
58
|
+
await this.loadCoveragePatterns();
|
|
59
|
+
await this.loadGapPatterns();
|
|
60
|
+
await this.loadAndCachePatternsForConfidence();
|
|
61
|
+
}
|
|
62
|
+
async performTask(task) {
|
|
116
63
|
const request = task.payload;
|
|
117
64
|
return await this.optimizeCoverageSublinear(request);
|
|
118
65
|
}
|
|
119
|
-
async
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
await this.saveCoveragePatterns();
|
|
124
|
-
await this.saveGapPatterns();
|
|
125
|
-
// Stop improvement loop if running
|
|
126
|
-
if (this.improvementLoop?.isActive()) {
|
|
127
|
-
await this.improvementLoop.stop();
|
|
128
|
-
}
|
|
129
|
-
// Cleanup resources
|
|
130
|
-
await this.sublinearCore.cleanup();
|
|
131
|
-
await this.coverageEngine.cleanup();
|
|
132
|
-
await this.gapDetector.cleanup();
|
|
133
|
-
this.status = types_1.AgentStatus.STOPPED;
|
|
134
|
-
this.emit('agent.terminated', { agentId: this.id });
|
|
135
|
-
}
|
|
136
|
-
catch (error) {
|
|
137
|
-
this.status = types_1.AgentStatus.ERROR;
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
66
|
+
async loadKnowledge() {
|
|
67
|
+
// Load coverage-specific knowledge
|
|
68
|
+
await this.loadCoveragePatterns();
|
|
69
|
+
await this.loadGapPatterns();
|
|
140
70
|
}
|
|
141
|
-
|
|
71
|
+
async cleanup() {
|
|
72
|
+
// Save learned patterns
|
|
73
|
+
await this.saveCoveragePatterns();
|
|
74
|
+
await this.saveGapPatterns();
|
|
75
|
+
// Stop improvement loop if running
|
|
76
|
+
if (this.improvementLoop?.isActive()) {
|
|
77
|
+
await this.improvementLoop.stop();
|
|
78
|
+
}
|
|
79
|
+
// Cleanup engines
|
|
80
|
+
await this.sublinearCore.cleanup();
|
|
81
|
+
await this.coverageEngine.cleanup();
|
|
82
|
+
await this.gapDetector.cleanup();
|
|
83
|
+
}
|
|
84
|
+
// ============================================================================
|
|
85
|
+
// Public Methods - Coverage-specific
|
|
86
|
+
// ============================================================================
|
|
87
|
+
/**
|
|
88
|
+
* Get coverage-specific status including optimization metrics
|
|
89
|
+
*/
|
|
90
|
+
getCoverageStatus() {
|
|
142
91
|
const status = {
|
|
143
|
-
agentId: this.id,
|
|
144
|
-
status: this.status,
|
|
145
|
-
capabilities: [
|
|
146
|
-
'coverage-optimization',
|
|
147
|
-
'gap-detection',
|
|
148
|
-
'sublinear-analysis',
|
|
149
|
-
'learning-enabled'
|
|
150
|
-
],
|
|
151
92
|
performance: {
|
|
152
93
|
optimizationsCompleted: this.sublinearCore.getOptimizationCount(),
|
|
153
94
|
averageOptimizationTime: this.sublinearCore.getAverageTime(),
|
|
154
95
|
lastOptimizationRatio: this.sublinearCore.getLastOptimizationRatio()
|
|
96
|
+
},
|
|
97
|
+
ruvector: {
|
|
98
|
+
enabled: this.hasRuVectorCache(),
|
|
99
|
+
cacheHitRate: this.getCacheHitRate()
|
|
155
100
|
}
|
|
156
101
|
};
|
|
157
102
|
if (this.learningEngine && this.performanceTracker) {
|
|
@@ -165,6 +110,14 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
165
110
|
}
|
|
166
111
|
return status;
|
|
167
112
|
}
|
|
113
|
+
// Helper to get agent ID string
|
|
114
|
+
getAgentIdStr() {
|
|
115
|
+
const agentId = super.getAgentId();
|
|
116
|
+
return typeof agentId === 'string' ? agentId : agentId.id;
|
|
117
|
+
}
|
|
118
|
+
// ============================================================================
|
|
119
|
+
// Agent Lifecycle (handled by BaseAgent)
|
|
120
|
+
// ============================================================================
|
|
168
121
|
// ============================================================================
|
|
169
122
|
// Core Coverage Optimization - SPARC Algorithm 3.1 + Learning
|
|
170
123
|
// ============================================================================
|
|
@@ -175,7 +128,6 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
175
128
|
async optimizeCoverageSublinear(request) {
|
|
176
129
|
const startTime = Date.now();
|
|
177
130
|
try {
|
|
178
|
-
this.status = types_1.AgentStatus.ACTIVE;
|
|
179
131
|
// Get learned strategy recommendation if available
|
|
180
132
|
let strategy = 'johnson-lindenstrauss-sublinear';
|
|
181
133
|
if (this.learningEngine) {
|
|
@@ -189,7 +141,7 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
189
141
|
});
|
|
190
142
|
if (recommendation.confidence > 0.7) {
|
|
191
143
|
strategy = recommendation.strategy;
|
|
192
|
-
this.
|
|
144
|
+
this.coverageLogger?.info(`Using learned strategy: ${strategy} (confidence: ${recommendation.confidence})`);
|
|
193
145
|
}
|
|
194
146
|
}
|
|
195
147
|
// Phase 1: Build Coverage Matrix
|
|
@@ -243,11 +195,9 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
243
195
|
};
|
|
244
196
|
// Track performance and learn from execution
|
|
245
197
|
await this.trackAndLearn(request, result, executionTime);
|
|
246
|
-
this.status = types_1.AgentStatus.IDLE;
|
|
247
198
|
return result;
|
|
248
199
|
}
|
|
249
200
|
catch (error) {
|
|
250
|
-
this.status = types_1.AgentStatus.ERROR;
|
|
251
201
|
// Learn from failure if learning is enabled
|
|
252
202
|
if (this.learningEngine) {
|
|
253
203
|
await this.learningEngine.learnFromExecution({ id: 'coverage-optimization', type: 'coverage-analysis' }, { success: false, error: error.message });
|
|
@@ -308,24 +258,24 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
308
258
|
if (result.memories.length > 0) {
|
|
309
259
|
// Calculate likelihood from historical gap patterns
|
|
310
260
|
const avgLikelihood = result.memories.reduce((sum, m) => sum + m.confidence, 0) / result.memories.length;
|
|
311
|
-
this.
|
|
261
|
+
this.coverageLogger?.debug(`[CoverageAnalyzer] ✅ AgentDB HNSW search: ${(avgLikelihood * 100).toFixed(1)}% likelihood ` +
|
|
312
262
|
`(${searchTime}ms, ${result.memories.length} patterns, ` +
|
|
313
263
|
`${result.metadata.cacheHit ? 'cache hit' : 'cache miss'})`);
|
|
314
264
|
// Log top match details
|
|
315
265
|
if (result.memories.length > 0) {
|
|
316
266
|
const topMatch = result.memories[0];
|
|
317
267
|
const gapData = JSON.parse(topMatch.pattern_data);
|
|
318
|
-
this.
|
|
268
|
+
this.coverageLogger?.debug(`[CoverageAnalyzer] 🎯 Top gap match: ${gapData.location} ` +
|
|
319
269
|
`(similarity=${topMatch.similarity.toFixed(3)}, confidence=${topMatch.confidence.toFixed(3)})`);
|
|
320
270
|
}
|
|
321
271
|
return avgLikelihood;
|
|
322
272
|
}
|
|
323
273
|
else {
|
|
324
|
-
this.
|
|
274
|
+
this.coverageLogger?.debug(`[CoverageAnalyzer] No gap patterns found in AgentDB (${searchTime}ms)`);
|
|
325
275
|
}
|
|
326
276
|
}
|
|
327
277
|
catch (error) {
|
|
328
|
-
this.
|
|
278
|
+
this.coverageLogger?.warn('[CoverageAnalyzer] AgentDB gap prediction failed, using fallback:', error);
|
|
329
279
|
}
|
|
330
280
|
}
|
|
331
281
|
// Fallback to learning engine
|
|
@@ -373,15 +323,15 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
373
323
|
// Check improvement status
|
|
374
324
|
const improvement = await this.performanceTracker.calculateImprovement();
|
|
375
325
|
if (improvement.targetAchieved) {
|
|
376
|
-
this.
|
|
326
|
+
this.coverageLogger?.info(`🎯 20% improvement target achieved! Current: ${improvement.improvementRate.toFixed(2)}%`);
|
|
377
327
|
}
|
|
378
328
|
else {
|
|
379
|
-
this.
|
|
329
|
+
this.coverageLogger?.debug(`Progress: ${improvement.improvementRate.toFixed(2)}% / 20% target`);
|
|
380
330
|
}
|
|
381
331
|
// Add learning metrics to result
|
|
382
332
|
result.learningMetrics = {
|
|
383
333
|
improvementRate: improvement.improvementRate,
|
|
384
|
-
confidence: (improvement.daysElapsed / (this.
|
|
334
|
+
confidence: (improvement.daysElapsed / (this.coverageConfig.improvementPeriodDays || 30)),
|
|
385
335
|
patternsApplied: this.learningEngine ? (await this.learningEngine.getPatterns()).length : 0
|
|
386
336
|
};
|
|
387
337
|
}
|
|
@@ -409,7 +359,7 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
409
359
|
// Run improvement cycle if needed
|
|
410
360
|
if (this.improvementLoop && !this.improvementLoop.isActive()) {
|
|
411
361
|
// Run in background
|
|
412
|
-
this.improvementLoop.runImprovementCycle().catch(error => this.
|
|
362
|
+
this.improvementLoop.runImprovementCycle().catch(error => this.coverageLogger?.warn('Improvement cycle failed', error));
|
|
413
363
|
}
|
|
414
364
|
// Store optimization results for future learning
|
|
415
365
|
await this.storeOptimizationResults(request, result.optimization, executionTime);
|
|
@@ -445,19 +395,19 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
445
395
|
last_used: Date.now()
|
|
446
396
|
});
|
|
447
397
|
storedCount++;
|
|
448
|
-
this.
|
|
398
|
+
this.coverageLogger?.debug(`[CoverageAnalyzer] ✅ Stored gap pattern ${gapId} in AgentDB`);
|
|
449
399
|
}
|
|
450
400
|
const storeTime = Date.now() - startTime;
|
|
451
|
-
this.
|
|
401
|
+
this.coverageLogger?.info(`[CoverageAnalyzer] ✅ ACTUALLY stored ${storedCount} gap patterns in AgentDB ` +
|
|
452
402
|
`(${storeTime}ms, avg ${(storeTime / storedCount).toFixed(1)}ms/pattern, QUIC sync active)`);
|
|
453
403
|
// Report QUIC sync status
|
|
454
404
|
const agentDBConfig = this.agentDBConfig;
|
|
455
405
|
if (agentDBConfig?.enableQUICSync) {
|
|
456
|
-
this.
|
|
406
|
+
this.coverageLogger?.info(`[CoverageAnalyzer] 🚀 Gap patterns synced via QUIC to ${agentDBConfig.syncPeers?.length || 0} peers (<1ms latency)`);
|
|
457
407
|
}
|
|
458
408
|
}
|
|
459
409
|
catch (error) {
|
|
460
|
-
this.
|
|
410
|
+
this.coverageLogger?.warn('[CoverageAnalyzer] AgentDB gap storage failed:', error);
|
|
461
411
|
}
|
|
462
412
|
}
|
|
463
413
|
// Also store in ReasoningBank for compatibility
|
|
@@ -494,10 +444,10 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
494
444
|
return;
|
|
495
445
|
try {
|
|
496
446
|
const gapPatterns = await this.reasoningBank.searchByTags(['coverage-gap']);
|
|
497
|
-
this.
|
|
447
|
+
this.coverageLogger?.info(`Loaded ${gapPatterns.length} gap patterns from ReasoningBank`);
|
|
498
448
|
}
|
|
499
449
|
catch (error) {
|
|
500
|
-
this.
|
|
450
|
+
this.coverageLogger?.warn('No gap patterns found in ReasoningBank');
|
|
501
451
|
}
|
|
502
452
|
}
|
|
503
453
|
/**
|
|
@@ -507,7 +457,7 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
507
457
|
if (!this.reasoningBank)
|
|
508
458
|
return;
|
|
509
459
|
const stats = await this.reasoningBank.getStatistics();
|
|
510
|
-
this.
|
|
460
|
+
this.coverageLogger?.info(`Saved ${stats.totalPatterns} patterns to ReasoningBank`);
|
|
511
461
|
}
|
|
512
462
|
/**
|
|
513
463
|
* AgentDB Helper: Create gap query embedding for vector search
|
|
@@ -824,7 +774,7 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
824
774
|
confidence: p.confidence,
|
|
825
775
|
successRate: p.successRate
|
|
826
776
|
}));
|
|
827
|
-
this.
|
|
777
|
+
this.coverageLogger?.info(`[CoverageAnalyzer] Cached ${this.cachedPatterns.length} patterns from LearningEngine`);
|
|
828
778
|
}
|
|
829
779
|
// Also load from memoryStore if available
|
|
830
780
|
if (this.memoryStore) {
|
|
@@ -833,7 +783,7 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
833
783
|
const dbPatterns = await smm.queryPatternsByConfidence(0.5); // High confidence only
|
|
834
784
|
const coveragePatterns = dbPatterns.filter((p) => p.pattern?.includes('coverage') || p.metadata?.agent_type === 'coverage-analyzer');
|
|
835
785
|
if (coveragePatterns.length > 0) {
|
|
836
|
-
this.
|
|
786
|
+
this.coverageLogger?.info(`[CoverageAnalyzer] Found ${coveragePatterns.length} historical coverage patterns in DB`);
|
|
837
787
|
// Merge with existing patterns
|
|
838
788
|
for (const p of coveragePatterns) {
|
|
839
789
|
if (!this.cachedPatterns.find(cp => cp.pattern === p.pattern)) {
|
|
@@ -847,10 +797,10 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
847
797
|
}
|
|
848
798
|
}
|
|
849
799
|
}
|
|
850
|
-
this.
|
|
800
|
+
this.coverageLogger?.info(`[CoverageAnalyzer] Total cached patterns for confidence boost: ${this.cachedPatterns.length}`);
|
|
851
801
|
}
|
|
852
802
|
catch (error) {
|
|
853
|
-
this.
|
|
803
|
+
this.coverageLogger?.warn('[CoverageAnalyzer] Failed to load patterns for confidence', error);
|
|
854
804
|
}
|
|
855
805
|
}
|
|
856
806
|
/**
|
|
@@ -870,7 +820,7 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
870
820
|
const totalWeight = relevantPatterns.reduce((sum, p) => sum + p.successRate, 0);
|
|
871
821
|
const weightedConfidence = relevantPatterns.reduce((sum, p) => sum + p.confidence * p.successRate, 0);
|
|
872
822
|
const boost = totalWeight > 0 ? (weightedConfidence / totalWeight) * 0.3 : 0; // Max 30% boost
|
|
873
|
-
this.
|
|
823
|
+
this.coverageLogger?.debug(`[CoverageAnalyzer] Confidence boost from ${relevantPatterns.length} patterns: ${(boost * 100).toFixed(1)}%`);
|
|
874
824
|
return boost;
|
|
875
825
|
}
|
|
876
826
|
/**
|
|
@@ -882,8 +832,8 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
882
832
|
return; // ExperienceCapture not initialized
|
|
883
833
|
}
|
|
884
834
|
try {
|
|
885
|
-
const agentIdStr =
|
|
886
|
-
const agentType =
|
|
835
|
+
const agentIdStr = this.getAgentIdStr();
|
|
836
|
+
const agentType = 'coverage-analyzer';
|
|
887
837
|
const event = {
|
|
888
838
|
agentId: agentIdStr,
|
|
889
839
|
agentType: agentType,
|
|
@@ -917,12 +867,12 @@ class CoverageAnalyzerAgent extends events_1.EventEmitter {
|
|
|
917
867
|
timestamp: new Date()
|
|
918
868
|
};
|
|
919
869
|
await this.experienceCapture.captureExecution(event);
|
|
920
|
-
this.
|
|
870
|
+
this.coverageLogger?.debug(`[CoverageAnalyzer] Captured experience for Nightly-Learner: ${success ? 'success' : 'failure'}`);
|
|
921
871
|
this.emit('experience:captured', { agentId: agentIdStr, success, duration });
|
|
922
872
|
}
|
|
923
873
|
catch (captureError) {
|
|
924
874
|
// Don't fail the main operation if capture fails
|
|
925
|
-
this.
|
|
875
|
+
this.coverageLogger?.warn('[CoverageAnalyzer] Failed to capture experience:', captureError);
|
|
926
876
|
}
|
|
927
877
|
}
|
|
928
878
|
/**
|