@bunny-agent/manager 0.9.50 → 0.9.51-beta.2

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/index.d.ts CHANGED
@@ -6,8 +6,6 @@ export type { IsBunnyAgentDaemonHealthyOptions } from "./daemon-health.js";
6
6
  export { isBunnyAgentDaemonHealthy } from "./daemon-health.js";
7
7
  export type { RunnerEnvParams, RunnerType } from "./env.js";
8
8
  export { buildRunnerEnv } from "./env.js";
9
- export type { LocalSandboxOptions } from "./local-sandbox.js";
10
- export { LocalSandbox } from "./local-sandbox.js";
11
9
  export { ConsoleTranscriptWriter, JsonlTranscriptWriter, MemoryTranscriptWriter, MultiTranscriptWriter, } from "./transcript.js";
12
10
  export type { BunnyAgentCodingRunBody, BunnyAgentOptions, ExecOptions, Message, RunnerSpec, SandboxAdapter, SandboxHandle, StreamInput, ToolInputSchema, ToolRef, ToolRuntime, TranscriptEntry, TranscriptWriter, Volume, } from "./types.js";
13
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sCAAsC,EACtC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,MAAM,GACP,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sCAAsC,EACtC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAChE,YAAY,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAM1C,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,uBAAuB,EACvB,iBAAiB,EACjB,WAAW,EACX,OAAO,EACP,UAAU,EACV,cAAc,EACd,aAAa,EACb,WAAW,EACX,eAAe,EACf,OAAO,EACP,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,MAAM,GACP,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -4,7 +4,10 @@ export { DEFAULT_BUNNY_AGENT_DAEMON_URL } from "./constants.js";
4
4
  export { isBunnyAgentDaemonHealthy } from "./daemon-health.js";
5
5
  // Env helpers
6
6
  export { buildRunnerEnv } from "./env.js";
7
- // Default sandbox adapter (built-in)
8
- export { LocalSandbox } from "./local-sandbox.js";
7
+ // Local adapters live in their own packages, mirroring the cloud adapters:
8
+ // @bunny-agent/sandbox-local (LocalMachine — NO isolation) and
9
+ // @bunny-agent/sandbox-srt (SrtSandbox — OS-level isolation via
10
+ // @anthropic-ai/sandbox-runtime). Both are also re-exported from
11
+ // @bunny-agent/sdk for convenience.
9
12
  export { ConsoleTranscriptWriter, JsonlTranscriptWriter, MemoryTranscriptWriter, MultiTranscriptWriter, } from "./transcript.js";
10
13
  //# 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,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sCAAsC,EACtC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,cAAc;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,qCAAqC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,sCAAsC,EACtC,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,cAAc;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,2EAA2E;AAC3E,+DAA+D;AAC/D,gEAAgE;AAChE,iEAAiE;AACjE,oCAAoC;AACpC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bunny-agent/manager",
3
- "version": "0.9.50",
3
+ "version": "0.9.51-beta.2",
4
4
  "description": "BunnyAgent Manager - Manages sandbox and runner lifecycle, defines core interfaces",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -39,6 +39,7 @@
39
39
  "typescript": "^5.3.0",
40
40
  "vitest": "^1.6.1"
41
41
  },
