@arcanea/guardian-evolution 0.1.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.
Files changed (85) hide show
  1. package/dist/algorithms/a2c.d.ts +86 -0
  2. package/dist/algorithms/a2c.d.ts.map +1 -0
  3. package/dist/algorithms/a2c.js +361 -0
  4. package/dist/algorithms/a2c.js.map +1 -0
  5. package/dist/algorithms/curiosity.d.ts +82 -0
  6. package/dist/algorithms/curiosity.d.ts.map +1 -0
  7. package/dist/algorithms/curiosity.js +392 -0
  8. package/dist/algorithms/curiosity.js.map +1 -0
  9. package/dist/algorithms/decision-transformer.d.ts +82 -0
  10. package/dist/algorithms/decision-transformer.d.ts.map +1 -0
  11. package/dist/algorithms/decision-transformer.js +415 -0
  12. package/dist/algorithms/decision-transformer.js.map +1 -0
  13. package/dist/algorithms/dqn.d.ts +72 -0
  14. package/dist/algorithms/dqn.d.ts.map +1 -0
  15. package/dist/algorithms/dqn.js +303 -0
  16. package/dist/algorithms/dqn.js.map +1 -0
  17. package/dist/algorithms/index.d.ts +32 -0
  18. package/dist/algorithms/index.d.ts.map +1 -0
  19. package/dist/algorithms/index.js +74 -0
  20. package/dist/algorithms/index.js.map +1 -0
  21. package/dist/algorithms/ppo.d.ts +72 -0
  22. package/dist/algorithms/ppo.d.ts.map +1 -0
  23. package/dist/algorithms/ppo.js +331 -0
  24. package/dist/algorithms/ppo.js.map +1 -0
  25. package/dist/algorithms/q-learning.d.ts +77 -0
  26. package/dist/algorithms/q-learning.d.ts.map +1 -0
  27. package/dist/algorithms/q-learning.js +259 -0
  28. package/dist/algorithms/q-learning.js.map +1 -0
  29. package/dist/algorithms/sarsa.d.ts +82 -0
  30. package/dist/algorithms/sarsa.d.ts.map +1 -0
  31. package/dist/algorithms/sarsa.js +297 -0
  32. package/dist/algorithms/sarsa.js.map +1 -0
  33. package/dist/index.d.ts +118 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +201 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/modes/balanced.d.ts +60 -0
  38. package/dist/modes/balanced.d.ts.map +1 -0
  39. package/dist/modes/balanced.js +234 -0
  40. package/dist/modes/balanced.js.map +1 -0
  41. package/dist/modes/batch.d.ts +82 -0
  42. package/dist/modes/batch.d.ts.map +1 -0
  43. package/dist/modes/batch.js +316 -0
  44. package/dist/modes/batch.js.map +1 -0
  45. package/dist/modes/edge.d.ts +85 -0
  46. package/dist/modes/edge.d.ts.map +1 -0
  47. package/dist/modes/edge.js +310 -0
  48. package/dist/modes/edge.js.map +1 -0
  49. package/dist/modes/index.d.ts +55 -0
  50. package/dist/modes/index.d.ts.map +1 -0
  51. package/dist/modes/index.js +83 -0
  52. package/dist/modes/index.js.map +1 -0
  53. package/dist/modes/real-time.d.ts +58 -0
  54. package/dist/modes/real-time.d.ts.map +1 -0
  55. package/dist/modes/real-time.js +196 -0
  56. package/dist/modes/real-time.js.map +1 -0
  57. package/dist/modes/research.d.ts +79 -0
  58. package/dist/modes/research.d.ts.map +1 -0
  59. package/dist/modes/research.js +389 -0
  60. package/dist/modes/research.js.map +1 -0
  61. package/dist/pattern-learner.d.ts +117 -0
  62. package/dist/pattern-learner.d.ts.map +1 -0
  63. package/dist/pattern-learner.js +603 -0
  64. package/dist/pattern-learner.js.map +1 -0
  65. package/dist/reasoning-bank.d.ts +259 -0
  66. package/dist/reasoning-bank.d.ts.map +1 -0
  67. package/dist/reasoning-bank.js +993 -0
  68. package/dist/reasoning-bank.js.map +1 -0
  69. package/dist/reasoningbank-adapter.d.ts +168 -0
  70. package/dist/reasoningbank-adapter.d.ts.map +1 -0
  71. package/dist/reasoningbank-adapter.js +463 -0
  72. package/dist/reasoningbank-adapter.js.map +1 -0
  73. package/dist/sona-integration.d.ts +168 -0
  74. package/dist/sona-integration.d.ts.map +1 -0
  75. package/dist/sona-integration.js +316 -0
  76. package/dist/sona-integration.js.map +1 -0
  77. package/dist/sona-manager.d.ts +147 -0
  78. package/dist/sona-manager.d.ts.map +1 -0
  79. package/dist/sona-manager.js +695 -0
  80. package/dist/sona-manager.js.map +1 -0
  81. package/dist/types.d.ts +431 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/types.js +11 -0
  84. package/dist/types.js.map +1 -0
  85. package/package.json +47 -0
