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
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// openai-3-small — OpenAI `text-embedding-3-small` via the public REST API.
|
|
2
|
+
// 1536 dims. Trades local CPU + cold-start latency for paid network calls;
|
|
3
|
+
// the embeddings cache makes the cost a one-time event per chunk text.
|
|
4
|
+
//
|
|
5
|
+
// Trust model: the vault owner sets OPENAI_API_KEY in the environment of the
|
|
6
|
+
// MCP server process. The key is never read from config files or logged.
|
|
7
|
+
// Missing key is a hard config error (see config loader) so a "paid" provider
|
|
8
|
+
// can't silently fall back to free.
|
|
9
|
+
//
|
|
10
|
+
// Transport: native `fetch` (Node 20+ ships it globally). We deliberately
|
|
11
|
+
// don't depend on the `openai` SDK — a 30-line typed wrapper avoids
|
|
12
|
+
// dependency churn and a giant chain of transitive deps for what's a single
|
|
13
|
+
// HTTP endpoint.
|
|
14
|
+
//
|
|
15
|
+
// Batching: 96 inputs per request. OpenAI's documented max is 2048 but
|
|
16
|
+
// smaller batches keep the retry blast radius small (one batch failing
|
|
17
|
+
// doesn't lose 2000 vectors' worth of work) and let onProgress fire often
|
|
18
|
+
// enough to make a multi-thousand-chunk reindex visibly alive.
|
|
19
|
+
//
|
|
20
|
+
// Retries: exponential backoff on 429 / 5xx, max 3 retries. A definitive
|
|
21
|
+
// failure (4xx other than 429, or a 4th attempt failing) returns Result.err;
|
|
22
|
+
// callers degrade to BM25-only. We never throw from embed().
|
|
23
|
+
import { err, ok } from "../../frontmatter/types.js";
|
|
24
|
+
export const OPENAI_3_SMALL_ID = "openai-3-small";
|
|
25
|
+
export const OPENAI_3_SMALL_DIM = 1536;
|
|
26
|
+
const OPENAI_MODEL = "text-embedding-3-small";
|
|
27
|
+
const OPENAI_URL = "https://api.openai.com/v1/embeddings";
|
|
28
|
+
// Per-request batch size. OpenAI accepts up to 2048; we pick smaller so a
|
|
29
|
+
// transient 5xx is cheap to retry and progress reporting feels responsive.
|
|
30
|
+
const BATCH_SIZE = 96;
|
|
31
|
+
// Retry budget. 3 retries with exponential backoff covers the typical 429 /
|
|
32
|
+
// 5xx blip without making a hard failure feel like an indefinite hang.
|
|
33
|
+
const MAX_RETRIES = 3;
|
|
34
|
+
const BASE_BACKOFF_MS = 500;
|
|
35
|
+
function isRetryableStatus(status) {
|
|
36
|
+
return status === 429 || status >= 500;
|
|
37
|
+
}
|
|
38
|
+
// Sleep with backoff. Exposed as a parameter so tests can stub it without
|
|
39
|
+
// waiting real wall time. The first retry waits BASE_BACKOFF_MS, the second
|
|
40
|
+
// 2x, the third 4x — total worst-case ~3.5s before giving up.
|
|
41
|
+
async function delay(ms) {
|
|
42
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
43
|
+
}
|
|
44
|
+
// Normalise a vector to unit length in place. OpenAI's text-embedding-3-small
|
|
45
|
+
// returns L2-normalized vectors by default, so this is a defense-in-depth
|
|
46
|
+
// no-op for the happy path. We still do it because cosine similarity is
|
|
47
|
+
// stable iff inputs are normalized, and "the API silently returns un-
|
|
48
|
+
// normalized vectors" is exactly the class of upstream change we'd rather
|
|
49
|
+
// not be caught by.
|
|
50
|
+
function l2Normalize(vec) {
|
|
51
|
+
let norm = 0;
|
|
52
|
+
for (let i = 0; i < vec.length; i++) {
|
|
53
|
+
const x = vec[i];
|
|
54
|
+
norm += x * x;
|
|
55
|
+
}
|
|
56
|
+
if (norm === 0)
|
|
57
|
+
return vec;
|
|
58
|
+
const inv = 1 / Math.sqrt(norm);
|
|
59
|
+
for (let i = 0; i < vec.length; i++) {
|
|
60
|
+
vec[i] = vec[i] * inv;
|
|
61
|
+
}
|
|
62
|
+
return vec;
|
|
63
|
+
}
|
|
64
|
+
// One HTTP call to /v1/embeddings for a single batch. Retries on 429/5xx
|
|
65
|
+
// with exponential backoff; surfaces a definitive failure as Result.err.
|
|
66
|
+
async function embedBatch(apiKey, inputs) {
|
|
67
|
+
let attempt = 0;
|
|
68
|
+
let lastError = "unknown";
|
|
69
|
+
while (attempt <= MAX_RETRIES) {
|
|
70
|
+
let response;
|
|
71
|
+
try {
|
|
72
|
+
response = await fetch(OPENAI_URL, {
|
|
73
|
+
method: "POST",
|
|
74
|
+
headers: {
|
|
75
|
+
"content-type": "application/json",
|
|
76
|
+
authorization: `Bearer ${apiKey}`,
|
|
77
|
+
},
|
|
78
|
+
body: JSON.stringify({ input: inputs, model: OPENAI_MODEL }),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
// Network-level failure (DNS, connection reset). Retry like a 5xx.
|
|
83
|
+
lastError = e instanceof Error ? e.message : String(e);
|
|
84
|
+
if (attempt < MAX_RETRIES) {
|
|
85
|
+
await delay(BASE_BACKOFF_MS * 2 ** attempt);
|
|
86
|
+
attempt += 1;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
return err(new Error(`openai embedding request failed: ${lastError}`));
|
|
90
|
+
}
|
|
91
|
+
if (response.ok) {
|
|
92
|
+
let parsed;
|
|
93
|
+
try {
|
|
94
|
+
parsed = (await response.json());
|
|
95
|
+
}
|
|
96
|
+
catch (e) {
|
|
97
|
+
const reason = e instanceof Error ? e.message : String(e);
|
|
98
|
+
return err(new Error(`openai embedding response not JSON: ${reason}`));
|
|
99
|
+
}
|
|
100
|
+
if (!parsed.data || parsed.data.length !== inputs.length) {
|
|
101
|
+
return err(new Error(`openai embedding response had ${parsed.data?.length ?? 0} vectors ` +
|
|
102
|
+
`for ${inputs.length} inputs`));
|
|
103
|
+
}
|
|
104
|
+
const vectors = [];
|
|
105
|
+
for (const item of parsed.data) {
|
|
106
|
+
if (!Array.isArray(item.embedding) || item.embedding.length !== OPENAI_3_SMALL_DIM) {
|
|
107
|
+
return err(new Error(`openai returned vector of dim ${item.embedding?.length ?? 0}, ` +
|
|
108
|
+
`expected ${OPENAI_3_SMALL_DIM}`));
|
|
109
|
+
}
|
|
110
|
+
const vec = new Float32Array(item.embedding);
|
|
111
|
+
vectors.push(l2Normalize(vec));
|
|
112
|
+
}
|
|
113
|
+
return ok(vectors);
|
|
114
|
+
}
|
|
115
|
+
// Read the body for diagnostics; ignore body-read failures because the
|
|
116
|
+
// status code is the load-bearing signal.
|
|
117
|
+
let body = "";
|
|
118
|
+
try {
|
|
119
|
+
body = await response.text();
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// ignore
|
|
123
|
+
}
|
|
124
|
+
lastError = `${response.status} ${response.statusText} ${body}`.trim();
|
|
125
|
+
if (!isRetryableStatus(response.status) || attempt >= MAX_RETRIES) {
|
|
126
|
+
return err(new Error(`openai embedding request failed: ${lastError}`));
|
|
127
|
+
}
|
|
128
|
+
await delay(BASE_BACKOFF_MS * 2 ** attempt);
|
|
129
|
+
attempt += 1;
|
|
130
|
+
}
|
|
131
|
+
return err(new Error(`openai embedding request failed: ${lastError}`));
|
|
132
|
+
}
|
|
133
|
+
// Factory: takes the API key explicitly so the provider object is pure data
|
|
134
|
+
// once constructed. The config loader validates the env var presence and
|
|
135
|
+
// passes the value here; that way a missing key surfaces at config load,
|
|
136
|
+
// not at first embed.
|
|
137
|
+
export function makeOpenAi3SmallProvider(apiKey) {
|
|
138
|
+
if (!apiKey) {
|
|
139
|
+
throw new Error("makeOpenAi3SmallProvider: empty apiKey");
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
id: OPENAI_3_SMALL_ID,
|
|
143
|
+
dim: OPENAI_3_SMALL_DIM,
|
|
144
|
+
// Stateless HTTP — no warm-up cost. Returning ok keeps the warm path
|
|
145
|
+
// uniform across providers so the server's startup wiring doesn't need
|
|
146
|
+
// to special-case the provider.
|
|
147
|
+
async warm() {
|
|
148
|
+
return ok(undefined);
|
|
149
|
+
},
|
|
150
|
+
async embed(texts, onProgress) {
|
|
151
|
+
if (texts.length === 0)
|
|
152
|
+
return ok([]);
|
|
153
|
+
const vectors = [];
|
|
154
|
+
for (let start = 0; start < texts.length; start += BATCH_SIZE) {
|
|
155
|
+
const batch = texts.slice(start, start + BATCH_SIZE);
|
|
156
|
+
const batchResult = await embedBatch(apiKey, batch);
|
|
157
|
+
if (!batchResult.ok)
|
|
158
|
+
return batchResult;
|
|
159
|
+
for (const v of batchResult.value)
|
|
160
|
+
vectors.push(v);
|
|
161
|
+
if (onProgress) {
|
|
162
|
+
try {
|
|
163
|
+
onProgress(vectors.length, texts.length);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// best-effort: a broken reporter must not stop the embed.
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return ok(vectors);
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=openai-3-small.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-3-small.js","sourceRoot":"","sources":["../../../src/search/providers/openai-3-small.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reindex.d.ts","sourceRoot":"","sources":["../../src/search/reindex.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"reindex.d.ts","sourceRoot":"","sources":["../../src/search/reindex.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAmH/D,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CActE;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAIlB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAM7B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACpD;AA+FD,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CA8GvC;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;CACxB;AASD,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC,CAyG7C"}
|
package/dist/search/reindex.js
CHANGED
|
@@ -19,11 +19,40 @@
|
|
|
19
19
|
import { stat } from "node:fs/promises";
|
|
20
20
|
import { parseDocument } from "../frontmatter/parser.js";
|
|
21
21
|
import { err, ok } from "../frontmatter/types.js";
|
|
22
|
-
import { clearIndex, deleteDocument, documentCount, existingEmbeddingHashes, gcOrphanedEmbeddings, getMeta, insertChunkRow, insertDocument, insertEmbedding, openIndexDb, setMeta, } from "../storage/index-db.js";
|
|
22
|
+
import { clearEmbeddingsVec, clearIndex, deleteDocument, documentCount, existingEmbeddingHashes, gcOrphanedEmbeddings, getMeta, insertChunkRow, insertDocument, insertEmbedding, insertEmbeddingVec, openIndexDb, setMeta, } from "../storage/index-db.js";
|
|
23
23
|
import { listFiles, readFile, resolveVaultPath } from "../storage/local.js";
|
|
24
24
|
import { sha256Hex } from "../utils/hash.js";
|
|
25
25
|
import { tokenize } from "./bm25.js";
|
|
26
|
-
import { chunkText,
|
|
26
|
+
import { chunkText, embed, getProvider } from "./vector.js";
|
|
27
|
+
// Opens the index DB with the active embedding provider's dim, so the
|
|
28
|
+
// sqlite-vec virtual table is created (or rebuilt) at the right
|
|
29
|
+
// dimensionality. Every reindex / index-document path opens the DB this
|
|
30
|
+
// way; a caller that doesn't care about vectors (a freshness probe,
|
|
31
|
+
// say) can fall back to `openIndexDb(vault)` which uses a default dim.
|
|
32
|
+
function openIndexForActiveProvider(vaultRoot) {
|
|
33
|
+
return openIndexDb(vaultRoot, getProvider().dim);
|
|
34
|
+
}
|
|
35
|
+
// Repopulates the sqlite-vec mirror from the durable `embeddings` cache
|
|
36
|
+
// for the given model. Called at the end of every full reindex so the vec
|
|
37
|
+
// table always reflects the current vault. The previous mirror contents
|
|
38
|
+
// are dropped wholesale — simpler and faster than a diff for the sizes
|
|
39
|
+
// this index reaches in practice.
|
|
40
|
+
function rebuildEmbeddingsVec(db, modelId) {
|
|
41
|
+
const rebuild = db.transaction(() => {
|
|
42
|
+
clearEmbeddingsVec(db);
|
|
43
|
+
const rows = db
|
|
44
|
+
.prepare(`SELECT e.content_hash AS content_hash, e.embedding AS embedding
|
|
45
|
+
FROM embeddings AS e
|
|
46
|
+
WHERE e.model = ?
|
|
47
|
+
AND e.content_hash IN (SELECT content_hash FROM chunks)`)
|
|
48
|
+
.all(modelId);
|
|
49
|
+
const insert = db.prepare("INSERT INTO embeddings_vec(content_hash, model, embedding) VALUES (?, ?, ?)");
|
|
50
|
+
for (const row of rows) {
|
|
51
|
+
insert.run(row.content_hash, modelId, row.embedding);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
rebuild();
|
|
55
|
+
}
|
|
27
56
|
// Manifest key in the meta table: JSON object mapping vault-relative path to
|
|
28
57
|
// mtime in ms. Written at the end of a successful reindex and updated by
|
|
29
58
|
// indexDocument after each incremental write, so a startup freshness check
|
|
@@ -84,7 +113,7 @@ function manifestsMatch(a, b) {
|
|
|
84
113
|
// matches the stored value. Used by `main()` to skip a 20+ minute re-embed
|
|
85
114
|
// pass on every restart of a vault that hasn't changed.
|
|
86
115
|
export async function isIndexFresh(vaultRoot) {
|
|
87
|
-
const dbResult =
|
|
116
|
+
const dbResult = openIndexForActiveProvider(vaultRoot);
|
|
88
117
|
if (!dbResult.ok)
|
|
89
118
|
return false;
|
|
90
119
|
const db = dbResult.value;
|
|
@@ -191,8 +220,10 @@ export async function reindexVault(vaultRoot, opts = {}) {
|
|
|
191
220
|
return staging;
|
|
192
221
|
const { staged, skipped } = staging.value;
|
|
193
222
|
// Open the index first so we can ask the embeddings cache which (hash,
|
|
194
|
-
// model) pairs already exist before deciding what to embed.
|
|
195
|
-
|
|
223
|
+
// model) pairs already exist before deciding what to embed. Pass the
|
|
224
|
+
// active provider's dim so the sqlite-vec mirror is sized correctly
|
|
225
|
+
// (rebuilt if a previous reindex used a different provider).
|
|
226
|
+
const dbResult = openIndexForActiveProvider(vaultRoot);
|
|
196
227
|
if (!dbResult.ok)
|
|
197
228
|
return dbResult;
|
|
198
229
|
const db = dbResult.value;
|
|
@@ -211,7 +242,8 @@ export async function reindexVault(vaultRoot, opts = {}) {
|
|
|
211
242
|
allTexts.push(t);
|
|
212
243
|
}
|
|
213
244
|
}
|
|
214
|
-
const
|
|
245
|
+
const provider = getProvider();
|
|
246
|
+
const cached = existingEmbeddingHashes(db, provider.id, allHashes);
|
|
215
247
|
// Build the deduped miss list. Each unique missing hash gets embedded
|
|
216
248
|
// exactly once; identical chunk text in multiple places shares the row.
|
|
217
249
|
const missTextByHash = new Map();
|
|
@@ -237,7 +269,7 @@ export async function reindexVault(vaultRoot, opts = {}) {
|
|
|
237
269
|
const vec = embedResult.value[i];
|
|
238
270
|
if (!vec)
|
|
239
271
|
continue;
|
|
240
|
-
insertEmbedding(db, h,
|
|
272
|
+
insertEmbedding(db, h, provider.id, vec, indexedAt, provider.dim);
|
|
241
273
|
}
|
|
242
274
|
});
|
|
243
275
|
writeEmbeds();
|
|
@@ -260,10 +292,17 @@ export async function reindexVault(vaultRoot, opts = {}) {
|
|
|
260
292
|
}
|
|
261
293
|
const chunkCount = writeChunkRows(db, staged);
|
|
262
294
|
const orphansRemoved = gcOrphanedEmbeddings(db);
|
|
295
|
+
// Rebuild the sqlite-vec mirror from the durable `embeddings` cache.
|
|
296
|
+
// The cache is per-(model, content_hash) and is the source of truth;
|
|
297
|
+
// the mirror is a SQL-queryable index of it. We rebuild rather than
|
|
298
|
+
// diff because (a) it's small (one row per active-model chunk) and
|
|
299
|
+
// (b) a vec-table rebuild on provider switch lands here with an empty
|
|
300
|
+
// table, so we need a full repopulation anyway.
|
|
301
|
+
rebuildEmbeddingsVec(db, provider.id);
|
|
263
302
|
setMeta(db, "indexed_at", indexedAt);
|
|
264
303
|
setMeta(db, "vector_enabled", String(vectorEnabled));
|
|
265
|
-
setMeta(db, "embedding_dim", String(
|
|
266
|
-
setMeta(db, "embedding_model",
|
|
304
|
+
setMeta(db, "embedding_dim", String(provider.dim));
|
|
305
|
+
setMeta(db, "embedding_model", provider.id);
|
|
267
306
|
// Persist a freshness manifest so the next startup can skip this whole
|
|
268
307
|
// pass when nothing on disk has changed.
|
|
269
308
|
const manifest = await buildManifest(vaultRoot);
|
|
@@ -296,7 +335,7 @@ export async function reindexVault(vaultRoot, opts = {}) {
|
|
|
296
335
|
// embeds only those whose (hash, model) pair is not already in the embeddings
|
|
297
336
|
// cache, evicts the document's stale chunk rows, and re-inserts.
|
|
298
337
|
export async function indexDocument(vaultRoot, relPath) {
|
|
299
|
-
const dbCheck =
|
|
338
|
+
const dbCheck = openIndexForActiveProvider(vaultRoot);
|
|
300
339
|
if (!dbCheck.ok)
|
|
301
340
|
return dbCheck;
|
|
302
341
|
const indexEmpty = documentCount(dbCheck.value) === 0;
|
|
@@ -315,13 +354,14 @@ export async function indexDocument(vaultRoot, relPath) {
|
|
|
315
354
|
return err(new Error(`cannot index document: ${relPath}`));
|
|
316
355
|
}
|
|
317
356
|
const { doc, chunks, hashes } = staged;
|
|
318
|
-
const dbResult =
|
|
357
|
+
const dbResult = openIndexForActiveProvider(vaultRoot);
|
|
319
358
|
if (!dbResult.ok)
|
|
320
359
|
return dbResult;
|
|
321
360
|
const db = dbResult.value;
|
|
322
361
|
const createdAt = new Date().toISOString();
|
|
323
362
|
try {
|
|
324
|
-
const
|
|
363
|
+
const provider = getProvider();
|
|
364
|
+
const cached = existingEmbeddingHashes(db, provider.id, hashes);
|
|
325
365
|
const missTextByHash = new Map();
|
|
326
366
|
for (let i = 0; i < hashes.length; i++) {
|
|
327
367
|
const h = hashes[i] ?? "";
|
|
@@ -334,6 +374,7 @@ export async function indexDocument(vaultRoot, relPath) {
|
|
|
334
374
|
const missHashes = [...missTextByHash.keys()];
|
|
335
375
|
const missTexts = missHashes.map((h) => missTextByHash.get(h) ?? "");
|
|
336
376
|
let vectorEnabled = true;
|
|
377
|
+
const newlyEmbedded = [];
|
|
337
378
|
if (missTexts.length > 0) {
|
|
338
379
|
const embedResult = await embed(missTexts);
|
|
339
380
|
if (embedResult.ok) {
|
|
@@ -343,7 +384,8 @@ export async function indexDocument(vaultRoot, relPath) {
|
|
|
343
384
|
const vec = embedResult.value[i];
|
|
344
385
|
if (!vec)
|
|
345
386
|
continue;
|
|
346
|
-
insertEmbedding(db, h,
|
|
387
|
+
insertEmbedding(db, h, provider.id, vec, createdAt, provider.dim);
|
|
388
|
+
newlyEmbedded.push({ hash: h, vec });
|
|
347
389
|
}
|
|
348
390
|
});
|
|
349
391
|
writeEmbeds();
|
|
@@ -363,6 +405,14 @@ export async function indexDocument(vaultRoot, relPath) {
|
|
|
363
405
|
contentHash: hashes[chunkIndex] ?? "",
|
|
364
406
|
});
|
|
365
407
|
});
|
|
408
|
+
// Mirror only the newly-embedded vectors into `embeddings_vec`.
|
|
409
|
+
// Hashes that were already cached are already in the vec table from
|
|
410
|
+
// a prior reindex / indexDocument call — re-inserting them would be
|
|
411
|
+
// duplicates. INSERT OR IGNORE isn't supported on vec0 virtual
|
|
412
|
+
// tables, so we keep this list to just the new vectors.
|
|
413
|
+
for (const { hash, vec } of newlyEmbedded) {
|
|
414
|
+
insertEmbeddingVec(db, hash, provider.id, vec);
|
|
415
|
+
}
|
|
366
416
|
});
|
|
367
417
|
write();
|
|
368
418
|
// Keep the freshness manifest in sync with this single write so the next
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reindex.js","sourceRoot":"","sources":["../../src/search/reindex.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,yEAAyE;AACzE,yEAAyE;AACzE,2EAA2E;AAC3E,qDAAqD;AACrD,EAAE;AACF,0EAA0E;AAC1E,4EAA4E;AAC5E,4EAA4E;AAC5E,gBAAgB;AAEhB,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAEL,UAAU,EACV,cAAc,EACd,aAAa,EACb,uBAAuB,EACvB,oBAAoB,EACpB,OAAO,EAGP,cAAc,EACd,cAAc,EACd,eAAe,EACf,WAAW,EACX,OAAO,GACR,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAE/E,6EAA6E;AAC7E,yEAAyE;AACzE,2EAA2E;AAC3E,6EAA6E;AAC7E,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAE3C,6EAA6E;AAC7E,0EAA0E;AAC1E,wDAAwD;AACxD,KAAK,UAAU,aAAa,CAAC,SAAiB;IAC5C,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,EAAW;IAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC3C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAChF,OAAO,MAAgC,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EAAW,EAAE,QAAgC;IAClE,OAAO,CAAC,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,cAAc,CAAC,CAAyB,EAAE,CAAyB;IAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,wDAAwD;AACxD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC;QACH,IAAI,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,OAAO,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AA+BD,0EAA0E;AAC1E,8EAA8E;AAC9E,0DAA0D;AAC1D,KAAK,UAAU,QAAQ,CAAC,SAAiB,EAAE,OAAe;IACxD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IAClC,sEAAsE;IACtE,qBAAqB;IACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/C,OAAO;QACL,GAAG,EAAE;YACH,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1D,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,UAAU,EAAE,EAAE,CAAC,UAAU;YACzB,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,OAAO,EAAE,IAAI;YACb,MAAM;YACN,OAAO,EAAE,EAAE,CAAC,QAAQ;YACpB,OAAO,EAAE,EAAE,CAAC,OAAO;YACnB,YAAY,EAAE,EAAE,CAAC,aAAa;SAC/B;QACD,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,8BAA8B;AAC9B,KAAK,UAAU,cAAc,CAC3B,SAAiB;IAEjB,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,GAAG;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YACrB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AACjC,CAAC;AAED,8EAA8E;AAC9E,6EAA6E;AAC7E,oCAAoC;AACpC,SAAS,cAAc,CAAC,EAAW,EAAE,MAAwB;IAC3D,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAChC,UAAU,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YAC7C,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;gBAClC,MAAM,GAAG,GAAkB;oBACzB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,UAAU;oBACV,IAAI;oBACJ,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;iBACtC,CAAC;gBACF,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;gBACxB,UAAU,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IACH,KAAK,EAAE,CAAC;IACR,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,OAAuB,EAAE;IAEzB,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAE1C,uEAAuE;IACvE,4DAA4D;IAC5D,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;IAE1B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,CAAC;QACH,yEAAyE;QACzE,yEAAyE;QACzE,gCAAgC;QAChC,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC;QAEvE,sEAAsE;QACtE,wEAAwE;QACxE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC5B,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YACpC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAErE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;QACrC,MAAM,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAE/E,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC5D,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;gBACnB,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;oBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC9B,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,GAAG;4BAAE,SAAS;wBACnB,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBAC1D,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,WAAW,EAAE,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,kEAAkE;gBAClE,qEAAqE;gBACrE,aAAa,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YAC7B,iEAAiE;YACjE,kEAAkE;YAClE,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,iEAAiE;YACjE,iEAAiE;YACjE,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,MAAM,UAAU,GAAG,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAEhD,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QACrC,OAAO,CAAC,EAAE,EAAE,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;QACpD,OAAO,CAAC,EAAE,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;QAChD,uEAAuE;QACvE,yCAAyC;QACzC,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,QAAQ;YAAE,aAAa,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1C,OAAO,EAAE,CAAC;YACR,aAAa,EAAE,MAAM,CAAC,MAAM;YAC5B,UAAU;YACV,aAAa;YACb,OAAO;YACP,SAAS;YACT,aAAa,EAAE,UAAU,CAAC,MAAM;YAChC,SAAS;YACT,cAAc;SACf,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAOD,uEAAuE;AACvE,EAAE;AACF,4EAA4E;AAC5E,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,iEAAiE;AACjE,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAiB,EACjB,OAAe;IAEf,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC;IAChC,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAEtB,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,EAAE,CAAC;YACR,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;YACjC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;SACxC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEvC,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,uBAAuB,CAAC,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QACpE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YAC5B,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,SAAS;YACpC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAErE,IAAI,aAAa,GAAG,IAAI,CAAC;QACzB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;gBACnB,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;oBACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC3C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC9B,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,GAAG;4BAAE,SAAS;wBACnB,eAAe,CAAC,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;oBAC1D,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,WAAW,EAAE,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YAChC,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE;gBAClC,cAAc,CAAC,EAAE,EAAE;oBACjB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,UAAU;oBACV,IAAI;oBACJ,WAAW,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;iBACtC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,KAAK,EAAE,CAAC;QACR,yEAAyE;QACzE,wEAAwE;QACxE,sEAAsE;QACtE,iCAAiC;QACjC,MAAM,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACtD,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBACtC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC;oBAC7B,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC;oBACP,mEAAmE;oBACnE,qCAAqC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,wBAAwB,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"reindex.js","sourceRoot":"","sources":["../../src/search/reindex.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-write.d.ts","sourceRoot":"","sources":["../../src/search/self-write.ts"],"names":[],"mappings":"AAwCA,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,IAAI,CAG7E;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,GAAE,MAAmB,GAAG,OAAO,CAWnF;AAID,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// Self-write suppression for the fs.watch reactive indexer.
|
|
2
|
+
//
|
|
3
|
+
// The write-path tools (vault_write, vault_append, vault_promote,
|
|
4
|
+
// vault_deprecate) already call indexDocument() in-process after writing the
|
|
5
|
+
// file to disk. The chokidar watcher will *also* see that write as an `add` /
|
|
6
|
+
// `change` event and would queue a redundant re-index. To avoid the duplicate
|
|
7
|
+
// work we mark each path the writer just touched and the watcher silently
|
|
8
|
+
// drops events whose path is still in the set.
|
|
9
|
+
//
|
|
10
|
+
// Implementation: a Map<absPath, expiresAt>. The writer calls
|
|
11
|
+
// noteSelfWrite(absPath) after the file is on disk and indexDocument() has
|
|
12
|
+
// returned, so by the time chokidar fires (no earlier than its 500ms
|
|
13
|
+
// per-path debounce window elapses) the path is already registered. The
|
|
14
|
+
// watcher calls consumeSelfWrite(absPath) when an event fires; if the path is
|
|
15
|
+
// present and the TTL has not lapsed, the event is dropped and the entry is
|
|
16
|
+
// removed. Expired entries are purged lazily on every check.
|
|
17
|
+
//
|
|
18
|
+
// Keys are normalized via path.resolve() so the writer and watcher agree on
|
|
19
|
+
// "the same path" regardless of how each side formed it (chokidar may emit
|
|
20
|
+
// paths with no symlink resolution; node:path.resolve does the same on macOS).
|
|
21
|
+
import { resolve } from "node:path";
|
|
22
|
+
// 1 second is long enough to cover the watcher's 500ms debounce window plus
|
|
23
|
+
// some slack for FSEvents latency, and short enough that a *real* external
|
|
24
|
+
// edit that lands within the window is at worst delayed-not-dropped: the next
|
|
25
|
+
// edit will still fire after the set has expired.
|
|
26
|
+
const SELF_WRITE_TTL_MS = 1_000;
|
|
27
|
+
const pending = new Map();
|
|
28
|
+
function purgeExpired(now) {
|
|
29
|
+
for (const [key, expiresAt] of pending) {
|
|
30
|
+
if (expiresAt <= now)
|
|
31
|
+
pending.delete(key);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Register a path that Daftari itself just wrote so the watcher ignores its
|
|
35
|
+
// next event for that path. Path is resolved to its absolute form so the
|
|
36
|
+
// watcher's normalised path matches regardless of how it was supplied.
|
|
37
|
+
export function noteSelfWrite(absPath, now = Date.now()) {
|
|
38
|
+
purgeExpired(now);
|
|
39
|
+
pending.set(resolve(absPath), now + SELF_WRITE_TTL_MS);
|
|
40
|
+
}
|
|
41
|
+
// True if `absPath` is currently in the self-write set. When true the entry is
|
|
42
|
+
// consumed (a single self-write covers a single watcher event) so a second,
|
|
43
|
+
// genuinely-external edit shortly after is not silently dropped.
|
|
44
|
+
export function consumeSelfWrite(absPath, now = Date.now()) {
|
|
45
|
+
purgeExpired(now);
|
|
46
|
+
const key = resolve(absPath);
|
|
47
|
+
const expiresAt = pending.get(key);
|
|
48
|
+
if (expiresAt === undefined)
|
|
49
|
+
return false;
|
|
50
|
+
if (expiresAt <= now) {
|
|
51
|
+
pending.delete(key);
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
pending.delete(key);
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
// Tests load multiple suites against the singleton; clearing between them
|
|
58
|
+
// keeps cross-test pollution out of the set.
|
|
59
|
+
export function resetSelfWriteState() {
|
|
60
|
+
pending.clear();
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=self-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-write.js","sourceRoot":"","sources":["../../src/search/self-write.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,EAAE;AACF,kEAAkE;AAClE,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,0EAA0E;AAC1E,+CAA+C;AAC/C,EAAE;AACF,8DAA8D;AAC9D,2EAA2E;AAC3E,qEAAqE;AACrE,wEAAwE;AACxE,8EAA8E;AAC9E,4EAA4E;AAC5E,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,+EAA+E;AAE/E,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,kDAAkD;AAClD,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE1C,SAAS,YAAY,CAAC,GAAW;IAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,IAAI,SAAS,IAAI,GAAG;YAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,yEAAyE;AACzE,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACrE,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,iBAAiB,CAAC,CAAC;AACzD,CAAC;AAED,+EAA+E;AAC/E,4EAA4E;AAC5E,iEAAiE;AACjE,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IACxE,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;QACrB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0EAA0E;AAC1E,6CAA6C;AAC7C,MAAM,UAAU,mBAAmB;IACjC,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}
|
package/dist/search/vector.d.ts
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { type Result } from "../frontmatter/types.js";
|
|
2
|
-
|
|
2
|
+
import type { EmbeddingProviderId } from "../utils/config.js";
|
|
3
|
+
import type { EmbeddingProvider } from "./embedding-provider.js";
|
|
4
|
+
export declare const EMBEDDING_MODEL = "local-minilm";
|
|
3
5
|
export declare const EMBEDDING_DIM = 384;
|
|
4
6
|
export declare const EMBED_BATCH_SIZE = 8;
|
|
5
7
|
export declare function chunkText(text: string): string[];
|
|
6
8
|
export declare function cosineSimilarity(a: Float32Array, b: Float32Array): number;
|
|
7
9
|
export declare function meanEmbedding(vectors: Float32Array[]): Float32Array | null;
|
|
10
|
+
export declare function setProvider(id: EmbeddingProviderId): void;
|
|
11
|
+
export declare function getProvider(): EmbeddingProvider;
|
|
12
|
+
export declare function setProviderForTests(provider: EmbeddingProvider): void;
|
|
13
|
+
export declare function resetProviderForTests(): void;
|
|
14
|
+
export declare function isModelLoaded(): boolean;
|
|
15
|
+
export declare function warmModel(): Promise<Result<void, Error>>;
|
|
16
|
+
export declare function resetExtractorForTests(): void;
|
|
8
17
|
export declare function embed(texts: string[], onProgress?: (done: number, total: number) => void): Promise<Result<Float32Array[], Error>>;
|
|
9
18
|
export declare function embedQuery(text: string): Promise<Result<Float32Array, Error>>;
|
|
10
19
|
//# sourceMappingURL=vector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/search/vector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vector.d.ts","sourceRoot":"","sources":["../../src/search/vector.ts"],"names":[],"mappings":"AAcA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAiBjE,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAG9C,eAAO,MAAM,aAAa,MAAmB,CAAC;AAM9C,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAQlC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BhD;AAGD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,MAAM,CAczE;AAID,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,GAAG,IAAI,CAW1E;AAgCD,wBAAgB,WAAW,CAAC,EAAE,EAAE,mBAAmB,GAAG,IAAI,CAGzD;AAID,wBAAgB,WAAW,IAAI,iBAAiB,CAE/C;AAMD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAErE;AAID,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAQD,wBAAgB,aAAa,IAAI,OAAO,CAIvC;AAMD,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAE9D;AAKD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAKD,wBAAsB,KAAK,CACzB,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACjD,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC,CAGxC;AAGD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAMnF"}
|