@sapiom/sandbox 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/sandbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /** Memory tier for sandbox allocation. */
2
+ export type SandboxTier = "xs" | "s" | "m" | "l" | "xl";
3
+ /** Port specification for exposed ports. */
4
+ export interface PortSpec {
5
+ port: number;
6
+ [key: string]: unknown;
7
+ }
8
+ /**
9
+ * Configuration for creating a sandbox instance.
10
+ */
11
+ export interface SandboxCreateOptions {
12
+ /** Sapiom API key. Falls back to SAPIOM_API_KEY env var. */
13
+ apiKey?: string;
14
+ /** Override the sandbox service base URL. */
15
+ baseUrl?: string;
16
+ /**
17
+ * Pre-configured fetch function. When provided, `apiKey` is ignored
18
+ * and this function is used directly for all HTTP calls.
19
+ */
20
+ fetch?: typeof globalThis.fetch;
21
+ /** Sandbox name. Lowercase alphanumeric and hyphens, 2-63 characters. */
22
+ name: string;
23
+ /** Memory tier. @default 's' */
24
+ tier?: SandboxTier;
25
+ /** Time-to-live (e.g. '1h', '24h', '7d'). */
26
+ ttl?: string;
27
+ /** Environment variables to set in the sandbox. */
28
+ envs?: Record<string, string>;
29
+ /**
30
+ * Single port number to expose.
31
+ * Cannot be used together with `ports`.
32
+ */
33
+ port?: number;
34
+ /**
35
+ * Array of port specs to expose.
36
+ * Cannot be used together with `port`.
37
+ */
38
+ ports?: PortSpec[];
39
+ /** Pre-built Docker image for instant creation. */
40
+ image?: string;
41
+ }
42
+ /** Raw response from POST /v1/sandboxes. */
43
+ export interface SandboxCreateResponse {
44
+ name: string;
45
+ source: string;
46
+ status: string;
47
+ tier: string;
48
+ url: string;
49
+ image: string;
50
+ uploadUrl: string;
51
+ workspaceRoot: string;
52
+ expiresAt: string;
53
+ createdAt: string;
54
+ updatedAt: string;
55
+ [key: string]: unknown;
56
+ }
57
+ /**
58
+ * Options for executing a command in the sandbox.
59
+ */
60
+ export interface ExecOptions {
61
+ /** Working directory for the command, resolved relative to workspaceRoot. */
62
+ cwd?: string;
63
+ /** Environment variables for the process. */
64
+ env?: Record<string, string>;
65
+ /**
66
+ * Wait for the process to complete before returning.
67
+ * When false, returns immediately after process creation (fire-and-forget).
68
+ * @default true
69
+ */
70
+ waitForCompletion?: boolean;
71
+ /** Polling interval in ms when waiting for completion. @default 1000 */
72
+ pollInterval?: number;
73
+ /** Timeout in ms when waiting for completion. @default 60000 */
74
+ timeout?: number;
75
+ /** AbortSignal to cancel the operation. */
76
+ signal?: AbortSignal;
77
+ }
78
+ /**
79
+ * Options for streaming command execution.
80
+ */
81
+ export interface ExecStreamOptions {
82
+ /** Working directory for the command, resolved relative to workspaceRoot. */
83
+ cwd?: string;
84
+ /** Environment variables for the process. */
85
+ env?: Record<string, string>;
86
+ /** AbortSignal to cancel the operation. */
87
+ signal?: AbortSignal;
88
+ }
89
+ /**
90
+ * A single line of process output from a streaming exec.
91
+ */
92
+ export interface OutputLine {
93
+ /** Which output stream this line came from. */
94
+ stream: "stdout" | "stderr";
95
+ /** The line content (without the stream prefix). */
96
+ data: string;
97
+ }
98
+ /**
99
+ * Result of a process execution (non-streaming).
100
+ */
101
+ export interface ExecResult {
102
+ /** Process ID in the sandbox. */
103
+ pid: string;
104
+ /**
105
+ * Exit code of the process.
106
+ * -1 when `waitForCompletion` is false and the process hasn't finished.
107
+ */
108
+ exitCode: number;
109
+ /** Standard output. */
110
+ stdout: string;
111
+ /** Standard error. */
112
+ stderr: string;
113
+ }
114
+ /**
115
+ * Result of a streaming process execution.
116
+ * Iterate `output` to receive lines in real time.
117
+ * `exitCode` is populated after the output iterable is fully consumed.
118
+ */
119
+ export interface StreamingExecResult {
120
+ /** Process ID in the sandbox. */
121
+ readonly pid: string;
122
+ /**
123
+ * Exit code of the process.
124
+ * -1 until the output stream has been fully consumed.
125
+ */
126
+ readonly exitCode: number;
127
+ /** Async iterable of output lines, yielded in real time. */
128
+ readonly output: AsyncIterable<OutputLine>;
129
+ }
130
+ /** Raw response from POST /v1/sandboxes/:name/process. */
131
+ export interface ProcessCreateResponse {
132
+ pid: string;
133
+ status: string;
134
+ stdout?: string;
135
+ stderr?: string;
136
+ exitCode?: number;
137
+ [key: string]: unknown;
138
+ }
139
+ /** Raw response from GET /v1/sandboxes/:name/process/:pid. */
140
+ export interface ProcessStatusResponse {
141
+ pid: string;
142
+ status: string;
143
+ exitCode?: number;
144
+ stdout?: string;
145
+ stderr?: string;
146
+ [key: string]: unknown;
147
+ }
148
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { SapiomSandbox } from "./sandbox.js";
2
+ export type { SandboxCreateOptions, SandboxCreateResponse, SandboxTier, PortSpec, ExecOptions, ExecStreamOptions, ExecResult, StreamingExecResult, OutputLine, ProcessCreateResponse, ProcessStatusResponse, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { SapiomSandbox } from "./sandbox.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1 @@
1
+ {"type": "module"}
@@ -0,0 +1,80 @@
1
+ import type { SandboxCreateOptions, ExecOptions, ExecResult, ExecStreamOptions, StreamingExecResult, ProcessStatusResponse } from "./types.js";
2
+ export declare class SapiomSandbox {
3
+ /** Name / identifier of the sandbox. */
4
+ readonly name: string;
5
+ /** Absolute workspace root path inside the sandbox. */
6
+ readonly workspaceRoot: string;
7
+ private readonly _fetch;
8
+ private readonly _baseUrl;
9
+ private constructor();
10
+ /**
11
+ * Create a new sandbox and return a handle for interacting with it.
12
+ */
13
+ static create(opts: SandboxCreateOptions): Promise<SapiomSandbox>;
14
+ /**
15
+ * Write a file inside the sandbox.
16
+ *
17
+ * @param path - File path relative to workspaceRoot.
18
+ * @param content - File content as a string.
19
+ */
20
+ writeFile(path: string, content: string): Promise<void>;
21
+ /**
22
+ * Read a file from the sandbox.
23
+ *
24
+ * @param path - File path relative to workspaceRoot.
25
+ * @returns The file content as a string.
26
+ */
27
+ readFile(path: string): Promise<string>;
28
+ /**
29
+ * Execute a command in the sandbox.
30
+ *
31
+ * By default waits for the process to finish (polls process status).
32
+ * Set `opts.waitForCompletion = false` for fire-and-forget execution.
33
+ * Use {@link execStream} for real-time streaming output.
34
+ *
35
+ * @param command - The shell command to run.
36
+ * @param opts - Execution options.
37
+ */
38
+ exec(command: string, opts?: ExecOptions): Promise<ExecResult>;
39
+ /**
40
+ * Execute a command and stream its output in real time.
41
+ *
42
+ * Returns a {@link StreamingExecResult} whose `output` property is an
43
+ * async iterable of {@link OutputLine} objects. `exitCode` is populated
44
+ * after the iterable is fully consumed.
45
+ *
46
+ * @param command - The shell command to run.
47
+ * @param opts - Stream execution options.
48
+ */
49
+ execStream(command: string, opts?: ExecStreamOptions): Promise<StreamingExecResult>;
50
+ /**
51
+ * Get the current status of a process by PID.
52
+ *
53
+ * Useful for checking on processes started with
54
+ * `exec(cmd, { waitForCompletion: false })`.
55
+ *
56
+ * @param pid - The process ID returned from exec.
57
+ */
58
+ getProcess(pid: string): Promise<ProcessStatusResponse>;
59
+ /**
60
+ * Wait for a process to complete by polling its status.
61
+ *
62
+ * Useful for processes started with
63
+ * `exec(cmd, { waitForCompletion: false })`.
64
+ *
65
+ * @param pid - The process ID returned from exec.
66
+ * @param opts - Polling options.
67
+ */
68
+ waitForProcess(pid: string, opts?: {
69
+ pollInterval?: number;
70
+ timeout?: number;
71
+ signal?: AbortSignal;
72
+ }): Promise<ExecResult>;
73
+ /**
74
+ * Destroy the sandbox and release all resources.
75
+ */
76
+ destroy(): Promise<void>;
77
+ private _createProcess;
78
+ private _pollProcess;
79
+ }
80
+ //# sourceMappingURL=sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.d.ts","sourceRoot":"","sources":["../../src/sandbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EAEpB,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,mBAAmB,EAGnB,qBAAqB,EACtB,MAAM,YAAY,CAAC;AA0DpB,qBAAa,aAAa;IACxB,wCAAwC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,uDAAuD;IACvD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,OAAO;IAYP;;OAEG;WACU,MAAM,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,CAAC;IAiCvE;;;;;OAKG;IACG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7D;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB7C;;;;;;;;;OASG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA0BpE;;;;;;;;;OASG;IACG,UAAU,CACd,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC,mBAAmB,CAAC;IA4H/B;;;;;;;OAOG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAe7D;;;;;;;;OAQG;IACG,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GACvE,OAAO,CAAC,UAAU,CAAC;IAItB;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBhB,cAAc;YA8Bd,YAAY;CAqC3B"}
@@ -0,0 +1,341 @@
1
+ import { createFetch } from "@sapiom/fetch";
2
+ const DEFAULT_BASE_URL = "https://blaxel.services.sapiom.ai";
3
+ const DEFAULT_POLL_INTERVAL = 1000;
4
+ const DEFAULT_EXEC_TIMEOUT = 60000;
5
+ function assertRelativePath(path) {
6
+ const segments = path.split("/");
7
+ for (const seg of segments) {
8
+ if (seg === "..") {
9
+ throw new Error(`Path must not contain '..' segments: ${path}`);
10
+ }
11
+ }
12
+ }
13
+ function resolvePath(workspaceRoot, relativePath) {
14
+ assertRelativePath(relativePath);
15
+ const base = workspaceRoot.endsWith("/")
16
+ ? workspaceRoot.slice(0, -1)
17
+ : workspaceRoot;
18
+ const rel = relativePath.startsWith("/")
19
+ ? relativePath.slice(1)
20
+ : relativePath;
21
+ return `${base}/${rel}`;
22
+ }
23
+ function encodePathSegments(path) {
24
+ return path
25
+ .split("/")
26
+ .map((seg) => encodeURIComponent(seg))
27
+ .join("/");
28
+ }
29
+ function fileUrl(baseUrl, sandboxName, absolutePath) {
30
+ // Strip leading slash so the URL path is well-formed, then encode each segment
31
+ const cleanPath = absolutePath.startsWith("/")
32
+ ? absolutePath.slice(1)
33
+ : absolutePath;
34
+ return `${baseUrl}/v1/sandboxes/${encodeURIComponent(sandboxName)}/filesystem/${encodePathSegments(cleanPath)}`;
35
+ }
36
+ function parseOutputLine(line) {
37
+ if (line.startsWith("stdout:")) {
38
+ return { stream: "stdout", data: line.slice(7) };
39
+ }
40
+ if (line.startsWith("stderr:")) {
41
+ return { stream: "stderr", data: line.slice(7) };
42
+ }
43
+ // Unrecognized framing — treat as stdout rather than dropping
44
+ return { stream: "stdout", data: line };
45
+ }
46
+ export class SapiomSandbox {
47
+ constructor(name, workspaceRoot, fetchFn, baseUrl) {
48
+ this.name = name;
49
+ this.workspaceRoot = workspaceRoot;
50
+ this._fetch = fetchFn;
51
+ this._baseUrl = baseUrl;
52
+ }
53
+ /**
54
+ * Create a new sandbox and return a handle for interacting with it.
55
+ */
56
+ static async create(opts) {
57
+ const baseUrl = opts.baseUrl ?? DEFAULT_BASE_URL;
58
+ const fetchFn = opts.fetch ?? createFetch({ apiKey: opts.apiKey });
59
+ if (opts.port !== undefined && opts.ports !== undefined) {
60
+ throw new Error("Cannot specify both 'port' and 'ports'");
61
+ }
62
+ const body = { name: opts.name };
63
+ if (opts.tier !== undefined)
64
+ body.tier = opts.tier;
65
+ if (opts.ttl !== undefined)
66
+ body.ttl = opts.ttl;
67
+ if (opts.envs !== undefined)
68
+ body.envs = opts.envs;
69
+ if (opts.port !== undefined)
70
+ body.port = opts.port;
71
+ if (opts.ports !== undefined)
72
+ body.ports = opts.ports;
73
+ if (opts.image !== undefined)
74
+ body.image = opts.image;
75
+ const response = await fetchFn(`${baseUrl}/v1/sandboxes`, {
76
+ method: "POST",
77
+ headers: { "Content-Type": "application/json" },
78
+ body: JSON.stringify(body),
79
+ });
80
+ if (!response.ok) {
81
+ const text = await response.text();
82
+ throw new Error(`Failed to create sandbox: ${response.status} ${text}`);
83
+ }
84
+ const data = (await response.json());
85
+ return new SapiomSandbox(data.name, data.workspaceRoot, fetchFn, baseUrl);
86
+ }
87
+ /**
88
+ * Write a file inside the sandbox.
89
+ *
90
+ * @param path - File path relative to workspaceRoot.
91
+ * @param content - File content as a string.
92
+ */
93
+ async writeFile(path, content) {
94
+ assertRelativePath(path);
95
+ const url = fileUrl(this._baseUrl, this.name, path);
96
+ const response = await this._fetch(url, {
97
+ method: "PUT",
98
+ headers: { "Content-Type": "application/json" },
99
+ body: JSON.stringify({ content }),
100
+ });
101
+ if (!response.ok) {
102
+ const text = await response.text();
103
+ throw new Error(`Failed to write file '${path}': ${response.status} ${text}`);
104
+ }
105
+ }
106
+ /**
107
+ * Read a file from the sandbox.
108
+ *
109
+ * @param path - File path relative to workspaceRoot.
110
+ * @returns The file content as a string.
111
+ */
112
+ async readFile(path) {
113
+ assertRelativePath(path);
114
+ const url = fileUrl(this._baseUrl, this.name, path);
115
+ const response = await this._fetch(url);
116
+ if (!response.ok) {
117
+ const text = await response.text();
118
+ throw new Error(`Failed to read file '${path}': ${response.status} ${text}`);
119
+ }
120
+ const data = (await response.json());
121
+ return data.content;
122
+ }
123
+ /**
124
+ * Execute a command in the sandbox.
125
+ *
126
+ * By default waits for the process to finish (polls process status).
127
+ * Set `opts.waitForCompletion = false` for fire-and-forget execution.
128
+ * Use {@link execStream} for real-time streaming output.
129
+ *
130
+ * @param command - The shell command to run.
131
+ * @param opts - Execution options.
132
+ */
133
+ async exec(command, opts) {
134
+ const proc = await this._createProcess(command, opts);
135
+ // If the process already completed synchronously, return immediately
136
+ if (proc.status === "completed") {
137
+ return {
138
+ pid: proc.pid,
139
+ exitCode: proc.exitCode ?? 0,
140
+ stdout: proc.stdout ?? "",
141
+ stderr: proc.stderr ?? "",
142
+ };
143
+ }
144
+ const waitForCompletion = opts?.waitForCompletion ?? true;
145
+ if (!waitForCompletion) {
146
+ return {
147
+ pid: proc.pid,
148
+ exitCode: -1,
149
+ stdout: proc.stdout ?? "",
150
+ stderr: proc.stderr ?? "",
151
+ };
152
+ }
153
+ return this._pollProcess(proc.pid, opts);
154
+ }
155
+ /**
156
+ * Execute a command and stream its output in real time.
157
+ *
158
+ * Returns a {@link StreamingExecResult} whose `output` property is an
159
+ * async iterable of {@link OutputLine} objects. `exitCode` is populated
160
+ * after the iterable is fully consumed.
161
+ *
162
+ * @param command - The shell command to run.
163
+ * @param opts - Stream execution options.
164
+ */
165
+ async execStream(command, opts) {
166
+ const proc = await this._createProcess(command, opts);
167
+ // If the process already completed synchronously, return without
168
+ // opening the log stream — yield the stdout/stderr from the create
169
+ // response directly.
170
+ if (proc.status === "completed") {
171
+ const code = proc.exitCode ?? 0;
172
+ const stdout = proc.stdout ?? "";
173
+ const stderr = proc.stderr ?? "";
174
+ const output = (async function* () {
175
+ if (stdout)
176
+ yield { stream: "stdout", data: stdout };
177
+ if (stderr)
178
+ yield { stream: "stderr", data: stderr };
179
+ })();
180
+ return {
181
+ pid: proc.pid,
182
+ get exitCode() {
183
+ return code;
184
+ },
185
+ output,
186
+ };
187
+ }
188
+ let finalExitCode = -1;
189
+ // Capture references for the generator closure
190
+ const fetchFn = this._fetch;
191
+ const baseUrl = this._baseUrl;
192
+ const sandboxName = this.name;
193
+ const signal = opts?.signal;
194
+ async function* streamOutput() {
195
+ const response = await fetchFn(`${baseUrl}/v1/sandboxes/${encodeURIComponent(sandboxName)}/process/${proc.pid}/logs/stream`, { signal });
196
+ if (!response.ok) {
197
+ const text = await response.text();
198
+ throw new Error(`Failed to stream process ${proc.pid}: ${response.status} ${text}`);
199
+ }
200
+ if (!response.body) {
201
+ throw new Error(`No response body for process ${proc.pid} log stream`);
202
+ }
203
+ const reader = response.body.getReader();
204
+ const decoder = new TextDecoder();
205
+ let buffer = "";
206
+ try {
207
+ for (;;) {
208
+ const { done, value } = await reader.read();
209
+ if (done)
210
+ break;
211
+ buffer += decoder.decode(value, { stream: true });
212
+ const lines = buffer.split("\n");
213
+ buffer = lines.pop();
214
+ for (const line of lines) {
215
+ if (!line)
216
+ continue;
217
+ yield parseOutputLine(line);
218
+ }
219
+ }
220
+ // Flush remaining multibyte bytes from the decoder
221
+ buffer += decoder.decode();
222
+ if (buffer) {
223
+ yield parseOutputLine(buffer);
224
+ }
225
+ }
226
+ finally {
227
+ reader.releaseLock();
228
+ }
229
+ // Fetch final process status for the exit code
230
+ const statusResponse = await fetchFn(`${baseUrl}/v1/sandboxes/${encodeURIComponent(sandboxName)}/process/${proc.pid}`, { signal });
231
+ if (!statusResponse.ok) {
232
+ const text = await statusResponse.text();
233
+ throw new Error(`Failed to get final status for process ${proc.pid}: ${statusResponse.status} ${text}`);
234
+ }
235
+ let status = (await statusResponse.json());
236
+ // If the process hasn't completed yet (e.g. stream disconnected
237
+ // before the process finished), poll until it does.
238
+ while (status.status !== "completed") {
239
+ await new Promise((resolve) => setTimeout(resolve, 1000));
240
+ const retry = await fetchFn(`${baseUrl}/v1/sandboxes/${encodeURIComponent(sandboxName)}/process/${proc.pid}`, { signal });
241
+ if (!retry.ok) {
242
+ const text = await retry.text();
243
+ throw new Error(`Failed to get final status for process ${proc.pid}: ${retry.status} ${text}`);
244
+ }
245
+ status = (await retry.json());
246
+ }
247
+ finalExitCode = status.exitCode ?? 0;
248
+ }
249
+ return {
250
+ pid: proc.pid,
251
+ get exitCode() {
252
+ return finalExitCode;
253
+ },
254
+ output: streamOutput(),
255
+ };
256
+ }
257
+ /**
258
+ * Get the current status of a process by PID.
259
+ *
260
+ * Useful for checking on processes started with
261
+ * `exec(cmd, { waitForCompletion: false })`.
262
+ *
263
+ * @param pid - The process ID returned from exec.
264
+ */
265
+ async getProcess(pid) {
266
+ const response = await this._fetch(`${this._baseUrl}/v1/sandboxes/${encodeURIComponent(this.name)}/process/${pid}`);
267
+ if (!response.ok) {
268
+ const text = await response.text();
269
+ throw new Error(`Failed to get process ${pid}: ${response.status} ${text}`);
270
+ }
271
+ return (await response.json());
272
+ }
273
+ /**
274
+ * Wait for a process to complete by polling its status.
275
+ *
276
+ * Useful for processes started with
277
+ * `exec(cmd, { waitForCompletion: false })`.
278
+ *
279
+ * @param pid - The process ID returned from exec.
280
+ * @param opts - Polling options.
281
+ */
282
+ async waitForProcess(pid, opts) {
283
+ return this._pollProcess(pid, opts);
284
+ }
285
+ /**
286
+ * Destroy the sandbox and release all resources.
287
+ */
288
+ async destroy() {
289
+ const response = await this._fetch(`${this._baseUrl}/v1/sandboxes/${encodeURIComponent(this.name)}`, { method: "DELETE" });
290
+ if (!response.ok) {
291
+ const text = await response.text();
292
+ throw new Error(`Failed to destroy sandbox: ${response.status} ${text}`);
293
+ }
294
+ }
295
+ // ---------------------------------------------------------------------------
296
+ // Private helpers
297
+ // ---------------------------------------------------------------------------
298
+ async _createProcess(command, opts) {
299
+ const body = { command };
300
+ if (opts?.cwd !== undefined) {
301
+ body.cwd = resolvePath(this.workspaceRoot, opts.cwd);
302
+ }
303
+ if (opts?.env !== undefined)
304
+ body.env = opts.env;
305
+ const response = await this._fetch(`${this._baseUrl}/v1/sandboxes/${encodeURIComponent(this.name)}/process`, {
306
+ method: "POST",
307
+ headers: { "Content-Type": "application/json" },
308
+ body: JSON.stringify(body),
309
+ signal: opts?.signal,
310
+ });
311
+ if (!response.ok) {
312
+ const text = await response.text();
313
+ throw new Error(`Failed to execute command: ${response.status} ${text}`);
314
+ }
315
+ return (await response.json());
316
+ }
317
+ async _pollProcess(pid, opts) {
318
+ const pollInterval = opts?.pollInterval ?? DEFAULT_POLL_INTERVAL;
319
+ const timeout = opts?.timeout ?? DEFAULT_EXEC_TIMEOUT;
320
+ const deadline = Date.now() + timeout;
321
+ while (Date.now() < deadline) {
322
+ const response = await this._fetch(`${this._baseUrl}/v1/sandboxes/${encodeURIComponent(this.name)}/process/${pid}`, { signal: opts?.signal });
323
+ if (!response.ok) {
324
+ const text = await response.text();
325
+ throw new Error(`Failed to poll process ${pid}: ${response.status} ${text}`);
326
+ }
327
+ const status = (await response.json());
328
+ if (status.status === "completed") {
329
+ return {
330
+ pid,
331
+ exitCode: status.exitCode ?? 0,
332
+ stdout: status.stdout ?? "",
333
+ stderr: status.stderr ?? "",
334
+ };
335
+ }
336
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
337
+ }
338
+ throw new Error(`Process ${pid} timed out after ${timeout}ms`);
339
+ }
340
+ }
341
+ //# sourceMappingURL=sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/sandbox.ts"],"names":[],"mappings":"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"}