@getplumb/core 0.4.2 → 0.4.4

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 +19 -7
  6. package/dist/context-builder.d.ts.map +1 -1
  7. package/dist/context-builder.js +54 -20
  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 +5 -8
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +2 -3
  15. package/dist/index.js.map +1 -1
  16. package/dist/local-store.d.ts +24 -29
  17. package/dist/local-store.d.ts.map +1 -1
  18. package/dist/local-store.js +81 -298
  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,112 +1,22 @@
1
- import { createHash } from 'node:crypto';
2
1
  import { homedir } from 'node:os';
3
2
  import { mkdirSync } from 'node:fs';
4
3
  import { join, dirname } from 'node:path';
5
4
  import { openDb } from './wasm-db.js';
6
5
  import { applySchema } from './schema.js';
7
6
  import { embed, warmEmbedder, warmReranker } from './embedder.js';
8
- import { formatExchange } from './chunker.js';
9
- import { searchRawLog } from './raw-log-search.js';
10
- import { serializeEmbedding, deserializeEmbedding } from './vector-search.js';
11
- /**
12
- * Split text into overlapping child chunks for parent-child chunking (T-108).
13
- * Target: ~250 chars per chunk with ~50 char overlap.
14
- * Prefers sentence boundaries, falls back to word boundaries, hard-cuts at 300 chars max.
15
- *
16
- * Uses a generator to avoid materializing the full chunk array in memory,
17
- * which prevents OOM crashes on large inputs (fix for splitIntoChildren array limit bug).
18
- */
19
- function* splitIntoChildren(text) {
20
- const TARGET_SIZE = 250;
21
- const OVERLAP = 50;
22
- const MAX_SIZE = 300;
23
- const SENTENCE_ENDINGS = /[.!?]\s+/g;
24
- if (text.length <= TARGET_SIZE) {
25
- // Text is already small enough — yield as single child
26
- if (text.trim().length > 0)
27
- yield text;
28
- return;
29
- }
30
- let pos = 0;
31
- while (pos < text.length) {
32
- let endPos = Math.min(pos + TARGET_SIZE, text.length);
33
- // If we're at the end of the text, take the rest
34
- if (endPos >= text.length) {
35
- const last = text.slice(pos).trim();
36
- if (last.length > 0)
37
- yield last;
38
- break;
39
- }
40
- // Try to find a sentence boundary within the target range
41
- const segment = text.slice(pos, Math.min(pos + MAX_SIZE, text.length));
42
- const sentenceMatches = Array.from(segment.matchAll(SENTENCE_ENDINGS));
43
- if (sentenceMatches.length > 0) {
44
- // Find the last sentence boundary before TARGET_SIZE
45
- let bestMatch = sentenceMatches[0]; // Safe: array is non-empty
46
- for (const match of sentenceMatches) {
47
- if (match.index !== undefined && match.index <= TARGET_SIZE) {
48
- bestMatch = match;
49
- }
50
- else {
51
- break;
52
- }
53
- }
54
- if (bestMatch.index !== undefined && bestMatch[0] !== undefined) {
55
- endPos = pos + bestMatch.index + bestMatch[0].length;
56
- }
57
- else {
58
- // Fall back to word boundary
59
- endPos = findWordBoundary(text, pos, TARGET_SIZE, MAX_SIZE);
60
- }
61
- }
62
- else {
63
- // No sentence boundary found — fall back to word boundary
64
- endPos = findWordBoundary(text, pos, TARGET_SIZE, MAX_SIZE);
65
- }
66
- const chunk = text.slice(pos, endPos).trim();
67
- if (chunk.length > 0)
68
- yield chunk;
69
- // Move position forward, with overlap
70
- pos = endPos - OVERLAP;
71
- if (pos < 0)
72
- pos = endPos; // Safety: don't go negative
73
- }
74
- }
75
- /**
76
- * Find a word boundary near the target position.
77
- * Prefers breaking at TARGET_SIZE, but will extend up to MAX_SIZE if needed.
78
- */
79
- function findWordBoundary(text, start, targetSize, maxSize) {
80
- const targetPos = start + targetSize;
81
- const maxPos = Math.min(start + maxSize, text.length);
82
- // Look for whitespace near the target position
83
- let endPos = targetPos;
84
- // First try: find whitespace after targetPos
85
- for (let i = targetPos; i < maxPos; i++) {
86
- if (/\s/.test(text[i] ?? '')) {
87
- endPos = i + 1; // Include the whitespace
88
- break;
89
- }
90
- }
91
- // If we hit maxPos without finding whitespace, hard cut at maxPos
92
- if (endPos === targetPos && targetPos < maxPos) {
93
- endPos = maxPos;
94
- }
95
- return endPos;
96
- }
7
+ import { searchMemoryFacts } from './memory-facts-search.js';
8
+ import { serializeEmbedding } from './vector-search.js';
97
9
  export class LocalStore {
98
10
  #db;
99
11
  #userId;
100
- // Backlog processor state (T-095: drain loop)
12
+ // Backlog processor state for memory_facts embedding
101
13
  #embedDrainStopped = false;
102
14
  #embedDrainPromise = null;
103
15
  #embedIdleMs;
104
- // T-103: In-memory embedding cache for vec_raw_log (eliminates ~3,700ms SQLite load on each query)
105
- #rawLogEmbeddingCache = [];
106
- // FIX 3: WAL checkpoint throttling to prevent unbounded WAL growth
16
+ // WAL checkpoint throttling to prevent unbounded WAL growth
107
17
  #lastCheckpoint = Date.now();
108
18
  #checkpointIntervalMs = 60000; // Checkpoint every minute
109
- // FIX 4: Health check to detect stuck drain loops
19
+ // Health check to detect stuck drain loops
110
20
  #lastActivityTimestamp = Date.now();
111
21
  #healthCheckInterval = null;
112
22
  /** Expose database for plugin use (e.g., NudgeManager) */
@@ -138,208 +48,83 @@ export class LocalStore {
138
48
  applySchema(db);
139
49
  // Create store
140
50
  const store = new LocalStore(db, userId, options.backlog);
141
- // T-096: Warm embedder pipeline to eliminate 365ms cold-start on first query
142
- await warmEmbedder();
143
- // T-101: Warm reranker pipeline to eliminate ~200ms cold-start on first query
144
- // (intentionally loads ~80MB model at init for consistent <250ms query performance)
145
- await warmReranker();
146
- // T-103/T-108: Load vec_raw_log embeddings for child rows only (eliminates ~3,700ms SQLite load per query)
147
- // Child rows have parent_id IS NOT NULL. Parent rows are not embedded (embed_status='no_embed').
148
- const rawLogVecStmt = db.prepare(`
149
- SELECT v.rowid, v.embedding
150
- FROM vec_raw_log v
151
- JOIN raw_log r ON r.vec_rowid = v.rowid
152
- WHERE r.parent_id IS NOT NULL
153
- `);
154
- while (rawLogVecStmt.step()) {
155
- const row = rawLogVecStmt.get({});
156
- store.#rawLogEmbeddingCache.push({
157
- rowid: row.rowid,
158
- embedding: deserializeEmbedding(row.embedding),
159
- });
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();
160
56
  }
