@oomkapwn/enquire-mcp 3.8.8 → 3.9.0-rc.2
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 +184 -0
- package/README.md +5 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/embed-db.d.ts +23 -2
- package/dist/embed-db.d.ts.map +1 -1
- package/dist/embed-db.js +39 -1
- package/dist/embed-db.js.map +1 -1
- package/dist/embed-pipeline.d.ts +16 -0
- package/dist/embed-pipeline.d.ts.map +1 -1
- package/dist/embed-pipeline.js +18 -6
- package/dist/embed-pipeline.js.map +1 -1
- package/dist/hnsw.d.ts +50 -0
- package/dist/hnsw.d.ts.map +1 -1
- package/dist/hnsw.js +75 -2
- package/dist/hnsw.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +16 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +57 -0
- package/dist/server.js.map +1 -1
- package/dist/watcher.d.ts +95 -0
- package/dist/watcher.d.ts.map +1 -1
- package/dist/watcher.js +221 -9
- package/dist/watcher.js.map +1 -1
- package/docs/COMPARISON.md +1 -1
- package/docs/api.md +1 -1
- package/package.json +2 -2
package/dist/watcher.d.ts
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
import type { EmbedDb } from "./embed-db.js";
|
|
2
2
|
import type { loadEmbedder } from "./embeddings.js";
|
|
3
3
|
import type { FtsIndex } from "./fts5.js";
|
|
4
|
+
import type { HnswIndex } from "./hnsw.js";
|
|
4
5
|
import type { Vault } from "./vault.js";
|
|
6
|
+
/**
|
|
7
|
+
* v3.9.0-rc.2 — shape of the row-metadata entries the HNSW index keeps
|
|
8
|
+
* alongside each label. Mirrors `HnswPersistedMeta["rowsByLabel"][k]`
|
|
9
|
+
* but defined here so the watcher's TypeScript surface stays
|
|
10
|
+
* self-contained (no circular imports between watcher.ts and hnsw.ts's
|
|
11
|
+
* persistence types).
|
|
12
|
+
*/
|
|
13
|
+
export interface HnswRowMeta {
|
|
14
|
+
rel_path: string;
|
|
15
|
+
chunk_index: number;
|
|
16
|
+
line_start: number;
|
|
17
|
+
line_end: number;
|
|
18
|
+
text_preview: string;
|
|
19
|
+
kind: "md" | "pdf";
|
|
20
|
+
}
|
|
5
21
|
export interface WatcherOptions {
|
|
6
22
|
/** Vault to watch — must already be ensureExists()'d. */
|
|
7
23
|
vault: Vault;
|
|
@@ -51,6 +67,37 @@ export interface WatcherOptions {
|
|
|
51
67
|
* vector space and search recall would drift over the session.
|
|
52
68
|
*/
|
|
53
69
|
lateChunkContext?: number;
|
|
70
|
+
/**
|
|
71
|
+
* v3.9.0-rc.1 — when true, the watcher runs Tesseract OCR on
|
|
72
|
+
* image-only / scanned PDFs that pdfjs can't extract text from, then
|
|
73
|
+
* pipes the OCR-derived text through the standard embed pipeline so
|
|
74
|
+
* the embed-db keeps OCR'd PDFs in sync with edits during a long
|
|
75
|
+
* serve session. Off by default (OCR is slow: ~1-2s per page on M1
|
|
76
|
+
* CPU; a 100-page paper takes minutes and blocks the event loop).
|
|
77
|
+
*
|
|
78
|
+
* Requires `tesseract.js` + `@napi-rs/canvas` optional dependencies
|
|
79
|
+
* + the requested language trained-data files pre-installed via
|
|
80
|
+
* `enquire-mcp install-ocr-lang <code>` (see v3.7.16 P1-1 offline
|
|
81
|
+
* enforcement). If those aren't available, OCR fails-soft — the
|
|
82
|
+
* watcher still updates FTS5 + clears any stale embed-db rows.
|
|
83
|
+
*
|
|
84
|
+
* Recommended pairing: `--ocr-pdfs` + `--watch` + `--include-pdfs`
|
|
85
|
+
* for users with scanned-document vaults that change during sessions.
|
|
86
|
+
*/
|
|
87
|
+
ocrPdfs?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* v3.9.0-rc.1 — language pack(s) passed to `extractPdfWithOcr`.
|
|
90
|
+
* Default `'eng'`. Multi-lang via `'+'`, e.g. `'eng+rus'`. See
|
|
91
|
+
* `src/ocr.ts` for the full language model.
|
|
92
|
+
*/
|
|
93
|
+
ocrLangs?: string;
|
|
94
|
+
/**
|
|
95
|
+
* v3.9.0-rc.1 — page cap for OCR runs. Mirrors `DEFAULT_OCR_MAX_PAGES`
|
|
96
|
+
* (200) — image-only PDFs that exceed this won't be embed-sync'd
|
|
97
|
+
* (the watcher logs the skip + still updates FTS5). Operators can
|
|
98
|
+
* lift the cap when they trust their PDF set.
|
|
99
|
+
*/
|
|
100
|
+
ocrMaxPages?: number;
|
|
54
101
|
}
|
|
55
102
|
export declare class VaultWatcher {
|
|
56
103
|
private watcher;
|
|
@@ -61,8 +108,28 @@ export declare class VaultWatcher {
|
|
|
61
108
|
private embedDb;
|
|
62
109
|
private embedder;
|
|
63
110
|
private lateChunkContext;
|
|
111
|
+
private ocrPdfs;
|
|
112
|
+
private ocrLangs;
|
|
113
|
+
private ocrMaxPages;
|
|
114
|
+
private hnsw;
|
|
115
|
+
private hnswRowsByLabel;
|
|
64
116
|
private closed;
|
|
65
117
|
constructor(opts: WatcherOptions);
|
|
118
|
+
/**
|
|
119
|
+
* v3.9.0-rc.1 — enable / configure OCR-on-watch after construction.
|
|
120
|
+
* Called by server.ts after attachEmbed() runs (since OCR fallback
|
|
121
|
+
* only makes sense once embed-db is wired). Fails loud if includePdfs
|
|
122
|
+
* is off — without it, PDF events are filtered before the OCR
|
|
123
|
+
* codepath runs.
|
|
124
|
+
*
|
|
125
|
+
* @param enabled - When true, image-only PDFs that pdfjs can't read
|
|
126
|
+
* trigger a Tesseract OCR pass; the OCR-derived text feeds the
|
|
127
|
+
* normal embed pipeline via embedSinglePdf's preExtractedPages path.
|
|
128
|
+
* @param langs - Tesseract language pack (default "eng"). Multi-lang
|
|
129
|
+
* via `+`, e.g. "eng+rus".
|
|
130
|
+
* @param maxPages - Page cap for OCR runs. Default 200 (DEFAULT_OCR_MAX_PAGES).
|
|
131
|
+
*/
|
|
132
|
+
setOcrPdfs(enabled: boolean, langs?: string, maxPages?: number): void;
|
|
66
133
|
/**
|
|
67
134
|
* v3.8.0-rc.2 R-7 — attach an embed-db handle + embedder after the
|
|
68
135
|
* watcher has started. Used by `prepareServerDeps` when HNSW context
|
|
@@ -75,6 +142,34 @@ export declare class VaultWatcher {
|
|
|
75
142
|
* detach (the FTS5-only sync continues).
|
|
76
143
|
*/
|
|
77
144
|
attachEmbed(embedDb: EmbedDb | null, embedder: Awaited<ReturnType<typeof loadEmbedder>> | null, lateChunkContext?: number): void;
|
|
145
|
+
/**
|
|
146
|
+
* v3.9.0-rc.2 — wire an in-memory HNSW index for live updates. After
|
|
147
|
+
* this call, every md/pdf event that mutates embed-db ALSO updates
|
|
148
|
+
* the HNSW graph via `hnsw.applyDiff(oldIds, newPoints)` so search
|
|
149
|
+
* results reflect the change immediately. Pre-3.9.0, the HNSW index
|
|
150
|
+
* was rebuilt from embed-db only at serve startup; vault edits during
|
|
151
|
+
* the session left the HNSW stale until restart, and `--use-hnsw`
|
|
152
|
+
* users saw new content omitted from semantic-search results.
|
|
153
|
+
*
|
|
154
|
+
* Must be called AFTER `attachEmbed` (the HNSW + embed-db handles
|
|
155
|
+
* share a lifecycle — server.ts opens both during HNSW init).
|
|
156
|
+
*
|
|
157
|
+
* @param hnsw - the in-memory HNSW index built by server.ts.
|
|
158
|
+
* @param rowsByLabel - the mutable label→row map shared with
|
|
159
|
+
* `searchHybrid` (the live update writes into it so subsequent
|
|
160
|
+
* searches see the new chunks).
|
|
161
|
+
*/
|
|
162
|
+
attachHnsw(hnsw: HnswIndex, rowsByLabel: Map<number, HnswRowMeta>): void;
|
|
163
|
+
/**
|
|
164
|
+
* v3.9.0-rc.2 — internal helper. Apply an embed-db {oldIds, newIds}
|
|
165
|
+
* diff to the wired HNSW index + rowsByLabel map. Called by both the
|
|
166
|
+
* md and pdf event handlers after upsertNote / deleteNote returns.
|
|
167
|
+
* Fail-soft: on any error, logs to stderr and returns — the embed-db
|
|
168
|
+
* is already updated, so the next serve restart will rebuild HNSW
|
|
169
|
+
* from the correct state. (Same posture as the watcher's existing
|
|
170
|
+
* embed-db fail-soft.)
|
|
171
|
+
*/
|
|
172
|
+
private syncHnswForFile;
|
|
78
173
|
/** Start watching. Resolves once the watcher has reported `ready`. */
|
|
79
174
|
start(): Promise<void>;
|
|
80
175
|
private handle;
|
package/dist/watcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,IAAI,GAAG,KAAK,CAAC;CACpB;AAID,MAAM,WAAW,cAAc;IAC7B,yDAAyD;IACzD,KAAK,EAAE,KAAK,CAAC;IACb,yDAAyD;IACzD,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,gEAAgE;IAChE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;;;;;;OAYG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3D;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IAKtC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAAkD;IAClE,OAAO,CAAC,gBAAgB,CAAS;IAKjC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAqB;IAQxC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,MAAM,CAAS;gBAEX,IAAI,EAAE,cAAc;IAwBhC;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAYrE;;;;;;;;;;OAUG;IACH,WAAW,CACT,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,GAAG,IAAI,EACzD,gBAAgB,SAAI,GACnB,IAAI;IASP;;;;;;;;;;;;;;;;OAgBG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,IAAI;IAUxE;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IA2CvB,sEAAsE;IAChE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA0Dd,MAAM;IAwPd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
|
package/dist/watcher.js
CHANGED
|
@@ -31,6 +31,22 @@ export class VaultWatcher {
|
|
|
31
31
|
embedDb;
|
|
32
32
|
embedder;
|
|
33
33
|
lateChunkContext;
|
|
34
|
+
// v3.9.0-rc.1 — OCR-on-watch options. Mutable so server.ts can wire
|
|
35
|
+
// them via setOcrPdfs() AFTER attachEmbed() runs — the embed-db opens
|
|
36
|
+
// late, but the watcher boots early so file events from boot-time
|
|
37
|
+
// edits are captured.
|
|
38
|
+
ocrPdfs;
|
|
39
|
+
ocrLangs;
|
|
40
|
+
ocrMaxPages;
|
|
41
|
+
// v3.9.0-rc.2 — HNSW in-memory live update wiring. The watcher
|
|
42
|
+
// boots before HNSW initializes (similar pattern to embedDb above),
|
|
43
|
+
// so attachHnsw() is the late-binding entry point. When wired, every
|
|
44
|
+
// md/pdf event that mutates embed-db also calls
|
|
45
|
+
// `hnsw.applyDiff(oldIds, newPoints)` so search reflects the change
|
|
46
|
+
// immediately (pre-3.9.0 the in-memory HNSW went stale until the
|
|
47
|
+
// next serve restart rebuilt from the freshly-upserted embed-db).
|
|
48
|
+
hnsw = null;
|
|
49
|
+
hnswRowsByLabel = null;
|
|
34
50
|
closed = false;
|
|
35
51
|
constructor(opts) {
|
|
36
52
|
this.vault = opts.vault;
|
|
@@ -40,12 +56,48 @@ export class VaultWatcher {
|
|
|
40
56
|
this.embedDb = opts.embedDb ?? null;
|
|
41
57
|
this.embedder = opts.embedder ?? null;
|
|
42
58
|
this.lateChunkContext = opts.lateChunkContext ?? 0;
|
|
59
|
+
// v3.9.0-rc.1 — OCR-on-watch wiring. Constructor accepts the flags
|
|
60
|
+
// but defers validation: when the watcher is built BEFORE attachEmbed
|
|
61
|
+
// runs (the normal startup order in server.ts), ocrPdfs would fail
|
|
62
|
+
// the embedDb-required check. Instead, the PDF event handler checks
|
|
63
|
+
// `ocrPdfs && embedDb && includePdfs` at runtime and skips the OCR
|
|
64
|
+
// codepath silently if any leg is missing.
|
|
65
|
+
this.ocrPdfs = opts.ocrPdfs ?? false;
|
|
66
|
+
this.ocrLangs = opts.ocrLangs ?? "eng";
|
|
67
|
+
this.ocrMaxPages = opts.ocrMaxPages;
|
|
43
68
|
// v3.8.0-rc.2 R-7 — fail loud if embedDb is wired without embedder.
|
|
44
69
|
// Pre-flight check vs silently no-op'ing the embed sync.
|
|
45
70
|
if (this.embedDb && !this.embedder) {
|
|
46
71
|
throw new Error("VaultWatcher: embedDb wired without embedder — both must be set together");
|
|
47
72
|
}
|
|
48
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* v3.9.0-rc.1 — enable / configure OCR-on-watch after construction.
|
|
76
|
+
* Called by server.ts after attachEmbed() runs (since OCR fallback
|
|
77
|
+
* only makes sense once embed-db is wired). Fails loud if includePdfs
|
|
78
|
+
* is off — without it, PDF events are filtered before the OCR
|
|
79
|
+
* codepath runs.
|
|
80
|
+
*
|
|
81
|
+
* @param enabled - When true, image-only PDFs that pdfjs can't read
|
|
82
|
+
* trigger a Tesseract OCR pass; the OCR-derived text feeds the
|
|
83
|
+
* normal embed pipeline via embedSinglePdf's preExtractedPages path.
|
|
84
|
+
* @param langs - Tesseract language pack (default "eng"). Multi-lang
|
|
85
|
+
* via `+`, e.g. "eng+rus".
|
|
86
|
+
* @param maxPages - Page cap for OCR runs. Default 200 (DEFAULT_OCR_MAX_PAGES).
|
|
87
|
+
*/
|
|
88
|
+
setOcrPdfs(enabled, langs, maxPages) {
|
|
89
|
+
if (enabled && !this.includePdfs) {
|
|
90
|
+
throw new Error("VaultWatcher.setOcrPdfs: enabling OCR requires includePdfs=true at construction time");
|
|
91
|
+
}
|
|
92
|
+
if (enabled && !this.embedDb) {
|
|
93
|
+
throw new Error("VaultWatcher.setOcrPdfs: enabling OCR requires embedDb (call attachEmbed first)");
|
|
94
|
+
}
|
|
95
|
+
this.ocrPdfs = enabled;
|
|
96
|
+
if (langs !== undefined)
|
|
97
|
+
this.ocrLangs = langs;
|
|
98
|
+
if (maxPages !== undefined)
|
|
99
|
+
this.ocrMaxPages = maxPages;
|
|
100
|
+
}
|
|
49
101
|
/**
|
|
50
102
|
* v3.8.0-rc.2 R-7 — attach an embed-db handle + embedder after the
|
|
51
103
|
* watcher has started. Used by `prepareServerDeps` when HNSW context
|
|
@@ -65,6 +117,67 @@ export class VaultWatcher {
|
|
|
65
117
|
this.embedder = embedder;
|
|
66
118
|
this.lateChunkContext = lateChunkContext;
|
|
67
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* v3.9.0-rc.2 — wire an in-memory HNSW index for live updates. After
|
|
122
|
+
* this call, every md/pdf event that mutates embed-db ALSO updates
|
|
123
|
+
* the HNSW graph via `hnsw.applyDiff(oldIds, newPoints)` so search
|
|
124
|
+
* results reflect the change immediately. Pre-3.9.0, the HNSW index
|
|
125
|
+
* was rebuilt from embed-db only at serve startup; vault edits during
|
|
126
|
+
* the session left the HNSW stale until restart, and `--use-hnsw`
|
|
127
|
+
* users saw new content omitted from semantic-search results.
|
|
128
|
+
*
|
|
129
|
+
* Must be called AFTER `attachEmbed` (the HNSW + embed-db handles
|
|
130
|
+
* share a lifecycle — server.ts opens both during HNSW init).
|
|
131
|
+
*
|
|
132
|
+
* @param hnsw - the in-memory HNSW index built by server.ts.
|
|
133
|
+
* @param rowsByLabel - the mutable label→row map shared with
|
|
134
|
+
* `searchHybrid` (the live update writes into it so subsequent
|
|
135
|
+
* searches see the new chunks).
|
|
136
|
+
*/
|
|
137
|
+
attachHnsw(hnsw, rowsByLabel) {
|
|
138
|
+
if (!this.embedDb) {
|
|
139
|
+
throw new Error("VaultWatcher.attachHnsw: embedDb not attached — call attachEmbed first (HNSW live update requires it)");
|
|
140
|
+
}
|
|
141
|
+
this.hnsw = hnsw;
|
|
142
|
+
this.hnswRowsByLabel = rowsByLabel;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* v3.9.0-rc.2 — internal helper. Apply an embed-db {oldIds, newIds}
|
|
146
|
+
* diff to the wired HNSW index + rowsByLabel map. Called by both the
|
|
147
|
+
* md and pdf event handlers after upsertNote / deleteNote returns.
|
|
148
|
+
* Fail-soft: on any error, logs to stderr and returns — the embed-db
|
|
149
|
+
* is already updated, so the next serve restart will rebuild HNSW
|
|
150
|
+
* from the correct state. (Same posture as the watcher's existing
|
|
151
|
+
* embed-db fail-soft.)
|
|
152
|
+
*/
|
|
153
|
+
syncHnswForFile(relPath, kind, oldIds, newRows) {
|
|
154
|
+
if (!this.hnsw || !this.hnswRowsByLabel)
|
|
155
|
+
return null;
|
|
156
|
+
try {
|
|
157
|
+
const result = this.hnsw.applyDiff(oldIds, newRows.map((r) => ({ label: r.id, vector: r.vector })));
|
|
158
|
+
// Update the rowsByLabel map: drop old, add new. The map is shared
|
|
159
|
+
// with searchHybrid via reference; mutations are visible immediately.
|
|
160
|
+
for (const oldId of oldIds)
|
|
161
|
+
this.hnswRowsByLabel.delete(oldId);
|
|
162
|
+
for (const r of newRows) {
|
|
163
|
+
this.hnswRowsByLabel.set(r.id, {
|
|
164
|
+
rel_path: relPath,
|
|
165
|
+
chunk_index: r.chunkIndex,
|
|
166
|
+
line_start: r.lineStart,
|
|
167
|
+
line_end: r.lineEnd,
|
|
168
|
+
text_preview: r.textPreview,
|
|
169
|
+
kind
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
if (!this.silent) {
|
|
176
|
+
process.stderr.write(`enquire: watcher HNSW live-update failed for ${relPath} — ${err instanceof Error ? err.message : String(err)} (search results may be stale until next serve restart)\n`);
|
|
177
|
+
}
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
68
181
|
/** Start watching. Resolves once the watcher has reported `ready`. */
|
|
69
182
|
async start() {
|
|
70
183
|
const root = this.vault.root;
|
|
@@ -146,9 +259,20 @@ export class VaultWatcher {
|
|
|
146
259
|
// v3.8.0-rc.2 R-7 — also drop embed-db rows so search results
|
|
147
260
|
// don't surface vectors for deleted notes.
|
|
148
261
|
// v3.8.0-rc.3 R-7 — extended to PDFs (rc.2 was md-only).
|
|
262
|
+
// v3.9.0-rc.2 — propagate the deletion to the in-memory HNSW
|
|
263
|
+
// index too via syncHnswForFile (with empty newRows = pure-delete
|
|
264
|
+
// diff). Pre-3.9.0 HNSW retained deleted-file labels until next
|
|
265
|
+
// serve restart; semantic-search results would surface vectors
|
|
266
|
+
// for files no longer in the vault.
|
|
267
|
+
let unlinkHnswNote = "";
|
|
149
268
|
if (this.embedDb) {
|
|
150
269
|
try {
|
|
151
|
-
this.embedDb.deleteNote(relPath);
|
|
270
|
+
const deletedIds = this.embedDb.deleteNote(relPath);
|
|
271
|
+
if (deletedIds.length > 0 && this.hnsw) {
|
|
272
|
+
const result = this.syncHnswForFile(relPath, "md", deletedIds, []);
|
|
273
|
+
if (result)
|
|
274
|
+
unlinkHnswNote = ` + hnsw -${result.removed}`;
|
|
275
|
+
}
|
|
152
276
|
}
|
|
153
277
|
catch (err) {
|
|
154
278
|
if (!this.silent) {
|
|
@@ -158,7 +282,7 @@ export class VaultWatcher {
|
|
|
158
282
|
}
|
|
159
283
|
if (!this.silent) {
|
|
160
284
|
const embedNote = this.embedDb ? " + embed-db dropped" : "";
|
|
161
|
-
process.stderr.write(`enquire: watcher unlink ${relPath} (fts5 dropped${embedNote})\n`);
|
|
285
|
+
process.stderr.write(`enquire: watcher unlink ${relPath} (fts5 dropped${embedNote}${unlinkHnswNote})\n`);
|
|
162
286
|
}
|
|
163
287
|
return;
|
|
164
288
|
}
|
|
@@ -180,19 +304,87 @@ export class VaultWatcher {
|
|
|
180
304
|
// because they have no useful embedding content (same v3.7.6 H-4
|
|
181
305
|
// staleness fix as bulk sync). Fail-soft: embed-db errors don't
|
|
182
306
|
// fail the watcher event.
|
|
307
|
+
//
|
|
308
|
+
// v3.9.0-rc.1 — when `ocrPdfs` is on AND the cheap pdfjs path
|
|
309
|
+
// returns hasText=false, fall back to Tesseract OCR + feed
|
|
310
|
+
// OCR-derived pages through embedSinglePdf's new preExtractedPages
|
|
311
|
+
// mode. Without this, scanned PDFs that change during a serve
|
|
312
|
+
// session lose their embed rows + slowly degrade hybrid recall
|
|
313
|
+
// until the next manual `enquire-mcp build-embeddings` run.
|
|
183
314
|
let pdfEmbedNote = "";
|
|
184
315
|
if (this.embedDb && this.embedder) {
|
|
185
316
|
try {
|
|
317
|
+
let preExtractedPages;
|
|
318
|
+
// OCR fallback path. The cheap pdfjs result already lives in
|
|
319
|
+
// `result` (from the FTS5 reindex above); if it's image-only,
|
|
320
|
+
// we run Tesseract + use the OCR pages directly.
|
|
321
|
+
if (this.ocrPdfs && !result.hasText) {
|
|
322
|
+
try {
|
|
323
|
+
const { extractPdfWithOcr } = await import("./ocr.js");
|
|
324
|
+
const ocrResult = await extractPdfWithOcr(buf, {
|
|
325
|
+
langs: this.ocrLangs,
|
|
326
|
+
...(this.ocrMaxPages !== undefined ? { maxPages: this.ocrMaxPages } : {})
|
|
327
|
+
});
|
|
328
|
+
// Filter empty pages so we don't emit `[page: N]\n` blocks
|
|
329
|
+
// that the chunker would otherwise group with surrounding
|
|
330
|
+
// text. (Tesseract returns isEmpty=true for blank pages.)
|
|
331
|
+
preExtractedPages = ocrResult.pages
|
|
332
|
+
.filter((p) => !p.isEmpty)
|
|
333
|
+
.map((p) => ({ pageNumber: p.pageNumber, text: p.text }));
|
|
334
|
+
if (preExtractedPages.length === 0) {
|
|
335
|
+
// OCR returned zero pages with text — treat as image-only
|
|
336
|
+
// (drop rows). Don't pass empty preExtractedPages; that
|
|
337
|
+
// would short-circuit to null on the embed-pipeline side.
|
|
338
|
+
preExtractedPages = undefined;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
catch (ocrErr) {
|
|
342
|
+
// OCR fails-soft. Log, then fall through to the default
|
|
343
|
+
// path (which will treat the PDF as image-only and drop
|
|
344
|
+
// stale rows). Common failure: tesseract.js / canvas not
|
|
345
|
+
// installed, or language file missing.
|
|
346
|
+
if (!this.silent) {
|
|
347
|
+
process.stderr.write(`enquire: watcher PDF OCR failed for ${relPath} — ${ocrErr instanceof Error ? ocrErr.message : String(ocrErr)}\n`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
186
351
|
const { embedSinglePdf } = await import("./embed-pipeline.js");
|
|
187
|
-
const pdfResult = await embedSinglePdf(this.vault, this.embedder, { relPath, absPath, mtimeMs: stat.mtimeMs }, {
|
|
352
|
+
const pdfResult = await embedSinglePdf(this.vault, this.embedder, { relPath, absPath, mtimeMs: stat.mtimeMs }, {
|
|
353
|
+
lateChunkContext: this.lateChunkContext,
|
|
354
|
+
...(preExtractedPages ? { preExtractedPages } : {})
|
|
355
|
+
});
|
|
188
356
|
if (pdfResult === null) {
|
|
189
357
|
// Image-only or zero chunks — drop any stale embed-db rows.
|
|
190
|
-
this.embedDb.deleteNote(relPath);
|
|
191
|
-
pdfEmbedNote =
|
|
358
|
+
const deletedIds = this.embedDb.deleteNote(relPath);
|
|
359
|
+
pdfEmbedNote = preExtractedPages
|
|
360
|
+
? " + embed-db cleared (OCR also empty)"
|
|
361
|
+
: " + embed-db cleared (image-only or empty)";
|
|
362
|
+
// v3.9.0-rc.2 — propagate cleared rows to HNSW live update.
|
|
363
|
+
if (deletedIds.length > 0 && this.hnsw) {
|
|
364
|
+
const hnswResult = this.syncHnswForFile(relPath, "pdf", deletedIds, []);
|
|
365
|
+
if (hnswResult)
|
|
366
|
+
pdfEmbedNote += ` + hnsw -${hnswResult.removed}`;
|
|
367
|
+
}
|
|
192
368
|
}
|
|
193
369
|
else {
|
|
194
|
-
this.embedDb.upsertNote(relPath, stat.mtimeMs, pdfResult.rows, "pdf");
|
|
195
|
-
|
|
370
|
+
const { oldIds, newIds } = this.embedDb.upsertNote(relPath, stat.mtimeMs, pdfResult.rows, "pdf");
|
|
371
|
+
const sourceLabel = preExtractedPages ? "OCR" : "pdfjs";
|
|
372
|
+
pdfEmbedNote = ` + embed-db upserted (${pdfResult.chunks} chunks, kind=pdf, src=${sourceLabel})`;
|
|
373
|
+
// v3.9.0-rc.2 — keep HNSW in sync with the embed-db change.
|
|
374
|
+
// The newIds array runs parallel to pdfResult.rows (same order)
|
|
375
|
+
// so we can zip them into HNSW add-points by index.
|
|
376
|
+
if (this.hnsw) {
|
|
377
|
+
const hnswResult = this.syncHnswForFile(relPath, "pdf", oldIds, pdfResult.rows.map((r, i) => ({
|
|
378
|
+
id: newIds[i] ?? -1,
|
|
379
|
+
vector: r.vector,
|
|
380
|
+
chunkIndex: r.chunkIndex,
|
|
381
|
+
lineStart: r.lineStart,
|
|
382
|
+
lineEnd: r.lineEnd,
|
|
383
|
+
textPreview: r.textPreview
|
|
384
|
+
})));
|
|
385
|
+
if (hnswResult)
|
|
386
|
+
pdfEmbedNote += ` + hnsw -${hnswResult.removed}/+${hnswResult.added}`;
|
|
387
|
+
}
|
|
196
388
|
}
|
|
197
389
|
}
|
|
198
390
|
catch (err) {
|
|
@@ -220,12 +412,32 @@ export class VaultWatcher {
|
|
|
220
412
|
const { embedSingleNote } = await import("./embed-pipeline.js");
|
|
221
413
|
const result = await embedSingleNote(this.vault, this.embedder, { relPath, absPath, mtimeMs: stat.mtimeMs }, { lateChunkContext: this.lateChunkContext });
|
|
222
414
|
if (result === null) {
|
|
223
|
-
this.embedDb.deleteNote(relPath);
|
|
415
|
+
const deletedIds = this.embedDb.deleteNote(relPath);
|
|
224
416
|
embedNote = " + embed-db cleared (empty note)";
|
|
417
|
+
// v3.9.0-rc.2 — propagate cleared rows to HNSW live update.
|
|
418
|
+
if (deletedIds.length > 0 && this.hnsw) {
|
|
419
|
+
const hnswResult = this.syncHnswForFile(relPath, "md", deletedIds, []);
|
|
420
|
+
if (hnswResult)
|
|
421
|
+
embedNote += ` + hnsw -${hnswResult.removed}`;
|
|
422
|
+
}
|
|
225
423
|
}
|
|
226
424
|
else {
|
|
227
|
-
this.embedDb.upsertNote(relPath, stat.mtimeMs, result.rows);
|
|
425
|
+
const { oldIds, newIds } = this.embedDb.upsertNote(relPath, stat.mtimeMs, result.rows);
|
|
228
426
|
embedNote = ` + embed-db upserted (${result.chunks} chunks)`;
|
|
427
|
+
// v3.9.0-rc.2 — keep HNSW in sync. newIds and result.rows run
|
|
428
|
+
// parallel (same order), so we zip them into HNSW add-points.
|
|
429
|
+
if (this.hnsw) {
|
|
430
|
+
const hnswResult = this.syncHnswForFile(relPath, "md", oldIds, result.rows.map((r, i) => ({
|
|
431
|
+
id: newIds[i] ?? -1,
|
|
432
|
+
vector: r.vector,
|
|
433
|
+
chunkIndex: r.chunkIndex,
|
|
434
|
+
lineStart: r.lineStart,
|
|
435
|
+
lineEnd: r.lineEnd,
|
|
436
|
+
textPreview: r.textPreview
|
|
437
|
+
})));
|
|
438
|
+
if (hnswResult)
|
|
439
|
+
embedNote += ` + hnsw -${hnswResult.removed}/+${hnswResult.added}`;
|
|
440
|
+
}
|
|
229
441
|
}
|
|
230
442
|
}
|
|
231
443
|
catch (err) {
|
package/dist/watcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"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"}
|
package/docs/COMPARISON.md
CHANGED
|
@@ -43,7 +43,7 @@ The four axes the external audit (#3, 2026-05) called out as decisive — **REST
|
|
|
43
43
|
| Read open editor state, active note, etc. | **No** | **Yes** | Limited | No | No |
|
|
44
44
|
| Zero outbound network calls in serve mode | **Yes** (default) | Local-only (REST)| Local-only (REST)| Yes | Yes |
|
|
45
45
|
| SLSA-3 build provenance on releases | **Yes** | No | No | No | No |
|
|
46
|
-
| Test count (public) | **
|
|
46
|
+
| Test count (public) | **911** | (varies) | (varies) | (varies) | (varies) |
|
|
47
47
|
| Tool count | 44 | ~25 | ~8 | ~10 | 3–5 |
|
|
48
48
|
| MCP prompt count | 19 | 0 | 0 | 0 | 0 |
|
|
49
49
|
| License | MIT | Apache-2.0 | MIT | MIT | (varies) |
|
package/docs/api.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**enquire is the most advanced Obsidian MCP — a long-term memory layer for AI agents, built on your Obsidian vault.** Open-source, MCP-native, vendor-neutral persistence: agents (Claude Code / Claude Desktop / Cursor / ChatGPT / Codex / OpenClaw / any MCP client) get durable, queryable recall across sessions, models, and providers — your knowledge lives in plain markdown you own, not a vendor cloud. 44 MCP tools (33 always-on read + 4 opt-in read + 7 opt-in write); the 4 opt-ins are: 1 via `--persistent-index` + `--diagnostic-search-tools` (`obsidian_full_text_search` — needs BOTH flags: persistent-index for the FTS5 index, diagnostic-search-tools to surface it as a single-ranker tool alongside the hybrid default `obsidian_search`) + 3 via `--diagnostic-search-tools` (the single-ranker `obsidian_search_text` / `obsidian_semantic_search` / `obsidian_embeddings_search` — gated by default in v2.0+ since `obsidian_search` auto-detects + fuses signals). 2 + 1 opt-in MCP resources, 19 MCP prompts. **v3.1.0+ adds `obsidian_hyde_search`** (HyDE-augmented retrieval, Gao et al 2023; agent supplies a synthetic answer, server embeds it for retrieval) plus the `vault_research` (sub-question decomposition) and `vault_synthesis_page` (Karpathy LLM-Wiki synthesis loop) prompts. v2.6.0+ also speaks Streamable HTTP via `serve-http` (bearer auth + rate-limit + CORS). v2.7.0+ indexes PDFs as a separate read tool surface; **v2.8.0+ blends PDF chunks into `obsidian_search` hybrid retrieval** with `--include-pdfs` — every hit carries a `kind: "md" | "pdf"` flag and PDF snippets include `[page: N]` markers for citation. **v2.9.0+ adds BGE cross-encoder reranking** on top of RRF with `--enable-reranker` — typical +5-10 NDCG@10 retrieval-quality boost. **v2.10.0+ adds Tesseract OCR for image-only / scanned PDFs** via `obsidian_ocr_pdf` — completes the PDF retrieval story.
|
|
4
4
|
|
|
5
|
-
> **Channels:** stable v3.8.x (`@latest` on npm) ships 44 tools including `obsidian_search` (hybrid BM25 + TF-IDF + ML embeddings, RRF-fused) with optional BGE cross-encoder reranking, `obsidian_embeddings_search`, `obsidian_hyde_search`, plus the `install-model` / `build-embeddings` / `clear-embeddings` / `setup` / `doctor` / `eval` subcommands. The `@rc` dist-tag carries the most recent release candidate. Benchmarks live behind `npm run bench:retrieval` (not a CLI subcommand). This document covers the **v3.8.x
|
|
5
|
+
> **Channels:** stable since v3.8.x (`@latest` on npm) ships 44 tools including `obsidian_search` (hybrid BM25 + TF-IDF + ML embeddings, RRF-fused) with optional BGE cross-encoder reranking, `obsidian_embeddings_search`, `obsidian_hyde_search`, plus the `install-model` / `build-embeddings` / `clear-embeddings` / `setup` / `doctor` / `eval` subcommands. The `@rc` dist-tag carries the most recent release candidate (currently v3.9.0-rc.1 — OCR'd PDF watcher embed-sync). Benchmarks live behind `npm run bench:retrieval` (not a CLI subcommand). This document covers the **stable v3.8.x** surface plus what the upcoming v3.9.0 will add — see [CHANGELOG.md](../CHANGELOG.md) for the v3.8.x release series and the in-flight v3.9.0-rc.1.
|
|
6
6
|
|
|
7
7
|
> Versioned dynamically — see [`CHANGELOG.md`](../CHANGELOG.md) for the current release.
|
|
8
8
|
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@oomkapwn/enquire-mcp",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.9.0-rc.2",
|
|
5
5
|
"mcpName": "io.github.oomkapwn/enquire-mcp",
|
|
6
|
-
"description": "MCP server giving AI agents (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw) persistent long-term memory backed by your local Obsidian markdown vault. Hybrid retrieval (BM25 + ML embeddings + BGE reranker, RRF-fused), HNSW + int8 quantization, agentic RAG (HyDE + sub-question decomposition), GraphRAG-light (Louvain), standalone Obsidian Bases, PDFs + Tesseract OCR. Vendor-neutral memory layer for any MCP-compatible agent. 44 tools, 19 MCP prompts,
|
|
6
|
+
"description": "MCP server giving AI agents (Claude Code, Claude Desktop, Cursor, ChatGPT, Codex, OpenClaw) persistent long-term memory backed by your local Obsidian markdown vault. Hybrid retrieval (BM25 + ML embeddings + BGE reranker, RRF-fused), HNSW + int8 quantization, agentic RAG (HyDE + sub-question decomposition), GraphRAG-light (Louvain), standalone Obsidian Bases, PDFs + Tesseract OCR. Vendor-neutral memory layer for any MCP-compatible agent. 44 tools, 19 MCP prompts, 911 tests, SLSA-3, semver-bound, MIT, zero cloud calls during serve.",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"bin": {
|
|
9
9
|
"enquire-mcp": "dist/index.js"
|