vesper-memory 0.4.0 → 0.5.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 (63) hide show
  1. package/CHANGELOG.md +57 -3
  2. package/LICENSE +59 -0
  3. package/README.md +420 -23
  4. package/config/migrations/001_add_skill_summary.sql +75 -0
  5. package/config/migrations/001_rollback_skill_summary.sql +60 -0
  6. package/config/sqlite-schema.sql +68 -4
  7. package/dist/benchmark/types.d.ts +4 -4
  8. package/dist/cli.js +0 -0
  9. package/dist/consolidation/pipeline.d.ts +6 -1
  10. package/dist/consolidation/pipeline.d.ts.map +1 -1
  11. package/dist/consolidation/pipeline.js +53 -35
  12. package/dist/consolidation/pipeline.js.map +1 -1
  13. package/dist/memory-layers/semantic-memory.d.ts +9 -19
  14. package/dist/memory-layers/semantic-memory.d.ts.map +1 -1
  15. package/dist/memory-layers/semantic-memory.js +31 -54
  16. package/dist/memory-layers/semantic-memory.js.map +1 -1
  17. package/dist/memory-layers/skill-lazy-loading.d.ts +160 -0
  18. package/dist/memory-layers/skill-lazy-loading.d.ts.map +1 -0
  19. package/dist/memory-layers/skill-lazy-loading.js +247 -0
  20. package/dist/memory-layers/skill-lazy-loading.js.map +1 -0
  21. package/dist/memory-layers/skill-library.d.ts +133 -4
  22. package/dist/memory-layers/skill-library.d.ts.map +1 -1
  23. package/dist/memory-layers/skill-library.js +427 -8
  24. package/dist/memory-layers/skill-library.js.map +1 -1
  25. package/dist/memory-layers/working-memory.d.ts +35 -14
  26. package/dist/memory-layers/working-memory.d.ts.map +1 -1
  27. package/dist/memory-layers/working-memory.js +114 -36
  28. package/dist/memory-layers/working-memory.js.map +1 -1
  29. package/dist/retrieval/hybrid-search.d.ts +2 -2
  30. package/dist/retrieval/hybrid-search.d.ts.map +1 -1
  31. package/dist/retrieval/hybrid-search.js +4 -3
  32. package/dist/retrieval/hybrid-search.js.map +1 -1
  33. package/dist/router/smart-router.d.ts +25 -0
  34. package/dist/router/smart-router.d.ts.map +1 -1
  35. package/dist/router/smart-router.js +90 -10
  36. package/dist/router/smart-router.js.map +1 -1
  37. package/dist/scheduler/consolidation-scheduler.d.ts +129 -0
  38. package/dist/scheduler/consolidation-scheduler.d.ts.map +1 -0
  39. package/dist/scheduler/consolidation-scheduler.js +179 -0
  40. package/dist/scheduler/consolidation-scheduler.js.map +1 -0
  41. package/dist/scheduler/index.d.ts +7 -0
  42. package/dist/scheduler/index.d.ts.map +1 -0
  43. package/dist/scheduler/index.js +7 -0
  44. package/dist/scheduler/index.js.map +1 -0
  45. package/dist/server-wrapper.js +0 -0
  46. package/dist/server.js +879 -28
  47. package/dist/server.js.map +1 -1
  48. package/dist/synthesis/conflict-detector.d.ts +4 -6
  49. package/dist/synthesis/conflict-detector.d.ts.map +1 -1
  50. package/dist/synthesis/conflict-detector.js +19 -21
  51. package/dist/synthesis/conflict-detector.js.map +1 -1
  52. package/dist/utils/validation.d.ts +123 -1
  53. package/dist/utils/validation.d.ts.map +1 -1
  54. package/dist/utils/validation.js +146 -7
  55. package/dist/utils/validation.js.map +1 -1
  56. package/docker-compose.yml +6 -6
  57. package/embedding-service/README.md +8 -0
  58. package/package.json +4 -2
  59. package/scripts/FRESH_INSTALL.md +1 -1
  60. package/scripts/ensure-infrastructure.sh +86 -26
  61. package/scripts/health-check.sh +2 -1
  62. package/scripts/stop-infrastructure.sh +23 -0
  63. package/scripts/test-mcp-server.sh +2 -1
