@oomkapwn/enquire-mcp 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,143 @@
1
+ import type { Embed, Wikilink } from "./parser.js";
2
+ import type { Vault } from "./vault.js";
3
+ export interface NoteSummary {
4
+ title: string;
5
+ path: string;
6
+ frontmatter: Record<string, unknown>;
7
+ tags: string[];
8
+ mtime: string;
9
+ }
10
+ export declare function listNotes(vault: Vault, args: {
11
+ tag?: string;
12
+ folder?: string;
13
+ since_date?: string;
14
+ limit?: number;
15
+ }): Promise<NoteSummary[]>;
16
+ export declare function readNote(vault: Vault, args: {
17
+ path?: string;
18
+ title?: string;
19
+ }): Promise<{
20
+ path: string;
21
+ title: string;
22
+ content: string;
23
+ frontmatter: Record<string, unknown>;
24
+ wikilinks: Wikilink[];
25
+ embeds: Embed[];
26
+ tags: string[];
27
+ mtime: string;
28
+ }>;
29
+ export declare function resolveWikilink(vault: Vault, args: {
30
+ wikilink: string;
31
+ from_note?: string;
32
+ include_content?: boolean;
33
+ }): Promise<{
34
+ found: boolean;
35
+ path: string | null;
36
+ title: string | null;
37
+ content: string | null;
38
+ section: string | null;
39
+ block: string | null;
40
+ alias: string | null;
41
+ }>;
42
+ export declare function searchText(vault: Vault, args: {
43
+ query: string;
44
+ folder?: string;
45
+ limit?: number;
46
+ }): Promise<Array<{
47
+ path: string;
48
+ snippet: string;
49
+ score: number;
50
+ line: number;
51
+ }>>;
52
+ export declare function getRecentEdits(vault: Vault, args: {
53
+ since_minutes?: number;
54
+ limit?: number;
55
+ folder?: string;
56
+ }): Promise<NoteSummary[]>;
57
+ export interface BacklinkHit {
58
+ path: string;
59
+ title: string;
60
+ count: number;
61
+ snippets: string[];
62
+ link_kind: "wikilink" | "embed" | "mixed";
63
+ }
64
+ export declare function getBacklinks(vault: Vault, args: {
65
+ path?: string;
66
+ title?: string;
67
+ limit?: number;
68
+ include_embeds?: boolean;
69
+ }): Promise<BacklinkHit[]>;
70
+ export declare function dataviewQuery(vault: Vault, args: {
71
+ query: string;
72
+ }): Promise<{
73
+ query: string;
74
+ rows: Array<Record<string, unknown>>;
75
+ }>;
76
+ export interface UnresolvedWikilink {
77
+ from_path: string;
78
+ target: string;
79
+ raw: string;
80
+ kind: "wikilink" | "embed";
81
+ alias: string | null;
82
+ section: string | null;
83
+ block: string | null;
84
+ line: number;
85
+ snippet: string;
86
+ }
87
+ export declare function getUnresolvedWikilinks(vault: Vault, args: {
88
+ folder?: string;
89
+ include_embeds?: boolean;
90
+ limit?: number;
91
+ }): Promise<UnresolvedWikilink[]>;
92
+ export interface OutboundLink {
93
+ raw: string;
94
+ target: string;
95
+ kind: "wikilink" | "embed";
96
+ alias: string | null;
97
+ section: string | null;
98
+ block: string | null;
99
+ resolved_path: string | null;
100
+ resolved_title: string | null;
101
+ }
102
+ export declare function getOutboundLinks(vault: Vault, args: {
103
+ path?: string;
104
+ title?: string;
105
+ include_embeds?: boolean;
106
+ include_unresolved?: boolean;
107
+ }): Promise<{
108
+ from_path: string;
109
+ from_title: string;
110
+ links: OutboundLink[];
111
+ }>;
112
+ export interface TagSummary {
113
+ tag: string;
114
+ count: number;
115
+ frontmatter_count: number;
116
+ inline_count: number;
117
+ }
118
+ export declare function listTags(vault: Vault, args: {
119
+ folder?: string;
120
+ min_count?: number;
121
+ limit?: number;
122
+ }): Promise<TagSummary[]>;
123
+ export declare function createNote(vault: Vault, args: {
124
+ path: string;
125
+ content: string;
126
+ frontmatter?: Record<string, unknown>;
127
+ overwrite?: boolean;
128
+ }): Promise<{
129
+ path: string;
130
+ mtime: string;
131
+ bytes: number;
132
+ }>;
133
+ export declare function appendToNote(vault: Vault, args: {
134
+ path?: string;
135
+ title?: string;
136
+ content: string;
137
+ separator?: string;
138
+ }): Promise<{
139
+ path: string;
140
+ mtime: string;
141
+ appended_bytes: number;
142
+ }>;
143
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/tools.js ADDED
@@ -0,0 +1,445 @@
1
+ import * as path from "node:path";
2
+ import { parseDql, runDql } from "./dql.js";
3
+ export async function listNotes(vault, args) {
4
+ await vault.ensureExists();
5
+ const limit = args.limit ?? 50;
6
+ const sinceMs = args.since_date ? Date.parse(args.since_date) : null;
7
+ if (sinceMs !== null && Number.isNaN(sinceMs)) {
8
+ throw new Error(`Invalid since_date: ${args.since_date}. Use ISO 8601 (YYYY-MM-DD).`);
9
+ }
10
+ const wantTag = args.tag ? normalizeTag(args.tag) : null;
11
+ const entries = await vault.listMarkdown(args.folder);
12
+ entries.sort((a, b) => b.mtimeMs - a.mtimeMs);
13
+ const out = [];
14
+ for (const e of entries) {
15
+ if (sinceMs !== null && e.mtimeMs < sinceMs)
16
+ continue;
17
+ const { parsed } = await vault.readNote(e.absPath, e.mtimeMs);
18
+ if (wantTag && !parsed.tags.some((t) => normalizeTag(t) === wantTag))
19
+ continue;
20
+ out.push({
21
+ title: stripMd(e.basename),
22
+ path: e.relPath,
23
+ frontmatter: parsed.frontmatter,
24
+ tags: parsed.tags,
25
+ mtime: new Date(e.mtimeMs).toISOString()
26
+ });
27
+ if (out.length >= limit)
28
+ break;
29
+ }
30
+ return out;
31
+ }
32
+ export async function readNote(vault, args) {
33
+ await vault.ensureExists();
34
+ const entry = await resolveTarget(vault, args);
35
+ const { parsed, mtimeMs } = await vault.readNote(entry.absPath, entry.mtimeMs);
36
+ return {
37
+ path: entry.relPath,
38
+ title: stripMd(entry.basename),
39
+ content: parsed.body,
40
+ frontmatter: parsed.frontmatter,
41
+ wikilinks: parsed.wikilinks,
42
+ embeds: parsed.embeds,
43
+ tags: parsed.tags,
44
+ mtime: new Date(mtimeMs).toISOString()
45
+ };
46
+ }
47
+ export async function resolveWikilink(vault, args) {
48
+ await vault.ensureExists();
49
+ const cleaned = args.wikilink.replace(/^!?\[\[|\]\]$/g, "");
50
+ const aliasIdx = cleaned.indexOf("|");
51
+ const alias = aliasIdx === -1 ? null : cleaned.slice(aliasIdx + 1).trim();
52
+ let rest = aliasIdx === -1 ? cleaned : cleaned.slice(0, aliasIdx);
53
+ const blockIdx = rest.indexOf("^");
54
+ const block = blockIdx === -1 ? null : rest.slice(blockIdx + 1).trim();
55
+ rest = blockIdx === -1 ? rest : rest.slice(0, blockIdx);
56
+ const hashIdx = rest.indexOf("#");
57
+ const section = hashIdx === -1 ? null : rest.slice(hashIdx + 1).trim();
58
+ const target = (hashIdx === -1 ? rest : rest.slice(0, hashIdx)).trim();
59
+ if (!target) {
60
+ return { found: false, path: null, title: null, content: null, section, block, alias };
61
+ }
62
+ const all = await vault.listMarkdown();
63
+ const match = findBestMatch(all, target, args.from_note);
64
+ if (!match) {
65
+ return { found: false, path: null, title: null, content: null, section, block, alias };
66
+ }
67
+ let body = null;
68
+ if (args.include_content !== false) {
69
+ const { parsed } = await vault.readNote(match.absPath, match.mtimeMs);
70
+ body = parsed.body;
71
+ }
72
+ return {
73
+ found: true,
74
+ path: match.relPath,
75
+ title: stripMd(match.basename),
76
+ content: body,
77
+ section,
78
+ block,
79
+ alias
80
+ };
81
+ }
82
+ export async function searchText(vault, args) {
83
+ await vault.ensureExists();
84
+ const limit = args.limit ?? 25;
85
+ const q = args.query;
86
+ if (!q.trim())
87
+ throw new Error("query must not be empty");
88
+ const lowerQ = q.toLowerCase();
89
+ const entries = await vault.listMarkdown(args.folder);
90
+ const out = [];
91
+ for (const e of entries) {
92
+ const { content } = await vault.readNote(e.absPath, e.mtimeMs);
93
+ const lower = content.toLowerCase();
94
+ let score = 0;
95
+ let firstHit = -1;
96
+ let from = 0;
97
+ while (true) {
98
+ const idx = lower.indexOf(lowerQ, from);
99
+ if (idx === -1)
100
+ break;
101
+ score += 1;
102
+ if (firstHit === -1)
103
+ firstHit = idx;
104
+ from = idx + lowerQ.length;
105
+ }
106
+ if (score === 0)
107
+ continue;
108
+ const { snippet, line } = sliceSnippet(content, firstHit, q.length);
109
+ out.push({ path: e.relPath, snippet, score, line });
110
+ }
111
+ out.sort((a, b) => b.score - a.score);
112
+ return out.slice(0, limit);
113
+ }
114
+ export async function getRecentEdits(vault, args) {
115
+ await vault.ensureExists();
116
+ const limit = args.limit ?? 20;
117
+ const sinceMs = args.since_minutes !== undefined ? Date.now() - args.since_minutes * 60_000 : null;
118
+ const entries = await vault.listMarkdown(args.folder);
119
+ entries.sort((a, b) => b.mtimeMs - a.mtimeMs);
120
+ const out = [];
121
+ for (const e of entries) {
122
+ if (sinceMs !== null && e.mtimeMs < sinceMs)
123
+ break;
124
+ const { parsed } = await vault.readNote(e.absPath, e.mtimeMs);
125
+ out.push({
126
+ title: stripMd(e.basename),
127
+ path: e.relPath,
128
+ frontmatter: parsed.frontmatter,
129
+ tags: parsed.tags,
130
+ mtime: new Date(e.mtimeMs).toISOString()
131
+ });
132
+ if (out.length >= limit)
133
+ break;
134
+ }
135
+ return out;
136
+ }
137
+ export async function getBacklinks(vault, args) {
138
+ await vault.ensureExists();
139
+ const limit = args.limit ?? 50;
140
+ const includeEmbeds = args.include_embeds !== false;
141
+ const target = await resolveTarget(vault, args);
142
+ const targetAbs = target.absPath;
143
+ const all = await vault.listMarkdown();
144
+ const hits = [];
145
+ for (const e of all) {
146
+ if (e.absPath === targetAbs)
147
+ continue;
148
+ const { content, parsed } = await vault.readNote(e.absPath, e.mtimeMs);
149
+ const linkBag = [
150
+ ...parsed.wikilinks.map((l) => ({ link: l, kind: "wikilink" })),
151
+ ...(includeEmbeds ? parsed.embeds.map((l) => ({ link: l, kind: "embed" })) : [])
152
+ ];
153
+ if (!linkBag.length)
154
+ continue;
155
+ let count = 0;
156
+ const kindFlags = { wikilink: false, embed: false };
157
+ const snippets = [];
158
+ for (const { link, kind } of linkBag) {
159
+ const match = findBestMatch(all, link.target, e.relPath);
160
+ if (!match || match.absPath !== targetAbs)
161
+ continue;
162
+ count += 1;
163
+ kindFlags[kind] = true;
164
+ if (snippets.length < 2) {
165
+ const literal = `${(kind === "embed" ? "![[" : "[[") + link.raw}]]`;
166
+ const idx = content.indexOf(literal);
167
+ const { snippet } = sliceSnippet(content, idx, literal.length);
168
+ if (snippet)
169
+ snippets.push(snippet);
170
+ }
171
+ }
172
+ if (count === 0)
173
+ continue;
174
+ hits.push({
175
+ path: e.relPath,
176
+ title: stripMd(e.basename),
177
+ count,
178
+ snippets,
179
+ link_kind: kindFlags.wikilink && kindFlags.embed ? "mixed" : kindFlags.embed ? "embed" : "wikilink"
180
+ });
181
+ }
182
+ hits.sort((a, b) => b.count - a.count);
183
+ return hits.slice(0, limit);
184
+ }
185
+ export async function dataviewQuery(vault, args) {
186
+ await vault.ensureExists();
187
+ const parsed = parseDql(args.query);
188
+ const rows = await runDql(vault, parsed);
189
+ return { query: args.query, rows };
190
+ }
191
+ export async function getUnresolvedWikilinks(vault, args) {
192
+ await vault.ensureExists();
193
+ const limit = args.limit ?? 200;
194
+ const includeEmbeds = args.include_embeds !== false;
195
+ const entries = await vault.listMarkdown(args.folder);
196
+ const all = await vault.listMarkdown();
197
+ const out = [];
198
+ for (const e of entries) {
199
+ if (out.length >= limit)
200
+ break;
201
+ const { content, parsed } = await vault.readNote(e.absPath, e.mtimeMs);
202
+ const candidates = [
203
+ ...parsed.wikilinks.map((l) => ({ link: l, kind: "wikilink" })),
204
+ ...(includeEmbeds ? parsed.embeds.map((l) => ({ link: l, kind: "embed" })) : [])
205
+ ];
206
+ for (const { link, kind } of candidates) {
207
+ if (out.length >= limit)
208
+ break;
209
+ if (!link.target)
210
+ continue;
211
+ const match = findBestMatch(all, link.target, e.relPath);
212
+ if (match)
213
+ continue;
214
+ const literal = `${(kind === "embed" ? "![[" : "[[") + link.raw}]]`;
215
+ const idx = content.indexOf(literal);
216
+ const { snippet, line } = sliceSnippet(content, idx, literal.length);
217
+ out.push({
218
+ from_path: e.relPath,
219
+ target: link.target,
220
+ raw: link.raw,
221
+ kind,
222
+ alias: link.alias ?? null,
223
+ section: link.section ?? null,
224
+ block: link.block ?? null,
225
+ line,
226
+ snippet
227
+ });
228
+ }
229
+ }
230
+ return out;
231
+ }
232
+ export async function getOutboundLinks(vault, args) {
233
+ await vault.ensureExists();
234
+ const includeEmbeds = args.include_embeds !== false;
235
+ const includeUnresolved = args.include_unresolved !== false;
236
+ const entry = await resolveTarget(vault, args);
237
+ const { parsed } = await vault.readNote(entry.absPath, entry.mtimeMs);
238
+ const all = await vault.listMarkdown();
239
+ const candidates = [
240
+ ...parsed.wikilinks.map((l) => ({ link: l, kind: "wikilink" })),
241
+ ...(includeEmbeds ? parsed.embeds.map((l) => ({ link: l, kind: "embed" })) : [])
242
+ ];
243
+ const links = [];
244
+ for (const { link, kind } of candidates) {
245
+ const match = findBestMatch(all, link.target, entry.relPath);
246
+ if (!match && !includeUnresolved)
247
+ continue;
248
+ links.push({
249
+ raw: link.raw,
250
+ target: link.target,
251
+ kind,
252
+ alias: link.alias ?? null,
253
+ section: link.section ?? null,
254
+ block: link.block ?? null,
255
+ resolved_path: match ? match.relPath : null,
256
+ resolved_title: match ? stripMd(match.basename) : null
257
+ });
258
+ }
259
+ return {
260
+ from_path: entry.relPath,
261
+ from_title: stripMd(entry.basename),
262
+ links
263
+ };
264
+ }
265
+ export async function listTags(vault, args) {
266
+ await vault.ensureExists();
267
+ const limit = args.limit ?? 200;
268
+ const minCount = args.min_count ?? 1;
269
+ const entries = await vault.listMarkdown(args.folder);
270
+ const counts = new Map();
271
+ for (const e of entries) {
272
+ const { parsed } = await vault.readNote(e.absPath, e.mtimeMs);
273
+ const fmSet = new Set(extractFrontmatterTagsLower(parsed.frontmatter));
274
+ for (const t of parsed.tags) {
275
+ const key = t.toLowerCase();
276
+ const slot = counts.get(key) ?? { count: 0, fm: 0, inline: 0 };
277
+ slot.count += 1;
278
+ if (fmSet.has(key))
279
+ slot.fm += 1;
280
+ else
281
+ slot.inline += 1;
282
+ counts.set(key, slot);
283
+ }
284
+ }
285
+ const out = [];
286
+ for (const [tag, slot] of counts) {
287
+ if (slot.count < minCount)
288
+ continue;
289
+ out.push({ tag, count: slot.count, frontmatter_count: slot.fm, inline_count: slot.inline });
290
+ }
291
+ out.sort((a, b) => b.count - a.count || a.tag.localeCompare(b.tag));
292
+ return out.slice(0, limit);
293
+ }
294
+ export async function createNote(vault, args) {
295
+ await vault.ensureExists();
296
+ const body = composeNote(args.frontmatter, args.content);
297
+ const result = await vault.writeNote(args.path, body, { overwrite: args.overwrite });
298
+ return {
299
+ path: result.relPath,
300
+ mtime: new Date(result.mtimeMs).toISOString(),
301
+ bytes: result.bytes
302
+ };
303
+ }
304
+ export async function appendToNote(vault, args) {
305
+ await vault.ensureExists();
306
+ const target = await resolveTarget(vault, args);
307
+ const sep = args.separator ?? "\n\n";
308
+ const result = await vault.appendNote(target.absPath, sep + args.content);
309
+ return {
310
+ path: result.relPath,
311
+ mtime: new Date(result.mtimeMs).toISOString(),
312
+ appended_bytes: result.appended_bytes
313
+ };
314
+ }
315
+ function composeNote(frontmatter, content) {
316
+ if (!frontmatter || Object.keys(frontmatter).length === 0)
317
+ return content;
318
+ const yaml = renderFrontmatter(frontmatter);
319
+ const trimmed = content.startsWith("\n") ? content : `\n${content}`;
320
+ return `---\n${yaml}---${trimmed}`;
321
+ }
322
+ function renderFrontmatter(fm) {
323
+ const lines = [];
324
+ for (const [key, value] of Object.entries(fm)) {
325
+ lines.push(renderFrontmatterEntry(key, value));
326
+ }
327
+ return `${lines.join("\n")}\n`;
328
+ }
329
+ function renderFrontmatterEntry(key, value) {
330
+ if (Array.isArray(value)) {
331
+ if (value.length === 0)
332
+ return `${key}: []`;
333
+ return `${key}:\n${value.map((v) => ` - ${renderScalar(v)}`).join("\n")}`;
334
+ }
335
+ return `${key}: ${renderScalar(value)}`;
336
+ }
337
+ function renderScalar(value) {
338
+ if (value === null || value === undefined)
339
+ return "null";
340
+ if (typeof value === "number" || typeof value === "boolean")
341
+ return String(value);
342
+ const str = String(value);
343
+ if (/[:\n#&*?{}[\],"\\]/.test(str) ||
344
+ /^\s/.test(str) ||
345
+ /\s$/.test(str) ||
346
+ str === "" ||
347
+ /^(true|false|null|yes|no)$/i.test(str)) {
348
+ return JSON.stringify(str);
349
+ }
350
+ return str;
351
+ }
352
+ function extractFrontmatterTagsLower(fm) {
353
+ const raw = fm.tags ?? fm.tag;
354
+ if (!raw)
355
+ return [];
356
+ const list = Array.isArray(raw)
357
+ ? raw.filter((t) => typeof t === "string")
358
+ : typeof raw === "string"
359
+ ? raw.split(/[,\s]+/).filter(Boolean)
360
+ : [];
361
+ return list.map((t) => t.replace(/^#+/, "").toLowerCase());
362
+ }
363
+ async function resolveTarget(vault, args) {
364
+ if (args.path) {
365
+ const candidates = args.path.toLowerCase().endsWith(".md") ? [args.path] : [args.path, `${args.path}.md`];
366
+ let lastErr;
367
+ for (const candidate of candidates) {
368
+ const abs = vault.resolveInside(candidate);
369
+ try {
370
+ const stat = await vault.stat(abs);
371
+ return {
372
+ absPath: abs,
373
+ relPath: vault.toRel(abs),
374
+ basename: path.basename(abs),
375
+ mtimeMs: stat.mtimeMs
376
+ };
377
+ }
378
+ catch (err) {
379
+ lastErr = err;
380
+ }
381
+ }
382
+ throw lastErr instanceof Error ? lastErr : new Error(`Note not found: ${args.path}`);
383
+ }
384
+ if (args.title) {
385
+ const found = await vault.findByTitle(args.title);
386
+ if (!found)
387
+ throw new Error(`No note found with title: ${args.title}`);
388
+ return found;
389
+ }
390
+ throw new Error("Either path or title is required");
391
+ }
392
+ function findBestMatch(entries, target, fromNote) {
393
+ if (target.startsWith("./") || target.startsWith("../") || target.includes("/../")) {
394
+ if (fromNote) {
395
+ const fromDir = path.dirname(fromNote);
396
+ const joined = path.posix.normalize(path.posix.join(fromDir.split(path.sep).join("/"), target));
397
+ const lower = stripMd(joined).toLowerCase();
398
+ const rel = entries.find((e) => stripMd(e.relPath).toLowerCase() === lower);
399
+ if (rel)
400
+ return rel;
401
+ }
402
+ }
403
+ const norm = stripMd(target).toLowerCase();
404
+ const exact = entries.filter((e) => stripMd(e.basename).toLowerCase() === norm);
405
+ if (exact.length === 1)
406
+ return exact[0] ?? null;
407
+ if (exact.length > 1 && fromNote) {
408
+ const fromDir = path.dirname(fromNote);
409
+ const sameDir = exact.find((e) => path.dirname(e.relPath) === fromDir);
410
+ if (sameDir)
411
+ return sameDir;
412
+ }
413
+ if (exact.length > 0)
414
+ return exact[0] ?? null;
415
+ if (target.includes("/")) {
416
+ const lower = stripMd(target).toLowerCase();
417
+ const path1 = entries.find((e) => stripMd(e.relPath).toLowerCase() === lower);
418
+ if (path1)
419
+ return path1;
420
+ const path2 = entries.find((e) => stripMd(e.relPath).toLowerCase().endsWith(`/${lower}`));
421
+ if (path2)
422
+ return path2;
423
+ }
424
+ return null;
425
+ }
426
+ function sliceSnippet(text, idx, qLen) {
427
+ if (idx < 0)
428
+ return { snippet: "", line: 0 };
429
+ const before = Math.max(0, idx - 60);
430
+ const after = Math.min(text.length, idx + qLen + 60);
431
+ let snippet = text.slice(before, after).replace(/\s+/g, " ").trim();
432
+ if (before > 0)
433
+ snippet = `…${snippet}`;
434
+ if (after < text.length)
435
+ snippet = `${snippet}…`;
436
+ const line = text.slice(0, idx).split("\n").length;
437
+ return { snippet, line };
438
+ }
439
+ function stripMd(name) {
440
+ return name.replace(/\.md$/i, "");
441
+ }
442
+ function normalizeTag(t) {
443
+ return t.replace(/^#+/, "").toLowerCase();
444
+ }
445
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}