@claude-flow/cli 3.0.0-alpha.100 → 3.0.0-alpha.102

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 (33) hide show
  1. package/dist/src/index.d.ts +2 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +4 -0
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
  6. package/dist/src/mcp-tools/hooks-tools.js +443 -54
  7. package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
  8. package/dist/src/memory/ewc-consolidation.d.ts +271 -0
  9. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -0
  10. package/dist/src/memory/ewc-consolidation.js +542 -0
  11. package/dist/src/memory/ewc-consolidation.js.map +1 -0
  12. package/dist/src/memory/sona-optimizer.d.ts +227 -0
  13. package/dist/src/memory/sona-optimizer.d.ts.map +1 -0
  14. package/dist/src/memory/sona-optimizer.js +633 -0
  15. package/dist/src/memory/sona-optimizer.js.map +1 -0
  16. package/dist/src/ruvector/flash-attention.d.ts +162 -0
  17. package/dist/src/ruvector/flash-attention.d.ts.map +1 -0
  18. package/dist/src/ruvector/flash-attention.js +426 -0
  19. package/dist/src/ruvector/flash-attention.js.map +1 -0
  20. package/dist/src/ruvector/index.d.ts +5 -0
  21. package/dist/src/ruvector/index.d.ts.map +1 -1
  22. package/dist/src/ruvector/index.js +5 -0
  23. package/dist/src/ruvector/index.js.map +1 -1
  24. package/dist/src/ruvector/lora-adapter.d.ts +218 -0
  25. package/dist/src/ruvector/lora-adapter.d.ts.map +1 -0
  26. package/dist/src/ruvector/lora-adapter.js +455 -0
  27. package/dist/src/ruvector/lora-adapter.js.map +1 -0
  28. package/dist/src/ruvector/moe-router.d.ts +206 -0
  29. package/dist/src/ruvector/moe-router.d.ts.map +1 -0
  30. package/dist/src/ruvector/moe-router.js +626 -0
  31. package/dist/src/ruvector/moe-router.js.map +1 -0
  32. package/dist/tsconfig.tsbuildinfo +1 -1
  33. package/package.json +1 -1
