@polpo-ai/tools 0.15.65 → 0.15.67

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=custom-tool-source-artifact.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-tool-source-artifact.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/custom-tool-source-artifact.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { createSingleFileCustomToolArtifact, parseCustomToolSourceArtifact, } from "../custom-tool-source-artifact.js";
3
+ describe("custom tool source artifacts", () => {
4
+ it("normalizes a valid, sorted multi-file artifact", () => {
5
+ const artifact = parseCustomToolSourceArtifact({
6
+ version: 1,
7
+ entry: "site_context_get.ts",
8
+ files: {
9
+ "site_context_get.ts": "export { value } from './lib/value';",
10
+ "lib/value.ts": "export const value = 1;",
11
+ },
12
+ });
13
+ expect(artifact).toEqual({
14
+ version: 1,
15
+ entry: "site_context_get.ts",
16
+ files: {
17
+ "lib/value.ts": "export const value = 1;",
18
+ "site_context_get.ts": "export { value } from './lib/value';",
19
+ },
20
+ });
21
+ expect(Object.isFrozen(artifact)).toBe(true);
22
+ expect(Object.isFrozen(artifact.files)).toBe(true);
23
+ });
24
+ it("creates the compatibility artifact for a single source", () => {
25
+ expect(createSingleFileCustomToolArtifact("echo", "export default {};"))
26
+ .toEqual({
27
+ version: 1,
28
+ entry: "echo.ts",
29
+ files: { "echo.ts": "export default {};" },
30
+ });
31
+ });
32
+ it.each([
33
+ "/absolute.ts",
34
+ "../escape.ts",
35
+ "nested/../../escape.ts",
36
+ "nested\\windows.ts",
37
+ "./dot.ts",
38
+ "nested//empty.ts",
39
+ "node_modules/pkg.ts",
40
+ "evil;touch-pwned.ts",
41
+ "quoted'name.ts",
42
+ "bad.txt",
43
+ ])("rejects unsafe or unsupported path %s", (path) => {
44
+ expect(() => parseCustomToolSourceArtifact({
45
+ version: 1,
46
+ entry: path,
47
+ files: { [path]: "export {};" },
48
+ })).toThrow();
49
+ });
50
+ it("rejects unknown fields, a missing entry, and case-insensitive collisions", () => {
51
+ expect(() => parseCustomToolSourceArtifact({
52
+ version: 1,
53
+ entry: "entry.ts",
54
+ files: { "entry.ts": "export {};" },
55
+ hash: "untrusted",
56
+ })).toThrow(/unsupported/i);
57
+ expect(() => parseCustomToolSourceArtifact({
58
+ version: 1,
59
+ entry: "entry.ts",
60
+ files: { "other.ts": "export {};" },
61
+ })).toThrow(/entry/i);
62
+ expect(() => parseCustomToolSourceArtifact({
63
+ version: 1,
64
+ entry: "Entry.ts",
65
+ files: {
66
+ "Entry.ts": "export {};",
67
+ "entry.ts": "export {};",
68
+ },
69
+ })).toThrow(/collision/i);
70
+ });
71
+ it("rejects non-string, empty, oversized, and excessive source graphs", () => {
72
+ expect(() => parseCustomToolSourceArtifact({
73
+ version: 1,
74
+ entry: "entry.ts",
75
+ files: { "entry.ts": 1 },
76
+ })).toThrow(/string/i);
77
+ expect(() => parseCustomToolSourceArtifact({
78
+ version: 1,
79
+ entry: "entry.ts",
80
+ files: {},
81
+ })).toThrow(/at least one/i);
82
+ expect(() => parseCustomToolSourceArtifact({
83
+ version: 1,
84
+ entry: "entry.ts",
85
+ files: { "entry.ts": "x".repeat(2 * 1024 * 1024 + 1) },
86
+ })).toThrow(/bytes/i);
87
+ expect(() => parseCustomToolSourceArtifact({
88
+ version: 1,
89
+ entry: "f0.ts",
90
+ files: Object.fromEntries(Array.from({ length: 129 }, (_, index) => [
91
+ `f${index}.ts`,
92
+ "export {};",
93
+ ])),
94
+ })).toThrow(/128/i);
95
+ });
96
+ });
97
+ //# sourceMappingURL=custom-tool-source-artifact.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-tool-source-artifact.test.js","sourceRoot":"","sources":["../../src/__tests__/custom-tool-source-artifact.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { createCustomToolsStore } from "../custom-tool-store.js";
3
+ import { parseCustomToolSourceArtifact } from "../custom-tool-source-artifact.js";
3
4
  class MemoryFs {
4
5
  files = new Map();
5
6
  dirs = new Set();
@@ -48,5 +49,29 @@ describe("createCustomToolsStore", () => {
48
49
  expect(await store.has("echo")).toBe(false);
49
50
  await expect(store.putSource("../escape", "source")).rejects.toThrow("Invalid custom tool name");
50
51
  });
52
+ it("round-trips a multi-file artifact and preserves the entry source API", async () => {
53
+ const store = createCustomToolsStore(new MemoryFs(), "/project/.polpo/tools");
54
+ const artifact = parseCustomToolSourceArtifact({
55
+ version: 1,
56
+ entry: "site_context_get.ts",
57
+ files: {
58
+ "site_context_get.ts": `import "./_leo_platform"; export default {};`,
59
+ "_leo_platform.ts": `export const platform = "leo";`,
60
+ },
61
+ });
62
+ await store.putArtifact("site_context_get", artifact);
63
+ expect(await store.getArtifact("site_context_get")).toEqual(artifact);
64
+ expect(await store.getSource("site_context_get")).toContain("_leo_platform");
65
+ });
66
+ it("reads legacy single-file records as versioned artifacts", async () => {
67
+ const fs = new MemoryFs();
68
+ fs.files.set("/project/.polpo/tools/echo.ts", "export default {};");
69
+ const store = createCustomToolsStore(fs, "/project/.polpo/tools");
70
+ expect(await store.getArtifact("echo")).toEqual({
71
+ version: 1,
72
+ entry: "echo.ts",
73
+ files: { "echo.ts": "export default {};" },
74
+ });
75
+ });
51
76
  });