42
+ "dependencies": {},
42
43
  "scripts": {
43
44
  "build": "tsc",
44
45
  "dev": "tsc --watch",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=local-sandbox.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-sandbox.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/local-sandbox.test.ts"],"names":[],"mappings":""}
@@ -1,274 +0,0 @@
1
- import * as fs from "node:fs/promises";
2
- import * as os from "node:os";
3
- import * as path from "node:path";
4
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
5
- import { LocalSandbox } from "../local-sandbox.js";
6
- describe("LocalSandbox", () => {
7
- let tempDir;
8
- beforeEach(async () => {
9
- // Create a temporary directory for testing
10
- tempDir = await fs.mkdtemp(path.join(os.tmpdir(), "local-sandbox-test-"));
11
- });
12
- afterEach(async () => {
13
- // Clean up temporary directory
14
- try {
15
- await fs.rm(tempDir, { recursive: true, force: true });
16
- }
17
- catch (error) {
18
- console.warn(`Failed to clean up temp dir: ${tempDir}`, error);
19
- }
20
- });
21
- describe("constructor", () => {
22
- it("should create an instance with default options", () => {
23
- const sandbox = new LocalSandbox();
24
- expect(sandbox).toBeInstanceOf(LocalSandbox);
25
- });
26
- it("should accept custom options", () => {
27
- const sandbox = new LocalSandbox({
28
- workdir: tempDir,
29
- defaultTimeout: 30000,
30
- });
31
- expect(sandbox).toBeInstanceOf(LocalSandbox);
32
- });
33
- it("should use process.cwd() as default workdir", () => {
34
- const sandbox = new LocalSandbox();
35
- expect(sandbox).toBeInstanceOf(LocalSandbox);
36
- });
37
- });
38
- describe("attach", () => {
39
- it("should use workdir as working directory", async () => {
40
- const sandbox = new LocalSandbox({
41
- workdir: tempDir,
42
- });
43
- const handle = await sandbox.attach();
44
- expect(handle).toBeDefined();
45
- expect(handle.getWorkdir()).toBe(tempDir);
46
- await handle.destroy();
47
- });
48
- it("should return a SandboxHandle", async () => {
49
- const sandbox = new LocalSandbox({ workdir: tempDir });
50
- const handle = await sandbox.attach();
51
- expect(typeof handle.exec).toBe("function");
52
- expect(typeof handle.upload).toBe("function");
53
- expect(typeof handle.destroy).toBe("function");
54
- await handle.destroy();
55
- });
56
- });
57
- describe("SandboxHandle.exec", () => {
58
- it("should execute a simple command", async () => {
59
- const sandbox = new LocalSandbox({ workdir: tempDir });
60
- const handle = await sandbox.attach();
61
- const chunks = [];
62
- for await (const chunk of handle.exec(["echo", "hello world"])) {
63
- chunks.push(new TextDecoder().decode(chunk));
64
- }
65
- const output = chunks.join("");
66
- expect(output.trim()).toBe("hello world");
67
- await handle.destroy();
68
- });
69
- it("should execute commands in specified working directory", async () => {
70
- const sandbox = new LocalSandbox({ workdir: tempDir });
71
- const handle = await sandbox.attach();
72
- // Create a subdirectory
73
- const subDir = "subdir";
74
- await handle.upload([], subDir); // Creates the directory
75
- // Create a test file in the subdirectory
76
- await handle.upload([{ path: "test.txt", content: "test content" }], subDir);
77
- // List files in the subdirectory
78
- const chunks = [];
79
- for await (const chunk of handle.exec(["ls"], { cwd: subDir })) {
80
- chunks.push(new TextDecoder().decode(chunk));
81
- }
82
- const output = chunks.join("");
83
- expect(output).toContain("test.txt");
84
- await handle.destroy();
85
- });
86
- it("should pass environment variables", async () => {
87
- const sandbox = new LocalSandbox({ workdir: tempDir });
88
- const handle = await sandbox.attach();
89
- const chunks = [];
90
- for await (const chunk of handle.exec(["sh", "-c", "echo $TEST_VAR"], {
91
- env: { TEST_VAR: "test-value" },
92
- })) {
93
- chunks.push(new TextDecoder().decode(chunk));
94
- }
95
- const output = chunks.join("");
96
- expect(output.trim()).toBe("test-value");
97
- await handle.destroy();
98
- });
99
- it("should throw error for non-existent command", async () => {
100
- const sandbox = new LocalSandbox({ workdir: tempDir });
101
- const handle = await sandbox.attach();
102
- await expect(async () => {
103
- const chunks = [];
104
- for await (const chunk of handle.exec([
105
- "non-existent-command-xyz123",
106
- ])) {
107
- chunks.push(chunk);
108
- }
109
- }).rejects.toThrow();
110
- await handle.destroy();
111
- });
112
- it("should throw error for empty command", async () => {
113
- const sandbox = new LocalSandbox({ workdir: tempDir });
114
- const handle = await sandbox.attach();
115
- await expect(async () => {
116
- const chunks = [];
117
- for await (const chunk of handle.exec([])) {
118
- chunks.push(chunk);
119
- }
120
- }).rejects.toThrow("Command cannot be empty");
121
- await handle.destroy();
122
- });
123
- it("should handle command timeout", async () => {
124
- const sandbox = new LocalSandbox({ workdir: tempDir });
125
- const handle = await sandbox.attach();
126
- await expect(async () => {
127
- const chunks = [];
128
- for await (const chunk of handle.exec(["sleep", "10"], {
129
- timeout: 100, // 100ms timeout
130
- })) {
131
- chunks.push(chunk);
132
- }
133
- }).rejects.toThrow(/timed out/i);
134
- await handle.destroy();
135
- }, 10000); // Test timeout of 10 seconds
136
- it("should support abort signal", async () => {
137
- const sandbox = new LocalSandbox({ workdir: tempDir });
138
- const handle = await sandbox.attach();
139
- const abortController = new AbortController();
140
- // Abort after 100ms
141
- setTimeout(() => abortController.abort(), 100);
142
- await expect(async () => {
143
- const chunks = [];
144
- for await (const chunk of handle.exec(["sleep", "10"], {
145
- signal: abortController.signal,
146
- })) {
147
- chunks.push(chunk);
148
- }
149
- }).rejects.toThrow();
150
- await handle.destroy();
151
- }, 10000);
152
- });
153
- describe("SandboxHandle.upload", () => {
154
- it("should upload a single file", async () => {
155
- const sandbox = new LocalSandbox({ workdir: tempDir });
156
- const handle = await sandbox.attach();
157
- await handle.upload([{ path: "test.txt", content: "Hello, World!" }], ".");
158
- // Verify the file was created
159
- const filePath = path.join(tempDir, "test.txt");
160
- const content = await fs.readFile(filePath, "utf-8");
161
- expect(content).toBe("Hello, World!");
162
- await handle.destroy();
163
- });
164
- it("should upload multiple files", async () => {
165
- const sandbox = new LocalSandbox({ workdir: tempDir });
166
- const handle = await sandbox.attach();
167
- await handle.upload([
168
- { path: "file1.txt", content: "Content 1" },
169
- { path: "file2.txt", content: "Content 2" },
170
- { path: "file3.txt", content: "Content 3" },
171
- ], "uploads");
172
- // Verify all files were created
173
- const uploadsDir = path.join(tempDir, "uploads");
174
- const files = await fs.readdir(uploadsDir);
175
- expect(files).toContain("file1.txt");
176
- expect(files).toContain("file2.txt");
177
- expect(files).toContain("file3.txt");
178
- await handle.destroy();
179
- });
180
- it("should upload binary content", async () => {
181
- const sandbox = new LocalSandbox({ workdir: tempDir });
182
- const handle = await sandbox.attach();
183
- const binaryData = new Uint8Array([0x48, 0x65, 0x6c, 0x6c, 0x6f]); // "Hello"
184
- await handle.upload([{ path: "binary.dat", content: binaryData }], ".");
185
- // Verify the binary file
186
- const filePath = path.join(tempDir, "binary.dat");
187
- const content = await fs.readFile(filePath);
188
- expect(content).toEqual(Buffer.from(binaryData));
189
- await handle.destroy();
190
- });
191
- it("should create nested directories", async () => {
192
- const sandbox = new LocalSandbox({ workdir: tempDir });
193
- const handle = await sandbox.attach();
194
- await handle.upload([{ path: "deep/nested/dir/file.txt", content: "Nested content" }], ".");
195
- // Verify nested file
196
- const filePath = path.join(tempDir, "deep/nested/dir/file.txt");
197
- const content = await fs.readFile(filePath, "utf-8");
198
- expect(content).toBe("Nested content");
199
- await handle.destroy();
200
- });
201
- it("should upload to custom target directory", async () => {
202
- const sandbox = new LocalSandbox({ workdir: tempDir });
203
- const handle = await sandbox.attach();
204
- await handle.upload([{ path: "file.txt", content: "Custom target" }], "custom/target");
205
- // Verify file in custom location
206
- const filePath = path.join(tempDir, "custom/target/file.txt");
207
- const content = await fs.readFile(filePath, "utf-8");
208
- expect(content).toBe("Custom target");
209
- await handle.destroy();
210
- });
211
- });
212
- describe("SandboxHandle.destroy", () => {
213
- it("should complete successfully", async () => {
214
- const sandbox = new LocalSandbox({ workdir: tempDir });
215
- const handle = await sandbox.attach();
216
- await expect(handle.destroy()).resolves.toBeUndefined();
217
- });
218
- it("should not delete the working directory by default", async () => {
219
- const sandbox = new LocalSandbox({ workdir: tempDir });
220
- const handle = await sandbox.attach();
221
- await handle.upload([{ path: "file.txt", content: "Test" }], ".");
222
- await handle.destroy();
223
- // Directory should still exist
224
- const stat = await fs.stat(tempDir);
225
- expect(stat.isDirectory()).toBe(true);
226
- // File should still exist
227
- const filePath = path.join(tempDir, "file.txt");
228
- const fileStat = await fs.stat(filePath);
229
- expect(fileStat.isFile()).toBe(true);
230
- });
231
- });
232
- describe("Integration tests", () => {
233
- it("should support a complete workflow", async () => {
234
- const sandbox = new LocalSandbox({ workdir: tempDir });
235
- const handle = await sandbox.attach();
236
- // Upload a Python script
237
- await handle.upload([
238
- {
239
- path: "script.py",
240
- content: 'print("Hello from Python!")\nprint("Line 2")',
241
- },
242
- ], ".");
243
- // Execute the script
244
- const chunks = [];
245
- for await (const chunk of handle.exec(["python3", "script.py"])) {
246
- chunks.push(new TextDecoder().decode(chunk));
247
- }
248
- const output = chunks.join("");
249
- expect(output).toContain("Hello from Python!");
250
- expect(output).toContain("Line 2");
251
- await handle.destroy();
252
- });
253
- it("should handle multiple sequential commands", async () => {
254
- const sandbox = new LocalSandbox({ workdir: tempDir });
255
- const handle = await sandbox.attach();
256
- // Create a file
257
- await handle.upload([{ path: "data.txt", content: "test data" }], ".");
258
- // Read the file with cat
259
- const chunks1 = [];
260
- for await (const chunk of handle.exec(["cat", "data.txt"])) {
261
- chunks1.push(new TextDecoder().decode(chunk));
262
- }
263
- expect(chunks1.join("")).toContain("test data");
264
- // List files
265
- const chunks2 = [];
266
- for await (const chunk of handle.exec(["ls", "-la"])) {
267
- chunks2.push(new TextDecoder().decode(chunk));
268
- }
269
- expect(chunks2.join("")).toContain("data.txt");
270
- await handle.destroy();
271
- });
272
- });
273
- });
274
- //# sourceMappingURL=local-sandbox.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-sandbox.test.js","sourceRoot":"","sources":["../../src/__tests__/local-sandbox.test.ts"],"names":[],"mappings":"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"}
@@ -1,83 +0,0 @@
1
- import type { SandboxAdapter, SandboxHandle } from "./types.js";
2
- /**
3
- * Options for creating a LocalSandbox instance
4
- */
5
- export interface LocalSandboxOptions {
6
- /** Working directory for all operations (defaults to process.cwd()) */
7
- workdir?: string;
8
- /** Path to the agent template directory to copy into the sandbox workdir */
9
- templatesPath?: string;
10
- /** Default timeout for commands in milliseconds (default: 300000 = 5 min) */
11
- defaultTimeout?: number;
12
- /** Environment variables to pass to all commands */
13
- env?: Record<string, string>;
14
- /** Runner command to execute in the sandbox (default: ["bunny-agent", "run"]) */
15
- runnerCommand?: string[];
16
- }
17
- /**
18
- * Local sandbox implementation that runs commands on the local machine.
19
- *
20
- * This adapter is useful for:
21
- * - Development and testing
22
- * - Running agents locally without cloud dependencies
23
- * - Quick prototyping
24
- *
25
- * Warning: This runs commands directly on your local machine with your user's
26
- * permissions. Use with caution and only with trusted code.
27
- *
28
- * @example
29
- * ```typescript
30
- * import { LocalSandbox, BunnyAgent } from "@bunny-agent/manager";
31
- *
32
- * // Create sandbox with template
33
- * const sandbox = new LocalSandbox({
34
- * workdir: "/tmp/my-sandbox",
35
- * templatesPath: "/path/to/agent-template",
36
- * });
37
- *
38
- * const agent = new BunnyAgent({
39
- * sandbox,
40
- * runner: {
41
- * model: "claude-sonnet-4-20250514",
42
- * },
43
- * });
44
- *
45
- * // Attach copies template files to workdir and returns handle
46
- * const handle = await sandbox.attach();
47
- * const result = await handle.runCommand("ls -la");
48
- * console.log(result.stdout);
49
- * ```
50
- */
51
- export declare class LocalSandbox implements SandboxAdapter {
52
- private readonly workdir;
53
- private readonly templatesPath;
54
- private readonly defaultTimeout;
55
- private readonly env;
56
- private readonly runnerCommand;
57
- /** Current handle for the sandbox instance */
58
- private currentHandle;
59
- constructor(options?: LocalSandboxOptions);
60
- getHandle(): SandboxHandle | null;
61
- /**
62
- * Get the environment variables configured for this sandbox.
63
- */
64
- getEnv(): Record<string, string>;
65
- /**
66
- * Get the working directory configured for this sandbox.
67
- */
68
- getWorkdir(): string;
69
- /**
70
- * Get the runner command to execute in the sandbox.
71
- */
72
- getRunnerCommand(): string[];
73
- attach(): Promise<SandboxHandle>;
74
- /**
75
- * Recursively copy a directory
76
- */
77
- private copyDir;
78
- /**
79
- * Reset the sandbox, clearing the current handle.
80
- */
81
- reset(): void;
82
- }
83
- //# sourceMappingURL=local-sandbox.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-sandbox.d.ts","sourceRoot":"","sources":["../src/local-sandbox.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAe,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,iFAAiF;IACjF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,YAAa,YAAW,cAAc;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAW;IAEzC,8CAA8C;IAC9C,OAAO,CAAC,aAAa,CAAmC;gBAE5C,OAAO,GAAE,mBAAwB;IAQ7C,SAAS,IAAI,aAAa,GAAG,IAAI;IAIjC;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAIhC;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAItB,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC;IA0DtC;;OAEG;YACW,OAAO;IAcrB;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -1,364 +0,0 @@
1
- import { spawn } from "node:child_process";
2
- import * as fs from "node:fs/promises";
3
- import * as path from "node:path";
4
- import { buildRunnerEnv } from "./env.js";
5
- /**
6
- * Local sandbox implementation that runs commands on the local machine.
7
- *
8
- * This adapter is useful for:
9
- * - Development and testing
10
- * - Running agents locally without cloud dependencies
11
- * - Quick prototyping
12
- *
13
- * Warning: This runs commands directly on your local machine with your user's
14
- * permissions. Use with caution and only with trusted code.
15
- *
16
- * @example
17
- * ```typescript
18
- * import { LocalSandbox, BunnyAgent } from "@bunny-agent/manager";
19
- *
20
- * // Create sandbox with template
21
- * const sandbox = new LocalSandbox({
22
- * workdir: "/tmp/my-sandbox",
23
- * templatesPath: "/path/to/agent-template",
24
- * });
25
- *
26
- * const agent = new BunnyAgent({
27
- * sandbox,
28
- * runner: {
29
- * model: "claude-sonnet-4-20250514",
30
- * },
31
- * });
32
- *
33
- * // Attach copies template files to workdir and returns handle
34
- * const handle = await sandbox.attach();
35
- * const result = await handle.runCommand("ls -la");
36
- * console.log(result.stdout);
37
- * ```
38
- */
39
- export class LocalSandbox {
40
- workdir;
41
- templatesPath;
42
- defaultTimeout;
43
- env;
44
- runnerCommand;
45
- /** Current handle for the sandbox instance */
46
- currentHandle = null;
47
- constructor(options = {}) {
48
- this.workdir = options.workdir ?? process.cwd();
49
- this.templatesPath = options.templatesPath;
50
- this.defaultTimeout = options.defaultTimeout ?? 300000; // 5 min for agent runs
51
- this.env = options.env ?? {};
52
- this.runnerCommand = options.runnerCommand ?? ["bunny-agent", "run"];
53
- }
54
- getHandle() {
55
- return this.currentHandle;
56
- }
57
- /**
58
- * Get the environment variables configured for this sandbox.
59
- */
60
- getEnv() {
61
- return { ...this.env };
62
- }
63
- /**
64
- * Get the working directory configured for this sandbox.
65
- */
66
- getWorkdir() {
67
- return this.currentHandle?.getWorkdir() ?? this.workdir;
68
- }
69
- /**
70
- * Get the runner command to execute in the sandbox.
71
- */
72
- getRunnerCommand() {
73
- return [...this.runnerCommand];
74
- }
75
- async attach() {
76
- // Return existing handle if already attached
77
- if (this.currentHandle) {
78
- return this.currentHandle;
79
- }
80
- // Use workdir as the working directory
81
- const workdir = this.workdir;
82
- // Clear template files before copying (only .claude dir and CLAUDE.md)
83
- if (this.templatesPath) {
84
- const claudeDir = path.join(workdir, ".claude");
85
- const claudeMd = path.join(workdir, "CLAUDE.md");
86
- await fs.rm(claudeDir, { recursive: true, force: true }).catch(() => { });
87
- await fs.rm(claudeMd, { force: true }).catch(() => { });
88
- console.log(`[LocalSandbox] Cleared template files: .claude, CLAUDE.md`);
89
- }
90
- // Create the directory if it doesn't exist
91
- await fs.mkdir(workdir, { recursive: true });
92
- console.log(`[LocalSandbox] Using directory: ${workdir}`);
93
- // Copy all files from templatesPath to workdir if specified
94
- if (this.templatesPath) {
95
- try {
96
- const stat = await fs.stat(this.templatesPath);
97
- if (stat.isDirectory()) {
98
- await this.copyDir(this.templatesPath, workdir);
99
- console.log(`[LocalSandbox] Copied template directory: ${this.templatesPath} -> ${workdir}`);
100
- }
101
- else {
102
- console.warn(`[LocalSandbox] templatesPath is not a directory: ${this.templatesPath}`);
103
- }
104
- }
105
- catch (err) {
106
- console.warn(`[LocalSandbox] Failed to copy template directory: ${this.templatesPath}`, err);
107
- }
108
- }
109
- const handle = new LocalSandboxHandle(workdir, this.defaultTimeout, this.env);
110
- // Store the handle
111
- this.currentHandle = handle;
112
- return handle;
113
- }
114
- /**
115
- * Recursively copy a directory
116
- */
117
- async copyDir(src, dest) {
118
- await fs.mkdir(dest, { recursive: true });
119
- const entries = await fs.readdir(src, { withFileTypes: true });
120
- for (const entry of entries) {
121
- const srcPath = path.join(src, entry.name);
122
- const destPath = path.join(dest, entry.name);
123
- if (entry.isDirectory()) {
124
- await this.copyDir(srcPath, destPath);
125
- }
126
- else {
127
- await fs.copyFile(srcPath, destPath);
128
- }
129
- }
130
- }
131
- /**
132
- * Reset the sandbox, clearing the current handle.
133
- */
134
- reset() {
135
- this.currentHandle = null;
136
- }
137
- }
138
- /**
139
- * Handle for a local sandbox instance
140
- */
141
- class LocalSandboxHandle {
142
- workDir;
143
- defaultTimeout;
144
- env;
145
- _sandboxId;
146
- constructor(workDir, defaultTimeout, env) {
147
- this.workDir = workDir;
148
- this.defaultTimeout = defaultTimeout;
149
- this.env = env;
150
- this._sandboxId = `local-${crypto.randomUUID()}`;
151
- }
152
- /**
153
- * Get the sandbox instance ID.
154
- */
155
- getSandboxId() {
156
- return this._sandboxId;
157
- }
158
- /**
159
- * Local sandbox has no volumes.
160
- */
161
- getVolumes() {
162
- return null;
163
- }
164
- /**
165
- * Get the working directory for this sandbox handle
166
- */
167
- getWorkdir() {
168
- return this.workDir;
169
- }
170
- async *exec(command, opts = {}) {
171
- if (command.length === 0) {
172
- throw new Error("Command cannot be empty");
173
- }
174
- const cwd = opts.cwd ? path.resolve(this.workDir, opts.cwd) : this.workDir;
175
- const timeout = opts.timeout ?? this.defaultTimeout;
176
- const baseInherit = { ...process.env, ...this.env, ...opts.env };
177
- const env = buildRunnerEnv({
178
- inherit: baseInherit,
179
- });
180
- console.log(`[LocalSandbox] Executing command: ${command.join(" ")}`);
181
- console.log(`[LocalSandbox] Working directory: ${cwd}`);
182
- console.log(`[LocalSandbox] ENV AWS_BEARER_TOKEN_BEDROCK: ${env.AWS_BEARER_TOKEN_BEDROCK ? "SET" : "NOT SET"}`);
183
- console.log(`[LocalSandbox] ENV CLAUDE_CODE_USE_BEDROCK: ${env.CLAUDE_CODE_USE_BEDROCK || "NOT SET"}`);
184
- console.log(`[LocalSandbox] ENV ANTHROPIC_API_KEY: ${env.ANTHROPIC_API_KEY ? "SET" : "NOT SET"}`);
185
- // Ensure the working directory exists
186
- await fs.mkdir(cwd, { recursive: true });
187
- const [cmd, ...args] = command;
188
- const child = spawn(cmd, args, {
189
- cwd,
190
- env,
191
- shell: false,
192
- });
193
- let timeoutId;
194
- let isTimedOut = false;
195
- let isAborted = false;
196
- // Set up timeout if specified
197
- if (timeout > 0) {
198
- timeoutId = setTimeout(() => {
199
- isTimedOut = true;
200
- child.kill("SIGTERM");
201
- // Force kill after 5 seconds if still running
202
- setTimeout(() => {
203
- if (!child.killed) {
204
- child.kill("SIGKILL");
205
- }
206
- }, 5000);
207
- }, timeout);
208
- }
209
- // Set up abort signal if provided
210
- const abortHandler = () => {
211
- isAborted = true;
212
- child.kill("SIGTERM");
213
- setTimeout(() => {
214
- if (!child.killed) {
215
- child.kill("SIGKILL");
216
- }
217
- }, 5000);
218
- };
219
- if (opts.signal) {
220
- opts.signal.addEventListener("abort", abortHandler);
221
- }
222
- // Handle spawn errors (e.g., command not found)
223
- const spawnError = await new Promise((resolve) => {
224
- child.once("error", resolve);
225
- child.once("spawn", () => resolve(null));
226
- });
227
- if (spawnError) {
228
- if (timeoutId) {
229
- clearTimeout(timeoutId);
230
- }
231
- if (opts.signal) {
232
- opts.signal.removeEventListener("abort", abortHandler);
233
- }
234
- throw spawnError;
235
- }
236
- // Buffer stderr for error reporting; also mirror to the parent process so
237
- // subprocess diagnostics (e.g. [bunny-agent:pi] skill load) are visible on success.
238
- const stderrChunks = [];
239
- child.stderr.on("data", (chunk) => {
240
- stderrChunks.push(chunk);
241
- process.stderr.write(chunk);
242
- });
243
- try {
244
- // Yield stdout chunks
245
- for await (const chunk of child.stdout) {
246
- yield chunk;
247
- }
248
- // Wait for the process to complete
249
- const exitCode = await new Promise((resolve, reject) => {
250
- child.on("error", reject);
251
- child.on("close", (code) => resolve(code ?? 0));
252
- });
253
- if (timeoutId) {
254
- clearTimeout(timeoutId);
255
- }
256
- if (isAborted) {
257
- throw new Error("Command was aborted");
258
- }
259
- if (isTimedOut) {
260
- throw new Error(`Command timed out after ${timeout}ms`);
261
- }
262
- if (exitCode !== 0) {
263
- const stderr = stderrChunks.length
264
- ? Buffer.concat(stderrChunks).toString("utf-8").trim()
265
- : "";
266
- if (stderr) {
267
- console.error(`[LocalSandbox] Command failed (exit ${exitCode}) stderr:\n${stderr}`);
268
- }
269
- else {
270
- console.error(`[LocalSandbox] Command failed with exit ${exitCode} (no stderr). Run manually to see output: ${command.join(" ")}`);
271
- }
272
- // User-facing message: show the actual error from stderr (where it failed)
273
- const lines = stderr
274
- .split(/\n/)
275
- .map((l) => l.trim())
276
- .filter(Boolean);
277
- const lastLine = lines.length > 0 ? lines[lines.length - 1] : "";
278
- const hasErrorLike = (s) => /error|Error|Fatal|TypeError|SyntaxError|Exception/i.test(s);
279
- const errorLine = lines.filter(hasErrorLike).pop() ?? lastLine;
280
- const userMessage = errorLine
281
- ? errorLine.replace(/\s+/g, " ").slice(0, 500)
282
- : stderr
283
- ? `Command failed (exit ${exitCode}). See server logs for stderr.`
284
- : `Command failed with exit ${exitCode}.`;
285
- throw new Error(userMessage);
286
- }
287
- }
288
- catch (error) {
289
- if (timeoutId) {
290
- clearTimeout(timeoutId);
291
- }
292
- throw error;
293
- }
294
- }
295
- async upload(files, targetDir) {
296
- const resolvedTargetDir = path.resolve(this.workDir, targetDir);
297
- console.log(`[LocalSandbox] Uploading ${files.length} file(s) to ${resolvedTargetDir}`);
298
- // Create target directory
299
- await fs.mkdir(resolvedTargetDir, { recursive: true });
300
- // Write each file
301
- for (const file of files) {
302
- const filePath = path.join(resolvedTargetDir, file.path);
303
- const fileDir = path.dirname(filePath);
304
- // Ensure the file's directory exists
305
- await fs.mkdir(fileDir, { recursive: true });
306
- // Write the file
307
- const content = typeof file.content === "string"
308
- ? Buffer.from(file.content, "utf-8")
309
- : file.content;
310
- await fs.writeFile(filePath, content);
311
- console.log(`[LocalSandbox] Wrote file: ${filePath}`);
312
- }
313
- }
314
- async readFile(filePath) {
315
- const resolvedPath = path.resolve(this.workDir, filePath);
316
- const content = await fs.readFile(resolvedPath, "utf-8");
317
- return content;
318
- }
319
- /**
320
- * Execute a command and wait for completion, returning stdout, stderr, and exit code
321
- */
322
- async runCommand(command) {
323
- console.log(`[LocalSandbox] Running command: ${command}`);
324
- return new Promise((resolve, reject) => {
325
- // Use sh -c to execute the command
326
- const child = spawn("sh", ["-c", command], {
327
- cwd: this.workDir,
328
- env: { ...process.env, ...this.env }, // Use instance env
329
- stdio: "pipe",
330
- });
331
- let stdout = "";
332
- let stderr = "";
333
- child.stdout?.on("data", (data) => {
334
- stdout += data.toString();
335
- });
336
- child.stderr?.on("data", (data) => {
337
- stderr += data.toString();
338
- });
339
- child.on("close", (code) => {
340
- resolve({
341
- stdout,
342
- stderr,
343
- exitCode: code ?? 0,
344
- });
345
- });
346
- child.on("error", reject);
347
- // Timeout handling
348
- const timeout = this.defaultTimeout;
349
- const timeoutId = setTimeout(() => {
350
- child.kill();
351
- reject(new Error(`Command timed out after ${timeout}ms`));
352
- }, timeout);
353
- child.on("close", () => {
354
- clearTimeout(timeoutId);
355
- });
356
- });
357
- }
358
- async destroy() {
359
- console.log(`[LocalSandbox] Cleanup complete for: ${this.workDir}`);
360
- // Note: We don't delete the directory by default to preserve work
361
- // Users can manually delete it if needed
362
- }
363
- }
364
- //# sourceMappingURL=local-sandbox.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-sandbox.js","sourceRoot":"","sources":["../src/local-sandbox.ts"],"names":[],"mappings":"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"}