161
- rawLogVecStmt.finalize();
162
57
  return store;
163
58
  }
164
59
  async status() {
165
- const rawLogStmt = this.#db.prepare(`SELECT COUNT(*) AS c FROM raw_log WHERE user_id = ?`);
166
- rawLogStmt.bind([this.#userId]);
167
- rawLogStmt.step();
168
- const rawLogCount = rawLogStmt.get(0);
169
- rawLogStmt.finalize();
170
- const lastIngestionStmt = this.#db.prepare(`SELECT MAX(timestamp) AS ts FROM raw_log WHERE user_id = ?`);
171
- lastIngestionStmt.bind([this.#userId]);
172
- lastIngestionStmt.step();
173
- const lastIngestionTs = lastIngestionStmt.get(0);
174
- 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();
175
72
  const pageCount = this.#db.selectValue('PRAGMA page_count');
176
73
  const pageSize = this.#db.selectValue('PRAGMA page_size');
177
74
  return {
178
- rawLogCount,
179
- lastIngestion: lastIngestionTs !== null ? new Date(lastIngestionTs) : null,
75
+ factCount,
76
+ lastIngestion: lastFactTs !== null ? new Date(lastFactTs) : null,
180
77
  storageBytes: pageCount * pageSize,
181
78
  };
182
79
  }
183
- async ingest(exchange) {
184
- const rawLogId = crypto.randomUUID();
185
- const chunkText = formatExchange(exchange);
186
- // Compute content hash for deduplication (scoped per userId).
187
- const contentHash = createHash('sha256').update(chunkText).digest('hex');
188
- // Attempt insert — catch UNIQUE constraint violations (duplicate content_hash).
189
- try {
190
- this.#db.exec('BEGIN');
191
- // T-108: Insert parent row (no embedding, no vec_rowid).
192
- const rawLogStmt = this.#db.prepare(`
193
- INSERT INTO raw_log
194
- (id, user_id, session_id, session_label,
195
- user_message, agent_response, timestamp, source, chunk_text, chunk_index, content_hash,
196
- embed_status, embed_error, embed_model, parent_id)
197
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
198
- `);
199
- rawLogStmt.bind([
200
- rawLogId,
201
- this.#userId,
202
- exchange.sessionId,
203
- exchange.sessionLabel ?? null,
204
- exchange.userMessage,
205
- exchange.agentResponse,
206
- exchange.timestamp.toISOString(),
207
- exchange.source,
208
- chunkText,
209
- 0,
210
- contentHash,
211
- 'no_embed', // Parent is not embedded (T-108)
212
- null,
213
- null,
214
- null, // parent_id=NULL for parent rows
215
- ]);
216
- rawLogStmt.step();
217
- rawLogStmt.finalize();
218
- // T-108: Split parent into child chunks and embed each child.
219
- // splitIntoChildren is a generator — iterate lazily to avoid OOM on large inputs.
220
- let i = 0;
221
- for (const childText of splitIntoChildren(chunkText)) {
222
- const childId = crypto.randomUUID();
223
- let childEmbedding = null;
224
- let childEmbeddingJson = null;
225
- let childEmbedStatus = 'pending';
226
- let childEmbedError = null;
227
- let childEmbedModel = null;
228
- // Embed the child chunk
229
- try {
230
- childEmbedding = await embed(childText);
231
- childEmbeddingJson = serializeEmbedding(childEmbedding);
232
- childEmbedStatus = 'done';
233
- childEmbedModel = 'Xenova/bge-small-en-v1.5';
234
- }
235
- catch (err) {
236
- childEmbedStatus = 'failed';
237
- childEmbedError = err instanceof Error ? err.message : String(err);
238
- }
239
- // Insert child row
240
- const childStmt = this.#db.prepare(`
241
- INSERT INTO raw_log
242
- (id, user_id, session_id, session_label,
243
- user_message, agent_response, timestamp, source, chunk_text, chunk_index, content_hash,
244
- embed_status, embed_error, embed_model, parent_id)
245
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
246
- `);
247
- childStmt.bind([
248
- childId,
249
- this.#userId,
250
- exchange.sessionId,
251
- exchange.sessionLabel ?? null,
252
- exchange.userMessage,
253
- exchange.agentResponse,
254
- exchange.timestamp.toISOString(),
255
- exchange.source,
256
- childText,
257
- i, // chunk_index for ordering
258
- null, // No content_hash for children (they don't participate in dedup)
259
- childEmbedStatus,
260
- childEmbedError,
261
- childEmbedModel,
262
- rawLogId, // parent_id points to parent
263
- ]);
264
- childStmt.step();
265
- childStmt.finalize();
266
- // Insert child embedding into vec_raw_log if embedding succeeded
267
- if (childEmbeddingJson !== null) {
268
- const vecStmt = this.#db.prepare(`INSERT INTO vec_raw_log(embedding) VALUES (?)`);
269
- vecStmt.bind([childEmbeddingJson]);
270
- vecStmt.step();
271
- vecStmt.finalize();
272
- const vecRowid = this.#db.selectValue('SELECT last_insert_rowid()');
273
- // Back-fill vec_rowid on child row
274
- const updateStmt = this.#db.prepare(`UPDATE raw_log SET vec_rowid = ? WHERE id = ?`);
275
- updateStmt.bind([vecRowid, childId]);
276
- updateStmt.step();
277
- updateStmt.finalize();
278
- // T-103: Append child embedding to in-memory cache
279
- this.#rawLogEmbeddingCache.push({ rowid: vecRowid, embedding: childEmbedding });
280
- }
281
- i++;
282
- }
283
- this.#db.exec('COMMIT');
284
- }
285
- catch (err) {
286
- this.#db.exec('ROLLBACK');
287
- // Check for SQLite UNIQUE constraint error on content_hash.
288
- if (err instanceof Error && err.message.includes('UNIQUE constraint')) {
289
- // Duplicate content — skip ingestion.
290
- return {
291
- rawLogId: '',
292
- skipped: true,
293
- };
294
- }
295
- // Re-throw other errors (e.g., real DB issues).
296
- throw err;
297
- }
298
- return {
299
- rawLogId,
300
- };
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 };
301
109
  }
302
110
  /**
303
- * Hybrid search over raw_log (Layer 1 retrieval).
304
- * 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.
305
113
  */
306
- async searchRawLog(query, limit = 10) {
307
- // T-103: Pass in-memory embedding cache to searchRawLog (eliminates ~3,700ms SQLite load per query)
308
- return searchRawLog(this.#db, this.#userId, query, limit, this.#rawLogEmbeddingCache);
114
+ async searchMemoryFacts(query, limit = 10) {
115
+ return searchMemoryFacts(this.#db, this.#userId, query, limit);
309
116
  }
310
117
  /**
311
- * Export all data for a user (for plumb export command).
312
- * 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.
313
120
  */
314
- exportAll(userId) {
315
- // Export all raw_log entries (no vector data).
316
- const rawLogStmt = this.#db.prepare(`
317
- SELECT
318
- id,
319
- user_id AS userId,
320
- session_id AS sessionId,
321
- session_label AS sessionLabel,
322
- user_message AS userMessage,
323
- agent_response AS agentResponse,
324
- timestamp,
325
- source,
326
- chunk_text AS chunkText,
327
- chunk_index AS chunkIndex,
328
- content_hash AS contentHash,
329
- embed_status AS embedStatus,
330
- embed_error AS embedError,
331
- embed_model AS embedModel
332
- FROM raw_log
333
- WHERE user_id = ?
334
- 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 = ?
335
124
  `);
336
- rawLogStmt.bind([userId]);
337
- const rawLog = [];
338
- while (rawLogStmt.step()) {
339
- rawLog.push(rawLogStmt.get({}));
340
- }
341
- rawLogStmt.finalize();
342
- return { rawLog };
125
+ stmt.bind([new Date().toISOString(), factId, this.#userId]);
126
+ stmt.step();
127
+ stmt.finalize();
343
128
  }
344
129
  /**
345
130
  * Start background backlog processor drain loop (T-095).
@@ -414,26 +199,26 @@ export class LocalStore {
414
199
  }
415
200
  }
416
201
  /**
417
- * Process one batch of embed backlog rows (T-095).
202
+ * Process one batch of memory_facts embed backlog.
418
203
  * Uses Promise.all for parallelism across the batch (embed runs in Worker, no API limits).
419
204
  * Returns count of rows processed.
420
205
  */
421
206
  async #processEmbedBatch() {
422
- const BATCH_SIZE = 50; // Large batch — embed is CPU-bound, no rate limit
423
- // T-108: Fetch pending child rows only (parent_id IS NOT NULL).
424
- // Old parent rows (parent_id IS NULL, embed_status='pending') are left as-is for fallback search.
425
- const stmt = this.#db.prepare(`
426
- SELECT id, chunk_text FROM raw_log
427
- WHERE user_id = ? AND embed_status = 'pending' AND parent_id IS NOT NULL
207
+ const BATCH_SIZE = 8;
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'
428
212
  ORDER BY rowid ASC
429
213
  LIMIT ?
430
214
  `);
431
- stmt.bind([this.#userId, BATCH_SIZE]);
215
+ memoryFactsStmt.bind([this.#userId, BATCH_SIZE]);
432
216
  const pendingRows = [];
433
- while (stmt.step()) {
434
- pendingRows.push(stmt.get({}));
217
+ while (memoryFactsStmt.step()) {
218
+ const row = memoryFactsStmt.get({});
219
+ pendingRows.push(row);
435
220
  }
436
- stmt.finalize();
221
+ memoryFactsStmt.finalize();
437
222
  if (pendingRows.length === 0)
438
223
  return 0;
439
224
  // Process rows concurrently with Promise.all
@@ -442,16 +227,16 @@ export class LocalStore {
442
227
  const embedding = await embed(row.chunk_text);
443
228
  const embeddingJson = serializeEmbedding(embedding);
444
229
  const embedModel = 'Xenova/bge-small-en-v1.5';
445
- // Insert into vec_raw_log (transaction per row for isolation)
230
+ // Insert into vec_raw_log (shared table for all embeddings)
446
231
  this.#db.exec('BEGIN');
447
232
  const vecStmt = this.#db.prepare(`INSERT INTO vec_raw_log(embedding) VALUES (?)`);
448
233
  vecStmt.bind([embeddingJson]);
449
234
  vecStmt.step();
450
235
  vecStmt.finalize();
451
236
  const vecRowid = this.#db.selectValue('SELECT last_insert_rowid()');
452
- // Update raw_log: embed_status='done', vec_rowid, embed_model
237
+ // Update memory_facts: embed_status='done', vec_rowid, embed_model
453
238
  const updateStmt = this.#db.prepare(`
454
- UPDATE raw_log
239
+ UPDATE memory_facts
455
240
  SET embed_status = 'done', embed_error = NULL, embed_model = ?, vec_rowid = ?
456
241
  WHERE id = ?
457
242
  `);
@@ -459,14 +244,12 @@ export class LocalStore {
459
244
  updateStmt.step();
460
245
  updateStmt.finalize();
461
246
  this.#db.exec('COMMIT');
462
- // T-103: Append new embedding to in-memory cache
463
- this.#rawLogEmbeddingCache.push({ rowid: vecRowid, embedding });
464
247
  }
465
248
  catch (err) {
466
249
  // Embedding failed — update embed_status='failed' with error
467
250
  const errorMsg = err instanceof Error ? err.message : String(err);
468
251
  const updateStmt = this.#db.prepare(`
469
- UPDATE raw_log
252
+ UPDATE memory_facts
470
253
  SET embed_status = 'failed', embed_error = ?
471
254
  WHERE id = ?
472
255
  `);
@@ -475,7 +258,7 @@ export class LocalStore {
475
258
  updateStmt.finalize();
476
259
  }
477
260
  }));
478
- // FIX 3: Periodic WAL checkpoint to prevent unbounded growth
261
+ // Periodic WAL checkpoint to prevent unbounded growth
479
262
  const now = Date.now();
480
263
  if (now - this.#lastCheckpoint > this.#checkpointIntervalMs) {
481
264
  try {
@@ -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"}