52
77
  //# sourceMappingURL=custom-tool-store.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"custom-tool-store.test.js","sourceRoot":"","sources":["../../src/__tests__/custom-tool-store.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom-tool-store.test.js","sourceRoot":"","sources":["../../src/__tests__/custom-tool-store.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sandbox-volume-tools.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-volume-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/sandbox-volume-tools.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { createSandboxVolumeCheckpointTool } from "../sandbox-volume-tools.js";
3
+ describe("createSandboxVolumeCheckpointTool", () => {
4
+ it("checkpoints all eligible volumes when no name is supplied", async () => {
5
+ const checkpoint = vi.fn(async () => undefined);
6
+ const tool = createSandboxVolumeCheckpointTool(checkpoint);
7
+ await expect(tool.execute("call-1", {})).resolves.toMatchObject({
8
+ details: { checkpointed: true },
9
+ });
10
+ expect(checkpoint).toHaveBeenCalledWith(undefined);
11
+ expect(tool.requiresSandbox).toBe(true);
12
+ });
13
+ it("forwards an explicit volume name and propagates provider failures", async () => {
14
+ const checkpoint = vi.fn(async () => {
15
+ throw new Error("revision conflict");
16
+ });
17
+ const tool = createSandboxVolumeCheckpointTool(checkpoint);
18
+ await expect(tool.execute("call-2", { volume: "workspace" }))
19
+ .rejects.toThrow("revision conflict");
20
+ expect(checkpoint).toHaveBeenCalledWith("workspace");
21
+ });
22
+ });
23
+ //# sourceMappingURL=sandbox-volume-tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-volume-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/sandbox-volume-tools.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAE/E,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,iCAAiC,CAAC,UAAU,CAAC,CAAC;QAE3D,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;YAC9D,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;SAChC,CAAC,CAAC;QACH,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;QACjF,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE;YAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,iCAAiC,CAAC,UAAU,CAAC,CAAC;QAE3D,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;aAC1D,OAAO,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const CUSTOM_TOOL_SOURCE_ARTIFACT_VERSION: 1;
2
+ export declare const MAX_CUSTOM_TOOL_SOURCE_FILES = 128;
3
+ export declare const MAX_CUSTOM_TOOL_SOURCE_BYTES: number;
4
+ export interface CustomToolSourceArtifact {
5
+ readonly version: typeof CUSTOM_TOOL_SOURCE_ARTIFACT_VERSION;
6
+ readonly entry: string;
7
+ readonly files: Readonly<Record<string, string>>;
8
+ }
9
+ export declare function createSingleFileCustomToolArtifact(name: string, source: string): CustomToolSourceArtifact;
10
+ export declare function parseCustomToolSourceArtifact(value: unknown): CustomToolSourceArtifact;
11
+ export declare function customToolArtifactEntrySource(artifact: CustomToolSourceArtifact): string;
12
+ //# sourceMappingURL=custom-tool-source-artifact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-tool-source-artifact.d.ts","sourceRoot":"","sources":["../src/custom-tool-source-artifact.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,EAAG,CAAU,CAAC;AAC9D,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,4BAA4B,QAAkB,CAAC;AAQ5D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,mCAAmC,CAAC;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAClD;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,wBAAwB,CAS1B;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,GACb,wBAAwB,CAyE1B;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,wBAAwB,GACjC,MAAM,CAMR"}
@@ -0,0 +1,109 @@
1
+ export const CUSTOM_TOOL_SOURCE_ARTIFACT_VERSION = 1;
2
+ export const MAX_CUSTOM_TOOL_SOURCE_FILES = 128;
3
+ export const MAX_CUSTOM_TOOL_SOURCE_BYTES = 2 * 1024 * 1024;
4
+ const MAX_SOURCE_PATH_LENGTH = 240;
5
+ const MAX_SOURCE_PATH_DEPTH = 16;
6
+ const SUPPORTED_SOURCE_EXTENSION_RE = /\.(?:[cm]?[jt]sx?|json)$/;
7
+ const PORTABLE_SOURCE_PATH_RE = /^[A-Za-z0-9_./-]+$/;
8
+ const CUSTOM_TOOL_NAME_RE = /^[a-z][a-z0-9_]*$/;
9
+ export function createSingleFileCustomToolArtifact(name, source) {
10
+ if (!CUSTOM_TOOL_NAME_RE.test(name)) {
11
+ throw new Error(`Invalid custom tool name: ${name}`);
12
+ }
13
+ return parseCustomToolSourceArtifact({
14
+ version: CUSTOM_TOOL_SOURCE_ARTIFACT_VERSION,
15
+ entry: `${name}.ts`,
16
+ files: { [`${name}.ts`]: source },
17
+ });
18
+ }
19
+ export function parseCustomToolSourceArtifact(value) {
20
+ if (!isPlainRecord(value)) {
21
+ throw new Error("Custom tool source artifact must be an object");
22
+ }
23
+ const supportedFields = new Set(["version", "entry", "files"]);
24
+ const unsupportedFields = Object.keys(value).filter((field) => !supportedFields.has(field));
25
+ if (unsupportedFields.length > 0) {
26
+ throw new Error(`Unsupported custom tool source artifact fields: ${unsupportedFields.join(", ")}`);
27
+ }
28
+ if (value.version !== CUSTOM_TOOL_SOURCE_ARTIFACT_VERSION) {
29
+ throw new Error(`Unsupported custom tool source artifact version: ${String(value.version)}`);
30
+ }
31
+ if (typeof value.entry !== "string") {
32
+ throw new Error("Custom tool source artifact entry must be a string");
33
+ }
34
+ if (!isPlainRecord(value.files)) {
35
+ throw new Error("Custom tool source artifact files must be an object");
36
+ }
37
+ const fileEntries = Object.entries(value.files);
38
+ if (fileEntries.length === 0) {
39
+ throw new Error("Custom tool source artifact must contain at least one file");
40
+ }
41
+ if (fileEntries.length > MAX_CUSTOM_TOOL_SOURCE_FILES) {
42
+ throw new Error(`Custom tool source artifact cannot contain more than ${MAX_CUSTOM_TOOL_SOURCE_FILES} files`);
43
+ }
44
+ const normalizedEntry = validateSourcePath(value.entry);
45
+ const caseInsensitivePaths = new Set();
46
+ let totalBytes = 0;
47
+ const files = {};
48
+ for (const [rawPath, source] of fileEntries.sort(([left], [right]) => left.localeCompare(right, "en"))) {
49
+ const path = validateSourcePath(rawPath);
50
+ const caseInsensitivePath = path.toLocaleLowerCase("en-US");
51
+ if (caseInsensitivePaths.has(caseInsensitivePath)) {
52
+ throw new Error(`Custom tool source artifact path collision: ${path}`);
53
+ }
54
+ caseInsensitivePaths.add(caseInsensitivePath);
55
+ if (typeof source !== "string") {
56
+ throw new Error(`Custom tool source for ${path} must be a string`);
57
+ }
58
+ totalBytes += Buffer.byteLength(source, "utf8");
59
+ if (totalBytes > MAX_CUSTOM_TOOL_SOURCE_BYTES) {
60
+ throw new Error(`Custom tool source artifact exceeds ${MAX_CUSTOM_TOOL_SOURCE_BYTES} bytes`);
61
+ }
62
+ files[path] = source;
63
+ }
64
+ if (!(normalizedEntry in files)) {
65
+ throw new Error(`Custom tool source artifact entry does not exist: ${normalizedEntry}`);
66
+ }
67
+ return Object.freeze({
68
+ version: CUSTOM_TOOL_SOURCE_ARTIFACT_VERSION,
69
+ entry: normalizedEntry,
70
+ files: Object.freeze(files),
71
+ });
72
+ }
73
+ export function customToolArtifactEntrySource(artifact) {
74
+ const source = artifact.files[artifact.entry];
75
+ if (typeof source !== "string") {
76
+ throw new Error(`Custom tool source artifact entry is missing: ${artifact.entry}`);
77
+ }
78
+ return source;
79
+ }
80
+ function validateSourcePath(path) {
81
+ if (path.length === 0
82
+ || path.length > MAX_SOURCE_PATH_LENGTH
83
+ || path.includes("\\")
84
+ || path.includes("\0")
85
+ || path !== path.normalize("NFC")
86
+ || path.startsWith("/")
87
+ || /^[A-Za-z]:/.test(path)
88
+ || !PORTABLE_SOURCE_PATH_RE.test(path)
89
+ || !SUPPORTED_SOURCE_EXTENSION_RE.test(path)) {
90
+ throw new Error(`Unsafe or unsupported custom tool source path: ${path}`);
91
+ }
92
+ const segments = path.split("/");
93
+ if (segments.length > MAX_SOURCE_PATH_DEPTH
94
+ || segments.some((segment) => segment.length === 0
95
+ || segment === "."
96
+ || segment === ".."
97
+ || segment.toLocaleLowerCase("en-US") === "node_modules")) {
98
+ throw new Error(`Unsafe custom tool source path: ${path}`);
99
+ }
100
+ return path;
101
+ }
102
+ function isPlainRecord(value) {
103
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
104
+ return false;
105
+ }
106
+ const prototype = Object.getPrototypeOf(value);
107
+ return prototype === Object.prototype || prototype === null;
108
+ }
109
+ //# sourceMappingURL=custom-tool-source-artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-tool-source-artifact.js","sourceRoot":"","sources":["../src/custom-tool-source-artifact.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { FileSystem } from "@polpo-ai/core/filesystem";
2
2
  import type { CustomToolServerBindings } from "./custom-tools.js";
