@polpo-ai/tools 0.6.30 → 0.6.32

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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=system-tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/system-tools.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,417 @@
1
+ /**
2
+ * Behavioral tests for the 7 core coding tools (read / write / edit /
3
+ * bash / glob / grep / ls). Each tool is exercised via its `execute()`
4
+ * entry point against a fresh temp cwd per test.
5
+ *
6
+ * Focus: production-grade adversarial edge cases. LLMs hallucinate
7
+ * paths, mangle whitespace, retry with mutated args, and produce
8
+ * inputs that look valid but break naive implementations. The test
9
+ * suite covers what we've actually seen go wrong (or what *will* go
10
+ * wrong) in chat-completion runs:
11
+ *
12
+ * - sandbox escapes via `..`, absolute paths, symlink-like traversal
13
+ * - LLM-mangled `edit` old_text (trailing whitespace, regex chars)
14
+ * - bash shell-meta payloads, output explosions, non-zero stderr
15
+ * - read on binary, on directories, with negative/oversize offsets
16
+ * - glob patterns with no match, recursion, hidden files
17
+ * - grep regex metachars vs literal, include/exclude filters
18
+ * - ls on missing paths, on files vs dirs, on hostile paths
19
+ *
20
+ * What's *not* in scope here: AI SDK schema validation (TypeBox is
21
+ * mechanical) and cross-runtime concerns (those are the Layer-2
22
+ * Docker rig).
23
+ */
24
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
25
+ import { mkdtempSync, rmSync, writeFileSync, mkdirSync, readFileSync, statSync, symlinkSync, } from "node:fs";
26
+ import { tmpdir } from "node:os";
27
+ import { join } from "node:path";
28
+ import { createSystemTools } from "../system-tools.js";
29
+ import { NodeFileSystem } from "../adapters/node-filesystem.js";
30
+ import { NodeShell } from "../adapters/node-shell.js";
31
+ let cwd;
32
+ let tools;
33
+ function tool(name) {
34
+ const t = tools.find((x) => x.name === name);
35
+ if (!t)
36
+ throw new Error(`Tool '${name}' not registered. Got: ${tools.map((x) => x.name).join(", ")}`);
37
+ return t;
38
+ }
39
+ /** Pull the textual payload from the first content block of a tool
40
+ * result. Tool results are a discriminated union of text/image
41
+ * blocks; every tool we test here emits text first. */
42
+ function text(result) {
43
+ const block = result.content[0];
44
+ if (block?.type !== "text")
45
+ throw new Error(`Expected text content block, got ${block?.type}`);
46
+ return block.text;
47
+ }
48
+ beforeEach(() => {
49
+ cwd = mkdtempSync(join(tmpdir(), "polpo-tools-"));
50
+ tools = createSystemTools(cwd, undefined, [cwd], undefined, undefined, new NodeFileSystem(), new NodeShell());
51
+ });
52
+ afterEach(() => {
53
+ rmSync(cwd, { recursive: true, force: true });
54
+ });
55
+ // ────────────────────────────────────────────────────────────
56
+ describe("read — happy path", () => {
57
+ it("returns line-numbered content", async () => {
58
+ writeFileSync(join(cwd, "a.txt"), "alpha\nbeta\ngamma");
59
+ const result = await tool("read").execute("c1", { path: "a.txt" });
60
+ expect(text(result)).toContain("1\talpha");
61
+ expect(text(result)).toContain("3\tgamma");
62
+ expect(result.details).toMatchObject({ lines: 3, total: 3 });
63
+ });
64
+ it("handles a 50k-line file without truncating in details.total", async () => {
65
+ const big = Array.from({ length: 50_000 }, (_, i) => `L${i}`).join("\n");
66
+ writeFileSync(join(cwd, "big.txt"), big);
67
+ const result = await tool("read").execute("c1", { path: "big.txt", limit: 10 });
68
+ expect(result.details).toMatchObject({ total: 50_000, lines: 10 });
69
+ expect(text(result)).toMatch(/more lines/i);
70
+ });
71
+ it("reads files with embedded NUL bytes without crashing", async () => {
72
+ writeFileSync(join(cwd, "nul.txt"), "before\x00after");
73
+ const result = await tool("read").execute("c1", { path: "nul.txt" });
74
+ expect(text(result)).toContain("before");
75
+ });
76
+ it("reads files with multibyte UTF-8 + emoji + RTL", async () => {
77
+ writeFileSync(join(cwd, "u.txt"), "café 中文 🐙 שלום");
78
+ const result = await tool("read").execute("c1", { path: "u.txt" });
79
+ expect(text(result)).toContain("café");
80
+ expect(text(result)).toContain("中文");
81
+ expect(text(result)).toContain("🐙");
82
+ expect(text(result)).toContain("שלום");
83
+ });
84
+ });
85
+ describe("read — adversarial", () => {
86
+ it("rejects parent traversal `../../../etc/passwd`", async () => {
87
+ await expect(tool("read").execute("c1", { path: "../../../etc/passwd" })).rejects.toThrow(/sandbox|allowed|denied/i);
88
+ });
89
+ it("rejects an absolute path outside the sandbox", async () => {
90
+ await expect(tool("read").execute("c1", { path: "/etc/passwd" })).rejects.toThrow(/sandbox|allowed|denied/i);
91
+ });
92
+ it("rejects a symlink that escapes the sandbox", async () => {
93
+ const escapeLink = join(cwd, "escape");
94
+ symlinkSync("/etc/passwd", escapeLink);
95
+ // The path itself is inside the sandbox, but realpathSync follows
96
+ // the symlink and detects the escape.
97
+ await expect(tool("read").execute("c1", { path: "escape" })).rejects.toThrow(/sandbox|allowed|denied/i);
98
+ });
99
+ it("returns an error on a missing file rather than crashing", async () => {
100
+ await expect(tool("read").execute("c1", { path: "nope.txt" })).rejects.toThrow();
101
+ });
102
+ it("returns an error when path is a directory", async () => {
103
+ mkdirSync(join(cwd, "subdir"));
104
+ await expect(tool("read").execute("c1", { path: "subdir" })).rejects.toThrow();
105
+ });
106
+ it("treats offset beyond the file as empty without crashing", async () => {
107
+ writeFileSync(join(cwd, "small.txt"), "one\ntwo");
108
+ const result = await tool("read").execute("c1", { path: "small.txt", offset: 1000, limit: 10 });
109
+ // Should not throw; lines should be 0, total still 2.
110
+ expect(result.details).toMatchObject({ total: 2, lines: 0 });
111
+ });
112
+ });
113
+ // ────────────────────────────────────────────────────────────
114
+ describe("write — happy path", () => {
115
+ it("creates the file + parent dirs and reports byte count", async () => {
116
+ const result = await tool("write").execute("c1", { path: "deep/nested/note.md", content: "hello" });
117
+ expect(readFileSync(join(cwd, "deep/nested/note.md"), "utf8")).toBe("hello");
118
+ expect(result.details).toMatchObject({ bytes: 5 });
119
+ });
120
+ it("overwrites an existing file (no append)", async () => {
121
+ writeFileSync(join(cwd, "f.txt"), "old content longer than new");
122
+ await tool("write").execute("c1", { path: "f.txt", content: "new" });
123
+ expect(readFileSync(join(cwd, "f.txt"), "utf8")).toBe("new");
124
+ });
125
+ it("writes empty content without errors", async () => {
126
+ await tool("write").execute("c1", { path: "empty.txt", content: "" });
127
+ expect(readFileSync(join(cwd, "empty.txt"), "utf8")).toBe("");
128
+ expect(statSync(join(cwd, "empty.txt")).size).toBe(0);
129
+ });
130
+ it("preserves multibyte UTF-8 + emoji round-trip", async () => {
131
+ const payload = "café 中文 🐙 \u{1F4A9}";
132
+ await tool("write").execute("c1", { path: "u.txt", content: payload });
133
+ expect(readFileSync(join(cwd, "u.txt"), "utf8")).toBe(payload);
134
+ });
135
+ it("writes a 1MB payload without truncating", async () => {
136
+ const big = "x".repeat(1024 * 1024);
137
+ await tool("write").execute("c1", { path: "big.txt", content: big });
138
+ expect(statSync(join(cwd, "big.txt")).size).toBe(1024 * 1024);
139
+ });
140
+ });
141
+ describe("write — adversarial", () => {
142
+ it("rejects an absolute escape path", async () => {
143
+ await expect(tool("write").execute("c1", { path: "/tmp/escape.txt", content: "x" })).rejects.toThrow(/sandbox|allowed|denied/i);
144
+ });
145
+ it("rejects parent traversal", async () => {
146
+ await expect(tool("write").execute("c1", { path: "../escape.txt", content: "x" })).rejects.toThrow(/sandbox|allowed|denied/i);
147
+ });
148
+ it("rejects writing through a symlink that escapes the sandbox", async () => {
149
+ // Symlink target must exist on disk for realpathSync to resolve
150
+ // it — a dangling symlink throws and the sandbox check falls back
151
+ // to the logical (still-inside-cwd) path, which would then let
152
+ // fs.writeFile follow the link and clobber the host. We point at
153
+ // /etc/hostname (universally present on Linux runners) so the
154
+ // canonical path lands outside cwd and the sandbox refuses
155
+ // before write() is called.
156
+ const link = join(cwd, "out.txt");
157
+ symlinkSync("/etc/hostname", link);
158
+ await expect(tool("write").execute("c1", { path: "out.txt", content: "pwned" })).rejects.toThrow(/sandbox|allowed|denied/i);
159
+ });
160
+ });
161
+ // ────────────────────────────────────────────────────────────
162
+ describe("edit — happy path", () => {
163
+ it("replaces a unique substring", async () => {
164
+ writeFileSync(join(cwd, "f.txt"), "the quick brown fox");
165
+ await tool("edit").execute("c1", { path: "f.txt", old_text: "quick", new_text: "lazy" });
166
+ expect(readFileSync(join(cwd, "f.txt"), "utf8")).toBe("the lazy brown fox");
167
+ });
168
+ it("treats regex metachars literally (.*$+ etc.)", async () => {
169
+ writeFileSync(join(cwd, "f.txt"), "price: $9.99 (sale)");
170
+ await tool("edit").execute("c1", { path: "f.txt", old_text: "$9.99", new_text: "$5.00" });
171
+ expect(readFileSync(join(cwd, "f.txt"), "utf8")).toBe("price: $5.00 (sale)");
172
+ });
173
+ it("preserves trailing newline when present", async () => {
174
+ writeFileSync(join(cwd, "f.txt"), "hello\n");
175
+ await tool("edit").execute("c1", { path: "f.txt", old_text: "hello", new_text: "world" });
176
+ expect(readFileSync(join(cwd, "f.txt"), "utf8")).toBe("world\n");
177
+ });
178
+ it("replaces a multi-line block", async () => {
179
+ writeFileSync(join(cwd, "f.txt"), "line1\nold\nblock\nline4");
180
+ await tool("edit").execute("c1", { path: "f.txt", old_text: "old\nblock", new_text: "fresh\nstuff" });
181
+ expect(readFileSync(join(cwd, "f.txt"), "utf8")).toBe("line1\nfresh\nstuff\nline4");
182
+ });
183
+ });
184
+ describe("edit — adversarial (LLM hallucinations)", () => {
185
+ it("returns a clear error when old_text is missing (LLM transcription typo)", async () => {
186
+ writeFileSync(join(cwd, "f.txt"), "the actual content");
187
+ const result = await tool("edit").execute("c1", { path: "f.txt", old_text: "the actaul content", new_text: "x" });
188
+ expect(result.details).toMatchObject({ error: "not_found" });
189
+ expect(text(result)).toMatch(/not found/i);
190
+ // File must remain pristine — no half-application.
191
+ expect(readFileSync(join(cwd, "f.txt"), "utf8")).toBe("the actual content");
192
+ });
193
+ it("returns a clear error when old_text is ambiguous (recurring snippet)", async () => {
194
+ writeFileSync(join(cwd, "f.txt"), "import x; import y; import z;");
195
+ const result = await tool("edit").execute("c1", { path: "f.txt", old_text: "import", new_text: "//" });
196
+ expect(result.details).toMatchObject({ error: "not_unique", count: 3 });
197
+ expect(readFileSync(join(cwd, "f.txt"), "utf8")).toBe("import x; import y; import z;");
198
+ });
199
+ it("tolerates an LLM that drops indent (substring match preserves indent)", async () => {
200
+ // Pin actual behavior: the tool does substring replace, so an
201
+ // un-indented old_text still matches its indented occurrence and
202
+ // the indent is preserved automatically. This is forgiving toward
203
+ // the common LLM bug of remembering "the meaningful part" of a
204
+ // line without leading whitespace.
205
+ writeFileSync(join(cwd, "f.ts"), " const x = 1;\n");
206
+ await tool("edit").execute("c1", { path: "f.ts", old_text: "const x = 1;", new_text: "const x = 2;" });
207
+ expect(readFileSync(join(cwd, "f.ts"), "utf8")).toBe(" const x = 2;\n");
208
+ });
209
+ it("treats CRLF vs LF as a real mismatch (cross-OS LLM transcription)", async () => {
210
+ writeFileSync(join(cwd, "f.txt"), "alpha\r\nbeta");
211
+ const result = await tool("edit").execute("c1", { path: "f.txt", old_text: "alpha\nbeta", new_text: "x" });
212
+ expect(result.details).toMatchObject({ error: "not_found" });
213
+ });
214
+ it("permits a no-op replacement (old == new) without corrupting the file", async () => {
215
+ writeFileSync(join(cwd, "f.txt"), "hello");
216
+ const result = await tool("edit").execute("c1", { path: "f.txt", old_text: "hello", new_text: "hello" });
217
+ expect(text(result)).not.toMatch(/error/i);
218
+ expect(readFileSync(join(cwd, "f.txt"), "utf8")).toBe("hello");
219
+ });
220
+ it("rejects edits that target files outside the sandbox", async () => {
221
+ await expect(tool("edit").execute("c1", { path: "/etc/passwd", old_text: "root", new_text: "lol" })).rejects.toThrow(/sandbox|allowed|denied/i);
222
+ });
223
+ });
224
+ // ────────────────────────────────────────────────────────────
225
+ describe("bash — happy path", () => {
226
+ it("runs a command and captures stdout", async () => {
227
+ const result = await tool("bash").execute("c1", { command: "echo hello-from-bash" });
228
+ expect(text(result)).toContain("hello-from-bash");
229
+ });
230
+ it("runs in cwd by default", async () => {
231
+ writeFileSync(join(cwd, "marker-xyz.txt"), "");
232
+ const result = await tool("bash").execute("c1", { command: "ls" });
233
+ expect(text(result)).toContain("marker-xyz.txt");
234
+ });
235
+ it("supports pipes and redirects", async () => {
236
+ const result = await tool("bash").execute("c1", { command: "printf 'a\\nb\\nc\\n' | wc -l" });
237
+ expect(text(result)).toMatch(/3/);
238
+ });
239
+ });
240
+ describe("bash — adversarial", () => {
241
+ it("surfaces a non-zero exit clearly", async () => {
242
+ const result = await tool("bash").execute("c1", { command: "false" });
243
+ expect(text(result).toLowerCase()).toMatch(/exit|fail|error|status/);
244
+ });
245
+ it("captures stderr when stdout is empty", async () => {
246
+ const result = await tool("bash").execute("c1", { command: "echo oops 1>&2" });
247
+ expect(text(result).toLowerCase()).toContain("oops");
248
+ });
249
+ it("kills a hanging process well before the natural runtime", { timeout: 45_000 }, async () => {
250
+ // `sleep 30` would naturally take 30s. We ask for timeout:500.
251
+ // Goal: verify the call returns *well under* 30s — the actual
252
+ // floor on execa's enforcement is loose (observed ~5s) and we
253
+ // intentionally don't pin a tight number, just "not the natural
254
+ // runtime". Surfaces the timeout via the text payload or a
255
+ // non-zero exit.
256
+ const t0 = Date.now();
257
+ const result = await tool("bash").execute("c1", { command: "sleep 30", timeout: 500 });
258
+ const elapsed = Date.now() - t0;
259
+ expect(elapsed).toBeLessThan(20_000);
260
+ expect(text(result).toLowerCase()).toMatch(/timeout|kill|exceed|exit|sigterm|error|terminated/);
261
+ });
262
+ it("truncates massive output instead of OOMing the process", async () => {
263
+ const result = await tool("bash").execute("c1", {
264
+ command: "head -c 10000000 /dev/zero | tr '\\0' 'a'",
265
+ timeout: 10_000,
266
+ });
267
+ // Must not blow up — output bounded, no crash.
268
+ expect(text(result).length).toBeLessThan(2_000_000);
269
+ });
270
+ it("does not let `cd` leak into the next call", async () => {
271
+ await tool("bash").execute("c1", { command: "cd /usr" });
272
+ const result = await tool("bash").execute("c2", { command: "pwd" });
273
+ // Each tool call starts a fresh shell rooted at cwd. Asserting
274
+ // /usr is absent confirms the previous `cd` didn't leak; using
275
+ // /usr (instead of /tmp, which is cwd's parent) avoids a false
276
+ // positive when cwd happens to live under /tmp.
277
+ expect(text(result)).toContain(cwd);
278
+ expect(text(result)).not.toMatch(/^\/usr\b/m);
279
+ });
280
+ it("handles an empty/whitespace command without crashing", async () => {
281
+ const result = await tool("bash").execute("c1", { command: " " });
282
+ // Either runs as no-op or returns a clear error — must not throw.
283
+ expect(result).toBeDefined();
284
+ });
285
+ it("accepts shell-meta in arguments (we are not a sandbox at the bash layer)", async () => {
286
+ // We deliberately do *not* claim bash is safe against injection —
287
+ // it executes a full command line. This test pins the contract so
288
+ // future "sanitization" doesn't silently mangle legitimate uses.
289
+ const result = await tool("bash").execute("c1", { command: "echo 'a; echo b' | head -n1" });
290
+ expect(text(result)).toContain("a; echo b");
291
+ });
292
+ });
293
+ // ────────────────────────────────────────────────────────────
294
+ describe("glob — happy path", () => {
295
+ it("matches files by simple pattern", async () => {
296
+ writeFileSync(join(cwd, "a.ts"), "");
297
+ writeFileSync(join(cwd, "b.ts"), "");
298
+ writeFileSync(join(cwd, "c.txt"), "");
299
+ const result = await tool("glob").execute("c1", { pattern: "*.ts" });
300
+ expect(text(result)).toContain("a.ts");
301
+ expect(text(result)).toContain("b.ts");
302
+ expect(text(result)).not.toContain("c.txt");
303
+ });
304
+ it("handles `**` recursive patterns", async () => {
305
+ mkdirSync(join(cwd, "src/inner"), { recursive: true });
306
+ writeFileSync(join(cwd, "src/a.ts"), "");
307
+ writeFileSync(join(cwd, "src/inner/b.ts"), "");
308
+ const result = await tool("glob").execute("c1", { pattern: "**/*.ts" });
309
+ expect(text(result)).toContain("a.ts");
310
+ expect(text(result)).toContain("b.ts");
311
+ });
312
+ it("supports brace expansion `{a,b}`", async () => {
313
+ writeFileSync(join(cwd, "a.ts"), "");
314
+ writeFileSync(join(cwd, "b.tsx"), "");
315
+ writeFileSync(join(cwd, "c.md"), "");
316
+ const result = await tool("glob").execute("c1", { pattern: "*.{ts,tsx}" });
317
+ expect(text(result)).toContain("a.ts");
318
+ expect(text(result)).toContain("b.tsx");
319
+ expect(text(result)).not.toContain("c.md");
320
+ });
321
+ });
322
+ describe("glob — adversarial", () => {
323
+ it("reports no match clearly without throwing", async () => {
324
+ const result = await tool("glob").execute("c1", { pattern: "*.unicorn" });
325
+ expect(text(result).toLowerCase()).toMatch(/no.*(match|found)|0|empty/);
326
+ });
327
+ it("does not crash on an empty pattern", async () => {
328
+ const result = await tool("glob").execute("c1", { pattern: "" });
329
+ expect(result).toBeDefined();
330
+ });
331
+ it("ignores patterns reaching outside cwd (`../*`)", async () => {
332
+ // We can't assert what's outside cwd, but we *can* assert nothing
333
+ // from /etc/ leaks into the result text.
334
+ const result = await tool("glob").execute("c1", { pattern: "../../*" });
335
+ expect(text(result)).not.toMatch(/passwd|hostname|hosts/);
336
+ });
337
+ });
338
+ // ────────────────────────────────────────────────────────────
339
+ describe("grep — happy path", () => {
340
+ it("finds the pattern across files", async () => {
341
+ writeFileSync(join(cwd, "a.txt"), "needle here\nnothing");
342
+ writeFileSync(join(cwd, "b.txt"), "no match\n");
343
+ writeFileSync(join(cwd, "c.txt"), "needle\nagain");
344
+ const result = await tool("grep").execute("c1", { pattern: "needle" });
345
+ expect(text(result)).toContain("a.txt");
346
+ expect(text(result)).toContain("c.txt");
347
+ expect(text(result)).not.toMatch(/\bb\.txt\b/);
348
+ });
349
+ it("supports include filter", async () => {
350
+ writeFileSync(join(cwd, "a.ts"), "needle\n");
351
+ writeFileSync(join(cwd, "a.md"), "needle\n");
352
+ const result = await tool("grep").execute("c1", { pattern: "needle", include: "*.ts" });
353
+ expect(text(result)).toContain("a.ts");
354
+ expect(text(result)).not.toContain("a.md");
355
+ });
356
+ });
357
+ describe("grep — adversarial", () => {
358
+ it("supports PCRE escapes (\\d, \\w, \\s)", async () => {
359
+ writeFileSync(join(cwd, "f.txt"), "abc\n123\n");
360
+ const result = await tool("grep").execute("c1", { pattern: "\\d+" });
361
+ expect(text(result)).toContain("f.txt");
362
+ expect(text(result)).toContain("123");
363
+ });
364
+ it("supports lookahead and non-greedy quantifiers (PCRE features)", async () => {
365
+ writeFileSync(join(cwd, "f.txt"), "USD42 EUR99\n");
366
+ // Lookahead: 'EUR' followed by digits.
367
+ const r1 = await tool("grep").execute("c1", { pattern: "(?<=EUR)\\d+" });
368
+ expect(text(r1)).toContain("99");
369
+ });
370
+ it("returns a clean no-match result on a non-matching pattern", async () => {
371
+ writeFileSync(join(cwd, "f.txt"), "alpha\nbeta\n");
372
+ const result = await tool("grep").execute("c1", { pattern: "definitely-not-there-123" });
373
+ expect(text(result).toLowerCase()).toMatch(/no.*(match|found)|0|empty/);
374
+ });
375
+ it("doesn't bleed into binary files when their bytes happen to match", async () => {
376
+ // A binary file with the bytes 'needle' embedded — grep should
377
+ // either skip it or show it without confusing the output.
378
+ writeFileSync(join(cwd, "bin.dat"), Buffer.from([0, 1, 2, 0x6e, 0x65, 0x65, 0x64, 0x6c, 0x65, 0, 0]));
379
+ writeFileSync(join(cwd, "real.txt"), "needle\n");
380
+ const result = await tool("grep").execute("c1", { pattern: "needle" });
381
+ expect(text(result)).toContain("real.txt");
382
+ });
383
+ });
384
+ // ────────────────────────────────────────────────────────────
385
+ describe("ls — happy path", () => {
386
+ it("lists files and directories", async () => {
387
+ writeFileSync(join(cwd, "file.txt"), "");
388
+ mkdirSync(join(cwd, "subdir"));
389
+ const result = await tool("ls").execute("c1", { path: "." });
390
+ expect(text(result)).toContain("file.txt");
391
+ expect(text(result)).toContain("subdir");
392
+ });
393
+ it("works on a deeply nested subdir", async () => {
394
+ mkdirSync(join(cwd, "a/b/c"), { recursive: true });
395
+ writeFileSync(join(cwd, "a/b/c/leaf.txt"), "");
396
+ const result = await tool("ls").execute("c1", { path: "a/b/c" });
397
+ expect(text(result)).toContain("leaf.txt");
398
+ });
399
+ });
400
+ describe("ls — adversarial", () => {
401
+ it("rejects paths outside the sandbox", async () => {
402
+ await expect(tool("ls").execute("c1", { path: "/etc" })).rejects.toThrow(/sandbox|allowed|denied/i);
403
+ });
404
+ it("rejects parent traversal", async () => {
405
+ await expect(tool("ls").execute("c1", { path: "../.." })).rejects.toThrow(/sandbox|allowed|denied/i);
406
+ });
407
+ it("returns a clear error on a missing directory", async () => {
408
+ await expect(tool("ls").execute("c1", { path: "no-such-dir" })).rejects.toThrow();
409
+ });
410
+ it("returns a sane result on an empty directory", async () => {
411
+ mkdirSync(join(cwd, "empty"));
412
+ const result = await tool("ls").execute("c1", { path: "empty" });
413
+ // Should not throw; output may be empty or "no entries"-like.
414
+ expect(result).toBeDefined();
415
+ });
416
+ });
417
+ //# sourceMappingURL=system-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/system-tools.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,13 @@
1
1
  import type { Shell, ShellOptions, ShellResult } from "@polpo-ai/core/shell";
