@oomkapwn/enquire-mcp 3.5.13 → 3.6.0-rc.1

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,182 @@
1
+ import type { Vault } from "../vault.js";
2
+ export interface CanvasSummary {
3
+ path: string;
4
+ name: string;
5
+ size_bytes: number;
6
+ mtime: string;
7
+ node_count: number;
8
+ edge_count: number;
9
+ }
10
+ export declare function listCanvases(vault: Vault, args: {
11
+ folder?: string;
12
+ limit?: number;
13
+ }): Promise<CanvasSummary[]>;
14
+ export type CanvasNode = {
15
+ kind: "text";
16
+ id: string;
17
+ x: number;
18
+ y: number;
19
+ width: number;
20
+ height: number;
21
+ text: string;
22
+ color?: string;
23
+ } | {
24
+ kind: "file";
25
+ id: string;
26
+ x: number;
27
+ y: number;
28
+ width: number;
29
+ height: number;
30
+ file: string;
31
+ file_resolved: string | null;
32
+ subpath?: string;
33
+ color?: string;
34
+ } | {
35
+ kind: "link";
36
+ id: string;
37
+ x: number;
38
+ y: number;
39
+ width: number;
40
+ height: number;
41
+ url: string;
42
+ color?: string;
43
+ } | {
44
+ kind: "group";
45
+ id: string;
46
+ x: number;
47
+ y: number;
48
+ width: number;
49
+ height: number;
50
+ label?: string;
51
+ color?: string;
52
+ } | {
53
+ kind: "unknown";
54
+ id: string;
55
+ raw_type: string;
56
+ raw: Record<string, unknown>;
57
+ };
58
+ export interface CanvasEdge {
59
+ id: string;
60
+ from_node: string;
61
+ from_side?: string;
62
+ to_node: string;
63
+ to_side?: string;
64
+ label?: string;
65
+ color?: string;
66
+ }
67
+ export interface ReadCanvasResult {
68
+ path: string;
69
+ name: string;
70
+ size_bytes: number;
71
+ mtime: string;
72
+ nodes: CanvasNode[];
73
+ edges: CanvasEdge[];
74
+ /** Convenience summary: # of each node kind. */
75
+ summary: {
76
+ text: number;
77
+ file: number;
78
+ link: number;
79
+ group: number;
80
+ unknown: number;
81
+ };
82
+ /** Embedded files that didn't resolve to anything in the vault — broken
83
+ * canvas references. Empty when all files resolve cleanly. */
84
+ broken_file_refs: string[];
85
+ }
86
+ export declare function readCanvas(vault: Vault, args: {
87
+ path: string;
88
+ }): Promise<ReadCanvasResult>;
89
+ export interface PdfSummary {
90
+ /** Vault-relative path. */
91
+ path: string;
92
+ /** Filename minus the `.pdf` extension. */
93
+ name: string;
94
+ /** File size in bytes. */
95
+ size_bytes: number;
96
+ /** Last-modified ISO timestamp. */
97
+ mtime: string;
98
+ }
99
+ export declare function listPdfs(vault: Vault, args: {
100
+ folder?: string;
101
+ limit?: number;
102
+ }): Promise<PdfSummary[]>;
103
+ export interface ReadPdfArgs {
104
+ /** Vault-relative path to the .pdf file. */
105
+ path: string;
106
+ /** Optional 1-indexed inclusive page range: `[2, 5]` reads pages 2..5. */
107
+ pages?: [number, number];
108
+ /** When true, include doc-level metadata (title/author/etc) in the result. Default true. */
109
+ include_metadata?: boolean;
110
+ }
111
+ export interface ReadPdfPage {
112
+ page_number: number;
113
+ text: string;
114
+ is_empty: boolean;
115
+ char_count: number;
116
+ }
117
+ export interface ReadPdfResult {
118
+ path: string;
119
+ name: string;
120
+ size_bytes: number;
121
+ mtime: string;
122
+ page_count: number;
123
+ has_text: boolean;
124
+ pages: ReadPdfPage[];
125
+ full_text: string;
126
+ metadata?: {
127
+ title?: string;
128
+ author?: string;
129
+ subject?: string;
130
+ keywords?: string;
131
+ creator?: string;
132
+ producer?: string;
133
+ creation_date?: string;
134
+ mod_date?: string;
135
+ };
136
+ /** When `pages` slicing was applied, this carries the original page count
137
+ * for callers that need to know how much they didn't read. */
138
+ total_page_count: number;
139
+ }
140
+ export declare function readPdf(vault: Vault, args: ReadPdfArgs): Promise<ReadPdfResult>;
141
+ export interface OcrPdfArgs {
142
+ /** Vault-relative path to the .pdf file. */
143
+ path: string;
144
+ /**
145
+ * Tesseract language pack(s). Default `'eng'`. Multi-lang via `'+'`,
146
+ * e.g. `'eng+rus'` for English+Russian mixed scans.
147
+ */
148
+ lang?: string;
149
+ /** Optional 1-indexed inclusive page range, e.g. [2, 5] runs OCR on pages 2..5. */
150
+ pages?: [number, number];
151
+ /**
152
+ * Render scale (DPI multiplier). Higher = better OCR accuracy on small
153
+ * text but more memory + slower render. Default 2 (~150 DPI). Capped at
154
+ * 4 server-side.
155
+ */
156
+ scale?: number;
157
+ }
158
+ export interface OcrPdfPage {
159
+ page_number: number;
160
+ text: string;
161
+ is_empty: boolean;
162
+ char_count: number;
163
+ /** Tesseract's mean confidence for this page, 0-100. */
164
+ confidence: number;
165
+ }
166
+ export interface OcrPdfResult {
167
+ path: string;
168
+ name: string;
169
+ size_bytes: number;
170
+ mtime: string;
171
+ page_count: number;
172
+ total_page_count: number;
173
+ has_text: boolean;
174
+ pages: OcrPdfPage[];
175
+ full_text: string;
176
+ /** Mean confidence across pages with text. NaN if all pages empty. */
177
+ mean_confidence: number;
178
+ /** Languages used for OCR (whatever the caller passed). */
179
+ langs: string;
180
+ }
181
+ export declare function ocrPdf(vault: Vault, args: OcrPdfArgs): Promise<OcrPdfResult>;
182
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,304 @@
1
+ import * as path from "node:path";
2
+ import { findBestMatch } from "./meta.js";
3
+ export async function listCanvases(vault, args) {
4
+ await vault.ensureExists();
5
+ const limit = args.limit ?? 100;
6
+ const all = await vault.listFilesByExtension(".canvas", args.folder);
7
+ const out = [];
8
+ for (const e of all) {
9
+ if (out.length >= limit)
10
+ break;
11
+ let nodeCount = 0;
12
+ let edgeCount = 0;
13
+ let size = e.mtimeMs; // placeholder; replaced below
14
+ try {
15
+ const buf = await vault.readBinaryFile(e.absPath);
16
+ size = buf.byteLength;
17
+ const txt = buf.toString("utf8");
18
+ const parsed = JSON.parse(txt);
19
+ nodeCount = Array.isArray(parsed.nodes) ? parsed.nodes.length : 0;
20
+ edgeCount = Array.isArray(parsed.edges) ? parsed.edges.length : 0;
21
+ }
22
+ catch {
23
+ // Malformed canvas — fall through with 0 counts. Don't poison the listing.
24
+ }
25
+ out.push({
26
+ path: e.relPath,
27
+ name: e.basename.replace(/\.canvas$/i, ""),
28
+ size_bytes: size,
29
+ mtime: new Date(e.mtimeMs).toISOString(),
30
+ node_count: nodeCount,
31
+ edge_count: edgeCount
32
+ });
33
+ }
34
+ out.sort((a, b) => b.mtime.localeCompare(a.mtime));
35
+ return out;
36
+ }
37
+ export async function readCanvas(vault, args) {
38
+ await vault.ensureExists();
39
+ if (!args.path)
40
+ throw new Error("path is required");
41
+ const normalized = args.path.toLowerCase().endsWith(".canvas") ? args.path : `${args.path}.canvas`;
42
+ const abs = vault.resolveInside(normalized);
43
+ await vault.stat(abs); // throws if missing or excluded — fail fast
44
+ const rel = vault.toRel(abs);
45
+ const buf = await vault.readBinaryFile(abs);
46
+ let parsed;
47
+ try {
48
+ parsed = JSON.parse(buf.toString("utf8"));
49
+ }
50
+ catch (err) {
51
+ throw new Error(`Canvas file is not valid JSON: ${rel} — ${err instanceof Error ? err.message : String(err)}`);
52
+ }
53
+ // Resolve each `file:` node's reference against the vault's current
54
+ // markdown index — surfaces broken canvas links the same way
55
+ // get_unresolved_wikilinks does for note bodies.
56
+ const allMarkdown = await vault.listMarkdown();
57
+ const nodes = [];
58
+ const summary = { text: 0, file: 0, link: 0, group: 0, unknown: 0 };
59
+ const brokenRefs = [];
60
+ if (Array.isArray(parsed.nodes)) {
61
+ for (const raw of parsed.nodes) {
62
+ if (!raw || typeof raw !== "object")
63
+ continue;
64
+ const n = raw;
65
+ const id = typeof n.id === "string" ? n.id : "";
66
+ const x = typeof n.x === "number" ? n.x : 0;
67
+ const y = typeof n.y === "number" ? n.y : 0;
68
+ const width = typeof n.width === "number" ? n.width : 0;
69
+ const height = typeof n.height === "number" ? n.height : 0;
70
+ const color = typeof n.color === "string" ? n.color : undefined;
71
+ const type = typeof n.type === "string" ? n.type : "unknown";
72
+ switch (type) {
73
+ case "text":
74
+ nodes.push({
75
+ kind: "text",
76
+ id,
77
+ x,
78
+ y,
79
+ width,
80
+ height,
81
+ text: typeof n.text === "string" ? n.text : "",
82
+ ...(color !== undefined ? { color } : {})
83
+ });
84
+ summary.text += 1;
85
+ break;
86
+ case "file": {
87
+ const fileRef = typeof n.file === "string" ? n.file : "";
88
+ // Strip leading slash so `findBestMatch` treats it as relative.
89
+ const cleaned = fileRef.replace(/^\/+/, "");
90
+ // findBestMatch only looks at the basename; for canvases we have a full
91
+ // vault-relative path, so try direct match first. Fall through to
92
+ // findBestMatch (basename) for the path-stripped case.
93
+ const direct = cleaned.length > 0 ? allMarkdown.find((m) => m.relPath.replace(/\\/g, "/") === cleaned) : undefined;
94
+ const resolved = direct ?? (cleaned ? findBestMatch(allMarkdown, cleaned) : null);
95
+ if (cleaned && !resolved)
96
+ brokenRefs.push(cleaned);
97
+ nodes.push({
98
+ kind: "file",
99
+ id,
100
+ x,
101
+ y,
102
+ width,
103
+ height,
104
+ file: fileRef,
105
+ file_resolved: resolved ? resolved.relPath : null,
106
+ ...(typeof n.subpath === "string" ? { subpath: n.subpath } : {}),
107
+ ...(color !== undefined ? { color } : {})
108
+ });
109
+ summary.file += 1;
110
+ break;
111
+ }
112
+ case "link":
113
+ nodes.push({
114
+ kind: "link",
115
+ id,
116
+ x,
117
+ y,
118
+ width,
119
+ height,
120
+ url: typeof n.url === "string" ? n.url : "",
121
+ ...(color !== undefined ? { color } : {})
122
+ });
123
+ summary.link += 1;
124
+ break;
125
+ case "group":
126
+ nodes.push({
127
+ kind: "group",
128
+ id,
129
+ x,
130
+ y,
131
+ width,
132
+ height,
133
+ ...(typeof n.label === "string" ? { label: n.label } : {}),
134
+ ...(color !== undefined ? { color } : {})
135
+ });
136
+ summary.group += 1;
137
+ break;
138
+ default:
139
+ nodes.push({ kind: "unknown", id, raw_type: type, raw: n });
140
+ summary.unknown += 1;
141
+ }
142
+ }
143
+ }
144
+ const edges = [];
145
+ if (Array.isArray(parsed.edges)) {
146
+ for (const raw of parsed.edges) {
147
+ if (!raw || typeof raw !== "object")
148
+ continue;
149
+ const e = raw;
150
+ const id = typeof e.id === "string" ? e.id : "";
151
+ const fromNode = typeof e.fromNode === "string" ? e.fromNode : "";
152
+ const toNode = typeof e.toNode === "string" ? e.toNode : "";
153
+ if (!fromNode || !toNode)
154
+ continue;
155
+ edges.push({
156
+ id,
157
+ from_node: fromNode,
158
+ ...(typeof e.fromSide === "string" ? { from_side: e.fromSide } : {}),
159
+ to_node: toNode,
160
+ ...(typeof e.toSide === "string" ? { to_side: e.toSide } : {}),
161
+ ...(typeof e.label === "string" ? { label: e.label } : {}),
162
+ ...(typeof e.color === "string" ? { color: e.color } : {})
163
+ });
164
+ }
165
+ }
166
+ const stat = await vault.stat(abs);
167
+ return {
168
+ path: rel,
169
+ name: path.basename(rel).replace(/\.canvas$/i, ""),
170
+ size_bytes: stat.size,
171
+ mtime: new Date(stat.mtimeMs).toISOString(),
172
+ nodes,
173
+ edges,
174
+ summary,
175
+ broken_file_refs: brokenRefs
176
+ };
177
+ }
178
+ export async function listPdfs(vault, args) {
179
+ await vault.ensureExists();
180
+ const limit = args.limit ?? 100;
181
+ const all = await vault.listFilesByExtension(".pdf", args.folder);
182
+ const out = [];
183
+ for (const e of all) {
184
+ if (out.length >= limit)
185
+ break;
186
+ let size = 0;
187
+ try {
188
+ const buf = await vault.readBinaryFile(e.absPath);
189
+ size = buf.byteLength;
190
+ }
191
+ catch {
192
+ // Unreadable PDF — skip without poisoning the listing.
193
+ continue;
194
+ }
195
+ out.push({
196
+ path: e.relPath,
197
+ name: e.basename.replace(/\.pdf$/i, ""),
198
+ size_bytes: size,
199
+ mtime: new Date(e.mtimeMs).toISOString()
200
+ });
201
+ }
202
+ out.sort((a, b) => b.mtime.localeCompare(a.mtime));
203
+ return out;
204
+ }
205
+ export async function readPdf(vault, args) {
206
+ await vault.ensureExists();
207
+ if (!args.path)
208
+ throw new Error("path is required");
209
+ const normalized = args.path.toLowerCase().endsWith(".pdf") ? args.path : `${args.path}.pdf`;
210
+ const abs = vault.resolveInside(normalized);
211
+ const stat = await vault.stat(abs); // throws if missing or excluded
212
+ const rel = vault.toRel(abs);
213
+ const buf = await vault.readBinaryFile(abs);
214
+ // Lazy import — keeps the markdown-only path zero-cost when pdfjs-dist
215
+ // isn't installed (--omit=optional users).
216
+ const { extractPdfText } = await import("../pdf.js");
217
+ const result = await extractPdfText(buf);
218
+ // Optional page-range slice (1-indexed inclusive). Validated lightly —
219
+ // out-of-range bounds clamp rather than throw, matching how `slice()`
220
+ // behaves elsewhere in the toolkit.
221
+ let pages = result.pages;
222
+ if (args.pages && args.pages.length === 2) {
223
+ const [from, to] = args.pages;
224
+ if (typeof from === "number" && typeof to === "number" && from > 0 && to >= from) {
225
+ pages = result.pages.slice(from - 1, to);
226
+ }
227
+ }
228
+ const out = {
229
+ path: rel,
230
+ name: rel
231
+ .split("/")
232
+ .pop()
233
+ ?.replace(/\.pdf$/i, "") ?? rel,
234
+ size_bytes: buf.byteLength,
235
+ mtime: new Date(stat.mtimeMs).toISOString(),
236
+ page_count: pages.length,
237
+ has_text: pages.some((p) => !p.isEmpty),
238
+ pages: pages.map((p) => ({
239
+ page_number: p.pageNumber,
240
+ text: p.text,
241
+ is_empty: p.isEmpty,
242
+ char_count: p.charCount
243
+ })),
244
+ full_text: pages
245
+ .map((p) => p.text)
246
+ .filter((t) => t.length > 0)
247
+ .join("\n\n"),
248
+ total_page_count: result.pageCount
249
+ };
250
+ if (args.include_metadata !== false && Object.keys(result.metadata).length > 0) {
251
+ out.metadata = {
252
+ title: result.metadata.title,
253
+ author: result.metadata.author,
254
+ subject: result.metadata.subject,
255
+ keywords: result.metadata.keywords,
256
+ creator: result.metadata.creator,
257
+ producer: result.metadata.producer,
258
+ creation_date: result.metadata.creationDate,
259
+ mod_date: result.metadata.modDate
260
+ };
261
+ }
262
+ return out;
263
+ }
264
+ export async function ocrPdf(vault, args) {
265
+ await vault.ensureExists();
266
+ if (!args.path)
267
+ throw new Error("path is required");
268
+ const normalized = args.path.toLowerCase().endsWith(".pdf") ? args.path : `${args.path}.pdf`;
269
+ const abs = vault.resolveInside(normalized);
270
+ const stat = await vault.stat(abs); // throws if missing or excluded
271
+ const rel = vault.toRel(abs);
272
+ const buf = await vault.readBinaryFile(abs);
273
+ // Lazy import — keeps the markdown-only path zero-cost when tesseract /
274
+ // canvas optionalDeps aren't installed.
275
+ const { extractPdfWithOcr } = await import("../ocr.js");
276
+ const result = await extractPdfWithOcr(buf, {
277
+ ...(args.lang ? { langs: args.lang } : {}),
278
+ ...(args.pages ? { pages: args.pages } : {}),
279
+ ...(typeof args.scale === "number" ? { scale: args.scale } : {})
280
+ });
281
+ return {
282
+ path: rel,
283
+ name: rel
284
+ .split("/")
285
+ .pop()
286
+ ?.replace(/\.pdf$/i, "") ?? rel,
287
+ size_bytes: buf.byteLength,
288
+ mtime: new Date(stat.mtimeMs).toISOString(),
289
+ page_count: result.pages.length,
290
+ total_page_count: result.pageCount,
291
+ has_text: result.hasText,
292
+ pages: result.pages.map((p) => ({
293
+ page_number: p.pageNumber,
294
+ text: p.text,
295
+ is_empty: p.isEmpty,
296
+ char_count: p.charCount,
297
+ confidence: Math.round(p.confidence * 10) / 10
298
+ })),
299
+ full_text: result.fullText,
300
+ mean_confidence: Number.isFinite(result.meanConfidence) ? Math.round(result.meanConfidence * 10) / 10 : Number.NaN,
301
+ langs: result.langs
302
+ };
303
+ }
304
+ //# sourceMappingURL=media.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/tools/media.ts"],"names":[],"mappings":"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"}