@getplumb/core 0.1.2 → 0.1.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/README.md +6 -5
- package/dist/extraction-queue.d.ts +62 -0
- package/dist/extraction-queue.d.ts.map +1 -0
- package/dist/extraction-queue.js +84 -0
- package/dist/extraction-queue.js.map +1 -0
- package/dist/fact-search.d.ts +4 -4
- package/dist/fact-search.d.ts.map +1 -1
- package/dist/fact-search.js +33 -23
- package/dist/fact-search.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/local-store.d.ts +18 -4
- package/dist/local-store.d.ts.map +1 -1
- package/dist/local-store.js +180 -76
- package/dist/local-store.js.map +1 -1
- package/dist/raw-log-search.d.ts +4 -4
- package/dist/raw-log-search.d.ts.map +1 -1
- package/dist/raw-log-search.js +31 -25
- package/dist/raw-log-search.js.map +1 -1
- package/dist/schema.d.ts +7 -8
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +25 -12
- package/dist/schema.js.map +1 -1
- package/dist/vector-search.d.ts +38 -0
- package/dist/vector-search.d.ts.map +1 -0
- package/dist/vector-search.js +59 -0
- package/dist/vector-search.js.map +1 -0
- package/dist/wasm-db.d.ts +14 -0
- package/dist/wasm-db.d.ts.map +1 -0
- package/dist/wasm-db.js +40 -0
- package/dist/wasm-db.js.map +1 -0
- package/package.json +10 -13
package/dist/local-store.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import Database from 'better-sqlite3';
|
|
2
|
-
import * as sqliteVec from 'sqlite-vec';
|
|
3
1
|
import { createHash } from 'node:crypto';
|
|
4
2
|
import { homedir } from 'node:os';
|
|
5
3
|
import { mkdirSync } from 'node:fs';
|
|
6
4
|
import { join, dirname } from 'node:path';
|
|
5
|
+
import { openDb } from './wasm-db.js';
|
|
7
6
|
import { applySchema } from './schema.js';
|
|
8
7
|
import { extractFacts } from './extractor.js';
|
|
9
8
|
import { callLLMWithConfig } from './llm-client.js';
|
|
@@ -11,11 +10,13 @@ import { embed } from './embedder.js';
|
|
|
11
10
|
import { formatExchange } from './chunker.js';
|
|
12
11
|
import { searchRawLog } from './raw-log-search.js';
|
|
13
12
|
import { searchFacts } from './fact-search.js';
|
|
13
|
+
import { ExtractionQueue } from './extraction-queue.js';
|
|
14
|
+
import { serializeEmbedding } from './vector-search.js';
|
|
14
15
|
export class LocalStore {
|
|
15
16
|
#db;
|
|
16
17
|
#userId;
|
|
17
18
|
#llmConfig;
|
|
18
|
-
#
|
|
19
|
+
#extractionQueue;
|
|
19
20
|
/** Expose database for plugin use (e.g., NudgeManager) */
|
|
20
21
|
get db() {
|
|
21
22
|
return this.#db;
|
|
@@ -24,38 +25,96 @@ export class LocalStore {
|
|
|
24
25
|
get userId() {
|
|
25
26
|
return this.#userId;
|
|
26
27
|
}
|
|
27
|
-
|
|
28
|
+
/** Expose extraction queue for lifecycle management (start/stop) */
|
|
29
|
+
get extractionQueue() {
|
|
30
|
+
return this.#extractionQueue;
|
|
31
|
+
}
|
|
32
|
+
constructor(db, userId, llmConfig, extractionQueue) {
|
|
33
|
+
this.#db = db;
|
|
34
|
+
this.#userId = userId;
|
|
35
|
+
this.#llmConfig = llmConfig;
|
|
36
|
+
this.#extractionQueue = extractionQueue;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Create a new LocalStore instance (async factory).
|
|
40
|
+
* Required because WASM initialization is async.
|
|
41
|
+
*/
|
|
42
|
+
static async create(options = {}) {
|
|
28
43
|
const dbPath = options.dbPath ?? join(homedir(), '.plumb', 'memory.db');
|
|
29
|
-
|
|
30
|
-
|
|
44
|
+
const userId = options.userId ?? 'default';
|
|
45
|
+
const llmConfig = options.llmConfig;
|
|
31
46
|
mkdirSync(dirname(dbPath), { recursive: true });
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
const db = await openDb(dbPath);
|
|
48
|
+
// Enable WAL mode and foreign keys
|
|
49
|
+
db.exec('PRAGMA journal_mode = WAL');
|
|
50
|
+
db.exec('PRAGMA foreign_keys = ON');
|
|
51
|
+
applySchema(db);
|
|
52
|
+
// Use a mutable cell to hold the store reference (needed for circular dependency)
|
|
53
|
+
let storeRef = null;
|
|
54
|
+
// Initialize extraction queue with deferred store lookup
|
|
55
|
+
const extractFn = (exchange, userId) => {
|
|
56
|
+
if (!storeRef)
|
|
57
|
+
throw new Error('Store not initialized');
|
|
58
|
+
const llmFn = llmConfig
|
|
59
|
+
? (prompt) => callLLMWithConfig(prompt, llmConfig)
|
|
60
|
+
: undefined;
|
|
61
|
+
return extractFacts(exchange, userId, storeRef, llmFn);
|
|
62
|
+
};
|
|
63
|
+
const extractionQueue = options.extractionQueue ?? new ExtractionQueue(extractFn);
|
|
64
|
+
// Create store and assign to ref
|
|
65
|
+
const store = new LocalStore(db, userId, llmConfig, extractionQueue);
|
|
66
|
+
storeRef = store;
|
|
67
|
+
return store;
|
|
38
68
|
}
|
|
39
69
|
async store(fact) {
|
|
40
70
|
const id = crypto.randomUUID();
|
|
41
71
|
// Embed concatenated fact text for vector search.
|
|
42
72
|
const text = `${fact.subject} ${fact.predicate} ${fact.object} ${fact.context ?? ''}`.trim();
|
|
43
73
|
const embedding = await embed(text);
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
74
|
+
const embeddingJson = serializeEmbedding(embedding);
|
|
75
|
+
// Begin transaction
|
|
76
|
+
this.#db.exec('BEGIN');
|
|
77
|
+
try {
|
|
78
|
+
// Insert fact
|
|
79
|
+
const factStmt = this.#db.prepare(`
|
|
47
80
|
INSERT INTO facts
|
|
48
81
|
(id, user_id, subject, predicate, object,
|
|
49
82
|
confidence, decay_rate, timestamp, source_session_id,
|
|
50
83
|
source_session_label, context)
|
|
51
84
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
52
|
-
`)
|
|
53
|
-
|
|
54
|
-
|
|
85
|
+
`);
|
|
86
|
+
factStmt.bind([
|
|
87
|
+
id,
|
|
88
|
+
this.#userId,
|
|
89
|
+
fact.subject,
|
|
90
|
+
fact.predicate,
|
|
91
|
+
fact.object,
|
|
92
|
+
fact.confidence,
|
|
93
|
+
fact.decayRate,
|
|
94
|
+
fact.timestamp.toISOString(),
|
|
95
|
+
fact.sourceSessionId,
|
|
96
|
+
fact.sourceSessionLabel ?? null,
|
|
97
|
+
fact.context ?? null,
|
|
98
|
+
]);
|
|
99
|
+
factStmt.step();
|
|
100
|
+
factStmt.finalize();
|
|
101
|
+
// Insert embedding into vec_facts (auto-assigned id).
|
|
102
|
+
const vecStmt = this.#db.prepare(`INSERT INTO vec_facts(embedding) VALUES (?)`);
|
|
103
|
+
vecStmt.bind([embeddingJson]);
|
|
104
|
+
vecStmt.step();
|
|
105
|
+
vecStmt.finalize();
|
|
106
|
+
const vecRowid = this.#db.selectValue('SELECT last_insert_rowid()');
|
|
55
107
|
// Back-fill vec_rowid so fact-search can join without a mapping table.
|
|
56
|
-
this.#db.prepare(`UPDATE facts SET vec_rowid = ? WHERE id = ?`)
|
|
57
|
-
|
|
58
|
-
|
|
108
|
+
const updateStmt = this.#db.prepare(`UPDATE facts SET vec_rowid = ? WHERE id = ?`);
|
|
109
|
+
updateStmt.bind([vecRowid, id]);
|
|
110
|
+
updateStmt.step();
|
|
111
|
+
updateStmt.finalize();
|
|
112
|
+
this.#db.exec('COMMIT');
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
this.#db.exec('ROLLBACK');
|
|
116
|
+
throw err;
|
|
117
|
+
}
|
|
59
118
|
return id;
|
|
60
119
|
}
|
|
61
120
|
async search(query, limit = 20) {
|
|
@@ -63,20 +122,35 @@ export class LocalStore {
|
|
|
63
122
|
}
|
|
64
123
|
async delete(id) {
|
|
65
124
|
// Soft delete only — never hard delete.
|
|
66
|
-
this.#db.prepare(`
|
|
125
|
+
const stmt = this.#db.prepare(`
|
|
67
126
|
UPDATE facts SET deleted_at = ? WHERE id = ? AND user_id = ?
|
|
68
|
-
`)
|
|
127
|
+
`);
|
|
128
|
+
stmt.bind([new Date().toISOString(), id, this.#userId]);
|
|
129
|
+
stmt.step();
|
|
130
|
+
stmt.finalize();
|
|
69
131
|
}
|
|
70
132
|
async status() {
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
133
|
+
const factStmt = this.#db.prepare(`SELECT COUNT(*) AS c FROM facts WHERE user_id = ? AND deleted_at IS NULL`);
|
|
134
|
+
factStmt.bind([this.#userId]);
|
|
135
|
+
factStmt.step();
|
|
136
|
+
const factCount = factStmt.get(0);
|
|
137
|
+
factStmt.finalize();
|
|
138
|
+
const rawLogStmt = this.#db.prepare(`SELECT COUNT(*) AS c FROM raw_log WHERE user_id = ?`);
|
|
139
|
+
rawLogStmt.bind([this.#userId]);
|
|
140
|
+
rawLogStmt.step();
|
|
141
|
+
const rawLogCount = rawLogStmt.get(0);
|
|
142
|
+
rawLogStmt.finalize();
|
|
143
|
+
const lastIngestionStmt = this.#db.prepare(`SELECT MAX(timestamp) AS ts FROM raw_log WHERE user_id = ?`);
|
|
144
|
+
lastIngestionStmt.bind([this.#userId]);
|
|
145
|
+
lastIngestionStmt.step();
|
|
146
|
+
const lastIngestionTs = lastIngestionStmt.get(0);
|
|
147
|
+
lastIngestionStmt.finalize();
|
|
148
|
+
const pageCount = this.#db.selectValue('PRAGMA page_count');
|
|
149
|
+
const pageSize = this.#db.selectValue('PRAGMA page_size');
|
|
76
150
|
return {
|
|
77
151
|
factCount,
|
|
78
152
|
rawLogCount,
|
|
79
|
-
lastIngestion:
|
|
153
|
+
lastIngestion: lastIngestionTs !== null ? new Date(lastIngestionTs) : null,
|
|
80
154
|
storageBytes: pageCount * pageSize,
|
|
81
155
|
};
|
|
82
156
|
}
|
|
@@ -85,31 +159,51 @@ export class LocalStore {
|
|
|
85
159
|
const chunkText = formatExchange(exchange);
|
|
86
160
|
// Compute content hash for deduplication (scoped per userId).
|
|
87
161
|
const contentHash = createHash('sha256').update(chunkText).digest('hex');
|
|
88
|
-
// Embed before opening the
|
|
162
|
+
// Embed before opening the DB transaction.
|
|
89
163
|
const embedding = await embed(chunkText);
|
|
90
|
-
const
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
this.#db.prepare(`
|
|
164
|
+
const embeddingJson = serializeEmbedding(embedding);
|
|
165
|
+
// Attempt insert — catch UNIQUE constraint violations (duplicate content_hash).
|
|
166
|
+
try {
|
|
167
|
+
this.#db.exec('BEGIN');
|
|
168
|
+
// Insert into raw_log
|
|
169
|
+
const rawLogStmt = this.#db.prepare(`
|
|
96
170
|
INSERT INTO raw_log
|
|
97
171
|
(id, user_id, session_id, session_label,
|
|
98
172
|
user_message, agent_response, timestamp, source, chunk_text, chunk_index, content_hash)
|
|
99
173
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
100
|
-
`)
|
|
101
|
-
|
|
102
|
-
|
|
174
|
+
`);
|
|
175
|
+
rawLogStmt.bind([
|
|
176
|
+
rawLogId,
|
|
177
|
+
this.#userId,
|
|
178
|
+
exchange.sessionId,
|
|
179
|
+
exchange.sessionLabel ?? null,
|
|
180
|
+
exchange.userMessage,
|
|
181
|
+
exchange.agentResponse,
|
|
182
|
+
exchange.timestamp.toISOString(),
|
|
183
|
+
exchange.source,
|
|
184
|
+
chunkText,
|
|
185
|
+
0,
|
|
186
|
+
contentHash,
|
|
187
|
+
]);
|
|
188
|
+
rawLogStmt.step();
|
|
189
|
+
rawLogStmt.finalize();
|
|
190
|
+
// Insert embedding into vec_raw_log (auto-assigned id).
|
|
191
|
+
const vecStmt = this.#db.prepare(`INSERT INTO vec_raw_log(embedding) VALUES (?)`);
|
|
192
|
+
vecStmt.bind([embeddingJson]);
|
|
193
|
+
vecStmt.step();
|
|
194
|
+
vecStmt.finalize();
|
|
195
|
+
const vecRowid = this.#db.selectValue('SELECT last_insert_rowid()');
|
|
103
196
|
// Back-fill vec_rowid so raw-log-search can join without a mapping table.
|
|
104
|
-
this.#db.prepare(`UPDATE raw_log SET vec_rowid = ? WHERE id = ?`)
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
197
|
+
const updateStmt = this.#db.prepare(`UPDATE raw_log SET vec_rowid = ? WHERE id = ?`);
|
|
198
|
+
updateStmt.bind([vecRowid, rawLogId]);
|
|
199
|
+
updateStmt.step();
|
|
200
|
+
updateStmt.finalize();
|
|
201
|
+
this.#db.exec('COMMIT');
|
|
109
202
|
}
|
|
110
203
|
catch (err) {
|
|
204
|
+
this.#db.exec('ROLLBACK');
|
|
111
205
|
// Check for SQLite UNIQUE constraint error on content_hash.
|
|
112
|
-
if (err instanceof Error &&
|
|
206
|
+
if (err instanceof Error && err.message.includes('UNIQUE constraint')) {
|
|
113
207
|
// Duplicate content — skip ingestion and fact extraction.
|
|
114
208
|
return {
|
|
115
209
|
rawLogId: '',
|
|
@@ -121,20 +215,9 @@ export class LocalStore {
|
|
|
121
215
|
// Re-throw other errors (e.g., real DB issues).
|
|
122
216
|
throw err;
|
|
123
217
|
}
|
|
124
|
-
// Layer 2:
|
|
125
|
-
//
|
|
126
|
-
|
|
127
|
-
? (prompt) => callLLMWithConfig(prompt, this.#llmConfig)
|
|
128
|
-
: undefined;
|
|
129
|
-
const extractionPromise = extractFacts(exchange, this.#userId, this, llmFn)
|
|
130
|
-
.catch((err) => {
|
|
131
|
-
console.error('[plumb/local-store] Fact extraction failed:', err);
|
|
132
|
-
return []; // Return empty array on error
|
|
133
|
-
})
|
|
134
|
-
.finally(() => {
|
|
135
|
-
this.#inFlightExtractions.delete(extractionPromise);
|
|
136
|
-
});
|
|
137
|
-
this.#inFlightExtractions.add(extractionPromise);
|
|
218
|
+
// Layer 2: enqueue exchange for batched fact extraction (T-071).
|
|
219
|
+
// ExtractionQueue handles draining on interval or batch size threshold.
|
|
220
|
+
this.#extractionQueue.enqueue(exchange, this.#userId);
|
|
138
221
|
return {
|
|
139
222
|
rawLogId,
|
|
140
223
|
factsExtracted: 0,
|
|
@@ -149,13 +232,12 @@ export class LocalStore {
|
|
|
149
232
|
return searchRawLog(this.#db, this.#userId, query, limit);
|
|
150
233
|
}
|
|
151
234
|
/**
|
|
152
|
-
* Wait for all
|
|
235
|
+
* Wait for all queued fact extractions to complete.
|
|
153
236
|
* Call this before close() to ensure all async work is done.
|
|
237
|
+
* Delegates to ExtractionQueue.flush().
|
|
154
238
|
*/
|
|
155
239
|
async drain() {
|
|
156
|
-
|
|
157
|
-
return;
|
|
158
|
-
await Promise.allSettled(Array.from(this.#inFlightExtractions));
|
|
240
|
+
await this.#extractionQueue.flush();
|
|
159
241
|
}
|
|
160
242
|
/**
|
|
161
243
|
* Re-extract facts for orphaned raw_log chunks (chunks with no corresponding facts).
|
|
@@ -171,10 +253,7 @@ export class LocalStore {
|
|
|
171
253
|
*/
|
|
172
254
|
async reextractOrphans(throttleMs = 1000) {
|
|
173
255
|
// Query for raw_log entries with no corresponding facts.
|
|
174
|
-
|
|
175
|
-
// we skip the entire session. This is conservative but prevents re-extracting
|
|
176
|
-
// sessions that already have partial facts.
|
|
177
|
-
const orphanRows = this.#db.prepare(`
|
|
256
|
+
const stmt = this.#db.prepare(`
|
|
178
257
|
SELECT
|
|
179
258
|
id,
|
|
180
259
|
user_id AS userId,
|
|
@@ -191,7 +270,14 @@ export class LocalStore {
|
|
|
191
270
|
WHERE facts.source_session_id = raw_log.session_id
|
|
192
271
|
)
|
|
193
272
|
ORDER BY timestamp ASC
|
|
194
|
-
`)
|
|
273
|
+
`);
|
|
274
|
+
stmt.bind([this.#userId]);
|
|
275
|
+
const orphanRows = [];
|
|
276
|
+
while (stmt.step()) {
|
|
277
|
+
const row = stmt.get({});
|
|
278
|
+
orphanRows.push(row);
|
|
279
|
+
}
|
|
280
|
+
stmt.finalize();
|
|
195
281
|
const orphansFound = orphanRows.length;
|
|
196
282
|
if (orphansFound === 0) {
|
|
197
283
|
return { orphansFound: 0, factsCreated: 0 };
|
|
@@ -200,7 +286,7 @@ export class LocalStore {
|
|
|
200
286
|
for (let i = 0; i < orphanRows.length; i++) {
|
|
201
287
|
const row = orphanRows[i];
|
|
202
288
|
if (!row)
|
|
203
|
-
continue;
|
|
289
|
+
continue;
|
|
204
290
|
// Reconstruct MessageExchange from raw_log data
|
|
205
291
|
const exchange = {
|
|
206
292
|
userMessage: row.userMessage,
|
|
@@ -208,7 +294,6 @@ export class LocalStore {
|
|
|
208
294
|
timestamp: new Date(row.timestamp),
|
|
209
295
|
source: row.source,
|
|
210
296
|
sessionId: row.sessionId,
|
|
211
|
-
// Conditionally include sessionLabel only if it's not null (exactOptionalPropertyTypes)
|
|
212
297
|
...(row.sessionLabel !== null ? { sessionLabel: row.sessionLabel } : {}),
|
|
213
298
|
};
|
|
214
299
|
// Extract facts directly (bypasses ingest dedup gate)
|
|
@@ -235,14 +320,21 @@ export class LocalStore {
|
|
|
235
320
|
* Returns subjects ordered by number of facts (non-deleted only).
|
|
236
321
|
*/
|
|
237
322
|
topSubjects(userId, limit = 5) {
|
|
238
|
-
|
|
323
|
+
const stmt = this.#db.prepare(`
|
|
239
324
|
SELECT subject, COUNT(*) as count
|
|
240
325
|
FROM facts
|
|
241
326
|
WHERE user_id = ? AND deleted_at IS NULL
|
|
242
327
|
GROUP BY subject
|
|
243
328
|
ORDER BY count DESC
|
|
244
329
|
LIMIT ?
|
|
245
|
-
`)
|
|
330
|
+
`);
|
|
331
|
+
stmt.bind([userId, limit]);
|
|
332
|
+
const results = [];
|
|
333
|
+
while (stmt.step()) {
|
|
334
|
+
results.push(stmt.get({}));
|
|
335
|
+
}
|
|
336
|
+
stmt.finalize();
|
|
337
|
+
return results;
|
|
246
338
|
}
|
|
247
339
|
/**
|
|
248
340
|
* Export all data for a user (for plumb export command).
|
|
@@ -251,7 +343,7 @@ export class LocalStore {
|
|
|
251
343
|
*/
|
|
252
344
|
exportAll(userId) {
|
|
253
345
|
// Export all non-deleted facts only (soft-deleted facts are excluded).
|
|
254
|
-
const
|
|
346
|
+
const factStmt = this.#db.prepare(`
|
|
255
347
|
SELECT
|
|
256
348
|
id,
|
|
257
349
|
user_id AS userId,
|
|
@@ -268,13 +360,19 @@ export class LocalStore {
|
|
|
268
360
|
FROM facts
|
|
269
361
|
WHERE user_id = ? AND deleted_at IS NULL
|
|
270
362
|
ORDER BY timestamp DESC
|
|
271
|
-
`)
|
|
363
|
+
`);
|
|
364
|
+
factStmt.bind([userId]);
|
|
365
|
+
const factRows = [];
|
|
366
|
+
while (factStmt.step()) {
|
|
367
|
+
factRows.push(factStmt.get({}));
|
|
368
|
+
}
|
|
369
|
+
factStmt.finalize();
|
|
272
370
|
const facts = factRows.map((row) => ({
|
|
273
371
|
...row,
|
|
274
372
|
deleted: false, // All exported facts are non-deleted
|
|
275
373
|
}));
|
|
276
374
|
// Export all raw_log entries (no vector data).
|
|
277
|
-
const
|
|
375
|
+
const rawLogStmt = this.#db.prepare(`
|
|
278
376
|
SELECT
|
|
279
377
|
id,
|
|
280
378
|
user_id AS userId,
|
|
@@ -290,7 +388,13 @@ export class LocalStore {
|
|
|
290
388
|
FROM raw_log
|
|
291
389
|
WHERE user_id = ?
|
|
292
390
|
ORDER BY timestamp DESC
|
|
293
|
-
`)
|
|
391
|
+
`);
|
|
392
|
+
rawLogStmt.bind([userId]);
|
|
393
|
+
const rawLog = [];
|
|
394
|
+
while (rawLogStmt.step()) {
|
|
395
|
+
rawLog.push(rawLogStmt.get({}));
|
|
396
|
+
}
|
|
397
|
+
rawLogStmt.finalize();
|
|
294
398
|
return { facts, rawLog };
|
|
295
399
|
}
|
|
296
400
|
/** Close the database connection. Call when done (e.g. in tests). */
|
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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"}
|
package/dist/raw-log-search.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Pipeline:
|
|
5
5
|
* 1. BM25 keyword search over all raw_log chunk_text (built at query time)
|
|
6
|
-
* 2. KNN vector search via sqlite-vec
|
|
6
|
+
* 2. KNN vector search via JS cosine similarity (replaces sqlite-vec)
|
|
7
7
|
* 3. Reciprocal Rank Fusion (RRF, k=60) merges both ranked lists
|
|
8
8
|
* 4. Recency decay: score *= e^(-0.012 × age_in_days)
|
|
9
9
|
* 5. Cross-encoder reranker (top-20 candidates → Xenova/ms-marco-MiniLM-L-6-v2)
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* Search is cross-session: no session filter is applied.
|
|
13
13
|
* The caller (LocalStore) passes its internal db handle — no separate DB connection.
|
|
14
14
|
*/
|
|
15
|
-
import type
|
|
15
|
+
import type { WasmDb } from './wasm-db.js';
|
|
16
16
|
export interface RawLogSearchResult {
|
|
17
17
|
readonly chunk_text: string;
|
|
18
18
|
readonly session_id: string;
|
|
@@ -24,10 +24,10 @@ export interface RawLogSearchResult {
|
|
|
24
24
|
/**
|
|
25
25
|
* Hybrid search over raw_log.
|
|
26
26
|
*
|
|
27
|
-
* @param db The
|
|
27
|
+
* @param db The WASM SQLite Database instance
|
|
28
28
|
* @param userId Scopes the search to this user's data
|
|
29
29
|
* @param query Natural language query string
|
|
30
30
|
* @param limit Number of results to return (default 10)
|
|
31
31
|
*/
|
|
32
|
-
export declare function searchRawLog(db:
|
|
32
|
+
export declare function searchRawLog(db: WasmDb, userId: string, query: string, limit?: number): Promise<readonly RawLogSearchResult[]>;
|
|
33
33
|
//# sourceMappingURL=raw-log-search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-log-search.d.ts","sourceRoot":"","sources":["../src/raw-log-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"raw-log-search.d.ts","sourceRoot":"","sources":["../src/raw-log-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAgB3C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,8FAA8F;IAC9F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAiDD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC,CAoGxC"}
|
package/dist/raw-log-search.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Pipeline:
|
|
5
5
|
* 1. BM25 keyword search over all raw_log chunk_text (built at query time)
|
|
6
|
-
* 2. KNN vector search via sqlite-vec
|
|
6
|
+
* 2. KNN vector search via JS cosine similarity (replaces sqlite-vec)
|
|
7
7
|
* 3. Reciprocal Rank Fusion (RRF, k=60) merges both ranked lists
|
|
8
8
|
* 4. Recency decay: score *= e^(-0.012 × age_in_days)
|
|
9
9
|
* 5. Cross-encoder reranker (top-20 candidates → Xenova/ms-marco-MiniLM-L-6-v2)
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { Bm25 } from './bm25.js';
|
|
16
16
|
import { embedQuery, rerankScores } from './embedder.js';
|
|
17
|
+
import { knnSearch, deserializeEmbedding } from './vector-search.js';
|
|
17
18
|
// RRF constant (standard k=60; higher = less weight on top-1 rank).
|
|
18
19
|
const RRF_K = 60;
|
|
19
20
|
// Recency decay lambda for raw logs (medium — half-life ≈ 58 days).
|
|
@@ -52,19 +53,23 @@ function rrf(vecRanked, bm25Ranked) {
|
|
|
52
53
|
/**
|
|
53
54
|
* Hybrid search over raw_log.
|
|
54
55
|
*
|
|
55
|
-
* @param db The
|
|
56
|
+
* @param db The WASM SQLite Database instance
|
|
56
57
|
* @param userId Scopes the search to this user's data
|
|
57
58
|
* @param query Natural language query string
|
|
58
59
|
* @param limit Number of results to return (default 10)
|
|
59
60
|
*/
|
|
60
61
|
export async function searchRawLog(db, userId, query, limit = 10) {
|
|
61
62
|
// ── 1. Fetch all raw_log rows for this user ──────────────────────────────
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
63
|
+
const stmt = db.prepare(`SELECT id, session_id, session_label, timestamp, chunk_text, vec_rowid
|
|
64
|
+
FROM raw_log
|
|
65
|
+
WHERE user_id = ?
|
|
66
|
+
ORDER BY timestamp DESC`);
|
|
67
|
+
stmt.bind([userId]);
|
|
68
|
+
const allRows = [];
|
|
69
|
+
while (stmt.step()) {
|
|
70
|
+
allRows.push(stmt.get({}));
|
|
71
|
+
}
|
|
72
|
+
stmt.finalize();
|
|
68
73
|
if (allRows.length === 0)
|
|
69
74
|
return [];
|
|
70
75
|
const idToRow = new Map(allRows.map((r) => [r.id, r]));
|
|
@@ -75,27 +80,28 @@ export async function searchRawLog(db, userId, query, limit = 10) {
|
|
|
75
80
|
const bm25Ranked = allRows
|
|
76
81
|
.map((r, i) => [r.id, bm25RawScores[i] ?? 0])
|
|
77
82
|
.sort((a, b) => b[1] - a[1]);
|
|
78
|
-
// ── 3. Vector search via
|
|
83
|
+
// ── 3. Vector search via JS cosine similarity ───────────────────────────
|
|
79
84
|
const queryVec = await embedQuery(query);
|
|
80
|
-
|
|
81
|
-
|
|
85
|
+
// Fetch all embeddings from vec_raw_log
|
|
86
|
+
const vecStmt = db.prepare(`SELECT id, embedding FROM vec_raw_log`);
|
|
87
|
+
const vecCorpus = [];
|
|
88
|
+
while (vecStmt.step()) {
|
|
89
|
+
const row = vecStmt.get({});
|
|
90
|
+
vecCorpus.push({
|
|
91
|
+
id: row.id,
|
|
92
|
+
embedding: deserializeEmbedding(row.embedding),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
vecStmt.finalize();
|
|
96
|
+
// Perform KNN search
|
|
82
97
|
const vecFetchLimit = Math.min(allRows.length, Math.max(RERANK_TOP_K * 2, limit * 3, 50));
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
.prepare(`SELECT rowid, distance FROM vec_raw_log
|
|
86
|
-
WHERE embedding MATCH ?
|
|
87
|
-
ORDER BY distance
|
|
88
|
-
LIMIT ?`)
|
|
89
|
-
.all(queryBlob, vecFetchLimit);
|
|
98
|
+
const vecResults = knnSearch(queryVec, vecCorpus, vecFetchLimit);
|
|
99
|
+
// Map vec_raw_log ids back to raw_log ids
|
|
90
100
|
const vecRanked = [];
|
|
91
|
-
for (const
|
|
92
|
-
const logRow =
|
|
93
|
-
.prepare(`SELECT id FROM raw_log WHERE vec_rowid = ? AND user_id = ?`)
|
|
94
|
-
.get(vecRow.rowid, userId);
|
|
101
|
+
for (const vecResult of vecResults) {
|
|
102
|
+
const logRow = allRows.find((r) => r.vec_rowid === vecResult.id);
|
|
95
103
|
if (logRow !== undefined) {
|
|
96
|
-
|
|
97
|
-
// Similarity = 1 − distance gives [−1,1]; in practice ≥ 0 for meaningful matches.
|
|
98
|
-
vecRanked.push([logRow.id, 1 - vecRow.distance]);
|
|
104
|
+
vecRanked.push([logRow.id, 1 - vecResult.distance]);
|
|
99
105
|
}
|
|
100
106
|
}
|
|
101
107
|
// ── 4. RRF merge ────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-log-search.js","sourceRoot":"","sources":["../src/raw-log-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"raw-log-search.js","sourceRoot":"","sources":["../src/raw-log-search.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -15,20 +15,19 @@ export declare const CREATE_FACTS_INDEXES: string[];
|
|
|
15
15
|
export declare const CREATE_RAW_LOG_TABLE = "\n CREATE TABLE IF NOT EXISTS raw_log (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n session_id TEXT NOT NULL,\n session_label TEXT,\n user_message TEXT NOT NULL,\n agent_response TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n source TEXT NOT NULL,\n chunk_text TEXT NOT NULL,\n chunk_index INTEGER NOT NULL,\n vec_rowid INTEGER,\n content_hash TEXT,\n UNIQUE(user_id, content_hash)\n )\n";
|
|
16
16
|
export declare const CREATE_RAW_LOG_INDEXES: string[];
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* FLOAT[384] matches BAAI/bge-small-en-v1.5 output dimension.
|
|
18
|
+
* Embeddings table for vector search over raw_log chunks.
|
|
19
|
+
* Stores embeddings as JSON arrays (WASM-compatible, no native extension needed).
|
|
21
20
|
*/
|
|
22
|
-
export declare const CREATE_VEC_RAW_LOG = "\n CREATE
|
|
21
|
+
export declare const CREATE_VEC_RAW_LOG = "\n CREATE TABLE IF NOT EXISTS vec_raw_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding TEXT NOT NULL\n )\n";
|
|
23
22
|
/**
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* Embeddings table for vector search over facts.
|
|
24
|
+
* Stores embeddings as JSON arrays (WASM-compatible, no native extension needed).
|
|
26
25
|
*/
|
|
27
|
-
export declare const CREATE_VEC_FACTS = "\n CREATE
|
|
26
|
+
export declare const CREATE_VEC_FACTS = "\n CREATE TABLE IF NOT EXISTS vec_facts (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding TEXT NOT NULL\n )\n";
|
|
28
27
|
/**
|
|
29
28
|
* Nudge log table for tracking one-time upgrade prompts.
|
|
30
29
|
* Each trigger type fires exactly once per install.
|
|
31
30
|
*/
|
|
32
31
|
export declare const CREATE_NUDGE_LOG_TABLE = "\n CREATE TABLE IF NOT EXISTS nudge_log (\n id TEXT PRIMARY KEY,\n trigger_type TEXT NOT NULL,\n fired_at TEXT NOT NULL\n )\n";
|
|
33
|
-
export declare function applySchema(db: import('
|
|
32
|
+
export declare function applySchema(db: import('./wasm-db.js').WasmDb): void;
|
|
34
33
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,kBAAkB,0fAe9B,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAKhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,8dAgBhC,CAAC;AAEF,eAAO,MAAM,sBAAsB,UAIlC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,eAAO,MAAM,kBAAkB,0fAe9B,CAAC;AAEF,eAAO,MAAM,oBAAoB,UAKhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,8dAgBhC,CAAC;AAEF,eAAO,MAAM,sBAAsB,UAIlC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,gIAK9B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,8HAK5B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,8JAMlC,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,cAAc,EAAE,MAAM,GAAG,IAAI,CA8CnE"}
|