agentic-qe 2.1.2 → 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 +123 -0
- package/README.md +1 -1
- 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/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/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/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/package.json +1 -1
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PatternQualityScorer - Pattern Quality Scoring and Garbage Collection
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Score patterns based on usage success rate
|
|
6
|
+
* - Track comprehensive usage statistics
|
|
7
|
+
* - Garbage collection for low-quality patterns
|
|
8
|
+
* - Pattern ranking and recommendations
|
|
9
|
+
* - Adaptive quality thresholds
|
|
10
|
+
*
|
|
11
|
+
* @module memory/PatternQualityScorer
|
|
12
|
+
* @version 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
import { TestPattern } from '../core/memory/IPatternStore';
|
|
15
|
+
import { DistributedPatternLibrary } from './DistributedPatternLibrary';
|
|
16
|
+
/**
|
|
17
|
+
* Pattern usage record
|
|
18
|
+
*/
|
|
19
|
+
export interface PatternUsage {
|
|
20
|
+
patternId: string;
|
|
21
|
+
timestamp: number;
|
|
22
|
+
success: boolean;
|
|
23
|
+
executionTime?: number;
|
|
24
|
+
context?: Record<string, any>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Pattern quality metrics
|
|
28
|
+
*/
|
|
29
|
+
export interface PatternQualityMetrics {
|
|
30
|
+
patternId: string;
|
|
31
|
+
qualityScore: number;
|
|
32
|
+
successRate: number;
|
|
33
|
+
totalUsage: number;
|
|
34
|
+
successCount: number;
|
|
35
|
+
failureCount: number;
|
|
36
|
+
averageExecutionTime: number;
|
|
37
|
+
lastUsedTimestamp: number;
|
|
38
|
+
createdTimestamp: number;
|
|
39
|
+
ageInDays: number;
|
|
40
|
+
trendScore: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Quality scorer configuration
|
|
44
|
+
*/
|
|
45
|
+
export interface QualityScorerConfig {
|
|
46
|
+
/** Minimum success rate (0-1) */
|
|
47
|
+
minSuccessRate?: number;
|
|
48
|
+
/** Minimum usage count before scoring */
|
|
49
|
+
minUsageCount?: number;
|
|
50
|
+
/** Maximum age in days before GC consideration */
|
|
51
|
+
maxAgeInDays?: number;
|
|
52
|
+
/** Minimum quality score to keep */
|
|
53
|
+
minQualityScore?: number;
|
|
54
|
+
/** Weight for success rate in quality score */
|
|
55
|
+
successRateWeight?: number;
|
|
56
|
+
/** Weight for usage frequency in quality score */
|
|
57
|
+
usageWeight?: number;
|
|
58
|
+
/** Weight for recency in quality score */
|
|
59
|
+
recencyWeight?: number;
|
|
60
|
+
/** Enable automatic garbage collection */
|
|
61
|
+
enableAutoGC?: boolean;
|
|
62
|
+
/** GC interval in milliseconds */
|
|
63
|
+
gcInterval?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Garbage collection result
|
|
67
|
+
*/
|
|
68
|
+
export interface GarbageCollectionResult {
|
|
69
|
+
totalPatterns: number;
|
|
70
|
+
patternsRemoved: number;
|
|
71
|
+
removedPatternIds: string[];
|
|
72
|
+
bytesReclaimed: number;
|
|
73
|
+
duration: number;
|
|
74
|
+
timestamp: number;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Pattern ranking entry
|
|
78
|
+
*/
|
|
79
|
+
export interface RankedPattern {
|
|
80
|
+
pattern: TestPattern;
|
|
81
|
+
metrics: PatternQualityMetrics;
|
|
82
|
+
rank: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* PatternQualityScorer - Tracks and scores pattern quality for optimization
|
|
86
|
+
*
|
|
87
|
+
* This class provides:
|
|
88
|
+
* - Real-time quality scoring based on success rate and usage
|
|
89
|
+
* - Comprehensive usage statistics tracking
|
|
90
|
+
* - Automatic garbage collection of low-quality patterns
|
|
91
|
+
* - Pattern ranking for recommendations
|
|
92
|
+
* - Trend analysis for quality improvement/degradation
|
|
93
|
+
*/
|
|
94
|
+
export declare class PatternQualityScorer {
|
|
95
|
+
private library;
|
|
96
|
+
private config;
|
|
97
|
+
private usageHistory;
|
|
98
|
+
private metricsCache;
|
|
99
|
+
private gcTimer?;
|
|
100
|
+
private readonly DEFAULT_MIN_SUCCESS_RATE;
|
|
101
|
+
private readonly DEFAULT_MIN_USAGE_COUNT;
|
|
102
|
+
private readonly DEFAULT_MAX_AGE_DAYS;
|
|
103
|
+
private readonly DEFAULT_MIN_QUALITY_SCORE;
|
|
104
|
+
private readonly DEFAULT_GC_INTERVAL;
|
|
105
|
+
constructor(library: DistributedPatternLibrary, config?: QualityScorerConfig);
|
|
106
|
+
/**
|
|
107
|
+
* Start automatic garbage collection
|
|
108
|
+
*/
|
|
109
|
+
startAutoGC(): void;
|
|
110
|
+
/**
|
|
111
|
+
* Stop automatic garbage collection
|
|
112
|
+
*/
|
|
113
|
+
stopAutoGC(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Record pattern usage
|
|
116
|
+
*/
|
|
117
|
+
recordUsage(usage: PatternUsage): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Calculate quality metrics for a pattern
|
|
120
|
+
*/
|
|
121
|
+
calculateMetrics(patternId: string): Promise<PatternQualityMetrics | null>;
|
|
122
|
+
/**
|
|
123
|
+
* Calculate overall quality score (0-1)
|
|
124
|
+
*/
|
|
125
|
+
private calculateQualityScore;
|
|
126
|
+
/**
|
|
127
|
+
* Calculate trend score (recent performance vs historical)
|
|
128
|
+
*/
|
|
129
|
+
private calculateTrend;
|
|
130
|
+
/**
|
|
131
|
+
* Get ranked patterns by quality
|
|
132
|
+
*/
|
|
133
|
+
getRankedPatterns(options?: {
|
|
134
|
+
minQualityScore?: number;
|
|
135
|
+
limit?: number;
|
|
136
|
+
sortBy?: 'quality' | 'usage' | 'recency';
|
|
137
|
+
}): Promise<RankedPattern[]>;
|
|
138
|
+
/**
|
|
139
|
+
* Get patterns eligible for garbage collection
|
|
140
|
+
*/
|
|
141
|
+
getGarbageCandidates(): Promise<PatternQualityMetrics[]>;
|
|
142
|
+
/**
|
|
143
|
+
* Perform garbage collection
|
|
144
|
+
*/
|
|
145
|
+
garbageCollect(): Promise<GarbageCollectionResult>;
|
|
146
|
+
/**
|
|
147
|
+
* Get scorer statistics
|
|
148
|
+
*/
|
|
149
|
+
getStats(): Promise<{
|
|
150
|
+
totalPatterns: number;
|
|
151
|
+
trackedPatterns: number;
|
|
152
|
+
averageQualityScore: number;
|
|
153
|
+
lowQualityPatterns: number;
|
|
154
|
+
garbageCandidates: number;
|
|
155
|
+
}>;
|
|
156
|
+
/**
|
|
157
|
+
* Clear all usage history
|
|
158
|
+
*/
|
|
159
|
+
clearHistory(): void;
|
|
160
|
+
/**
|
|
161
|
+
* Export usage history for analysis
|
|
162
|
+
*/
|
|
163
|
+
exportHistory(): Map<string, PatternUsage[]>;
|
|
164
|
+
/**
|
|
165
|
+
* Import usage history from external source
|
|
166
|
+
*/
|
|
167
|
+
importHistory(history: Map<string, PatternUsage[]>): void;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=PatternQualityScorer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PatternQualityScorer.d.ts","sourceRoot":"","sources":["../../src/memory/PatternQualityScorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|