daftari 1.8.0 → 1.9.0
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/CHANGELOG.md +96 -0
- package/README.md +74 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -2
- package/dist/index.js.map +1 -1
- package/dist/search/bm25.d.ts +1 -17
- package/dist/search/bm25.d.ts.map +1 -1
- package/dist/search/bm25.js +43 -65
- package/dist/search/bm25.js.map +1 -1
- package/dist/search/embedding-provider.d.ts +8 -0
- package/dist/search/embedding-provider.d.ts.map +1 -0
- package/dist/search/embedding-provider.js +26 -0
- package/dist/search/embedding-provider.js.map +1 -0
- package/dist/search/hybrid.d.ts.map +1 -1
- package/dist/search/hybrid.js +106 -34
- package/dist/search/hybrid.js.map +1 -1
- package/dist/search/index-state.d.ts +10 -0
- package/dist/search/index-state.d.ts.map +1 -1
- package/dist/search/index-state.js +58 -3
- package/dist/search/index-state.js.map +1 -1
- package/dist/search/providers/local-minilm.d.ts +7 -0
- package/dist/search/providers/local-minilm.d.ts.map +1 -0
- package/dist/search/providers/local-minilm.js +114 -0
- package/dist/search/providers/local-minilm.js.map +1 -0
- package/dist/search/providers/openai-3-small.d.ts +5 -0
- package/dist/search/providers/openai-3-small.d.ts.map +1 -0
- package/dist/search/providers/openai-3-small.js +174 -0
- package/dist/search/providers/openai-3-small.js.map +1 -0
- package/dist/search/reindex.d.ts.map +1 -1
- package/dist/search/reindex.js +63 -13
- package/dist/search/reindex.js.map +1 -1
- package/dist/search/self-write.d.ts +4 -0
- package/dist/search/self-write.d.ts.map +1 -0
- package/dist/search/self-write.js +62 -0
- package/dist/search/self-write.js.map +1 -0
- package/dist/search/vector.d.ts +10 -1
- package/dist/search/vector.d.ts.map +1 -1
- package/dist/search/vector.js +102 -59
- package/dist/search/vector.js.map +1 -1
- package/dist/search/watcher.d.ts +18 -0
- package/dist/search/watcher.d.ts.map +1 -0
- package/dist/search/watcher.js +300 -0
- package/dist/search/watcher.js.map +1 -0
- package/dist/storage/index-db.d.ts +6 -4
- package/dist/storage/index-db.d.ts.map +1 -1
- package/dist/storage/index-db.js +262 -39
- package/dist/storage/index-db.js.map +1 -1
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +11 -3
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/write.d.ts.map +1 -1
- package/dist/tools/write.js +9 -0
- package/dist/tools/write.js.map +1 -1
- package/dist/utils/config.d.ts +5 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +53 -0
- package/dist/utils/config.js.map +1 -1
- package/package.json +4 -2
package/dist/storage/index-db.js
CHANGED
|
@@ -2,31 +2,69 @@
|
|
|
2
2
|
//
|
|
3
3
|
// The index is a derived cache: it holds nothing the markdown files don't
|
|
4
4
|
// already hold, so .daftari/index.db can be deleted and rebuilt at any time
|
|
5
|
-
// (see search/reindex.ts).
|
|
5
|
+
// (see search/reindex.ts). Five tables carry the search payload:
|
|
6
6
|
//
|
|
7
|
-
// documents
|
|
8
|
-
//
|
|
9
|
-
// chunks
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
// embeddings
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
7
|
+
// documents — one row per markdown file: frontmatter fields, the full
|
|
8
|
+
// body, and the (legacy) BM25 token list (JSON).
|
|
9
|
+
// chunks — one row per embedded text chunk: the chunk text and a
|
|
10
|
+
// content_hash (sha256 of the chunk text) that joins to the
|
|
11
|
+
// embeddings table for the current model.
|
|
12
|
+
// embeddings — one row per (content_hash, model) pair, with a `dim`
|
|
13
|
+
// column recording the vector dimension. Content-addressed,
|
|
14
|
+
// so identical chunk text shares one row across files and
|
|
15
|
+
// across reindexes. The composite (content_hash, model)
|
|
16
|
+
// primary key lets two providers' vectors (e.g. local-
|
|
17
|
+
// minilm 384 + openai-3-small 1536) coexist for the same
|
|
18
|
+
// chunk text — handy when switching providers without
|
|
19
|
+
// losing the old cache. `dim` is defense-in-depth: callers
|
|
20
|
+
// can detect a corrupt or cross-provider mix at read time,
|
|
21
|
+
// even though the model id already scopes the join.
|
|
22
|
+
// documents_fts — FTS5 virtual table (contentless link to `documents`).
|
|
23
|
+
// Title, tags, and body tokens, ranked with BM25. Kept in
|
|
24
|
+
// sync by AFTER INSERT / UPDATE / DELETE triggers on
|
|
25
|
+
// `documents`, so writes never touch the virtual table
|
|
26
|
+
// directly. Replaces the hand-rolled BM25 over the legacy
|
|
27
|
+
// `documents.tokens` column.
|
|
28
|
+
// embeddings_vec — sqlite-vec `vec0` virtual table, an indexed mirror of
|
|
29
|
+
// `embeddings` for vector queries. Rebuilt at the active
|
|
30
|
+
// provider's dim — switching providers between server runs
|
|
31
|
+
// triggers a drop-and-recreate (the durable `embeddings`
|
|
32
|
+
// table is untouched). Population is the reindex path's
|
|
33
|
+
// job; this file just exposes the schema.
|
|
17
34
|
//
|
|
18
35
|
// A small meta table records index-wide facts (embedding dimension, whether
|
|
19
|
-
// vectors were built, when the index was last rebuilt
|
|
36
|
+
// vectors were built, when the index was last rebuilt, the dim that
|
|
37
|
+
// `embeddings_vec` was created at).
|
|
20
38
|
import { mkdirSync } from "node:fs";
|
|
21
39
|
import { join } from "node:path";
|
|
22
40
|
import Database from "better-sqlite3";
|
|
41
|
+
import * as sqliteVec from "sqlite-vec";
|
|
23
42
|
import { err, ok } from "../frontmatter/types.js";
|
|
24
|
-
|
|
43
|
+
// Bumped 4 → 5 to add FTS5 (`documents_fts`) and sqlite-vec (`embeddings_vec`)
|
|
44
|
+
// virtual tables for SQL-native search. The index is a derived cache so the
|
|
45
|
+
// bump triggers a clean rebuild (see openIndexDb); no in-place migration.
|
|
46
|
+
const SCHEMA_VERSION = "5";
|
|
47
|
+
// Default dim used when openIndexDb is invoked without an explicit
|
|
48
|
+
// `embeddings_vec` dim — e.g. legacy tests that don't go through the
|
|
49
|
+
// reindex path. The vec table's column type is fixed at CREATE-TABLE time,
|
|
50
|
+
// so any subsequent call with a different dim will rebuild the virtual
|
|
51
|
+
// table. Set to the local-minilm dim so the common case (default provider,
|
|
52
|
+
// no explicit dim) creates a usable table on the first open.
|
|
53
|
+
const DEFAULT_VEC_DIM = 384;
|
|
54
|
+
// Meta key that records the dim at which `embeddings_vec` was created. Used
|
|
55
|
+
// on every open to decide whether to rebuild the virtual table (provider
|
|
56
|
+
// switch). The durable `embeddings` cache is per-(model, dim) so it survives
|
|
57
|
+
// the vec-table rebuild and a switch-back to the previous provider is all
|
|
58
|
+
// cache hits.
|
|
59
|
+
const VEC_DIM_META_KEY = "embeddings_vec_dim";
|
|
25
60
|
// The .daftari control directory is excluded from vault listings, so the index
|
|
26
61
|
// file lives there without ever being mistaken for vault content.
|
|
27
62
|
export function indexDbPath(vaultRoot) {
|
|
28
63
|
return join(vaultRoot, ".daftari", "index.db");
|
|
29
64
|
}
|
|
65
|
+
// Non-virtual schema. Virtual tables (`documents_fts`, `embeddings_vec`) are
|
|
66
|
+
// created separately because their CREATE statements depend on runtime values
|
|
67
|
+
// (the active provider's dim) and need the sqlite-vec extension loaded first.
|
|
30
68
|
const SCHEMA = `
|
|
31
69
|
CREATE TABLE IF NOT EXISTS documents (
|
|
32
70
|
path TEXT PRIMARY KEY,
|
|
@@ -54,6 +92,7 @@ CREATE INDEX IF NOT EXISTS idx_chunks_content_hash ON chunks(content_hash);
|
|
|
54
92
|
CREATE TABLE IF NOT EXISTS embeddings (
|
|
55
93
|
content_hash TEXT NOT NULL,
|
|
56
94
|
model TEXT NOT NULL,
|
|
95
|
+
dim INTEGER NOT NULL,
|
|
57
96
|
embedding BLOB NOT NULL,
|
|
58
97
|
created_at TEXT NOT NULL,
|
|
59
98
|
PRIMARY KEY (content_hash, model)
|
|
@@ -63,11 +102,109 @@ CREATE TABLE IF NOT EXISTS meta (
|
|
|
63
102
|
value TEXT NOT NULL
|
|
64
103
|
);
|
|
65
104
|
`;
|
|
66
|
-
|
|
105
|
+
// FTS5 virtual table over the `documents` body + title + tags. The
|
|
106
|
+
// `content='documents'` link is a "contentless" external-content FTS5
|
|
107
|
+
// index — the virtual table stores tokens, not its own copy of the text,
|
|
108
|
+
// so writes pay one storage cost, not two. AFTER INSERT/UPDATE/DELETE
|
|
109
|
+
// triggers on `documents` keep the FTS index in sync so the write path
|
|
110
|
+
// never touches the virtual table directly. Porter + unicode61 is the
|
|
111
|
+
// stock English stemming pipeline; it lowercases, strips diacritics, and
|
|
112
|
+
// folds plurals / -ing forms.
|
|
113
|
+
const FTS_SCHEMA = `
|
|
114
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS documents_fts USING fts5(
|
|
115
|
+
title, tags, content_body,
|
|
116
|
+
content='documents',
|
|
117
|
+
content_rowid='rowid',
|
|
118
|
+
tokenize='porter unicode61'
|
|
119
|
+
);
|
|
120
|
+
CREATE TRIGGER IF NOT EXISTS documents_ai AFTER INSERT ON documents BEGIN
|
|
121
|
+
INSERT INTO documents_fts(rowid, title, tags, content_body)
|
|
122
|
+
VALUES (new.rowid, new.title, new.tags, new.content);
|
|
123
|
+
END;
|
|
124
|
+
CREATE TRIGGER IF NOT EXISTS documents_ad AFTER DELETE ON documents BEGIN
|
|
125
|
+
INSERT INTO documents_fts(documents_fts, rowid, title, tags, content_body)
|
|
126
|
+
VALUES('delete', old.rowid, old.title, old.tags, old.content);
|
|
127
|
+
END;
|
|
128
|
+
CREATE TRIGGER IF NOT EXISTS documents_au AFTER UPDATE ON documents BEGIN
|
|
129
|
+
INSERT INTO documents_fts(documents_fts, rowid, title, tags, content_body)
|
|
130
|
+
VALUES('delete', old.rowid, old.title, old.tags, old.content);
|
|
131
|
+
INSERT INTO documents_fts(rowid, title, tags, content_body)
|
|
132
|
+
VALUES (new.rowid, new.title, new.tags, new.content);
|
|
133
|
+
END;
|
|
134
|
+
`;
|
|
135
|
+
// Loads the sqlite-vec loadable extension. The npm-distributed
|
|
136
|
+
// `better-sqlite3` ships with extension loading enabled in current
|
|
137
|
+
// versions, so this is normally a no-op success — but some custom builds
|
|
138
|
+
// or distro packages strip the capability, and we want a clear,
|
|
139
|
+
// actionable error in that case rather than a confusing later failure
|
|
140
|
+
// when a query references `embeddings_vec`. Returns Result so the caller
|
|
141
|
+
// (openIndexDb) can surface the message to the operator.
|
|
142
|
+
function loadVecExtension(db) {
|
|
143
|
+
try {
|
|
144
|
+
sqliteVec.load(db);
|
|
145
|
+
return ok(undefined);
|
|
146
|
+
}
|
|
147
|
+
catch (e) {
|
|
148
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
149
|
+
return err(new Error(`cannot load sqlite-vec extension: ${reason}. ` +
|
|
150
|
+
"If this is the better-sqlite3 prebuilt without extension loading, " +
|
|
151
|
+
"rebuild it from source: `npm rebuild better-sqlite3 --build-from-source`."));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Creates the sqlite-vec virtual table at the given dim, dropping any
|
|
155
|
+
// existing copy first. `dim` is fixed at CREATE TABLE time for vec0, so a
|
|
156
|
+
// provider switch (which changes the active dim) means dropping and
|
|
157
|
+
// recreating; the durable `embeddings` cache survives, and the next reindex
|
|
158
|
+
// repopulates `embeddings_vec` from it.
|
|
159
|
+
function createVecTable(db, dim) {
|
|
160
|
+
if (!Number.isInteger(dim) || dim <= 0) {
|
|
161
|
+
throw new Error(`cannot create embeddings_vec at non-positive dim ${dim} — ` +
|
|
162
|
+
"the active embedding provider must declare a positive integer dim");
|
|
163
|
+
}
|
|
164
|
+
db.exec("DROP TABLE IF EXISTS embeddings_vec;");
|
|
165
|
+
db.exec(`CREATE VIRTUAL TABLE embeddings_vec USING vec0(
|
|
166
|
+
content_hash TEXT NOT NULL,
|
|
167
|
+
model TEXT NOT NULL,
|
|
168
|
+
embedding FLOAT[${dim}] distance_metric=cosine
|
|
169
|
+
);`);
|
|
170
|
+
setMeta(db, VEC_DIM_META_KEY, String(dim));
|
|
171
|
+
}
|
|
172
|
+
// Drops every row from `embeddings_vec`. Called by the reindex path when
|
|
173
|
+
// it needs to repopulate the vec table from scratch (e.g. after a dim
|
|
174
|
+
// rebuild). Cheaper and clearer than a per-row delete in the common case.
|
|
175
|
+
export function clearEmbeddingsVec(db) {
|
|
176
|
+
db.exec("DELETE FROM embeddings_vec;");
|
|
177
|
+
}
|
|
178
|
+
// Inserts a vector row into the sqlite-vec mirror. Separate from
|
|
179
|
+
// `insertEmbedding` because the durable cache and the vec index are two
|
|
180
|
+
// stores — the cache survives a vec-table rebuild on provider switch.
|
|
181
|
+
export function insertEmbeddingVec(db, contentHash, model, embedding) {
|
|
182
|
+
db.prepare("INSERT INTO embeddings_vec(content_hash, model, embedding) VALUES (?, ?, ?)").run(contentHash, model, embeddingToBlob(embedding));
|
|
183
|
+
}
|
|
184
|
+
// Deletes the vec-mirror rows for a single content_hash. Used by the
|
|
185
|
+
// orphan gc pass so the vec index never carries vectors whose chunks are
|
|
186
|
+
// gone.
|
|
187
|
+
function deleteEmbeddingsVecForHash(db, contentHash) {
|
|
188
|
+
db.prepare("DELETE FROM embeddings_vec WHERE content_hash = ?").run(contentHash);
|
|
189
|
+
}
|
|
190
|
+
// `expectedVecDim` is the active embedding provider's dim. If the persisted
|
|
191
|
+
// `embeddings_vec` was created at a different dim (or doesn't exist yet),
|
|
192
|
+
// it is dropped and recreated at the expected dim — the durable `embeddings`
|
|
193
|
+
// cache is untouched, so a switch back to the previous provider is all
|
|
194
|
+
// cache hits. When omitted, falls back to `DEFAULT_VEC_DIM` (local-minilm).
|
|
195
|
+
export function openIndexDb(vaultRoot, expectedVecDim) {
|
|
67
196
|
try {
|
|
68
197
|
mkdirSync(join(vaultRoot, ".daftari"), { recursive: true });
|
|
69
198
|
const db = new Database(indexDbPath(vaultRoot));
|
|
70
199
|
db.pragma("journal_mode = WAL");
|
|
200
|
+
// Load sqlite-vec BEFORE any CREATE VIRTUAL TABLE that uses `vec0` runs.
|
|
201
|
+
// A failure here is loud and actionable — the server refuses to start
|
|
202
|
+
// rather than silently falling back to brute-force cosine.
|
|
203
|
+
const loaded = loadVecExtension(db);
|
|
204
|
+
if (!loaded.ok) {
|
|
205
|
+
db.close();
|
|
206
|
+
return loaded;
|
|
207
|
+
}
|
|
71
208
|
// Ensure the meta table exists before reading schema_version from it.
|
|
72
209
|
db.exec(`CREATE TABLE IF NOT EXISTS meta (
|
|
73
210
|
key TEXT PRIMARY KEY,
|
|
@@ -77,13 +214,37 @@ export function openIndexDb(vaultRoot) {
|
|
|
77
214
|
if (stored !== SCHEMA_VERSION) {
|
|
78
215
|
// Schema bump means a clean rebuild: every derived table is dropped and
|
|
79
216
|
// the freshness manifest is cleared so the next reindex repopulates
|
|
80
|
-
// everything. Trying to ALTER across this change would race
|
|
81
|
-
//
|
|
82
|
-
//
|
|
83
|
-
|
|
217
|
+
// everything. Trying to ALTER across this change would race column
|
|
218
|
+
// additions (3 → 4 added embeddings.dim) and virtual-table creations
|
|
219
|
+
// (4 → 5 added documents_fts + embeddings_vec) against existing rows;
|
|
220
|
+
// the markdown files are the source of truth and the index is cheap to
|
|
221
|
+
// regenerate.
|
|
222
|
+
db.exec("DROP TRIGGER IF EXISTS documents_ai;" +
|
|
223
|
+
"DROP TRIGGER IF EXISTS documents_ad;" +
|
|
224
|
+
"DROP TRIGGER IF EXISTS documents_au;" +
|
|
225
|
+
"DROP TABLE IF EXISTS documents_fts;" +
|
|
226
|
+
"DROP TABLE IF EXISTS embeddings_vec;" +
|
|
227
|
+
"DROP TABLE IF EXISTS documents;" +
|
|
228
|
+
"DROP TABLE IF EXISTS chunks;" +
|
|
229
|
+
"DROP TABLE IF EXISTS embeddings;");
|
|
84
230
|
db.prepare("DELETE FROM meta WHERE key = ?").run("vault_manifest");
|
|
231
|
+
db.prepare("DELETE FROM meta WHERE key = ?").run(VEC_DIM_META_KEY);
|
|
85
232
|
}
|
|
86
233
|
db.exec(SCHEMA);
|
|
234
|
+
db.exec(FTS_SCHEMA);
|
|
235
|
+
// Decide which dim to create `embeddings_vec` at: caller's expected dim,
|
|
236
|
+
// or DEFAULT_VEC_DIM if the caller opted out. If the persisted dim
|
|
237
|
+
// matches AND the virtual table already exists, we leave it alone —
|
|
238
|
+
// recreating would drop all the indexed vectors for no reason.
|
|
239
|
+
const targetDim = expectedVecDim ?? DEFAULT_VEC_DIM;
|
|
240
|
+
const persistedDimRaw = getMeta(db, VEC_DIM_META_KEY);
|
|
241
|
+
const persistedDim = persistedDimRaw ? Number.parseInt(persistedDimRaw, 10) : null;
|
|
242
|
+
const vecTableExists = db
|
|
243
|
+
.prepare("SELECT COUNT(*) AS n FROM sqlite_master WHERE type='table' AND name=?")
|
|
244
|
+
.get("embeddings_vec").n > 0;
|
|
245
|
+
if (!vecTableExists || persistedDim !== targetDim) {
|
|
246
|
+
createVecTable(db, targetDim);
|
|
247
|
+
}
|
|
87
248
|
setMeta(db, "schema_version", SCHEMA_VERSION);
|
|
88
249
|
return ok(db);
|
|
89
250
|
}
|
|
@@ -119,10 +280,29 @@ export function blobToEmbedding(blob) {
|
|
|
119
280
|
}
|
|
120
281
|
// --- writes ----------------------------------------------------------------
|
|
121
282
|
export function insertDocument(db, doc) {
|
|
122
|
-
|
|
283
|
+
// ON CONFLICT(path) DO UPDATE (rather than INSERT OR REPLACE) is required
|
|
284
|
+
// so the AFTER UPDATE trigger on `documents` fires and keeps
|
|
285
|
+
// `documents_fts` in sync. SQLite's OR REPLACE conflict resolution does
|
|
286
|
+
// NOT fire DELETE/UPDATE triggers for the conflicting row — using it
|
|
287
|
+
// would leave the FTS5 index pointing at stale terms after every
|
|
288
|
+
// document overwrite.
|
|
289
|
+
db.prepare(`INSERT INTO documents
|
|
123
290
|
(path, title, collection, domain, status, confidence, updated, tags, content, tokens,
|
|
124
291
|
ttl_days, created, superseded_by)
|
|
125
|
-
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
292
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
293
|
+
ON CONFLICT(path) DO UPDATE SET
|
|
294
|
+
title = excluded.title,
|
|
295
|
+
collection = excluded.collection,
|
|
296
|
+
domain = excluded.domain,
|
|
297
|
+
status = excluded.status,
|
|
298
|
+
confidence = excluded.confidence,
|
|
299
|
+
updated = excluded.updated,
|
|
300
|
+
tags = excluded.tags,
|
|
301
|
+
content = excluded.content,
|
|
302
|
+
tokens = excluded.tokens,
|
|
303
|
+
ttl_days = excluded.ttl_days,
|
|
304
|
+
created = excluded.created,
|
|
305
|
+
superseded_by = excluded.superseded_by`).run(doc.path, doc.title, doc.collection, doc.domain, doc.status, doc.confidence, doc.updated, JSON.stringify(doc.tags), doc.content, JSON.stringify(doc.tokens), doc.ttlDays, doc.created, doc.supersededBy);
|
|
126
306
|
}
|
|
127
307
|
export function insertChunkRow(db, chunk) {
|
|
128
308
|
db.prepare(`INSERT OR REPLACE INTO chunks (path, chunk_index, text, content_hash)
|
|
@@ -149,19 +329,44 @@ export function existingEmbeddingHashes(db, model, hashes) {
|
|
|
149
329
|
}
|
|
150
330
|
return found;
|
|
151
331
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
332
|
+
// Persists a vector under (content_hash, model). `dim` is asserted to match
|
|
333
|
+
// `embedding.length` — a mismatch would write a corrupt row that the cosine
|
|
334
|
+
// math reads back as silent garbage. The store stays oblivious to which
|
|
335
|
+
// provider produced the vector; callers pass the provider's `id` and `dim`.
|
|
336
|
+
export function insertEmbedding(db, contentHash, model, embedding, createdAt, dim) {
|
|
337
|
+
if (embedding.length !== dim) {
|
|
338
|
+
throw new Error(`embedding length ${embedding.length} does not match declared dim ${dim} ` +
|
|
339
|
+
`for model '${model}' — refusing to write a corrupt cache row`);
|
|
340
|
+
}
|
|
341
|
+
db.prepare(`INSERT OR REPLACE INTO embeddings (content_hash, model, dim, embedding, created_at)
|
|
342
|
+
VALUES (?, ?, ?, ?, ?)`).run(contentHash, model, dim, embeddingToBlob(embedding), createdAt);
|
|
155
343
|
}
|
|
156
344
|
// Deletes every embeddings row whose content_hash is referenced by no chunks
|
|
157
|
-
// row
|
|
158
|
-
//
|
|
345
|
+
// row, and removes the matching rows from the sqlite-vec mirror. Called at
|
|
346
|
+
// the end of a reindex to reap entries for chunks that no longer exist
|
|
347
|
+
// anywhere in the vault. Returns the number of `embeddings` rows deleted —
|
|
348
|
+
// the vec-mirror counts piggy-back and are not reported separately.
|
|
159
349
|
export function gcOrphanedEmbeddings(db) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
350
|
+
// Collect the orphan hashes first so we can drop them from both stores in
|
|
351
|
+
// one pass. The `embeddings_vec` virtual table doesn't support correlated
|
|
352
|
+
// subqueries on its meta columns reliably, so we go through prepared
|
|
353
|
+
// deletes by hash.
|
|
354
|
+
const orphans = db
|
|
355
|
+
.prepare(`SELECT content_hash
|
|
356
|
+
FROM embeddings
|
|
357
|
+
WHERE content_hash NOT IN (SELECT content_hash FROM chunks)`)
|
|
358
|
+
.all();
|
|
359
|
+
if (orphans.length === 0)
|
|
360
|
+
return 0;
|
|
361
|
+
const drop = db.transaction(() => {
|
|
362
|
+
const dropEmb = db.prepare("DELETE FROM embeddings WHERE content_hash = ?");
|
|
363
|
+
for (const { content_hash } of orphans) {
|
|
364
|
+
dropEmb.run(content_hash);
|
|
365
|
+
deleteEmbeddingsVecForHash(db, content_hash);
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
drop();
|
|
369
|
+
return orphans.length;
|
|
165
370
|
}
|
|
166
371
|
export function setMeta(db, key, value) {
|
|
167
372
|
db.prepare("INSERT OR REPLACE INTO meta (key, value) VALUES (?, ?)").run(key, value);
|
|
@@ -191,40 +396,58 @@ export function getDocument(db, path) {
|
|
|
191
396
|
const row = db.prepare("SELECT * FROM documents WHERE path = ?").get(path);
|
|
192
397
|
return row ? rowToDocument(row) : null;
|
|
193
398
|
}
|
|
194
|
-
|
|
399
|
+
// Converts a join row to the public chunk shape. The embedding is read iff
|
|
400
|
+
// its stored dim matches the active provider's expected dim — a mismatch
|
|
401
|
+
// would only happen if a row was written under different metadata than its
|
|
402
|
+
// blob (a bug or hand-edit), and we'd rather skip it than score with garbage.
|
|
403
|
+
// `expectedDim` may be 0 to opt out of the check (legacy callers in tests).
|
|
404
|
+
function rowToChunk(row, expectedDim) {
|
|
405
|
+
let embedding = null;
|
|
406
|
+
if (row.embedding) {
|
|
407
|
+
const blobOk = expectedDim === 0 || row.embedding.length === expectedDim * 4;
|
|
408
|
+
const dimOk = expectedDim === 0 || row.dim === expectedDim;
|
|
409
|
+
if (blobOk && dimOk) {
|
|
410
|
+
embedding = blobToEmbedding(row.embedding);
|
|
411
|
+
}
|
|
412
|
+
// Silent skip — vector ranking just falls back as if this row had no
|
|
413
|
+
// embedding for the join. A noisy log here would be invoked per-chunk on
|
|
414
|
+
// a long mismatch; the conditions are bugs surfaced by tests instead.
|
|
415
|
+
}
|
|
195
416
|
return {
|
|
196
417
|
path: row.path,
|
|
197
418
|
chunkIndex: row.chunk_index,
|
|
198
419
|
text: row.text,
|
|
199
420
|
contentHash: row.content_hash,
|
|
200
|
-
embedding
|
|
421
|
+
embedding,
|
|
201
422
|
};
|
|
202
423
|
}
|
|
203
424
|
// Reads every chunk LEFT JOINed against the embeddings cache, filtered to
|
|
204
425
|
// `model`. A chunk whose content_hash has no embeddings row for this model
|
|
205
426
|
// (e.g. the model was unavailable during reindex) comes back with embedding =
|
|
206
427
|
// null and the vector ranker simply skips it, matching the old NULL-blob
|
|
207
|
-
// behaviour.
|
|
208
|
-
|
|
428
|
+
// behaviour. `expectedDim` is a defense-in-depth check: any row whose stored
|
|
429
|
+
// dim or blob byte length disagrees is treated as missing, so a corrupt or
|
|
430
|
+
// cross-provider mix can't poison cosine math.
|
|
431
|
+
export function getAllChunks(db, model, expectedDim = 0) {
|
|
209
432
|
const rows = db
|
|
210
|
-
.prepare(`SELECT c.path, c.chunk_index, c.text, c.content_hash, e.embedding
|
|
433
|
+
.prepare(`SELECT c.path, c.chunk_index, c.text, c.content_hash, e.embedding, e.dim
|
|
211
434
|
FROM chunks c
|
|
212
435
|
LEFT JOIN embeddings e
|
|
213
436
|
ON e.content_hash = c.content_hash AND e.model = ?
|
|
214
437
|
ORDER BY c.path, c.chunk_index`)
|
|
215
438
|
.all(model);
|
|
216
|
-
return rows.map(rowToChunk);
|
|
439
|
+
return rows.map((row) => rowToChunk(row, expectedDim));
|
|
217
440
|
}
|
|
218
|
-
export function getChunksForPath(db, path, model) {
|
|
441
|
+
export function getChunksForPath(db, path, model, expectedDim = 0) {
|
|
219
442
|
const rows = db
|
|
220
|
-
.prepare(`SELECT c.path, c.chunk_index, c.text, c.content_hash, e.embedding
|
|
443
|
+
.prepare(`SELECT c.path, c.chunk_index, c.text, c.content_hash, e.embedding, e.dim
|
|
221
444
|
FROM chunks c
|
|
222
445
|
LEFT JOIN embeddings e
|
|
223
446
|
ON e.content_hash = c.content_hash AND e.model = ?
|
|
224
447
|
WHERE c.path = ?
|
|
225
448
|
ORDER BY c.chunk_index`)
|
|
226
449
|
.all(model, path);
|
|
227
|
-
return rows.map(rowToChunk);
|
|
450
|
+
return rows.map((row) => rowToChunk(row, expectedDim));
|
|
228
451
|
}
|
|
229
452
|
export function getMeta(db, key) {
|
|
230
453
|
const row = db.prepare("SELECT value FROM meta WHERE key = ?").get(key);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-db.js","sourceRoot":"","sources":["../../src/storage/index-db.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-db.js","sourceRoot":"","sources":["../../src/storage/index-db.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,aAAa,EAAW,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,mBAAmB,EAEzB,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,KAAK,aAAa,EAAgB,MAAM,sBAAsB,CAAC;AAGxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA0EhD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CA2B5C;AAMD,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CA2B7C;AAMD,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAahG;AAgBD,eAAO,MAAM,WAAW,EAAE,cAAc,EA2DvC,CAAC"}
|
package/dist/tools/search.js
CHANGED
|
@@ -10,7 +10,15 @@ import { err, ok } from "../frontmatter/types.js";
|
|
|
10
10
|
import { DEFAULT_WEIGHTS, hybridSearch, relatedSearch, } from "../search/hybrid.js";
|
|
11
11
|
import { getIndexStatus, indexingBusyMessage, markIndexError, markIndexing, markIndexReady, } from "../search/index-state.js";
|
|
12
12
|
import { reindexVault } from "../search/reindex.js";
|
|
13
|
+
import { getProvider } from "../search/vector.js";
|
|
13
14
|
import { documentCount, openIndexDb } from "../storage/index-db.js";
|
|
15
|
+
// All tool-side opens pass the active provider's dim so the sqlite-vec
|
|
16
|
+
// table matches the embeddings the search will query. A read-only tool
|
|
17
|
+
// that opens after a provider switch would otherwise face a vec table
|
|
18
|
+
// sized for the *previous* provider's vectors.
|
|
19
|
+
function openIndexForActiveProvider(vaultRoot) {
|
|
20
|
+
return openIndexDb(vaultRoot, getProvider().dim);
|
|
21
|
+
}
|
|
14
22
|
// Gate every index-backed tool on the current indexing state.
|
|
15
23
|
//
|
|
16
24
|
// - "indexing": refuse with a progress-bearing message. The server is still
|
|
@@ -30,7 +38,7 @@ async function ensureIndexReady(vaultRoot) {
|
|
|
30
38
|
if (status.status === "error") {
|
|
31
39
|
return err(new Error(`vault index is in error state: ${status.error ?? "unknown"}`));
|
|
32
40
|
}
|
|
33
|
-
const dbResult =
|
|
41
|
+
const dbResult = openIndexForActiveProvider(vaultRoot);
|
|
34
42
|
if (!dbResult.ok)
|
|
35
43
|
return dbResult;
|
|
36
44
|
const empty = documentCount(dbResult.value) === 0;
|
|
@@ -81,7 +89,7 @@ export async function vaultSearch(vaultRoot, args, access) {
|
|
|
81
89
|
const ready = await ensureIndexReady(vaultRoot);
|
|
82
90
|
if (!ready.ok)
|
|
83
91
|
return ready;
|
|
84
|
-
const dbResult =
|
|
92
|
+
const dbResult = openIndexForActiveProvider(vaultRoot);
|
|
85
93
|
if (!dbResult.ok)
|
|
86
94
|
return dbResult;
|
|
87
95
|
const db = dbResult.value;
|
|
@@ -114,7 +122,7 @@ export async function vaultSearchRelated(vaultRoot, args, access) {
|
|
|
114
122
|
const ready = await ensureIndexReady(vaultRoot);
|
|
115
123
|
if (!ready.ok)
|
|
116
124
|
return ready;
|
|
117
|
-
const dbResult =
|
|
125
|
+
const dbResult = openIndexForActiveProvider(vaultRoot);
|
|
118
126
|
if (!dbResult.ok)
|
|
119
127
|
return dbResult;
|
|
120
128
|
const db = dbResult.value;
|
package/dist/tools/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,EAAE;AACF,wEAAwE;AACxE,4EAA4E;AAC5E,+EAA+E;AAC/E,2EAA2E;AAC3E,iEAAiE;AAEjE,OAAO,EAAsB,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EACL,eAAe,EAGf,YAAY,EAEZ,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,YAAY,EACZ,cAAc,GACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAsB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGpE,8DAA8D;AAC9D,EAAE;AACF,4EAA4E;AAC5E,oEAAoE;AACpE,wEAAwE;AACxE,yDAAyD;AACzD,0EAA0E;AAC1E,wEAAwE;AACxE,2EAA2E;AAC3E,oEAAoE;AACpE,oBAAoB;AACpB,KAAK,UAAU,gBAAgB,CAAC,SAAiB;IAC/C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,kCAAkC,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,MAAM,QAAQ,GAAG,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,mBAAmB,CAAC;AAI7E,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,MAAM,EAEX,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,KAAK,aAAa,EAAwB,MAAM,mBAAmB,CAAC;AAI7E,OAAO,EAIL,KAAK,WAAW,EAEhB,KAAK,MAAM,EAEX,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAqDhD,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,UAAU,EAAE,eAAe,EAAE,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAMD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,eAAe,EAAO,EAClC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAChC,MAAM,CAuBR;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAGjE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;CACvB;AA8JD,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAgIrC;AAQD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CA4FrC;AASD,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CA2ErC;AASD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAuErC;AAuBD,eAAO,MAAM,UAAU,EAAE,cAAc,EAuGtC,CAAC"}
|
package/dist/tools/write.js
CHANGED
|
@@ -20,6 +20,7 @@ import { loadHooks, loadPreWriteTransformHooks } from "../hooks/loader.js";
|
|
|
20
20
|
import { runPreWriteHooks, runPreWriteTransformHooks } from "../hooks/runner.js";
|
|
21
21
|
import { getIndexStatus, indexingBusyMessage } from "../search/index-state.js";
|
|
22
22
|
import { indexDocument } from "../search/reindex.js";
|
|
23
|
+
import { noteSelfWrite } from "../search/self-write.js";
|
|
23
24
|
import { readFile, resolveVaultPath } from "../storage/local.js";
|
|
24
25
|
import { loadConfig } from "../utils/config.js";
|
|
25
26
|
import { commit } from "../utils/git.js";
|
|
@@ -160,6 +161,14 @@ async function performWrite(params) {
|
|
|
160
161
|
await mkdir(dirname(params.absPath), { recursive: true });
|
|
161
162
|
await writeFile(params.absPath, params.fileText, "utf-8");
|
|
162
163
|
const indexed = await indexDocument(params.vaultRoot, params.relPath);
|
|
164
|
+
// Tell the fs.watch reactive indexer (search/watcher.ts) that this
|
|
165
|
+
// path was just written by Daftari itself, so the chokidar `add` /
|
|
166
|
+
// `change` event the writeFile above will trigger is dropped instead
|
|
167
|
+
// of queuing a redundant indexDocument() call. The TTL is short
|
|
168
|
+
// (~1s), so a *real* external edit that lands a moment later is at
|
|
169
|
+
// worst skipped once and picked up by the next edit — last-writer
|
|
170
|
+
// wins, like every other path here.
|
|
171
|
+
noteSelfWrite(params.absPath);
|
|
163
172
|
let commitHash = null;
|
|
164
173
|
if (params.autoCommit) {
|
|
165
174
|
const committed = await commit(params.vaultRoot, [params.relPath], params.commitMessage, params.agent);
|