@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.
- package/dist/chunker.d.ts +2 -27
- package/dist/chunker.d.ts.map +1 -1
- package/dist/chunker.js +2 -36
- package/dist/chunker.js.map +1 -1
- package/dist/context-builder.d.ts +18 -6
- package/dist/context-builder.d.ts.map +1 -1
- package/dist/context-builder.js +48 -24
- package/dist/context-builder.js.map +1 -1
- package/dist/embedder.d.ts.map +1 -1
- package/dist/embedder.js +6 -0
- package/dist/embedder.js.map +1 -1
- package/dist/index.d.ts +4 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/local-store.d.ts +24 -31
- package/dist/local-store.d.ts.map +1 -1
- package/dist/local-store.js +81 -331
- package/dist/local-store.js.map +1 -1
- package/dist/memory-facts-search.d.ts +33 -0
- package/dist/memory-facts-search.d.ts.map +1 -0
- package/dist/memory-facts-search.js +143 -0
- package/dist/memory-facts-search.js.map +1 -0
- package/dist/read-path.d.ts +22 -13
- package/dist/read-path.d.ts.map +1 -1
- package/dist/read-path.js +19 -15
- package/dist/read-path.js.map +1 -1
- package/dist/schema.d.ts +13 -8
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +63 -83
- package/dist/schema.js.map +1 -1
- package/dist/scorer.d.ts +12 -10
- package/dist/scorer.d.ts.map +1 -1
- package/dist/scorer.js +13 -10
- package/dist/scorer.js.map +1 -1
- package/dist/store.d.ts +1 -6
- package/dist/store.d.ts.map +1 -1
- package/dist/types.d.ts +27 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/wasm-db.d.ts +17 -20
- package/dist/wasm-db.d.ts.map +1 -1
- package/dist/wasm-db.js +51 -56
- package/dist/wasm-db.js.map +1 -1
- package/package.json +5 -6
package/dist/local-store.js
CHANGED
|
@@ -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 {
|
|
10
|
-
import {
|
|
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
|
|
12
|
+
// Backlog processor state for memory_facts embedding
|
|
102
13
|
#embedDrainStopped = false;
|
|
103
14
|
#embedDrainPromise = null;
|
|
104
15
|
#embedIdleMs;
|
|
105
|
-
//
|
|
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
|
-
//
|
|
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
|
|
158
|
-
//
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
|
|
200
|
-
lastIngestion:
|
|
75
|
+
factCount,
|
|
76
|
+
lastIngestion: lastFactTs !== null ? new Date(lastFactTs) : null,
|
|
201
77
|
storageBytes: pageCount * pageSize,
|
|
202
78
|
};
|
|
203
79
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
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
|
|
325
|
-
* See
|
|
111
|
+
* Hybrid search over memory_facts (Layer 2 retrieval).
|
|
112
|
+
* See memory-facts-search.ts for the full pipeline description.
|
|
326
113
|
*/
|
|
327
|
-
async
|
|
328
|
-
|
|
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
|
-
*
|
|
336
|
-
*
|
|
118
|
+
* Soft-delete a memory fact by id (sets deleted_at timestamp).
|
|
119
|
+
* Soft-deleted facts are excluded from search results.
|
|
337
120
|
*/
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
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
|
-
|
|
361
|
-
|
|
362
|
-
|
|
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
|
|
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
|
-
//
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
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
|
-
|
|
215
|
+
memoryFactsStmt.bind([this.#userId, BATCH_SIZE]);
|
|
464
216
|
const pendingRows = [];
|
|
465
|
-
while (
|
|
466
|
-
|
|
217
|
+
while (memoryFactsStmt.step()) {
|
|
218
|
+
const row = memoryFactsStmt.get({});
|
|
219
|
+
pendingRows.push(row);
|
|
467
220
|
}
|
|
468
|
-
|
|
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 (
|
|
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
|
|
237
|
+
// Update memory_facts: embed_status='done', vec_rowid, embed_model
|
|
485
238
|
const updateStmt = this.#db.prepare(`
|
|
486
|
-
UPDATE
|
|
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
|
|
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
|
-
//
|
|
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
|
package/dist/local-store.js.map
CHANGED
|
@@ -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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAe,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAA+B,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAwB,MAAM,oBAAoB,CAAC;AA2B9E,MAAM,OAAO,UAAU;IACZ,GAAG,CAAS;IACZ,OAAO,CAAS;IAEzB,qDAAqD;IACrD,kBAAkB,GAAG,KAAK,CAAC;IAC3B,kBAAkB,GAAyB,IAAI,CAAC;IACvC,YAAY,CAAS;IAE9B,4DAA4D;IAC5D,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,qBAAqB,GAAG,KAAK,CAAC,CAAC,0BAA0B;IAEzD,2CAA2C;IAC3C,sBAAsB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,oBAAoB,GAA0C,IAAI,CAAC;IAEnE,0DAA0D;IAC1D,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,mCAAmC;IACnC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YACE,EAAU,EACV,MAAc,EACd,OAAsC;QAEtC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,sCAAsC;QACtC,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAC;IACnD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAA6B,EAAE;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;QAE3C,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEhD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAEhC,mCAAmC;QACnC,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACrC,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAEpC,WAAW,CAAC,EAAE,CAAC,CAAC;QAEhB,eAAe;QACf,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAE1D,uEAAuE;QACvE,4FAA4F;QAC5F,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,MAAM,YAAY,EAAE,CAAC;YACrB,MAAM,YAAY,EAAE,CAAC;QACvB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,MAAM;QACV,iCAAiC;QACjC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CACpC,mFAAmF,CACpF,CAAC;QACF,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,aAAa,CAAC,IAAI,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAW,CAAC;QACjD,aAAa,CAAC,QAAQ,EAAE,CAAC;QAEzB,oDAAoD;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CACnC,kEAAkE,CACnE,CAAC;QACF,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,YAAY,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACvC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAW,CAAC;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,kBAAkB,CAAW,CAAC;QAEpE,OAAO;YACL,SAAS;YACT,aAAa,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAoB,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1E,YAAY,EAAE,SAAS,GAAG,QAAQ;SACnC,CAAC;IACJ,CAAC;IAGD;;;;OAIG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAA4B;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC;QAE5C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;;;KAI7B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC;YACR,MAAM;YACN,IAAI,CAAC,OAAO;YACZ,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,eAAe;YACrB,QAAQ;YACR,UAAU;YACV,SAAS;YACT,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxB,SAAS;SACV,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE;QAC/C,OAAO,iBAAiB,CACtB,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,OAAO,EACZ,KAAK,EACL,KAAK,CACN,CAAC;IACJ,CAAC;IAGD;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;KAE7B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAGD;;;OAGG;IACH,qBAAqB;QACnB,yBAAyB;QACzB,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnD,CAAC;QAED,8EAA8E;QAC9E,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;gBAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC;gBAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,2BAA2B;gBAEzD,uDAAuD;gBACvD,IAAI,QAAQ,GAAG,aAAa,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;oBACzD,OAAO,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;oBACxF,KAAK,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACnC,CAAC;YACH,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,qBAAqB;QAClC,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,oBAAoB;QACxB,qCAAqC;QACrC,IAAI,IAAI,CAAC,oBAAoB,KAAK,IAAI,EAAE,CAAC;YACvC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACzC,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAE/B,kEAAkE;QAClE,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,kBAAkB,CAAC;YAC9B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,eAAe;QACnB,iDAAiD;QACjD,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAChC,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,iDAAiD;QAEjF,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAElD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;gBACpB,uBAAuB,EAAE,CAAC;gBAE1B,2DAA2D;gBAC3D,IAAI,uBAAuB,IAAI,iBAAiB,EAAE,CAAC;oBACjD,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;oBAChF,IAAI,IAAI,CAAC,kBAAkB;wBAAE,MAAM;oBACnC,uBAAuB,GAAG,CAAC,CAAC,CAAC,qBAAqB;gBACpD,CAAC;gBAED,+CAA+C;gBAC/C,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,uBAAuB,GAAG,CAAC,CAAC;gBAC5B,mCAAmC;gBACnC,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC3C,CAAC;YACD,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB;QACtB,MAAM,UAAU,GAAG,CAAC,CAAC;QAErB,kCAAkC;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;;;;KAKxC,CAAC,CAAC;QACH,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QAEjD,MAAM,WAAW,GAA8C,EAAE,CAAC;QAClE,OAAO,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,EAAE,CAAuC,CAAC;YAC1E,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;QACD,eAAe,CAAC,QAAQ,EAAE,CAAC;QAE3B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEvC,6CAA6C;QAC7C,MAAM,OAAO,CAAC,GAAG,CACf,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC9C,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,UAAU,GAAG,0BAA0B,CAAC;gBAE9C,4DAA4D;gBAC5D,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,+CAA+C,CAAC,CAAC;gBAClF,OAAO,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC9B,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,4BAA4B,CAAW,CAAC;gBAE9E,mEAAmE;gBACnE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;;;WAInC,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChD,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClB,UAAU,CAAC,QAAQ,EAAE,CAAC;gBAEtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,6DAA6D;gBAC7D,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;;;;WAInC,CAAC,CAAC;gBACH,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpC,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClB,UAAU,CAAC,QAAQ,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,sDAAsD;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAChD,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;YAC7B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,qEAAqE;IACrE,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -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"}
|