@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.
- 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 +19 -7
- package/dist/context-builder.d.ts.map +1 -1
- package/dist/context-builder.js +54 -20
- 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 +5 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/local-store.d.ts +24 -29
- package/dist/local-store.d.ts.map +1 -1
- package/dist/local-store.js +81 -298
- 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,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 {
|
|
9
|
-
import {
|
|
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
|
|
12
|
+
// Backlog processor state for memory_facts embedding
|
|
101
13
|
#embedDrainStopped = false;
|
|
102
14
|
#embedDrainPromise = null;
|
|
103
15
|
#embedIdleMs;
|
|
104
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
-
|
|
179
|
-
lastIngestion:
|
|
75
|
+
factCount,
|
|
76
|
+
lastIngestion: lastFactTs !== null ? new Date(lastFactTs) : null,
|
|
180
77
|
storageBytes: pageCount * pageSize,
|
|
181
78
|
};
|
|
182
79
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
|
304
|
-
* See
|
|
111
|
+
* Hybrid search over memory_facts (Layer 2 retrieval).
|
|
112
|
+
* See memory-facts-search.ts for the full pipeline description.
|
|
305
113
|
*/
|
|
306
|
-
async
|
|
307
|
-
|
|
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
|
-
*
|
|
312
|
-
*
|
|
118
|
+
* Soft-delete a memory fact by id (sets deleted_at timestamp).
|
|
119
|
+
* Soft-deleted facts are excluded from search results.
|
|
313
120
|
*/
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|
|
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 =
|
|
423
|
-
//
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
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
|
-
|
|
215
|
+
memoryFactsStmt.bind([this.#userId, BATCH_SIZE]);
|
|
432
216
|
const pendingRows = [];
|
|
433
|
-
while (
|
|
434
|
-
|
|
217
|
+
while (memoryFactsStmt.step()) {
|
|
218
|
+
const row = memoryFactsStmt.get({});
|
|
219
|
+
pendingRows.push(row);
|
|
435
220
|
}
|
|
436
|
-
|
|
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 (
|
|
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
|
|
237
|
+
// Update memory_facts: embed_status='done', vec_rowid, embed_model
|
|
453
238
|
const updateStmt = this.#db.prepare(`
|
|
454
|
-
UPDATE
|
|
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
|
|
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
|
-
//
|
|
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 {
|
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":"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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"}
|