agentic-qe 2.1.1 → 2.2.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/CHANGELOG.md +213 -0
- package/README.md +37 -11
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +5 -1
- package/dist/agents/index.js.map +1 -1
- package/dist/core/MemoryManager.d.ts.map +1 -1
- package/dist/core/MemoryManager.js +4 -0
- package/dist/core/MemoryManager.js.map +1 -1
- package/dist/core/di/AgentDependencies.d.ts +127 -0
- package/dist/core/di/AgentDependencies.d.ts.map +1 -0
- package/dist/core/di/AgentDependencies.js +251 -0
- package/dist/core/di/AgentDependencies.js.map +1 -0
- package/dist/core/di/DIContainer.d.ts +149 -0
- package/dist/core/di/DIContainer.d.ts.map +1 -0
- package/dist/core/di/DIContainer.js +333 -0
- package/dist/core/di/DIContainer.js.map +1 -0
- package/dist/core/di/index.d.ts +11 -0
- package/dist/core/di/index.d.ts.map +1 -0
- package/dist/core/di/index.js +22 -0
- package/dist/core/di/index.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +11 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.d.ts +5 -1
- package/dist/core/memory/RuVectorPatternStore.d.ts.map +1 -1
- package/dist/core/memory/RuVectorPatternStore.js +43 -1
- package/dist/core/memory/RuVectorPatternStore.js.map +1 -1
- package/dist/learning/ExperienceSharingProtocol.d.ts +243 -0
- package/dist/learning/ExperienceSharingProtocol.d.ts.map +1 -0
- package/dist/learning/ExperienceSharingProtocol.js +538 -0
- package/dist/learning/ExperienceSharingProtocol.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +101 -1
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +330 -3
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/QLearning.d.ts +38 -125
- package/dist/learning/QLearning.d.ts.map +1 -1
- package/dist/learning/QLearning.js +46 -267
- package/dist/learning/QLearning.js.map +1 -1
- package/dist/learning/QLearningLegacy.d.ts +154 -0
- package/dist/learning/QLearningLegacy.d.ts.map +1 -0
- package/dist/learning/QLearningLegacy.js +337 -0
- package/dist/learning/QLearningLegacy.js.map +1 -0
- package/dist/learning/algorithms/AbstractRLLearner.d.ts +162 -0
- package/dist/learning/algorithms/AbstractRLLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/AbstractRLLearner.js +300 -0
- package/dist/learning/algorithms/AbstractRLLearner.js.map +1 -0
- package/dist/learning/algorithms/ActorCriticLearner.d.ts +201 -0
- package/dist/learning/algorithms/ActorCriticLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/ActorCriticLearner.js +447 -0
- package/dist/learning/algorithms/ActorCriticLearner.js.map +1 -0
- package/dist/learning/algorithms/PPOLearner.d.ts +207 -0
- package/dist/learning/algorithms/PPOLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/PPOLearner.js +490 -0
- package/dist/learning/algorithms/PPOLearner.js.map +1 -0
- package/dist/learning/algorithms/QLearning.d.ts +68 -0
- package/dist/learning/algorithms/QLearning.d.ts.map +1 -0
- package/dist/learning/algorithms/QLearning.js +116 -0
- package/dist/learning/algorithms/QLearning.js.map +1 -0
- package/dist/learning/algorithms/SARSALearner.d.ts +107 -0
- package/dist/learning/algorithms/SARSALearner.d.ts.map +1 -0
- package/dist/learning/algorithms/SARSALearner.js +252 -0
- package/dist/learning/algorithms/SARSALearner.js.map +1 -0
- package/dist/learning/algorithms/index.d.ts +29 -0
- package/dist/learning/algorithms/index.d.ts.map +1 -0
- package/dist/learning/algorithms/index.js +44 -0
- package/dist/learning/algorithms/index.js.map +1 -0
- package/dist/learning/index.d.ts +3 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +15 -1
- package/dist/learning/index.js.map +1 -1
- package/dist/learning/types.d.ts +2 -0
- package/dist/learning/types.d.ts.map +1 -1
- package/dist/mcp/handlers/advanced/index.d.ts +3 -2
- package/dist/mcp/handlers/advanced/index.d.ts.map +1 -1
- package/dist/mcp/handlers/advanced/index.js +4 -5
- package/dist/mcp/handlers/advanced/index.js.map +1 -1
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.d.ts +1 -0
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.js +3 -0
- package/dist/mcp/handlers/analysis/coverageAnalyzeSublinear.js.map +1 -1
- package/dist/mcp/handlers/analysis/coverageGapsDetect.d.ts +1 -0
- package/dist/mcp/handlers/analysis/coverageGapsDetect.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/coverageGapsDetect.js +3 -0
- package/dist/mcp/handlers/analysis/coverageGapsDetect.js.map +1 -1
- package/dist/mcp/handlers/analysis/index.d.ts +0 -2
- package/dist/mcp/handlers/analysis/index.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/index.js +2 -3
- package/dist/mcp/handlers/analysis/index.js.map +1 -1
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.d.ts +1 -0
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.d.ts.map +1 -1
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.js +3 -0
- package/dist/mcp/handlers/analysis/performanceMonitorRealtime.js.map +1 -1
- package/dist/mcp/handlers/prediction/flaky-test-detect.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/flaky-test-detect.js +2 -0
- package/dist/mcp/handlers/prediction/flaky-test-detect.js.map +1 -1
- package/dist/mcp/handlers/prediction/index.d.ts +0 -2
- package/dist/mcp/handlers/prediction/index.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/index.js +2 -3
- package/dist/mcp/handlers/prediction/index.js.map +1 -1
- package/dist/mcp/handlers/security/index.d.ts +0 -30
- package/dist/mcp/handlers/security/index.d.ts.map +1 -1
- package/dist/mcp/handlers/security/index.js +5 -31
- package/dist/mcp/handlers/security/index.js.map +1 -1
- package/dist/mcp/lazy-loader.d.ts +156 -0
- package/dist/mcp/lazy-loader.d.ts.map +1 -0
- package/dist/mcp/lazy-loader.js +327 -0
- package/dist/mcp/lazy-loader.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +18 -0
- package/dist/mcp/server-instructions.d.ts.map +1 -0
- package/dist/mcp/server-instructions.js +133 -0
- package/dist/mcp/server-instructions.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +236 -49
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tool-categories.d.ts +105 -0
- package/dist/mcp/tool-categories.d.ts.map +1 -0
- package/dist/mcp/tool-categories.js +463 -0
- package/dist/mcp/tool-categories.js.map +1 -0
- package/dist/mcp/tools.d.ts +3 -19
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +260 -647
- package/dist/mcp/tools.js.map +1 -1
- package/dist/memory/DistributedPatternLibrary.d.ts +159 -0
- package/dist/memory/DistributedPatternLibrary.d.ts.map +1 -0
- package/dist/memory/DistributedPatternLibrary.js +370 -0
- package/dist/memory/DistributedPatternLibrary.js.map +1 -0
- package/dist/memory/PatternQualityScorer.d.ts +169 -0
- package/dist/memory/PatternQualityScorer.d.ts.map +1 -0
- package/dist/memory/PatternQualityScorer.js +327 -0
- package/dist/memory/PatternQualityScorer.js.map +1 -0
- package/dist/memory/PatternReplicationService.d.ts +187 -0
- package/dist/memory/PatternReplicationService.d.ts.map +1 -0
- package/dist/memory/PatternReplicationService.js +392 -0
- package/dist/memory/PatternReplicationService.js.map +1 -0
- package/dist/providers/ClaudeProvider.d.ts +98 -0
- package/dist/providers/ClaudeProvider.d.ts.map +1 -0
- package/dist/providers/ClaudeProvider.js +418 -0
- package/dist/providers/ClaudeProvider.js.map +1 -0
- package/dist/providers/ILLMProvider.d.ts +287 -0
- package/dist/providers/ILLMProvider.d.ts.map +1 -0
- package/dist/providers/ILLMProvider.js +33 -0
- package/dist/providers/ILLMProvider.js.map +1 -0
- package/dist/providers/LLMProviderFactory.d.ts +154 -0
- package/dist/providers/LLMProviderFactory.d.ts.map +1 -0
- package/dist/providers/LLMProviderFactory.js +426 -0
- package/dist/providers/LLMProviderFactory.js.map +1 -0
- package/dist/providers/RuvllmProvider.d.ts +107 -0
- package/dist/providers/RuvllmProvider.d.ts.map +1 -0
- package/dist/providers/RuvllmProvider.js +417 -0
- package/dist/providers/RuvllmProvider.js.map +1 -0
- package/dist/providers/index.d.ts +31 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +69 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/utils/IntervalRegistry.d.ts +110 -0
- package/dist/utils/IntervalRegistry.d.ts.map +1 -0
- package/dist/utils/IntervalRegistry.js +190 -0
- package/dist/utils/IntervalRegistry.js.map +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -1
- package/dist/utils/index.js.map +1 -1
- package/docs/reference/agents.md +33 -0
- package/docs/reference/usage.md +60 -0
- package/package.json +2 -2
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PatternQualityScorer - Pattern Quality Scoring and Garbage Collection
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Score patterns based on usage success rate
|
|
7
|
+
* - Track comprehensive usage statistics
|
|
8
|
+
* - Garbage collection for low-quality patterns
|
|
9
|
+
* - Pattern ranking and recommendations
|
|
10
|
+
* - Adaptive quality thresholds
|
|
11
|
+
*
|
|
12
|
+
* @module memory/PatternQualityScorer
|
|
13
|
+
* @version 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.PatternQualityScorer = void 0;
|
|
17
|
+
/**
|
|
18
|
+
* PatternQualityScorer - Tracks and scores pattern quality for optimization
|
|
19
|
+
*
|
|
20
|
+
* This class provides:
|
|
21
|
+
* - Real-time quality scoring based on success rate and usage
|
|
22
|
+
* - Comprehensive usage statistics tracking
|
|
23
|
+
* - Automatic garbage collection of low-quality patterns
|
|
24
|
+
* - Pattern ranking for recommendations
|
|
25
|
+
* - Trend analysis for quality improvement/degradation
|
|
26
|
+
*/
|
|
27
|
+
class PatternQualityScorer {
|
|
28
|
+
constructor(library, config = {}) {
|
|
29
|
+
this.DEFAULT_MIN_SUCCESS_RATE = 0.7;
|
|
30
|
+
this.DEFAULT_MIN_USAGE_COUNT = 5;
|
|
31
|
+
this.DEFAULT_MAX_AGE_DAYS = 90;
|
|
32
|
+
this.DEFAULT_MIN_QUALITY_SCORE = 0.5;
|
|
33
|
+
this.DEFAULT_GC_INTERVAL = 3600000; // 1 hour
|
|
34
|
+
this.library = library;
|
|
35
|
+
this.config = {
|
|
36
|
+
minSuccessRate: config.minSuccessRate || this.DEFAULT_MIN_SUCCESS_RATE,
|
|
37
|
+
minUsageCount: config.minUsageCount || this.DEFAULT_MIN_USAGE_COUNT,
|
|
38
|
+
maxAgeInDays: config.maxAgeInDays || this.DEFAULT_MAX_AGE_DAYS,
|
|
39
|
+
minQualityScore: config.minQualityScore || this.DEFAULT_MIN_QUALITY_SCORE,
|
|
40
|
+
successRateWeight: config.successRateWeight || 0.5,
|
|
41
|
+
usageWeight: config.usageWeight || 0.3,
|
|
42
|
+
recencyWeight: config.recencyWeight || 0.2,
|
|
43
|
+
enableAutoGC: config.enableAutoGC !== false,
|
|
44
|
+
gcInterval: config.gcInterval || this.DEFAULT_GC_INTERVAL
|
|
45
|
+
};
|
|
46
|
+
this.usageHistory = new Map();
|
|
47
|
+
this.metricsCache = new Map();
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Start automatic garbage collection
|
|
51
|
+
*/
|
|
52
|
+
startAutoGC() {
|
|
53
|
+
if (!this.config.enableAutoGC) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.gcTimer = setInterval(async () => {
|
|
57
|
+
await this.garbageCollect();
|
|
58
|
+
}, this.config.gcInterval);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Stop automatic garbage collection
|
|
62
|
+
*/
|
|
63
|
+
stopAutoGC() {
|
|
64
|
+
if (this.gcTimer) {
|
|
65
|
+
clearInterval(this.gcTimer);
|
|
66
|
+
this.gcTimer = undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Record pattern usage
|
|
71
|
+
*/
|
|
72
|
+
async recordUsage(usage) {
|
|
73
|
+
const history = this.usageHistory.get(usage.patternId) || [];
|
|
74
|
+
history.push(usage);
|
|
75
|
+
this.usageHistory.set(usage.patternId, history);
|
|
76
|
+
// Invalidate metrics cache
|
|
77
|
+
this.metricsCache.delete(usage.patternId);
|
|
78
|
+
// Update pattern lastUsed and usageCount
|
|
79
|
+
const pattern = await this.library.getPattern(usage.patternId);
|
|
80
|
+
if (pattern) {
|
|
81
|
+
pattern.lastUsed = usage.timestamp;
|
|
82
|
+
pattern.usageCount = (pattern.usageCount || 0) + 1;
|
|
83
|
+
await this.library.updatePattern(pattern);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Calculate quality metrics for a pattern
|
|
88
|
+
*/
|
|
89
|
+
async calculateMetrics(patternId) {
|
|
90
|
+
// Check cache first
|
|
91
|
+
const cached = this.metricsCache.get(patternId);
|
|
92
|
+
if (cached) {
|
|
93
|
+
return cached;
|
|
94
|
+
}
|
|
95
|
+
const pattern = await this.library.getPattern(patternId);
|
|
96
|
+
if (!pattern) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const history = this.usageHistory.get(patternId) || [];
|
|
100
|
+
const now = Date.now();
|
|
101
|
+
// Calculate basic stats
|
|
102
|
+
const totalUsage = history.length;
|
|
103
|
+
const successCount = history.filter(u => u.success).length;
|
|
104
|
+
const failureCount = totalUsage - successCount;
|
|
105
|
+
const successRate = totalUsage > 0 ? successCount / totalUsage : 0;
|
|
106
|
+
// Calculate average execution time
|
|
107
|
+
const executionTimes = history
|
|
108
|
+
.filter(u => u.executionTime !== undefined)
|
|
109
|
+
.map(u => u.executionTime);
|
|
110
|
+
const averageExecutionTime = executionTimes.length > 0
|
|
111
|
+
? executionTimes.reduce((a, b) => a + b, 0) / executionTimes.length
|
|
112
|
+
: 0;
|
|
113
|
+
// Calculate age
|
|
114
|
+
const createdTimestamp = pattern.createdAt || now;
|
|
115
|
+
const ageInDays = (now - createdTimestamp) / (1000 * 60 * 60 * 24);
|
|
116
|
+
// Calculate trend score (recent vs old performance)
|
|
117
|
+
const trendScore = this.calculateTrend(history);
|
|
118
|
+
// Calculate quality score
|
|
119
|
+
const qualityScore = this.calculateQualityScore({
|
|
120
|
+
successRate,
|
|
121
|
+
totalUsage,
|
|
122
|
+
ageInDays,
|
|
123
|
+
averageExecutionTime
|
|
124
|
+
});
|
|
125
|
+
const metrics = {
|
|
126
|
+
patternId,
|
|
127
|
+
qualityScore,
|
|
128
|
+
successRate,
|
|
129
|
+
totalUsage,
|
|
130
|
+
successCount,
|
|
131
|
+
failureCount,
|
|
132
|
+
averageExecutionTime,
|
|
133
|
+
lastUsedTimestamp: pattern.lastUsed || createdTimestamp,
|
|
134
|
+
createdTimestamp,
|
|
135
|
+
ageInDays,
|
|
136
|
+
trendScore
|
|
137
|
+
};
|
|
138
|
+
// Cache metrics
|
|
139
|
+
this.metricsCache.set(patternId, metrics);
|
|
140
|
+
return metrics;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Calculate overall quality score (0-1)
|
|
144
|
+
*/
|
|
145
|
+
calculateQualityScore(params) {
|
|
146
|
+
const { successRate, totalUsage, ageInDays, averageExecutionTime } = params;
|
|
147
|
+
// Success rate component (0-1)
|
|
148
|
+
const successComponent = successRate * this.config.successRateWeight;
|
|
149
|
+
// Usage frequency component (0-1, normalized)
|
|
150
|
+
// More usage = higher score, with diminishing returns
|
|
151
|
+
const usageComponent = Math.min(totalUsage / 100, 1) * this.config.usageWeight;
|
|
152
|
+
// Recency component (0-1, inverse of age)
|
|
153
|
+
// Newer patterns score higher
|
|
154
|
+
const recencyComponent = Math.max(0, 1 - ageInDays / this.config.maxAgeInDays) * this.config.recencyWeight;
|
|
155
|
+
// Combine components
|
|
156
|
+
const rawScore = successComponent + usageComponent + recencyComponent;
|
|
157
|
+
// Normalize to 0-1
|
|
158
|
+
const totalWeight = this.config.successRateWeight + this.config.usageWeight + this.config.recencyWeight;
|
|
159
|
+
return Math.min(rawScore / totalWeight, 1);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Calculate trend score (recent performance vs historical)
|
|
163
|
+
*/
|
|
164
|
+
calculateTrend(history) {
|
|
165
|
+
if (history.length < 10) {
|
|
166
|
+
return 0; // Not enough data
|
|
167
|
+
}
|
|
168
|
+
const sortedHistory = [...history].sort((a, b) => a.timestamp - b.timestamp);
|
|
169
|
+
const midpoint = Math.floor(sortedHistory.length / 2);
|
|
170
|
+
const oldHalf = sortedHistory.slice(0, midpoint);
|
|
171
|
+
const newHalf = sortedHistory.slice(midpoint);
|
|
172
|
+
const oldSuccessRate = oldHalf.filter(u => u.success).length / oldHalf.length;
|
|
173
|
+
const newSuccessRate = newHalf.filter(u => u.success).length / newHalf.length;
|
|
174
|
+
// Positive = improving, negative = degrading
|
|
175
|
+
return newSuccessRate - oldSuccessRate;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Get ranked patterns by quality
|
|
179
|
+
*/
|
|
180
|
+
async getRankedPatterns(options) {
|
|
181
|
+
const patterns = await this.library.getPatterns();
|
|
182
|
+
const rankedPatterns = [];
|
|
183
|
+
for (const pattern of patterns) {
|
|
184
|
+
const metrics = await this.calculateMetrics(pattern.id);
|
|
185
|
+
if (!metrics)
|
|
186
|
+
continue;
|
|
187
|
+
// Apply quality filter
|
|
188
|
+
if (options?.minQualityScore && metrics.qualityScore < options.minQualityScore) {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
rankedPatterns.push({
|
|
192
|
+
pattern,
|
|
193
|
+
metrics,
|
|
194
|
+
rank: 0 // Will be set after sorting
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
// Sort patterns
|
|
198
|
+
const sortBy = options?.sortBy || 'quality';
|
|
199
|
+
rankedPatterns.sort((a, b) => {
|
|
200
|
+
switch (sortBy) {
|
|
201
|
+
case 'usage':
|
|
202
|
+
return b.metrics.totalUsage - a.metrics.totalUsage;
|
|
203
|
+
case 'recency':
|
|
204
|
+
return b.metrics.lastUsedTimestamp - a.metrics.lastUsedTimestamp;
|
|
205
|
+
case 'quality':
|
|
206
|
+
default:
|
|
207
|
+
return b.metrics.qualityScore - a.metrics.qualityScore;
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
// Assign ranks
|
|
211
|
+
rankedPatterns.forEach((rp, index) => {
|
|
212
|
+
rp.rank = index + 1;
|
|
213
|
+
});
|
|
214
|
+
// Apply limit
|
|
215
|
+
if (options?.limit) {
|
|
216
|
+
return rankedPatterns.slice(0, options.limit);
|
|
217
|
+
}
|
|
218
|
+
return rankedPatterns;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get patterns eligible for garbage collection
|
|
222
|
+
*/
|
|
223
|
+
async getGarbageCandidates() {
|
|
224
|
+
const patterns = await this.library.getPatterns();
|
|
225
|
+
const candidates = [];
|
|
226
|
+
for (const pattern of patterns) {
|
|
227
|
+
const metrics = await this.calculateMetrics(pattern.id);
|
|
228
|
+
if (!metrics)
|
|
229
|
+
continue;
|
|
230
|
+
// Check if pattern should be garbage collected
|
|
231
|
+
const shouldGC = (metrics.qualityScore < this.config.minQualityScore &&
|
|
232
|
+
metrics.totalUsage >= this.config.minUsageCount) ||
|
|
233
|
+
(metrics.successRate < this.config.minSuccessRate &&
|
|
234
|
+
metrics.totalUsage >= this.config.minUsageCount) ||
|
|
235
|
+
(metrics.ageInDays > this.config.maxAgeInDays &&
|
|
236
|
+
metrics.totalUsage === 0);
|
|
237
|
+
if (shouldGC) {
|
|
238
|
+
candidates.push(metrics);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return candidates;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Perform garbage collection
|
|
245
|
+
*/
|
|
246
|
+
async garbageCollect() {
|
|
247
|
+
const startTime = Date.now();
|
|
248
|
+
const stats = await this.library.getStats();
|
|
249
|
+
const totalPatterns = stats.totalPatterns;
|
|
250
|
+
const candidates = await this.getGarbageCandidates();
|
|
251
|
+
const removedPatternIds = [];
|
|
252
|
+
let bytesReclaimed = 0;
|
|
253
|
+
for (const metrics of candidates) {
|
|
254
|
+
const pattern = await this.library.getPattern(metrics.patternId);
|
|
255
|
+
if (!pattern)
|
|
256
|
+
continue;
|
|
257
|
+
// Estimate bytes
|
|
258
|
+
const patternSize = JSON.stringify(pattern).length;
|
|
259
|
+
// Delete pattern
|
|
260
|
+
const deleted = await this.library.deletePattern(metrics.patternId);
|
|
261
|
+
if (deleted) {
|
|
262
|
+
removedPatternIds.push(metrics.patternId);
|
|
263
|
+
bytesReclaimed += patternSize;
|
|
264
|
+
// Remove from caches
|
|
265
|
+
this.usageHistory.delete(metrics.patternId);
|
|
266
|
+
this.metricsCache.delete(metrics.patternId);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
const duration = Date.now() - startTime;
|
|
270
|
+
return {
|
|
271
|
+
totalPatterns,
|
|
272
|
+
patternsRemoved: removedPatternIds.length,
|
|
273
|
+
removedPatternIds,
|
|
274
|
+
bytesReclaimed,
|
|
275
|
+
duration,
|
|
276
|
+
timestamp: Date.now()
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Get scorer statistics
|
|
281
|
+
*/
|
|
282
|
+
async getStats() {
|
|
283
|
+
const libraryStats = await this.library.getStats();
|
|
284
|
+
const patterns = await this.library.getPatterns();
|
|
285
|
+
let totalQualityScore = 0;
|
|
286
|
+
let lowQualityCount = 0;
|
|
287
|
+
for (const pattern of patterns) {
|
|
288
|
+
const metrics = await this.calculateMetrics(pattern.id);
|
|
289
|
+
if (metrics) {
|
|
290
|
+
totalQualityScore += metrics.qualityScore;
|
|
291
|
+
if (metrics.qualityScore < this.config.minQualityScore) {
|
|
292
|
+
lowQualityCount++;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
const candidates = await this.getGarbageCandidates();
|
|
297
|
+
return {
|
|
298
|
+
totalPatterns: libraryStats.totalPatterns,
|
|
299
|
+
trackedPatterns: patterns.length,
|
|
300
|
+
averageQualityScore: patterns.length > 0 ? totalQualityScore / patterns.length : 0,
|
|
301
|
+
lowQualityPatterns: lowQualityCount,
|
|
302
|
+
garbageCandidates: candidates.length
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Clear all usage history
|
|
307
|
+
*/
|
|
308
|
+
clearHistory() {
|
|
309
|
+
this.usageHistory.clear();
|
|
310
|
+
this.metricsCache.clear();
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Export usage history for analysis
|
|
314
|
+
*/
|
|
315
|
+
exportHistory() {
|
|
316
|
+
return new Map(this.usageHistory);
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Import usage history from external source
|
|
320
|
+
*/
|
|
321
|
+
importHistory(history) {
|
|
322
|
+
this.usageHistory = new Map(history);
|
|
323
|
+
this.metricsCache.clear(); // Invalidate cache
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
exports.PatternQualityScorer = PatternQualityScorer;
|
|
327
|
+
//# sourceMappingURL=PatternQualityScorer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternQualityScorer.js","sourceRoot":"","sources":["../../src/memory/PatternQualityScorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PatternReplicationService - Pattern Replication with Health Monitoring
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Multi-agent pattern replication with configurable replication factor
|
|
6
|
+
* - Health monitoring for replication nodes
|
|
7
|
+
* - Conflict resolution for concurrent updates
|
|
8
|
+
* - Automatic failover and recovery
|
|
9
|
+
* - Replication consistency tracking
|
|
10
|
+
*
|
|
11
|
+
* @module memory/PatternReplicationService
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
import { DistributedPatternLibrary } from './DistributedPatternLibrary';
|
|
15
|
+
import { TestPattern } from '../core/memory/IPatternStore';
|
|
16
|
+
import { EventEmitter } from 'events';
|
|
17
|
+
/**
|
|
18
|
+
* Replication node status
|
|
19
|
+
*/
|
|
20
|
+
export declare enum ReplicationNodeStatus {
|
|
21
|
+
HEALTHY = "healthy",
|
|
22
|
+
DEGRADED = "degraded",
|
|
23
|
+
FAILED = "failed",
|
|
24
|
+
RECOVERING = "recovering"
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Replication node information
|
|
28
|
+
*/
|
|
29
|
+
export interface ReplicationNode {
|
|
30
|
+
agentId: string;
|
|
31
|
+
library: DistributedPatternLibrary;
|
|
32
|
+
status: ReplicationNodeStatus;
|
|
33
|
+
lastHeartbeat: number;
|
|
34
|
+
consecutiveFailures: number;
|
|
35
|
+
totalPatterns: number;
|
|
36
|
+
lastSyncTimestamp: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Replication health metrics
|
|
40
|
+
*/
|
|
41
|
+
export interface ReplicationHealth {
|
|
42
|
+
totalNodes: number;
|
|
43
|
+
healthyNodes: number;
|
|
44
|
+
degradedNodes: number;
|
|
45
|
+
failedNodes: number;
|
|
46
|
+
recoveringNodes: number;
|
|
47
|
+
averageReplicationLag: number;
|
|
48
|
+
consistencyPercentage: number;
|
|
49
|
+
lastHealthCheck: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Replication configuration
|
|
53
|
+
*/
|
|
54
|
+
export interface ReplicationConfig {
|
|
55
|
+
/** Replication factor (number of copies) */
|
|
56
|
+
replicationFactor: number;
|
|
57
|
+
/** Heartbeat interval in milliseconds */
|
|
58
|
+
heartbeatInterval?: number;
|
|
59
|
+
/** Node failure threshold (consecutive failures) */
|
|
60
|
+
failureThreshold?: number;
|
|
61
|
+
/** Sync interval in milliseconds */
|
|
62
|
+
syncInterval?: number;
|
|
63
|
+
/** Enable automatic recovery */
|
|
64
|
+
autoRecover?: boolean;
|
|
65
|
+
/** Minimum healthy nodes required */
|
|
66
|
+
minHealthyNodes?: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Replication event types
|
|
70
|
+
*/
|
|
71
|
+
export type ReplicationEvent = {
|
|
72
|
+
type: 'pattern_replicated';
|
|
73
|
+
patternId: string;
|
|
74
|
+
nodeCount: number;
|
|
75
|
+
} | {
|
|
76
|
+
type: 'node_failed';
|
|
77
|
+
agentId: string;
|
|
78
|
+
reason: string;
|
|
79
|
+
} | {
|
|
80
|
+
type: 'node_recovered';
|
|
81
|
+
agentId: string;
|
|
82
|
+
} | {
|
|
83
|
+
type: 'sync_completed';
|
|
84
|
+
duration: number;
|
|
85
|
+
patternsReplicated: number;
|
|
86
|
+
} | {
|
|
87
|
+
type: 'inconsistency_detected';
|
|
88
|
+
patternId: string;
|
|
89
|
+
nodeIds: string[];
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* PatternReplicationService - Manages pattern replication across multiple agents
|
|
93
|
+
*
|
|
94
|
+
* This service provides:
|
|
95
|
+
* - Automatic pattern replication to N nodes (configurable replication factor)
|
|
96
|
+
* - Health monitoring with heartbeat mechanism
|
|
97
|
+
* - Automatic failover and recovery
|
|
98
|
+
* - Consistency checking and repair
|
|
99
|
+
* - Event-driven notifications for replication events
|
|
100
|
+
*/
|
|
101
|
+
export declare class PatternReplicationService extends EventEmitter {
|
|
102
|
+
private nodes;
|
|
103
|
+
private config;
|
|
104
|
+
private heartbeatTimer?;
|
|
105
|
+
private syncTimer?;
|
|
106
|
+
private isRunning;
|
|
107
|
+
private readonly DEFAULT_HEARTBEAT_INTERVAL;
|
|
108
|
+
private readonly DEFAULT_SYNC_INTERVAL;
|
|
109
|
+
private readonly DEFAULT_FAILURE_THRESHOLD;
|
|
110
|
+
constructor(config: ReplicationConfig);
|
|
111
|
+
/**
|
|
112
|
+
* Start the replication service
|
|
113
|
+
*/
|
|
114
|
+
start(): Promise<void>;
|
|
115
|
+
/**
|
|
116
|
+
* Stop the replication service
|
|
117
|
+
*/
|
|
118
|
+
stop(): Promise<void>;
|
|
119
|
+
/**
|
|
120
|
+
* Register a replication node
|
|
121
|
+
*/
|
|
122
|
+
registerNode(agentId: string, library: DistributedPatternLibrary): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* Unregister a replication node
|
|
125
|
+
*/
|
|
126
|
+
unregisterNode(agentId: string): Promise<boolean>;
|
|
127
|
+
/**
|
|
128
|
+
* Replicate a pattern to all healthy nodes
|
|
129
|
+
*/
|
|
130
|
+
replicatePattern(pattern: TestPattern, sourceAgentId?: string): Promise<number>;
|
|
131
|
+
/**
|
|
132
|
+
* Sync patterns across all nodes
|
|
133
|
+
*/
|
|
134
|
+
syncPatterns(): Promise<{
|
|
135
|
+
synced: number;
|
|
136
|
+
duration: number;
|
|
137
|
+
}>;
|
|
138
|
+
/**
|
|
139
|
+
* Check replication health
|
|
140
|
+
*/
|
|
141
|
+
checkHealth(): Promise<ReplicationHealth>;
|
|
142
|
+
/**
|
|
143
|
+
* Get replication statistics
|
|
144
|
+
*/
|
|
145
|
+
getStats(): Promise<{
|
|
146
|
+
replicationFactor: number;
|
|
147
|
+
registeredNodes: number;
|
|
148
|
+
health: ReplicationHealth;
|
|
149
|
+
}>;
|
|
150
|
+
/**
|
|
151
|
+
* Get all registered nodes
|
|
152
|
+
*/
|
|
153
|
+
getNodes(): ReplicationNode[];
|
|
154
|
+
/**
|
|
155
|
+
* Get healthy nodes only
|
|
156
|
+
*/
|
|
157
|
+
private getHealthyNodes;
|
|
158
|
+
/**
|
|
159
|
+
* Start heartbeat monitoring
|
|
160
|
+
*/
|
|
161
|
+
private startHeartbeat;
|
|
162
|
+
/**
|
|
163
|
+
* Start periodic sync
|
|
164
|
+
*/
|
|
165
|
+
private startSync;
|
|
166
|
+
/**
|
|
167
|
+
* Perform heartbeat check on all nodes
|
|
168
|
+
*/
|
|
169
|
+
private performHeartbeat;
|
|
170
|
+
/**
|
|
171
|
+
* Handle node failure
|
|
172
|
+
*/
|
|
173
|
+
private handleNodeFailure;
|
|
174
|
+
/**
|
|
175
|
+
* Attempt to recover a failed node
|
|
176
|
+
*/
|
|
177
|
+
private attemptRecovery;
|
|
178
|
+
/**
|
|
179
|
+
* Sync a single node with the cluster
|
|
180
|
+
*/
|
|
181
|
+
private syncNode;
|
|
182
|
+
/**
|
|
183
|
+
* Calculate consistency percentage across all nodes
|
|
184
|
+
*/
|
|
185
|
+
private calculateConsistency;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=PatternReplicationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternReplicationService.d.ts","sourceRoot":"","sources":["../../src/memory/PatternReplicationService.ts"],"names":[],"mappings":"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"}
|