@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.
- package/CHANGELOG.md +106 -0
- package/dist/eval.js +1 -1
- package/dist/eval.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/media.d.ts +182 -0
- package/dist/tools/media.d.ts.map +1 -0
- package/dist/tools/media.js +304 -0
- package/dist/tools/media.js.map +1 -0
- package/dist/tools/meta.d.ts +201 -0
- package/dist/tools/meta.d.ts.map +1 -0
- package/dist/tools/meta.js +752 -0
- package/dist/tools/meta.js.map +1 -0
- package/dist/tools/read.d.ts +251 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +643 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/search.d.ts +279 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +891 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/write.d.ts +145 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +560 -0
- package/dist/tools/write.js.map +1 -0
- package/package.json +1 -1
- package/dist/tools.d.ts +0 -980
- package/dist/tools.d.ts.map +0 -1
- package/dist/tools.js +0 -3132
- package/dist/tools.js.map +0 -1
|
@@ -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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"}
|