@@ -0,0 +1,603 @@
1
+ /**
2
+ * Pattern Learner
3
+ *
4
+ * Implements pattern extraction, matching, and evolution for
5
+ * continuous learning from agent experiences.
6
+ *
7
+ * Performance Targets:
8
+ * - Pattern matching: <1ms
9
+ * - Pattern extraction: <5ms
10
+ * - Evolution step: <2ms
11
+ */
12
+ /**
13
+ * Default Pattern Learner configuration
14
+ */
15
+ const DEFAULT_CONFIG = {
16
+ maxPatterns: 1000,
17
+ matchThreshold: 0.7,
18
+ minUsagesForStable: 5,
19
+ qualityThreshold: 0.5,
20
+ enableClustering: true,
21
+ numClusters: 50,
22
+ evolutionLearningRate: 0.1,
23
+ };
24
+ /**
25
+ * Pattern Learner - Manages pattern extraction, matching, and evolution
26
+ */
27
+ export class PatternLearner {
28
+ config;
29
+ patterns = new Map();
30
+ clusters = [];
31
+ patternToCluster = new Map();
32
+ // Performance tracking
33
+ matchCount = 0;
34
+ totalMatchTime = 0;
35
+ extractionCount = 0;
36
+ totalExtractionTime = 0;
37
+ evolutionCount = 0;
38
+ totalEvolutionTime = 0;
39
+ // Event listeners
40
+ eventListeners = new Set();
41
+ constructor(config = {}) {
42
+ this.config = { ...DEFAULT_CONFIG, ...config };
43
+ }
44
+ // ==========================================================================
45
+ // Pattern Matching
46
+ // ==========================================================================
47
+ /**
48
+ * Find matching patterns for a query embedding
49
+ * Target: <1ms
50
+ */
51
+ findMatches(queryEmbedding, k = 3) {
52
+ const startTime = performance.now();
53
+ if (this.patterns.size === 0) {
54
+ return [];
55
+ }
56
+ let candidates;
57
+ // Use clustering for faster search if enabled and clusters exist
58
+ if (this.config.enableClustering && this.clusters.length > 0) {
59
+ candidates = this.getCandidatesFromClusters(queryEmbedding);
60
+ }
61
+ else {
62
+ candidates = Array.from(this.patterns.values());
63
+ }
64
+ // Compute similarities
65
+ const matches = [];
66
+ for (const pattern of candidates) {
67
+ const similarity = this.cosineSimilarity(queryEmbedding, pattern.embedding);
68
+ if (similarity >= this.config.matchThreshold) {
69
+ matches.push({
70
+ pattern,
71
+ similarity,
72
+ confidence: this.computeMatchConfidence(pattern, similarity),
73
+ latencyMs: 0,
74
+ });
75
+ }
76
+ }
77
+ // Sort by similarity
78
+ matches.sort((a, b) => b.similarity - a.similarity);
79
+ const result = matches.slice(0, k);
80
+ // Track performance
81
+ const elapsed = performance.now() - startTime;
82
+ this.matchCount++;
83
+ this.totalMatchTime += elapsed;
84
+ // Warn if over target
85
+ if (elapsed > 1) {
86
+ console.warn(`Pattern matching exceeded target: ${elapsed.toFixed(2)}ms > 1ms`);
87
+ }
88
+ return result;
89
+ }
90
+ /**
91
+ * Find best single match
92
+ */
93
+ findBestMatch(queryEmbedding) {
94
+ const matches = this.findMatches(queryEmbedding, 1);
95
+ return matches.length > 0 ? matches[0] : null;
96
+ }
97
+ // ==========================================================================
98
+ // Pattern Extraction
99
+ // ==========================================================================
100
+ /**
101
+ * Extract a pattern from a trajectory
102
+ * Target: <5ms
103
+ */
104
+ extractPattern(trajectory, memory) {
105
+ const startTime = performance.now();
106
+ // Validate trajectory
107
+ if (!trajectory.isComplete || trajectory.qualityScore < this.config.qualityThreshold) {
108
+ return null;
109
+ }
110
+ // Check for duplicates
111
+ const embedding = this.computePatternEmbedding(trajectory);
112
+ const existing = this.findSimilarPattern(embedding, 0.95);
113
+ if (existing) {
114
+ // Update existing pattern instead
115
+ this.updatePatternFromTrajectory(existing, trajectory);
116
+ return existing;
117
+ }
118
+ // Create new pattern
119
+ const pattern = {
120
+ patternId: `pat_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`,
121
+ name: this.generatePatternName(trajectory),
122
+ domain: trajectory.domain,
123
+ embedding,
124
+ strategy: this.extractStrategy(trajectory),
125
+ successRate: trajectory.qualityScore,
126
+ usageCount: 1,
127
+ qualityHistory: [trajectory.qualityScore],
128
+ evolutionHistory: [],
129
+ createdAt: Date.now(),
130
+ updatedAt: Date.now(),
131
+ };
132
+ // Store pattern
133
+ this.patterns.set(pattern.patternId, pattern);
134
+ // Update clusters if enabled
135
+ if (this.config.enableClustering) {
136
+ this.assignToCluster(pattern);
137
+ }
138
+ // Prune if over capacity
139
+ if (this.patterns.size > this.config.maxPatterns) {
140
+ this.prunePatterns();
141
+ }
142
+ // Track performance
143
+ const elapsed = performance.now() - startTime;
144
+ this.extractionCount++;
145
+ this.totalExtractionTime += elapsed;
146
+ return pattern;
147
+ }
148
+ /**
149
+ * Extract patterns from multiple trajectories in batch
150
+ */
151
+ extractPatternsBatch(trajectories) {
152
+ const patterns = [];
153
+ for (const trajectory of trajectories) {
154
+ const pattern = this.extractPattern(trajectory);
155
+ if (pattern) {
156
+ patterns.push(pattern);
157
+ }
158
+ }
159
+ // Rebuild clusters after batch extraction
160
+ if (this.config.enableClustering && patterns.length > 10) {
161
+ this.rebuildClusters();
162
+ }
163
+ return patterns;
164
+ }
165
+ // ==========================================================================
166
+ // Pattern Evolution
167
+ // ==========================================================================
168
+ /**
169
+ * Evolve a pattern based on new experience
170
+ * Target: <2ms
171
+ */
172
+ evolvePattern(patternId, quality, context) {
173
+ const startTime = performance.now();
174
+ const pattern = this.patterns.get(patternId);
175
+ if (!pattern)
176
+ return;
177
+ const previousQuality = pattern.successRate;
178
+ const lr = this.config.evolutionLearningRate;
179
+ // Update quality history
180
+ pattern.qualityHistory.push(quality);
181
+ if (pattern.qualityHistory.length > 100) {
182
+ pattern.qualityHistory = pattern.qualityHistory.slice(-100);
183
+ }
184
+ // Exponential moving average for success rate
185
+ pattern.successRate = pattern.successRate * (1 - lr) + quality * lr;
186
+ pattern.usageCount++;
187
+ pattern.updatedAt = Date.now();
188
+ // Record evolution
189
+ const evolutionType = this.determineEvolutionType(previousQuality, pattern.successRate);
190
+ pattern.evolutionHistory.push({
191
+ timestamp: Date.now(),
192
+ type: evolutionType,
193
+ previousQuality,
194
+ newQuality: pattern.successRate,
195
+ description: context || 'Updated from new experience',
196
+ });
197
+ // Keep evolution history bounded
198
+ if (pattern.evolutionHistory.length > 50) {
199
+ pattern.evolutionHistory = pattern.evolutionHistory.slice(-50);
200
+ }
201
+ // Emit event
202
+ this.emitEvent({
203
+ type: 'pattern_evolved',
204
+ patternId,
205
+ evolutionType,
206
+ });
207
+ // Track performance
208
+ const elapsed = performance.now() - startTime;
209
+ this.evolutionCount++;
210
+ this.totalEvolutionTime += elapsed;
211
+ }
212
+ /**
213
+ * Merge two similar patterns
214
+ */
215
+ mergePatterns(patternId1, patternId2) {
216
+ const p1 = this.patterns.get(patternId1);
217
+ const p2 = this.patterns.get(patternId2);
218
+ if (!p1 || !p2)
219
+ return null;
220
+ // Keep the higher quality pattern as base
221
+ const [keep, remove] = p1.successRate >= p2.successRate ? [p1, p2] : [p2, p1];
222
+ // Merge embeddings (weighted average)
223
+ const totalUsage = keep.usageCount + remove.usageCount;
224
+ const w1 = keep.usageCount / totalUsage;
225
+ const w2 = remove.usageCount / totalUsage;
226
+ for (let i = 0; i < keep.embedding.length; i++) {
227
+ keep.embedding[i] = keep.embedding[i] * w1 + remove.embedding[i] * w2;
228
+ }
229
+ // Merge statistics
230
+ keep.usageCount += remove.usageCount;
231
+ keep.qualityHistory.push(...remove.qualityHistory);
232
+ keep.successRate = keep.qualityHistory.reduce((a, b) => a + b, 0) / keep.qualityHistory.length;
233
+ // Record merge
234
+ keep.evolutionHistory.push({
235
+ timestamp: Date.now(),
236
+ type: 'merge',
237
+ previousQuality: p1.successRate,
238
+ newQuality: keep.successRate,
239
+ description: `Merged with pattern ${remove.patternId}`,
240
+ });
241
+ // Remove the merged pattern
242
+ this.patterns.delete(remove.patternId);
243
+ this.patternToCluster.delete(remove.patternId);
244
+ return keep;
245
+ }
246
+ /**
247
+ * Split a pattern into more specific sub-patterns
248
+ */
249
+ splitPattern(patternId, numSplits = 2) {
250
+ const pattern = this.patterns.get(patternId);
251
+ if (!pattern || numSplits < 2)
252
+ return [];
253
+ const splits = [];
254
+ for (let i = 0; i < numSplits; i++) {
255
+ // Create variation of embedding with noise
256
+ const newEmbedding = new Float32Array(pattern.embedding.length);
257
+ for (let j = 0; j < newEmbedding.length; j++) {
258
+ const noise = (Math.random() - 0.5) * 0.1;
259
+ newEmbedding[j] = pattern.embedding[j] + noise;
260
+ }
261
+ const newPattern = {
262
+ patternId: `pat_${Date.now()}_${i}_${Math.random().toString(36).slice(2, 6)}`,
263
+ name: `${pattern.name}_split_${i}`,
264
+ domain: pattern.domain,
265
+ embedding: newEmbedding,
266
+ strategy: pattern.strategy,
267
+ successRate: pattern.successRate * 0.9, // Slight penalty for uncertainty
268
+ usageCount: 0,
269
+ qualityHistory: [],
270
+ evolutionHistory: [{
271
+ timestamp: Date.now(),
272
+ type: 'split',
273
+ previousQuality: pattern.successRate,
274
+ newQuality: pattern.successRate * 0.9,
275
+ description: `Split from pattern ${patternId}`,
276
+ }],
277
+ createdAt: Date.now(),
278
+ updatedAt: Date.now(),
279
+ };
280
+ this.patterns.set(newPattern.patternId, newPattern);
281
+ splits.push(newPattern);
282
+ }
283
+ // Remove original pattern
284
+ this.patterns.delete(patternId);
285
+ this.patternToCluster.delete(patternId);
286
+ // Rebuild clusters
287
+ if (this.config.enableClustering) {
288
+ this.rebuildClusters();
289
+ }
290
+ return splits;
291
+ }
292
+ // ==========================================================================
293
+ // Pattern Access
294
+ // ==========================================================================
295
+ /**
296
+ * Get all patterns
297
+ */
298
+ getPatterns() {
299
+ return Array.from(this.patterns.values());
300
+ }
301
+ /**
302
+ * Get pattern by ID
303
+ */
304
+ getPattern(patternId) {
305
+ return this.patterns.get(patternId);
306
+ }
307
+ /**
308
+ * Get patterns by domain
309
+ */
310
+ getPatternsByDomain(domain) {
311
+ return Array.from(this.patterns.values()).filter(p => p.domain === domain);
312
+ }
313
+ /**
314
+ * Get stable patterns (sufficient usage)
315
+ */
316
+ getStablePatterns() {
317
+ return Array.from(this.patterns.values())
318
+ .filter(p => p.usageCount >= this.config.minUsagesForStable);
319
+ }
320
+ // ==========================================================================
321
+ // Statistics
322
+ // ==========================================================================
323
+ getStats() {
324
+ const patterns = Array.from(this.patterns.values());
325
+ return {
326
+ totalPatterns: this.patterns.size,
327
+ stablePatterns: patterns.filter(p => p.usageCount >= this.config.minUsagesForStable).length,
328
+ avgSuccessRate: patterns.length > 0
329
+ ? patterns.reduce((s, p) => s + p.successRate, 0) / patterns.length
330
+ : 0,
331
+ avgUsageCount: patterns.length > 0
332
+ ? patterns.reduce((s, p) => s + p.usageCount, 0) / patterns.length
333
+ : 0,
334
+ numClusters: this.clusters.length,
335
+ avgMatchTimeMs: this.matchCount > 0 ? this.totalMatchTime / this.matchCount : 0,
336
+ avgExtractionTimeMs: this.extractionCount > 0 ? this.totalExtractionTime / this.extractionCount : 0,
337
+ avgEvolutionTimeMs: this.evolutionCount > 0 ? this.totalEvolutionTime / this.evolutionCount : 0,
338
+ };
339
+ }
340
+ // ==========================================================================
341
+ // Event System
342
+ // ==========================================================================
343
+ addEventListener(listener) {
344
+ this.eventListeners.add(listener);
345
+ }
346
+ removeEventListener(listener) {
347
+ this.eventListeners.delete(listener);
348
+ }
349
+ emitEvent(event) {
350
+ for (const listener of this.eventListeners) {
351
+ try {
352
+ listener(event);
353
+ }
354
+ catch (error) {
355
+ console.error('Error in PatternLearner event listener:', error);
356
+ }
357
+ }
358
+ }
359
+ // ==========================================================================
360
+ // Private Helper Methods
361
+ // ==========================================================================
362
+ cosineSimilarity(a, b) {
363
+ if (a.length !== b.length)
364
+ return 0;
365
+ let dot = 0, normA = 0, normB = 0;
366
+ for (let i = 0; i < a.length; i++) {
367
+ dot += a[i] * b[i];
368
+ normA += a[i] * a[i];
369
+ normB += b[i] * b[i];
370
+ }
371
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
372
+ return denom > 0 ? dot / denom : 0;
373
+ }
374
+ computeMatchConfidence(pattern, similarity) {
375
+ // Combine similarity with pattern reliability
376
+ const usageWeight = Math.min(pattern.usageCount / 10, 1);
377
+ const qualityWeight = pattern.successRate;
378
+ return similarity * (1 - usageWeight * 0.2 - qualityWeight * 0.2) +
379
+ usageWeight * 0.1 +
380
+ qualityWeight * 0.1;
381
+ }
382
+ getCandidatesFromClusters(queryEmbedding) {
383
+ // Find nearest clusters
384
+ const clusterScores = [];
385
+ for (const cluster of this.clusters) {
386
+ const score = this.cosineSimilarity(queryEmbedding, cluster.centroid);
387
+ clusterScores.push({ cluster, score });
388
+ }
389
+ clusterScores.sort((a, b) => b.score - a.score);
390
+ // Get patterns from top 3 clusters
391
+ const candidates = [];
392
+ for (const { cluster } of clusterScores.slice(0, 3)) {
393
+ for (const patternId of cluster.patternIds) {
394
+ const pattern = this.patterns.get(patternId);
395
+ if (pattern) {
396
+ candidates.push(pattern);
397
+ }
398
+ }
399
+ }
400
+ return candidates;
401
+ }
402
+ findSimilarPattern(embedding, threshold) {
403
+ for (const pattern of this.patterns.values()) {
404
+ const sim = this.cosineSimilarity(embedding, pattern.embedding);
405
+ if (sim >= threshold) {
406
+ return pattern;
407
+ }
408
+ }
409
+ return null;
410
+ }
411
+ updatePatternFromTrajectory(pattern, trajectory) {
412
+ // Update quality
413
+ pattern.qualityHistory.push(trajectory.qualityScore);
414
+ if (pattern.qualityHistory.length > 100) {
415
+ pattern.qualityHistory = pattern.qualityHistory.slice(-100);
416
+ }
417
+ // EMA for success rate
418
+ const lr = this.config.evolutionLearningRate;
419
+ pattern.successRate = pattern.successRate * (1 - lr) + trajectory.qualityScore * lr;
420
+ pattern.usageCount++;
421
+ pattern.updatedAt = Date.now();
422
+ }
423
+ computePatternEmbedding(trajectory) {
424
+ if (trajectory.steps.length === 0) {
425
+ return new Float32Array(768);
426
+ }
427
+ const dim = trajectory.steps[0].stateAfter.length;
428
+ const embedding = new Float32Array(dim);
429
+ // Weighted average (higher weight for later steps)
430
+ let totalWeight = 0;
431
+ for (let i = 0; i < trajectory.steps.length; i++) {
432
+ const weight = (i + 1) / trajectory.steps.length;
433
+ totalWeight += weight;
434
+ for (let j = 0; j < dim; j++) {
435
+ embedding[j] += trajectory.steps[i].stateAfter[j] * weight;
436
+ }
437
+ }
438
+ for (let j = 0; j < dim; j++) {
439
+ embedding[j] /= totalWeight;
440
+ }
441
+ return embedding;
442
+ }
443
+ generatePatternName(trajectory) {
444
+ const domain = trajectory.domain;
445
+ const quality = trajectory.qualityScore > 0.7 ? 'high' : 'mid';
446
+ const steps = trajectory.steps.length > 5 ? 'complex' : 'simple';
447
+ return `${domain}_${quality}_${steps}_${Date.now() % 10000}`;
448
+ }
449
+ extractStrategy(trajectory) {
450
+ const actions = trajectory.steps.map(s => s.action);
451
+ if (actions.length === 0)
452
+ return 'empty';
453
+ if (actions.length <= 3)
454
+ return actions.join(' -> ');
455
+ return `${actions.slice(0, 2).join(' -> ')} ... ${actions[actions.length - 1]}`;
456
+ }
457
+ assignToCluster(pattern) {
458
+ if (this.clusters.length === 0) {
459
+ // Create first cluster
460
+ this.clusters.push({
461
+ clusterId: 0,
462
+ centroid: new Float32Array(pattern.embedding),
463
+ patternIds: new Set([pattern.patternId]),
464
+ });
465
+ this.patternToCluster.set(pattern.patternId, 0);
466
+ return;
467
+ }
468
+ // Find nearest cluster
469
+ let bestCluster = 0;
470
+ let bestSim = -1;
471
+ for (let i = 0; i < this.clusters.length; i++) {
472
+ const sim = this.cosineSimilarity(pattern.embedding, this.clusters[i].centroid);
473
+ if (sim > bestSim) {
474
+ bestSim = sim;
475
+ bestCluster = i;
476
+ }
477
+ }
478
+ // Create new cluster if not similar enough and under limit
479
+ if (bestSim < 0.7 && this.clusters.length < this.config.numClusters) {
480
+ const newId = this.clusters.length;
481
+ this.clusters.push({
482
+ clusterId: newId,
483
+ centroid: new Float32Array(pattern.embedding),
484
+ patternIds: new Set([pattern.patternId]),
485
+ });
486
+ this.patternToCluster.set(pattern.patternId, newId);
487
+ }
488
+ else {
489
+ // Add to existing cluster and update centroid
490
+ const cluster = this.clusters[bestCluster];
491
+ cluster.patternIds.add(pattern.patternId);
492
+ this.patternToCluster.set(pattern.patternId, bestCluster);
493
+ this.updateClusterCentroid(cluster);
494
+ }
495
+ }
496
+ updateClusterCentroid(cluster) {
497
+ const dim = cluster.centroid.length;
498
+ const newCentroid = new Float32Array(dim);
499
+ let count = 0;
500
+ for (const patternId of cluster.patternIds) {
501
+ const pattern = this.patterns.get(patternId);
502
+ if (pattern) {
503
+ for (let i = 0; i < dim; i++) {
504
+ newCentroid[i] += pattern.embedding[i];
505
+ }
506
+ count++;
507
+ }
508
+ }
509
+ if (count > 0) {
510
+ for (let i = 0; i < dim; i++) {
511
+ newCentroid[i] /= count;
512
+ }
513
+ cluster.centroid = newCentroid;
514
+ }
515
+ }
516
+ rebuildClusters() {
517
+ if (this.patterns.size === 0) {
518
+ this.clusters = [];
519
+ this.patternToCluster.clear();
520
+ return;
521
+ }
522
+ const patterns = Array.from(this.patterns.values());
523
+ const k = Math.min(this.config.numClusters, Math.ceil(patterns.length / 5));
524
+ const dim = patterns[0].embedding.length;
525
+ // Initialize clusters with random patterns
526
+ this.clusters = [];
527
+ this.patternToCluster.clear();
528
+ const indices = new Set();
529
+ while (indices.size < k && indices.size < patterns.length) {
530
+ indices.add(Math.floor(Math.random() * patterns.length));
531
+ }
532
+ let clusterId = 0;
533
+ for (const idx of indices) {
534
+ this.clusters.push({
535
+ clusterId: clusterId++,
536
+ centroid: new Float32Array(patterns[idx].embedding),
537
+ patternIds: new Set(),
538
+ });
539
+ }
540
+ // K-means iterations
541
+ for (let iter = 0; iter < 10; iter++) {
542
+ // Clear assignments
543
+ for (const cluster of this.clusters) {
544
+ cluster.patternIds.clear();
545
+ }
546
+ // Assign patterns to nearest cluster
547
+ for (const pattern of patterns) {
548
+ let bestCluster = 0;
549
+ let bestSim = -1;
550
+ for (let c = 0; c < this.clusters.length; c++) {
551
+ const sim = this.cosineSimilarity(pattern.embedding, this.clusters[c].centroid);
552
+ if (sim > bestSim) {
553
+ bestSim = sim;
554
+ bestCluster = c;
555
+ }
556
+ }
557
+ this.clusters[bestCluster].patternIds.add(pattern.patternId);
558
+ this.patternToCluster.set(pattern.patternId, bestCluster);
559
+ }
560
+ // Update centroids
561
+ for (const cluster of this.clusters) {
562
+ this.updateClusterCentroid(cluster);
563
+ }
564
+ }
565
+ // Remove empty clusters
566
+ this.clusters = this.clusters.filter(c => c.patternIds.size > 0);
567
+ }
568
+ prunePatterns() {
569
+ // Sort by score (quality * log(usage))
570
+ const scored = Array.from(this.patterns.entries())
571
+ .map(([id, pattern]) => ({
572
+ id,
573
+ pattern,
574
+ score: pattern.successRate * Math.log(pattern.usageCount + 1),
575
+ }))
576
+ .sort((a, b) => a.score - b.score);
577
+ // Remove lowest scoring patterns
578
+ const toRemove = scored.length - Math.floor(this.config.maxPatterns * 0.8);
579
+ for (let i = 0; i < toRemove && i < scored.length; i++) {
580
+ this.patterns.delete(scored[i].id);
581
+ this.patternToCluster.delete(scored[i].id);
582
+ }
583
+ // Rebuild clusters
584
+ if (this.config.enableClustering) {
585
+ this.rebuildClusters();
586
+ }
587
+ }
588
+ determineEvolutionType(prev, curr) {
589
+ const delta = curr - prev;
590
+ if (delta > 0.05)
591
+ return 'improvement';
592
+ if (delta < -0.15)
593
+ return 'prune';
594
+ return 'improvement';
595
+ }
596
+ }
597
+ /**
598
+ * Factory function for creating PatternLearner
599
+ */
600
+ export function createPatternLearner(config) {
601
+ return new PatternLearner(config);
602
+ }
603
+ //# sourceMappingURL=pattern-learner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-learner.js","sourceRoot":"","sources":["../src/pattern-learner.ts"],"names":[],"mappings":"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"}