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,538 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ExperienceSharingProtocol - Inter-Agent Learning Experience Sharing
|
|
4
|
+
*
|
|
5
|
+
* Enables agents to share learning experiences using gossip protocol
|
|
6
|
+
* for distributed, eventually consistent knowledge transfer.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Gossip-based experience propagation
|
|
10
|
+
* - Experience compression and deduplication
|
|
11
|
+
* - Priority-based sharing (high-value experiences first)
|
|
12
|
+
* - Conflict resolution for overlapping experiences
|
|
13
|
+
* - Bandwidth-aware transmission
|
|
14
|
+
*
|
|
15
|
+
* @module learning/ExperienceSharingProtocol
|
|
16
|
+
* @version 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.ExperienceSharingProtocol = void 0;
|
|
20
|
+
const events_1 = require("events");
|
|
21
|
+
const Logger_1 = require("../utils/Logger");
|
|
22
|
+
/**
|
|
23
|
+
* ExperienceSharingProtocol - Gossip-based experience sharing between agents
|
|
24
|
+
*
|
|
25
|
+
* This protocol enables agents to learn from each other's experiences
|
|
26
|
+
* through decentralized, eventually consistent knowledge transfer.
|
|
27
|
+
*
|
|
28
|
+
* Key features:
|
|
29
|
+
* - Gossip protocol for scalable experience propagation
|
|
30
|
+
* - Vector clock-based conflict resolution
|
|
31
|
+
* - Priority-based experience selection
|
|
32
|
+
* - Automatic deduplication and expiration
|
|
33
|
+
* - Bandwidth throttling for network efficiency
|
|
34
|
+
*/
|
|
35
|
+
class ExperienceSharingProtocol extends events_1.EventEmitter {
|
|
36
|
+
constructor(config) {
|
|
37
|
+
super();
|
|
38
|
+
// Default configuration values
|
|
39
|
+
this.DEFAULT_MAX_EXPERIENCES = 10000;
|
|
40
|
+
this.DEFAULT_EXPERIENCE_TTL = 86400000; // 24 hours
|
|
41
|
+
this.DEFAULT_GOSSIP_INTERVAL = 5000; // 5 seconds
|
|
42
|
+
this.DEFAULT_FANOUT = 3;
|
|
43
|
+
this.DEFAULT_MIN_SHARE_PRIORITY = 0.3;
|
|
44
|
+
this.DEFAULT_MAX_BANDWIDTH = 1024 * 1024; // 1 MB/s
|
|
45
|
+
this.logger = Logger_1.Logger.getInstance();
|
|
46
|
+
this.config = {
|
|
47
|
+
agentId: config.agentId,
|
|
48
|
+
maxExperiences: config.maxExperiences ?? this.DEFAULT_MAX_EXPERIENCES,
|
|
49
|
+
experienceTTL: config.experienceTTL ?? this.DEFAULT_EXPERIENCE_TTL,
|
|
50
|
+
gossipInterval: config.gossipInterval ?? this.DEFAULT_GOSSIP_INTERVAL,
|
|
51
|
+
fanout: config.fanout ?? this.DEFAULT_FANOUT,
|
|
52
|
+
minSharePriority: config.minSharePriority ?? this.DEFAULT_MIN_SHARE_PRIORITY,
|
|
53
|
+
enableCompression: config.enableCompression ?? true,
|
|
54
|
+
maxBandwidth: config.maxBandwidth ?? this.DEFAULT_MAX_BANDWIDTH
|
|
55
|
+
};
|
|
56
|
+
this.experiences = new Map();
|
|
57
|
+
this.peers = new Map();
|
|
58
|
+
this.vectorClock = { [config.agentId]: 0 };
|
|
59
|
+
this.seenExperiences = new Set();
|
|
60
|
+
this.isRunning = false;
|
|
61
|
+
this.stats = {
|
|
62
|
+
experiencesShared: 0,
|
|
63
|
+
experiencesReceived: 0,
|
|
64
|
+
duplicatesFiltered: 0,
|
|
65
|
+
expiredPurged: 0,
|
|
66
|
+
bytesTransferred: 0,
|
|
67
|
+
activeConnections: 0,
|
|
68
|
+
lastGossipRound: 0
|
|
69
|
+
};
|
|
70
|
+
this.logger.info('ExperienceSharingProtocol initialized', { agentId: config.agentId });
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Start the experience sharing protocol
|
|
74
|
+
*/
|
|
75
|
+
async start() {
|
|
76
|
+
if (this.isRunning) {
|
|
77
|
+
this.logger.warn('Experience sharing protocol already running');
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this.isRunning = true;
|
|
81
|
+
// Start gossip rounds
|
|
82
|
+
this.gossipTimer = setInterval(async () => {
|
|
83
|
+
await this.performGossipRound();
|
|
84
|
+
}, this.config.gossipInterval);
|
|
85
|
+
this.logger.info('Experience sharing protocol started');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Stop the experience sharing protocol
|
|
89
|
+
*/
|
|
90
|
+
async stop() {
|
|
91
|
+
this.isRunning = false;
|
|
92
|
+
if (this.gossipTimer) {
|
|
93
|
+
clearInterval(this.gossipTimer);
|
|
94
|
+
this.gossipTimer = undefined;
|
|
95
|
+
}
|
|
96
|
+
this.logger.info('Experience sharing protocol stopped');
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Register a peer for experience sharing
|
|
100
|
+
*/
|
|
101
|
+
async registerPeer(peerId, agentType) {
|
|
102
|
+
if (peerId === this.config.agentId) {
|
|
103
|
+
return; // Don't register self as peer
|
|
104
|
+
}
|
|
105
|
+
const peer = {
|
|
106
|
+
peerId,
|
|
107
|
+
agentType,
|
|
108
|
+
vectorClock: { [peerId]: 0 },
|
|
109
|
+
lastSeen: Date.now(),
|
|
110
|
+
experienceCount: 0,
|
|
111
|
+
isActive: true
|
|
112
|
+
};
|
|
113
|
+
this.peers.set(peerId, peer);
|
|
114
|
+
this.stats.activeConnections = this.getActivePeerCount();
|
|
115
|
+
this.emit('peer_connected', { type: 'peer_connected', peerId });
|
|
116
|
+
this.logger.info(`Peer registered: ${peerId} (${agentType})`);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Unregister a peer
|
|
120
|
+
*/
|
|
121
|
+
async unregisterPeer(peerId) {
|
|
122
|
+
const peer = this.peers.get(peerId);
|
|
123
|
+
if (peer) {
|
|
124
|
+
peer.isActive = false;
|
|
125
|
+
this.peers.delete(peerId);
|
|
126
|
+
this.stats.activeConnections = this.getActivePeerCount();
|
|
127
|
+
this.emit('peer_disconnected', { type: 'peer_disconnected', peerId });
|
|
128
|
+
this.logger.info(`Peer unregistered: ${peerId}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Share an experience from this agent
|
|
133
|
+
*/
|
|
134
|
+
async shareExperience(experience, priority) {
|
|
135
|
+
// Increment vector clock for this agent
|
|
136
|
+
this.vectorClock[this.config.agentId] =
|
|
137
|
+
(this.vectorClock[this.config.agentId] || 0) + 1;
|
|
138
|
+
// Calculate experience value/priority if not provided
|
|
139
|
+
const calculatedPriority = priority ?? this.calculateExperiencePriority(experience);
|
|
140
|
+
// Create shared experience
|
|
141
|
+
const id = this.generateExperienceId(experience);
|
|
142
|
+
const checksum = this.calculateChecksum(experience);
|
|
143
|
+
const sharedExperience = {
|
|
144
|
+
id,
|
|
145
|
+
experience,
|
|
146
|
+
sourceAgentId: this.config.agentId,
|
|
147
|
+
vectorClock: { ...this.vectorClock },
|
|
148
|
+
priority: calculatedPriority,
|
|
149
|
+
shareCount: 0,
|
|
150
|
+
createdAt: Date.now(),
|
|
151
|
+
expiresAt: Date.now() + this.config.experienceTTL,
|
|
152
|
+
checksum
|
|
153
|
+
};
|
|
154
|
+
// Store locally
|
|
155
|
+
this.experiences.set(id, sharedExperience);
|
|
156
|
+
this.seenExperiences.add(id);
|
|
157
|
+
// Enforce max experiences limit
|
|
158
|
+
this.enforceExperienceLimit();
|
|
159
|
+
this.logger.debug(`Experience shared locally: ${id}`, { priority: calculatedPriority });
|
|
160
|
+
return id;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Receive an experience from another agent
|
|
164
|
+
*/
|
|
165
|
+
async receiveExperience(sharedExperience) {
|
|
166
|
+
// Check if already seen (deduplication)
|
|
167
|
+
if (this.seenExperiences.has(sharedExperience.id)) {
|
|
168
|
+
this.stats.duplicatesFiltered++;
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
// Verify checksum
|
|
172
|
+
const calculatedChecksum = this.calculateChecksum(sharedExperience.experience);
|
|
173
|
+
if (calculatedChecksum !== sharedExperience.checksum) {
|
|
174
|
+
this.logger.warn(`Checksum mismatch for experience: ${sharedExperience.id}`);
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
// Check if expired
|
|
178
|
+
if (Date.now() > sharedExperience.expiresAt) {
|
|
179
|
+
this.logger.debug(`Ignoring expired experience: ${sharedExperience.id}`);
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
// Check for conflicts with existing experience
|
|
183
|
+
const existing = this.experiences.get(sharedExperience.id);
|
|
184
|
+
if (existing) {
|
|
185
|
+
const resolved = this.resolveConflict(existing, sharedExperience);
|
|
186
|
+
if (resolved === existing) {
|
|
187
|
+
return false; // Keep local version
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Store experience
|
|
191
|
+
this.experiences.set(sharedExperience.id, sharedExperience);
|
|
192
|
+
this.seenExperiences.add(sharedExperience.id);
|
|
193
|
+
// Merge vector clocks
|
|
194
|
+
this.mergeVectorClocks(sharedExperience.vectorClock);
|
|
195
|
+
// Update stats
|
|
196
|
+
this.stats.experiencesReceived++;
|
|
197
|
+
this.stats.bytesTransferred += JSON.stringify(sharedExperience).length;
|
|
198
|
+
// Emit event
|
|
199
|
+
this.emit('experience_received', {
|
|
200
|
+
type: 'experience_received',
|
|
201
|
+
experienceId: sharedExperience.id,
|
|
202
|
+
sourceAgentId: sharedExperience.sourceAgentId
|
|
203
|
+
});
|
|
204
|
+
// Enforce max experiences limit
|
|
205
|
+
this.enforceExperienceLimit();
|
|
206
|
+
this.logger.debug(`Experience received: ${sharedExperience.id}`, {
|
|
207
|
+
from: sharedExperience.sourceAgentId
|
|
208
|
+
});
|
|
209
|
+
return true;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Get experiences relevant to a specific state/context
|
|
213
|
+
*/
|
|
214
|
+
async getRelevantExperiences(state, limit = 10) {
|
|
215
|
+
const now = Date.now();
|
|
216
|
+
const validExperiences = [];
|
|
217
|
+
for (const exp of this.experiences.values()) {
|
|
218
|
+
// Skip expired
|
|
219
|
+
if (now > exp.expiresAt) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
// Calculate relevance to the given state
|
|
223
|
+
const relevance = this.calculateStateRelevance(exp.experience.state, state);
|
|
224
|
+
if (relevance > 0.3) {
|
|
225
|
+
validExperiences.push(exp);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Sort by priority * relevance
|
|
229
|
+
validExperiences.sort((a, b) => {
|
|
230
|
+
const relevanceA = this.calculateStateRelevance(a.experience.state, state);
|
|
231
|
+
const relevanceB = this.calculateStateRelevance(b.experience.state, state);
|
|
232
|
+
return (b.priority * relevanceB) - (a.priority * relevanceA);
|
|
233
|
+
});
|
|
234
|
+
return validExperiences.slice(0, limit);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Get all experiences from a specific agent
|
|
238
|
+
*/
|
|
239
|
+
async getAgentExperiences(agentId) {
|
|
240
|
+
const result = [];
|
|
241
|
+
for (const exp of this.experiences.values()) {
|
|
242
|
+
if (exp.sourceAgentId === agentId && Date.now() <= exp.expiresAt) {
|
|
243
|
+
result.push(exp);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return result;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Get sharing statistics
|
|
250
|
+
*/
|
|
251
|
+
getStats() {
|
|
252
|
+
return { ...this.stats };
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get connected peers
|
|
256
|
+
*/
|
|
257
|
+
getPeers() {
|
|
258
|
+
return Array.from(this.peers.values()).filter(p => p.isActive);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Get experience count
|
|
262
|
+
*/
|
|
263
|
+
getExperienceCount() {
|
|
264
|
+
return this.experiences.size;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Clear all experiences
|
|
268
|
+
*/
|
|
269
|
+
clear() {
|
|
270
|
+
this.experiences.clear();
|
|
271
|
+
this.seenExperiences.clear();
|
|
272
|
+
this.vectorClock = { [this.config.agentId]: 0 };
|
|
273
|
+
this.stats = {
|
|
274
|
+
experiencesShared: 0,
|
|
275
|
+
experiencesReceived: 0,
|
|
276
|
+
duplicatesFiltered: 0,
|
|
277
|
+
expiredPurged: 0,
|
|
278
|
+
bytesTransferred: 0,
|
|
279
|
+
activeConnections: this.getActivePeerCount(),
|
|
280
|
+
lastGossipRound: 0
|
|
281
|
+
};
|
|
282
|
+
this.logger.info('Experience sharing protocol cleared');
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Export experiences for persistence
|
|
286
|
+
*/
|
|
287
|
+
exportExperiences() {
|
|
288
|
+
return Array.from(this.experiences.values());
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Import experiences from persistence
|
|
292
|
+
*/
|
|
293
|
+
async importExperiences(experiences) {
|
|
294
|
+
let importedCount = 0;
|
|
295
|
+
for (const exp of experiences) {
|
|
296
|
+
if (await this.receiveExperience(exp)) {
|
|
297
|
+
importedCount++;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
this.logger.info(`Imported ${importedCount} experiences`);
|
|
301
|
+
return importedCount;
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Perform a gossip round
|
|
305
|
+
*/
|
|
306
|
+
async performGossipRound() {
|
|
307
|
+
if (!this.isRunning)
|
|
308
|
+
return;
|
|
309
|
+
const activePeers = this.getPeers();
|
|
310
|
+
if (activePeers.length === 0)
|
|
311
|
+
return;
|
|
312
|
+
// Select random peers up to fanout
|
|
313
|
+
const selectedPeers = this.selectRandomPeers(activePeers, this.config.fanout);
|
|
314
|
+
// Get high-priority experiences to share
|
|
315
|
+
const experiencesToShare = this.selectExperiencesToShare();
|
|
316
|
+
if (experiencesToShare.length === 0)
|
|
317
|
+
return;
|
|
318
|
+
// Simulate sharing with each peer
|
|
319
|
+
for (const peer of selectedPeers) {
|
|
320
|
+
await this.gossipWithPeer(peer, experiencesToShare);
|
|
321
|
+
}
|
|
322
|
+
this.stats.lastGossipRound = Date.now();
|
|
323
|
+
this.stats.experiencesShared += experiencesToShare.length * selectedPeers.length;
|
|
324
|
+
this.logger.debug(`Gossip round completed`, {
|
|
325
|
+
peers: selectedPeers.length,
|
|
326
|
+
experiences: experiencesToShare.length
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Gossip with a specific peer
|
|
331
|
+
*/
|
|
332
|
+
async gossipWithPeer(peer, experiences) {
|
|
333
|
+
// Update peer's last seen
|
|
334
|
+
peer.lastSeen = Date.now();
|
|
335
|
+
// Emit share event
|
|
336
|
+
this.emit('experience_shared', {
|
|
337
|
+
type: 'experience_shared',
|
|
338
|
+
experienceId: experiences.map(e => e.id).join(','),
|
|
339
|
+
targetPeers: [peer.peerId]
|
|
340
|
+
});
|
|
341
|
+
// Increment share count for each experience
|
|
342
|
+
for (const exp of experiences) {
|
|
343
|
+
exp.shareCount++;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Select experiences to share based on priority and share count
|
|
348
|
+
*/
|
|
349
|
+
selectExperiencesToShare() {
|
|
350
|
+
const now = Date.now();
|
|
351
|
+
const candidates = [];
|
|
352
|
+
for (const exp of this.experiences.values()) {
|
|
353
|
+
// Skip expired
|
|
354
|
+
if (now > exp.expiresAt)
|
|
355
|
+
continue;
|
|
356
|
+
// Skip low priority
|
|
357
|
+
if (exp.priority < this.config.minSharePriority)
|
|
358
|
+
continue;
|
|
359
|
+
// Prioritize less-shared experiences
|
|
360
|
+
candidates.push(exp);
|
|
361
|
+
}
|
|
362
|
+
// Sort by priority / (shareCount + 1) to balance priority and distribution
|
|
363
|
+
candidates.sort((a, b) => {
|
|
364
|
+
const scoreA = a.priority / (a.shareCount + 1);
|
|
365
|
+
const scoreB = b.priority / (b.shareCount + 1);
|
|
366
|
+
return scoreB - scoreA;
|
|
367
|
+
});
|
|
368
|
+
// Return top experiences within bandwidth limit
|
|
369
|
+
const maxExperiences = Math.min(10, candidates.length);
|
|
370
|
+
return candidates.slice(0, maxExperiences);
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Select random peers for gossip
|
|
374
|
+
*/
|
|
375
|
+
selectRandomPeers(peers, count) {
|
|
376
|
+
const shuffled = [...peers].sort(() => Math.random() - 0.5);
|
|
377
|
+
return shuffled.slice(0, Math.min(count, shuffled.length));
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Calculate experience priority based on reward and novelty
|
|
381
|
+
*/
|
|
382
|
+
calculateExperiencePriority(experience) {
|
|
383
|
+
// Factors: reward magnitude, complexity, success/failure
|
|
384
|
+
const rewardFactor = Math.abs(experience.reward) / 10; // Normalize reward
|
|
385
|
+
const complexityFactor = experience.state.taskComplexity;
|
|
386
|
+
const successFactor = experience.reward > 0 ? 0.3 : 0.5; // Failures are more valuable for learning
|
|
387
|
+
return Math.min(1, (rewardFactor + complexityFactor + successFactor) / 3);
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Calculate relevance between two states
|
|
391
|
+
*/
|
|
392
|
+
calculateStateRelevance(state1, state2) {
|
|
393
|
+
// Compare complexity
|
|
394
|
+
const complexityDiff = Math.abs(state1.taskComplexity - state2.taskComplexity);
|
|
395
|
+
// Compare capabilities overlap
|
|
396
|
+
const caps1 = new Set(state1.requiredCapabilities);
|
|
397
|
+
const caps2 = new Set(state2.requiredCapabilities);
|
|
398
|
+
const intersection = [...caps1].filter(x => caps2.has(x)).length;
|
|
399
|
+
const union = new Set([...caps1, ...caps2]).size;
|
|
400
|
+
const capsOverlap = union > 0 ? intersection / union : 1;
|
|
401
|
+
// Compare resources
|
|
402
|
+
const resourceDiff = Math.abs(state1.availableResources - state2.availableResources);
|
|
403
|
+
// Weighted relevance score
|
|
404
|
+
return ((1 - complexityDiff) * 0.3 +
|
|
405
|
+
capsOverlap * 0.5 +
|
|
406
|
+
(1 - resourceDiff) * 0.2);
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Resolve conflict between two experiences
|
|
410
|
+
*/
|
|
411
|
+
resolveConflict(local, remote) {
|
|
412
|
+
// Compare vector clocks
|
|
413
|
+
const comparison = this.compareVectorClocks(local.vectorClock, remote.vectorClock);
|
|
414
|
+
if (comparison === 1) {
|
|
415
|
+
// Local is newer
|
|
416
|
+
this.emit('conflict_resolved', {
|
|
417
|
+
type: 'conflict_resolved',
|
|
418
|
+
experienceId: local.id,
|
|
419
|
+
resolution: 'local'
|
|
420
|
+
});
|
|
421
|
+
return local;
|
|
422
|
+
}
|
|
423
|
+
else if (comparison === -1) {
|
|
424
|
+
// Remote is newer
|
|
425
|
+
this.emit('conflict_resolved', {
|
|
426
|
+
type: 'conflict_resolved',
|
|
427
|
+
experienceId: remote.id,
|
|
428
|
+
resolution: 'remote'
|
|
429
|
+
});
|
|
430
|
+
return remote;
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
// Concurrent - use higher priority as tiebreaker
|
|
434
|
+
const winner = local.priority >= remote.priority ? local : remote;
|
|
435
|
+
this.emit('conflict_resolved', {
|
|
436
|
+
type: 'conflict_resolved',
|
|
437
|
+
experienceId: winner.id,
|
|
438
|
+
resolution: winner === local ? 'local' : 'remote'
|
|
439
|
+
});
|
|
440
|
+
return winner;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Compare two vector clocks
|
|
445
|
+
*/
|
|
446
|
+
compareVectorClocks(v1, v2) {
|
|
447
|
+
const allAgents = new Set([...Object.keys(v1), ...Object.keys(v2)]);
|
|
448
|
+
let v1Greater = false;
|
|
449
|
+
let v2Greater = false;
|
|
450
|
+
for (const agent of allAgents) {
|
|
451
|
+
const t1 = v1[agent] || 0;
|
|
452
|
+
const t2 = v2[agent] || 0;
|
|
453
|
+
if (t1 > t2)
|
|
454
|
+
v1Greater = true;
|
|
455
|
+
if (t2 > t1)
|
|
456
|
+
v2Greater = true;
|
|
457
|
+
}
|
|
458
|
+
if (v1Greater && !v2Greater)
|
|
459
|
+
return 1;
|
|
460
|
+
if (v2Greater && !v1Greater)
|
|
461
|
+
return -1;
|
|
462
|
+
return 0; // Concurrent
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Merge remote vector clock into local
|
|
466
|
+
*/
|
|
467
|
+
mergeVectorClocks(remoteClock) {
|
|
468
|
+
for (const [agent, timestamp] of Object.entries(remoteClock)) {
|
|
469
|
+
this.vectorClock[agent] = Math.max(this.vectorClock[agent] || 0, timestamp);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Generate unique experience ID
|
|
474
|
+
*/
|
|
475
|
+
generateExperienceId(experience) {
|
|
476
|
+
// Handle missing or invalid timestamp - use current time as fallback
|
|
477
|
+
const timestamp = experience.timestamp instanceof Date
|
|
478
|
+
? experience.timestamp.getTime()
|
|
479
|
+
: (typeof experience.timestamp === 'number' ? experience.timestamp : Date.now());
|
|
480
|
+
const content = `${experience.taskId || 'unknown'}:${experience.agentId || 'unknown'}:${timestamp}`;
|
|
481
|
+
return this.hashString(content);
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Calculate checksum for experience
|
|
485
|
+
*/
|
|
486
|
+
calculateChecksum(experience) {
|
|
487
|
+
return this.hashString(JSON.stringify(experience));
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Simple hash function for IDs and checksums
|
|
491
|
+
*/
|
|
492
|
+
hashString(str) {
|
|
493
|
+
let hash = 0;
|
|
494
|
+
for (let i = 0; i < str.length; i++) {
|
|
495
|
+
const char = str.charCodeAt(i);
|
|
496
|
+
hash = ((hash << 5) - hash) + char;
|
|
497
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
498
|
+
}
|
|
499
|
+
return Math.abs(hash).toString(16).padStart(8, '0');
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Enforce maximum experience limit
|
|
503
|
+
*/
|
|
504
|
+
enforceExperienceLimit() {
|
|
505
|
+
if (this.experiences.size <= this.config.maxExperiences) {
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
// Remove expired first
|
|
509
|
+
const now = Date.now();
|
|
510
|
+
const expiredIds = [];
|
|
511
|
+
for (const [id, exp] of this.experiences.entries()) {
|
|
512
|
+
if (now > exp.expiresAt) {
|
|
513
|
+
expiredIds.push(id);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
for (const id of expiredIds) {
|
|
517
|
+
this.experiences.delete(id);
|
|
518
|
+
this.stats.expiredPurged++;
|
|
519
|
+
}
|
|
520
|
+
// If still over limit, remove lowest priority
|
|
521
|
+
if (this.experiences.size > this.config.maxExperiences) {
|
|
522
|
+
const sorted = Array.from(this.experiences.entries())
|
|
523
|
+
.sort((a, b) => a[1].priority - b[1].priority);
|
|
524
|
+
const toRemove = sorted.slice(0, this.experiences.size - this.config.maxExperiences);
|
|
525
|
+
for (const [id] of toRemove) {
|
|
526
|
+
this.experiences.delete(id);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
/**
|
|
531
|
+
* Get count of active peers
|
|
532
|
+
*/
|
|
533
|
+
getActivePeerCount() {
|
|
534
|
+
return Array.from(this.peers.values()).filter(p => p.isActive).length;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
exports.ExperienceSharingProtocol = ExperienceSharingProtocol;
|
|
538
|
+
//# sourceMappingURL=ExperienceSharingProtocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExperienceSharingProtocol.js","sourceRoot":"","sources":["../../src/learning/ExperienceSharingProtocol.ts"],"names":[],"mappings":"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"}
|