agentic-qe 2.1.2 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/agentic-quality-engineering/SKILL.md +4 -4
- package/.claude/skills/cicd-pipeline-qe-orchestrator/README.md +14 -11
- package/.claude/skills/skills-manifest.json +2 -2
- package/CHANGELOG.md +138 -0
- package/README.md +92 -214
- package/dist/agents/BaseAgent.d.ts +5 -1
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +32 -17
- package/dist/agents/BaseAgent.js.map +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/cli/commands/improve/index.d.ts +8 -1
- package/dist/cli/commands/improve/index.d.ts.map +1 -1
- package/dist/cli/commands/improve/index.js +18 -16
- package/dist/cli/commands/improve/index.js.map +1 -1
- package/dist/cli/commands/learn/index.d.ts +10 -2
- package/dist/cli/commands/learn/index.d.ts.map +1 -1
- package/dist/cli/commands/learn/index.js +99 -63
- package/dist/cli/commands/learn/index.js.map +1 -1
- package/dist/cli/commands/patterns/index.d.ts +8 -1
- package/dist/cli/commands/patterns/index.d.ts.map +1 -1
- package/dist/cli/commands/patterns/index.js +79 -45
- package/dist/cli/commands/patterns/index.js.map +1 -1
- package/dist/cli/commands/routing/index.d.ts +5 -0
- package/dist/cli/commands/routing/index.d.ts.map +1 -1
- package/dist/cli/commands/routing/index.js +11 -10
- package/dist/cli/commands/routing/index.js.map +1 -1
- package/dist/cli/init/agents.d.ts +1 -1
- package/dist/cli/init/agents.js +2 -2
- package/dist/cli/init/database-init.d.ts +7 -0
- package/dist/cli/init/database-init.d.ts.map +1 -1
- package/dist/cli/init/database-init.js +29 -48
- package/dist/cli/init/database-init.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/HNSWVectorMemory.d.ts +261 -0
- package/dist/core/memory/HNSWVectorMemory.d.ts.map +1 -0
- package/dist/core/memory/HNSWVectorMemory.js +647 -0
- package/dist/core/memory/HNSWVectorMemory.js.map +1 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts +7 -0
- package/dist/core/memory/SwarmMemoryManager.d.ts.map +1 -1
- package/dist/core/memory/SwarmMemoryManager.js +9 -0
- package/dist/core/memory/SwarmMemoryManager.js.map +1 -1
- package/dist/core/memory/index.d.ts +2 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +11 -1
- package/dist/core/memory/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/ExplainableLearning.d.ts +191 -0
- package/dist/learning/ExplainableLearning.d.ts.map +1 -0
- package/dist/learning/ExplainableLearning.js +441 -0
- package/dist/learning/ExplainableLearning.js.map +1 -0
- package/dist/learning/GossipPatternSharingProtocol.d.ts +228 -0
- package/dist/learning/GossipPatternSharingProtocol.d.ts.map +1 -0
- package/dist/learning/GossipPatternSharingProtocol.js +590 -0
- package/dist/learning/GossipPatternSharingProtocol.js.map +1 -0
- package/dist/learning/LearningEngine.d.ts +104 -4
- package/dist/learning/LearningEngine.d.ts.map +1 -1
- package/dist/learning/LearningEngine.js +350 -16
- package/dist/learning/LearningEngine.js.map +1 -1
- package/dist/learning/PerformanceOptimizer.d.ts +268 -0
- package/dist/learning/PerformanceOptimizer.d.ts.map +1 -0
- package/dist/learning/PerformanceOptimizer.js +552 -0
- package/dist/learning/PerformanceOptimizer.js.map +1 -0
- package/dist/learning/PrivacyManager.d.ts +197 -0
- package/dist/learning/PrivacyManager.d.ts.map +1 -0
- package/dist/learning/PrivacyManager.js +551 -0
- package/dist/learning/PrivacyManager.js.map +1 -0
- 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/TransferLearningManager.d.ts +212 -0
- package/dist/learning/TransferLearningManager.d.ts.map +1 -0
- package/dist/learning/TransferLearningManager.js +497 -0
- package/dist/learning/TransferLearningManager.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/MAMLMetaLearner.d.ts +218 -0
- package/dist/learning/algorithms/MAMLMetaLearner.d.ts.map +1 -0
- package/dist/learning/algorithms/MAMLMetaLearner.js +532 -0
- package/dist/learning/algorithms/MAMLMetaLearner.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 +32 -0
- package/dist/learning/algorithms/index.d.ts.map +1 -0
- package/dist/learning/algorithms/index.js +50 -0
- package/dist/learning/algorithms/index.js.map +1 -0
- package/dist/learning/index.d.ts +11 -0
- package/dist/learning/index.d.ts.map +1 -1
- package/dist/learning/index.js +31 -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/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +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/HybridRouter.d.ts +217 -0
- package/dist/providers/HybridRouter.d.ts.map +1 -0
- package/dist/providers/HybridRouter.js +679 -0
- package/dist/providers/HybridRouter.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 +32 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +75 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/telemetry/LearningTelemetry.d.ts +190 -0
- package/dist/telemetry/LearningTelemetry.d.ts.map +1 -0
- package/dist/telemetry/LearningTelemetry.js +403 -0
- package/dist/telemetry/LearningTelemetry.js.map +1 -0
- package/dist/telemetry/index.d.ts +1 -0
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +20 -2
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/instrumentation/agent.d.ts +1 -1
- package/dist/telemetry/instrumentation/agent.js +1 -1
- package/dist/telemetry/instrumentation/index.d.ts +1 -1
- package/dist/telemetry/instrumentation/index.js +1 -1
- package/dist/utils/math.d.ts +11 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +16 -0
- package/dist/utils/math.js.map +1 -0
- package/docs/reference/agents.md +1 -1
- package/docs/reference/skills.md +3 -3
- package/docs/reference/usage.md +4 -4
- package/package.json +1 -1
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* DistributedPatternLibrary - Distributed Pattern Storage with Eventual Consistency
|
|
4
|
+
*
|
|
5
|
+
* Features:
|
|
6
|
+
* - Vector clock-based versioning for distributed consistency
|
|
7
|
+
* - Eventual consistency model with conflict resolution
|
|
8
|
+
* - Pattern CRUD operations with distributed coordination
|
|
9
|
+
* - Compression for large patterns (>10KB)
|
|
10
|
+
* - High-performance pattern lookup (<100ms p99)
|
|
11
|
+
*
|
|
12
|
+
* @module memory/DistributedPatternLibrary
|
|
13
|
+
* @version 1.0.0
|
|
14
|
+
*/
|
|
15
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
18
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
19
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(o, k2, desc);
|
|
22
|
+
}) : (function(o, m, k, k2) {
|
|
23
|
+
if (k2 === undefined) k2 = k;
|
|
24
|
+
o[k2] = m[k];
|
|
25
|
+
}));
|
|
26
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
27
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
28
|
+
}) : function(o, v) {
|
|
29
|
+
o["default"] = v;
|
|
30
|
+
});
|
|
31
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
32
|
+
var ownKeys = function(o) {
|
|
33
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
34
|
+
var ar = [];
|
|
35
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
36
|
+
return ar;
|
|
37
|
+
};
|
|
38
|
+
return ownKeys(o);
|
|
39
|
+
};
|
|
40
|
+
return function (mod) {
|
|
41
|
+
if (mod && mod.__esModule) return mod;
|
|
42
|
+
var result = {};
|
|
43
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
44
|
+
__setModuleDefault(result, mod);
|
|
45
|
+
return result;
|
|
46
|
+
};
|
|
47
|
+
})();
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.DistributedPatternLibrary = exports.ConflictResolution = void 0;
|
|
50
|
+
const CompressionManager_1 = require("../core/memory/CompressionManager");
|
|
51
|
+
const crypto = __importStar(require("crypto"));
|
|
52
|
+
/**
|
|
53
|
+
* Conflict resolution strategy
|
|
54
|
+
*/
|
|
55
|
+
var ConflictResolution;
|
|
56
|
+
(function (ConflictResolution) {
|
|
57
|
+
ConflictResolution["LAST_WRITE_WINS"] = "last_write_wins";
|
|
58
|
+
ConflictResolution["HIGHEST_CONFIDENCE"] = "highest_confidence";
|
|
59
|
+
ConflictResolution["MOST_USAGE"] = "most_usage";
|
|
60
|
+
ConflictResolution["VECTOR_CLOCK"] = "vector_clock";
|
|
61
|
+
})(ConflictResolution || (exports.ConflictResolution = ConflictResolution = {}));
|
|
62
|
+
/**
|
|
63
|
+
* DistributedPatternLibrary - Manages distributed pattern storage with eventual consistency
|
|
64
|
+
*
|
|
65
|
+
* This class provides:
|
|
66
|
+
* - Vector clock-based versioning for tracking distributed updates
|
|
67
|
+
* - Automatic conflict resolution using configurable strategies
|
|
68
|
+
* - Pattern compression for efficient storage and network transfer
|
|
69
|
+
* - Checksum validation for data integrity
|
|
70
|
+
* - High-performance pattern lookup with caching
|
|
71
|
+
*/
|
|
72
|
+
class DistributedPatternLibrary {
|
|
73
|
+
constructor(config) {
|
|
74
|
+
this.CACHE_TTL = 5000; // 5 seconds cache TTL
|
|
75
|
+
this.config = config;
|
|
76
|
+
this.patterns = new Map();
|
|
77
|
+
this.vectorClock = { [config.agentId]: 0 };
|
|
78
|
+
this.compression = new CompressionManager_1.CompressionManager();
|
|
79
|
+
this.conflictsResolved = 0;
|
|
80
|
+
this.lastSyncTimestamp = Date.now();
|
|
81
|
+
this.lookupCache = new Map();
|
|
82
|
+
this.COMPRESSION_THRESHOLD = config.compressionThreshold || 10240; // 10KB default
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Initialize the pattern library
|
|
86
|
+
*/
|
|
87
|
+
async initialize() {
|
|
88
|
+
// Clear cache and reset state
|
|
89
|
+
this.lookupCache.clear();
|
|
90
|
+
this.lastSyncTimestamp = Date.now();
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Store a pattern with vector clock versioning
|
|
94
|
+
*/
|
|
95
|
+
async storePattern(pattern, sourceAgentId) {
|
|
96
|
+
const agentId = sourceAgentId || this.config.agentId;
|
|
97
|
+
// Increment vector clock for this agent
|
|
98
|
+
this.vectorClock[agentId] = (this.vectorClock[agentId] || 0) + 1;
|
|
99
|
+
// Create checksum for integrity validation
|
|
100
|
+
const patternJson = JSON.stringify(pattern);
|
|
101
|
+
const checksum = crypto.createHash('sha256').update(patternJson).digest('hex');
|
|
102
|
+
// Compress if needed
|
|
103
|
+
let compressedContent;
|
|
104
|
+
let isCompressed = false;
|
|
105
|
+
if (this.config.autoCompress && this.compression.shouldCompress(patternJson, this.COMPRESSION_THRESHOLD)) {
|
|
106
|
+
compressedContent = await this.compression.compress(patternJson);
|
|
107
|
+
isCompressed = true;
|
|
108
|
+
}
|
|
109
|
+
const versionedPattern = {
|
|
110
|
+
pattern,
|
|
111
|
+
vectorClock: { ...this.vectorClock },
|
|
112
|
+
checksum,
|
|
113
|
+
compressedContent,
|
|
114
|
+
isCompressed,
|
|
115
|
+
createdBy: agentId,
|
|
116
|
+
updatedAt: Date.now()
|
|
117
|
+
};
|
|
118
|
+
// Check for conflicts if pattern already exists
|
|
119
|
+
const existing = this.patterns.get(pattern.id);
|
|
120
|
+
if (existing) {
|
|
121
|
+
const resolved = await this.resolveConflict(existing, versionedPattern);
|
|
122
|
+
this.patterns.set(pattern.id, resolved);
|
|
123
|
+
this.conflictsResolved++;
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.patterns.set(pattern.id, versionedPattern);
|
|
127
|
+
}
|
|
128
|
+
// Invalidate cache for this pattern
|
|
129
|
+
this.lookupCache.delete(pattern.id);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Retrieve a pattern by ID with caching
|
|
133
|
+
*/
|
|
134
|
+
async getPattern(id) {
|
|
135
|
+
const startTime = Date.now();
|
|
136
|
+
// Check cache first
|
|
137
|
+
const cached = this.lookupCache.get(id);
|
|
138
|
+
if (cached && (Date.now() - cached.timestamp) < this.CACHE_TTL) {
|
|
139
|
+
return this.decompressPattern(cached.pattern);
|
|
140
|
+
}
|
|
141
|
+
// Fetch from storage
|
|
142
|
+
const versionedPattern = this.patterns.get(id);
|
|
143
|
+
if (!versionedPattern) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
// Validate checksum
|
|
147
|
+
const isValid = await this.validateChecksum(versionedPattern);
|
|
148
|
+
if (!isValid) {
|
|
149
|
+
throw new Error(`Checksum validation failed for pattern: ${id}`);
|
|
150
|
+
}
|
|
151
|
+
// Update cache
|
|
152
|
+
this.lookupCache.set(id, {
|
|
153
|
+
pattern: versionedPattern,
|
|
154
|
+
timestamp: Date.now()
|
|
155
|
+
});
|
|
156
|
+
// Cleanup old cache entries
|
|
157
|
+
this.cleanupCache();
|
|
158
|
+
const lookupTime = Date.now() - startTime;
|
|
159
|
+
if (lookupTime > 100) {
|
|
160
|
+
console.warn(`Pattern lookup exceeded 100ms threshold: ${lookupTime}ms for pattern ${id}`);
|
|
161
|
+
}
|
|
162
|
+
return this.decompressPattern(versionedPattern);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Update an existing pattern
|
|
166
|
+
*/
|
|
167
|
+
async updatePattern(pattern) {
|
|
168
|
+
const existing = this.patterns.get(pattern.id);
|
|
169
|
+
if (!existing) {
|
|
170
|
+
throw new Error(`Pattern not found: ${pattern.id}`);
|
|
171
|
+
}
|
|
172
|
+
await this.storePattern(pattern);
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Delete a pattern
|
|
176
|
+
*/
|
|
177
|
+
async deletePattern(id) {
|
|
178
|
+
const deleted = this.patterns.delete(id);
|
|
179
|
+
if (deleted) {
|
|
180
|
+
this.lookupCache.delete(id);
|
|
181
|
+
}
|
|
182
|
+
return deleted;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get all patterns matching a filter
|
|
186
|
+
*/
|
|
187
|
+
async getPatterns(filter) {
|
|
188
|
+
const patterns = [];
|
|
189
|
+
for (const versionedPattern of Array.from(this.patterns.values())) {
|
|
190
|
+
const pattern = await this.decompressPattern(versionedPattern);
|
|
191
|
+
// Apply filters
|
|
192
|
+
if (filter) {
|
|
193
|
+
if (filter.type && pattern.type !== filter.type)
|
|
194
|
+
continue;
|
|
195
|
+
if (filter.domain && pattern.domain !== filter.domain)
|
|
196
|
+
continue;
|
|
197
|
+
if (filter.framework && pattern.framework !== filter.framework)
|
|
198
|
+
continue;
|
|
199
|
+
if (filter.minConfidence && (pattern.coverage || 0) < filter.minConfidence)
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
patterns.push(pattern);
|
|
203
|
+
}
|
|
204
|
+
return patterns;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Merge patterns from another agent with conflict resolution
|
|
208
|
+
*/
|
|
209
|
+
async mergePatterns(remotePatterns) {
|
|
210
|
+
let mergedCount = 0;
|
|
211
|
+
for (const remotePattern of remotePatterns) {
|
|
212
|
+
const localPattern = this.patterns.get(remotePattern.pattern.id);
|
|
213
|
+
if (!localPattern) {
|
|
214
|
+
// New pattern, just add it
|
|
215
|
+
this.patterns.set(remotePattern.pattern.id, remotePattern);
|
|
216
|
+
mergedCount++;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
// Resolve conflict
|
|
220
|
+
const resolved = await this.resolveConflict(localPattern, remotePattern);
|
|
221
|
+
if (resolved !== localPattern) {
|
|
222
|
+
this.patterns.set(remotePattern.pattern.id, resolved);
|
|
223
|
+
this.conflictsResolved++;
|
|
224
|
+
mergedCount++;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Merge vector clocks
|
|
228
|
+
this.mergeVectorClocks(remotePattern.vectorClock);
|
|
229
|
+
}
|
|
230
|
+
this.lastSyncTimestamp = Date.now();
|
|
231
|
+
return mergedCount;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get library statistics
|
|
235
|
+
*/
|
|
236
|
+
async getStats() {
|
|
237
|
+
let compressedCount = 0;
|
|
238
|
+
const compressionRatios = [];
|
|
239
|
+
for (const versionedPattern of Array.from(this.patterns.values())) {
|
|
240
|
+
if (versionedPattern.isCompressed && versionedPattern.compressedContent) {
|
|
241
|
+
compressedCount++;
|
|
242
|
+
const originalSize = JSON.stringify(versionedPattern.pattern).length;
|
|
243
|
+
const compressedSize = versionedPattern.compressedContent.length;
|
|
244
|
+
compressionRatios.push(compressedSize / originalSize);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const averageCompressionRatio = compressionRatios.length > 0
|
|
248
|
+
? compressionRatios.reduce((a, b) => a + b, 0) / compressionRatios.length
|
|
249
|
+
: 0;
|
|
250
|
+
return {
|
|
251
|
+
totalPatterns: this.patterns.size,
|
|
252
|
+
compressedPatterns: compressedCount,
|
|
253
|
+
averageCompressionRatio,
|
|
254
|
+
vectorClockSize: Object.keys(this.vectorClock).length,
|
|
255
|
+
conflictsResolved: this.conflictsResolved,
|
|
256
|
+
lastSyncTimestamp: this.lastSyncTimestamp
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Export all patterns for replication
|
|
261
|
+
*/
|
|
262
|
+
async exportPatterns() {
|
|
263
|
+
return Array.from(this.patterns.values());
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Clear all patterns
|
|
267
|
+
*/
|
|
268
|
+
async clear() {
|
|
269
|
+
this.patterns.clear();
|
|
270
|
+
this.lookupCache.clear();
|
|
271
|
+
this.vectorClock = { [this.config.agentId]: 0 };
|
|
272
|
+
this.conflictsResolved = 0;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Resolve conflict between two versioned patterns
|
|
276
|
+
*/
|
|
277
|
+
async resolveConflict(local, remote) {
|
|
278
|
+
const strategy = this.config.conflictResolution || ConflictResolution.VECTOR_CLOCK;
|
|
279
|
+
switch (strategy) {
|
|
280
|
+
case ConflictResolution.LAST_WRITE_WINS:
|
|
281
|
+
return local.updatedAt > remote.updatedAt ? local : remote;
|
|
282
|
+
case ConflictResolution.HIGHEST_CONFIDENCE:
|
|
283
|
+
const localConfidence = local.pattern.coverage || 0;
|
|
284
|
+
const remoteConfidence = remote.pattern.coverage || 0;
|
|
285
|
+
return localConfidence > remoteConfidence ? local : remote;
|
|
286
|
+
case ConflictResolution.MOST_USAGE:
|
|
287
|
+
const localUsage = local.pattern.usageCount || 0;
|
|
288
|
+
const remoteUsage = remote.pattern.usageCount || 0;
|
|
289
|
+
return localUsage > remoteUsage ? local : remote;
|
|
290
|
+
case ConflictResolution.VECTOR_CLOCK:
|
|
291
|
+
default:
|
|
292
|
+
// Use vector clock comparison
|
|
293
|
+
const comparison = this.compareVectorClocks(local.vectorClock, remote.vectorClock);
|
|
294
|
+
if (comparison === 1)
|
|
295
|
+
return local;
|
|
296
|
+
if (comparison === -1)
|
|
297
|
+
return remote;
|
|
298
|
+
// Concurrent updates - use highest confidence as tiebreaker
|
|
299
|
+
return (local.pattern.coverage || 0) > (remote.pattern.coverage || 0) ? local : remote;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Compare two vector clocks
|
|
304
|
+
* Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if concurrent
|
|
305
|
+
*/
|
|
306
|
+
compareVectorClocks(v1, v2) {
|
|
307
|
+
const allAgents = new Set([...Object.keys(v1), ...Object.keys(v2)]);
|
|
308
|
+
let v1Greater = false;
|
|
309
|
+
let v2Greater = false;
|
|
310
|
+
for (const agent of Array.from(allAgents)) {
|
|
311
|
+
const t1 = v1[agent] || 0;
|
|
312
|
+
const t2 = v2[agent] || 0;
|
|
313
|
+
if (t1 > t2)
|
|
314
|
+
v1Greater = true;
|
|
315
|
+
if (t2 > t1)
|
|
316
|
+
v2Greater = true;
|
|
317
|
+
}
|
|
318
|
+
if (v1Greater && !v2Greater)
|
|
319
|
+
return 1;
|
|
320
|
+
if (v2Greater && !v1Greater)
|
|
321
|
+
return -1;
|
|
322
|
+
return 0; // Concurrent
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Merge remote vector clock into local
|
|
326
|
+
*/
|
|
327
|
+
mergeVectorClocks(remoteClock) {
|
|
328
|
+
for (const [agent, timestamp] of Object.entries(remoteClock)) {
|
|
329
|
+
this.vectorClock[agent] = Math.max(this.vectorClock[agent] || 0, timestamp);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Validate pattern checksum
|
|
334
|
+
*/
|
|
335
|
+
async validateChecksum(versionedPattern) {
|
|
336
|
+
const pattern = versionedPattern.isCompressed && versionedPattern.compressedContent
|
|
337
|
+
? JSON.parse(await this.compression.decompress(versionedPattern.compressedContent))
|
|
338
|
+
: versionedPattern.pattern;
|
|
339
|
+
const patternJson = JSON.stringify(pattern);
|
|
340
|
+
const checksum = crypto.createHash('sha256').update(patternJson).digest('hex');
|
|
341
|
+
return checksum === versionedPattern.checksum;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Decompress pattern if needed
|
|
345
|
+
*/
|
|
346
|
+
async decompressPattern(versionedPattern) {
|
|
347
|
+
if (!versionedPattern.isCompressed || !versionedPattern.compressedContent) {
|
|
348
|
+
return versionedPattern.pattern;
|
|
349
|
+
}
|
|
350
|
+
const decompressed = await this.compression.decompress(versionedPattern.compressedContent);
|
|
351
|
+
return JSON.parse(decompressed);
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Cleanup old cache entries
|
|
355
|
+
*/
|
|
356
|
+
cleanupCache() {
|
|
357
|
+
const now = Date.now();
|
|
358
|
+
const entriesToDelete = [];
|
|
359
|
+
for (const [id, cached] of Array.from(this.lookupCache.entries())) {
|
|
360
|
+
if (now - cached.timestamp > this.CACHE_TTL) {
|
|
361
|
+
entriesToDelete.push(id);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
for (const id of entriesToDelete) {
|
|
365
|
+
this.lookupCache.delete(id);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
exports.DistributedPatternLibrary = DistributedPatternLibrary;
|
|
370
|
+
//# sourceMappingURL=DistributedPatternLibrary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DistributedPatternLibrary.js","sourceRoot":"","sources":["../../src/memory/DistributedPatternLibrary.ts"],"names":[],"mappings":"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"}
|
|
@@ -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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"}
|