@polpo-ai/tools 0.6.31 → 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.
- package/dist/__tests__/system-tools.test.d.ts +2 -0
- package/dist/__tests__/system-tools.test.d.ts.map +1 -0
- package/dist/__tests__/system-tools.test.js +417 -0
- package/dist/__tests__/system-tools.test.js.map +1 -0
- package/dist/adapters/node-shell.d.ts +9 -0
- package/dist/adapters/node-shell.d.ts.map +1 -1
- package/dist/adapters/node-shell.js +40 -9
- package/dist/adapters/node-shell.js.map +1 -1
- package/dist/system-tools.d.ts.map +1 -1
- package/dist/system-tools.js +32 -21
- package/dist/system-tools.js.map +1 -1
- package/package.json +6 -4
|
@@ -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;
|
|
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 {
|
|
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
|
|
13
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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,
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"system-tools.d.ts","sourceRoot":"","sources":["../src/system-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/system-tools.js
CHANGED
|
@@ -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
|
|
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,
|
|
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.
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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:
|
|
170
|
-
details: { pattern: params.pattern, count:
|
|
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:
|
|
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.
|
|
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
|
-
|
|
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 {
|
package/dist/system-tools.js.map
CHANGED
|
@@ -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.
|
|
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.
|
|
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 && cp src/pdf-render.mjs dist/"
|
|
55
|
+
"build": "tsc && cp src/pdf-render.mjs dist/",
|
|
56
|
+
"test": "vitest run"
|
|
55
57
|
}
|
|
56
58
|
}
|