2
+ /**
3
+ * Fork the command into a fresh process group so we can kill the
4
+ * whole tree on timeout. execa's built-in `timeout` only sends
5
+ * SIGTERM to the spawned shell process; with `shell: true` the
6
+ * shell becomes a parent of the user's command (e.g. `sleep 30`),
7
+ * which survives the SIGTERM and keeps running until natural exit.
8
+ * We bypass that by spawning detached and killing -PID with
9
+ * SIGKILL when our timer fires.
10
+ */
2
11
  export declare class NodeShell implements Shell {
3
12
  execute(command: string, options?: ShellOptions): Promise<ShellResult>;
4
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"node-shell.d.ts","sourceRoot":"","sources":["../../src/adapters/node-shell.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG7E,qBAAa,SAAU,YAAW,KAAK;IAC/B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CAsB7E"}
1
+ {"version":3,"file":"node-shell.d.ts","sourceRoot":"","sources":["../../src/adapters/node-shell.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAG7E;;;;;;;;GAQG;AACH,qBAAa,SAAU,YAAW,KAAK;IAC/B,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC;CA0C7E"}
@@ -4,23 +4,54 @@
4
4
  * Default implementation for self-hosted mode. Executes real shell commands.
5
5
  * Drop-in replacement pattern: swap with JustBashShell, SandboxProxyShell, etc.
6
6
  */
7
- import { execaCommand } from "execa";
7
+ import { execa } from "execa";
8
8
  import { bashSafeEnv } from "../safe-env.js";
9
+ /**
10
+ * Fork the command into a fresh process group so we can kill the
11
+ * whole tree on timeout. execa's built-in `timeout` only sends
12
+ * SIGTERM to the spawned shell process; with `shell: true` the
13
+ * shell becomes a parent of the user's command (e.g. `sleep 30`),
14
+ * which survives the SIGTERM and keeps running until natural exit.
15
+ * We bypass that by spawning detached and killing -PID with
16
+ * SIGKILL when our timer fires.
17
+ */
9
18
  export class NodeShell {
10
19
  async execute(command, options) {
20
+ const timeout = options?.timeout;
11
21
  try {
12
- const result = await execaCommand(command, {
13
- shell: true,
22
+ const child = execa("bash", ["-c", command], {
23
+ detached: true,
14
24
  cwd: options?.cwd,
15
25
  env: { ...bashSafeEnv(), ...options?.env },
16
- timeout: options?.timeout,
17
26
  reject: false,
18
27
  });
19
- return {
20
- stdout: result.stdout,
21
- stderr: result.stderr,
22
- exitCode: result.exitCode ?? 0,
23
- };
28
+ let killedByTimeout = false;
29
+ const timer = timeout
30
+ ? setTimeout(() => {
31
+ killedByTimeout = true;
32
+ try {
33
+ if (child.pid)
34
+ process.kill(-child.pid, "SIGKILL");
35
+ }
36
+ catch {
37
+ // process already gone
38
+ }
39
+ }, timeout)
40
+ : null;
41
+ try {
42
+ const result = await child;
43
+ return {
44
+ stdout: result.stdout?.toString() ?? "",
45
+ stderr: killedByTimeout
46
+ ? `${result.stderr ?? ""}\nCommand timed out after ${timeout}ms (SIGKILL).`
47
+ : result.stderr?.toString() ?? "",
48
+ exitCode: result.exitCode ?? (killedByTimeout ? 124 : (result.signal ? 130 : 0)),
49
+ };
50
+ }
51
+ finally {
52
+ if (timer)
53
+ clearTimeout(timer);
54
+ }
24
55
  }
25
56
  catch (err) {
26
57
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"node-shell.js","sourceRoot":"","sources":["../../src/adapters/node-shell.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,OAAO,SAAS;IACpB,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,OAAsB;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE;gBACzC,KAAK,EAAE,IAAI;gBACX,GAAG,EAAE,OAAO,EAAE,GAAG;gBACjB,GAAG,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;gBAC1C,OAAO,EAAE,OAAO,EAAE,OAAO;gBACzB,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YACH,OAAO;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC;aAC/B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO;gBACL,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;gBAClC,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"node-shell.js","sourceRoot":"","sources":["../../src/adapters/node-shell.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,OAAO,SAAS;IACpB,KAAK,CAAC,OAAO,CAAC,OAAe,EAAE,OAAsB;QACnD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBAC3C,QAAQ,EAAE,IAAI;gBACd,GAAG,EAAE,OAAO,EAAE,GAAG;gBACjB,GAAG,EAAE,EAAE,GAAG,WAAW,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE;gBAC1C,MAAM,EAAE,KAAK;aACd,CAAC,CAAC;YAEH,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,MAAM,KAAK,GAAG,OAAO;gBACnB,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE;oBACd,eAAe,GAAG,IAAI,CAAC;oBACvB,IAAI,CAAC;wBACH,IAAI,KAAK,CAAC,GAAG;4BAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACrD,CAAC;oBAAC,MAAM,CAAC;wBACP,uBAAuB;oBACzB,CAAC;gBACH,CAAC,EAAE,OAAO,CAAC;gBACb,CAAC,CAAC,IAAI,CAAC;YAET,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;gBAC3B,OAAO;oBACL,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACvC,MAAM,EAAE,eAAe;wBACrB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,6BAA6B,OAAO,eAAe;wBAC3E,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;oBACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACjF,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO;gBACL,MAAM,EAAE,EAAE;gBACV,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;gBAClC,QAAQ,EAAE,CAAC;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * HTML → PDF driver, called by `pdf_create` via Shell.
4
+ *
5
+ * Stays inside the sandbox where Chromium lives. Reuses the single
6
+ * Chromium binary owned by agent-browser (no separate Playwright
7
+ * install) by passing `executablePath` to `chromium.launch()`.
8
+ *
9
+ * Invocation:
10
+ * node pdf-render.mjs <params-json> <output-path>
11
+ *
12
+ * Params shape (matches the LLM-facing pdf_create schema):
13
+ * {
14
+ * html?: string, // inline HTML
15
+ * htmlPath?: string, // OR a file path (one of the two)
16
+ * format?: "A4" | "Letter" | ... (default A4)
17
+ * landscape?: boolean,
18
+ * printBackground?: boolean,
19
+ * scale?: number,
20
+ * margin?: { top?, right?, bottom?, left? },
21
+ * headerTemplate?: string,
22
+ * footerTemplate?: string,
23
+ * waitForNetwork?: boolean, // default true
24
+ * }
25
+ *
26
+ * Result: prints `{"success":true,"path":"...","bytes":N}` to stdout
27
+ * on success, `{"success":false,"error":"..."}` on failure. Exits 0
28
+ * on success, 1 on failure.
29
+ */
30
+ import { chromium } from "playwright-core";
31
+ import { readFileSync, readdirSync, statSync } from "node:fs";
32
+
33
+ const DEFAULT_TIMEOUT = 30_000;
34
+ const DEFAULT_MARGIN = { top: "20mm", right: "15mm", bottom: "25mm", left: "15mm" };
35
+
36
+ function findAgentBrowserChromium() {
37
+ // agent-browser install drops Chromium into ~/.agent-browser/browsers/chrome-<version>/chrome
38
+ const home = process.env.HOME ?? "/root";
39
+ const dir = `${home}/.agent-browser/browsers`;
40
+ let entries;
41
+ try {
42
+ entries = readdirSync(dir);
43
+ } catch (err) {
44
+ throw new Error(`agent-browser Chromium directory not found at ${dir}. Run \`agent-browser install\`.`);
45
+ }
46
+ const chromeDirs = entries.filter((d) => d.startsWith("chrome-"));
47
+ if (chromeDirs.length === 0) {
48
+ throw new Error(`No chrome-* subdir under ${dir}. Run \`agent-browser install\`.`);
49
+ }
50
+ // Prefer the highest version when multiple are present.
51
+ chromeDirs.sort().reverse();
52
+ const candidate = `${dir}/${chromeDirs[0]}/chrome`;
53
+ // Sanity: it should be an executable file.
54
+ try {
55
+ const st = statSync(candidate);
56
+ if (!st.isFile()) throw new Error("not a regular file");
57
+ } catch (err) {
58
+ throw new Error(`Chromium binary missing at ${candidate}: ${err.message}`);
59
+ }
60
+ return candidate;
61
+ }
62
+
63
+ async function main() {
64
+ const [, , paramsJson, outputPath] = process.argv;
65
+ if (!paramsJson || !outputPath) {
66
+ throw new Error("Usage: node pdf-render.mjs <params-json> <output-path>");
67
+ }
68
+
69
+ const params = JSON.parse(paramsJson);
70
+
71
+ const html = params.html ?? (params.htmlPath ? readFileSync(params.htmlPath, "utf8") : null);
72
+ if (!html) throw new Error("Either 'html' or 'htmlPath' must be provided");
73
+
74
+ const executablePath = process.env.AGENT_BROWSER_CHROME_PATH || findAgentBrowserChromium();
75
+
76
+ const browser = await chromium.launch({
77
+ headless: true,
78
+ executablePath,
79
+ args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage"],
80
+ });
81
+ try {
82
+ const page = await browser.newPage();
83
+ const waitUntil = params.waitForNetwork === false ? "domcontentloaded" : "networkidle";
84
+ await page.setContent(html, { waitUntil, timeout: DEFAULT_TIMEOUT });
85
+
86
+ const margin = params.margin ? { ...DEFAULT_MARGIN, ...params.margin } : DEFAULT_MARGIN;
87
+ const hasHeaderFooter = !!(params.headerTemplate || params.footerTemplate);
88
+
89
+ await page.pdf({
90
+ path: outputPath,
91
+ format: params.format ?? "A4",
92
+ landscape: params.landscape ?? false,
93
+ printBackground: params.printBackground ?? true,
94
+ scale: Math.max(0.1, Math.min(2, params.scale ?? 1)),
95
+ margin,
96
+ displayHeaderFooter: hasHeaderFooter,
97
+ ...(hasHeaderFooter ? {
98
+ headerTemplate: params.headerTemplate ?? "<div></div>",
99
+ footerTemplate: params.footerTemplate ?? "<div></div>",
100
+ } : {}),
101
+ });
102
+
103
+ const bytes = statSync(outputPath).size;
104
+ process.stdout.write(JSON.stringify({ success: true, path: outputPath, bytes }) + "\n");
105
+ } finally {
106
+ await browser.close().catch(() => {});
107
+ }
108
+ }
109
+
110
+ main().catch((err) => {
111
+ process.stderr.write(JSON.stringify({ success: false, error: err.message ?? String(err) }) + "\n");
112
+ process.exit(1);
113
+ });
@@ -13,6 +13,7 @@
13
13
  */
14
14
  import type { PolpoTool as AgentTool } from "@polpo-ai/core";
15
15
  import type { FileSystem } from "@polpo-ai/core/filesystem";
16
+ import type { Shell } from "@polpo-ai/core";
16
17
  export type PdfToolName = "pdf_read" | "pdf_create" | "pdf_merge" | "pdf_info";
17
18
  export declare const ALL_PDF_TOOL_NAMES: PdfToolName[];
18
19
  /**
@@ -22,5 +23,5 @@ export declare const ALL_PDF_TOOL_NAMES: PdfToolName[];
22
23
  * @param allowedPaths - Sandbox paths
23
24
  * @param allowedTools - Optional filter
24
25
  */
25
- export declare function createPdfTools(cwd: string, allowedPaths?: string[], allowedTools?: string[], fs?: FileSystem): AgentTool<any>[];
26
+ export declare function createPdfTools(cwd: string, allowedPaths?: string[], allowedTools?: string[], fs?: FileSystem, shell?: Shell): AgentTool<any>[];
26
27
  //# sourceMappingURL=pdf-tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-tools.d.ts","sourceRoot":"","sources":["../src/pdf-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,KAAK,EAAE,SAAS,IAAI,SAAS,EAAiC,MAAM,gBAAgB,CAAC;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAkX5D,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAE/E,eAAO,MAAM,kBAAkB,EAAE,WAAW,EAAwD,CAAC;AAErG;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAgB/H"}
1
+ {"version":3,"file":"pdf-tools.d.ts","sourceRoot":"","sources":["../src/pdf-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,KAAK,EAAE,SAAS,IAAI,SAAS,EAAiC,MAAM,gBAAgB,CAAC;AAC5F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAkY5C,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,UAAU,CAAC;AAE/E,eAAO,MAAM,kBAAkB,EAAE,WAAW,EAAwD,CAAC;AAErG;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAiB9I"}
package/dist/pdf-tools.js CHANGED
@@ -12,9 +12,29 @@
12
12
  * All file operations enforce path sandboxing.
13
13
  */
14
14
  import { resolve, dirname } from "node:path";
15
+ import { readFileSync } from "node:fs";
16
+ import { fileURLToPath } from "node:url";
15
17
  import { Type } from "@sinclair/typebox";
16
18
  import { NodeFileSystem } from "./adapters/node-filesystem.js";
19
+ import { NodeShell } from "./adapters/node-shell.js";
17
20
  import { resolveAllowedPaths, assertPathAllowed } from "./path-sandbox.js";
21
+ /**
22
+ * Embedded driver script source. Loaded at module init from the .mjs
23
+ * sibling shipped in dist/. We don't `import()` the driver because we
24
+ * need to execute it inside the *Shell* — which in cloud chat-completion
25
+ * is `SandboxProxyShell`, i.e. a different process/host. Instead we
26
+ * read the source here and write it into the agent's filesystem on
27
+ * first call so `node <path>` runs in the same place where the
28
+ * Chromium binary lives. Same trick works in OSS standalone (FS and
29
+ * Shell both local) and in the runner-in-sandbox (FS and Shell both
30
+ * sandbox-local).
31
+ */
32
+ const PDF_RENDER_DRIVER_SRC = readFileSync(fileURLToPath(new URL("./pdf-render.mjs", import.meta.url)), "utf8");
33
+ /** Quote a CLI argument so it survives shell.execute (which takes a
34
+ * full command line, not an argv). */
35
+ function quote(arg) {
36
+ return `'${arg.replace(/'/g, `'\\''`)}'`;
37
+ }
18
38
  const MAX_TEXT_OUTPUT = 50_000;
19
39
  // ─── Tool: pdf_read ───
20
40
  const PdfReadSchema = Type.Object({
@@ -105,7 +125,21 @@ const PdfCreateSchema = Type.Object({
105
125
  scale: Type.Optional(Type.Number({ description: "Scale of the webpage rendering (default: 1, range 0.1-2)" })),
106
126
  wait_for_network: Type.Optional(Type.Boolean({ description: "Wait for network idle before rendering (default: true). Disable for offline HTML with no external resources." })),
107
127
  });
108
- function createPdfCreateTool(cwd, sandbox, fs) {
128
+ function createPdfCreateTool(cwd, sandbox, fs, shell) {
129
+ // Stage the driver lazily on first invocation. Subsequent calls reuse it.
130
+ // Path lives under cwd so it's in whichever filesystem the Shell will
131
+ // run `node` against (sandbox in cloud, local in OSS standalone).
132
+ const driverPath = `${cwd}/.polpo-internal/pdf-render.mjs`;
133
+ let driverStaged = null;
134
+ const stageDriver = () => {
135
+ if (!driverStaged) {
136
+ driverStaged = (async () => {
137
+ await fs.mkdir(dirname(driverPath));
138
+ await fs.writeFile(driverPath, PDF_RENDER_DRIVER_SRC);
139
+ })();
140
+ }
141
+ return driverStaged;
142
+ };
109
143
  return {
110
144
  name: "pdf_create",
111
145
  label: "Create PDF",
@@ -137,98 +171,91 @@ function createPdfCreateTool(cwd, sandbox, fs) {
137
171
  const filePath = resolve(cwd, params.path);
138
172
  assertPathAllowed(filePath, sandbox, "pdf_create");
139
173
  await fs.mkdir(dirname(filePath));
140
- // Resolve HTML content
141
- let htmlContent;
174
+ // Resolve HTML source path (driver reads the file itself, so we
175
+ // pass htmlPath through; only validate it's inside the sandbox).
176
+ let driverParams;
142
177
  if (params.html_path) {
143
178
  const htmlFilePath = resolve(cwd, params.html_path);
144
179
  assertPathAllowed(htmlFilePath, sandbox, "pdf_create");
145
- try {
146
- htmlContent = await fs.readFile(htmlFilePath);
147
- }
148
- catch (err) {
149
- return {
150
- content: [{ type: "text", text: `Error reading HTML file: ${err.message}` }],
151
- details: { error: "html_read_failed", path: htmlFilePath },
152
- };
153
- }
180
+ driverParams = { htmlPath: htmlFilePath };
154
181
  }
155
182
  else {
156
- htmlContent = params.html;
183
+ driverParams = { html: params.html };
157
184
  }
158
- let browser;
185
+ // Pass the rest of the rendering options through verbatim.
186
+ if (params.format)
187
+ driverParams.format = params.format;
188
+ if (params.landscape !== undefined)
189
+ driverParams.landscape = params.landscape;
190
+ if (params.print_background !== undefined)
191
+ driverParams.printBackground = params.print_background;
192
+ if (params.scale !== undefined)
193
+ driverParams.scale = params.scale;
194
+ if (params.margin)
195
+ driverParams.margin = params.margin;
196
+ if (params.header_template)
197
+ driverParams.headerTemplate = params.header_template;
198
+ if (params.footer_template)
199
+ driverParams.footerTemplate = params.footer_template;
200
+ if (params.wait_for_network !== undefined)
201
+ driverParams.waitForNetwork = params.wait_for_network;
159
202
  try {
160
- const { chromium } = await import("playwright-core");
161
- browser = await chromium.launch({
162
- headless: true,
163
- args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage"],
164
- });
165
- const page = await browser.newPage();
166
- // Load HTML content
167
- const waitUntil = (params.wait_for_network ?? true) ? "networkidle" : "domcontentloaded";
168
- await page.setContent(htmlContent, { waitUntil, timeout: 30_000 });
169
- // Default margins
170
- const defaultMargin = { top: "20mm", right: "15mm", bottom: "25mm", left: "15mm" };
171
- const margin = params.margin
172
- ? { ...defaultMargin, ...params.margin }
173
- : defaultMargin;
174
- // Determine if custom header/footer templates are provided
175
- const hasHeaderFooter = !!(params.header_template || params.footer_template);
176
- // Generate PDF (capture buffer instead of writing to path so we can route through fs)
177
- if (!fs.writeFileBuffer) {
178
- return {
179
- content: [{ type: "text", text: "PDF create error: Binary write not supported by injected FileSystem" }],
180
- details: { error: "binary_write_unsupported" },
181
- };
182
- }
183
- const pdfBuffer = await page.pdf({
184
- format: params.format ?? "A4",
185
- landscape: params.landscape ?? false,
186
- printBackground: params.print_background ?? true,
187
- scale: Math.max(0.1, Math.min(2, params.scale ?? 1)),
188
- margin,
189
- displayHeaderFooter: hasHeaderFooter,
190
- ...(hasHeaderFooter ? {
191
- headerTemplate: params.header_template ?? "<div></div>",
192
- footerTemplate: params.footer_template ?? "<div></div>",
193
- } : {}),
194
- });
195
- await fs.writeFileBuffer(filePath, new Uint8Array(pdfBuffer));
196
- const bytes = pdfBuffer.byteLength;
197
- // Count pages in the generated PDF for reporting
198
- let pageCount = 0;
199
- try {
200
- const { PDFDocument } = await import("pdf-lib");
201
- const doc = await PDFDocument.load(new Uint8Array(pdfBuffer));
202
- pageCount = doc.getPageCount();
203
- }
204
- catch {
205
- // Best effort — pdf-lib may fail on some PDFs
206
- }
207
- const pageInfo = pageCount > 0 ? `${pageCount} pages, ` : "";
203
+ await stageDriver();
204
+ }
205
+ catch (err) {
208
206
  return {
209
- content: [{ type: "text", text: `PDF created: ${filePath} (${pageInfo}${bytes} bytes)` }],
210
- details: { path: filePath, pages: pageCount, bytes },
207
+ content: [{ type: "text", text: `PDF create error: failed to stage renderer: ${err.message}` }],
208
+ details: { error: "driver_stage_failed", message: err.message },
211
209
  };
212
210
  }
213
- catch (err) {
214
- const msg = err.message ?? String(err);
215
- // Provide actionable hints for common errors
216
- if (msg.includes("Executable doesn't exist") || msg.includes("browserType.launch")) {
211
+ const cmd = `node ${quote(driverPath)} ${quote(JSON.stringify(driverParams))} ${quote(filePath)}`;
212
+ const result = await shell.execute(cmd, { timeout: 60_000 });
213
+ if (result.exitCode !== 0) {
214
+ const stderr = (result.stderr || "").trim();
215
+ const stdout = (result.stdout || "").trim();
216
+ // Driver emits structured JSON on failure when it can; bubble it up.
217
+ let parsed = null;
218
+ try {
219
+ parsed = JSON.parse(stderr);
220
+ }
221
+ catch { /* not JSON */ }
222
+ const errMsg = parsed?.error ?? stderr ?? stdout ?? `node exit ${result.exitCode}`;
223
+ // Friendly hint for the common case.
224
+ if (errMsg.includes("Chromium") || errMsg.includes("agent-browser")) {
217
225
  return {
218
- content: [{ type: "text", text: `PDF create error: Chromium not found. Install it with: npx playwright install chromium\n\nOriginal error: ${msg}` }],
219
- details: { error: "chromium_not_installed" },
226
+ content: [{ type: "text", text: `PDF create error: Chromium not found. Install it with: npm install -g agent-browser && agent-browser install\n\nOriginal error: ${errMsg}` }],
227
+ details: { error: "chromium_not_installed", message: errMsg },
220
228
  };
221
229
  }
222
230
  return {
223
- content: [{ type: "text", text: `PDF create error: ${msg}` }],
224
- details: { error: msg },
231
+ content: [{ type: "text", text: `PDF create error: ${errMsg}` }],
232
+ details: { error: errMsg },
225
233
  };
226
234
  }
227
- finally {
228
- if (browser) {
229
- await browser.close().catch(() => { });
235
+ let driverResult = null;
236
+ try {
237
+ driverResult = JSON.parse((result.stdout || "").trim());
238
+ }
239
+ catch { /* fall through */ }
240
+ const bytes = driverResult?.bytes ?? 0;
241
+ // Count pages in the generated PDF for reporting (best effort).
242
+ let pageCount = 0;
243
+ try {
244
+ if (fs.readFileBuffer) {
245
+ const { PDFDocument } = await import("pdf-lib");
246
+ const buf = await fs.readFileBuffer(filePath);
247
+ const doc = await PDFDocument.load(buf);
248
+ pageCount = doc.getPageCount();
230
249
  }
231
250
  }
251
+ catch {
252
+ // Best effort
253
+ }
254
+ const pageInfo = pageCount > 0 ? `${pageCount} pages, ` : "";
255
+ return {
256
+ content: [{ type: "text", text: `PDF created: ${filePath} (${pageInfo}${bytes} bytes)` }],
257
+ details: { path: filePath, pages: pageCount, bytes },
258
+ };
232
259
  },
233
260
  };
234
261
  }
@@ -355,12 +382,13 @@ export const ALL_PDF_TOOL_NAMES = ["pdf_read", "pdf_create", "pdf_merge", "pdf_i
355
382
  * @param allowedPaths - Sandbox paths
356
383
  * @param allowedTools - Optional filter
357
384
  */
358
- export function createPdfTools(cwd, allowedPaths, allowedTools, fs) {
385
+ export function createPdfTools(cwd, allowedPaths, allowedTools, fs, shell) {
359
386
  const sandbox = resolveAllowedPaths(cwd, allowedPaths);
360
387
  const _fs = fs ?? new NodeFileSystem();
388
+ const _shell = shell ?? new NodeShell();
361
389
  const factories = {
362
390
  pdf_read: () => createPdfReadTool(cwd, sandbox, _fs),
363
- pdf_create: () => createPdfCreateTool(cwd, sandbox, _fs),
391
+ pdf_create: () => createPdfCreateTool(cwd, sandbox, _fs, _shell),
364
392
  pdf_merge: () => createPdfMergeTool(cwd, sandbox, _fs),
365
393
  pdf_info: () => createPdfInfoTool(cwd, sandbox, _fs),
366
394
  };
@@ -1 +1 @@
1
- {"version":3,"file":"pdf-tools.js","sourceRoot":"","sources":["../src/pdf-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pdf-tools.js","sourceRoot":"","sources":["../src/pdf-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAIzC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3E;;;;;;;;;;GAUG;AACH,MAAM,qBAAqB,GAAG,YAAY,CACxC,aAAa,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC3D,MAAM,CACP,CAAC;AAEF;uCACuC;AACvC,SAAS,KAAK,CAAC,GAAW;IACxB,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC3C,CAAC;AAED,MAAM,eAAe,GAAG,MAAM,CAAC;AAE/B,yBAAyB;AAEzB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IACtD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,gEAAgE,EAAE,CAAC,CAAC;IAClI,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2CAA2C,EAAE,CAAC,CAAC;CACpG,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAc;IACvE,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,oFAAoF;QACjG,UAAU,EAAE,aAAa;QACzB,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;YACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAEjD,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kEAAkE,EAAE,CAAC;wBACrG,OAAO,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE;qBAC9C,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;gBAExC,kFAAkF;gBAClF,uCAAuC;gBACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,IAAI,eAAe,CAAC;gBAErD,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACzF,MAAM,SAAS,GAAa,EAAE,CAAC;gBAE/B,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;oBACpC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,SAAS;wBAAE,SAAS;oBACjD,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;oBACzC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;oBACzC,SAAS,CAAC,IAAI,CAAC,YAAY,OAAO,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACvF,SAAS,CAAC,IAAI,CAAC,SAAS,OAAO,gHAAgH,CAAC,CAAC;gBACnJ,CAAC;gBAED,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAClC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ;oBACtC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,kBAAkB,IAAI,CAAC,MAAM,eAAe;oBACxE,CAAC,CAAC,IAAI,CAAC;gBAET,MAAM,IAAI,GAAG;oBACX,QAAQ,QAAQ,EAAE;oBAClB,UAAU,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;oBAChG,EAAE;iBACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEb,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,EAAE,CAAC;oBACnD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;iBAC7D,CAAC;YACJ,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;oBACnE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;iBAChC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gEAAgE;AAEhE,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC;IAC1D,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kHAAkH,EAAE,CAAC,CAAC;IACrK,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4HAA4H,EAAE,CAAC,CAAC;IACpL,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;KACxB,EAAE,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;IAClD,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC,CAAC;IACjG,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,iCAAiC,EAAE,CAAC,CAAC;QACnF,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC,CAAC;QAChF,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAClF,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2BAA2B,EAAE,CAAC,CAAC;KAC/E,EAAE,EAAE,WAAW,EAAE,gEAAgE,EAAE,CAAC,CAAC;IACtF,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,2IAA2I,EAAE,CAAC,CAAC;IACzM,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qMAAqM,EAAE,CAAC,CAAC;IACnQ,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,gDAAgD,EAAE,CAAC,CAAC;IAChH,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,0DAA0D,EAAE,CAAC,CAAC;IAC9G,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,8GAA8G,EAAE,CAAC,CAAC;CAC/K,CAAC,CAAC;AAEH,SAAS,mBAAmB,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAc,EAAE,KAAY;IACvF,0EAA0E;IAC1E,sEAAsE;IACtE,kEAAkE;IAClE,MAAM,UAAU,GAAG,GAAG,GAAG,iCAAiC,CAAC;IAC3D,IAAI,YAAY,GAAyB,IAAI,CAAC;IAC9C,MAAM,WAAW,GAAG,GAAkB,EAAE;QACtC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG,CAAC,KAAK,IAAI,EAAE;gBACzB,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpC,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;YACxD,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,YAAY;QACnB,WAAW,EACT,2EAA2E;YAC3E,+EAA+E;YAC/E,+EAA+E;YAC/E,yDAAyD;YACzD,6EAA6E;YAC7E,2EAA2E;YAC3E,aAAa;YACb,uFAAuF;YACvF,yFAAyF;YACzF,6NAA6N;QAC/N,UAAU,EAAE,eAAe;QAC3B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;YACvB,uDAAuD;YACvD,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACtC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,sFAAsF,EAAE,CAAC;oBACzH,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;iBACnC,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gDAAgD,EAAE,CAAC;oBACnF,OAAO,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;iBACxC,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YACnD,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YAElC,gEAAgE;YAChE,iEAAiE;YACjE,IAAI,YAAqC,CAAC;YAC1C,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;gBACpD,iBAAiB,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;gBACvD,YAAY,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;YAED,2DAA2D;YAC3D,IAAI,MAAM,CAAC,MAAM;gBAAE,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;gBAAE,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;YAC9E,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;gBAAE,YAAY,CAAC,eAAe,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAClG,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;gBAAE,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAClE,IAAI,MAAM,CAAC,MAAM;gBAAE,YAAY,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YACvD,IAAI,MAAM,CAAC,eAAe;gBAAE,YAAY,CAAC,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;YACjF,IAAI,MAAM,CAAC,eAAe;gBAAE,YAAY,CAAC,cAAc,GAAG,MAAM,CAAC,eAAe,CAAC;YACjF,IAAI,MAAM,CAAC,gBAAgB,KAAK,SAAS;gBAAE,YAAY,CAAC,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC;YAEjG,IAAI,CAAC;gBACH,MAAM,WAAW,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+CAA+C,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC/F,OAAO,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE;iBAChE,CAAC;YACJ,CAAC;YAED,MAAM,GAAG,GAAG,QAAQ,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5C,qEAAqE;gBACrE,IAAI,MAAM,GAAQ,IAAI,CAAC;gBACvB,IAAI,CAAC;oBAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;gBAC7D,MAAM,MAAM,GAAG,MAAM,EAAE,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnF,qCAAqC;gBACrC,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;oBACpE,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mIAAmI,MAAM,EAAE,EAAE,CAAC;wBAC9K,OAAO,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,MAAM,EAAE;qBAC9D,CAAC;gBACJ,CAAC;gBACD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,MAAM,EAAE,EAAE,CAAC;oBAChE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;iBAC3B,CAAC;YACJ,CAAC;YAED,IAAI,YAAY,GAAQ,IAAI,CAAC;YAC7B,IAAI,CAAC;gBAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAC7F,MAAM,KAAK,GAAG,YAAY,EAAE,KAAK,IAAI,CAAC,CAAC;YAEvC,gEAAgE;YAChE,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;oBACtB,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;oBAChD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAC9C,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACxC,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;gBACjC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,cAAc;YAChB,CAAC;YAED,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,QAAQ,KAAK,QAAQ,GAAG,KAAK,SAAS,EAAE,CAAC;gBACzF,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE;aACrD,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,0BAA0B;AAE1B,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzG,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;CAC/D,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAc;IACxE,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,WAAW,EAAE,kDAAkD;QAC/D,UAAU,EAAE,cAAc;QAC1B,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;YACvB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/C,iBAAiB,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YACpD,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAEpC,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,cAAc,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;oBAC9C,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kEAAkE,EAAE,CAAC;wBACrG,OAAO,EAAE,EAAE,KAAK,EAAE,uBAAuB,EAAE;qBAC5C,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC1C,IAAI,UAAU,GAAG,CAAC,CAAC;gBAEnB,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACzC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;oBAClD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;oBAChD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBACxE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;oBACzD,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC;gBACnC,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;gBAElD,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,MAAM,CAAC,MAAM,YAAY,UAAU,KAAK,UAAU,WAAW,WAAW,CAAC,UAAU,SAAS,EAAE,CAAC;oBAChJ,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE;iBAC1E,CAAC;YACJ,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oBAAoB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;oBACpE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;iBAChC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,yBAAyB;AAEzB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACvD,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,GAAW,EAAE,OAAiB,EAAE,EAAc;IACvE,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;QACjB,WAAW,EAAE,sFAAsF;QACnG,UAAU,EAAE,aAAa;QACzB,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;YACvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YAC3C,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAEjD,IAAI,CAAC;gBACH,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC;oBACvB,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kEAAkE,EAAE,CAAC;wBACrG,OAAO,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE;qBAC9C,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAChD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAE7C,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;gBACpC,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;gBAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;gBAC5C,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAE7C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACrE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC5B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;oBACtC,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC3E,CAAC,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG;oBACX,UAAU,KAAK,EAAE;oBACjB,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;oBAChC,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;oBACnC,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;oBACtC,OAAO,CAAC,CAAC,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;oBACtC,QAAQ,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;oBACzC,YAAY,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;oBAC9D,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;oBACrD,cAAc,KAAK,CAAC,UAAU,QAAQ;oBACtC,oBAAoB;oBACpB,GAAG,SAAS;oBACZ,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,GAAG,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI;iBACvD,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAE7B,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;oBACjC,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE;iBAC3D,CAAC;YACJ,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;oBACnE,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;iBAChC,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAMD,MAAM,CAAC,MAAM,kBAAkB,GAAkB,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAErG;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW,EAAE,YAAuB,EAAE,YAAuB,EAAE,EAAe,EAAE,KAAa;IAC1H,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,EAAE,IAAI,IAAI,cAAc,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,SAAS,EAAE,CAAC;IAExC,MAAM,SAAS,GAA8C;QAC3D,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC;QACpD,UAAU,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC;QAChE,SAAS,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC;QACtD,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC;KACrD,CAAC;IAEF,MAAM,KAAK,GAAG,YAAY;QACxB,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;QAC/E,CAAC,CAAC,kBAAkB,CAAC;IAEvB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"system-tools.d.ts","sourceRoot":"","sources":["../src/system-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-tools.d.ts","sourceRoot":"","sources":["../src/system-tools.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIlD,OAAO,KAAK,EAAE,SAAS,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAgRhD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQ3E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAYjG;AAID,oDAAoD;AACpD,KAAK,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAIlF;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CA2C5L;AAgBD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,iDAAiD;AACjD,MAAM,MAAM,gBAAgB,GAAG,cAAc,GACzC,OAAO,oBAAoB,EAAE,eAAe,GAC5C,OAAO,iBAAiB,EAAE,YAAY,GACtC,OAAO,kBAAkB,EAAE,aAAa,GACxC,OAAO,oBAAoB,EAAE,eAAe,GAC5C,OAAO,kBAAkB,EAAE,aAAa,GACxC,OAAO,kBAAkB,EAAE,aAAa,GACxC,OAAO,kBAAkB,EAAE,aAAa,GACxC,OAAO,kBAAkB,EAAE,aAAa,GACxC,OAAO,gBAAgB,EAAE,WAAW,GACpC,OAAO,iBAAiB,EAAE,YAAY,GACtC,OAAO,mBAAmB,EAAE,cAAc,GAC1C,OAAO,kBAAkB,EAAE,aAAa,CAAC;AAE7C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,EAahC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ;;2DAEuD;IACvD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,+BAA+B;IAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;8FAC0F;IAC1F,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,sDAAsD;IACtD,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,iDAAiD;IACjD,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAkE9F"}
@@ -5,7 +5,7 @@
5
5
  * All file-based tools enforce path sandboxing when allowedPaths is provided.
6
6
  * The bash tool runs with cwd set to the agent's primary working directory.
7
7
  */
8
- import { join, dirname, resolve, relative } from "node:path";
8
+ import { join, dirname, resolve } from "node:path";
9
9
  // NodeFileSystem and NodeShell are loaded lazily to avoid pulling in
10
10
  // node:fs and execa when the consumer provides their own implementations.
11
11
  import { Type } from "@sinclair/typebox";
@@ -144,36 +144,39 @@ const GlobSchema = Type.Object({
144
144
  pattern: Type.String({ description: "Glob pattern (e.g. '**/*.ts', 'src/**/*.js')" }),
145
145
  path: Type.Optional(Type.String({ description: "Directory to search in (default: cwd)" })),
146
146
  });
147
- function createGlobTool(cwd, sandbox, shell) {
147
+ function createGlobTool(cwd, sandbox, _shell) {
148
148
  return {
149
149
  name: "glob",
150
150
  label: "Find Files",
151
- description: "Find files matching a glob pattern. Returns matching file paths.",
151
+ description: "Find files matching a glob pattern. Supports `**` (recursive), `*`, `?`, `[abc]`, `{a,b}`. Examples: `**/*.ts`, `src/**/*.{ts,tsx}`, `**/test.spec.js`.",
152
152
  parameters: GlobSchema,
153
153
  async execute(_toolCallId, params) {
154
154
  const searchDir = params.path ? resolve(cwd, params.path) : cwd;
155
155
  assertPathAllowed(searchDir, sandbox, "glob");
156
156
  try {
157
- const result = await shell.execute(`find ${JSON.stringify(searchDir)} -type f -name ${JSON.stringify(params.pattern)} 2>/dev/null | head -200`, { cwd, timeout: 10_000 });
158
- const output = result.stdout.trim();
159
- if (!output) {
160
- const fallback = await shell.execute(`cd ${JSON.stringify(searchDir)} && ls -1 ${JSON.stringify(params.pattern)} 2>/dev/null | head -200`, { cwd, timeout: 10_000 });
161
- const files = fallback.stdout.trim() ? fallback.stdout.trim().split("\n") : [];
162
- return {
163
- content: [{ type: "text", text: files.length > 0 ? files.join("\n") : "No files found" }],
164
- details: { pattern: params.pattern, count: files.length },
165
- };
166
- }
167
- const files = output.split("\n").map((f) => relative(cwd, f));
157
+ // Real glob lib (tinyglobby) supports `**`, `?`, `[abc]`, `{a,b}`.
158
+ // The previous shell-out to `find -name` only matched basenames,
159
+ // so the patterns advertised in the description literally didn't
160
+ // work. Lazy import keeps it optional for consumers who don't
161
+ // need glob support at all.
162
+ const { glob } = await import("tinyglobby");
163
+ const matches = await glob(params.pattern, {
164
+ cwd: searchDir,
165
+ absolute: false,
166
+ onlyFiles: true,
167
+ dot: false,
168
+ });
169
+ matches.sort();
170
+ const limited = matches.slice(0, 200);
168
171
  return {
169
- content: [{ type: "text", text: files.join("\n") }],
170
- details: { pattern: params.pattern, count: files.length },
172
+ content: [{ type: "text", text: limited.length > 0 ? limited.join("\n") : "No files found" }],
173
+ details: { pattern: params.pattern, count: limited.length, truncated: matches.length > 200 },
171
174
  };
172
175
  }
173
- catch {
176
+ catch (err) {
174
177
  return {
175
- content: [{ type: "text", text: "No files found" }],
176
- details: { pattern: params.pattern, count: 0 },
178
+ content: [{ type: "text", text: `Glob error: ${err.message ?? err}` }],
179
+ details: { pattern: params.pattern, count: 0, error: err.message },
177
180
  };
178
181
  }
179
182
  },
@@ -189,14 +192,22 @@ function createGrepTool(cwd, sandbox, shell) {
189
192
  return {
190
193
  name: "grep",
191
194
  label: "Search Code",
192
- description: "Search for a regex pattern in files. Returns matching lines with file paths and line numbers.",
195
+ description: "Search for a regex pattern in files. PCRE flavor (supports `\\d`, `\\w`, `\\s`, " +
196
+ "lookahead `(?=...)`, lookbehind `(?<=...)`, non-greedy `.*?`). " +
197
+ "Returns matching lines with file paths and line numbers.",
193
198
  parameters: GrepSchema,
194
199
  async execute(_toolCallId, params) {
195
200
  const searchPath = params.path ? resolve(cwd, params.path) : cwd;
196
201
  assertPathAllowed(searchPath, sandbox, "grep");
197
202
  const includeFlag = params.include ? `--include=${JSON.stringify(params.include)}` : "";
198
203
  try {
199
- const r = await shell.execute(`grep -rn ${includeFlag} -E ${JSON.stringify(params.pattern)} ${JSON.stringify(searchPath)} 2>/dev/null | head -100`, { cwd, timeout: 15_000 });
204
+ // -P selects PCRE (Perl regex). Matches what an LLM trained on
205
+ // JS/Python regex expects: `\d`, `\w`, `\s`, lookahead/behind,
206
+ // non-greedy quantifiers. -E (POSIX ERE) was the previous
207
+ // setting and silently rejected all of those.
208
+ // -a forces text mode so binary files with the right bytes
209
+ // don't dominate the output.
210
+ const r = await shell.execute(`grep -arn ${includeFlag} -P ${JSON.stringify(params.pattern)} ${JSON.stringify(searchPath)} 2>/dev/null | head -100`, { cwd, timeout: 15_000 });
200
211
  const result = r.stdout.trim();
201
212
  if (!result) {
202
213
  return {
@@ -417,7 +428,7 @@ export async function createAllTools(options) {
417
428
  }
418
429
  // PDF tools — activated when any pdf_* tool is in allowedTools
419
430
  if (categoryRequested(ALL_PDF_TOOL_NAMES)) {
420
- tools.push(...createPdfTools(cwd, allowedPaths, allowedTools, options.fs));
431
+ tools.push(...createPdfTools(cwd, allowedPaths, allowedTools, options.fs, options.shell));
421
432
  }
422
433
  // Docx tools — activated when any docx_* tool is in allowedTools
423
434
  if (categoryRequested(ALL_DOCX_TOOL_NAMES)) {
@@ -1 +1 @@
1
- {"version":3,"file":"system-tools.js","sourceRoot":"","sources":["../src/system-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system-tools.js","sourceRoot":"","sources":["../src/system-tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polpo-ai/tools",
3
- "version": "0.6.30",
3
+ "version": "0.6.32",
4
4
  "description": "Agent tools for Polpo — coding, browser, email, search, and more. Core tools work everywhere, extended tools are opt-in.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -20,7 +20,7 @@
20
20
  "@modelcontextprotocol/sdk": "^1.29.0",
21
21
  "@sinclair/typebox": "^0.34.0",
22
22
  "nanoid": "^5.0.0",
23
- "@polpo-ai/core": "0.6.30"
23
+ "@polpo-ai/core": "0.6.32"
24
24
  },
25
25
  "optionalDependencies": {
26
26
  "docx": "^9.5.0",
@@ -30,7 +30,8 @@
30
30
  "mammoth": "^1.11.0",
31
31
  "nodemailer": "^8.0.0",
32
32
  "pdf-lib": "^1.17.0",
33
- "playwright-core": "^1.52.0"
33
+ "playwright-core": "^1.52.0",
34
+ "tinyglobby": "^0.2.0"
34
35
  },
35
36
  "peerDependencies": {
36
37
  "zod": ">=3.0.0 || >=4.0.0"
@@ -51,6 +52,7 @@
51
52
  "ai"
52
53
  ],
53
54
  "scripts": {
54
- "build": "tsc"
55
+ "build": "tsc && cp src/pdf-render.mjs dist/",
56
+ "test": "vitest run"
55
57
  }
56
58
  }