@inquir/compute 0.4.2 → 0.4.5
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/README.md +60 -1
- package/dist/apps.d.ts +270 -12
- package/dist/apps.d.ts.map +1 -1
- package/dist/apps.js +30 -2
- package/dist/apps.js.map +1 -1
- package/dist/compose.d.ts +51 -0
- package/dist/compose.d.ts.map +1 -0
- package/dist/compose.js +13 -0
- package/dist/compose.js.map +1 -0
- package/dist/discovery.d.ts.map +1 -1
- package/dist/discovery.js +2 -8
- package/dist/discovery.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/local-runner.d.ts.map +1 -1
- package/dist/local-runner.js +2 -8
- package/dist/local-runner.js.map +1 -1
- package/dist/replica-roles.d.ts +51 -0
- package/dist/replica-roles.d.ts.map +1 -0
- package/dist/replica-roles.js +8 -0
- package/dist/replica-roles.js.map +1 -0
- package/dist/sandboxes.d.ts +434 -0
- package/dist/sandboxes.d.ts.map +1 -0
- package/dist/sandboxes.js +359 -0
- package/dist/sandboxes.js.map +1 -0
- package/dist/system-packages.d.ts +2592 -0
- package/dist/system-packages.d.ts.map +1 -0
- package/dist/system-packages.js +605 -0
- package/dist/system-packages.js.map +1 -0
- package/dist/transport.d.ts +43 -5
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +13 -1
- package/dist/transport.js.map +1 -1
- package/dist/tsx-loader.d.ts +9 -0
- package/dist/tsx-loader.d.ts.map +1 -0
- package/dist/tsx-loader.js +26 -0
- package/dist/tsx-loader.js.map +1 -0
- package/dist/types.d.ts +13 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `client.sandboxes`: isolated, short-lived Linux environments for agents,
|
|
3
|
+
* builds and untrusted code (docs/roadmap/SANDBOXES.md §5, §6.3).
|
|
4
|
+
*
|
|
5
|
+
* The spec is the one `SandboxSpec` every surface speaks (REST body, CLI
|
|
6
|
+
* flags, MCP tool input, dashboard form): no SDK-only shape. Every call maps
|
|
7
|
+
* onto one /v1/sandboxes endpoint:
|
|
8
|
+
*
|
|
9
|
+
* create POST /v1/sandboxes (?wait=running, Idempotency-Key)
|
|
10
|
+
* list GET /v1/sandboxes (?status=all, ?limit, ?cursor)
|
|
11
|
+
* get GET /v1/sandboxes/:id
|
|
12
|
+
* exec POST /v1/sandboxes/:id/exec (NDJSON stream: start, stdout/stderr, exit | error)
|
|
13
|
+
* files.* PUT/GET /v1/sandboxes/:id/files?path= (a file, or a directory as tar)
|
|
14
|
+
* keepAlive POST /v1/sandboxes/:id/keepalive
|
|
15
|
+
* destroy DELETE /v1/sandboxes/:id
|
|
16
|
+
*
|
|
17
|
+
* `create` and `get` return a {@link Sandbox} handle bound to one sandbox;
|
|
18
|
+
* with `await using` it is destroyed when the block exits.
|
|
19
|
+
*/
|
|
20
|
+
import { ApiError, authHeaders, toApiError } from './transport.js';
|
|
21
|
+
/** S/M/L, the same presets as `inquir sandbox create --size` and the dashboard form. */
|
|
22
|
+
export const SANDBOX_SIZES = Object.freeze({
|
|
23
|
+
s: { vcpu: 0.5, memoryMb: 512, diskGb: 2 },
|
|
24
|
+
m: { vcpu: 1, memoryMb: 1_024, diskGb: 5 },
|
|
25
|
+
l: { vcpu: 2, memoryMb: 4_096, diskGb: 10 },
|
|
26
|
+
});
|
|
27
|
+
export const LIVE_SANDBOX_STATUSES = ['PENDING', 'STARTING', 'RUNNING', 'STOPPING'];
|
|
28
|
+
/* ------------------------------------------------------------- transport */
|
|
29
|
+
const DEFAULT_MAX_BUFFERED_BYTES = 16 * 1024 * 1024;
|
|
30
|
+
function sandboxPath(id, suffix = '') {
|
|
31
|
+
if (!id)
|
|
32
|
+
throw new TypeError('sandbox id is required');
|
|
33
|
+
return `/v1/sandboxes/${encodeURIComponent(id)}${suffix}`;
|
|
34
|
+
}
|
|
35
|
+
async function readPayload(response) {
|
|
36
|
+
const text = await response.text();
|
|
37
|
+
try {
|
|
38
|
+
return text ? JSON.parse(text) : undefined;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return text;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
async function send(client, method, pathname, init = {}) {
|
|
45
|
+
const response = await client.fetchImpl(`${client.baseUrl}${pathname}`, {
|
|
46
|
+
method,
|
|
47
|
+
headers: { ...(init.headers ?? {}), ...authHeaders(client) },
|
|
48
|
+
...(init.body !== undefined ? { body: init.body } : {}),
|
|
49
|
+
...(init.signal ? { signal: init.signal } : {}),
|
|
50
|
+
// Credentials are attached: never let fetch replay them to a redirect target.
|
|
51
|
+
redirect: 'error',
|
|
52
|
+
});
|
|
53
|
+
if (!response.ok)
|
|
54
|
+
throw toApiError(response, await readPayload(response));
|
|
55
|
+
return response;
|
|
56
|
+
}
|
|
57
|
+
async function json(client, method, pathname, body, options = {}) {
|
|
58
|
+
const response = await send(client, method, pathname, {
|
|
59
|
+
...(body !== undefined ? { body: JSON.stringify(body) } : {}),
|
|
60
|
+
headers: { ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}), ...(options.headers ?? {}) },
|
|
61
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
62
|
+
});
|
|
63
|
+
return (await readPayload(response));
|
|
64
|
+
}
|
|
65
|
+
async function toBody(data) {
|
|
66
|
+
if (typeof data === 'string')
|
|
67
|
+
return new TextEncoder().encode(data);
|
|
68
|
+
if (data instanceof Uint8Array)
|
|
69
|
+
return data;
|
|
70
|
+
if (data instanceof ArrayBuffer)
|
|
71
|
+
return new Uint8Array(data);
|
|
72
|
+
return new Uint8Array(await data.arrayBuffer());
|
|
73
|
+
}
|
|
74
|
+
function randomKey() {
|
|
75
|
+
const crypto = globalThis.crypto;
|
|
76
|
+
if (crypto?.randomUUID)
|
|
77
|
+
return crypto.randomUUID();
|
|
78
|
+
return `sdk-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 12)}`;
|
|
79
|
+
}
|
|
80
|
+
/** Parse NDJSON lines from a byte stream, frame by frame. */
|
|
81
|
+
async function* ndjsonFrames(body) {
|
|
82
|
+
const reader = body.getReader();
|
|
83
|
+
const decoder = new TextDecoder();
|
|
84
|
+
let buffer = '';
|
|
85
|
+
let finished = false;
|
|
86
|
+
try {
|
|
87
|
+
for (;;) {
|
|
88
|
+
const { value, done } = await reader.read();
|
|
89
|
+
if (done)
|
|
90
|
+
break;
|
|
91
|
+
buffer += decoder.decode(value, { stream: true });
|
|
92
|
+
let newline = buffer.indexOf('\n');
|
|
93
|
+
while (newline >= 0) {
|
|
94
|
+
const line = buffer.slice(0, newline).trim();
|
|
95
|
+
buffer = buffer.slice(newline + 1);
|
|
96
|
+
if (line)
|
|
97
|
+
yield JSON.parse(line);
|
|
98
|
+
newline = buffer.indexOf('\n');
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
buffer += decoder.decode();
|
|
102
|
+
if (buffer.trim())
|
|
103
|
+
yield JSON.parse(buffer);
|
|
104
|
+
finished = true;
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
// The consumer left early (break, throw): closing the body cancels the exec on the server.
|
|
108
|
+
if (!finished)
|
|
109
|
+
await reader.cancel().catch(() => undefined);
|
|
110
|
+
reader.releaseLock();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function toFrame(raw) {
|
|
114
|
+
switch (raw.type) {
|
|
115
|
+
case 'start':
|
|
116
|
+
return { type: 'start', execId: String(raw.execId ?? '') };
|
|
117
|
+
case 'stdout':
|
|
118
|
+
case 'stderr':
|
|
119
|
+
return { type: raw.type, data: typeof raw.data === 'string' ? raw.data : '' };
|
|
120
|
+
case 'exit':
|
|
121
|
+
return {
|
|
122
|
+
type: 'exit',
|
|
123
|
+
exitCode: typeof raw.exitCode === 'number' ? raw.exitCode : null,
|
|
124
|
+
timedOut: raw.timedOut === true,
|
|
125
|
+
truncated: raw.truncated === true,
|
|
126
|
+
durationMs: typeof raw.durationMs === 'number' ? raw.durationMs : 0,
|
|
127
|
+
stdoutBytes: typeof raw.stdoutBytes === 'number' ? raw.stdoutBytes : 0,
|
|
128
|
+
stderrBytes: typeof raw.stderrBytes === 'number' ? raw.stderrBytes : 0,
|
|
129
|
+
};
|
|
130
|
+
case 'error':
|
|
131
|
+
return { type: 'error', code: String(raw.code ?? 'SANDBOX_EXEC_FAILED'), message: String(raw.message ?? raw.code ?? 'The exec failed') };
|
|
132
|
+
default:
|
|
133
|
+
// A frame type this SDK does not know yet: skip it rather than fail the exec.
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
function execBody(cmd, options) {
|
|
138
|
+
const body = { cmd };
|
|
139
|
+
if (options.cwd !== undefined)
|
|
140
|
+
body.cwd = options.cwd;
|
|
141
|
+
if (options.env !== undefined)
|
|
142
|
+
body.env = options.env;
|
|
143
|
+
if (options.timeoutMs !== undefined)
|
|
144
|
+
body.timeoutMs = options.timeoutMs;
|
|
145
|
+
if (options.stdin !== undefined)
|
|
146
|
+
body.stdin = options.stdin;
|
|
147
|
+
return body;
|
|
148
|
+
}
|
|
149
|
+
async function* execFrames(client, id, cmd, options = {}) {
|
|
150
|
+
const body = execBody(cmd, options);
|
|
151
|
+
const response = await send(client, 'POST', sandboxPath(id, '/exec'), {
|
|
152
|
+
body: JSON.stringify(body),
|
|
153
|
+
headers: { 'Content-Type': 'application/json', Accept: 'application/x-ndjson' },
|
|
154
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
155
|
+
});
|
|
156
|
+
if (!response.body)
|
|
157
|
+
throw new ApiError('The exec response has no body', { status: response.status, code: 'SANDBOX_STREAM_ENDED' });
|
|
158
|
+
let ended = false;
|
|
159
|
+
for await (const raw of ndjsonFrames(response.body)) {
|
|
160
|
+
const frame = toFrame(raw);
|
|
161
|
+
if (!frame)
|
|
162
|
+
continue;
|
|
163
|
+
if (frame.type === 'exit' || frame.type === 'error')
|
|
164
|
+
ended = true;
|
|
165
|
+
yield frame;
|
|
166
|
+
}
|
|
167
|
+
if (!ended)
|
|
168
|
+
yield { type: 'error', code: 'SANDBOX_STREAM_ENDED', message: 'The exec stream ended without an exit status' };
|
|
169
|
+
}
|
|
170
|
+
function utf8Length(codePoint) {
|
|
171
|
+
if (codePoint < 0x80)
|
|
172
|
+
return 1;
|
|
173
|
+
if (codePoint < 0x800)
|
|
174
|
+
return 2;
|
|
175
|
+
return codePoint < 0x10000 ? 3 : 4;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* The longest prefix of `text` that is at most `maxBytes` of UTF-8, cut
|
|
179
|
+
* between characters: never inside a surrogate pair or a multi-byte sequence.
|
|
180
|
+
*/
|
|
181
|
+
function utf8Prefix(text, maxBytes) {
|
|
182
|
+
let bytes = 0;
|
|
183
|
+
let end = 0;
|
|
184
|
+
for (const char of text) {
|
|
185
|
+
const size = utf8Length(char.codePointAt(0) ?? 0);
|
|
186
|
+
if (bytes + size > maxBytes)
|
|
187
|
+
break;
|
|
188
|
+
bytes += size;
|
|
189
|
+
end += char.length;
|
|
190
|
+
}
|
|
191
|
+
return { text: text.slice(0, end), bytes };
|
|
192
|
+
}
|
|
193
|
+
async function runExec(client, id, cmd, options = {}) {
|
|
194
|
+
const keep = options.buffer !== false;
|
|
195
|
+
const cap = options.maxBufferedBytes ?? DEFAULT_MAX_BUFFERED_BYTES;
|
|
196
|
+
const kept = { stdout: '', stderr: '' };
|
|
197
|
+
const keptBytes = { stdout: 0, stderr: 0 };
|
|
198
|
+
const result = { execId: null, exitCode: null, timedOut: false, truncated: false, durationMs: 0, stdout: '', stderr: '' };
|
|
199
|
+
for await (const frame of execFrames(client, id, cmd, options)) {
|
|
200
|
+
switch (frame.type) {
|
|
201
|
+
case 'start':
|
|
202
|
+
result.execId = frame.execId;
|
|
203
|
+
break;
|
|
204
|
+
case 'stdout':
|
|
205
|
+
case 'stderr': {
|
|
206
|
+
(frame.type === 'stdout' ? options.onStdout : options.onStderr)?.(frame.data);
|
|
207
|
+
if (keep && frame.data) {
|
|
208
|
+
const room = cap - keptBytes[frame.type];
|
|
209
|
+
const part = utf8Prefix(frame.data, room);
|
|
210
|
+
kept[frame.type] += part.text;
|
|
211
|
+
keptBytes[frame.type] += part.bytes;
|
|
212
|
+
if (part.text.length < frame.data.length)
|
|
213
|
+
result.truncated = true;
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
case 'exit':
|
|
218
|
+
result.exitCode = frame.exitCode;
|
|
219
|
+
result.timedOut = frame.timedOut;
|
|
220
|
+
result.truncated = result.truncated || frame.truncated;
|
|
221
|
+
result.durationMs = frame.durationMs;
|
|
222
|
+
break;
|
|
223
|
+
case 'error':
|
|
224
|
+
result.errorCode = frame.code;
|
|
225
|
+
result.errorMessage = frame.message;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
result.stdout = kept.stdout;
|
|
230
|
+
result.stderr = kept.stderr;
|
|
231
|
+
return result;
|
|
232
|
+
}
|
|
233
|
+
/* ---------------------------------------------------------------- client */
|
|
234
|
+
function filesApi(client) {
|
|
235
|
+
const put = async (id, path, data, format, signal) => {
|
|
236
|
+
const response = await send(client, 'PUT', sandboxPath(id, `/files?${new URLSearchParams({ path })}`), {
|
|
237
|
+
body: await toBody(data),
|
|
238
|
+
headers: { 'Content-Type': format === 'tar' ? 'application/x-tar' : 'application/octet-stream' },
|
|
239
|
+
...(signal ? { signal } : {}),
|
|
240
|
+
});
|
|
241
|
+
return (await readPayload(response));
|
|
242
|
+
};
|
|
243
|
+
const get = async (id, path, format, signal) => {
|
|
244
|
+
const response = await send(client, 'GET', sandboxPath(id, `/files?${new URLSearchParams({ path, format })}`), signal ? { signal } : {});
|
|
245
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
246
|
+
};
|
|
247
|
+
return {
|
|
248
|
+
write: (id, path, data, options = {}) => put(id, path, data, 'file', options.signal),
|
|
249
|
+
read: (id, path, options = {}) => get(id, path, 'file', options.signal),
|
|
250
|
+
readText: async (id, path, options = {}) => new TextDecoder().decode(await get(id, path, 'file', options.signal)),
|
|
251
|
+
upload: (id, directory, tar, options = {}) => put(id, directory, tar, 'tar', options.signal),
|
|
252
|
+
download: (id, directory, options = {}) => get(id, directory, 'tar', options.signal),
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
class SandboxHandle {
|
|
256
|
+
api;
|
|
257
|
+
files;
|
|
258
|
+
current;
|
|
259
|
+
constructor(api, info) {
|
|
260
|
+
this.api = api;
|
|
261
|
+
this.current = info;
|
|
262
|
+
this.files = {
|
|
263
|
+
write: (path, data, options) => api.files.write(this.id, path, data, options),
|
|
264
|
+
read: (path, options) => api.files.read(this.id, path, options),
|
|
265
|
+
readText: (path, options) => api.files.readText(this.id, path, options),
|
|
266
|
+
upload: (directory, tar, options) => api.files.upload(this.id, directory, tar, options),
|
|
267
|
+
download: (directory, options) => api.files.download(this.id, directory, options),
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
get id() { return this.current.id; }
|
|
271
|
+
get info() { return this.current; }
|
|
272
|
+
async refresh() {
|
|
273
|
+
this.current = (await this.api.get(this.id)).info;
|
|
274
|
+
return this.current;
|
|
275
|
+
}
|
|
276
|
+
exec(cmd, options) {
|
|
277
|
+
return this.api.exec(this.id, cmd, options);
|
|
278
|
+
}
|
|
279
|
+
stream(cmd, options) {
|
|
280
|
+
return this.api.stream(this.id, cmd, options);
|
|
281
|
+
}
|
|
282
|
+
async keepAlive() {
|
|
283
|
+
this.current = await this.api.keepAlive(this.id);
|
|
284
|
+
return this.current;
|
|
285
|
+
}
|
|
286
|
+
execDetached(cmd, options) {
|
|
287
|
+
return this.api.execDetached(this.id, cmd, options);
|
|
288
|
+
}
|
|
289
|
+
getExec(execId, options) {
|
|
290
|
+
return this.api.getExec(this.id, execId, options);
|
|
291
|
+
}
|
|
292
|
+
shellTicket(size) {
|
|
293
|
+
return this.api.shellTicket(this.id, size);
|
|
294
|
+
}
|
|
295
|
+
get shellUrl() { return this.api.shellUrl(this.id); }
|
|
296
|
+
async destroy() {
|
|
297
|
+
this.current = await this.api.destroy(this.id);
|
|
298
|
+
return this.current;
|
|
299
|
+
}
|
|
300
|
+
async [Symbol.asyncDispose]() {
|
|
301
|
+
try {
|
|
302
|
+
await this.destroy();
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
// Already gone is the goal of a dispose, not a failure.
|
|
306
|
+
if (!(error instanceof ApiError && error.status === 404))
|
|
307
|
+
throw error;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/** The sandboxes API on a transport client; `createClient()` exposes it as `client.sandboxes`. */
|
|
312
|
+
export function createSandboxesClient(client) {
|
|
313
|
+
const files = filesApi(client);
|
|
314
|
+
const api = {
|
|
315
|
+
async create(spec = {}, options = {}) {
|
|
316
|
+
const query = options.wait === false ? '' : '?wait=running';
|
|
317
|
+
const info = await json(client, 'POST', `/v1/sandboxes${query}`, spec, {
|
|
318
|
+
headers: { 'Idempotency-Key': options.idempotencyKey ?? randomKey() },
|
|
319
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
320
|
+
});
|
|
321
|
+
return new SandboxHandle(api, info);
|
|
322
|
+
},
|
|
323
|
+
async get(id, options = {}) {
|
|
324
|
+
return new SandboxHandle(api, await json(client, 'GET', sandboxPath(id), undefined, options));
|
|
325
|
+
},
|
|
326
|
+
list(options = {}) {
|
|
327
|
+
const query = new URLSearchParams();
|
|
328
|
+
if (options.all)
|
|
329
|
+
query.set('status', 'all');
|
|
330
|
+
if (options.limit !== undefined)
|
|
331
|
+
query.set('limit', String(options.limit));
|
|
332
|
+
if (options.cursor)
|
|
333
|
+
query.set('cursor', options.cursor);
|
|
334
|
+
const suffix = query.toString() ? `?${query}` : '';
|
|
335
|
+
return json(client, 'GET', `/v1/sandboxes${suffix}`, undefined, options.signal ? { signal: options.signal } : {});
|
|
336
|
+
},
|
|
337
|
+
async *iterate(options = {}) {
|
|
338
|
+
let cursor;
|
|
339
|
+
do {
|
|
340
|
+
const page = await api.list({ ...options, ...(cursor ? { cursor } : {}) });
|
|
341
|
+
yield* page.items;
|
|
342
|
+
cursor = page.nextCursor ?? undefined;
|
|
343
|
+
} while (cursor);
|
|
344
|
+
},
|
|
345
|
+
exec: (id, cmd, options) => runExec(client, id, cmd, options),
|
|
346
|
+
stream: (id, cmd, options) => execFrames(client, id, cmd, options),
|
|
347
|
+
files,
|
|
348
|
+
keepAlive: (id, options = {}) => json(client, 'POST', sandboxPath(id, '/keepalive'), undefined, options),
|
|
349
|
+
destroy: (id, options = {}) => json(client, 'DELETE', sandboxPath(id), undefined, options),
|
|
350
|
+
execDetached: (id, cmd, options = {}) => json(client, 'POST', sandboxPath(id, '/exec?detach=1'), execBody(cmd, options)),
|
|
351
|
+
getExec: (id, execId, options = {}) => json(client, 'GET', sandboxPath(id, `/exec/${encodeURIComponent(execId)}${options.encoding ? `?encoding=${options.encoding}` : ''}`), undefined, options.signal ? { signal: options.signal } : {}),
|
|
352
|
+
shellTicket: (id, size = {}, options = {}) => json(client, 'POST', sandboxPath(id, '/shell-ticket'), size, options.signal ? { signal: options.signal } : {}),
|
|
353
|
+
shellUrl: (id) => `${client.baseUrl.replace(/^http/, 'ws')}${sandboxPath(id, '/shell')}`,
|
|
354
|
+
usage: (options = {}) => json(client, 'GET', '/v1/sandboxes/usage', undefined, options),
|
|
355
|
+
capabilities: (options = {}) => json(client, 'GET', '/v1/sandboxes/capabilities', undefined, options),
|
|
356
|
+
};
|
|
357
|
+
return api;
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=sandboxes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandboxes.js","sourceRoot":"","sources":["../src/sandboxes.ts"],"names":[],"mappings":"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"}
|