3
+ import { type CustomToolSourceArtifact } from "./custom-tool-source-artifact.js";
3
4
  export declare const CUSTOM_TOOL_NAME_RE: RegExp;
4
5
  export interface CustomToolMeta {
5
6
  name: string;
@@ -12,9 +13,11 @@ export interface CustomToolMeta {
12
13
  }
13
14
  export interface CustomToolsStore {
14
15
  putSource(name: string, source: string): Promise<void>;
16
+ putArtifact(name: string, artifact: CustomToolSourceArtifact): Promise<void>;
15
17
  putMeta(name: string, meta: CustomToolMeta): Promise<void>;
16
18
  putBundle(name: string, code: string): Promise<void>;
17
19
  getSource(name: string): Promise<string | null>;
20
+ getArtifact(name: string): Promise<CustomToolSourceArtifact | null>;
18
21
  getMeta(name: string): Promise<CustomToolMeta | null>;
19
22
  getBundle(name: string): Promise<string | null>;
20
23
  list(): Promise<string[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"custom-tool-store.d.ts","sourceRoot":"","sources":["../src/custom-tool-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAElE,eAAO,MAAM,mBAAmB,QAAsB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACtD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,MAAM,GACf,gBAAgB,CA+DlB"}
1
+ {"version":3,"file":"custom-tool-store.d.ts","sourceRoot":"","sources":["../src/custom-tool-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,kCAAkC,CAAC;AAE1C,eAAO,MAAM,mBAAmB,QAAsB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACtD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,UAAU,EACd,QAAQ,EAAE,MAAM,GACf,gBAAgB,CA4FlB"}
@@ -1,3 +1,4 @@
1
+ import { createSingleFileCustomToolArtifact, customToolArtifactEntrySource, parseCustomToolSourceArtifact, } from "./custom-tool-source-artifact.js";
1
2
  export const CUSTOM_TOOL_NAME_RE = /^[a-z][a-z0-9_]*$/;
2
3
  /**
3
4
  * FileSystem-backed custom-tool registry shared by self-hosted and managed
@@ -16,11 +17,32 @@ export function createCustomToolsStore(fs, toolsDir) {
16
17
  return null;
17
18
  return fs.readFile(path);
18
19
  };
20
+ const putArtifact = async (name, artifact) => {
21
+ const parsed = parseCustomToolSourceArtifact(artifact);
22
+ await fs.mkdir(root);
23
+ await Promise.all([
24
+ fs.writeFile(pathFor(name, "ts"), customToolArtifactEntrySource(parsed)),
25
+ fs.writeFile(pathFor(name, "source.json"), JSON.stringify(parsed)),
26
+ ]);
27
+ };
28
+ const getArtifact = async (name) => {
29
+ const raw = await readOptional(pathFor(name, "source.json"));
30
+ if (raw !== null) {
31
+ try {
32
+ return parseCustomToolSourceArtifact(JSON.parse(raw));
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ const source = await readOptional(pathFor(name, "ts"));
39
+ return source === null ? null : createSingleFileCustomToolArtifact(name, source);
40
+ };
19
41
  return {
20
42
  async putSource(name, source) {
21
- await fs.mkdir(root);
22
- await fs.writeFile(pathFor(name, "ts"), source);
43
+ await putArtifact(name, createSingleFileCustomToolArtifact(name, source));
23
44
  },
45
+ putArtifact,
24
46
  async putMeta(name, meta) {
25
47
  await fs.mkdir(root);
26
48
  await fs.writeFile(pathFor(name, "json"), JSON.stringify(meta, null, 2));
@@ -30,8 +52,9 @@ export function createCustomToolsStore(fs, toolsDir) {
30
52
  await fs.writeFile(pathFor(name, "mjs"), code);
31
53
  },
32
54
  getSource(name) {
33
- return readOptional(pathFor(name, "ts"));
55
+ return getArtifact(name).then((artifact) => artifact ? customToolArtifactEntrySource(artifact) : null);
34
56
  },
57
+ getArtifact,
35
58
  async getMeta(name) {
36
59
  const raw = await readOptional(pathFor(name, "json"));
37
60
  if (raw === null)
@@ -60,7 +83,7 @@ export function createCustomToolsStore(fs, toolsDir) {
60
83
  },
61
84
  async remove(name) {
62
85
  const existed = await fs.exists(pathFor(name, "ts"));
63
- await Promise.all(["ts", "json", "mjs"].map((extension) => fs.remove(pathFor(name, extension)).catch(() => undefined)));
86
+ await Promise.all(["ts", "source.json", "json", "mjs"].map((extension) => fs.remove(pathFor(name, extension)).catch(() => undefined)));
64
87
  return existed;
65
88
  },
66
89
  };
@@ -1 +1 @@
1
- {"version":3,"file":"custom-tool-store.js","sourceRoot":"","sources":["../src/custom-tool-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom-tool-store.js","sourceRoot":"","sources":["../src/custom-tool-store.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -13,6 +13,7 @@
13
13
  export { createSystemTools, createSystemTools as createCodingTools, createAllTools, matchToolPattern, expandToolWildcards, TOOL_CATALOG } from "./system-tools.js";
14
14
  export type { ExtendedToolName, CreateAllToolsOptions } from "./system-tools.js";
15
15
  export { createOutcomeTools } from "./outcome-tools.js";
16
+ export { createSandboxVolumeCheckpointTool } from "./sandbox-volume-tools.js";
16
17
  export { createHttpTools, ALL_HTTP_TOOL_NAMES } from "./http-tools.js";
17
18
  export { createVaultToolsCore, createVaultTools, ALL_VAULT_TOOL_NAMES } from "./vault-tools.js";
18
19
  export { resolveAgentMcpTools } from "./mcp-client.js";
@@ -40,5 +41,7 @@ export { defineTool, getCustomToolErrors, isCustomTool, normalizeToolResult, bin
40
41
  export type { CustomTool, CustomToolConnection, CustomToolConnections, CustomToolSpec, CustomToolContext, CustomToolBindContext, CustomToolExecuteResult, CustomToolServerBinding, CustomToolServerBindings, ToolInvocationContext, ToolInvocationContextInput, ToolInvocationJsonPrimitive, ToolInvocationJsonValue, ToolInvocationSurface, } from "./custom-tools.js";
41
42
  export { CUSTOM_TOOL_NAME_RE, createCustomToolsStore, } from "./custom-tool-store.js";
42
43
  export type { CustomToolMeta, CustomToolsStore, } from "./custom-tool-store.js";
44
+ export { CUSTOM_TOOL_SOURCE_ARTIFACT_VERSION, MAX_CUSTOM_TOOL_SOURCE_BYTES, MAX_CUSTOM_TOOL_SOURCE_FILES, createSingleFileCustomToolArtifact, customToolArtifactEntrySource, parseCustomToolSourceArtifact, } from "./custom-tool-source-artifact.js";
45
+ export type { CustomToolSourceArtifact } from "./custom-tool-source-artifact.js";
43
46
  export type { ResolvedVault } from "./types.js";
44
47
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnK,YAAY,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAGjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGpF,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,6BAA6B,EAC7B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAGrD,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EAClC,mCAAmC,GACpC,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,cAAc,EACd,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -14,6 +14,7 @@
14
14
  export { createSystemTools, createSystemTools as createCodingTools, createAllTools, matchToolPattern, expandToolWildcards, TOOL_CATALOG } from "./system-tools.js";
15
15
  // Individual tool factories (for custom composition)
16
16
  export { createOutcomeTools } from "./outcome-tools.js";
17
+ export { createSandboxVolumeCheckpointTool } from "./sandbox-volume-tools.js";
17
18
  export { createHttpTools, ALL_HTTP_TOOL_NAMES } from "./http-tools.js";
18
19
  export { createVaultToolsCore, createVaultTools, ALL_VAULT_TOOL_NAMES } from "./vault-tools.js";
19
20
  export { resolveAgentMcpTools } from "./mcp-client.js";
@@ -42,4 +43,5 @@ export { builtInToolRequiresSandbox, withBuiltInToolRuntimeRequirements, withBui
42
43
  // Custom tools (defineTool)
43
44
  export { defineTool, getCustomToolErrors, isCustomTool, normalizeToolResult, bindCustomTool, extractCustomTool, loadCustomToolBundle, createJsonSchemaExample, createToolInvocationContext, CustomToolBindingError, emptyCustomToolConnections, } from "./custom-tools.js";
44
45
  export { CUSTOM_TOOL_NAME_RE, createCustomToolsStore, } from "./custom-tool-store.js";
46
+ export { CUSTOM_TOOL_SOURCE_ARTIFACT_VERSION, MAX_CUSTOM_TOOL_SOURCE_BYTES, MAX_CUSTOM_TOOL_SOURCE_FILES, createSingleFileCustomToolArtifact, customToolArtifactEntrySource, parseCustomToolSourceArtifact, } from "./custom-tool-source-artifact.js";
45
47
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGnK,qDAAqD;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGvD,0BAA0B;AAC1B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,0DAA0D;AAC1D,0CAA0C;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAG1B,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EAClC,mCAAmC,GACpC,MAAM,2BAA2B,CAAC;AAEnC,4BAA4B;AAC5B,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAiB3B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,IAAI,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGnK,qDAAqD;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,iCAAiC,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAGvD,0BAA0B;AAC1B,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC5G,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,0DAA0D;AAC1D,0CAA0C;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAG1B,8CAA8C;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,qBAAqB;AACrB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,kCAAkC,EAClC,mCAAmC,GACpC,MAAM,2BAA2B,CAAC;AAEnC,4BAA4B;AAC5B,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,mBAAmB,CAAC;AAiB3B,OAAO,EACL,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EACL,mCAAmC,EACnC,4BAA4B,EAC5B,4BAA4B,EAC5B,kCAAkC,EAClC,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { PolpoTool } from "@polpo-ai/core";
2
+ declare const SandboxVolumeCheckpointSchema: import("@sinclair/typebox").TObject<{
3
+ volume: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
4
+ }>;
5
+ /** Host-bound tool for explicit persistence of hydrated volume changes. */
6
+ export declare function createSandboxVolumeCheckpointTool(checkpoint: (name?: string) => Promise<void>): PolpoTool<typeof SandboxVolumeCheckpointSchema>;
7
+ export {};
8
+ //# sourceMappingURL=sandbox-volume-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-volume-tools.d.ts","sourceRoot":"","sources":["../src/sandbox-volume-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,QAAA,MAAM,6BAA6B;;EAKA,CAAC;AAEpC,2EAA2E;AAC3E,wBAAgB,iCAAiC,CAC/C,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC3C,SAAS,CAAC,OAAO,6BAA6B,CAAC,CAyBjD"}
@@ -0,0 +1,34 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ const SandboxVolumeCheckpointSchema = Type.Object({
3
+ volume: Type.Optional(Type.String({
4
+ minLength: 1,
5
+ description: "Name of one attached hydrated volume. Omit to checkpoint every eligible volume.",
6
+ })),
7
+ }, { additionalProperties: false });
8
+ /** Host-bound tool for explicit persistence of hydrated volume changes. */
9
+ export function createSandboxVolumeCheckpointTool(checkpoint) {
10
+ return {
11
+ name: "sandbox_volume_checkpoint",
12
+ label: "Checkpoint Sandbox Volume",
13
+ description: "Persist changes made to manually managed hydrated sandbox volumes. "
14
+ + "Call this after completing a consistent set of filesystem updates.",
15
+ requiresSandbox: true,
16
+ parameters: SandboxVolumeCheckpointSchema,
17
+ async execute(_toolCallId, params) {
18
+ await checkpoint(params.volume);
19
+ return {
20
+ content: [{
21
+ type: "text",
22
+ text: params.volume
23
+ ? `Sandbox volume checkpointed: ${params.volume}`
24
+ : "Sandbox volumes checkpointed.",
25
+ }],
26
+ details: {
27
+ checkpointed: true,
28
+ ...(params.volume ? { volume: params.volume } : {}),
29
+ },
30
+ };
31
+ },
32
+ };
33
+ }
34
+ //# sourceMappingURL=sandbox-volume-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox-volume-tools.js","sourceRoot":"","sources":["../src/sandbox-volume-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,MAAM,6BAA6B,GAAG,IAAI,CAAC,MAAM,CAAC;IAChD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,iFAAiF;KAC/F,CAAC,CAAC;CACJ,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAAC,CAAC;AAEpC,2EAA2E;AAC3E,MAAM,UAAU,iCAAiC,CAC/C,UAA4C;IAE5C,OAAO;QACL,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,2BAA2B;QAClC,WAAW,EACT,qEAAqE;cACnE,oEAAoE;QACxE,eAAe,EAAE,IAAI;QACrB,UAAU,EAAE,6BAA6B;QACzC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,MAAM,CAAC,MAAM;4BACjB,CAAC,CAAC,gCAAgC,MAAM,CAAC,MAAM,EAAE;4BACjD,CAAC,CAAC,+BAA+B;qBACpC,CAAC;gBACF,OAAO,EAAE;oBACP,YAAY,EAAE,IAAI;oBAClB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACpD;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polpo-ai/tools",
3
- "version": "0.15.65",
3
+ "version": "0.15.67",
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,8 +20,8 @@
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.15.65",
24
- "@polpo-ai/llm": "0.15.65"
23
+ "@polpo-ai/llm": "0.15.67",
24
+ "@polpo-ai/core": "0.15.67"
25
25
  },
26
26
  "optionalDependencies": {
27
27
  "@ai-sdk/anthropic": "^2.0.79",