@tangle-network/sandbox 0.10.4 → 0.10.5-develop.20260715115519.fee3d86

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.
@@ -1,5 +1,5 @@
1
- import { n as normalizeSessionInfo, r as normalizeRuntimeBackendConfig, t as SandboxRuntimeApi } from "./runtime-api-CYA2DUQw.js";
2
- import { c as SandboxError, d as TimeoutError, f as ValidationError, i as NetworkError, l as ServerError, n as CapabilityError, p as parseErrorResponse, s as QuotaError, t as AuthError, u as StateError } from "./errors-DSz87Rkk.js";
1
+ import { i as normalizeRuntimeBackendConfig, n as normalizeSessionInfo, r as uploadChunked, t as SandboxRuntimeApi } from "./runtime-api-BWq4XSrb.js";
2
+ import { c as SandboxError, d as TimeoutError, f as ValidationError, i as NetworkError, l as ServerError, n as CapabilityError, p as parseErrorResponse, s as QuotaError, t as AuthError, u as StateError } from "./errors-wd266B9Q.js";
3
3
  import { addTokenUsage, readTokenCostUsd, readTokenUsage } from "@tangle-network/agent-core";
4
4
  //#region src/lib/sse-parser.ts
5
5
  /**
@@ -920,6 +920,22 @@ const WRITE_MANY_DEFAULT_PACE_MS = 150;
920
920
  const WRITE_MANY_DEFAULT_MAX_RETRIES = 4;
921
921
  const WRITE_MANY_RETRY_BASE_MS = 250;
922
922
  const WRITE_MANY_RETRY_MAX_MS = 2e3;
923
+ function parseTextFileReadResponse(body) {
924
+ let payload;
925
+ try {
926
+ payload = JSON.parse(body);
927
+ } catch {
928
+ throw new ServerError("Runtime returned invalid JSON for file read", 502, {
929
+ origin: "runtime",
930
+ endpoint: "/files/read"
931
+ });
932
+ }
933
+ if (typeof payload !== "object" || payload === null || !("success" in payload) || payload.success !== true || !("data" in payload) || typeof payload.data !== "object" || payload.data === null || !("content" in payload.data) || typeof payload.data.content !== "string" || !("encoding" in payload.data) || payload.data.encoding !== "utf8") throw new ServerError("Runtime returned a malformed text file response", 502, {
934
+ origin: "runtime",
935
+ endpoint: "/files/read"
936
+ });
937
+ return payload.data.content;
938
+ }
923
939
  const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
924
940
  /** Transient file-write failures worth retrying: rate-limit (quota), 5xx,
925
941
  * transport (network), and request timeouts. A non-transient error (bad path,
@@ -1331,18 +1347,20 @@ var SandboxInstance = class SandboxInstance {
1331
1347
  */
1332
1348
  async read(path, options) {
1333
1349
  await this.ensureRunning();
1334
- const headers = {};
1335
- if (options?.sessionId) headers["X-Session-Id"] = options.sessionId;
1350
+ const headers = options?.sessionId ? { "X-Session-Id": options.sessionId } : void 0;
1336
1351
  const response = await this.runtimeFetch("/files/read", {
1337
1352
  method: "POST",
1338
1353
  headers,
1339
- body: JSON.stringify({ path })
1354
+ body: JSON.stringify({
1355
+ path,
1356
+ encoding: "utf8"
1357
+ })
1340
1358
  });
1341
1359
  if (!response.ok) {
1342
1360
  const body = await response.text();
1343
1361
  throw parseErrorResponse(response.status, body, void 0, response.headers);
1344
1362
  }
1345
- return (await response.json()).data?.content ?? "";
1363
+ return parseTextFileReadResponse(await response.text());
1346
1364
  }
1347
1365
  /**
1348
1366
  * Write content to a file in the sandbox.
@@ -1393,7 +1411,10 @@ var SandboxInstance = class SandboxInstance {
1393
1411
  if (started && paceMs > 0) await delay(paceMs);
1394
1412
  started = true;
1395
1413
  try {
1396
- await this.write(file.path, file.content, { mode: file.mode });
1414
+ await this.write(file.path, file.content, {
1415
+ mode: file.mode,
1416
+ encoding: file.encoding
1417
+ });
1397
1418
  break;
1398
1419
  } catch (err) {
1399
1420
  if (isTransientWriteError(err) && attempt < maxRetries) {
@@ -1544,8 +1565,8 @@ var SandboxInstance = class SandboxInstance {
1544
1565
  * `error` + `done` so callers never see a thrown generator.
1545
1566
  */
1546
1567
  async *streamPromptInner(message, options) {
1568
+ if (options?.lastEventId && !options.executionId) throw new ValidationError("lastEventId requires executionId so the SDK can replay the correct execution", { executionId: "Required when lastEventId is set" });
1547
1569
  await this.ensureRunning();
1548
- const parts = encodePromptForWire(message);
1549
1570
  const timeoutMs = typeof options?.timeoutMs === "number" && options.timeoutMs > 0 ? options.timeoutMs : void 0;
1550
1571
  const timeoutSignal = timeoutMs ? AbortSignal.timeout(timeoutMs) : void 0;
1551
1572
  const streamSignal = timeoutSignal ? options?.signal ? AbortSignal.any([options.signal, timeoutSignal]) : timeoutSignal : options?.signal;
@@ -1563,26 +1584,47 @@ var SandboxInstance = class SandboxInstance {
1563
1584
  ...data
1564
1585
  });
1565
1586
  };
1587
+ const explicitReplay = Boolean(options?.executionId && options.lastEventId);
1588
+ const requestEndpoint = explicitReplay ? `/agents/run/${encodeURIComponent(options?.executionId ?? "")}/events?lastEventId=${encodeURIComponent(options?.lastEventId ?? "")}&format=sse` : "/agents/run/stream";
1589
+ let lastEventId = options?.lastEventId;
1590
+ let executionId = options?.executionId;
1591
+ let sessionId = options?.sessionId;
1592
+ let receivedTerminal = false;
1593
+ const RECONNECT_BACKOFF_MS = [
1594
+ 2e3,
1595
+ 4e3,
1596
+ 8e3,
1597
+ 16e3,
1598
+ 3e4,
1599
+ 3e4
1600
+ ];
1601
+ const MAX_RECONNECT_ATTEMPTS = RECONNECT_BACKOFF_MS.length;
1602
+ let lastReplayStatus;
1603
+ let lastExecutionStatus;
1604
+ let firstSseEventSeen = false;
1566
1605
  let response;
