@intentic/fileq 1.337.0 → 1.338.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/README.md +29 -3
- package/bin/fileq-rg-pre +66 -0
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +6 -0
- package/dist/app.js.map +1 -1
- package/dist/commands/derive.command.d.ts.map +1 -1
- package/dist/commands/derive.command.js +10 -0
- package/dist/commands/derive.command.js.map +1 -1
- package/dist/commands/read.command.js +1 -1
- package/dist/commands/read.command.js.map +1 -1
- package/dist/commands/ripgrep-config.command.d.ts +3 -0
- package/dist/commands/ripgrep-config.command.d.ts.map +1 -0
- package/dist/commands/ripgrep-config.command.js +24 -0
- package/dist/commands/ripgrep-config.command.js.map +1 -0
- package/dist/commands/stamps.command.d.ts +3 -0
- package/dist/commands/stamps.command.d.ts.map +1 -0
- package/dist/commands/stamps.command.js +13 -0
- package/dist/commands/stamps.command.js.map +1 -0
- package/dist/lib/check/check-pdf.d.ts.map +1 -1
- package/dist/lib/check/check-pdf.js +2 -1
- package/dist/lib/check/check-pdf.js.map +1 -1
- package/dist/lib/check/package.d.ts.map +1 -1
- package/dist/lib/check/package.js +2 -1
- package/dist/lib/check/package.js.map +1 -1
- package/dist/lib/derive.d.ts.map +1 -1
- package/dist/lib/derive.js +39 -8
- package/dist/lib/derive.js.map +1 -1
- package/dist/lib/derivers/pdf.d.ts +1 -0
- package/dist/lib/derivers/pdf.d.ts.map +1 -1
- package/dist/lib/derivers/pdf.js +17 -9
- package/dist/lib/derivers/pdf.js.map +1 -1
- package/dist/lib/formats.d.ts +4 -0
- package/dist/lib/formats.d.ts.map +1 -1
- package/dist/lib/formats.js +15 -0
- package/dist/lib/formats.js.map +1 -1
- package/dist/lib/render/render.d.ts.map +1 -1
- package/dist/lib/render/render.js +5 -7
- package/dist/lib/render/render.js.map +1 -1
- package/dist/lib/sidecar.d.ts +14 -0
- package/dist/lib/sidecar.d.ts.map +1 -1
- package/dist/lib/sidecar.js +40 -4
- package/dist/lib/sidecar.js.map +1 -1
- package/dist/skill.d.ts.map +1 -1
- package/dist/skill.js +23 -2
- package/dist/skill.js.map +1 -1
- package/package.json +9 -7
- package/src/app.ts +6 -0
- package/src/cli.integration.test.ts +9 -0
- package/src/commands/derive.command.ts +12 -0
- package/src/commands/read.command.ts +3 -1
- package/src/commands/ripgrep-config.command.ts +31 -0
- package/src/commands/stamps.command.ts +14 -0
- package/src/lib/check/check-pdf.ts +2 -1
- package/src/lib/check/package.ts +2 -1
- package/src/lib/derive.test.ts +27 -1
- package/src/lib/derive.ts +68 -8
- package/src/lib/derivers/pdf.ts +25 -10
- package/src/lib/formats.ts +32 -0
- package/src/lib/render/render.ts +7 -7
- package/src/lib/sidecar.test.ts +32 -1
- package/src/lib/sidecar.ts +67 -4
- package/src/rg-preprocessor.integration.test.ts +139 -0
- package/src/skill.ts +27 -2
package/dist/lib/derivers/pdf.js
CHANGED
|
@@ -7,9 +7,15 @@ import { extractText, getDocumentProxy, getMeta } from "unpdf";
|
|
|
7
7
|
import { onPath } from "../tools.js";
|
|
8
8
|
import { stripRunningFurniture } from "./pdf-furniture.js";
|
|
9
9
|
const SCAN_THRESHOLD_CHARS_PER_PAGE = 24;
|
|
10
|
-
const
|
|
10
|
+
const DEFAULT_OCR_PAGES = 20;
|
|
11
|
+
const MAX_OCR_PAGES = 5000;
|
|
11
12
|
const OCR_DPI = "200";
|
|
12
|
-
const
|
|
13
|
+
export const ocrPageCap = () => {
|
|
14
|
+
const asked = Number(process.env["FILEQ_OCR_PAGES"]);
|
|
15
|
+
return Number.isInteger(asked) && asked > 0 ? Math.min(asked, MAX_OCR_PAGES) : DEFAULT_OCR_PAGES;
|
|
16
|
+
};
|
|
17
|
+
const capNote = (cap) => `OCR stops at ${cap} pages: draw the rest with pdftoppm and read them with \`ocr <page.png>...\` if they matter`;
|
|
18
|
+
const ocrTimeoutMs = (pages) => 60_000 + pages * 15_000;
|
|
13
19
|
const checked = new Map();
|
|
14
20
|
export const ocrAvailable = () => {
|
|
15
21
|
const path = process.env["PATH"] ?? "";
|
|
@@ -21,17 +27,18 @@ export const ocrAvailable = () => {
|
|
|
21
27
|
return available;
|
|
22
28
|
};
|
|
23
29
|
const readPages = async (images) => {
|
|
24
|
-
const result = await runBounded("ocr", images, { timeoutMs:
|
|
30
|
+
const result = await runBounded("ocr", images, { timeoutMs: ocrTimeoutMs(images.length), maxOutput: 64 * 1024 * 1024 });
|
|
25
31
|
if (!result.timedOut && (result.exitCode === 0 || result.exitCode === 1)) {
|
|
26
32
|
return result.stdout.text;
|
|
27
33
|
}
|
|
28
34
|
throw new ProcessError("ocr", images, result);
|
|
29
35
|
};
|
|
30
|
-
const recognisePages = async (absPath, totalPages) => {
|
|
36
|
+
const recognisePages = async (absPath, totalPages, cap) => {
|
|
31
37
|
const dir = await mkdtemp(join(tmpdir(), "fileq-ocr-"));
|
|
38
|
+
const last = Math.min(totalPages, cap);
|
|
32
39
|
try {
|
|
33
|
-
await execBounded("pdftoppm", ["-r", OCR_DPI, "-png", "-f", "1", "-l", String(
|
|
34
|
-
timeoutMs: 120_000,
|
|
40
|
+
await execBounded("pdftoppm", ["-r", OCR_DPI, "-png", "-f", "1", "-l", String(last), absPath, join(dir, "page")], {
|
|
41
|
+
timeoutMs: 120_000 + last * 2_000,
|
|
35
42
|
});
|
|
36
43
|
const images = (await readdir(dir)).filter((name) => name.endsWith(".png")).toSorted();
|
|
37
44
|
if (images.length === 0) {
|
|
@@ -78,12 +85,13 @@ export const pdfDeriver = {
|
|
|
78
85
|
notes: [`no usable text layer across ${totalPages} page${plural} (a scan?): OCR is not part of this tier`],
|
|
79
86
|
};
|
|
80
87
|
}
|
|
81
|
-
const
|
|
88
|
+
const cap = ocrPageCap();
|
|
89
|
+
const recognised = await recognisePages(absPath, totalPages, cap);
|
|
82
90
|
const notes = [
|
|
83
91
|
`scanned: text recognised by OCR (PaddleOCR) on ${recognised.length} of ${totalPages} page${plural} — recognised, not exact; check figures against the page image`,
|
|
84
92
|
];
|
|
85
|
-
if (totalPages >
|
|
86
|
-
notes.push(
|
|
93
|
+
if (totalPages > cap) {
|
|
94
|
+
notes.push(capNote(cap));
|
|
87
95
|
}
|
|
88
96
|
const { markdown, notes: stripped } = withoutFurniture(recognised);
|
|
89
97
|
return { markdown, title, notes: [...notes, ...stripped] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/lib/derivers/pdf.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAU3D,MAAM,6BAA6B,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../../src/lib/derivers/pdf.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/formats.d.ts
CHANGED
|
@@ -2,5 +2,9 @@ export type Format = "docx" | "xlsx" | "pptx" | "pdf" | "image" | "media" | "htm
|
|
|
2
2
|
export declare const EXTENSION_FORMAT: Record<string, Format>;
|
|
3
3
|
export declare const detectFormat: (absPath: string) => Promise<Format | undefined>;
|
|
4
4
|
export declare const claimedFormat: (absPath: string) => Promise<Format | undefined>;
|
|
5
|
+
export declare const DOCUMENT_FORMATS: ReadonlySet<Format>;
|
|
6
|
+
export declare const documentExtensions: () => string[];
|
|
7
|
+
export declare const documentFormatOf: (path: string) => Format | undefined;
|
|
8
|
+
export declare const ripgrepConfigLines: (pre: string) => string[];
|
|
5
9
|
export declare const gitAttributeLines: () => string[];
|
|
6
10
|
//# sourceMappingURL=formats.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/lib/formats.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AA6C9J,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqDnD,CAAC;AAMF,eAAO,MAAM,YAAY,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAS9E,CAAC;AAMF,eAAO,MAAM,aAAa,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAsF,CAAC;
|
|
1
|
+
{"version":3,"file":"formats.d.ts","sourceRoot":"","sources":["../../src/lib/formats.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AA6C9J,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqDnD,CAAC;AAMF,eAAO,MAAM,YAAY,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAS9E,CAAC;AAMF,eAAO,MAAM,aAAa,YAAmB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAsF,CAAC;AAMvK,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAgF,CAAC;AAGlI,eAAO,MAAM,kBAAkB,QAAO,MAAM,EAIzB,CAAC;AAGpB,eAAO,MAAM,gBAAgB,SAAU,MAAM,KAAG,MAAM,GAAG,SAGxD,CAAC;AASF,eAAO,MAAM,kBAAkB,QAAS,MAAM,KAAG,MAAM,EAItD,CAAC;AAUF,eAAO,MAAM,iBAAiB,QAAO,MAAM,EAIxB,CAAC"}
|
package/dist/lib/formats.js
CHANGED
|
@@ -102,6 +102,21 @@ export const detectFormat = async (absPath) => {
|
|
|
102
102
|
return byExtension;
|
|
103
103
|
};
|
|
104
104
|
export const claimedFormat = async (absPath) => (await detectFormat(absPath)) ?? EXTENSION_FORMAT[extname(absPath).toLowerCase()];
|
|
105
|
+
export const DOCUMENT_FORMATS = new Set(["pdf", "docx", "xlsx", "pptx", "odt", "ods", "odp", "rtf", "epub"]);
|
|
106
|
+
export const documentExtensions = () => Object.entries(EXTENSION_FORMAT)
|
|
107
|
+
.filter(([, format]) => DOCUMENT_FORMATS.has(format))
|
|
108
|
+
.map(([extension]) => extension)
|
|
109
|
+
.toSorted();
|
|
110
|
+
export const documentFormatOf = (path) => {
|
|
111
|
+
const format = EXTENSION_FORMAT[extname(path).toLowerCase()];
|
|
112
|
+
return format !== undefined && DOCUMENT_FORMATS.has(format) ? format : undefined;
|
|
113
|
+
};
|
|
114
|
+
const caseGlob = (extension) => `*.{${extension.slice(1)},${extension.slice(1).toUpperCase()}}`;
|
|
115
|
+
export const ripgrepConfigLines = (pre) => [
|
|
116
|
+
"# fileq: ripgrep searches the text of documents, cited by page (`[p. 12] `); see `fileq ripgrep-config --help`.",
|
|
117
|
+
`--pre=${pre}`,
|
|
118
|
+
...documentExtensions().map((extension) => `--pre-glob=${caseGlob(extension)}`),
|
|
119
|
+
];
|
|
105
120
|
const TEXT_UNDERNEATH = new Set(["html"]);
|
|
106
121
|
export const gitAttributeLines = () => Object.entries(EXTENSION_FORMAT)
|
|
107
122
|
.filter(([, format]) => !TEXT_UNDERNEATH.has(format))
|
package/dist/lib/formats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/lib/formats.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"formats.js","sourceRoot":"","sources":["../../src/lib/formats.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/lib/render/render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/lib/render/render.ts"],"names":[],"mappings":"AAUA,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAQnE,eAAO,MAAM,YAAY,mCAAsC,CAAC;AAIhE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,YAAY,OAAO,CAAC;AAKjC,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAE3C,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAAC;IAEjD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAEpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;CAC5B;AAWD,eAAO,MAAM,aAAa,YAAa,MAAM,iBAAiB,MAAM,GAAG,SAAS,KAAG,MAOlF,CAAC;AAuEF,eAAO,MAAM,cAAc,YAAmB,aAAa,iBAAiB,MAAM,GAAG,SAAS,KAAG,OAAO,CAAC,YAAY,CAkDpH,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { copyFile, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { basename, join } from "node:path";
|
|
5
|
+
import { parseJsonOr } from "@intentic/base/json";
|
|
6
|
+
import { readTextIfExists } from "@intentic/base/fs";
|
|
5
7
|
import { toolOutDir } from "@intentic/agent-cli/env";
|
|
6
8
|
import { STATE_DIR } from "@intentic/constants";
|
|
7
9
|
import { getDocumentProxy } from "unpdf";
|
|
@@ -27,13 +29,9 @@ export const defaultOutDir = (absPath, workspaceRoot) => {
|
|
|
27
29
|
return join(toolOutDir("fileq"), "rendered", `${basename(absPath).toLowerCase().replaceAll(/[^a-z0-9.]+/g, "-")}-${hash}`);
|
|
28
30
|
};
|
|
29
31
|
const readStamp = async (dir) => {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
return undefined;
|
|
36
|
-
}
|
|
32
|
+
const text = await readTextIfExists(join(dir, STAMP_FILE));
|
|
33
|
+
const parsed = text === undefined ? undefined : parseJsonOr(text, undefined);
|
|
34
|
+
return parsed?.sha256 === undefined || parsed.size === undefined || parsed.total === undefined ? undefined : { sha256: parsed.sha256, size: parsed.size, total: parsed.total };
|
|
37
35
|
};
|
|
38
36
|
const clearImages = async (dir) => {
|
|
39
37
|
const names = await listDir(dir);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/lib/render/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,aAAa,EAAe,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AAQnE,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,SAAS,uBAAuB,CAAC;AAIhE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC;AAEjC,MAAM,UAAU,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AACtG,MAAM,MAAM,GAAwB,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE7D,MAAM,OAAO,aAAc,SAAQ,KAAK;CAAG;AAmC3C,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAGxC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,aAAiC,EAAU,EAAE;IACxF,MAAM,OAAO,GAAG,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAC5F,IAAI,aAAa,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AAC/H,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,KAAK,EAAE,GAAW,EAA8B,EAAE;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/lib/render/render.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/sidecar.d.ts
CHANGED
|
@@ -8,8 +8,21 @@ export interface SidecarFront {
|
|
|
8
8
|
readonly deriver: string | undefined;
|
|
9
9
|
readonly derivedAt: string | undefined;
|
|
10
10
|
readonly title: string | undefined;
|
|
11
|
+
readonly sourceSize: string | undefined;
|
|
12
|
+
readonly sourceMtime: string | undefined;
|
|
11
13
|
readonly notes: readonly string[];
|
|
12
14
|
}
|
|
15
|
+
export interface SourceStat {
|
|
16
|
+
readonly size: string;
|
|
17
|
+
readonly mtime: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const sourceStatOf: (stats: {
|
|
20
|
+
readonly size: bigint;
|
|
21
|
+
readonly mtimeNs: bigint;
|
|
22
|
+
}) => SourceStat;
|
|
23
|
+
export declare const readSourceStat: (absPath: string) => Promise<SourceStat | undefined>;
|
|
24
|
+
export declare const ocrCapOf: (notes: readonly string[]) => number | undefined;
|
|
25
|
+
export declare const sourceUnchanged: (front: SidecarFront, now: SourceStat | undefined) => boolean;
|
|
13
26
|
export declare const parseSidecarFront: (content: string) => SidecarFront;
|
|
14
27
|
export declare const sidecarBody: (content: string) => string;
|
|
15
28
|
export declare const readSidecar: (sidecarPath: string) => Promise<string | undefined>;
|
|
@@ -20,6 +33,7 @@ export interface DerivedEntry {
|
|
|
20
33
|
readonly deriverStamp: string;
|
|
21
34
|
readonly doc: DerivedDoc;
|
|
22
35
|
readonly derivedAt: Date;
|
|
36
|
+
readonly sourceStat?: SourceStat | undefined;
|
|
23
37
|
}
|
|
24
38
|
export interface WriteSidecarInput extends Omit<DerivedEntry, "source"> {
|
|
25
39
|
readonly relPath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../../src/lib/sidecar.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sidecar.d.ts","sourceRoot":"","sources":["../../src/lib/sidecar.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAaxD,eAAO,MAAM,WAAW,kCAAsB,CAAC;AAE/C,eAAO,MAAM,cAAc,kBAAmB,MAAM,WAAW,MAAM,KAAG,MAA2D,CAAC;AAEpI,eAAO,MAAM,YAAY,YAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAOvD,CAAC;AAEP,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAEzC,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAcD,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,YAAY,UAAW;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAG,UAIzF,CAAC;AAGF,eAAO,MAAM,cAAc,YAAmB,MAAM,KAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAOpF,CAAC;AAQF,eAAO,MAAM,QAAQ,UAAW,SAAS,MAAM,EAAE,KAAG,MAAM,GAAG,SAQ5D,CAAC;AAGF,eAAO,MAAM,eAAe,UAAW,YAAY,OAAO,UAAU,GAAG,SAAS,KAAG,OACM,CAAC;AAI1F,eAAO,MAAM,iBAAiB,YAAa,MAAM,KAAG,YA4BnD,CAAC;AAGF,eAAO,MAAM,WAAW,YAAa,MAAM,KAAG,MAM7C,CAAC;AAEF,eAAO,MAAM,WAAW,gBAAuB,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAMjF,CAAC;AAEF,eAAO,MAAM,OAAO,aAAc,MAAM,GAAG,SAAS,aAAa,MAAM,gBAAgB,MAAM,KAAG,OAM/F,CAAC;AAEF,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAEzB,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;CAChD;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC5B;AASD,eAAO,MAAM,YAAY,SAAgB,MAAM,SAAS,YAAY,KAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAmB5H,CAAC;AAGF,eAAO,MAAM,YAAY,kBAAyB,MAAM,SAAS,iBAAiB,KAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAK1I,CAAC;AAKF,eAAO,MAAM,kBAAkB,kBAAyB,MAAM,KAAG,OAAO,CAAC,IAAI,CAS5E,CAAC;AAGF,eAAO,MAAM,aAAa,kBAAyB,MAAM,WAAW,MAAM,KAAG,OAAO,CAAC,OAAO,CAO3F,CAAC"}
|
package/dist/lib/sidecar.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { createReadStream } from "node:fs";
|
|
3
|
-
import { readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
4
4
|
import { join } from "node:path";
|
|
5
5
|
import { estimateTokens } from "@intentic/base/format";
|
|
6
6
|
import { writeFileAtomic } from "@intentic/base/fs";
|
|
7
7
|
import { neutralizeOutsideText } from "@intentic/base/outside-text";
|
|
8
|
-
import {
|
|
9
|
-
export const DERIVED_DIR =
|
|
8
|
+
import { DERIVED_SHADOWS_DIR } from "@intentic/constants";
|
|
9
|
+
export const DERIVED_DIR = DERIVED_SHADOWS_DIR;
|
|
10
10
|
export const sidecarPathFor = (workspaceRoot, relPath) => join(workspaceRoot, DERIVED_DIR, `${relPath}.md`);
|
|
11
11
|
export const sha256OfFile = (absPath) => new Promise((resolve, reject) => {
|
|
12
12
|
const hash = createHash("sha256");
|
|
@@ -15,7 +15,40 @@ export const sha256OfFile = (absPath) => new Promise((resolve, reject) => {
|
|
|
15
15
|
.on("data", (chunk) => hash.update(chunk))
|
|
16
16
|
.on("end", () => resolve(hash.digest("hex")));
|
|
17
17
|
});
|
|
18
|
-
const EMPTY_FRONT = {
|
|
18
|
+
const EMPTY_FRONT = {
|
|
19
|
+
source: undefined,
|
|
20
|
+
sha256: undefined,
|
|
21
|
+
deriver: undefined,
|
|
22
|
+
derivedAt: undefined,
|
|
23
|
+
title: undefined,
|
|
24
|
+
sourceSize: undefined,
|
|
25
|
+
sourceMtime: undefined,
|
|
26
|
+
notes: [],
|
|
27
|
+
};
|
|
28
|
+
export const sourceStatOf = (stats) => {
|
|
29
|
+
const seconds = stats.mtimeNs / 1000000000n;
|
|
30
|
+
const nanos = stats.mtimeNs % 1000000000n;
|
|
31
|
+
return { size: stats.size.toString(), mtime: `${seconds.toString()}.${nanos.toString().padStart(9, "0")}` };
|
|
32
|
+
};
|
|
33
|
+
export const readSourceStat = async (absPath) => {
|
|
34
|
+
try {
|
|
35
|
+
return sourceStatOf(await stat(absPath, { bigint: true }));
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const CAP_NOTE = /^OCR stops at (\d+) pages/;
|
|
42
|
+
export const ocrCapOf = (notes) => {
|
|
43
|
+
for (const note of notes) {
|
|
44
|
+
const match = CAP_NOTE.exec(note);
|
|
45
|
+
if (match !== null) {
|
|
46
|
+
return Number(match[1]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return undefined;
|
|
50
|
+
};
|
|
51
|
+
export const sourceUnchanged = (front, now) => now !== undefined && front.sourceSize === now.size && front.sourceMtime === now.mtime;
|
|
19
52
|
export const parseSidecarFront = (content) => {
|
|
20
53
|
if (!content.startsWith("---\n")) {
|
|
21
54
|
return EMPTY_FRONT;
|
|
@@ -41,6 +74,8 @@ export const parseSidecarFront = (content) => {
|
|
|
41
74
|
deriver: field("deriver"),
|
|
42
75
|
derivedAt: field("derived_at"),
|
|
43
76
|
title: decode(field("title")),
|
|
77
|
+
sourceSize: field("source_size"),
|
|
78
|
+
sourceMtime: field("source_mtime"),
|
|
44
79
|
notes: [...head.matchAll(/^note: (.+)$/gm)].map((match) => decode(match[1]) ?? ""),
|
|
45
80
|
};
|
|
46
81
|
};
|
|
@@ -74,6 +109,7 @@ export const writeDerived = async (path, entry) => {
|
|
|
74
109
|
"---",
|
|
75
110
|
...(entry.source === undefined ? [] : [`source: ${entry.source}`]),
|
|
76
111
|
`sha256: ${entry.sourceSha}`,
|
|
112
|
+
...(entry.sourceStat === undefined ? [] : [`source_size: ${entry.sourceStat.size}`, `source_mtime: ${entry.sourceStat.mtime}`]),
|
|
77
113
|
`deriver: ${entry.deriverStamp}`,
|
|
78
114
|
`derived_at: ${entry.derivedAt.toISOString()}`,
|
|
79
115
|
...(title === undefined ? [] : [`title: ${JSON.stringify(title)}`]),
|
package/dist/lib/sidecar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/lib/sidecar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/lib/sidecar.ts"],"names":[],"mappings":"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"}
|
package/dist/skill.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC;CAC3C;
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,CAAC;CAC3C;AA8DD,eAAO,MAAM,UAAU,aAAc,cAAc,KAAG,MAsErD,CAAC"}
|
package/dist/skill.js
CHANGED
|
@@ -27,9 +27,30 @@ text, not "Binary files differ": every derivable extension is routed through fil
|
|
|
27
27
|
diff; do not convert both versions by hand.
|
|
28
28
|
|
|
29
29
|
`;
|
|
30
|
+
const SEARCH = {
|
|
31
|
+
sandbox: `## Searching documents
|
|
32
|
+
The text of every pdf, docx, xlsx, pptx, odt, ods, odp, rtf and epub in the workspace is searchable under the
|
|
33
|
+
document's own path, kept current as files change:
|
|
34
|
+
- \`rg <pattern>\` in the shell searches documents along with code, through fileq's preprocessor. A hit reads
|
|
35
|
+
\`docs/terms.pdf:345:[p. 12] … wniosek …\`: the line number counts lines of the document's text, and
|
|
36
|
+
\`[p. 12] \` (or \`[slide 3] \`) is the page or slide that line is on. Use \`rg\` in the shell for documents:
|
|
37
|
+
a Grep tool that runs its own bundled ripgrep may skip them.
|
|
38
|
+
- \`iq "<question>"\` finds documents by meaning too; their passages carry the same page marks.
|
|
39
|
+
- When you answer from a document, cite it as file and page: "docs/terms.pdf, p. 12". Read the page around a hit
|
|
40
|
+
with \`fileq read <file>\` (or the sidecar it names) rather than guessing from one line.
|
|
41
|
+
- Scans are OCR'd only where the image carries the OCR models, and the shadow notes it when they are missing.
|
|
42
|
+
|
|
43
|
+
`,
|
|
44
|
+
standalone: `## Searching documents
|
|
45
|
+
\`fileq ripgrep-config > ~/.config/fileq.ripgreprc\` and \`RIPGREP_CONFIG_PATH=~/.config/fileq.ripgreprc\` make plain
|
|
46
|
+
\`rg\` search pdf, docx, xlsx, pptx, odt, ods, odp, rtf and epub as text, each hit cited by page
|
|
47
|
+
(\`docs/terms.pdf:345:[p. 12] …\`). Cite answers from a document as file and page.
|
|
48
|
+
|
|
49
|
+
`,
|
|
50
|
+
};
|
|
30
51
|
export const fileqSkill = ({ host }) => `---
|
|
31
52
|
name: fileq
|
|
32
|
-
description: Read binary files (docx, xlsx, pptx, pdf, odt, epub, ipynb, images, audio, archives, V8 profiles) as budgeted markdown with \`fileq\`, size up csv, json or logs too big to cat, and check and render a docx, pptx, xlsx or pdf you made. Use instead of guessing from a filename, ad-hoc converters, or delivering it unseen.
|
|
53
|
+
description: Read binary files (docx, xlsx, pptx, pdf, odt, epub, ipynb, images, audio, archives, V8 profiles) as budgeted markdown with \`fileq\`, search documents' text cited by page, size up csv, json or logs too big to cat, and check and render a docx, pptx, xlsx or pdf you made. Use instead of guessing from a filename, ad-hoc converters, or delivering it unseen.
|
|
33
54
|
---
|
|
34
55
|
|
|
35
56
|
# fileq: binary files as markdown
|
|
@@ -62,7 +83,7 @@ ${OCR_REFUSAL[host]}
|
|
|
62
83
|
- Plain text (md, csv, txt, code) is not fileq's business: Read it directly — but see below for the big ones.
|
|
63
84
|
- Web pages belong to \`webq\`; images for a vision model belong to the Read tool, which shows the pixels.
|
|
64
85
|
|
|
65
|
-
${host === "sandbox" ? TEXTCONV : ""}Exit codes: 0 content, 1 nothing derivable, 2 broken invocation or install.
|
|
86
|
+
${SEARCH[host]}${host === "sandbox" ? TEXTCONV : ""}Exit codes: 0 content, 1 nothing derivable, 2 broken invocation or install.
|
|
66
87
|
|
|
67
88
|
## After you produce a document
|
|
68
89
|
A deck, report, spreadsheet or PDF made for someone is not finished until you have checked it and looked at it.
|
package/dist/skill.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAavD,MAAM,UAAU,GAA2C;IACvD,OAAO,EAAE,gFAAgF;IACzF,UAAU,EAAE,kDAAkD;CACjE,CAAC;AAEF,MAAM,WAAW,GAA2C;IACxD,OAAO,EAAE;;;+FAGkF;IAC3F,UAAU,EAAE;;;kEAGkD;CACjE,CAAC;AAKF,MAAM,YAAY,GAAG;IACjB,OAAO,EAAE;;4GAE+F;IACxG,UAAU,EAAE;2GAC2F;CACzD,CAAC;AAGnD,MAAM,QAAQ,GAAG;;;;;CAKhB,CAAC;
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../src/skill.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAavD,MAAM,UAAU,GAA2C;IACvD,OAAO,EAAE,gFAAgF;IACzF,UAAU,EAAE,kDAAkD;CACjE,CAAC;AAEF,MAAM,WAAW,GAA2C;IACxD,OAAO,EAAE;;;+FAGkF;IAC3F,UAAU,EAAE;;;kEAGkD;CACjE,CAAC;AAKF,MAAM,YAAY,GAAG;IACjB,OAAO,EAAE;;4GAE+F;IACxG,UAAU,EAAE;2GAC2F;CACzD,CAAC;AAGnD,MAAM,QAAQ,GAAG;;;;;CAKhB,CAAC;AAKF,MAAM,MAAM,GAAG;IACX,OAAO,EAAE;;;;;;;;;;;;CAYZ;IACG,UAAU,EAAE;;;;;CAKf;CACiD,CAAC;AAEnD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAkB,EAAU,EAAE,CAAC;;;;;;;;;;;;;;;qBAe3C,UAAU,CAAC,IAAI,CAAC;;;;;;;;;;;;+EAY0C,WAAW;;;;EAIxF,WAAW,CAAC,IAAI,CAAC;;;;EAIjB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;KAW9C,YAAY,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC;;;;EAI/C,eAAe;;;;;;;;;;;;;;;;;;;;CAoBhB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentic/fileq",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.338.0",
|
|
4
4
|
"description": "fileq, agent-native file reading: any binary workspace file (docx, xlsx, pptx, pdf, images, audio, archives) as clean budgeted markdown, cached by content so a repeat read is instant",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"directory": "_sandbox/fileq"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
|
+
"bin",
|
|
13
14
|
"dist",
|
|
14
15
|
"src",
|
|
15
16
|
"!src/testing.ts",
|
|
@@ -21,7 +22,8 @@
|
|
|
21
22
|
"registry": "https://registry.npmjs.org/"
|
|
22
23
|
},
|
|
23
24
|
"bin": {
|
|
24
|
-
"fileq": "./dist/cli.js"
|
|
25
|
+
"fileq": "./dist/cli.js",
|
|
26
|
+
"fileq-rg-pre": "./bin/fileq-rg-pre"
|
|
25
27
|
},
|
|
26
28
|
"exports": {
|
|
27
29
|
"./NOTICE": "./NOTICE",
|
|
@@ -71,11 +73,11 @@
|
|
|
71
73
|
}
|
|
72
74
|
},
|
|
73
75
|
"dependencies": {
|
|
74
|
-
"@intentic/agent-cli": "1.
|
|
75
|
-
"@intentic/base": "1.
|
|
76
|
-
"@intentic/constants": "1.
|
|
77
|
-
"@intentic/webq": "1.
|
|
78
|
-
"@intentic/workspace-ignore": "1.
|
|
76
|
+
"@intentic/agent-cli": "1.338.0",
|
|
77
|
+
"@intentic/base": "1.338.0",
|
|
78
|
+
"@intentic/constants": "1.338.0",
|
|
79
|
+
"@intentic/webq": "1.338.0",
|
|
80
|
+
"@intentic/workspace-ignore": "1.338.0",
|
|
79
81
|
"@stricli/core": "1.3.0",
|
|
80
82
|
"exceljs": "4.4.0",
|
|
81
83
|
"exifr": "7.1.3",
|
package/src/app.ts
CHANGED
|
@@ -5,6 +5,8 @@ import { deriveCommand } from "./commands/derive.command.js";
|
|
|
5
5
|
import { gitAttributesCommand } from "./commands/git-attributes.command.js";
|
|
6
6
|
import { readCommand } from "./commands/read.command.js";
|
|
7
7
|
import { renderCommand } from "./commands/render.command.js";
|
|
8
|
+
import { ripgrepConfigCommand } from "./commands/ripgrep-config.command.js";
|
|
9
|
+
import { stampsCommand } from "./commands/stamps.command.js";
|
|
8
10
|
|
|
9
11
|
// The agent-facing contract, kept small — this is what `fileq --help` prints.
|
|
10
12
|
const HELP = `fileq — binary workspace files as clean, budgeted markdown.
|
|
@@ -20,6 +22,8 @@ markdown SIDECAR under .intentic/local/cache/derived/<path>.md.
|
|
|
20
22
|
fileq derive <file…> converge named files' sidecars (stale→derive, gone→remove)
|
|
21
23
|
fileq read --plain <f> the markdown alone, for a program; git's textconv driver
|
|
22
24
|
fileq git-attributes the gitattributes that route documents through it
|
|
25
|
+
fileq ripgrep-config a ripgrep config (RIPGREP_CONFIG_PATH) so plain \`rg\`
|
|
26
|
+
searches documents' text, each line cited \`[p. N] \`
|
|
23
27
|
|
|
24
28
|
After producing a document, check it and look at it:
|
|
25
29
|
|
|
@@ -47,6 +51,8 @@ export const app = buildApplication(
|
|
|
47
51
|
render: renderCommand,
|
|
48
52
|
derive: deriveCommand,
|
|
49
53
|
gitAttributes: gitAttributesCommand,
|
|
54
|
+
ripgrepConfig: ripgrepConfigCommand,
|
|
55
|
+
stamps: stampsCommand,
|
|
50
56
|
},
|
|
51
57
|
defaultCommand: "read",
|
|
52
58
|
docs: { brief: "fileq, agent-native file reading: binary files as clean budgeted markdown", fullDescription: HELP },
|
|
@@ -80,6 +80,15 @@ describe("derive", () => {
|
|
|
80
80
|
expect(exitCode).toBe(1);
|
|
81
81
|
});
|
|
82
82
|
|
|
83
|
+
it("still reads a file the shadow tree refuses, through the content cache alone", async () => {
|
|
84
|
+
mkdirSync(join(root, "refs/other"), { recursive: true });
|
|
85
|
+
writeFileSync(join(root, "refs/other/spec.docx"), docxBytes("Spec", ["Shelved body line."]));
|
|
86
|
+
const { out, exitCode } = await fileq("read", "--plain", join(root, "refs/other/spec.docx"));
|
|
87
|
+
expect(exitCode ?? 0).toBe(0);
|
|
88
|
+
expect(out).toContain("Shelved body line.");
|
|
89
|
+
expect(existsSync(sidecarOf("refs/other/spec.docx"))).toBe(false);
|
|
90
|
+
});
|
|
91
|
+
|
|
83
92
|
it("a forged envelope marker in the document dies in the sidecar's bytes", async () => {
|
|
84
93
|
writeFileSync(
|
|
85
94
|
join(root, "evil.docx"),
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/* `fileq derive` derives metadata from one input file. */
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
+
import { countParser } from "@intentic/agent-cli/flags";
|
|
3
4
|
import { buildCommand, type CommandContext } from "@stricli/core";
|
|
4
5
|
import { ensureSidecar, type Outcome } from "../lib/derive.js";
|
|
5
6
|
import { workspaceRoot } from "../lib/env.js";
|
|
6
7
|
|
|
7
8
|
interface DeriveFlags {
|
|
8
9
|
readonly json: boolean;
|
|
10
|
+
readonly ocrPages?: number;
|
|
9
11
|
}
|
|
10
12
|
|
|
11
13
|
export const outcomeLine = (outcome: Outcome): string => {
|
|
@@ -26,6 +28,12 @@ export const deriveCommand = buildCommand({
|
|
|
26
28
|
parameters: {
|
|
27
29
|
flags: {
|
|
28
30
|
json: { kind: "boolean", default: false, brief: "One JSON object per line" },
|
|
31
|
+
ocrPages: {
|
|
32
|
+
kind: "parsed",
|
|
33
|
+
parse: countParser,
|
|
34
|
+
optional: true,
|
|
35
|
+
brief: "Recognise up to this many pages of a scanned pdf (default 20; the daemon's background keeper asks for more)",
|
|
36
|
+
},
|
|
29
37
|
},
|
|
30
38
|
positional: { kind: "array", parameter: { parse: String, brief: "Files to converge, workspace-root-relative (the watcher's own namespace) or absolute", placeholder: "file" } },
|
|
31
39
|
},
|
|
@@ -41,6 +49,10 @@ export const deriveCommand = buildCommand({
|
|
|
41
49
|
process.exitCode = 2;
|
|
42
50
|
return;
|
|
43
51
|
}
|
|
52
|
+
// The pdf reader reads its cap from the environment, so the flag reaches it however deep the call chain.
|
|
53
|
+
if (flags.ocrPages !== undefined) {
|
|
54
|
+
process.env["FILEQ_OCR_PAGES"] = String(flags.ocrPages);
|
|
55
|
+
}
|
|
44
56
|
let useful = 0;
|
|
45
57
|
for (const file of files) {
|
|
46
58
|
const outcome = await ensureSidecar(root, resolve(root, file));
|
|
@@ -74,7 +74,9 @@ interface ReadResult {
|
|
|
74
74
|
|
|
75
75
|
const readInWorkspace = async (root: string, absPath: string): Promise<ReadResult | undefined> => {
|
|
76
76
|
const outcome = await ensureSidecar(root, absPath);
|
|
77
|
-
|
|
77
|
+
// A path the shadow tree refuses (an agent's worktree, the reference shelf) is still a file someone may read: it
|
|
78
|
+
// gets no sidecar, only the content cache, like a file outside the workspace.
|
|
79
|
+
if (outcome.kind === "skipped" && (outcome.reason === "outside-workspace" || outcome.reason === "ignored-path")) {
|
|
78
80
|
return readOutsideWorkspace(root, absPath);
|
|
79
81
|
}
|
|
80
82
|
return fromOutcome(outcome);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/* `fileq ripgrep-config`: the ripgrep config that makes plain `rg` search documents' text through fileq's preprocessor. */
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { packageRoot } from "@intentic/constants/node";
|
|
4
|
+
import { buildCommand, type CommandContext } from "@stricli/core";
|
|
5
|
+
import { ripgrepConfigLines } from "../lib/formats.js";
|
|
6
|
+
|
|
7
|
+
interface RipgrepConfigFlags {
|
|
8
|
+
readonly pre?: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// The preprocessor this package ships, beside dist/ and src/ alike: bin/fileq-rg-pre.
|
|
12
|
+
const ownPreprocessor = (): string => join(packageRoot(import.meta.url), "bin/fileq-rg-pre");
|
|
13
|
+
|
|
14
|
+
export const ripgrepConfigCommand = buildCommand({
|
|
15
|
+
docs: {
|
|
16
|
+
brief: "Print a ripgrep config (for RIPGREP_CONFIG_PATH) that searches pdf, docx, xlsx, pptx, odt, ods, odp, rtf and epub as text",
|
|
17
|
+
fullDescription: `Point RIPGREP_CONFIG_PATH at this output and \`rg pattern .\` searches documents too, each hit under the
|
|
18
|
+
document's own path with its page: \`docs/terms.pdf:345:[p. 12] …\`. Lines under a page heading carry
|
|
19
|
+
\`[p. N] \`, under a slide heading \`[slide N] \`. The preprocessor prints a document's fresh shadow
|
|
20
|
+
(.intentic/local/cache/derived/<path>.md) with no Node start, and falls back to \`fileq read --plain\`.`,
|
|
21
|
+
},
|
|
22
|
+
parameters: {
|
|
23
|
+
flags: {
|
|
24
|
+
pre: { kind: "parsed", parse: String, optional: true, brief: "The preprocessor's path (default: this package's bin/fileq-rg-pre)" },
|
|
25
|
+
},
|
|
26
|
+
positional: { kind: "tuple", parameters: [] },
|
|
27
|
+
},
|
|
28
|
+
func(this: CommandContext, flags: RipgrepConfigFlags) {
|
|
29
|
+
this.process.stdout.write(`${ripgrepConfigLines(flags.pre ?? ownPreprocessor()).join("\n")}\n`);
|
|
30
|
+
},
|
|
31
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/* `fileq stamps`: each document format's current deriver stamp, so a caller that cannot hash (the daemon's shadow keeper) can tell a shadow an upgraded or newly OCR-capable reader would write differently. */
|
|
2
|
+
import { buildCommand, type CommandContext } from "@stricli/core";
|
|
3
|
+
import { DERIVERS } from "../lib/derive.js";
|
|
4
|
+
import { deriverStamp } from "../lib/derivers/deriver.js";
|
|
5
|
+
import { DOCUMENT_FORMATS } from "../lib/formats.js";
|
|
6
|
+
|
|
7
|
+
export const stampsCommand = buildCommand({
|
|
8
|
+
docs: { brief: "Print each document format's current deriver stamp as one JSON object" },
|
|
9
|
+
parameters: { positional: { kind: "tuple", parameters: [] } },
|
|
10
|
+
func(this: CommandContext) {
|
|
11
|
+
const stamps = Object.fromEntries([...DOCUMENT_FORMATS].map((format) => [format, deriverStamp(DERIVERS[format])]));
|
|
12
|
+
this.process.stdout.write(`${JSON.stringify(stamps)}\n`);
|
|
13
|
+
},
|
|
14
|
+
});
|