@@ -2,23 +2,35 @@
2
2
  * Skill Library - v3.0 Voyager-Style Implementation
3
3
  *
4
4
  * Procedural memory: reusable patterns learned from conversations.
5
+ * Includes RelationalSkillLibrary for geometric embeddings and analogical reasoning.
6
+ * Enhanced with lazy loading support for token efficiency.
5
7
  */
8
+ import { LazyLoadingSkillLibrary } from './skill-lazy-loading.js';
6
9
  export class SkillLibrary {
7
10
  db;
11
+ lazyLoader;
8
12
  constructor(db) {
9
13
  this.db = db;
14
+ this.lazyLoader = new LazyLoadingSkillLibrary(db);
10
15
  }
11
- addSkill(skill) {
16
+ addSkill(skill, namespace = 'default') {
12
17
  const id = 'skill_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
18
+ // Generate summary from description (first sentence or 100 chars)
19
+ const summary = skill.description.length <= 100
20
+ ? skill.description
21
+ : skill.description.substring(0, 97) + '...';
13
22
  this.db.prepare(`
14
- INSERT INTO skills (id, name, description, category, triggers, success_count, failure_count, avg_user_satisfaction)
15
- VALUES (?, ?, ?, ?, ?, 0, 0, 0.5)
16
- `).run(id, skill.name, skill.description, skill.category, JSON.stringify(skill.triggers));
23
+ INSERT INTO skills (
24
+ id, name, description, summary, category, triggers,
25
+ success_count, failure_count, avg_user_satisfaction, is_archived, namespace
26
+ )
27
+ VALUES (?, ?, ?, ?, ?, ?, 0, 0, 0.5, 0, ?)
28
+ `).run(id, skill.name, skill.description, summary, skill.category, JSON.stringify(skill.triggers), namespace);
17
29
  return id;
18
30
  }
19
- search(query, limit = 5) {
31
+ search(query, limit = 5, namespace = 'default') {
20
32
  const queryLower = query.toLowerCase();
21
- const skills = this.db.prepare('SELECT * FROM skills ORDER BY avg_user_satisfaction DESC, success_count DESC').all();
33
+ const skills = this.db.prepare('SELECT * FROM skills WHERE namespace = ? ORDER BY avg_user_satisfaction DESC, success_count DESC').all(namespace);
22
34
  const scored = skills
23
35
  .map(skill => {
24
36
  const triggers = JSON.parse(skill.triggers || '[]');
@@ -40,15 +52,422 @@ export class SkillLibrary {
40
52
  .sort((a, b) => b.score - a.score);
41
53
  return scored.slice(0, limit);
42
54
  }
43
- recordSuccess(skillId, satisfaction) {
55
+ recordSuccess(skillId, satisfaction, _namespace = 'default') {
44
56
  const skill = this.db.prepare('SELECT * FROM skills WHERE id = ?').get(skillId);
45
57
  if (skill) {
46
58
  const newAvg = (skill.avg_user_satisfaction * skill.success_count + satisfaction) / (skill.success_count + 1);
47
59
  this.db.prepare('UPDATE skills SET success_count = success_count + 1, avg_user_satisfaction = ? WHERE id = ?').run(newAvg, skillId);
48
60
  }
49
61
  }
50
- recordFailure(skillId) {
62
+ recordFailure(skillId, _namespace = 'default') {
51
63
  this.db.prepare('UPDATE skills SET failure_count = failure_count + 1 WHERE id = ?').run(skillId);
52
64
  }
65
+ /**
66
+ * Get database instance for subclasses
67
+ */
68
+ getDb() {
69
+ return this.db;
70
+ }
71
+ /**
72
+ * Get skill summaries for lazy loading context injection
73
+ *
74
+ * Returns lightweight summaries (~50 tokens each) instead of full skills.
75
+ * This reduces token usage by 80-90% for skill-related context.
76
+ *
77
+ * @param limit - Maximum number of summaries (default: 20)
78
+ * @param category - Optional category filter
79
+ * @returns Array of SkillSummary objects
80
+ */
81
+ getSummaries(limit = 20, category, namespace = 'default') {
82
+ return this.lazyLoader.getSummaries(limit, category, namespace);
83
+ }
84
+ /**
85
+ * Load full skill implementation on-demand
86
+ *
87
+ * Used when a skill is explicitly invoked and full details are needed.
88
+ * Results should be cached in working memory to avoid repeated loads.
89
+ *
90
+ * @param skillId - The skill ID to load
91
+ * @returns FullSkill object or null if not found
92
+ */
93
+ loadFull(skillId, _namespace = 'default') {
94
+ const fullSkill = this.lazyLoader.loadFull(skillId);
95
+ // Update last_used timestamp when loading a skill
96
+ if (fullSkill) {
97
+ this.db.prepare(`
98
+ UPDATE skills
99
+ SET last_used = CURRENT_TIMESTAMP
100
+ WHERE id = ?
101
+ `).run(skillId);
102
+ }
103
+ return fullSkill;
104
+ }
105
+ /**
106
+ * Detect if a query is attempting to invoke a specific skill
107
+ *
108
+ * Uses pattern matching to identify skill invocations.
109
+ *
110
+ * @param query - The user query
111
+ * @returns InvocationDetection result with skill ID if detected
112
+ */
113
+ detectInvocation(query, namespace = 'default') {
114
+ const summaries = this.getSummaries(100, undefined, namespace); // Get all summaries for matching
115
+ return this.lazyLoader.detectInvocation(query, summaries);
116
+ }
117
+ /**
118
+ * Update last_used timestamp for a skill
119
+ *
120
+ * Called when a skill is successfully executed.
121
+ *
122
+ * @param skillId - The skill ID
123
+ */
124
+ updateLastUsed(skillId) {
125
+ this.db.prepare(`
126
+ UPDATE skills
127
+ SET last_used = CURRENT_TIMESTAMP
128
+ WHERE id = ?
129
+ `).run(skillId);
130
+ }
131
+ }
132
+ /**
133
+ * RelationalSkillLibrary - Extended skill library with geometric embeddings
134
+ * and analogical reasoning capabilities.
135
+ *
136
+ * Features:
137
+ * - Skill embeddings for semantic similarity search
138
+ * - Co-occurrence tracking between skills
139
+ * - Relational vectors for analogical reasoning
140
+ * - Hybrid search combining trigger-based and embedding-based results
141
+ */
142
+ export class RelationalSkillLibrary extends SkillLibrary {
143
+ embeddingClient;
144
+ constructor(db, embeddingClient) {
145
+ super(db);
146
+ this.embeddingClient = embeddingClient;
147
+ }
148
+ /**
149
+ * Construct pattern text from skill properties for embedding generation.
150
+ * Combines name, description, category, and triggers into a single text
151
+ * that captures the skill's semantic meaning.
152
+ */
153
+ constructPatternText(skill) {
154
+ const parts = [];
155
+ parts.push(`Skill: ${skill.name}`);
156
+ parts.push(`Description: ${skill.description}`);
157
+ parts.push(`Category: ${skill.category}`);
158
+ if (skill.triggers && skill.triggers.length > 0) {
159
+ parts.push(`Triggers: ${skill.triggers.join(', ')}`);
160
+ }
161
+ return parts.join('. ');
162
+ }
163
+ /**
164
+ * Add a skill with automatic embedding generation.
165
+ * Falls back to adding without embedding if embedding service unavailable.
166
+ */
167
+ async addSkillWithEmbedding(skill) {
168
+ const id = 'skill_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
169
+ const db = this.getDb();
170
+ let embeddingBuffer = null;
171
+ // Try to generate embedding
172
+ if (this.embeddingClient) {
173
+ try {
174
+ const patternText = this.constructPatternText(skill);
175
+ const embedding = await this.embeddingClient.embed(patternText);
176
+ embeddingBuffer = Buffer.from(new Float32Array(embedding).buffer);
177
+ }
178
+ catch (err) {
179
+ console.error('[SkillLibrary] Failed to generate embedding:', err instanceof Error ? err.message : String(err));
180
+ // Continue without embedding
181
+ }
182
+ }
183
+ db.prepare(`
184
+ INSERT INTO skills (id, name, description, category, triggers, embedding, success_count, failure_count, avg_user_satisfaction)
185
+ VALUES (?, ?, ?, ?, ?, ?, 0, 0, 0.5)
186
+ `).run(id, skill.name, skill.description, skill.category, JSON.stringify(skill.triggers), embeddingBuffer);
187
+ return id;
188
+ }
189
+ /**
190
+ * Generate embeddings for all skills that don't have one.
191
+ * Useful for migrating existing skills or after embedding service comes back online.
192
+ */
193
+ async generateMissingEmbeddings() {
194
+ if (!this.embeddingClient) {
195
+ return 0;
196
+ }
197
+ const db = this.getDb();
198
+ // Get skills without embeddings
199
+ const skills = db.prepare('SELECT id, name, description, category, triggers FROM skills WHERE embedding IS NULL').all();
200
+ if (skills.length === 0) {
201
+ return 0;
202
+ }
203
+ // Construct pattern texts
204
+ const patternTexts = skills.map(skill => this.constructPatternText({
205
+ name: skill.name,
206
+ description: skill.description,
207
+ category: skill.category,
208
+ triggers: JSON.parse(skill.triggers || '[]'),
209
+ }));
210
+ // Generate embeddings in batch
211
+ const response = await this.embeddingClient.embedBatch(patternTexts);
212
+ // Update skills with embeddings
213
+ const updateStmt = db.prepare('UPDATE skills SET embedding = ? WHERE id = ?');
214
+ for (let i = 0; i < skills.length; i++) {
215
+ const embeddingBuffer = Buffer.from(new Float32Array(response.embeddings[i]).buffer);
216
+ updateStmt.run(embeddingBuffer, skills[i].id);
217
+ }
218
+ return skills.length;
219
+ }
220
+ /**
221
+ * Calculate cosine similarity between two embedding vectors.
222
+ * Returns value between -1 and 1, where 1 is identical.
223
+ */
224
+ cosineSimilarity(a, b) {
225
+ if (a.length !== b.length) {
226
+ throw new Error('Embedding vectors must have same length');
227
+ }
228
+ let dotProduct = 0;
229
+ let magnitudeA = 0;
230
+ let magnitudeB = 0;
231
+ for (let i = 0; i < a.length; i++) {
232
+ dotProduct += a[i] * b[i];
233
+ magnitudeA += a[i] * a[i];
234
+ magnitudeB += b[i] * b[i];
235
+ }
236
+ magnitudeA = Math.sqrt(magnitudeA);
237
+ magnitudeB = Math.sqrt(magnitudeB);
238
+ // Handle zero vector case
239
+ if (magnitudeA === 0 || magnitudeB === 0) {
240
+ return 0;
241
+ }
242
+ return dotProduct / (magnitudeA * magnitudeB);
243
+ }
244
+ /**
245
+ * Search skills by embedding similarity (geometric search).
246
+ * Uses cosine similarity to find semantically similar skills.
247
+ */
248
+ async searchByEmbedding(query, limit = 5) {
249
+ if (!this.embeddingClient) {
250
+ return [];
251
+ }
252
+ const db = this.getDb();
253
+ // Generate query embedding
254
+ const queryEmbedding = await this.embeddingClient.embed(query);
255
+ // Get all skills with embeddings
256
+ const skills = db.prepare('SELECT * FROM skills WHERE embedding IS NOT NULL').all();
257
+ // Calculate similarity for each skill
258
+ const scoredSkills = skills.map(skill => {
259
+ const embeddingBuffer = skill.embedding;
260
+ const expectedBytes = 1024 * 4; // 1024 dimensions * 4 bytes per float32
261
+ if (embeddingBuffer.byteLength !== expectedBytes) {
262
+ throw new Error(`Invalid embedding size: expected ${expectedBytes} bytes, got ${embeddingBuffer.byteLength}`);
263
+ }
264
+ const embedding = new Float32Array(embeddingBuffer.buffer, embeddingBuffer.byteOffset, 1024);
265
+ const embeddingArray = Array.from(embedding);
266
+ const similarity = this.cosineSimilarity(queryEmbedding, embeddingArray);
267
+ return {
268
+ id: skill.id,
269
+ name: skill.name,
270
+ description: skill.description,
271
+ category: skill.category,
272
+ triggers: JSON.parse(skill.triggers || '[]'),
273
+ successCount: skill.success_count,
274
+ failureCount: skill.failure_count,
275
+ avgSatisfaction: skill.avg_user_satisfaction,
276
+ similarity,
277
+ };
278
+ });
279
+ // Sort by similarity (descending) and return top results
280
+ return scoredSkills
281
+ .sort((a, b) => (b.similarity || 0) - (a.similarity || 0))
282
+ .slice(0, limit);
283
+ }
284
+ /**
285
+ * Hybrid search combining trigger-based and embedding-based search.
286
+ * Uses Reciprocal Rank Fusion (RRF) with k=60 to combine results.
287
+ */
288
+ async hybridSearch(query, limit = 5) {
289
+ // Get trigger-based results
290
+ const triggerResults = this.search(query, limit * 2);
291
+ // Get embedding-based results (if available)
292
+ let embeddingResults = [];
293
+ if (this.embeddingClient) {
294
+ try {
295
+ embeddingResults = await this.searchByEmbedding(query, limit * 2);
296
+ }
297
+ catch {
298
+ // Fall back to trigger-only search
299
+ }
300
+ }
301
+ // If no embedding results, return trigger results
302
+ if (embeddingResults.length === 0) {
303
+ return triggerResults.map(skill => ({
304
+ ...skill,
305
+ fusedScore: 1 / (60 + 1), // RRF score for single list
306
+ }));
307
+ }
308
+ // Combine using RRF (k=60)
309
+ const k = 60;
310
+ const fusedScores = new Map();
311
+ // Add trigger results with RRF scores
312
+ triggerResults.forEach((skill, rank) => {
313
+ const rrfScore = 1 / (k + rank + 1);
314
+ fusedScores.set(skill.id, { skill, score: rrfScore });
315
+ });
316
+ // Add embedding results with RRF scores
317
+ embeddingResults.forEach((skill, rank) => {
318
+ const rrfScore = 1 / (k + rank + 1);
319
+ const existing = fusedScores.get(skill.id);
320
+ if (existing) {
321
+ existing.score += rrfScore;
322
+ // Keep the one with similarity score if available
323
+ if (skill.similarity !== undefined) {
324
+ existing.skill = skill;
325
+ }
326
+ }
327
+ else {
328
+ fusedScores.set(skill.id, { skill, score: rrfScore });
329
+ }
330
+ });
331
+ // Sort by fused score and return
332
+ return Array.from(fusedScores.values())
333
+ .sort((a, b) => b.score - a.score)
334
+ .slice(0, limit)
335
+ .map(({ skill, score }) => ({
336
+ ...skill,
337
+ fusedScore: score,
338
+ }));
339
+ }
340
+ /**
341
+ * Record co-occurrence between two skills.
342
+ * Used to track which skills are often used together.
343
+ * Normalizes skill pair order for consistency.
344
+ */
345
+ async recordCoOccurrence(skillId1, skillId2) {
346
+ const db = this.getDb();
347
+ // Normalize order (smaller ID first)
348
+ const [id1, id2] = skillId1 < skillId2 ? [skillId1, skillId2] : [skillId2, skillId1];
349
+ // Use UPSERT to avoid TOCTOU race condition
350
+ const relId = 'rel_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
351
+ db.prepare(`
352
+ INSERT INTO skill_relationships (id, skill_id_1, skill_id_2, relationship_type, co_occurrence_count, created_at, last_updated)
353
+ VALUES (?, ?, ?, 'co_occurred', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
354
+ ON CONFLICT(skill_id_1, skill_id_2, relationship_type)
355
+ DO UPDATE SET
356
+ co_occurrence_count = co_occurrence_count + 1,
357
+ last_updated = CURRENT_TIMESTAMP
358
+ `).run(relId, id1, id2);
359
+ }
360
+ /**
361
+ * Compute relational vectors for skill relationships that meet the threshold.
362
+ * Relational vector = embedding(skill2) - embedding(skill1)
363
+ * Used for analogical reasoning.
364
+ */
365
+ async computeRelationalVectors(minCoOccurrenceCount = 2) {
366
+ const db = this.getDb();
367
+ // Get relationships that need relational vectors
368
+ const relationships = db.prepare(`
369
+ SELECT sr.*, s1.embedding as emb1, s2.embedding as emb2
370
+ FROM skill_relationships sr
371
+ JOIN skills s1 ON sr.skill_id_1 = s1.id
372
+ JOIN skills s2 ON sr.skill_id_2 = s2.id
373
+ WHERE sr.co_occurrence_count >= ?
374
+ AND sr.relational_vector IS NULL
375
+ AND s1.embedding IS NOT NULL
376
+ AND s2.embedding IS NOT NULL
377
+ `).all(minCoOccurrenceCount);
378
+ let computed = 0;
379
+ for (const rel of relationships) {
380
+ // Get embeddings
381
+ const expectedBytes = 1024 * 4; // 1024 dimensions * 4 bytes per float32
382
+ if (rel.emb1.byteLength !== expectedBytes) {
383
+ throw new Error(`Invalid embedding size for emb1: expected ${expectedBytes} bytes, got ${rel.emb1.byteLength}`);
384
+ }
385
+ if (rel.emb2.byteLength !== expectedBytes) {
386
+ throw new Error(`Invalid embedding size for emb2: expected ${expectedBytes} bytes, got ${rel.emb2.byteLength}`);
387
+ }
388
+ const emb1 = new Float32Array(rel.emb1.buffer, rel.emb1.byteOffset, 1024);
389
+ const emb2 = new Float32Array(rel.emb2.buffer, rel.emb2.byteOffset, 1024);
390
+ // Compute relational vector (difference)
391
+ const relationalVector = new Float32Array(1024);
392
+ for (let i = 0; i < 1024; i++) {
393
+ relationalVector[i] = emb2[i] - emb1[i];
394
+ }
395
+ // Store relational vector
396
+ const vectorBuffer = Buffer.from(relationalVector.buffer);
397
+ db.prepare('UPDATE skill_relationships SET relational_vector = ? WHERE id = ?')
398
+ .run(vectorBuffer, rel.id);
399
+ computed++;
400
+ }
401
+ return computed;
402
+ }
403
+ /**
404
+ * Find analogous skills using relational vectors.
405
+ * Query: "What is to sourceB as targetA is to sourceA?"
406
+ *
407
+ * Uses the relationship between sourceA and targetA to find
408
+ * a similar relationship starting from sourceB.
409
+ */
410
+ async analogicalSearch(sourceA, targetA, sourceB, limit = 5) {
411
+ const db = this.getDb();
412
+ // Get embeddings for source skills
413
+ const skillA = db.prepare('SELECT embedding FROM skills WHERE id = ?').get(sourceA);
414
+ const skillTargetA = db.prepare('SELECT embedding FROM skills WHERE id = ?').get(targetA);
415
+ const skillB = db.prepare('SELECT embedding FROM skills WHERE id = ?').get(sourceB);
416
+ if (!skillA?.embedding || !skillTargetA?.embedding || !skillB?.embedding) {
417
+ return [];
418
+ }
419
+ // Get relational vector between sourceA and targetA
420
+ const [id1, id2] = sourceA < targetA ? [sourceA, targetA] : [targetA, sourceA];
421
+ const relationship = db.prepare(`
422
+ SELECT relational_vector FROM skill_relationships
423
+ WHERE (skill_id_1 = ? AND skill_id_2 = ?) OR (skill_id_1 = ? AND skill_id_2 = ?)
424
+ `).get(id1, id2, id2, id1);
425
+ if (!relationship?.relational_vector) {
426
+ return [];
427
+ }
428
+ // Extract relational vector
429
+ const expectedBytes = 1024 * 4; // 1024 dimensions * 4 bytes per float32
430
+ if (relationship.relational_vector.byteLength !== expectedBytes) {
431
+ throw new Error(`Invalid relational vector size: expected ${expectedBytes} bytes, got ${relationship.relational_vector.byteLength}`);
432
+ }
433
+ const relVector = new Float32Array(relationship.relational_vector.buffer, relationship.relational_vector.byteOffset, 1024);
434
+ // Extract sourceB embedding
435
+ if (skillB.embedding.byteLength !== expectedBytes) {
436
+ throw new Error(`Invalid embedding size for skillB: expected ${expectedBytes} bytes, got ${skillB.embedding.byteLength}`);
437
+ }
438
+ const embB = new Float32Array(skillB.embedding.buffer, skillB.embedding.byteOffset, 1024);
439
+ // Compute expected target embedding: embB + relVector
440
+ const expectedTarget = new Float32Array(1024);
441
+ for (let i = 0; i < 1024; i++) {
442
+ expectedTarget[i] = embB[i] + relVector[i];
443
+ }
444
+ const expectedTargetArray = Array.from(expectedTarget);
445
+ // Find skills closest to expected target
446
+ const skills = db.prepare('SELECT * FROM skills WHERE embedding IS NOT NULL AND id != ?').all(sourceB);
447
+ const scoredSkills = skills.map(skill => {
448
+ const embeddingBuffer = skill.embedding;
449
+ const expectedBytes = 1024 * 4; // 1024 dimensions * 4 bytes per float32
450
+ if (embeddingBuffer.byteLength !== expectedBytes) {
451
+ throw new Error(`Invalid embedding size: expected ${expectedBytes} bytes, got ${embeddingBuffer.byteLength}`);
452
+ }
453
+ const embedding = new Float32Array(embeddingBuffer.buffer, embeddingBuffer.byteOffset, 1024);
454
+ const embeddingArray = Array.from(embedding);
455
+ const analogyScore = this.cosineSimilarity(expectedTargetArray, embeddingArray);
456
+ return {
457
+ id: skill.id,
458
+ name: skill.name,
459
+ description: skill.description,
460
+ category: skill.category,
461
+ triggers: JSON.parse(skill.triggers || '[]'),
462
+ successCount: skill.success_count,
463
+ failureCount: skill.failure_count,
464
+ avgSatisfaction: skill.avg_user_satisfaction,
465
+ analogyScore,
466
+ };
467
+ });
468
+ return scoredSkills
469
+ .sort((a, b) => (b.analogyScore || 0) - (a.analogyScore || 0))
470
+ .slice(0, limit);
471
+ }
53
472
  }
54
473
  //# sourceMappingURL=skill-library.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-library.js","sourceRoot":"","sources":["../../src/memory-layers/skill-library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-library.js","sourceRoot":"","sources":["../../src/memory-layers/skill-library.ts"],"names":[],"mappings":"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"}
@@ -3,8 +3,12 @@
3
3
  *
4
4
  * Redis-based cache for last 5 conversations with 7-day TTL.
5
5
  * Simple but effective - instant recall for recent context.
6
+ *
7
+ * Enhanced with skill caching for lazy loading support.
8
+ * v0.5.0: Added namespace parameter for multi-agent isolation.
6
9
  */
7
10
  import { Redis } from 'ioredis';
11
+ import type { FullSkill, CachedSkill } from './skill-lazy-loading.js';
8
12
  export interface WorkingMemory {
9
13
  conversationId: string;
10
14
  timestamp: Date;
@@ -19,39 +23,56 @@ export declare class WorkingMemoryLayer {
19
23
  private readonly MAX_CONVERSATIONS;
20
24
  private readonly TTL_DAYS;
21
25
  constructor(redis: Redis, maxConversations?: number);
22
- store(memory: WorkingMemory): Promise<void>;
23
- search(query: string, limit?: number): Promise<Array<{
26
+ store(memory: WorkingMemory, namespace?: string): Promise<void>;
27
+ search(query: string, limit?: number, namespace?: string): Promise<Array<{
24
28
  memory: WorkingMemory;
25
29
  similarity: number;
26
30
  }>>;
27
- getRecent(limit?: number): Promise<WorkingMemory[]>;
28
- getAll(limit?: number): Promise<WorkingMemory[]>;
29
- get(conversationId: string): Promise<WorkingMemory | null>;
30
- delete(conversationId: string): Promise<void>;
31
- searchByEntities(entities: string[], limit?: number): Promise<Array<{
31
+ getRecent(limit?: number, namespace?: string): Promise<WorkingMemory[]>;
32
+ getAll(limit?: number, namespace?: string): Promise<WorkingMemory[]>;
33
+ get(conversationId: string, namespace?: string): Promise<WorkingMemory | null>;
34
+ delete(conversationId: string, namespace?: string): Promise<void>;
35
+ searchByEntities(entities: string[], limit?: number, namespace?: string): Promise<Array<{
32
36
  memory: WorkingMemory;
33
37
  similarity: number;
34
38
  matchedEntities: string[];
35
39
  }>>;
36
- searchByTopics(topics: string[], limit?: number): Promise<Array<{
40
+ searchByTopics(topics: string[], limit?: number, namespace?: string): Promise<Array<{
37
41
  memory: WorkingMemory;
38
42
  similarity: number;
39
43
  matchedTopics: string[];
40
44
  }>>;
41
- getStats(): Promise<{
45
+ getStats(namespace?: string): Promise<{
42
46
  totalConversations: number;
43
47
  oldestConversation: Date | null;
44
48
  newestConversation: Date | null;
45
49
  totalTextSize: number;
46
50
  }>;
47
51
  /**
48
- * Clear all working memory entries
52
+ * Clear all working memory entries for a namespace
49
53
  *
50
54
  * Uses SCAN instead of KEYS to avoid blocking Redis server.
51
- * Deletes keys in batches to prevent memory exhaustion.
52
- *
53
- * Security: Prevents DoS attacks on Redis
54
55
  */
55
- clear(): Promise<void>;
56
+ clear(namespace?: string): Promise<void>;
57
+ /**
58
+ * Cache a loaded skill in working memory
59
+ */
60
+ cacheSkill(skill: FullSkill, ttl?: number, namespace?: string): Promise<void>;
61
+ /**
62
+ * Get a cached skill from working memory
63
+ */
64
+ getCachedSkill(skillId: string, namespace?: string): Promise<CachedSkill | null>;
65
+ /**
66
+ * Invalidate a cached skill
67
+ */
68
+ invalidateSkillCache(skillId: string, namespace?: string): Promise<void>;
69
+ /**
70
+ * Get all cached skill IDs
71
+ */
72
+ getCachedSkillIds(namespace?: string): Promise<string[]>;
73
+ /**
74
+ * Clear all cached skills for a namespace
75
+ */
76
+ clearSkillCache(namespace?: string): Promise<void>;
56
77
  }
57
78
  //# sourceMappingURL=working-memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"working-memory.d.ts","sourceRoot":"","sources":["../../src/memory-layers/working-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAK;gBAElB,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAE,MAAU;IAKhD,KAAK,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB3C,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAwBvG,SAAS,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAYtD,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAIhD,GAAG,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAK1D,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAsBjJ,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAsB3I,QAAQ,IAAI,OAAO,CAAC;QACxB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;QAChC,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IA6BF;;;;;;;OAOG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB7B"}
1
+ {"version":3,"file":"working-memory.d.ts","sourceRoot":"","sources":["../../src/memory-layers/working-memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtE,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAK;gBAElB,KAAK,EAAE,KAAK,EAAE,gBAAgB,GAAE,MAAU;IAKhD,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB1E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAyBtI,SAAS,CAAC,KAAK,GAAE,MAAU,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAarF,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAI/E,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAKzF,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAU,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAuBhL,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAU,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAuB1K,QAAQ,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC;QACrD,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;QAChC,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;QAChC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IA8BF;;;;OAIG;IACG,KAAK,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzD;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,GAAE,MAAa,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAapG;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAwBjG;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMzF;;OAEG;IACG,iBAAiB,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBzE;;OAEG;IACG,eAAe,CAAC,SAAS,GAAE,MAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBpE"}