@@ -0,0 +1,542 @@
1
+ /**
2
+ * EWC++ (Elastic Weight Consolidation) Implementation
3
+ * Prevents catastrophic forgetting of important patterns during continual learning
4
+ *
5
+ * Algorithm:
6
+ * L_total = L_new + (lambda/2) * sum_i(F_i * (theta_i - theta_old_i)^2)
7
+ *
8
+ * Where:
9
+ * - L_new is the loss on new data
10
+ * - lambda is the importance weight (ewcLambda)
11
+ * - F_i is the Fisher information for parameter i
12
+ * - theta_i is the current parameter value
13
+ * - theta_old_i is the previous parameter value
14
+ *
15
+ * Features:
16
+ * - Fisher Information Matrix computation from gradient history
17
+ * - Online EWC updates for streaming patterns
18
+ * - Selective consolidation based on pattern importance
19
+ * - Persistent storage in .swarm/ewc-fisher.json
20
+ *
21
+ * @module v3/cli/memory/ewc-consolidation
22
+ */
23
+ import * as fs from 'fs';
24
+ import * as path from 'path';
25
+ // ============================================================================
26
+ // Default Configuration
27
+ // ============================================================================
28
+ const DEFAULT_EWC_CONFIG = {
29
+ lambda: 0.4,
30
+ maxPatterns: 1000,
31
+ fisherDecayRate: 0.01,
32
+ importanceThreshold: 0.3,
33
+ storagePath: path.join(process.cwd(), '.swarm', 'ewc-fisher.json'),
34
+ onlineMode: true,
35
+ dimensions: 384
36
+ };
37
+ // ============================================================================
38
+ // EWC Consolidator Class
39
+ // ============================================================================
40
+ /**
41
+ * EWC++ Consolidator
42
+ * Implements Elastic Weight Consolidation with online updates
43
+ * for preventing catastrophic forgetting in continual learning
44
+ */
45
+ export class EWCConsolidator {
46
+ config;
47
+ patterns = new Map();
48
+ gradientHistory = [];
49
+ globalFisher = [];
50
+ consolidationHistory = [];
51
+ initialized = false;
52
+ constructor(config) {
53
+ this.config = { ...DEFAULT_EWC_CONFIG, ...config };
54
+ this.globalFisher = new Array(this.config.dimensions).fill(0);
55
+ }
56
+ /**
57
+ * Initialize the consolidator by loading persisted state
58
+ */
59
+ async initialize() {
60
+ if (this.initialized)
61
+ return true;
62
+ try {
63
+ await this.loadFromDisk();
64
+ this.initialized = true;
65
+ return true;
66
+ }
67
+ catch {
68
+ // Start fresh if no persisted state
69
+ this.initialized = true;
70
+ return true;
71
+ }
72
+ }
73
+ /**
74
+ * Compute Fisher Information Matrix from gradient history
75
+ * Uses diagonal approximation for efficiency: F_i = E[g_i^2]
76
+ *
77
+ * @param patterns - Array of patterns with their gradients/embeddings
78
+ * @returns Fisher information diagonal
79
+ */
80
+ computeFisherMatrix(patterns) {
81
+ const fisher = new Array(this.config.dimensions).fill(0);
82
+ let sampleCount = 0;
83
+ for (const pattern of patterns) {
84
+ if (!pattern.embedding || pattern.embedding.length === 0)
85
+ continue;
86
+ // Only use successful patterns for Fisher computation
87
+ // (we want to preserve what worked)
88
+ if (!pattern.success)
89
+ continue;
90
+ sampleCount++;
91
+ // Fisher diagonal is expectation of squared gradients
92
+ // For embeddings, we use the embedding values as proxy for gradients
93
+ const len = Math.min(pattern.embedding.length, this.config.dimensions);
94
+ for (let i = 0; i < len; i++) {
95
+ // Accumulate squared values (gradient proxy)
96
+ fisher[i] += pattern.embedding[i] * pattern.embedding[i];
97
+ }
98
+ }
99
+ // Normalize by sample count
100
+ if (sampleCount > 0) {
101
+ for (let i = 0; i < this.config.dimensions; i++) {
102
+ fisher[i] /= sampleCount;
103
+ }
104
+ }
105
+ // Update global Fisher with exponential moving average (EWC++)
106
+ if (this.config.onlineMode) {
107
+ const decay = this.config.fisherDecayRate;
108
+ for (let i = 0; i < this.config.dimensions; i++) {
109
+ this.globalFisher[i] = (1 - decay) * this.globalFisher[i] + decay * fisher[i];
110
+ }
111
+ }
112
+ return fisher;
113
+ }
114
+ /**
115
+ * Consolidate new patterns with old patterns without forgetting
116
+ * Applies EWC penalty to preserve important weights
117
+ *
118
+ * @param newPatterns - New patterns to incorporate
119
+ * @param oldPatterns - Existing patterns to preserve
120
+ * @returns Consolidated patterns with modified weights
121
+ */
122
+ consolidate(newPatterns, oldPatterns) {
123
+ const startTime = performance.now();
124
+ const result = {
125
+ success: false,
126
+ patternsConsolidated: 0,
127
+ totalPenalty: 0,
128
+ modifiedPatterns: [],
129
+ protectedPatterns: [],
130
+ duration: 0
131
+ };
132
+ try {
133
+ // Use stored patterns if no old patterns provided
134
+ const existingPatterns = oldPatterns || Array.from(this.patterns.values());
135
+ // Compute Fisher from successful existing patterns
136
+ const fisherInput = existingPatterns
137
+ .filter(p => p.successCount > p.failureCount)
138
+ .map(p => ({
139
+ id: p.id,
140
+ embedding: p.weights,
141
+ success: true
142
+ }));
143
+ const fisher = this.computeFisherMatrix(fisherInput);
144
+ // Process each new pattern
145
+ for (const newPattern of newPatterns) {
146
+ if (!newPattern.embedding || newPattern.embedding.length === 0)
147
+ continue;
148
+ const existingPattern = this.patterns.get(newPattern.id);
149
+ if (existingPattern) {
150
+ // Calculate EWC penalty for updating existing pattern
151
+ const penalty = this.getPenalty(existingPattern.weights, newPattern.embedding, fisher);
152
+ // Determine if update is allowed based on penalty
153
+ const importanceScore = this.calculateImportance(existingPattern);
154
+ if (importanceScore > this.config.importanceThreshold && penalty > this.config.lambda) {
155
+ // Protect high-importance patterns with high penalty
156
+ result.protectedPatterns.push(newPattern.id);
157
+ // Apply constrained update: blend old and new based on importance
158
+ const blendFactor = 1 - importanceScore;
159
+ const blendedWeights = this.blendWeights(existingPattern.weights, newPattern.embedding, blendFactor, fisher);
160
+ existingPattern.weights = blendedWeights;
161
+ existingPattern.lastUpdated = Date.now();
162
+ result.modifiedPatterns.push(newPattern.id);
163
+ }
164
+ else {
165
+ // Low importance or low penalty: allow full update
166
+ existingPattern.weights = newPattern.embedding.slice(0, this.config.dimensions);
167
+ existingPattern.lastUpdated = Date.now();
168
+ result.modifiedPatterns.push(newPattern.id);
169
+ }
170
+ // Update Fisher diagonal for this pattern
171
+ existingPattern.fisherDiagonal = fisher;
172
+ result.totalPenalty += penalty;
173
+ }
174
+ else {
175
+ // New pattern: add directly
176
+ const weights = {
177
+ id: newPattern.id,
178
+ weights: newPattern.embedding.slice(0, this.config.dimensions),
179
+ fisherDiagonal: fisher,
180
+ importance: 0.5,
181
+ successCount: 0,
182
+ failureCount: 0,
183
+ lastUpdated: Date.now(),
184
+ type: newPattern.type,
185
+ description: newPattern.description
186
+ };
187
+ this.patterns.set(newPattern.id, weights);
188
+ result.modifiedPatterns.push(newPattern.id);
189
+ }
190
+ result.patternsConsolidated++;
191
+ }
192
+ // Prune old patterns if exceeding limit
193
+ if (this.patterns.size > this.config.maxPatterns) {
194
+ this.pruneOldPatterns();
195
+ }
196
+ // Record consolidation
197
+ this.consolidationHistory.push({
198
+ timestamp: Date.now(),
199
+ penalty: result.totalPenalty,
200
+ patterns: result.patternsConsolidated
201
+ });
202
+ // Persist to disk
203
+ this.saveToDisk();
204
+ result.success = true;
205
+ result.duration = performance.now() - startTime;
206
+ return result;
207
+ }
208
+ catch (error) {
209
+ result.error = error instanceof Error ? error.message : String(error);
210
+ result.duration = performance.now() - startTime;
211
+ return result;
212
+ }
213
+ }
214
+ /**
215
+ * Calculate EWC regularization penalty
216
+ *
217
+ * L_ewc = (lambda/2) * sum_i(F_i * (theta_i - theta_old_i)^2)
218
+ *
219
+ * @param oldWeights - Previous weight values
220
+ * @param newWeights - New weight values
221
+ * @param fisher - Fisher information diagonal (optional, uses global if not provided)
222
+ * @returns Regularization penalty value
223
+ */
224
+ getPenalty(oldWeights, newWeights, fisher) {
225
+ const fisherDiag = fisher || this.globalFisher;
226
+ const len = Math.min(oldWeights.length, newWeights.length, fisherDiag.length);
227
+ let penalty = 0;
228
+ for (let i = 0; i < len; i++) {
229
+ const diff = newWeights[i] - oldWeights[i];
230
+ penalty += fisherDiag[i] * diff * diff;
231
+ }
232
+ return (this.config.lambda / 2) * penalty;
233
+ }
234
+ /**
235
+ * Get consolidation statistics
236
+ */
237
+ getConsolidationStats() {
238
+ let totalFisher = 0;
239
+ let maxFisher = 0;
240
+ let highImportance = 0;
241
+ for (let i = 0; i < this.globalFisher.length; i++) {
242
+ totalFisher += this.globalFisher[i];
243
+ if (this.globalFisher[i] > maxFisher) {
244
+ maxFisher = this.globalFisher[i];
245
+ }
246
+ }
247
+ for (const pattern of this.patterns.values()) {
248
+ if (this.calculateImportance(pattern) > this.config.importanceThreshold) {
249
+ highImportance++;
250
+ }
251
+ }
252
+ const totalPenalty = this.consolidationHistory.reduce((sum, h) => sum + h.penalty, 0);
253
+ const avgPenalty = this.consolidationHistory.length > 0
254
+ ? totalPenalty / this.consolidationHistory.length
255
+ : 0;
256
+ // Estimate storage size
257
+ let storageSizeBytes = 0;
258
+ try {
259
+ if (fs.existsSync(this.config.storagePath)) {
260
+ const stats = fs.statSync(this.config.storagePath);
261
+ storageSizeBytes = stats.size;
262
+ }
263
+ }
264
+ catch {
265
+ // Ignore stat errors
266
+ }
267
+ return {
268
+ totalPatterns: this.patterns.size,
269
+ highImportancePatterns: highImportance,
270
+ avgFisherValue: this.globalFisher.length > 0 ? totalFisher / this.globalFisher.length : 0,
271
+ maxFisherValue: maxFisher,
272
+ consolidationCount: this.consolidationHistory.length,
273
+ lastConsolidation: this.consolidationHistory.length > 0
274
+ ? this.consolidationHistory[this.consolidationHistory.length - 1].timestamp
275
+ : null,
276
+ avgPenalty,
277
+ storageSizeBytes
278
+ };
279
+ }
280
+ /**
281
+ * Record a gradient sample for Fisher computation
282
+ */
283
+ recordGradient(patternId, gradients, success) {
284
+ this.gradientHistory.push({
285
+ patternId,
286
+ gradients,
287
+ timestamp: Date.now(),
288
+ success
289
+ });
290
+ // Keep only recent gradients
291
+ const maxGradients = this.config.maxPatterns * 2;
292
+ if (this.gradientHistory.length > maxGradients) {
293
+ this.gradientHistory = this.gradientHistory.slice(-maxGradients);
294
+ }
295
+ // Update pattern success/failure counts
296
+ const pattern = this.patterns.get(patternId);
297
+ if (pattern) {
298
+ if (success) {
299
+ pattern.successCount++;
300
+ }
301
+ else {
302
+ pattern.failureCount++;
303
+ }
304
+ pattern.importance = this.calculateImportance(pattern);
305
+ }
306
+ // Online Fisher update from this gradient
307
+ if (this.config.onlineMode && success) {
308
+ const decay = this.config.fisherDecayRate;
309
+ const len = Math.min(gradients.length, this.config.dimensions);
310
+ for (let i = 0; i < len; i++) {
311
+ this.globalFisher[i] = (1 - decay) * this.globalFisher[i] + decay * gradients[i] * gradients[i];
312
+ }
313
+ }
314
+ }
315
+ /**
316
+ * Get pattern weights by ID
317
+ */
318
+ getPatternWeights(id) {
319
+ return this.patterns.get(id);
320
+ }
321
+ /**
322
+ * Get all stored patterns
323
+ */
324
+ getAllPatterns() {
325
+ return Array.from(this.patterns.values());
326
+ }
327
+ /**
328
+ * Update EWC lambda (regularization strength)
329
+ */
330
+ setLambda(lambda) {
331
+ this.config.lambda = lambda;
332
+ }
333
+ /**
334
+ * Get current lambda value
335
+ */
336
+ getLambda() {
337
+ return this.config.lambda;
338
+ }
339
+ /**
340
+ * Reset Fisher matrix (use with caution - allows forgetting)
341
+ */
342
+ resetFisher() {
343
+ this.globalFisher = new Array(this.config.dimensions).fill(0);
344
+ }
345
+ /**
346
+ * Clear all patterns and history (full reset)
347
+ */
348
+ clear() {
349
+ this.patterns.clear();
350
+ this.gradientHistory = [];
351
+ this.globalFisher = new Array(this.config.dimensions).fill(0);
352
+ this.consolidationHistory = [];
353
+ // Remove persisted file
354
+ try {
355
+ if (fs.existsSync(this.config.storagePath)) {
356
+ fs.unlinkSync(this.config.storagePath);
357
+ }
358
+ }
359
+ catch {
360
+ // Ignore deletion errors
361
+ }
362
+ }
363
+ // ============================================================================
364
+ // Private Methods
365
+ // ============================================================================
366
+ /**
367
+ * Calculate importance score for a pattern based on usage
368
+ */
369
+ calculateImportance(pattern) {
370
+ const total = pattern.successCount + pattern.failureCount;
371
+ if (total === 0)
372
+ return 0.5;
373
+ // Success rate with Laplace smoothing
374
+ const successRate = (pattern.successCount + 1) / (total + 2);
375
+ // Recency factor: recent patterns are more important
376
+ const hoursSinceUpdate = (Date.now() - pattern.lastUpdated) / (1000 * 60 * 60);
377
+ const recencyFactor = Math.exp(-hoursSinceUpdate / 168); // 1 week half-life
378
+ // Combine factors
379
+ return successRate * 0.7 + recencyFactor * 0.3;
380
+ }
381
+ /**
382
+ * Blend old and new weights using Fisher-weighted interpolation
383
+ */
384
+ blendWeights(oldWeights, newWeights, blendFactor, fisher) {
385
+ const len = Math.min(oldWeights.length, newWeights.length, this.config.dimensions);
386
+ const result = new Array(len);
387
+ // Normalize Fisher for per-weight blend factors
388
+ let maxF = 0;
389
+ for (let i = 0; i < len; i++) {
390
+ if (fisher[i] > maxF)
391
+ maxF = fisher[i];
392
+ }
393
+ const normFactor = maxF > 0 ? 1 / maxF : 1;
394
+ for (let i = 0; i < len; i++) {
395
+ // Higher Fisher = more weight on old value
396
+ const fisherWeight = fisher[i] * normFactor;
397
+ const adjustedBlend = blendFactor * (1 - fisherWeight * 0.5);
398
+ result[i] = oldWeights[i] * (1 - adjustedBlend) + newWeights[i] * adjustedBlend;
399
+ }
400
+ return result;
401
+ }
402
+ /**
403
+ * Prune old, low-importance patterns to stay within limit
404
+ */
405
+ pruneOldPatterns() {
406
+ if (this.patterns.size <= this.config.maxPatterns)
407
+ return;
408
+ // Sort by importance (ascending)
409
+ const sortedPatterns = Array.from(this.patterns.entries())
410
+ .map(([id, pattern]) => ({ id, importance: this.calculateImportance(pattern) }))
411
+ .sort((a, b) => a.importance - b.importance);
412
+ // Remove lowest importance patterns
413
+ const toRemove = this.patterns.size - this.config.maxPatterns;
414
+ for (let i = 0; i < toRemove; i++) {
415
+ this.patterns.delete(sortedPatterns[i].id);
416
+ }
417
+ }
418
+ /**
419
+ * Save state to disk
420
+ */
421
+ saveToDisk() {
422
+ try {
423
+ const dir = path.dirname(this.config.storagePath);
424
+ if (!fs.existsSync(dir)) {
425
+ fs.mkdirSync(dir, { recursive: true });
426
+ }
427
+ const state = {
428
+ version: '1.0.0',
429
+ config: {
430
+ lambda: this.config.lambda,
431
+ dimensions: this.config.dimensions,
432
+ fisherDecayRate: this.config.fisherDecayRate
433
+ },
434
+ globalFisher: this.globalFisher,
435
+ patterns: Array.from(this.patterns.entries()),
436
+ consolidationHistory: this.consolidationHistory.slice(-100),
437
+ savedAt: Date.now()
438
+ };
439
+ fs.writeFileSync(this.config.storagePath, JSON.stringify(state, null, 2));
440
+ }
441
+ catch {
442
+ // Silently fail - persistence is best-effort
443
+ }
444
+ }
445
+ /**
446
+ * Load state from disk
447
+ */
448
+ async loadFromDisk() {
449
+ if (!fs.existsSync(this.config.storagePath)) {
450
+ throw new Error('No persisted state found');
451
+ }
452
+ const content = fs.readFileSync(this.config.storagePath, 'utf-8');
453
+ const state = JSON.parse(content);
454
+ // Validate version
455
+ if (state.version !== '1.0.0') {
456
+ throw new Error(`Unsupported state version: ${state.version}`);
457
+ }
458
+ // Restore state
459
+ this.globalFisher = state.globalFisher || new Array(this.config.dimensions).fill(0);
460
+ // Restore patterns
461
+ this.patterns.clear();
462
+ if (state.patterns) {
463
+ for (const [id, pattern] of state.patterns) {
464
+ this.patterns.set(id, pattern);
465
+ }
466
+ }
467
+ // Restore history
468
+ this.consolidationHistory = state.consolidationHistory || [];
469
+ // Update config from persisted values
470
+ if (state.config) {
471
+ this.config.lambda = state.config.lambda ?? this.config.lambda;
472
+ }
473
+ }
474
+ }
475
+ // ============================================================================
476
+ // Singleton Instance
477
+ // ============================================================================
478
+ let ewcConsolidatorInstance = null;
479
+ /**
480
+ * Get the singleton EWC Consolidator instance
481
+ *
482
+ * @param config - Optional configuration overrides
483
+ * @returns EWC Consolidator instance
484
+ */
485
+ export async function getEWCConsolidator(config) {
486
+ if (!ewcConsolidatorInstance) {
487
+ ewcConsolidatorInstance = new EWCConsolidator(config);
488
+ await ewcConsolidatorInstance.initialize();
489
+ }
490
+ return ewcConsolidatorInstance;
491
+ }
492
+ /**
493
+ * Reset the singleton instance (for testing)
494
+ */
495
+ export function resetEWCConsolidator() {
496
+ if (ewcConsolidatorInstance) {
497
+ ewcConsolidatorInstance.clear();
498
+ ewcConsolidatorInstance = null;
499
+ }
500
+ }
501
+ // ============================================================================
502
+ // Utility Functions
503
+ // ============================================================================
504
+ /**
505
+ * Quick consolidation helper for common use case
506
+ * Consolidates new patterns with existing ones using EWC
507
+ *
508
+ * @param newPatterns - New patterns to add
509
+ * @returns Consolidation result
510
+ */
511
+ export async function consolidatePatterns(newPatterns) {
512
+ const consolidator = await getEWCConsolidator();
513
+ return consolidator.consolidate(newPatterns);
514
+ }
515
+ /**
516
+ * Record pattern usage outcome
517
+ * Updates Fisher information and pattern importance
518
+ *
519
+ * @param patternId - Pattern identifier
520
+ * @param embedding - Pattern embedding (used as gradient proxy)
521
+ * @param success - Whether the pattern was successful
522
+ */
523
+ export async function recordPatternOutcome(patternId, embedding, success) {
524
+ const consolidator = await getEWCConsolidator();
525
+ consolidator.recordGradient(patternId, embedding, success);
526
+ }
527
+ /**
528
+ * Get EWC statistics
529
+ */
530
+ export async function getEWCStats() {
531
+ const consolidator = await getEWCConsolidator();
532
+ return consolidator.getConsolidationStats();
533
+ }
534
+ export default {
535
+ EWCConsolidator,
536
+ getEWCConsolidator,
537
+ resetEWCConsolidator,
538
+ consolidatePatterns,
539
+ recordPatternOutcome,
540
+ getEWCStats
541
+ };
542
+ //# sourceMappingURL=ewc-consolidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ewc-consolidation.js","sourceRoot":"","sources":["../../../src/memory/ewc-consolidation.ts"],"names":[],"mappings":"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"}