obsidian-mcp-server 3.7.2 → 3.8.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/AGENTS.md +10 -7
- package/CLAUDE.md +10 -7
- package/README.md +22 -14
- package/changelog/3.8.x/3.8.0.md +38 -0
- package/dist/config/server-config.d.ts +1 -0
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +24 -15
- package/dist/config/server-config.js.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/instructions.d.ts.map +1 -1
- package/dist/instructions.js +21 -7
- package/dist/instructions.js.map +1 -1
- package/dist/mcp-server/resources/definitions/index.d.ts +2 -2
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts +3 -2
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.d.ts.map +1 -1
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js +6 -5
- package/dist/mcp-server/resources/definitions/obsidian-tags.resource.js.map +1 -1
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.d.ts +2 -2
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js +2 -2
- package/dist/mcp-server/resources/definitions/obsidian-vault-note.resource.js.map +1 -1
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts +8 -1
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js +14 -5
- package/dist/mcp-server/tools/definitions/_shared/suggest-paths.js.map +1 -1
- package/dist/mcp-server/tools/definitions/index.d.ts +18 -18
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-append-to-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts +7 -6
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js +7 -7
- package/dist/mcp-server/tools/definitions/obsidian-delete-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js +8 -5
- package/dist/mcp-server/tools/definitions/obsidian-get-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts +6 -6
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js +8 -8
- package/dist/mcp-server/tools/definitions/obsidian-list-notes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.d.ts +4 -4
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js +6 -6
- package/dist/mcp-server/tools/definitions/obsidian-list-tags.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-frontmatter.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-manage-tags.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-open-in-ui.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-patch-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-replace-in-note.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts +46 -12
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js +77 -22
- package/dist/mcp-server/tools/definitions/obsidian-search-notes.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.d.ts +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/obsidian-write-note.tool.js.map +1 -1
- package/dist/services/obsidian/jsonlogic-evaluator.d.ts +33 -8
- package/dist/services/obsidian/jsonlogic-evaluator.d.ts.map +1 -1
- package/dist/services/obsidian/jsonlogic-evaluator.js +171 -32
- package/dist/services/obsidian/jsonlogic-evaluator.js.map +1 -1
- package/dist/services/obsidian/jsonlogic-worker.d.ts +6 -5
- package/dist/services/obsidian/jsonlogic-worker.d.ts.map +1 -1
- package/dist/services/obsidian/jsonlogic-worker.js +7 -5
- package/dist/services/obsidian/jsonlogic-worker.js.map +1 -1
- package/dist/services/obsidian/obsidian-service.d.ts +38 -22
- package/dist/services/obsidian/obsidian-service.d.ts.map +1 -1
- package/dist/services/obsidian/obsidian-service.js +293 -99
- package/dist/services/obsidian/obsidian-service.js.map +1 -1
- package/dist/services/obsidian/patch-instruction.d.ts +4 -1
- package/dist/services/obsidian/patch-instruction.d.ts.map +1 -1
- package/dist/services/obsidian/patch-instruction.js +5 -2
- package/dist/services/obsidian/patch-instruction.js.map +1 -1
- package/dist/services/obsidian/path-policy.d.ts +67 -23
- package/dist/services/obsidian/path-policy.d.ts.map +1 -1
- package/dist/services/obsidian/path-policy.js +183 -80
- package/dist/services/obsidian/path-policy.js.map +1 -1
- package/dist/services/obsidian/section-extractor.d.ts +6 -1
- package/dist/services/obsidian/section-extractor.d.ts.map +1 -1
- package/dist/services/obsidian/section-extractor.js +106 -11
- package/dist/services/obsidian/section-extractor.js.map +1 -1
- package/dist/services/obsidian/simple-search.d.ts +62 -0
- package/dist/services/obsidian/simple-search.d.ts.map +1 -0
- package/dist/services/obsidian/simple-search.js +264 -0
- package/dist/services/obsidian/simple-search.js.map +1 -0
- package/manifest.json +10 -2
- package/package.json +3 -3
- package/server.json +19 -7
|
@@ -131,14 +131,21 @@ export function sectionBody(content, path) {
|
|
|
131
131
|
* The 1.x engine lexes the frontmatter-stripped body with its line endings
|
|
132
132
|
* normalized, then applies the token offsets to the note's own bytes unmapped;
|
|
133
133
|
* these offsets are computed the same way, so on a CRLF note they drift as the
|
|
134
|
-
* engine's do.
|
|
134
|
+
* engine's do. They also sum the kept tokens alone, as the engine does, so
|
|
135
|
+
* after a definition `marked` drops (a repeated label) they fall short by its
|
|
136
|
+
* length as the engine's do. A label first defined inside a list item, or in
|
|
137
|
+
* a blockquote the scan leaves unlexed, is the exception: the scan keeps the
|
|
138
|
+
* later definition the engine drops, so the span there stays on the note's
|
|
139
|
+
* headings.
|
|
135
140
|
*/
|
|
136
141
|
export function v1HeadingSpan(content, path) {
|
|
137
142
|
const bodyStart = PLUGIN_FRONTMATTER.exec(content)?.[0].length ?? 0;
|
|
138
143
|
const { normalized } = normalizeLineEndings(content.slice(bodyStart));
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
144
|
+
let kept = 0;
|
|
145
|
+
const headings = [...topLevelTokens(normalized)].flatMap(({ token }) => {
|
|
146
|
+
const heading = headingOf(normalized, { offset: kept, token });
|
|
147
|
+
kept += token.raw.length;
|
|
148
|
+
return heading ? [{ ...heading, raw: token.raw }] : [];
|
|
142
149
|
});
|
|
143
150
|
const h = headingPaths(headings).indexOf(path);
|
|
144
151
|
const heading = headings[h];
|
|
@@ -157,15 +164,23 @@ export function blockKinds(markdown) {
|
|
|
157
164
|
/**
|
|
158
165
|
* The top-level block tokens `marked` reads in `markdown` (line endings
|
|
159
166
|
* already `\n`), each with its offset — the running sum of the `raw` lengths
|
|
160
|
-
* before it
|
|
167
|
+
* before it. Those lengths cover the input except where `marked` drops a
|
|
168
|
+
* definition, so each dropped definition's length joins the sum where the
|
|
169
|
+
* definition stood.
|
|
161
170
|
*/
|
|
162
171
|
function* topLevelTokens(markdown) {
|
|
163
172
|
const tokenizer = new HeadingScanTokenizer();
|
|
164
173
|
const lexer = new Lexer({ ...getDefaults(), tokenizer });
|
|
165
174
|
const { rules } = tokenizer;
|
|
166
175
|
tokenizer.rules = { ...rules, block: { ...rules.block, paragraph: PARAGRAPH } };
|
|
176
|
+
const tokens = lexer.blockTokens(markdown);
|
|
177
|
+
const { droppedDefinitions } = tokenizer;
|
|
167
178
|
let offset = 0;
|
|
168
|
-
|
|
179
|
+
let dropped = 0;
|
|
180
|
+
for (const token of tokens) {
|
|
181
|
+
for (let gap = droppedDefinitions[dropped]; gap && markdown.length - gap.remaining === offset; gap = droppedDefinitions[++dropped]) {
|
|
182
|
+
offset += gap.length;
|
|
183
|
+
}
|
|
169
184
|
yield { offset, token };
|
|
170
185
|
offset += token.raw.length;
|
|
171
186
|
}
|
|
@@ -211,9 +226,54 @@ const PARAGRAPH = (() => {
|
|
|
211
226
|
* the whole blockquote whatever the lines hold, so its extent is known
|
|
212
227
|
* without lexing it. The token then carries no child tokens, which nothing
|
|
213
228
|
* here reads. Any other shape — a lazy continuation line — goes to the
|
|
214
|
-
* stock rule, which
|
|
229
|
+
* stock rule, which costs a pass per nesting level and recurses a call
|
|
230
|
+
* deeper for each, until `MAX_LAZY_QUOTE_DEPTH` stock calls are open. Past
|
|
231
|
+
* that, a blockquote takes the rule's own match as its extent, unlexed: the
|
|
232
|
+
* lines right after innermost code then join the quote where stock `marked`
|
|
233
|
+
* ends it at the code, so a paragraph there becomes part of the quote, and
|
|
234
|
+
* a setext heading's text and underline drop out of the heading scan.
|
|
235
|
+
* - `list`: the stock rule fixes every item's `raw`, and the list's, before it
|
|
236
|
+
* lexes each item's content as a document of its own — one call deeper per
|
|
237
|
+
* nesting level, so a line of list markers costs time quadratic in their
|
|
238
|
+
* count and overflows the stack. That lex only fills child tokens and
|
|
239
|
+
* looseness, so it is skipped, leaving `lexer.state.top` true as the lex
|
|
240
|
+
* would. Definitions inside an item then go unregistered, as those inside
|
|
241
|
+
* an unlexed blockquote do, so a later top-level definition of the same
|
|
242
|
+
* label stays a `def` block where stock `marked` drops it.
|
|
243
|
+
* - `def`: `marked` drops a top-level definition whose label is already
|
|
244
|
+
* registered but still consumes its text. Each one is recorded in
|
|
245
|
+
* `droppedDefinitions`, so the scan's offsets cover the note exactly.
|
|
215
246
|
*/
|
|
216
247
|
class HeadingScanTokenizer extends Tokenizer {
|
|
248
|
+
/**
|
|
249
|
+
* Each top-level definition `marked` drops, in order: the length of the
|
|
250
|
+
* source left when it was read — its position counted from the end — and
|
|
251
|
+
* its own length.
|
|
252
|
+
*/
|
|
253
|
+
droppedDefinitions = [];
|
|
254
|
+
/** Stock blockquote calls open on the stack; only within one does a nested lex run. */
|
|
255
|
+
#quoteDepth = 0;
|
|
256
|
+
def(src) {
|
|
257
|
+
const token = super.def(src);
|
|
258
|
+
if (token && this.#quoteDepth === 0 && this.lexer.tokens.links[token.tag]) {
|
|
259
|
+
this.droppedDefinitions.push({ length: token.raw.length, remaining: src.length });
|
|
260
|
+
}
|
|
261
|
+
return token;
|
|
262
|
+
}
|
|
263
|
+
list(src) {
|
|
264
|
+
const { lexer } = this;
|
|
265
|
+
const { blockTokens } = lexer;
|
|
266
|
+
lexer.blockTokens = ((_src, tokens = []) => {
|
|
267
|
+
lexer.state.top = true;
|
|
268
|
+
return tokens;
|
|
269
|
+
});
|
|
270
|
+
try {
|
|
271
|
+
return super.list(src);
|
|
272
|
+
}
|
|
273
|
+
finally {
|
|
274
|
+
lexer.blockTokens = blockTokens;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
217
277
|
table(src) {
|
|
218
278
|
const headerEnd = src.indexOf('\n');
|
|
219
279
|
const delimiterEnd = headerEnd === -1 ? -1 : src.indexOf('\n', headerEnd + 1);
|
|
@@ -233,19 +293,43 @@ class HeadingScanTokenizer extends Tokenizer {
|
|
|
233
293
|
end = lineEnd;
|
|
234
294
|
next = lineEnd + 1;
|
|
235
295
|
}
|
|
296
|
+
if (end === -1)
|
|
297
|
+
return super.blockquote(src);
|
|
236
298
|
/**
|
|
237
299
|
* A run of `>` lines that ends the note or meets an empty line is the whole
|
|
238
300
|
* blockquote: only a non-empty line can continue it lazily.
|
|
239
301
|
*/
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
302
|
+
let raw = src.slice(0, end);
|
|
303
|
+
if (next < src.length && src[next] !== '\n') {
|
|
304
|
+
if (this.#quoteDepth < MAX_LAZY_QUOTE_DEPTH) {
|
|
305
|
+
this.#quoteDepth++;
|
|
306
|
+
try {
|
|
307
|
+
return super.blockquote(src);
|
|
308
|
+
}
|
|
309
|
+
finally {
|
|
310
|
+
this.#quoteDepth--;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
const cap = this.rules.block.blockquote.exec(src);
|
|
314
|
+
if (!cap)
|
|
315
|
+
return;
|
|
316
|
+
raw = trimTrailingLineFeeds(cap[0]);
|
|
317
|
+
}
|
|
243
318
|
const text = raw
|
|
244
319
|
.replace(blockquoteSetextReplace, '\n $1')
|
|
245
320
|
.replace(blockquoteSetextReplace2, '');
|
|
246
321
|
return { type: 'blockquote', raw, text, tokens: [] };
|
|
247
322
|
}
|
|
248
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* Stock blockquote calls the scan lets open at once. Each `>` level a lazy
|
|
326
|
+
* line reaches through opens one, and so does each return of a nested quote
|
|
327
|
+
* after a lazy line (`> > a`, `lazy`, `> > b`, …). Below the bound a lazily
|
|
328
|
+
* continued quote reads as in stock `marked`, at a cost of at most this many
|
|
329
|
+
* passes over its lines; past it only the lines right after innermost code
|
|
330
|
+
* read differently, joining the quote.
|
|
331
|
+
*/
|
|
332
|
+
const MAX_LAZY_QUOTE_DEPTH = 16;
|
|
249
333
|
/**
|
|
250
334
|
* `text` with every `\r\n` and lone `\r` read as `\n` — what `marked` lexes —
|
|
251
335
|
* and a map from an offset in that text back to the same position in `text`.
|
|
@@ -275,6 +359,17 @@ function normalizeLineEndings(text) {
|
|
|
275
359
|
},
|
|
276
360
|
};
|
|
277
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* `text` less its trailing run of `\n`, as `/\n+$/` leaves it, found by a scan
|
|
364
|
+
* back from the end: the regex retries at every `\n` of a run that does not
|
|
365
|
+
* end the text, in time quadratic in the run.
|
|
366
|
+
*/
|
|
367
|
+
function trimTrailingLineFeeds(text) {
|
|
368
|
+
let end = text.length;
|
|
369
|
+
while (text[end - 1] === '\n')
|
|
370
|
+
end--;
|
|
371
|
+
return text.slice(0, end);
|
|
372
|
+
}
|
|
278
373
|
/**
|
|
279
374
|
* Build the full `Parent::Child` path of every heading, in document order. A
|
|
280
375
|
* heading's parent is the nearest preceding heading strictly shallower than it,
|
|
@@ -437,7 +532,7 @@ function extractHeading(content, target) {
|
|
|
437
532
|
? paths.filter((p) => p === resolved)
|
|
438
533
|
: paths.filter((_, i) => headings[i]?.text === leaf);
|
|
439
534
|
return {
|
|
440
|
-
value: content.slice(hit.start, end?.start)
|
|
535
|
+
value: trimTrailingLineFeeds(content.slice(hit.start, end?.start)),
|
|
441
536
|
sectionTarget: resolved,
|
|
442
537
|
...(candidates.length > 1 ? { candidates } : {}),
|
|
443
538
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"section-extractor.js","sourceRoot":"","sources":["../../../src/services/obsidian/section-extractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"section-extractor.js","sourceRoot":"","sources":["../../../src/services/obsidian/section-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The Local REST API's `POST /search/simple/` run in-server, for
|
|
3
|
+
* text searches under a read scope: plugin 5.2.0's `simpleSearch` over
|
|
4
|
+
* Obsidian 1.14.5's `prepareSimpleSearch`. The query is lower-cased and split
|
|
5
|
+
* on single spaces; a note matches when every token occurs in its lower-cased
|
|
6
|
+
* `basename + "\n\n" + body`. Each token's occurrences are found by `indexOf`,
|
|
7
|
+
* resuming one character past the end of the last, so an occurrence that
|
|
8
|
+
* touches or overlaps the previous one is skipped; the occurrences of every
|
|
9
|
+
* token are sorted and merged where they overlap or touch. A merged range
|
|
10
|
+
* inside the basename is a `filename` span whose context is the basename, one
|
|
11
|
+
* inside the body a `content` span with a `contextLength` window either side,
|
|
12
|
+
* widened one code unit rather than split a surrogate pair, and one across the
|
|
13
|
+
* two is dropped. Offsets index the lower-cased text, and windows are cut from
|
|
14
|
+
* the original, as the plugin cuts them. Hits are ordered by Obsidian's score,
|
|
15
|
+
* highest first, ties in the order notes were added (the plugin's vault order).
|
|
16
|
+
* @module services/obsidian/simple-search
|
|
17
|
+
*/
|
|
18
|
+
/** A span as `/search/simple/` reports it, plus where `match.start` sits in `context`. */
|
|
19
|
+
export interface SimpleSearchSpan {
|
|
20
|
+
context: string;
|
|
21
|
+
contextStart: number;
|
|
22
|
+
match: {
|
|
23
|
+
end: number;
|
|
24
|
+
source: 'content' | 'filename';
|
|
25
|
+
start: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/** A note's `/search/simple/` hit. */
|
|
29
|
+
export interface SimpleSearchHit {
|
|
30
|
+
filename: string;
|
|
31
|
+
matches: SimpleSearchSpan[];
|
|
32
|
+
score: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The query's tokens as `prepareSimpleSearch` reads them: lower-cased, split
|
|
36
|
+
* on single spaces (a tab or newline stays inside its token), empty pieces
|
|
37
|
+
* dropped. Repeats are dropped too: Obsidian scans a repeated token again, but
|
|
38
|
+
* its ranges coincide with the first scan's and merge away.
|
|
39
|
+
*/
|
|
40
|
+
export declare function simpleSearchTokens(query: string): string[];
|
|
41
|
+
export declare const isHighSurrogate: (cu: number) => boolean;
|
|
42
|
+
export declare const isLowSurrogate: (cu: number) => boolean;
|
|
43
|
+
/**
|
|
44
|
+
* One text search over notes added in vault order, holding each hit's context
|
|
45
|
+
* windows. `maxResponseChars` bounds the plugin's response for those hits, its
|
|
46
|
+
* length as `JSON.stringify(hits, null, 2)` (see `HIT_FRAME`): every hit's
|
|
47
|
+
* filename and score, every span's offsets and escaped window, and the framing
|
|
48
|
+
* around each. The count grows span by span as each note is added, so the
|
|
49
|
+
* span that passes the bound fails the search with `context_length_too_large`
|
|
50
|
+
* at once, and no more spans are held than a response the plugin could send.
|
|
51
|
+
*/
|
|
52
|
+
export declare class SimpleSearch {
|
|
53
|
+
#private;
|
|
54
|
+
/** The distinct non-empty tokens; a note matches only when it holds every one. */
|
|
55
|
+
readonly tokens: readonly string[];
|
|
56
|
+
constructor(query: string, contextLength: number, maxResponseChars?: number);
|
|
57
|
+
/** Match one note, `body` as Obsidian's `cachedRead` gives it. */
|
|
58
|
+
add(path: string, body: string): void;
|
|
59
|
+
/** The hits, highest score first; equal scores keep the order their notes were added. */
|
|
60
|
+
hits(): SimpleSearchHit[];
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=simple-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-search.d.ts","sourceRoot":"","sources":["../../../src/services/obsidian/simple-search.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,0FAA0F;AAC1F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,sCAAsC;AACtC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAoCD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE1D;AAYD,eAAO,MAAM,eAAe,OAAQ,MAAM,YAAiC,CAAC;AAC5E,eAAO,MAAM,cAAc,OAAQ,MAAM,YAAiC,CAAC;AAkH3E;;;;;;;;GAQG;AACH,qBAAa,YAAY;;IAMvB,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAEnC,YAAY,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,SAA2B,EAK5F;IAED,kEAAkE;IAClE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAiDpC;IAYD,yFAAyF;IACzF,IAAI,IAAI,eAAe,EAAE,CAExB;CACF"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The Local REST API's `POST /search/simple/` run in-server, for
|
|
3
|
+
* text searches under a read scope: plugin 5.2.0's `simpleSearch` over
|
|
4
|
+
* Obsidian 1.14.5's `prepareSimpleSearch`. The query is lower-cased and split
|
|
5
|
+
* on single spaces; a note matches when every token occurs in its lower-cased
|
|
6
|
+
* `basename + "\n\n" + body`. Each token's occurrences are found by `indexOf`,
|
|
7
|
+
* resuming one character past the end of the last, so an occurrence that
|
|
8
|
+
* touches or overlaps the previous one is skipped; the occurrences of every
|
|
9
|
+
* token are sorted and merged where they overlap or touch. A merged range
|
|
10
|
+
* inside the basename is a `filename` span whose context is the basename, one
|
|
11
|
+
* inside the body a `content` span with a `contextLength` window either side,
|
|
12
|
+
* widened one code unit rather than split a surrogate pair, and one across the
|
|
13
|
+
* two is dropped. Offsets index the lower-cased text, and windows are cut from
|
|
14
|
+
* the original, as the plugin cuts them. Hits are ordered by Obsidian's score,
|
|
15
|
+
* highest first, ties in the order notes were added (the plugin's vault order).
|
|
16
|
+
* @module services/obsidian/simple-search
|
|
17
|
+
*/
|
|
18
|
+
import { validationError } from '@cyanheads/mcp-ts-core/errors';
|
|
19
|
+
/**
|
|
20
|
+
* Lengths of the fixed parts of the plugin's response, which its Express app
|
|
21
|
+
* writes with `res.json` under `json spaces` 2, so `JSON.stringify(hits,
|
|
22
|
+
* null, 2)`:
|
|
23
|
+
*
|
|
24
|
+
* ```text
|
|
25
|
+
* [
|
|
26
|
+
* {
|
|
27
|
+
* "filename": "Folder/Note.md",
|
|
28
|
+
* "score": -1.2,
|
|
29
|
+
* "matches": [
|
|
30
|
+
* {
|
|
31
|
+
* "match": {
|
|
32
|
+
* "start": 12,
|
|
33
|
+
* "end": 17,
|
|
34
|
+
* "source": "content"
|
|
35
|
+
* },
|
|
36
|
+
* "context": "…"
|
|
37
|
+
* }
|
|
38
|
+
* ]
|
|
39
|
+
* }
|
|
40
|
+
* ]
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* A hit or a span counts its separator, line break, and indentation, and its
|
|
44
|
+
* keys and braces. Its values are counted where they are known.
|
|
45
|
+
*/
|
|
46
|
+
const RESPONSE_FRAME = 2;
|
|
47
|
+
const HIT_FRAME = 58;
|
|
48
|
+
/** A `matches` array with no span is `[]`; one with spans adds a line break and indentation before its `]`. */
|
|
49
|
+
const EMPTY_MATCHES = 2;
|
|
50
|
+
const MATCHES_FRAME = 6;
|
|
51
|
+
const SPAN_FRAME = 128;
|
|
52
|
+
/**
|
|
53
|
+
* The query's tokens as `prepareSimpleSearch` reads them: lower-cased, split
|
|
54
|
+
* on single spaces (a tab or newline stays inside its token), empty pieces
|
|
55
|
+
* dropped. Repeats are dropped too: Obsidian scans a repeated token again, but
|
|
56
|
+
* its ranges coincide with the first scan's and merge away.
|
|
57
|
+
*/
|
|
58
|
+
export function simpleSearchTokens(query) {
|
|
59
|
+
return [...new Set(query.toLowerCase().split(' ').filter(Boolean))];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Obsidian's note basename (`TFile.basename`): the file name less its last
|
|
63
|
+
* `.extension`, the whole name when its only dot leads or trails it.
|
|
64
|
+
*/
|
|
65
|
+
function noteBasename(path) {
|
|
66
|
+
const name = path.slice(path.lastIndexOf('/') + 1);
|
|
67
|
+
const dot = name.lastIndexOf('.');
|
|
68
|
+
return dot <= 0 || dot === name.length - 1 ? name : name.slice(0, dot);
|
|
69
|
+
}
|
|
70
|
+
export const isHighSurrogate = (cu) => cu >= 0xd800 && cu <= 0xdbff;
|
|
71
|
+
export const isLowSurrogate = (cu) => cu >= 0xdc00 && cu <= 0xdfff;
|
|
72
|
+
/**
|
|
73
|
+
* Upstream's `widenToCodePointBoundaries`: grow `[start, end)` by at most one
|
|
74
|
+
* code unit per side so neither edge splits a surrogate pair.
|
|
75
|
+
*/
|
|
76
|
+
function widen(text, start, end) {
|
|
77
|
+
let from = start;
|
|
78
|
+
if (from > 0 && from < text.length && isLowSurrogate(text.charCodeAt(from)))
|
|
79
|
+
from -= 1;
|
|
80
|
+
let to = end;
|
|
81
|
+
if (to > 0 && to < text.length && isHighSurrogate(text.charCodeAt(to - 1)))
|
|
82
|
+
to += 1;
|
|
83
|
+
return [from, to];
|
|
84
|
+
}
|
|
85
|
+
/** Characters `JSON.stringify` writes for a whole number: its decimal digits. */
|
|
86
|
+
function digits(n) {
|
|
87
|
+
let count = 1;
|
|
88
|
+
for (let power = 10; power <= n; power *= 10)
|
|
89
|
+
count++;
|
|
90
|
+
return count;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Characters `JSON.stringify` adds escaping `text[i]`: one for `"`, `\`, and
|
|
94
|
+
* the controls with a short escape (`\b \t \n \f \r`), five for any other
|
|
95
|
+
* control or a lone surrogate (`\uXXXX`).
|
|
96
|
+
*/
|
|
97
|
+
function escapeOverhead(text, i) {
|
|
98
|
+
const cu = text.charCodeAt(i);
|
|
99
|
+
if (cu === 0x22 || cu === 0x5c)
|
|
100
|
+
return 1;
|
|
101
|
+
if (cu < 0x20)
|
|
102
|
+
return cu >= 0x08 && cu <= 0x0d && cu !== 0x0b ? 1 : 5;
|
|
103
|
+
if (isHighSurrogate(cu))
|
|
104
|
+
return isLowSurrogate(text.charCodeAt(i + 1)) ? 0 : 5;
|
|
105
|
+
if (isLowSurrogate(cu))
|
|
106
|
+
return isHighSurrogate(text.charCodeAt(i - 1)) ? 0 : 5;
|
|
107
|
+
return 0;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Characters `JSON.stringify` adds escaping the window `text.slice(from, to)`,
|
|
111
|
+
* for windows given in note order, where neither edge moves back. Two running
|
|
112
|
+
* sums of `escapeOverhead` over the characters scanned so far, one per edge,
|
|
113
|
+
* give each window as their difference: what windows share is scanned once,
|
|
114
|
+
* and what no window covers is skipped. `escapeOverhead` reads a surrogate's
|
|
115
|
+
* partner in the note; an edge that cuts a pair the note holds whole (`widen`
|
|
116
|
+
* stops one code unit short when surrogates run three or more in a row)
|
|
117
|
+
* leaves that half lone in the window, escaped too.
|
|
118
|
+
*/
|
|
119
|
+
function windowEscapes(text) {
|
|
120
|
+
let left = 0;
|
|
121
|
+
let leftSum = 0;
|
|
122
|
+
let right = 0;
|
|
123
|
+
let rightSum = 0;
|
|
124
|
+
return (from, to) => {
|
|
125
|
+
if (from >= to)
|
|
126
|
+
return 0;
|
|
127
|
+
if (from >= right) {
|
|
128
|
+
left = right = from;
|
|
129
|
+
leftSum = rightSum;
|
|
130
|
+
}
|
|
131
|
+
for (; left < from; left++)
|
|
132
|
+
leftSum += escapeOverhead(text, left);
|
|
133
|
+
for (; right < to; right++)
|
|
134
|
+
rightSum += escapeOverhead(text, right);
|
|
135
|
+
let sum = rightSum - leftSum;
|
|
136
|
+
if (isLowSurrogate(text.charCodeAt(from)) && isHighSurrogate(text.charCodeAt(from - 1))) {
|
|
137
|
+
sum += 5;
|
|
138
|
+
}
|
|
139
|
+
if (isHighSurrogate(text.charCodeAt(to - 1)) && isLowSurrogate(text.charCodeAt(to)))
|
|
140
|
+
sum += 5;
|
|
141
|
+
return sum;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The merged ranges `prepareSimpleSearch` reports for `text`, and its score;
|
|
146
|
+
* `undefined` when some token does not occur. With no tokens every text
|
|
147
|
+
* matches, with no ranges and a score of 0.
|
|
148
|
+
*/
|
|
149
|
+
function prepareSimpleSearch(tokens, queryLength, text) {
|
|
150
|
+
const lower = text.toLowerCase();
|
|
151
|
+
const found = [];
|
|
152
|
+
for (const token of tokens) {
|
|
153
|
+
const before = found.length;
|
|
154
|
+
for (let at = lower.indexOf(token); at !== -1; at = lower.indexOf(token, at + token.length + 1)) {
|
|
155
|
+
found.push([at, at + token.length]);
|
|
156
|
+
}
|
|
157
|
+
if (found.length === before)
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
// Array sort is stable, and ranges sharing a start merge alike in any order.
|
|
161
|
+
found.sort((a, b) => a[0] - b[0]);
|
|
162
|
+
const ranges = [];
|
|
163
|
+
for (const range of found) {
|
|
164
|
+
const last = ranges.at(-1);
|
|
165
|
+
if (last === undefined || last[1] < range[0])
|
|
166
|
+
ranges.push(range);
|
|
167
|
+
else if (last[1] < range[1])
|
|
168
|
+
last[1] = range[1];
|
|
169
|
+
}
|
|
170
|
+
return { ranges, score: score(ranges, queryLength, text.length) };
|
|
171
|
+
}
|
|
172
|
+
/** Obsidian's simple-search score, with its operations in its order so the result is bit-identical. */
|
|
173
|
+
function score(ranges, queryLength, textLength) {
|
|
174
|
+
const first = ranges[0];
|
|
175
|
+
const last = ranges.at(-1);
|
|
176
|
+
if (first === undefined || last === undefined)
|
|
177
|
+
return 0;
|
|
178
|
+
let s = 0;
|
|
179
|
+
s -= Math.max(0, ranges.length - 1);
|
|
180
|
+
s -= (last[1] - first[0] + 1 - queryLength) / 100;
|
|
181
|
+
s -= first[0] / 1e3;
|
|
182
|
+
s -= textLength / 1e4;
|
|
183
|
+
return s;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* One text search over notes added in vault order, holding each hit's context
|
|
187
|
+
* windows. `maxResponseChars` bounds the plugin's response for those hits, its
|
|
188
|
+
* length as `JSON.stringify(hits, null, 2)` (see `HIT_FRAME`): every hit's
|
|
189
|
+
* filename and score, every span's offsets and escaped window, and the framing
|
|
190
|
+
* around each. The count grows span by span as each note is added, so the
|
|
191
|
+
* span that passes the bound fails the search with `context_length_too_large`
|
|
192
|
+
* at once, and no more spans are held than a response the plugin could send.
|
|
193
|
+
*/
|
|
194
|
+
export class SimpleSearch {
|
|
195
|
+
#contextLength;
|
|
196
|
+
#hits = [];
|
|
197
|
+
#maxResponseChars;
|
|
198
|
+
#queryLength;
|
|
199
|
+
#responseChars = RESPONSE_FRAME;
|
|
200
|
+
/** The distinct non-empty tokens; a note matches only when it holds every one. */
|
|
201
|
+
tokens;
|
|
202
|
+
constructor(query, contextLength, maxResponseChars = Number.POSITIVE_INFINITY) {
|
|
203
|
+
this.tokens = simpleSearchTokens(query);
|
|
204
|
+
this.#queryLength = query.length;
|
|
205
|
+
this.#contextLength = contextLength;
|
|
206
|
+
this.#maxResponseChars = maxResponseChars;
|
|
207
|
+
}
|
|
208
|
+
/** Match one note, `body` as Obsidian's `cachedRead` gives it. */
|
|
209
|
+
add(path, body) {
|
|
210
|
+
const basename = noteBasename(path);
|
|
211
|
+
const prefix = `${basename}\n\n`;
|
|
212
|
+
const result = prepareSimpleSearch(this.tokens, this.#queryLength, prefix + body);
|
|
213
|
+
if (!result)
|
|
214
|
+
return;
|
|
215
|
+
this.#charge(HIT_FRAME + JSON.stringify(path).length + String(result.score).length + EMPTY_MATCHES);
|
|
216
|
+
const basenameJson = JSON.stringify(basename).length;
|
|
217
|
+
const escapes = windowEscapes(body);
|
|
218
|
+
const matches = [];
|
|
219
|
+
const chargeSpan = (start, end, source, contextJson) => this.#charge((matches.length === 0 ? MATCHES_FRAME - EMPTY_MATCHES : 0) +
|
|
220
|
+
SPAN_FRAME +
|
|
221
|
+
digits(start) +
|
|
222
|
+
digits(end) +
|
|
223
|
+
source.length +
|
|
224
|
+
2 +
|
|
225
|
+
contextJson);
|
|
226
|
+
for (const [s, e] of result.ranges) {
|
|
227
|
+
if (s < prefix.length && e <= prefix.length) {
|
|
228
|
+
const end = Math.min(e, basename.length);
|
|
229
|
+
chargeSpan(s, end, 'filename', basenameJson);
|
|
230
|
+
matches.push({
|
|
231
|
+
context: basename,
|
|
232
|
+
contextStart: s,
|
|
233
|
+
match: { start: s, end, source: 'filename' },
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
else if (s >= prefix.length) {
|
|
237
|
+
const start = s - prefix.length;
|
|
238
|
+
const end = e - prefix.length;
|
|
239
|
+
const [from, widened] = widen(body, Math.max(start - this.#contextLength, 0), end + this.#contextLength);
|
|
240
|
+
const to = Math.min(widened, body.length);
|
|
241
|
+
const context = body.slice(from, to);
|
|
242
|
+
chargeSpan(start, end, 'content', 2 + context.length + escapes(from, to));
|
|
243
|
+
matches.push({
|
|
244
|
+
context,
|
|
245
|
+
contextStart: start - from,
|
|
246
|
+
match: { start, end, source: 'content' },
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
this.#hits.push({ filename: path, score: result.score, matches });
|
|
251
|
+
}
|
|
252
|
+
/** Add `chars` to the response, failing the search once it passes `maxResponseChars`. */
|
|
253
|
+
#charge(chars) {
|
|
254
|
+
this.#responseChars += chars;
|
|
255
|
+
if (this.#responseChars <= this.#maxResponseChars)
|
|
256
|
+
return;
|
|
257
|
+
throw validationError(`The matches for this search (contextLength ${this.#contextLength}) would take more than ${this.#maxResponseChars.toLocaleString('en-US')} characters to send across the readable notes, more than one response can carry. Each match costs its context window plus about 150 characters of offsets and framing, so the total tracks the number of matches as well as contextLength.`, { reason: 'context_length_too_large', contextLength: this.#contextLength });
|
|
258
|
+
}
|
|
259
|
+
/** The hits, highest score first; equal scores keep the order their notes were added. */
|
|
260
|
+
hits() {
|
|
261
|
+
return this.#hits.toSorted((a, b) => b.score - a.score);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=simple-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simple-search.js","sourceRoot":"","sources":["../../../src/services/obsidian/simple-search.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "obsidian-mcp-server",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.8.0",
|
|
5
5
|
"description": "Read, write, search, and surgically edit Obsidian vault notes, tags, and frontmatter via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "cyanheads",
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"OBSIDIAN_ENABLE_COMMANDS": "${user_config.OBSIDIAN_ENABLE_COMMANDS}",
|
|
32
32
|
"OBSIDIAN_READ_PATHS": "${user_config.OBSIDIAN_READ_PATHS}",
|
|
33
33
|
"OBSIDIAN_WRITE_PATHS": "${user_config.OBSIDIAN_WRITE_PATHS}",
|
|
34
|
+
"OBSIDIAN_DENY_PATHS": "${user_config.OBSIDIAN_DENY_PATHS}",
|
|
34
35
|
"OBSIDIAN_READ_ONLY": "${user_config.OBSIDIAN_READ_ONLY}",
|
|
35
36
|
"OBSIDIAN_DELETE_ELICITATION": "${user_config.OBSIDIAN_DELETE_ELICITATION}",
|
|
36
37
|
"OBSIDIAN_OMNISEARCH_URL": "${user_config.OBSIDIAN_OMNISEARCH_URL}",
|
|
@@ -89,7 +90,14 @@
|
|
|
89
90
|
},
|
|
90
91
|
"OBSIDIAN_WRITE_PATHS": {
|
|
91
92
|
"title": "Write Path Allowlist",
|
|
92
|
-
"description": "Comma-separated vault-relative folder allowlist for writes. Unset = full vault, or the read scope when reads are restricted. Example: 'projects/,scratch/'.",
|
|
93
|
+
"description": "Comma-separated vault-relative folder allowlist for writes. Unset = full vault, or the read scope when reads are restricted; paths in OBSIDIAN_DENY_PATHS stay denied. Example: 'projects/,scratch/'.",
|
|
94
|
+
"type": "string",
|
|
95
|
+
"required": false,
|
|
96
|
+
"default": ""
|
|
97
|
+
},
|
|
98
|
+
"OBSIDIAN_DENY_PATHS": {
|
|
99
|
+
"title": "Denied Paths",
|
|
100
|
+
"description": "Comma-separated vault-relative paths withheld from reads and writes, overriding both allowlists. Unset = nothing denied. Example: 'private/,journal/therapy/'.",
|
|
93
101
|
"type": "string",
|
|
94
102
|
"required": false,
|
|
95
103
|
"default": ""
|