@getplumb/core 0.4.3 → 0.4.5

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 (44) hide show
  1. package/dist/chunker.d.ts +2 -27
  2. package/dist/chunker.d.ts.map +1 -1
  3. package/dist/chunker.js +2 -36
  4. package/dist/chunker.js.map +1 -1
  5. package/dist/context-builder.d.ts +18 -6
  6. package/dist/context-builder.d.ts.map +1 -1
  7. package/dist/context-builder.js +48 -24
  8. package/dist/context-builder.js.map +1 -1
  9. package/dist/embedder.d.ts.map +1 -1
  10. package/dist/embedder.js +6 -0
  11. package/dist/embedder.js.map +1 -1
  12. package/dist/index.d.ts +4 -8
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -3
  15. package/dist/index.js.map +1 -1
  16. package/dist/local-store.d.ts +24 -31
  17. package/dist/local-store.d.ts.map +1 -1
  18. package/dist/local-store.js +81 -331
  19. package/dist/local-store.js.map +1 -1
  20. package/dist/memory-facts-search.d.ts +33 -0
  21. package/dist/memory-facts-search.d.ts.map +1 -0
  22. package/dist/memory-facts-search.js +143 -0
  23. package/dist/memory-facts-search.js.map +1 -0
  24. package/dist/read-path.d.ts +22 -13
  25. package/dist/read-path.d.ts.map +1 -1
  26. package/dist/read-path.js +19 -15
  27. package/dist/read-path.js.map +1 -1
  28. package/dist/schema.d.ts +13 -8
  29. package/dist/schema.d.ts.map +1 -1
  30. package/dist/schema.js +63 -83
  31. package/dist/schema.js.map +1 -1
  32. package/dist/scorer.d.ts +12 -10
  33. package/dist/scorer.d.ts.map +1 -1
  34. package/dist/scorer.js +13 -10
  35. package/dist/scorer.js.map +1 -1
  36. package/dist/store.d.ts +1 -6
  37. package/dist/store.d.ts.map +1 -1
  38. package/dist/types.d.ts +27 -1
  39. package/dist/types.d.ts.map +1 -1
  40. package/dist/wasm-db.d.ts +17 -20
  41. package/dist/wasm-db.d.ts.map +1 -1
  42. package/dist/wasm-db.js +51 -56
  43. package/dist/wasm-db.js.map +1 -1
  44. package/package.json +5 -6
@@ -1,116 +1,22 @@
1
- var _a;
2
- import { createHash } from 'node:crypto';
3
1
  import { homedir } from 'node:os';
4
2
  import { mkdirSync } from 'node:fs';
5
3
  import { join, dirname } from 'node:path';
6
4
  import { openDb } from './wasm-db.js';
7
5
  import { applySchema } from './schema.js';
8
6
  import { embed, warmEmbedder, warmReranker } from './embedder.js';