1567
1606
  try {
1568
1607
  logStreamCheckpoint("runtime_post_start", {
1569
- endpoint: "/agents/run/stream",
1608
+ endpoint: requestEndpoint,
1570
1609
  sessionId: options?.sessionId,
1571
1610
  executionId: options?.executionId,
1572
1611
  hasLastEventId: Boolean(options?.lastEventId),
1573
- detach: options?.detach === true
1612
+ detach: options?.detach === true,
1613
+ replayOnly: explicitReplay
1574
1614
  });
1575
- response = await this.runtimeFetch("/agents/run/stream", {
1615
+ const request = explicitReplay ? {
1616
+ method: "GET",
1617
+ signal: streamSignal
1618
+ } : {
1576
1619
  method: "POST",
1577
1620
  signal: streamSignal,
1578
1621
  headers: {
1579
1622
  ...options?.executionId ? { "X-Execution-ID": options.executionId } : {},
1580
- ...options?.lastEventId ? { "Last-Event-ID": options.lastEventId } : {},
1581
1623
  ...options?.detach ? { "x-agent-detach": "true" } : {}
1582
1624
  },
1583
1625
  body: JSON.stringify({
1584
1626
  identifier: "default",
1585
- parts,
1627
+ parts: encodePromptForWire(message),
1586
1628
  sessionId: options?.sessionId,
1587
1629
  turnId: options?.turnId,
1588
1630
  metadata: options?.context,
@@ -1591,7 +1633,8 @@ var SandboxInstance = class SandboxInstance {
1591
1633
  ...options?.detach ? { detach: true } : {},
1592
1634
  backend: normalizeRuntimeBackendConfig(options?.backend ?? this.defaultRuntimeBackend, { model: options?.model })
1593
1635
  })
1594
- });
1636
+ };
1637
+ response = await this.runtimeFetch(requestEndpoint, request);
1595
1638
  logStreamCheckpoint("runtime_response_headers", {
1596
1639
  status: response.status,
1597
1640
  ok: response.ok
@@ -1601,27 +1644,20 @@ var SandboxInstance = class SandboxInstance {
1601
1644
  throwIfTimedOut();
1602
1645
  throw err;
1603
1646
  }
1604
- if (!response.ok) {
1647
+ if (!response.ok && !explicitReplay) {
1605
1648
  const body = await response.text();
1606
1649
  throw parseErrorResponse(response.status, body, void 0, response.headers);
1607
1650
  }
1608
- let lastEventId = options?.lastEventId;
1609
- let executionId = options?.executionId;
1610
- let sessionId = options?.sessionId;
1611
- let receivedTerminal = false;
1612
- const RECONNECT_BACKOFF_MS = [
1613
- 2e3,
1614
- 4e3,
1615
- 8e3,
1616
- 16e3,
1617
- 3e4,
1618
- 3e4
1619
- ];
1620
- const MAX_RECONNECT_ATTEMPTS = RECONNECT_BACKOFF_MS.length;
1621
- let lastReplayStatus;
1622
- let lastExecutionStatus;
1623
- let firstSseEventSeen = false;
1624
- for await (const event of this.parseSSEStream(response, streamSignal)) {
1651
+ if (!response.ok) {
1652
+ lastReplayStatus = response.status;
1653
+ await response.text();
1654
+ logStreamCheckpoint("replay_response_status", {
1655
+ attempt: 0,
1656
+ status: response.status,
1657
+ ok: false
1658
+ });
1659
+ } else for await (const event of this.parseSSEStream(response, streamSignal)) {
1660
+ if (event.type === "history.replay.start" || event.type === "history.replay.end") continue;
1625
1661
  if (!firstSseEventSeen) {
1626
1662
  firstSseEventSeen = true;
1627
1663
  logStreamCheckpoint("first_sse_event", {
@@ -2099,11 +2135,19 @@ var SandboxInstance = class SandboxInstance {
2099
2135
  async resourceUsage() {
2100
2136
  await this.ensureRunning();
2101
2137
  const response = await this.runtimeFetch("/health/detailed", { method: "GET" });
2102
- if (!response.ok) {
2103
- const body = await response.text();
2104
- throw parseErrorResponse(response.status, body, void 0, response.headers);
2138
+ const body = await response.text();
2139
+ let data;
2140
+ try {
2141
+ data = JSON.parse(body);
2142
+ } catch (error) {
2143
+ if (response.ok) throw new NetworkError("Detailed health returned a non-JSON response", error instanceof Error ? error : void 0, {
2144
+ endpoint: "/health/detailed",
2145
+ origin: "runtime"
2146
+ });
2105
2147
  }
2106
- return (await response.json()).resources ?? null;
2148
+ if (data?.resources) return data.resources;
2149
+ if (!response.ok) throw parseErrorResponse(response.status, body, void 0, response.headers);
2150
+ return null;
2107
2151
  }
2108
2152
  /**
2109
2153
  * Git capability object for repository operations.
@@ -2322,12 +2366,14 @@ var SandboxInstance = class SandboxInstance {
2322
2366
  writeMany: (files, options) => this.writeMany(files, options),
2323
2367
  search: (query, options) => this.search(query, options),
2324
2368
  upload: (localPath, remotePath, options) => this.fsUpload(localPath, remotePath, options),
2369
+ uploadData: (remotePath, data, options) => this.fsUploadData(remotePath, data, options),
2325
2370
  download: (remotePath, localPath, options) => this.fsDownload(remotePath, localPath, options),
2326
2371
  uploadDir: (localDir, remoteDir) => this.fsUploadDir(localDir, remoteDir),
2327
2372
  downloadDir: (remoteDir, localDir) => this.fsDownloadDir(remoteDir, localDir),
2328
2373
  list: (path, options) => this.fsList(path, options),
2329
2374
  stat: (path) => this.fsStat(path),
2330
2375
  delete: (path, options) => this.fsDelete(path, options),
2376
+ rename: (sourcePath, destinationPath, options) => this.fsRename(sourcePath, destinationPath, options),
2331
2377
  mkdir: (path, options) => this.fsMkdir(path, options),
2332
2378
  exists: (path) => this.fsExists(path)
2333
2379
  };
@@ -2368,6 +2414,14 @@ var SandboxInstance = class SandboxInstance {
2368
2414
  percentage: 100
2369
2415
  });
2370
2416
  }
2417
+ /** See {@link FileSystem.uploadData}. Delegates to the shared, browser-safe
2418
+ * chunked-upload flow in `lib/chunked-upload.ts`, wired to this sandbox's
2419
+ * runtime endpoint (works over the gateway proxy or a direct connection —
2420
+ * both are transparent through `runtimeFetch`). */
2421
+ async fsUploadData(remotePath, data, options) {
2422
+ await this.ensureRunning();
2423
+ return uploadChunked({ fetch: (path, init) => this.runtimeFetch(path, init) }, remotePath, data, options);
2424
+ }
2371
2425
  async fsDownload(remotePath, localPath, options) {
2372
2426
  await this.ensureRunning();
2373
2427
  const fs = await import("node:fs/promises");
@@ -2515,6 +2569,9 @@ var SandboxInstance = class SandboxInstance {
2515
2569
  throw parseErrorResponse(response.status, body, void 0, response.headers);
2516
2570
  }
2517
2571
  }
2572
+ async fsRename(sourcePath, destinationPath, options) {
2573
+ return this.runtime.renameFile(sourcePath, destinationPath, options);
2574
+ }
2518
2575
  async fsMkdir(path, options) {
2519
2576
  await this.ensureRunning();
2520
2577
  const params = new URLSearchParams();
@@ -4443,15 +4500,10 @@ var SandboxInstance = class SandboxInstance {
4443
4500
  return { state: "running" };
4444
4501
  }
4445
4502
  /**
4446
- * Mint a scoped, time-bounded JWT for direct browser access to this
4447
- * sandbox (Issue #913 Gap 1). Authority is the caller's
4448
- * `TANGLE_API_KEY` (sk-tan-*) the Sandbox API mints the token;
4449
- * signing secrets stay server-side.
4450
- *
4451
- * Use this to give a browser direct read access to the sandbox without
4452
- * leaking the full bearer (`box.connection.authToken`). The returned
4453
- * token verifies against the same sidecar middleware that already
4454
- * gates ProductTokenIssuer-issued JWTs — no new sidecar surface.
4503
+ * Mint a scoped, time-bounded JWT for browser access (Issue #913 Gap 1).
4504
+ * Authority is the caller's `TANGLE_API_KEY` (sk-tan-*); signing secrets
4505
+ * stay server-side. Session/project scopes work with SessionGatewayClient,
4506
+ * while session-runtime/read-only scopes work with SandboxRuntimeClient.
4455
4507
  */
4456
4508
  async mintScopedToken(opts) {
4457
4509
  if ((opts.scope === "session" || opts.scope === "session-runtime") && !opts.sessionId) throw new ValidationError(`${opts.scope} scope requires a sessionId`);
@@ -1,2 +1,2 @@
1
- import { a as TANGLE_JOBS_CONTRACT, c as AgentSandboxBlueprintAbi, d as SandboxCreateParamTypes, f as SandboxCreateResponseParamTypes, i as TANGLE_CHAIN_ID, l as ITangleJobsAbi, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, p as SandboxIdParamTypes, r as JOB_SANDBOX_DELETE, s as TangleSandboxClientConfig, t as TangleSandboxClient, u as JsonResponseParamTypes } from "../index-BFnMEze6.js";
1
+ import { a as TANGLE_JOBS_CONTRACT, c as AgentSandboxBlueprintAbi, d as SandboxCreateParamTypes, f as SandboxCreateResponseParamTypes, i as TANGLE_CHAIN_ID, l as ITangleJobsAbi, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, p as SandboxIdParamTypes, r as JOB_SANDBOX_DELETE, s as TangleSandboxClientConfig, t as TangleSandboxClient, u as JsonResponseParamTypes } from "../index-CEZaPvfX.js";
2
2
  export { AgentSandboxBlueprintAbi, ITangleJobsAbi, JOB_SANDBOX_CREATE, JOB_SANDBOX_DELETE, JsonResponseParamTypes, SandboxCreateParamTypes, SandboxCreateResponseParamTypes, SandboxIdParamTypes, TANGLE_CHAIN_ID, TANGLE_JOBS_CONTRACT, TANGLE_MAINNET_RPC, TangleSandboxClient, TangleSandboxClientConfig };
@@ -1,2 +1,2 @@
1
- import { a as TANGLE_JOBS_CONTRACT, c as ITangleJobsAbi, d as SandboxCreateResponseParamTypes, f as SandboxIdParamTypes, i as TANGLE_CHAIN_ID, l as JsonResponseParamTypes, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, r as JOB_SANDBOX_DELETE, s as AgentSandboxBlueprintAbi, t as TangleSandboxClient, u as SandboxCreateParamTypes } from "../tangle-D6UfK_B0.js";
1
+ import { a as TANGLE_JOBS_CONTRACT, c as ITangleJobsAbi, d as SandboxCreateResponseParamTypes, f as SandboxIdParamTypes, i as TANGLE_CHAIN_ID, l as JsonResponseParamTypes, n as JOB_SANDBOX_CREATE, o as TANGLE_MAINNET_RPC, r as JOB_SANDBOX_DELETE, s as AgentSandboxBlueprintAbi, t as TangleSandboxClient, u as SandboxCreateParamTypes } from "../tangle-Os9sH-ms.js";
2
2
  export { AgentSandboxBlueprintAbi, ITangleJobsAbi, JOB_SANDBOX_CREATE, JOB_SANDBOX_DELETE, JsonResponseParamTypes, SandboxCreateParamTypes, SandboxCreateResponseParamTypes, SandboxIdParamTypes, TANGLE_CHAIN_ID, TANGLE_JOBS_CONTRACT, TANGLE_MAINNET_RPC, TangleSandboxClient };
@@ -1,5 +1,5 @@
1
- import { p as parseErrorResponse } from "./errors-DSz87Rkk.js";
2
- import { t as SandboxInstance } from "./sandbox-Be9WAqSg.js";
1
+ import { p as parseErrorResponse } from "./errors-wd266B9Q.js";
2
+ import { t as SandboxInstance } from "./sandbox-KiKLRbR_.js";
3
3
  //#region src/tangle/abi.ts
4
4
  /**
5
5
  * Tangle Contract ABI Definitions
@@ -662,6 +662,25 @@ interface CreateSandboxOptions {
662
662
  * timeout-driven retries.
663
663
  */
664
664
  idempotencyKey?: string;
665
+ /**
666
+ * Auto-split inline file mounts out of an inline `backend.profile` object
667
+ * at create time, send the lean profile (mount refs stripped) in the
668
+ * create request, then write the deferred files back once the sandbox is
669
+ * running.
670
+ *
671
+ * When `true` (the default), a profile with sizeable inline mounts (e.g.
672
+ * skills, tool scripts) does not bloat the create POST; the SDK
673
+ * materializes those files via {@link FileSystem.writeMany} /
674
+ * {@link FileSystem.uploadData} after the sandbox reaches `running`. Only
675
+ * applies to an inline `AgentProfile` object on `backend.profile` — a
676
+ * named-profile string is never split, and the deprecated untyped
677
+ * `backend.inlineProfile` passthrough is not split either. Set `false`
678
+ * to send the full profile inline in the create request (no post-create
679
+ * materialization step).
680
+ *
681
+ * @default true
682
+ */
683
+ autoMaterializeProfileFiles?: boolean;
665
684
  }
666
685
  /**
667
686
  * Per-call overrides for {@link SandboxClient.create}.
@@ -1254,18 +1273,19 @@ interface PromptOptions {
1254
1273
  /** AbortSignal for cancellation */
1255
1274
  signal?: AbortSignal;
1256
1275
  /**
1257
- * Stable execution id for cross-process reconnect. When passed, the same
1258
- * id on a retry lands on the same substrate execution — the platform
1259
- * replays its buffered event stream instead of spawning a duplicate run.
1260
- * Forwarded as the `X-Execution-ID` header. Omit to let the SDK extract
1261
- * one from the response stream's `execution.started` event (in-call
1262
- * reconnect only).
1276
+ * Stable execution id for tracing a first dispatch or selecting an existing
1277
+ * execution for replay. Forwarded as `X-Execution-ID` on a first dispatch.
1278
+ * When combined with `lastEventId`, the SDK replays the existing execution
1279
+ * without sending the prompt again. An execution ID alone does not make a
1280
+ * repeated POST idempotent; use `turnId` for application-level retries.
1281
+ * Omit to let the SDK read the id from `execution.started` for in-call
1282
+ * reconnects.
1263
1283
  */
1264
1284
  executionId?: string;
1265
1285
  /**
1266
- * Last event id the caller has already acknowledged. The substrate
1267
- * replays strictly after this id on reconnect. Forwarded as the
1268
- * `Last-Event-ID` header. Omit on first attempt.
1286
+ * Last event id the caller has already acknowledged. Requires `executionId`;
1287
+ * the SDK replays strictly after this id without dispatching a new prompt.
1288
+ * Omit on the first attempt.
1269
1289
  */
1270
1290
  lastEventId?: string;
1271
1291
  /**
@@ -1724,6 +1744,10 @@ interface SessionListOptions {
1724
1744
  }
1725
1745
  /** Options for creating a runtime agent session. */
1726
1746
  interface CreateSessionOptions {
1747
+ /** Stable caller-supplied idempotency key. Repeating create with the same
1748
+ * id returns the existing session without creating another workspace or
1749
+ * backend session. Omit to let the runtime mint a random id. */
1750
+ sessionId?: string;
1727
1751
  title?: string;
1728
1752
  parentId?: string;
1729
1753
  backend: BackendConfig;
@@ -2018,18 +2042,18 @@ type TurnDriveResult = {
2018
2042
  error: string;
2019
2043
  };
2020
2044
  /**
2021
- * Scope of a `box.mintScopedToken()` request. Each value narrows the token's
2022
- * authority compared to the full sandbox bearer. `session-runtime` permits
2023
- * only typed message, workspace-file, and terminal operations for one session.
2045
+ * Scope of a `box.mintScopedToken()` request. `session` and `project` mint
2046
+ * SessionGateway read tokens. `session-runtime` and `read-only` mint sidecar
2047
+ * capability tokens for browser-safe runtime access.
2024
2048
  */
2025
2049
  type ScopedTokenScope = "session" | "session-runtime" | "project" | "read-only";
2026
2050
  /**
2027
2051
  * Options for `box.mintScopedToken()`.
2028
2052
  */
2029
2053
  interface MintScopedTokenOptions {
2030
- /** Scope to mint. `session` narrows to a single session id; `project`
2031
- * grants read access to the whole sandbox; `read-only` is a project
2032
- * scope without prompt-dispatch capabilities. */
2054
+ /** Scope to mint. `session` and `project` are for SessionGateway streams;
2055
+ * `session-runtime` permits typed files, messages, and terminals for one
2056
+ * session; `read-only` permits read-only runtime requests. */
2033
2057
  scope: ScopedTokenScope;
2034
2058
  /** Required when `scope` is `session` or `session-runtime`. */
2035
2059
  sessionId?: string;
@@ -2039,18 +2063,17 @@ interface MintScopedTokenOptions {
2039
2063
  ttlMinutes?: number;
2040
2064
  }
2041
2065
  /**
2042
- * Returned by `box.mintScopedToken()`. The token verifies against the
2043
- * same sidecar middleware that already gates ProductTokenIssuer-issued
2044
- * JWTs — no new sidecar surface.
2066
+ * Returned by `box.mintScopedToken()`. Use session/project tokens with
2067
+ * `SessionGatewayClient`; use session-runtime/read-only tokens with
2068
+ * `SandboxRuntimeClient`.
2045
2069
  */
2046
2070
  interface ScopedToken {
2047
- /** Bearer token (JWT). Send as `Authorization: Bearer <token>` or
2048
- * via the `EventSource` URL with token query param. */
2071
+ /** Bearer token (JWT) for the consumer selected by `scope`. */
2049
2072
  token: string;
2050
2073
  /** When the token expires. */
2051
2074
  expiresAt: Date;
2052
- /** The runtime's direct edge URL. Matches `SandboxConnection.runtimeUrl`
2053
- * (the SDK's canonical public name for this URL). */
2075
+ /** The runtime's direct edge URL. Use with runtime scopes; session/project
2076
+ * tokens instead connect to the Sandbox API's `/session` WebSocket. */
2054
2077
  runtimeUrl: string;
2055
2078
  /** Browser-safe Sandbox API proxy base for terminal and runtime requests. */
2056
2079
  sidecarProxyUrl: string;
@@ -2582,7 +2605,7 @@ interface SandboxFleetArtifactSpec {
2582
2605
  */
2583
2606
  path: string;
2584
2607
  label?: string;
2585
- /** Maximum allowed artifact content size in bytes. Defaults to 5 MiB. */
2608
+ /** Maximum allowed artifact content size in bytes. Defaults to 10 MiB. */
2586
2609
  maxBytes?: number;
2587
2610
  }
2588
2611
  interface SandboxFleetArtifact extends SandboxFleetArtifactSpec {
@@ -4419,6 +4442,13 @@ interface FileWriteResult {
4419
4442
  /** Encoding echoed by runtimes that include it in write responses. */
4420
4443
  encoding?: "utf8" | "base64";
4421
4444
  }
4445
+ /** Metadata returned after a successful file or directory rename. */
4446
+ interface FileRenameResult {
4447
+ /** Previous path, relative to the workspace when applicable. */
4448
+ sourcePath: string;
4449
+ /** New path, relative to the workspace when applicable. */
4450
+ destinationPath: string;
4451
+ }
4422
4452
  /**
4423
4453
  * Options for uploading files.
4424
4454
  */
@@ -4441,6 +4471,36 @@ interface UploadProgress {
4441
4471
  /** Percentage complete (0-100) */
4442
4472
  percentage: number;
4443
4473
  }
4474
+ /**
4475
+ * Options for {@link FileSystem.uploadData}.
4476
+ */
4477
+ interface ChunkedUploadOptions {
4478
+ /** Unix mode bits applied to the file after upload, e.g. 0o644. */
4479
+ mode?: number;
4480
+ /** Progress callback fired after each part completes. On the rare
4481
+ * checksum-mismatch recovery (one automatic full re-upload),
4482
+ * `bytesUploaded` restarts from 0 for the second pass. */
4483
+ onProgress?: (progress: UploadProgress) => void;
4484
+ /** Cancel the upload. A pending upload session is best-effort deleted
4485
+ * server-side when the signal fires mid-flow. */
4486
+ signal?: AbortSignal;
4487
+ /** Delay between part PUTs (ms) to pace bursts. 0 disables pacing (default). */
4488
+ paceMs?: number;
4489
+ /** Max retries per part on a transient error before failing loud. Default 4. */
4490
+ maxRetries?: number;
4491
+ }
4492
+ /**
4493
+ * Result of a successful {@link FileSystem.uploadData} call — the
4494
+ * upload-session commit response.
4495
+ */
4496
+ interface ChunkedUploadResult {
4497
+ /** The path the runtime wrote the assembled payload to. */
4498
+ path: string;
4499
+ /** Total assembled size in bytes. */
4500
+ size: number;
4501
+ /** Server-computed content hash of the assembled payload. */
4502
+ hash: string;
4503
+ }
4444
4504
  /**
4445
4505
  * Options for downloading files.
4446
4506
  */
@@ -4490,6 +4550,11 @@ interface DeleteOptions {
4490
4550
  /** Agent session whose workspace and change history receive the deletion. */
4491
4551
  sessionId?: string;
4492
4552
  }
4553
+ /** Options for {@link FileSystem.rename}. */
4554
+ interface RenameOptions {
4555
+ /** Agent session whose workspace and change history receive the rename. */
4556
+ sessionId?: string;
4557
+ }
4493
4558
  /**
4494
4559
  * File system operations for sandboxes. Access via `sandbox.fs`.
4495
4560
  *
@@ -4544,10 +4609,12 @@ interface DeleteOptions {
4544
4609
  interface WriteManyFile {
4545
4610
  /** Destination path. Relative paths resolve from the workspace root. */
4546
4611
  path: string;
4547
- /** File content (UTF-8). */
4612
+ /** File content: UTF-8 by default, or base64 when `encoding: "base64"` (for binary payloads). */
4548
4613
  content: string;
4549
4614
  /** Unix mode bits applied after write, e.g. 0o755. */
4550
4615
  mode?: number;
4616
+ /** Encoding of `content` on the wire. */
4617
+ encoding?: "utf8" | "base64";
4551
4618
  }
4552
4619
  /** Options for {@link FileSystem.write}. */
4553
4620
  interface WriteFileOptions {
@@ -4638,6 +4705,35 @@ interface FileSystem {
4638
4705
  * ```
4639
4706
  */
4640
4707
  upload(localPath: string, remotePath: string, options?: UploadOptions): Promise<void>;
4708
+ /**
4709
+ * Upload in-memory binary or text data to the sandbox over the chunked
4710
+ * upload-session protocol, without touching the local filesystem.
4711
+ *
4712
+ * Browser/Worker-safe (no `node:` APIs) — this is the sanctioned path for
4713
+ * delivering payloads over ~1 MiB from a browser tab, a Worker, or any
4714
+ * runtime without `node:fs`, where {@link FileSystem.upload}'s local-file
4715
+ * read isn't available. Binary-safe: accepts a `Blob`, `ArrayBuffer`,
4716
+ * `ArrayBufferView`, or UTF-8 `string`. The upload is chunked into
4717
+ * server-sized parts transparently — callers see one call and one
4718
+ * awaited result — and verified end-to-end with a whole-payload SHA-256
4719
+ * at commit. Works identically whether the sandbox is reached through
4720
+ * the gateway proxy or a direct sidecar connection.
4721
+ *
4722
+ * @param remotePath - Destination path in the sandbox.
4723
+ * @param data - Payload to upload. Strings encode as UTF-8.
4724
+ * @param options - Chunking, retry, progress, and cancellation options.
4725
+ * @throws {SandboxError} `PAYLOAD_TOO_LARGE` immediately, before any
4726
+ * request, if the payload exceeds the chunked-upload session cap.
4727
+ *
4728
+ * @example
4729
+ * ```typescript
4730
+ * const blob = await fetch("https://example.com/model.bin").then((r) => r.blob());
4731
+ * await box.fs.uploadData("/workspace/models/model.bin", blob, {
4732
+ * onProgress: (p) => console.log(`${p.percentage.toFixed(1)}%`),
4733
+ * });
4734
+ * ```
4735
+ */
4736
+ uploadData(remotePath: string, data: Blob | ArrayBuffer | ArrayBufferView | string, options?: ChunkedUploadOptions): Promise<ChunkedUploadResult>;
4641
4737
  /**
4642
4738
  * Download a file from the sandbox.
4643
4739
  * Handles binary files correctly.
@@ -4734,6 +4830,27 @@ interface FileSystem {
4734
4830
  * ```
4735
4831
  */
4736
4832
  delete(path: string, options?: DeleteOptions): Promise<void>;
4833
+ /**
4834
+ * Rename a file or directory inside the sandbox without transferring its contents.
4835
+ * An existing regular file or symbolic link at the destination is replaced atomically.
4836
+ * Replacing a non-empty directory fails, as does moving across filesystems.
4837
+ *
4838
+ * @param sourcePath - Current path
4839
+ * @param destinationPath - New path
4840
+ * @param options - Session workspace options
4841
+ * @returns The resolved source and destination paths
4842
+ * @throws NotFoundError if the source or destination parent does not exist
4843
+ * @throws Error if the destination is a non-empty directory or the paths span filesystems
4844
+ *
4845
+ * @example
4846
+ * ```typescript
4847
+ * await box.fs.rename(
4848
+ * "/workspace/assets/logo.tmp",
4849
+ * "/workspace/assets/logo.png",
4850
+ * );
4851
+ * ```
4852
+ */
4853
+ rename(sourcePath: string, destinationPath: string, options?: RenameOptions): Promise<FileRenameResult>;
4737
4854
  /**
4738
4855
  * Create a directory.
4739
4856
  *
@@ -4843,4 +4960,4 @@ interface CodeExecutionOptions {
4843
4960
  idempotencyKey?: string;
4844
4961
  }
4845
4962
  //#endregion
4846
- export { EventStreamOptions as $, SandboxFleetMachine as $n, SessionMessageInputPart as $r, NetworkConfig as $t, CommitTaskSessionOptions as A, WriteFileOptions as Ai, Rollout as An, SandboxTerminalInfo as Ar, GpuLeaseCommandResult as At, CreateTaskSessionOptions as B, AgentProfilePermissionValue as Bi, SandboxClientConfig as Bn, SearchMatch as Br, IntelligenceReport as Bt, BatchTaskUsage as C, TurnDriveResult as Ci, PublishPublicTemplateVersionOptions as Cn, SandboxResourceUsage as Cr, GitBranch as Ct, CodeLanguage as D, UsageInfo as Di, ReconcileSandboxFleetsResult as Dn, SandboxRuntimeProfileList as Dr, GitStatus as Dt, CodeExecutionResult as E, UploadProgress as Ei, ReconcileSandboxFleetsOptions as En, SandboxRuntimeProfile as Er, GitDiff as Et, CreateSandboxFleetOptions as F, AgentProfileConfidential as Fi, RolloutStatus as Fn, SandboxTraceExport as Fr, GpuLeaseStatus as Ft, DownloadOptions as G, AgentProfileValidationResult as Gi, SandboxFleetArtifactSpec as Gn, SendSessionMessageRequest as Gr, JsonValue as Gt, DirectoryPermission as H, AgentProfileResourceRef as Hi, SandboxEnvironment as Hn, SecretInfo as Hr, IntelligenceReportCompareTo as Ht, CreateSandboxFleetTokenOptions as I, AgentProfileConnection as Ii, RolloutTurnPart as In, SandboxTraceOptions as Ir, GpuType as It, DriverConfig as J, defineGitHubResource as Ji, SandboxFleetDispatchResponse as Jn, SessionEventStreamOptions as Jr, ListSandboxFleetOptions as Jt, DownloadProgress as K, AgentSubagentProfile as Ki, SandboxFleetCostEstimate as Kn, SentSessionMessage as Kr, ListMessagesOptions as Kt, CreateSandboxFleetWithCoordinatorOptions as L, AgentProfileFileMount as Li, RunCodeOptions as Ln, SandboxUser as Lr, HostAgentDriverConfig as Lt, CreateGpuLeaseOptions as M, WriteManyOptions as Mi, RolloutOptions as Mn, SandboxTerminalRequestOptions as Mr, GpuLeaseExecResult as Mt, CreateIntelligenceReportOptions as N, AgentProfile as Ni, RolloutScorer as Nn, SandboxTraceBundle as Nr, GpuLeaseManager as Nt, CodeResult as O, WaitForOptions as Oi, RestoreSnapshotOptions as On, SandboxStatus as Or, GpuLease as Ot, CreateRequestOptions as P, AgentProfileCapabilities as Pi, RolloutStartResult as Pn, SandboxTraceEvent as Pr, GpuLeaseProviderName as Pt, EgressPolicy as Q, SandboxFleetIntelligenceEnvelope as Qn, SessionMessage as Qr, MkdirOptions as Qt, CreateSandboxOptions as R, AgentProfileMcpServer as Ri, SSHCommandDescriptor as Rn, ScopedToken as Rr, HostAgentRuntimeBackend as Rt, BatchTaskResult as S, ToolsConfig as Si, PublishPublicTemplateOptions as Sn, SandboxProfileSummary as Sr, GitAuth as St, CodeExecutionOptions as T, UploadOptions as Ti, ReapExpiredSandboxFleetsResult as Tn, SandboxRuntimeHealth as Tr, GitConfig as Tt, DispatchPromptOptions as U, AgentProfileResources as Ui, SandboxEvent as Un, SecretsManager as Ur, IntelligenceReportSubjectType as Ut, DeleteOptions as V, AgentProfilePrompt as Vi, SandboxConnection as Vn, SearchOptions as Vr, IntelligenceReportBudget as Vt, DispatchedSession as W, AgentProfileValidationIssue as Wi, SandboxFleetArtifact as Wn, SendSessionMessageOptions as Wr, IntelligenceReportWindow as Wt, DriverType as X, mergeAgentProfiles as Xi, SandboxFleetDriverTimings as Xn, SessionInfo as Xr, McpServerConfig as Xt, DriverInfo as Y, defineInlineResource as Yi, SandboxFleetDriverCapability as Yn, SessionForkOptions as Yr, ListSandboxOptions as Yt, EgressManager as Z, SandboxFleetInfo as Zn, SessionListOptions as Zr, MintScopedTokenOptions as Zt, BatchResult as _, TeeAttestationReport as _i, ProvisionResult as _n, SandboxInfo as _r, FleetExecDispatchResult as _t, AttachSandboxFleetMachineOptions as a, StartupDiagnostics as ai, PreviewLinkManager as an, SandboxFleetOperationsSummary as ar, FileReadError as at, BatchSidecarGroup as b, TeePublicKeyResponse as bi, PublicTemplateInfo as bn, SandboxPortBinding as br, FleetPromptDispatchResult as bt, BackendInfo as c, SubscriptionInfo as ci, ProcessLogEntry as cn, SandboxFleetTraceBundle as cr, FileTreeFile as ct, BackendType as d, TaskSessionChanges as di, ProcessSpawnOptions as dn, SandboxFleetTraceOptions as dr, FileWriteResult as dt, SessionStatus as ei, NetworkManager as en, SandboxFleetMachineMeteredUsage as er, ExecOptions as et, BatchBackend as f, TaskSessionCommitResult as fi, ProcessStatus as fn, SandboxFleetUsage as fr, FleetDispatchCancelResult as ft, BatchOptions as g, TeeAttestationOptions as gi, ProvisionEvent as gn, SandboxFleetWorkspaceSnapshotResult as gr, FleetExecDispatchOptions as gt, BatchEventDataMap as h, TaskSessionProfile as hi, PromptResult as hn, SandboxFleetWorkspaceRestoreResult as hr, FleetDispatchStreamOptions as ht, AttachGpuLeaseOptions as i, SshKeysManager as ii, PreviewLinkInfo as in, SandboxFleetManifestMachine as ir, FileReadBatchResult as it, CompletedTurnResult as j, WriteManyFile as ji, RolloutChildResult as jn, SandboxTerminalManager as jr, GpuLeaseExecOptions as jt, CodeResultPart as k, WaitForRolloutOptions as ki, ResumeOptions as kn, SandboxTerminalCreateOptions as kr, GpuLeaseBilling as kt, BackendManager as l, TaskOptions as li, ProcessManager as ln, SandboxFleetTraceEvent as lr, FileTreeOptions as lt, BatchEvent as m, TaskSessionInfo as mi, PromptOptions as mn, SandboxFleetWorkspaceReconcileResult as mr, FleetDispatchResultBufferOptions as mt, AccessPolicyRule as n, SnapshotOptions as ni, PermissionLevel as nn, SandboxFleetMachineSpec as nr, FileInfo as nt, BackendCapabilities as o, StartupOperation as oi, Process as on, SandboxFleetPolicy as or, FileReadResult as ot, BatchBackendStats as p, TaskSessionFileChange as pi, PromptInputPart as pn, SandboxFleetWorkspace as pr, FleetDispatchResultBuffer as pt, DriveTurnOptions as q, defineAgentProfile as qi, SandboxFleetDispatchFailureClass as qn, SessionBackendCredentials as qr, ListOptions as qt, AddUserOptions as r, SnapshotResult as ri, PermissionsManager as rn, SandboxFleetManifest as rr, FileReadBatchOptions as rt, BackendConfig as s, StorageConfig as si, ProcessInfo as sn, SandboxFleetToken as sr, FileSystem as st, AcceleratorKind as t, SnapshotInfo as ti, NonHostAgentDriverConfig as tn, SandboxFleetMachineRecord as tr, ExecResult as tt, BackendStatus as u, TaskResult as ui, ProcessSignal as un, SandboxFleetTraceExport as ur, FileTreeResult as ut, BatchRunOptions as v, TeeAttestationResponse as vi, ProvisionStatus as vn, SandboxIntelligenceEnvelope as vr, FleetMachineId as vt, BranchOptions as w, UpdateUserOptions as wi, ReapExpiredSandboxFleetsOptions as wn, SandboxResources as wr, GitCommit as wt, BatchTask as x, TokenRefreshHandler as xi, PublicTemplateVersionInfo as xn, SandboxPortPreviewLink as xr, GPU_LEASE_PROVIDER_NAMES as xt, BatchRunRequest as y, TeePublicKey as yi, ProvisionStep as yn, SandboxPermissionsConfig as yr, FleetPromptDispatchOptions as yt, CreateSessionOptions as z, AgentProfileModelHints as zi, SSHCredentials as zn, ScopedTokenScope as zr, InstalledTool as zt };
4963
+ export { EgressManager as $, defineInlineResource as $i, SandboxFleetDriverCapability as $n, SessionForkOptions as $r, McpServerConfig as $t, CodeResult as A, UploadProgress as Ai, ReconcileSandboxFleetsResult as An, SandboxRuntimeProfile as Ar, GitStatus as At, CreateSandboxOptions as B, AgentProfileConnection as Bi, RolloutTurnPart as Bn, SandboxTraceOptions as Br, HostAgentDriverConfig as Bt, BatchTaskUsage as C, TeePublicKey as Ci, PublicTemplateInfo as Cn, SandboxPermissionsConfig as Cr, FleetPromptDispatchResult as Ct, CodeExecutionOptions as D, TurnDriveResult as Di, ReapExpiredSandboxFleetsOptions as Dn, SandboxResourceUsage as Dr, GitCommit as Dt, ChunkedUploadResult as E, ToolsConfig as Ei, PublishPublicTemplateVersionOptions as En, SandboxProfileSummary as Er, GitBranch as Et, CreateIntelligenceReportOptions as F, WriteManyFile as Fi, RolloutChildResult as Fn, SandboxTerminalManager as Fr, GpuLeaseExecResult as Ft, DispatchPromptOptions as G, AgentProfilePrompt as Gi, SandboxConnection as Gn, SearchOptions as Gr, IntelligenceReportCompareTo as Gt, CreateTaskSessionOptions as H, AgentProfileMcpServer as Hi, SSHCommandDescriptor as Hn, ScopedToken as Hr, InstalledTool as Ht, CreateRequestOptions as I, WriteManyOptions as Ii, RolloutOptions as In, SandboxTerminalRequestOptions as Ir, GpuLeaseManager as It, DownloadProgress as J, AgentProfileValidationIssue as Ji, SandboxFleetArtifact as Jn, SendSessionMessageOptions as Jr, JsonValue as Jt, DispatchedSession as K, AgentProfileResourceRef as Ki, SandboxEnvironment as Kn, SecretInfo as Kr, IntelligenceReportSubjectType as Kt, CreateSandboxFleetOptions as L, AgentProfile as Li, RolloutScorer as Ln, SandboxTraceBundle as Lr, GpuLeaseProviderName as Lt, CommitTaskSessionOptions as M, WaitForOptions as Mi, RestoreSnapshotOptions as Mn, SandboxStatus as Mr, GpuLeaseBilling as Mt, CompletedTurnResult as N, WaitForRolloutOptions as Ni, ResumeOptions as Nn, SandboxTerminalCreateOptions as Nr, GpuLeaseCommandResult as Nt, CodeExecutionResult as O, UpdateUserOptions as Oi, ReapExpiredSandboxFleetsResult as On, SandboxResources as Or, GitConfig as Ot, CreateGpuLeaseOptions as P, WriteFileOptions as Pi, Rollout as Pn, SandboxTerminalInfo as Pr, GpuLeaseExecOptions as Pt, DriverType as Q, defineGitHubResource as Qi, SandboxFleetDispatchResponse as Qn, SessionEventStreamOptions as Qr, ListSandboxOptions as Qt, CreateSandboxFleetTokenOptions as R, AgentProfileCapabilities as Ri, RolloutStartResult as Rn, SandboxTraceEvent as Rr, GpuLeaseStatus as Rt, BatchTaskResult as S, TeeAttestationResponse as Si, ProvisionStep as Sn, SandboxIntelligenceEnvelope as Sr, FleetPromptDispatchOptions as St, ChunkedUploadOptions as T, TokenRefreshHandler as Ti, PublishPublicTemplateOptions as Tn, SandboxPortPreviewLink as Tr, GitAuth as Tt, DeleteOptions as U, AgentProfileModelHints as Ui, SSHCredentials as Un, ScopedTokenScope as Ur, IntelligenceReport as Ut, CreateSessionOptions as V, AgentProfileFileMount as Vi, RunCodeOptions as Vn, SandboxUser as Vr, HostAgentRuntimeBackend as Vt, DirectoryPermission as W, AgentProfilePermissionValue as Wi, SandboxClientConfig as Wn, SearchMatch as Wr, IntelligenceReportBudget as Wt, DriverConfig as X, AgentSubagentProfile as Xi, SandboxFleetCostEstimate as Xn, SentSessionMessage as Xr, ListOptions as Xt, DriveTurnOptions as Y, AgentProfileValidationResult as Yi, SandboxFleetArtifactSpec as Yn, SendSessionMessageRequest as Yr, ListMessagesOptions as Yt, DriverInfo as Z, defineAgentProfile as Zi, SandboxFleetDispatchFailureClass as Zn, SessionBackendCredentials as Zr, ListSandboxFleetOptions as Zt, BatchResult as _, TaskSessionFileChange as _i, PromptOptions as _n, SandboxFleetWorkspace as _r, FleetDispatchResultBufferOptions as _t, AttachSandboxFleetMachineOptions as a, SnapshotInfo as ai, PermissionLevel as an, SandboxFleetMachineRecord as ar, FileReadBatchOptions as at, BatchSidecarGroup as b, TeeAttestationOptions as bi, ProvisionResult as bn, SandboxFleetWorkspaceSnapshotResult as br, FleetExecDispatchResult as bt, BackendInfo as c, SshKeysManager as ci, PreviewLinkManager as cn, SandboxFleetManifestMachine as cr, FileReadResult as ct, BackendType as d, StorageConfig as di, ProcessLogEntry as dn, SandboxFleetToken as dr, FileTreeFile as dt, mergeAgentProfiles as ea, SessionInfo as ei, MintScopedTokenOptions as en, SandboxFleetDriverTimings as er, EgressPolicy as et, BatchBackend as f, SubscriptionInfo as fi, ProcessManager as fn, SandboxFleetTraceBundle as fr, FileTreeOptions as ft, BatchOptions as g, TaskSessionCommitResult as gi, PromptInputPart as gn, SandboxFleetUsage as gr, FleetDispatchResultBuffer as gt, BatchEventDataMap as h, TaskSessionChanges as hi, ProcessStatus as hn, SandboxFleetTraceOptions as hr, FleetDispatchCancelResult as ht, AttachGpuLeaseOptions as i, SessionStatus as ii, NonHostAgentDriverConfig as in, SandboxFleetMachineMeteredUsage as ir, FileInfo as it, CodeResultPart as j, UsageInfo as ji, RenameOptions as jn, SandboxRuntimeProfileList as jr, GpuLease as jt, CodeLanguage as k, UploadOptions as ki, ReconcileSandboxFleetsOptions as kn, SandboxRuntimeHealth as kr, GitDiff as kt, BackendManager as l, StartupDiagnostics as li, Process as ln, SandboxFleetOperationsSummary as lr, FileRenameResult as lt, BatchEvent as m, TaskResult as mi, ProcessSpawnOptions as mn, SandboxFleetTraceExport as mr, FileWriteResult as mt, AccessPolicyRule as n, SessionMessage as ni, NetworkConfig as nn, SandboxFleetIntelligenceEnvelope as nr, ExecOptions as nt, BackendCapabilities as o, SnapshotOptions as oi, PermissionsManager as on, SandboxFleetMachineSpec as or, FileReadBatchResult as ot, BatchBackendStats as p, TaskOptions as pi, ProcessSignal as pn, SandboxFleetTraceEvent as pr, FileTreeResult as pt, DownloadOptions as q, AgentProfileResources as qi, SandboxEvent as qn, SecretsManager as qr, IntelligenceReportWindow as qt, AddUserOptions as r, SessionMessageInputPart as ri, NetworkManager as rn, SandboxFleetMachine as rr, ExecResult as rt, BackendConfig as s, SnapshotResult as si, PreviewLinkInfo as sn, SandboxFleetManifest as sr, FileReadError as st, AcceleratorKind as t, SessionListOptions as ti, MkdirOptions as tn, SandboxFleetInfo as tr, EventStreamOptions as tt, BackendStatus as u, StartupOperation as ui, ProcessInfo as un, SandboxFleetPolicy as ur, FileSystem as ut, BatchRunOptions as v, TaskSessionInfo as vi, PromptResult as vn, SandboxFleetWorkspaceReconcileResult as vr, FleetDispatchStreamOptions as vt, BranchOptions as w, TeePublicKeyResponse as wi, PublicTemplateVersionInfo as wn, SandboxPortBinding as wr, GPU_LEASE_PROVIDER_NAMES as wt, BatchTask as x, TeeAttestationReport as xi, ProvisionStatus as xn, SandboxInfo as xr, FleetMachineId as xt, BatchRunRequest as y, TaskSessionProfile as yi, ProvisionEvent as yn, SandboxFleetWorkspaceRestoreResult as yr, FleetExecDispatchOptions as yt, CreateSandboxFleetWithCoordinatorOptions as z, AgentProfileConfidential as zi, RolloutStatus as zn, SandboxTraceExport as zr, GpuType as zt };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/sandbox",
3
- "version": "0.10.4",
3
+ "version": "0.10.5-develop.20260715115519.fee3d86",
4
4
  "description": "Client SDK for the Tangle Sandbox platform - build AI agent applications with dev containers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -88,7 +88,8 @@
88
88
  },
89
89
  "dependencies": {
90
90
  "@tangle-network/agent-core": "^0.4.0",
91
- "@tangle-network/agent-interface": "^0.21.0"
91
+ "@tangle-network/agent-interface": "^0.21.0",
92
+ "@tangle-network/runtime-contracts": "0.1.0"
92
93
  },
93
94
  "peerDependencies": {
94
95
  "@mastra/core": "^1.36.0",