9
- import { formatExchange } from './chunker.js';
10
- import { searchRawLog } from './raw-log-search.js';
11
- import { serializeEmbedding, deserializeEmbedding } from './vector-search.js';
12
- /**
13
- * Split text into overlapping child chunks for parent-child chunking (T-108).
14
- * Target: ~250 chars per chunk with ~50 char overlap.
15
- * Prefers sentence boundaries, falls back to word boundaries, hard-cuts at 300 chars max.
16
- *
17
- * Uses a generator to avoid materializing the full chunk array in memory,
18
- * which prevents OOM crashes on large inputs (fix for splitIntoChildren array limit bug).
19
- */
20
- function* splitIntoChildren(text) {
21
- const TARGET_SIZE = 250;
22
- const OVERLAP = 50;
23
- const MAX_SIZE = 300;
24
- const SENTENCE_ENDINGS = /[.!?]\s+/g;
25
- if (text.length <= TARGET_SIZE) {
26
- // Text is already small enough — yield as single child
27
- if (text.trim().length > 0)
28
- yield text;
29
- return;
30
- }
31
- let pos = 0;
32
- while (pos < text.length) {
33
- let endPos = Math.min(pos + TARGET_SIZE, text.length);
34
- // If we're at the end of the text, take the rest
35
- if (endPos >= text.length) {
36
- const last = text.slice(pos).trim();
37
- if (last.length > 0)
38
- yield last;
39
- break;
40
- }
41
- // Try to find a sentence boundary within the target range
42
- const segment = text.slice(pos, Math.min(pos + MAX_SIZE, text.length));
43
- const sentenceMatches = Array.from(segment.matchAll(SENTENCE_ENDINGS));
44
- if (sentenceMatches.length > 0) {
45
- // Find the last sentence boundary before TARGET_SIZE
46
- let bestMatch = sentenceMatches[0]; // Safe: array is non-empty
47
- for (const match of sentenceMatches) {
48
- if (match.index !== undefined && match.index <= TARGET_SIZE) {
49
- bestMatch = match;
50
- }
51
- else {
52
- break;
53
- }
54
- }
55
- if (bestMatch.index !== undefined && bestMatch[0] !== undefined) {
56
- endPos = pos + bestMatch.index + bestMatch[0].length;
57
- }
58
- else {
59
- // Fall back to word boundary
60
- endPos = findWordBoundary(text, pos, TARGET_SIZE, MAX_SIZE);
61
- }
62
- }
63
- else {
64
- // No sentence boundary found — fall back to word boundary
65
- endPos = findWordBoundary(text, pos, TARGET_SIZE, MAX_SIZE);
66
- }
67
- const chunk = text.slice(pos, endPos).trim();
68
- if (chunk.length > 0)
69
- yield chunk;
70
- // Move position forward, with overlap
71
- pos = endPos - OVERLAP;
72
- if (pos < 0)
73
- pos = endPos; // Safety: don't go negative
74
- }
75
- }
76
- /**
77
- * Find a word boundary near the target position.
78
- * Prefers breaking at TARGET_SIZE, but will extend up to MAX_SIZE if needed.
79
- */
80
- function findWordBoundary(text, start, targetSize, maxSize) {
81
- const targetPos = start + targetSize;
82
- const maxPos = Math.min(start + maxSize, text.length);
83
- // Look for whitespace near the target position
84
- let endPos = targetPos;
85
- // First try: find whitespace after targetPos
86
- for (let i = targetPos; i < maxPos; i++) {
87
- if (/\s/.test(text[i] ?? '')) {
88
- endPos = i + 1; // Include the whitespace
89
- break;
90
- }
91
- }
92
- // If we hit maxPos without finding whitespace, hard cut at maxPos
93
- if (endPos === targetPos && targetPos < maxPos) {
94
- endPos = maxPos;
95
- }
96
- return endPos;
97
- }
7
+ import { searchMemoryFacts } from './memory-facts-search.js';
8
+ import { serializeEmbedding } from './vector-search.js';
98
9
  export class LocalStore {
99
10
  #db;
100
11
  #userId;
101
- // Backlog processor state (T-095: drain loop)
12
+ // Backlog processor state for memory_facts embedding
102
13
  #embedDrainStopped = false;
103
14
  #embedDrainPromise = null;
104
15
  #embedIdleMs;
105
- // T-103/T-115: In-memory embedding cache for vec_raw_log (eliminates ~3,700ms SQLite load on each query)
106
- // T-115: Capped at MAX_CACHE_ENTRIES to prevent OOM crashes
107
- #rawLogEmbeddingCache = [];
108
- static MAX_CACHE_ENTRIES = 10000;
109
- static HEAP_GUARD_THRESHOLD = 1_500_000_000; // 1.5GB in bytes
110
- // FIX 3: WAL checkpoint throttling to prevent unbounded WAL growth
16
+ // WAL checkpoint throttling to prevent unbounded WAL growth
111
17
  #lastCheckpoint = Date.now();
112
18
  #checkpointIntervalMs = 60000; // Checkpoint every minute
113
- // FIX 4: Health check to detect stuck drain loops
19
+ // Health check to detect stuck drain loops
114
20
  #lastActivityTimestamp = Date.now();
115
21
  #healthCheckInterval = null;
116
22
  /** Expose database for plugin use (e.g., NudgeManager) */
@@ -127,19 +33,6 @@ export class LocalStore {
127
33
  // Initialize backlog processor config
128
34
  this.#embedIdleMs = backlog?.embedIdleMs ?? 5000;
129
35
  }
130
- /**
131
- * T-115: Add entry to #rawLogEmbeddingCache with FIFO eviction.
132
- * Evicts oldest 10% when cache exceeds MAX_CACHE_ENTRIES.
133
- */
134
- #pushToCache(entry) {
135
- this.#rawLogEmbeddingCache.push(entry);
136
- // Check if cache exceeds limit
137
- if (this.#rawLogEmbeddingCache.length > _a.MAX_CACHE_ENTRIES) {
138
- // Evict oldest 10% to amortize splice cost
139
- const evictCount = Math.floor(_a.MAX_CACHE_ENTRIES * 0.1);
140
- this.#rawLogEmbeddingCache.splice(0, evictCount);
141
- }
142
- }
143
36
  /**
144
37
  * Create a new LocalStore instance (async factory).
145
38
  * Required because WASM initialization is async.
@@ -154,216 +47,84 @@ export class LocalStore {
154
47
  db.exec('PRAGMA foreign_keys = ON');
155
48
  applySchema(db);
156
49
  // Create store
157
- const store = new _a(db, userId, options.backlog);
158
- // T-096: Warm embedder pipeline to eliminate 365ms cold-start on first query
159
- await warmEmbedder();
160
- // T-101: Warm reranker pipeline to eliminate ~200ms cold-start on first query
161
- // (intentionally loads ~80MB model at init for consistent <250ms query performance)
162
- await warmReranker();
163
- // T-103/T-108/T-115: Load vec_raw_log embeddings for child rows only (eliminates ~3,700ms SQLite load per query)
164
- // T-115: Limit to MAX_CACHE_ENTRIES most recent rows to prevent OOM on startup
165
- // Child rows have parent_id IS NOT NULL. Parent rows are not embedded (embed_status='no_embed').
166
- const rawLogVecStmt = db.prepare(`
167
- SELECT v.rowid, v.embedding
168
- FROM vec_raw_log v
169
- JOIN raw_log r ON r.vec_rowid = v.rowid
170
- WHERE r.parent_id IS NOT NULL
171
- ORDER BY v.rowid DESC
172
- LIMIT ?
173
- `);
174
- rawLogVecStmt.bind([_a.MAX_CACHE_ENTRIES]);
175
- while (rawLogVecStmt.step()) {
176
- const row = rawLogVecStmt.get({});
177
- store.#rawLogEmbeddingCache.push({
178
- rowid: row.rowid,
179
- embedding: deserializeEmbedding(row.embedding),
180
- });
50
+ const store = new LocalStore(db, userId, options.backlog);
51
+ // Warm embedder and reranker pipelines to eliminate cold-start latency
52
+ // Skip if skipWarm=true (e.g. CLI seeding tools — model loads on first embed() call anyway)
53
+ if (!options.skipWarm) {
54
+ await warmEmbedder();
55
+ await warmReranker();
181
56
  }
182
- rawLogVecStmt.finalize();
183
57
  return store;
184
58
  }
185
59
  async status() {
186
- const rawLogStmt = this.#db.prepare(`SELECT COUNT(*) AS c FROM raw_log WHERE user_id = ?`);
187
- rawLogStmt.bind([this.#userId]);
188
- rawLogStmt.step();
189
- const rawLogCount = rawLogStmt.get(0);
190
- rawLogStmt.finalize();
191
- const lastIngestionStmt = this.#db.prepare(`SELECT MAX(timestamp) AS ts FROM raw_log WHERE user_id = ?`);
192
- lastIngestionStmt.bind([this.#userId]);
193
- lastIngestionStmt.step();
194
- const lastIngestionTs = lastIngestionStmt.get(0);
195
- lastIngestionStmt.finalize();
60
+ // Count non-deleted memory facts
61
+ const factCountStmt = this.#db.prepare(`SELECT COUNT(*) AS c FROM memory_facts WHERE user_id = ? AND (deleted_at IS NULL)`);
62
+ factCountStmt.bind([this.#userId]);
63
+ factCountStmt.step();
64
+ const factCount = factCountStmt.get(0);
65
+ factCountStmt.finalize();
66
+ // Last ingestion is now the most recent memory fact
67
+ const lastFactStmt = this.#db.prepare(`SELECT MAX(created_at) AS ts FROM memory_facts WHERE user_id = ?`);
68
+ lastFactStmt.bind([this.#userId]);
69
+ lastFactStmt.step();
70
+ const lastFactTs = lastFactStmt.get(0);
71
+ lastFactStmt.finalize();
196
72
  const pageCount = this.#db.selectValue('PRAGMA page_count');
197
73
  const pageSize = this.#db.selectValue('PRAGMA page_size');
198
74
  return {
199
- rawLogCount,
200
- lastIngestion: lastIngestionTs !== null ? new Date(lastIngestionTs) : null,
75
+ factCount,
76
+ lastIngestion: lastFactTs !== null ? new Date(lastFactTs) : null,
201
77
  storageBytes: pageCount * pageSize,
202
78
  };
203
79
  }
204
- async ingest(exchange) {
205
- const rawLogId = crypto.randomUUID();
206
- const chunkText = formatExchange(exchange);
207
- // Compute content hash for deduplication (scoped per userId).
208
- const contentHash = createHash('sha256').update(chunkText).digest('hex');
209
- // Attempt insert — catch UNIQUE constraint violations (duplicate content_hash).
210
- try {
211
- this.#db.exec('BEGIN');
212
- // T-108: Insert parent row (no embedding, no vec_rowid).
213
- const rawLogStmt = this.#db.prepare(`
214
- INSERT INTO raw_log
215
- (id, user_id, session_id, session_label,
216
- user_message, agent_response, timestamp, source, chunk_text, chunk_index, content_hash,
217
- embed_status, embed_error, embed_model, parent_id)
218
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
219
- `);
220
- rawLogStmt.bind([
221
- rawLogId,
222
- this.#userId,
223
- exchange.sessionId,
224
- exchange.sessionLabel ?? null,
225
- exchange.userMessage,
226
- exchange.agentResponse,
227
- exchange.timestamp.toISOString(),
228
- exchange.source,
229
- chunkText,
230
- 0,
231
- contentHash,
232
- 'no_embed', // Parent is not embedded (T-108)
233
- null,
234
- null,
235
- null, // parent_id=NULL for parent rows
236
- ]);
237
- rawLogStmt.step();
238
- rawLogStmt.finalize();
239
- // T-108: Split parent into child chunks and embed each child.
240
- // splitIntoChildren is a generator — iterate lazily to avoid OOM on large inputs.
241
- let i = 0;
242
- for (const childText of splitIntoChildren(chunkText)) {
243
- const childId = crypto.randomUUID();
244
- let childEmbedding = null;
245
- let childEmbeddingJson = null;
246
- let childEmbedStatus = 'pending';
247
- let childEmbedError = null;
248
- let childEmbedModel = null;
249
- // Embed the child chunk
250
- try {
251
- childEmbedding = await embed(childText);
252
- childEmbeddingJson = serializeEmbedding(childEmbedding);
253
- childEmbedStatus = 'done';
254
- childEmbedModel = 'Xenova/bge-small-en-v1.5';
255
- }
256
- catch (err) {
257
- childEmbedStatus = 'failed';
258
- childEmbedError = err instanceof Error ? err.message : String(err);
259
- }
260
- // Insert child row
261
- const childStmt = this.#db.prepare(`
262
- INSERT INTO raw_log
263
- (id, user_id, session_id, session_label,
264
- user_message, agent_response, timestamp, source, chunk_text, chunk_index, content_hash,
265
- embed_status, embed_error, embed_model, parent_id)
266
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
267
- `);
268
- childStmt.bind([
269
- childId,
270
- this.#userId,
271
- exchange.sessionId,
272
- exchange.sessionLabel ?? null,
273
- exchange.userMessage,
274
- exchange.agentResponse,
275
- exchange.timestamp.toISOString(),
276
- exchange.source,
277
- childText,
278
- i, // chunk_index for ordering
279
- null, // No content_hash for children (they don't participate in dedup)
280
- childEmbedStatus,
281
- childEmbedError,
282
- childEmbedModel,
283
- rawLogId, // parent_id points to parent
284
- ]);
285
- childStmt.step();
286
- childStmt.finalize();
287
- // Insert child embedding into vec_raw_log if embedding succeeded
288
- if (childEmbeddingJson !== null) {
289
- const vecStmt = this.#db.prepare(`INSERT INTO vec_raw_log(embedding) VALUES (?)`);
290
- vecStmt.bind([childEmbeddingJson]);
291
- vecStmt.step();
292
- vecStmt.finalize();
293
- const vecRowid = this.#db.selectValue('SELECT last_insert_rowid()');
294
- // Back-fill vec_rowid on child row
295
- const updateStmt = this.#db.prepare(`UPDATE raw_log SET vec_rowid = ? WHERE id = ?`);
296
- updateStmt.bind([vecRowid, childId]);
297
- updateStmt.step();
298
- updateStmt.finalize();
299
- // T-103/T-115: Append child embedding to in-memory cache (with eviction)
300
- this.#pushToCache({ rowid: vecRowid, embedding: childEmbedding });
301
- }
302
- i++;
303
- }
304
- this.#db.exec('COMMIT');
305
- }
306
- catch (err) {
307
- this.#db.exec('ROLLBACK');
308
- // Check for SQLite UNIQUE constraint error on content_hash.
309
- if (err instanceof Error && err.message.includes('UNIQUE constraint')) {
310
- // Duplicate content — skip ingestion.
311
- return {
312
- rawLogId: '',
313
- skipped: true,
314
- };
315
- }
316
- // Re-throw other errors (e.g., real DB issues).
317
- throw err;
318
- }
319
- return {
320
- rawLogId,
321
- };
80
+ /**
81
+ * Ingest a curated memory fact (T-118).
82
+ * Facts are stored as single chunks (no splitting) with embed_status='pending'.
83
+ * Accepts optional confidence (0–1) and decayRate ('slow'|'medium'|'fast').
84
+ */
85
+ async ingestMemoryFact(input) {
86
+ const factId = crypto.randomUUID();
87
+ const tagsJson = input.tags ? JSON.stringify(input.tags) : null;
88
+ const confidence = input.confidence ?? 0.95;
89
+ const decayRate = input.decayRate ?? 'slow';
90
+ const stmt = this.#db.prepare(`
91
+ INSERT INTO memory_facts
92
+ (id, user_id, content, source_session_id, tags, confidence, decay_rate, created_at, embed_status)
93
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
94
+ `);
95
+ stmt.bind([
96
+ factId,
97
+ this.#userId,
98
+ input.content,
99
+ input.sourceSessionId,
100
+ tagsJson,
101
+ confidence,
102
+ decayRate,
103
+ new Date().toISOString(),
104
+ 'pending',
105
+ ]);
106
+ stmt.step();
107
+ stmt.finalize();
108
+ return { factId };
322
109
  }
323
110
  /**
324
- * Hybrid search over raw_log (Layer 1 retrieval).
325
- * See raw-log-search.ts for the full pipeline description.
111
+ * Hybrid search over memory_facts (Layer 2 retrieval).
112
+ * See memory-facts-search.ts for the full pipeline description.
326
113
  */
327
- async searchRawLog(query, limit = 10) {
328
- // T-103/T-115: Pass in-memory embedding cache to searchRawLog (eliminates ~3,700ms SQLite load per query)
329
- // T-115: If cache is incomplete (capped due to MAX_CACHE_ENTRIES), fall back to SQLite load
330
- const totalVecRows = this.#db.selectValue('SELECT COUNT(*) FROM vec_raw_log');
331
- const cacheComplete = this.#rawLogEmbeddingCache.length >= totalVecRows;
332
- return searchRawLog(this.#db, this.#userId, query, limit, cacheComplete ? this.#rawLogEmbeddingCache : undefined);
114
+ async searchMemoryFacts(query, limit = 10) {
115
+ return searchMemoryFacts(this.#db, this.#userId, query, limit);
333
116
  }
334
117
  /**
335
- * Export all data for a user (for plumb export command).
336
- * Returns raw database rows (no vector data).
118
+ * Soft-delete a memory fact by id (sets deleted_at timestamp).
119
+ * Soft-deleted facts are excluded from search results.
337
120
  */
338
- exportAll(userId) {
339
- // Export all raw_log entries (no vector data).
340
- const rawLogStmt = this.#db.prepare(`
341
- SELECT
342
- id,
343
- user_id AS userId,
344
- session_id AS sessionId,
345
- session_label AS sessionLabel,
346
- user_message AS userMessage,
347
- agent_response AS agentResponse,
348
- timestamp,
349
- source,
350
- chunk_text AS chunkText,
351
- chunk_index AS chunkIndex,
352
- content_hash AS contentHash,
353
- embed_status AS embedStatus,
354
- embed_error AS embedError,
355
- embed_model AS embedModel
356
- FROM raw_log
357
- WHERE user_id = ?
358
- ORDER BY timestamp DESC
121
+ async delete(factId) {
122
+ const stmt = this.#db.prepare(`
123
+ UPDATE memory_facts SET deleted_at = ? WHERE id = ? AND user_id = ?
359
124
  `);
360
- rawLogStmt.bind([userId]);
361
- const rawLog = [];
362
- while (rawLogStmt.step()) {
363
- rawLog.push(rawLogStmt.get({}));
364
- }
365
- rawLogStmt.finalize();
366
- return { rawLog };
125
+ stmt.bind([new Date().toISOString(), factId, this.#userId]);
126
+ stmt.step();
127
+ stmt.finalize();
367
128
  }
368
129
  /**
369
130
  * Start background backlog processor drain loop (T-095).
@@ -438,34 +199,26 @@ export class LocalStore {
438
199
  }
439
200
  }
440
201
  /**
441
- * Process one batch of embed backlog rows (T-095).
202
+ * Process one batch of memory_facts embed backlog.
442
203
  * Uses Promise.all for parallelism across the batch (embed runs in Worker, no API limits).
443
204
  * Returns count of rows processed.
444
205
  */
445
206
  async #processEmbedBatch() {
446
- // T-115: Heap guard — skip batch if memory pressure is high
447
- const heapUsed = process.memoryUsage().heapUsed;
448
- if (heapUsed > _a.HEAP_GUARD_THRESHOLD) {
449
- // Memory pressure detected — sleep and retry later
450
- await new Promise(resolve => setTimeout(resolve, this.#embedIdleMs));
451
- return 0;
452
- }
453
- // T-115: Reduced from 50 to 8 to prevent OOM crashes from tensor pile-up
454
207
  const BATCH_SIZE = 8;
455
- // T-108: Fetch pending child rows only (parent_id IS NOT NULL).
456
- // Old parent rows (parent_id IS NULL, embed_status='pending') are left as-is for fallback search.
457
- const stmt = this.#db.prepare(`
458
- SELECT id, chunk_text FROM raw_log
459
- WHERE user_id = ? AND embed_status = 'pending' AND parent_id IS NOT NULL
208
+ // Fetch pending memory_facts rows
209
+ const memoryFactsStmt = this.#db.prepare(`
210
+ SELECT id, content AS chunk_text FROM memory_facts
211
+ WHERE user_id = ? AND embed_status = 'pending'
460
212
  ORDER BY rowid ASC
461
213
  LIMIT ?
462
214
  `);
463
- stmt.bind([this.#userId, BATCH_SIZE]);
215
+ memoryFactsStmt.bind([this.#userId, BATCH_SIZE]);
464
216
  const pendingRows = [];
465
- while (stmt.step()) {
466
- pendingRows.push(stmt.get({}));
217
+ while (memoryFactsStmt.step()) {
218
+ const row = memoryFactsStmt.get({});
219
+ pendingRows.push(row);
467
220
  }
468
- stmt.finalize();
221
+ memoryFactsStmt.finalize();
469
222
  if (pendingRows.length === 0)
470
223
  return 0;
471
224
  // Process rows concurrently with Promise.all
@@ -474,16 +227,16 @@ export class LocalStore {
474
227
  const embedding = await embed(row.chunk_text);
475
228
  const embeddingJson = serializeEmbedding(embedding);
476
229
  const embedModel = 'Xenova/bge-small-en-v1.5';
477
- // Insert into vec_raw_log (transaction per row for isolation)
230
+ // Insert into vec_raw_log (shared table for all embeddings)
478
231
  this.#db.exec('BEGIN');
479
232
  const vecStmt = this.#db.prepare(`INSERT INTO vec_raw_log(embedding) VALUES (?)`);
480
233
  vecStmt.bind([embeddingJson]);
481
234
  vecStmt.step();
482
235
  vecStmt.finalize();
483
236
  const vecRowid = this.#db.selectValue('SELECT last_insert_rowid()');
484
- // Update raw_log: embed_status='done', vec_rowid, embed_model
237
+ // Update memory_facts: embed_status='done', vec_rowid, embed_model
485
238
  const updateStmt = this.#db.prepare(`
486
- UPDATE raw_log
239
+ UPDATE memory_facts
487
240
  SET embed_status = 'done', embed_error = NULL, embed_model = ?, vec_rowid = ?
488
241
  WHERE id = ?
489
242
  `);
@@ -491,14 +244,12 @@ export class LocalStore {
491
244
  updateStmt.step();
492
245
  updateStmt.finalize();
493
246
  this.#db.exec('COMMIT');
494
- // T-103/T-115: Append new embedding to in-memory cache (with eviction)
495
- this.#pushToCache({ rowid: vecRowid, embedding });
496
247
  }
497
248
  catch (err) {
498
249
  // Embedding failed — update embed_status='failed' with error
499
250
  const errorMsg = err instanceof Error ? err.message : String(err);
500
251
  const updateStmt = this.#db.prepare(`
501
- UPDATE raw_log
252
+ UPDATE memory_facts
502
253
  SET embed_status = 'failed', embed_error = ?
503
254
  WHERE id = ?
504
255
  `);
@@ -507,7 +258,7 @@ export class LocalStore {
507
258
  updateStmt.finalize();
508
259
  }
509
260
  }));
510
- // FIX 3: Periodic WAL checkpoint to prevent unbounded growth
261
+ // Periodic WAL checkpoint to prevent unbounded growth
511
262
  const now = Date.now();
512
263
  if (now - this.#lastCheckpoint > this.#checkpointIntervalMs) {
513
264
  try {
@@ -525,5 +276,4 @@ export class LocalStore {
525
276
  this.#db.close();
526
277
  }
527
278
  }
528
- _a = LocalStore;
529
279
  //# sourceMappingURL=local-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../src/local-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Memory facts hybrid search (Layer 2 retrieval).
3
+ *
4
+ * Pipeline (same as raw-log-search, but for memory_facts table):
5
+ * 1. BM25 keyword search over memory_facts content
6
+ * 2. KNN vector search via JS cosine similarity
7
+ * 3. Reciprocal Rank Fusion (RRF, k=60) merges both ranked lists
8
+ * 4. Apply MEMORY_FACT_BOOST (2.0×) to RRF scores
9
+ * 5. Return top-k by boosted score
10
+ *
11
+ * Search is cross-session: no session filter is applied.
12
+ * The caller (LocalStore) passes its internal db handle — no separate DB connection.
13
+ */
14
+ import type { WasmDb } from './wasm-db.js';
15
+ export interface MemoryFactSearchResult {
16
+ readonly content: string;
17
+ readonly source_session_id: string;
18
+ readonly source_session_label: string | null;
19
+ readonly created_at: string;
20
+ readonly tags: readonly string[] | null;
21
+ /** Final score after RRF × MEMORY_FACT_BOOST. */
22
+ readonly final_score: number;
23
+ }
24
+ /**
25
+ * Hybrid search over memory_facts.
26
+ *
27
+ * @param db The WASM SQLite Database instance
28
+ * @param userId Scopes the search to this user's data
29
+ * @param query Natural language query string
30
+ * @param limit Number of results to return (default 10)
31
+ */
32
+ export declare function searchMemoryFacts(db: WasmDb, userId: string, query: string, limit?: number): Promise<readonly MemoryFactSearchResult[]>;
33
+ //# sourceMappingURL=memory-facts-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-facts-search.d.ts","sourceRoot":"","sources":["../src/memory-facts-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAW3C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACxC,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AA2CD;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC,CA2G5C"}