@tangle-network/sandbox 0.9.6 → 0.10.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.
@@ -343,6 +343,24 @@ interface CreateSandboxOptions {
343
343
  * @default false
344
344
  */
345
345
  bare?: boolean;
346
+ /**
347
+ * Provision a public preview URL for this sandbox (the default). Set to
348
+ * `false` for the fast lane: the server skips the public-edge tunnel
349
+ * (public URL allocation, tunnel readiness, and scarce public IP capacity),
350
+ * which is the largest single term in create latency. Use it for workloads
351
+ * that reach the sandbox only through the SDK / exec — benchmark fleets, CI,
352
+ * RL rollouts — where no browser-facing URL is needed. `exec()`, streaming,
353
+ * `stop`/`resume`/`branch` are unaffected; only the public preview URL is
354
+ * absent. Omit (or leave `true`) for interactive sandboxes.
355
+ *
356
+ * @default true
357
+ * @example
358
+ * ```typescript
359
+ * // 1000-way benchmark fork — no preview URLs, faster + no subnet pressure
360
+ * await client.sandboxes.create({ publicEdge: false })
361
+ * ```
362
+ */
363
+ publicEdge?: boolean;
346
364
  /**
347
365
  * Infrastructure driver selection.
348
366
  * Controls how the sandbox is provisioned and isolated.
@@ -433,6 +451,15 @@ interface CreateSandboxOptions {
433
451
  name?: string;
434
452
  /** Resource limits (CPU cores, memory, disk) */
435
453
  resources?: SandboxResources;
454
+ /**
455
+ * Attach an on-demand GPU worker during sandbox creation.
456
+ *
457
+ * Requires `resources.accelerator` so the workload shape and the lease
458
+ * spend caps are both explicit. Docker and Firecracker sandboxes use the
459
+ * same lease path; the GPU is a temporary external worker, not host
460
+ * placement.
461
+ */
462
+ gpuLease?: CreateGpuLeaseOptions;
436
463
  /** Environment variables injected into the sandbox */
437
464
  env?: Record<string, string>;
438
465
  /**
@@ -472,6 +499,17 @@ interface CreateSandboxOptions {
472
499
  * instead of Tangle's managed storage.
473
500
  */
474
501
  storage?: StorageConfig;
502
+ /**
503
+ * Run as a throwaway sandbox: the home directory is NOT persisted across restarts.
504
+ *
505
+ * By default an egress-enabled sandbox is provisioned a persistent home
506
+ * volume (so a stop/resume workspace keeps its state). Set `ephemeral: true` for
507
+ * a one-shot run — a benchmark case, a CI job, any box that produces output and
508
+ * is deleted — to skip that volume and run on a writable scratch home. Egress
509
+ * still works; you only lose the home directory on restart, which a throwaway box
510
+ * never relies on. Independent of `storage`/snapshots (durability stays opt-in).
511
+ */
512
+ ephemeral?: boolean;
475
513
  /** Snapshot ID to restore from when creating the sandbox */
476
514
  fromSnapshot?: string;
477
515
  /** Source sandbox ID that owns the snapshot (required when fromSnapshot is set) */
@@ -742,6 +780,8 @@ interface SandboxInfo {
742
780
  expiresAt?: Date;
743
781
  /** Error message if status is 'failed' */
744
782
  error?: string;
783
+ /** GPU lease attached during sandbox creation, when requested. */
784
+ gpuLease?: GpuLease;
745
785
  /**
746
786
  * Startup phase breakdown, present only on the create response (the
747
787
  * platform emits it once, at provision time). Use
@@ -754,6 +794,110 @@ interface SandboxInfo {
754
794
  /** Source of the egress policy */
755
795
  egressPolicySource?: "sandbox" | "team" | "platform";
756
796
  }
797
+ /** Basic health reported by the runtime inside a sandbox. */
798
+ interface SandboxRuntimeHealth {
799
+ status: string;
800
+ docker: {
801
+ enabled: boolean;
802
+ status: string;
803
+ dockerHost?: string;
804
+ error?: string;
805
+ };
806
+ backends: {
807
+ total: number;
808
+ byType: Record<string, number>;
809
+ pending: number;
810
+ };
811
+ timestamp: string;
812
+ }
813
+ /** Public preview link associated with a listening runtime port. */
814
+ interface SandboxPortPreviewLink {
815
+ previewId: string;
816
+ url: string;
817
+ status: string;
818
+ }
819
+ /** One process listening on a port inside a sandbox. */
820
+ interface SandboxPortBinding {
821
+ pid: number;
822
+ processName: string;
823
+ commandPath: string;
824
+ port: number;
825
+ protocol: "tcp" | "udp";
826
+ localAddress: string;
827
+ family: "tcp4" | "tcp6" | "udp4" | "udp6";
828
+ allowlisted: boolean;
829
+ firstSeenAt: string;
830
+ lastSeenAt: string;
831
+ previewLink?: SandboxPortPreviewLink;
832
+ }
833
+ /** Options for creating an interactive terminal. */
834
+ interface SandboxTerminalCreateOptions {
835
+ name?: string;
836
+ description?: string;
837
+ shell?: string;
838
+ cwd?: string;
839
+ cols?: number;
840
+ rows?: number;
841
+ }
842
+ /** Runtime request context used to attribute terminal events to an agent session. */
843
+ interface SandboxTerminalRequestOptions {
844
+ sessionId?: string;
845
+ }
846
+ /** Interactive terminal metadata returned by the runtime. */
847
+ interface SandboxTerminalInfo {
848
+ sessionId: string;
849
+ connectionId?: string;
850
+ name?: string;
851
+ description?: string;
852
+ shell?: string;
853
+ command?: string;
854
+ cwd?: string;
855
+ cols?: number;
856
+ rows?: number;
857
+ createdAt?: string;
858
+ lastActivityAt?: string;
859
+ isRunning?: boolean;
860
+ exitCode?: number;
861
+ exitSignal?: string;
862
+ /** WebSocket path for terminal input/output. */
863
+ streamUrl?: string;
864
+ history?: unknown[];
865
+ }
866
+ /** Interactive terminal operations. Input/output flows over `streamUrl`. */
867
+ interface SandboxTerminalManager {
868
+ create(options?: SandboxTerminalCreateOptions, request?: SandboxTerminalRequestOptions): Promise<SandboxTerminalInfo>;
869
+ /** Send input through the runtime's HTTP fallback for an existing terminal. */
870
+ input(terminalId: string, data: string, request?: SandboxTerminalRequestOptions): Promise<void>;
871
+ list(): Promise<SandboxTerminalInfo[]>;
872
+ get(sessionId: string): Promise<SandboxTerminalInfo | null>;
873
+ }
874
+ /** Runtime-local agent profile. */
875
+ interface SandboxRuntimeProfile {
876
+ name: string;
877
+ description?: string;
878
+ systemPrompt?: string;
879
+ tools?: string[];
880
+ mcpServers?: string[];
881
+ env?: Record<string, string>;
882
+ model?: {
883
+ provider?: string;
884
+ model?: string;
885
+ };
886
+ }
887
+ /** Runtime-local profile listing and selected default. */
888
+ interface SandboxRuntimeProfileList {
889
+ profiles: SandboxRuntimeProfile[];
890
+ defaultProfile?: string;
891
+ }
892
+ /** Profile summary returned before a sandbox runtime exists. */
893
+ interface SandboxProfileSummary {
894
+ id: string;
895
+ name: string;
896
+ description?: string;
897
+ model?: string;
898
+ tags?: string[];
899
+ extends?: string;
900
+ }
757
901
  /**
758
902
  * Raw TEE attestation evidence returned by the sandbox runtime.
759
903
  *
@@ -1383,6 +1527,12 @@ interface ResumeOptions {
1383
1527
  interface UsageInfo {
1384
1528
  /** Total compute minutes used today */
1385
1529
  computeMinutes: number;
1530
+ /** GPU lease seconds billed today */
1531
+ gpuSeconds: number;
1532
+ /** Customer-billed GPU lease spend today in USD */
1533
+ gpuCostUsd: number;
1534
+ /** Provider GPU lease cost basis today in USD */
1535
+ gpuProviderCostUsd: number;
1386
1536
  /** Number of currently active sandboxes */
1387
1537
  activeSandboxes: number;
1388
1538
  /** Total sandboxes created (lifetime) */
@@ -1543,6 +1693,8 @@ type SessionStatus = "queued" | "running" | "completed" | "failed" | "cancelled"
1543
1693
  interface SessionInfo {
1544
1694
  /** Stable session id assigned by the sandbox runtime. */
1545
1695
  id: string;
1696
+ /** Parent session id when this session was forked from another session. */
1697
+ parentId?: string;
1546
1698
  /** Current lifecycle state. */
1547
1699
  status: SessionStatus;
1548
1700
  /** Backend identifier (e.g. provider name). */
@@ -1570,6 +1722,136 @@ interface SessionListOptions {
1570
1722
  /** Filter by backend identifier. */
1571
1723
  backend?: string;
1572
1724
  }
1725
+ /** Options for creating a runtime agent session. */
1726
+ interface CreateSessionOptions {
1727
+ title?: string;
1728
+ parentId?: string;
1729
+ backend: BackendConfig;
1730
+ }
1731
+ /** Backend credentials forwarded to the platform if a sandbox must restart. */
1732
+ interface SessionBackendCredentials {
1733
+ apiKey: string;
1734
+ baseUrl?: string;
1735
+ }
1736
+ /** One content part accepted by the runtime session message endpoint. */
1737
+ type SessionMessageInputPart = PromptInputPart | {
1738
+ type: "reasoning";
1739
+ text: string;
1740
+ } | {
1741
+ type: "tool";
1742
+ tool: string;
1743
+ state: {
1744
+ status: "pending" | "running" | "completed" | "failed";
1745
+ input?: unknown;
1746
+ output?: unknown;
1747
+ };
1748
+ } | {
1749
+ type: "step-start";
1750
+ } | {
1751
+ type: "step-finish";
1752
+ reason?: string;
1753
+ tokens?: {
1754
+ total?: number;
1755
+ input?: number;
1756
+ output?: number;
1757
+ reasoning?: number;
1758
+ cache?: {
1759
+ write?: number;
1760
+ read?: number;
1761
+ };
1762
+ };
1763
+ cost?: number;
1764
+ };
1765
+ /** Message body accepted by `SandboxSession.sendMessage`. */
1766
+ interface SendSessionMessageRequest {
1767
+ messageId?: string;
1768
+ parts: SessionMessageInputPart[];
1769
+ system?: string;
1770
+ agent?: string;
1771
+ model?: {
1772
+ providerId: string;
1773
+ modelId: string;
1774
+ };
1775
+ reasoningEffort?: "low" | "medium" | "high";
1776
+ turnId?: string;
1777
+ interactions?: BackendConfig["interactions"];
1778
+ }
1779
+ /** Per-call controls for `SandboxSession.sendMessage`. */
1780
+ interface SendSessionMessageOptions {
1781
+ credentials?: SessionBackendCredentials;
1782
+ timeoutMs?: number;
1783
+ signal?: AbortSignal;
1784
+ }
1785
+ /** Response returned after a session message finishes processing. */
1786
+ interface SentSessionMessage {
1787
+ info: {
1788
+ id: string;
1789
+ role: "user" | "assistant" | "system";
1790
+ timestamp?: string;
1791
+ };
1792
+ parts: unknown[];
1793
+ }
1794
+ /** Canonical portable profile attached to a task session. */
1795
+ type TaskSessionProfile = AgentProfile & {
1796
+ name: string;
1797
+ };
1798
+ /** Options for creating an isolated background task session. */
1799
+ interface CreateTaskSessionOptions {
1800
+ sessionId: string;
1801
+ backend: BackendConfig;
1802
+ title: string;
1803
+ profile?: TaskSessionProfile;
1804
+ parentSessionId?: string;
1805
+ isolateFileWrites?: boolean;
1806
+ }
1807
+ /** Task-session metadata returned at creation time. */
1808
+ interface TaskSessionInfo {
1809
+ id: string;
1810
+ title?: string;
1811
+ parentSessionId?: string;
1812
+ worktreeInfo?: {
1813
+ worktreePath: string;
1814
+ branchName: string;
1815
+ baseCommitSha: string;
1816
+ };
1817
+ profile?: TaskSessionProfile;
1818
+ }
1819
+ /** One changed file in an isolated task session. */
1820
+ interface TaskSessionFileChange {
1821
+ file: string;
1822
+ operation: "added" | "modified" | "deleted";
1823
+ additions: number;
1824
+ deletions: number;
1825
+ }
1826
+ /** Current diff and commit history for an isolated task session. */
1827
+ interface TaskSessionChanges {
1828
+ sessionId: string;
1829
+ files: TaskSessionFileChange[];
1830
+ diff: string;
1831
+ commits: Array<{
1832
+ sha: string;
1833
+ message: string;
1834
+ date: string;
1835
+ }>;
1836
+ worktreeInfo: {
1837
+ worktreePath: string;
1838
+ branchName: string;
1839
+ baseCommitSha: string;
1840
+ headCommitSha?: string;
1841
+ };
1842
+ }
1843
+ /** Options for merging task-session changes into the main workspace. */
1844
+ interface CommitTaskSessionOptions {
1845
+ message?: string;
1846
+ files?: string[];
1847
+ }
1848
+ /** Result of merging task-session changes into the main workspace. */
1849
+ interface TaskSessionCommitResult {
1850
+ success: true;
1851
+ commitSha?: string;
1852
+ conflicts?: string[];
1853
+ appliedFiles: number;
1854
+ }
1573
1855
  /**
1574
1856
  * Options for `SandboxSession.events()` streaming.
1575
1857
  */
@@ -1604,6 +1886,28 @@ interface ListMessagesOptions {
1604
1886
  /** Only return messages newer than this Unix-ms timestamp. */
1605
1887
  since?: number;
1606
1888
  }
1889
+ /**
1890
+ * Options for `box.session(id).fork()` — create a new session from an
1891
+ * existing conversation, optionally at a message boundary.
1892
+ */
1893
+ interface SessionForkOptions {
1894
+ /** Fork at this message boundary. */
1895
+ messageId?: string;
1896
+ /** Target backend type for cross-backend forks. Defaults to parent backend. */
1897
+ targetBackend?: BackendType;
1898
+ /** Model override for the target backend. */
1899
+ targetModel?: {
1900
+ provider?: string;
1901
+ model?: string;
1902
+ apiKey?: string;
1903
+ baseUrl?: string;
1904
+ };
1905
+ /**
1906
+ * Files to include. The runtime currently rejects non-empty file lists;
1907
+ * exposed here so the SDK type tracks the wire contract exactly.
1908
+ */
1909
+ files?: string[];
1910
+ }
1607
1911
  /**
1608
1912
  * One message on a session — user, assistant, or system. The metadata
1609
1913
  * field carries the durability marker set by the sidecar:
@@ -1817,6 +2121,10 @@ interface BatchTask {
1817
2121
  /** Per-task timeout in milliseconds */
1818
2122
  timeoutMs?: number;
1819
2123
  }
2124
+ /** Backend configuration accepted by batch execution, including named profiles. */
2125
+ type BatchBackend = Omit<Partial<BackendConfig>, "type"> & {
2126
+ type?: BackendType | `${BackendType}:${string}`;
2127
+ };
1820
2128
  /**
1821
2129
  * Options for batch execution.
1822
2130
  */
@@ -1831,11 +2139,38 @@ interface BatchOptions {
1831
2139
  * Use `backend.profile` with a string for a named profile or a provider-neutral
1832
2140
  * `AgentProfile` object for inline profile configuration.
1833
2141
  */
1834
- backend?: Partial<BackendConfig>;
2142
+ backend?: BatchBackend;
2143
+ /** Run every task against each backend for comparison. */
2144
+ backends?: BatchBackend[];
2145
+ /** User identifier attached to the batch for platform attribution. */
2146
+ userId?: string;
2147
+ /** Partner identifier attached to the batch for credit attribution. */
2148
+ partnerId?: string;
2149
+ /** Request identifier used in events and metrics. */
2150
+ identifier?: string;
2151
+ /** Workload class used by capacity and lifecycle policy. */
2152
+ executionClass?: "project" | "simulation" | "background";
2153
+ /** Capacity to provision before execution starts. */
2154
+ desiredCapacity?: number;
2155
+ /** Maximum time to wait for requested capacity. */
2156
+ provisionTimeoutMs?: number;
1835
2157
  /** Keep sandboxes alive after completion (default: false) */
1836
2158
  persistent?: boolean;
2159
+ /** Lifecycle policy for persistent batch sandboxes. */
2160
+ lifecycle?: {
2161
+ idleTimeoutMs?: number;
2162
+ coldTimeoutMs?: number;
2163
+ };
2164
+ /** Use deterministic mock model responses. Intended for tests. */
2165
+ mock?: boolean;
1837
2166
  /** Milliseconds to keep non-persistent batch sandboxes alive after completion. */
1838
2167
  graceMs?: number;
2168
+ /** Repository cloned into persistent batch workspaces. */
2169
+ git?: GitConfig;
2170
+ /** Full replacement for the default agent system prompt. */
2171
+ systemPrompt?: string;
2172
+ /** Instructions appended to the default agent system prompt. */
2173
+ instructions?: string;
1839
2174
  /**
1840
2175
  * AbortSignal to cancel the batch mid-stream. When aborted, the HTTP
1841
2176
  * request to `/batch/run` is torn down; the SSE generator stops
@@ -1847,6 +2182,14 @@ interface BatchOptions {
1847
2182
  */
1848
2183
  signal?: AbortSignal;
1849
2184
  }
2185
+ /** Complete request accepted by `runBatch` and `streamBatch`. */
2186
+ interface BatchRunRequest extends Omit<BatchOptions, "signal"> {
2187
+ tasks: BatchTask[];
2188
+ }
2189
+ /** Per-call controls that are not serialized into a batch request. */
2190
+ interface BatchRunOptions {
2191
+ signal?: AbortSignal;
2192
+ }
1850
2193
  /**
1851
2194
  * Result of a single task in a batch.
1852
2195
  */
@@ -1865,6 +2208,16 @@ interface BatchTaskResult {
1865
2208
  retries: number;
1866
2209
  /** Token usage if available */
1867
2210
  tokensUsed?: number;
2211
+ /** Backend identifier for multi-backend batches. */
2212
+ backend?: string;
2213
+ /** Human-readable backend label emitted by the server. */
2214
+ backendLabel?: string;
2215
+ /** Model identifier emitted by the server. */
2216
+ backendModel?: string;
2217
+ /** Runtime session created for this task execution. */
2218
+ sessionId?: string;
2219
+ /** Sandbox used for this task execution. */
2220
+ sandboxId?: string;
1868
2221
  }
1869
2222
  /**
1870
2223
  * Summary of batch execution.
@@ -1883,23 +2236,145 @@ interface BatchResult {
1883
2236
  /** Individual task results */
1884
2237
  results: BatchTaskResult[];
1885
2238
  }
1886
- /**
1887
- * SSE event from batch streaming.
1888
- */
1889
- interface BatchEvent {
1890
- /** Event type (batch.started, task.completed, etc.) */
1891
- type: string;
1892
- /** Event data */
1893
- data: Record<string, unknown>;
1894
- /**
1895
- * Optional `id:` from the SSE frame. Present at runtime whenever
1896
- * the server emits an `id:` line (used by EventSource-style
1897
- * reconnection). Declared optional because the batch protocol
1898
- * doesn't currently emit it — downstream consumers that want to
1899
- * implement resume should feature-detect.
1900
- */
1901
- id?: string;
2239
+ /** Token and tool usage emitted when one batch task completes. */
2240
+ interface BatchTaskUsage {
2241
+ inputTokens: number;
2242
+ outputTokens: number;
2243
+ cacheReadTokens?: number;
2244
+ cacheWriteTokens?: number;
2245
+ toolCallCount?: number;
2246
+ }
2247
+ /** Per-backend aggregate emitted by `batch.completed`. */
2248
+ interface BatchBackendStats {
2249
+ backend: string;
2250
+ backendLabel?: string;
2251
+ backendModel?: string;
2252
+ success: number;
2253
+ failure: number;
2254
+ retries: number;
2255
+ successRate: number;
2256
+ }
2257
+ /** Sidecars allocated to one backend configuration. */
2258
+ interface BatchSidecarGroup {
2259
+ backend: string;
2260
+ sidecarIds: string[];
1902
2261
  }
2262
+ interface BatchTaskEventIdentity {
2263
+ taskId: string;
2264
+ backend: string;
2265
+ backendLabel?: string;
2266
+ backendModel?: string;
2267
+ }
2268
+ /** Data payloads keyed by the SSE event name emitted by `/batch/run`. */
2269
+ interface BatchEventDataMap {
2270
+ "batch.provisioning": {
2271
+ desiredCapacity: number;
2272
+ currentCapacity: number;
2273
+ provisionTimeoutMs: number;
2274
+ };
2275
+ "batch.provisioned": {
2276
+ capacity: number;
2277
+ };
2278
+ "batch.started": {
2279
+ taskCount: number;
2280
+ backendCount: number;
2281
+ totalExecutions: number;
2282
+ maxConcurrent: number;
2283
+ scalingMode: string;
2284
+ backends: string[];
2285
+ };
2286
+ "sidecars.allocated": {
2287
+ count: number;
2288
+ groups: BatchSidecarGroup[];
2289
+ };
2290
+ "batch.completed": {
2291
+ taskCount: number;
2292
+ backendCount: number;
2293
+ totalExecutions: number;
2294
+ totalSuccess: number;
2295
+ totalFailure: number;
2296
+ totalRetries: number;
2297
+ successRate: number;
2298
+ byBackend: BatchBackendStats[];
2299
+ };
2300
+ "batch.failed": {
2301
+ error: string;
2302
+ backends?: string[];
2303
+ };
2304
+ "batch.persistent": {
2305
+ message: string;
2306
+ sidecarCount: number;
2307
+ };
2308
+ "batch.grace_period": {
2309
+ message: string;
2310
+ sidecarCount: number;
2311
+ graceMs: number;
2312
+ sidecarIds: string[];
2313
+ };
2314
+ "task.started": BatchTaskEventIdentity & {
2315
+ sidecarId: string;
2316
+ projectRef?: string;
2317
+ attempt: number;
2318
+ };
2319
+ "task.message.delta": BatchTaskEventIdentity & {
2320
+ sidecarId: string;
2321
+ projectRef?: string;
2322
+ value: string;
2323
+ part: Record<string, unknown>;
2324
+ };
2325
+ "task.reasoning": BatchTaskEventIdentity & {
2326
+ sidecarId: string;
2327
+ projectRef?: string;
2328
+ value: string;
2329
+ part: Record<string, unknown>;
2330
+ };
2331
+ "task.tool.updated": BatchTaskEventIdentity & {
2332
+ sidecarId: string;
2333
+ projectRef?: string;
2334
+ part: Record<string, unknown>;
2335
+ };
2336
+ "task.completed": BatchTaskEventIdentity & {
2337
+ durationMs: number;
2338
+ attempt: number;
2339
+ retries: number;
2340
+ sidecarId: string;
2341
+ projectRef?: string;
2342
+ resultSummary?: string;
2343
+ sessionId?: string;
2344
+ usage: BatchTaskUsage;
2345
+ };
2346
+ "task.failed": BatchTaskEventIdentity & {
2347
+ durationMs: number;
2348
+ attempt: number;
2349
+ retries: number;
2350
+ error: string;
2351
+ sidecarId?: string;
2352
+ };
2353
+ "task.retry": BatchTaskEventIdentity & {
2354
+ attempt: number;
2355
+ maxRetries: number;
2356
+ error: string;
2357
+ delayMs: number;
2358
+ };
2359
+ "backend.completed": {
2360
+ backend: string;
2361
+ backendLabel?: string;
2362
+ backendModel?: string;
2363
+ success: number;
2364
+ failure: number;
2365
+ retries: number;
2366
+ successRate: number;
2367
+ };
2368
+ "sidecar.releasing": {
2369
+ sidecarId: string;
2370
+ };
2371
+ }
2372
+ /** Discriminated SSE event from a batch execution. */
2373
+ type BatchEvent = { [K in keyof BatchEventDataMap]: {
2374
+ type: K;
2375
+ data: BatchEventDataMap[K]; /** Optional SSE id used by reconnecting consumers. */
2376
+ id?: string;
2377
+ } }[keyof BatchEventDataMap];
1903
2378
  /**
1904
2379
  * Stable worker identifier inside a sandbox fleet.
1905
2380
  *
@@ -2421,74 +2896,24 @@ interface ListSandboxFleetOptions extends ListSandboxOptions {
2421
2896
  fleetId: string;
2422
2897
  }
2423
2898
  /**
2424
- * Options for creating a checkpoint.
2425
- */
2426
- interface CheckpointOptions {
2427
- /** Tags to apply to the checkpoint */
2428
- tags?: string[];
2429
- /** Keep sandbox running after checkpoint (default: false - sandbox stops) */
2430
- leaveRunning?: boolean;
2431
- /** Also create a filesystem snapshot for data consistency */
2432
- includeSnapshot?: boolean;
2433
- }
2434
- /**
2435
- * Result of a checkpoint operation.
2436
- */
2437
- interface CheckpointResult {
2438
- /** Unique checkpoint identifier */
2439
- checkpointId: string;
2440
- /** When the checkpoint was created */
2441
- createdAt: Date;
2442
- /** Size of checkpoint in bytes (memory state) */
2443
- sizeBytes?: number;
2444
- /** Tags applied to the checkpoint */
2445
- tags: string[];
2446
- }
2447
- /**
2448
- * Information about an existing checkpoint.
2449
- */
2450
- interface CheckpointInfo {
2451
- /** Unique checkpoint identifier */
2452
- checkpointId: string;
2453
- /** Sandbox this checkpoint belongs to */
2454
- sandboxId: string;
2455
- /** When the checkpoint was created */
2456
- createdAt: Date;
2457
- /** Tags applied to the checkpoint */
2458
- tags: string[];
2459
- /** Size of checkpoint in bytes */
2460
- sizeBytes?: number;
2461
- /** Whether checkpoint includes memory state */
2462
- hasMemoryState: boolean;
2463
- /** Whether checkpoint includes filesystem snapshot */
2464
- hasFilesystemSnapshot: boolean;
2465
- }
2466
- /**
2467
- * Options for forking a sandbox from a checkpoint.
2899
+ * Options for branching a running sandbox into N copy-on-write children.
2900
+ *
2901
+ * Branch forks a LIVE VM's memory into many children at once (Firecracker
2902
+ * UFFD copy-on-write): the children share the parent's clean pages and the
2903
+ * parent stays running. For durable filesystem state use snapshots instead.
2468
2904
  */
2469
- interface ForkOptions {
2470
- /** Name for the forked sandbox */
2471
- name?: string;
2472
- /** Override environment variables in the fork */
2905
+ interface BranchOptions {
2906
+ /** Override environment variables in every child. */
2473
2907
  env?: Record<string, string>;
2474
- /** Override resource limits in the fork */
2475
- resources?: SandboxResources;
2476
- /** Custom metadata for the fork */
2908
+ /**
2909
+ * Custom metadata applied to every child.
2910
+ *
2911
+ * Resource overrides are intentionally NOT accepted: a live branch restores
2912
+ * the parent's memory copy-on-write into each child, which requires
2913
+ * matching resources — children always inherit the parent's.
2914
+ */
2477
2915
  metadata?: Record<string, unknown>;
2478
2916
  }
2479
- /**
2480
- * Result of a fork operation.
2481
- */
2482
- interface ForkResult {
2483
- /** The newly created sandbox instance */
2484
- sandbox: SandboxInfo;
2485
- /** The checkpoint that was forked from */
2486
- sourceCheckpoint: CheckpointInfo;
2487
- /** ID of the source sandbox */
2488
- sourceId: string;
2489
- /** Time taken to fork in milliseconds */
2490
- forkTimeMs: number;
2491
- }
2492
2917
  /**
2493
2918
  * Infrastructure driver identifier.
2494
2919
  *
@@ -2520,6 +2945,104 @@ interface SandboxAccelerator {
2520
2945
  /** Minimum device memory in megabytes when the exact GPU class is flexible. */
2521
2946
  memoryMB?: number;
2522
2947
  }
2948
+ declare const GPU_LEASE_PROVIDER_NAMES: readonly ["runpod", "vast-ai", "lambda-labs", "tensordock", "paperspace", "aws", "gcp", "azure", "crusoe", "fluidstack"];
2949
+ type GpuLeaseProviderName = (typeof GPU_LEASE_PROVIDER_NAMES)[number];
2950
+ interface GpuLeaseProviderSelection {
2951
+ strategy: "explicit" | "cheapest";
2952
+ selectedProvider: GpuLeaseProviderName;
2953
+ requestedProvider?: GpuLeaseProviderName;
2954
+ candidates: Array<{
2955
+ provider: GpuLeaseProviderName;
2956
+ accelerator: SandboxAccelerator & {
2957
+ count: number;
2958
+ };
2959
+ providerInstanceType?: string;
2960
+ region?: string;
2961
+ pricingSource?: "live" | "configured" | "static";
2962
+ providerCostPerHourUsd: number;
2963
+ customerPricePerHourUsd: number;
2964
+ maxLifetimeSeconds: number;
2965
+ estimatedProviderCostUsd: number;
2966
+ estimatedCustomerCostUsd: number;
2967
+ }>;
2968
+ rejected: Array<{
2969
+ provider: GpuLeaseProviderName;
2970
+ error: string;
2971
+ }>;
2972
+ }
2973
+ type GpuLeaseStatus = "provisioning" | "ready" | "detaching" | "destroyed" | "failed";
2974
+ interface GpuLeaseBilling {
2975
+ seconds: number;
2976
+ providerCostUsd: number;
2977
+ customerCostUsd: number;
2978
+ providerCostPerHourUsd: number;
2979
+ customerPricePerHourUsd: number;
2980
+ startedAt: string;
2981
+ stoppedAt: string;
2982
+ }
2983
+ interface GpuLease {
2984
+ id: string;
2985
+ projectRef: string;
2986
+ ownerUserId: string;
2987
+ productId?: string;
2988
+ provider: GpuLeaseProviderName;
2989
+ providerLeaseId?: string;
2990
+ providerInstanceType?: string;
2991
+ region?: string;
2992
+ workerUrl?: string;
2993
+ status: GpuLeaseStatus;
2994
+ accelerator: SandboxAccelerator & {
2995
+ count: number;
2996
+ };
2997
+ image?: string;
2998
+ maxSpendUsd: number;
2999
+ maxLifetimeSeconds: number;
3000
+ idleTimeoutSeconds?: number;
3001
+ providerCostPerHourUsd?: number;
3002
+ customerPricePerHourUsd?: number;
3003
+ estimatedProviderCostUsd?: number;
3004
+ estimatedCustomerCostUsd?: number;
3005
+ providerSelection?: GpuLeaseProviderSelection;
3006
+ createdAt: string;
3007
+ updatedAt: string;
3008
+ readyAt?: string;
3009
+ lastUsedAt?: string;
3010
+ destroyedAt?: string;
3011
+ failure?: string;
3012
+ billing?: GpuLeaseBilling;
3013
+ }
3014
+ interface AttachGpuLeaseOptions {
3015
+ provider?: GpuLeaseProviderName;
3016
+ accelerator: SandboxAccelerator;
3017
+ image?: string;
3018
+ env?: Record<string, string>;
3019
+ maxSpendUsd: number;
3020
+ maxLifetimeSeconds: number;
3021
+ idleTimeoutSeconds?: number;
3022
+ }
3023
+ type CreateGpuLeaseOptions = Omit<AttachGpuLeaseOptions, "accelerator">;
3024
+ interface GpuLeaseExecOptions {
3025
+ command: string;
3026
+ timeoutMs?: number;
3027
+ env?: Record<string, string>;
3028
+ cwd?: string;
3029
+ }
3030
+ interface GpuLeaseCommandResult {
3031
+ exitCode: number;
3032
+ stdout: string;
3033
+ stderr: string;
3034
+ durationMs?: number;
3035
+ }
3036
+ interface GpuLeaseExecResult {
3037
+ lease: GpuLease;
3038
+ result: GpuLeaseCommandResult;
3039
+ }
3040
+ interface GpuLeaseManager {
3041
+ attach(options: AttachGpuLeaseOptions): Promise<GpuLease>;
3042
+ list(): Promise<GpuLease[]>;
3043
+ exec(leaseId: string, options: GpuLeaseExecOptions): Promise<GpuLeaseExecResult>;
3044
+ detach(leaseId: string): Promise<GpuLease>;
3045
+ }
2523
3046
  /**
2524
3047
  * Infrastructure driver configuration.
2525
3048
  *
@@ -2727,6 +3250,42 @@ interface BackendConfig {
2727
3250
  /** Server port (auto-assigned if not specified) */port?: number; /** Server hostname */
2728
3251
  hostname?: string;
2729
3252
  };
3253
+ /**
3254
+ * Enable structured human interactions by kind.
3255
+ *
3256
+ * Each enabled kind surfaces as an `interaction` event on the session stream
3257
+ * and is answered through the same `/agents/sessions/{id}/interactions`
3258
+ * route. The object form is the public shape:
3259
+ * `{ question: true }`, `{ permission: true }`, `{ plan: true }`.
3260
+ *
3261
+ * Use `{ question: true }` when the agent should ask the user clarifying
3262
+ * questions without enabling permission prompts. Unsupported requested kinds
3263
+ * reject session initialization loudly rather than silently disappearing.
3264
+ *
3265
+ * @example question-enabled codex session
3266
+ * ```typescript
3267
+ * backend: { type: "codex", interactions: { question: true } }
3268
+ * ```
3269
+ *
3270
+ * @default false
3271
+ */
3272
+ interactions?: {
3273
+ permission?: boolean;
3274
+ question?: boolean;
3275
+ plan?: boolean;
3276
+ };
3277
+ /** Runtime session metadata used for attribution and workspace selection. */
3278
+ metadata?: {
3279
+ containerType?: string;
3280
+ telemetry?: {
3281
+ otlp: {
3282
+ endpoint: string;
3283
+ headers: string;
3284
+ };
3285
+ resourceAttributes: Record<string, string>;
3286
+ };
3287
+ [key: string]: unknown;
3288
+ };
2730
3289
  }
2731
3290
  /**
2732
3291
  * Backend capabilities.
@@ -3700,6 +4259,71 @@ interface FileInfo {
3700
4259
  /** Last access time */
3701
4260
  accessTime: Date;
3702
4261
  }
4262
+ /** File metadata returned by the recursive workspace tree endpoint. */
4263
+ interface FileTreeFile {
4264
+ path: string;
4265
+ size: number;
4266
+ /** File modification time as Unix milliseconds. */
4267
+ mtime: number;
4268
+ }
4269
+ /** Options for recursively scanning a workspace tree. */
4270
+ interface FileTreeOptions {
4271
+ sessionId?: string;
4272
+ maxDepth?: number;
4273
+ }
4274
+ /** Recursive workspace tree with scan statistics. */
4275
+ interface FileTreeResult {
4276
+ root: string;
4277
+ directories: string[];
4278
+ files: FileTreeFile[];
4279
+ stats: {
4280
+ totalDirectories: number;
4281
+ totalFiles: number;
4282
+ scanDurationMs: number;
4283
+ truncated: boolean;
4284
+ };
4285
+ }
4286
+ /** File content and metadata returned by a batch read. */
4287
+ interface FileReadResult {
4288
+ path: string;
4289
+ content: string;
4290
+ encoding: "utf8" | "base64";
4291
+ hash: string;
4292
+ size: number;
4293
+ /** File modification time as Unix milliseconds. */
4294
+ mtime: number;
4295
+ }
4296
+ /** One file that could not be read during a partial-success batch. */
4297
+ interface FileReadError {
4298
+ path: string;
4299
+ error: string;
4300
+ code?: string;
4301
+ }
4302
+ /** Options for reading files in a batch. */
4303
+ interface FileReadBatchOptions {
4304
+ encoding?: "utf8" | "base64";
4305
+ sessionId?: string;
4306
+ }
4307
+ /** Partial-success result from a batch file read. */
4308
+ interface FileReadBatchResult {
4309
+ files: FileReadResult[];
4310
+ errors: FileReadError[];
4311
+ stats: {
4312
+ requested: number;
4313
+ succeeded: number;
4314
+ failed: number;
4315
+ };
4316
+ }
4317
+ /** Metadata returned after a successful file write. */
4318
+ interface FileWriteResult {
4319
+ path: string;
4320
+ hash: string;
4321
+ size: number;
4322
+ /** File modification time as Unix milliseconds. */
4323
+ mtime: number;
4324
+ /** Encoding echoed by runtimes that include it in write responses. */
4325
+ encoding?: "utf8" | "base64";
4326
+ }
3703
4327
  /**
3704
4328
  * Options for uploading files.
3705
4329
  */
@@ -3750,6 +4374,8 @@ interface ListOptions {
3750
4374
  all?: boolean;
3751
4375
  /** Include full metadata (like ls -l) */
3752
4376
  long?: boolean;
4377
+ /** Task session id for session-specific workspace isolation. */
4378
+ sessionId?: string;
3753
4379
  }
3754
4380
  /**
3755
4381
  * Options for creating directories.
@@ -3766,6 +4392,8 @@ interface MkdirOptions {
3766
4392
  interface DeleteOptions {
3767
4393
  /** Recursively delete directories (like rm -rf) */
3768
4394
  recursive?: boolean;
4395
+ /** Agent session whose workspace and change history receive the deletion. */
4396
+ sessionId?: string;
3769
4397
  }
3770
4398
  /**
3771
4399
  * File system operations for sandboxes. Access via `sandbox.fs`.
@@ -3830,6 +4458,10 @@ interface WriteManyFile {
3830
4458
  interface WriteFileOptions {
3831
4459
  /** Unix mode bits applied after write, e.g. 0o755. */
3832
4460
  mode?: number;
4461
+ /** Encoding of `content` on the wire. */
4462
+ encoding?: "utf8" | "base64";
4463
+ /** Agent session whose workspace and change history receive the write. */
4464
+ sessionId?: string;
3833
4465
  }
3834
4466
  /** Options for {@link FileSystem.writeMany}. */
3835
4467
  interface WriteManyOptions {
@@ -3851,6 +4483,10 @@ interface FileSystem {
3851
4483
  * @throws NotFoundError if file doesn't exist
3852
4484
  */
3853
4485
  read(path: string): Promise<string>;
4486
+ /** Read up to any number of files with content metadata and per-file errors. */
4487
+ readBatch(paths: string[], options?: FileReadBatchOptions): Promise<FileReadBatchResult>;
4488
+ /** Recursively scan the workspace and return file metadata. */
4489
+ tree(path: string, options?: FileTreeOptions): Promise<FileTreeResult>;
3854
4490
  /**
3855
4491
  * Write string content to a file.
3856
4492
  * For binary files, use upload() instead.
@@ -3859,7 +4495,7 @@ interface FileSystem {
3859
4495
  * @param path - Path to file (relative to workspace)
3860
4496
  * @param content - Content to write
3861
4497
  */
3862
- write(path: string, content: string, options?: WriteFileOptions): Promise<void>;
4498
+ write(path: string, content: string, options?: WriteFileOptions): Promise<FileWriteResult>;
3863
4499
  /**
3864
4500
  * Write many files in one paced, retry-aware batch.
3865
4501
  *
@@ -4326,6 +4962,10 @@ interface SandboxSessionHost extends InteractiveSessionHost {
4326
4962
  _sessionEvents(id: string, opts?: SessionEventStreamOptions): AsyncGenerator<SandboxEvent>;
4327
4963
  _sessionResult(id: string): Promise<PromptResult>;
4328
4964
  _sessionCancel(id: string): Promise<void>;
4965
+ _sessionDelete(id: string): Promise<void>;
4966
+ _sessionSendMessage(id: string, request: SendSessionMessageRequest, options?: SendSessionMessageOptions): Promise<SentSessionMessage>;
4967
+ messages(opts: ListMessagesOptions): Promise<SessionMessage[]>;
4968
+ _sessionFork(id: string, opts?: SessionForkOptions): Promise<SessionInfo>;
4329
4969
  _respondToPermission(id: string, permissionID: string, options: RespondToPermissionOptions): Promise<void>;
4330
4970
  _interrupt(id: string): Promise<InterruptResult>;
4331
4971
  _answerQuestion(id: string, answers: Record<string, string[]>): Promise<void>;
@@ -4372,12 +5012,22 @@ declare class SandboxSession {
4372
5012
  * (e.g. `dispatchPrompt`).
4373
5013
  */
4374
5014
  result(): Promise<PromptResult>;
5015
+ /**
5016
+ * List persisted messages for this session, including in-flight assistant
5017
+ * content when the runtime has flushed partial output.
5018
+ */
5019
+ messages(opts?: Omit<ListMessagesOptions, "sessionId">): Promise<SessionMessage[]>;
4375
5020
  /**
4376
5021
  * Continue this session with an additional prompt. Equivalent to
4377
5022
  * `box.prompt(message, { ...opts, sessionId: this.id })` but reads
4378
5023
  * naturally on a Session reference.
4379
5024
  */
4380
5025
  prompt(message: string | PromptInputPart[], opts?: PromptOptions): Promise<PromptResult>;
5026
+ /**
5027
+ * Send a structured message through the session message endpoint. Model and
5028
+ * message identifiers are translated to the runtime's wire names by the SDK.
5029
+ */
5030
+ sendMessage(request: SendSessionMessageRequest, options?: SendSessionMessageOptions): Promise<SentSessionMessage>;
4381
5031
  /**
4382
5032
  * Abort the session's in-flight execution; the session and its messages
4383
5033
  * are preserved (this does not delete the session). Void-returning alias
@@ -4387,6 +5037,17 @@ declare class SandboxSession {
4387
5037
  * aborting a session with nothing in flight is a no-op.
4388
5038
  */
4389
5039
  cancel(): Promise<void>;
5040
+ /** Delete this session and its persisted runtime state. */
5041
+ delete(): Promise<void>;
5042
+ /**
5043
+ * Fork this session into a new queued session. The fork shares the
5044
+ * parent workspace and copies conversation history up to `messageId`
5045
+ * when supplied.
5046
+ */
5047
+ fork(opts?: SessionForkOptions): Promise<{
5048
+ session: SandboxSession;
5049
+ info: SessionInfo;
5050
+ }>;
4390
5051
  /**
4391
5052
  * Drive this session's harness in INTERACTIVE mode: spawn its native TUI,
4392
5053
  * stream the live framebuffer, and inject prompts as keystrokes. Distinct
@@ -4408,12 +5069,31 @@ declare class SandboxSession {
4408
5069
  interrupt(): Promise<InterruptResult>;
4409
5070
  /**
4410
5071
  * Answer a question the agent asked via a question tool invocation. `answers`
4411
- * maps each question id to the selected option(s). OpenCode-only; other
4412
- * backends reject loudly.
5072
+ * maps each question id to the selected option(s). Backend-agnostic: works
5073
+ * with any backend that raises kind:"question" interactions — OpenCode
5074
+ * natively, or CLI backends with `BackendConfig.interactions.question`
5075
+ * enabled. Backends with no question support reject loudly.
4413
5076
  */
4414
5077
  answer(answers: Record<string, string[]>): Promise<void>;
4415
5078
  }
4416
5079
  //#endregion
5080
+ //#region src/task-session.d.ts
5081
+ /** @internal Operations implemented by `SandboxInstance`. */
5082
+ interface SandboxTaskSessionHost extends SandboxSessionHost {
5083
+ _taskSessionChanges(id: string): Promise<TaskSessionChanges>;
5084
+ _taskSessionCommit(id: string, options?: CommitTaskSessionOptions): Promise<TaskSessionCommitResult>;
5085
+ }
5086
+ /** A background task session with isolated changeset operations. */
5087
+ declare class SandboxTaskSession extends SandboxSession {
5088
+ private readonly taskBox;
5089
+ /** @internal Apps should call `box.taskSession(id)`. */
5090
+ constructor(taskBox: SandboxTaskSessionHost, id: string);
5091
+ /** Read the task's isolated file changes. */
5092
+ changes(): Promise<TaskSessionChanges>;
5093
+ /** Apply all or a selected subset of the task's isolated file changes. */
5094
+ commit(options?: CommitTaskSessionOptions): Promise<TaskSessionCommitResult>;
5095
+ }
5096
+ //#endregion
4417
5097
  //#region src/trace-exporter.d.ts
4418
5098
  type JsonObject = {
4419
5099
  [key: string]: JsonValue;
@@ -4439,6 +5119,18 @@ declare function toOtelJson(bundle: TraceExportBundle, serviceName?: string): Js
4439
5119
  declare function otelTraceIdForTangleTrace(traceId: string): string;
4440
5120
  //#endregion
4441
5121
  //#region src/sandbox.d.ts
5122
+ /**
5123
+ * Result of registering a sidecar session mapping. `reprovisionRequired` is
5124
+ * true when the server reports the mapped sidecar is stale (HTTP 410) and the
5125
+ * caller must reprovision the sandbox before retrying.
5126
+ */
5127
+ interface SessionMappingResult {
5128
+ success: boolean;
5129
+ sessionId: string;
5130
+ sidecarSessionId?: string;
5131
+ reprovisionRequired: boolean;
5132
+ code?: string;
5133
+ }
4442
5134
  /**
4443
5135
  * HTTP client interface for making requests.
4444
5136
  */
@@ -4499,6 +5191,7 @@ declare class SandboxInstance {
4499
5191
  private readonly client;
4500
5192
  private info;
4501
5193
  private readonly defaultRuntimeBackend?;
5194
+ private readonly runtime;
4502
5195
  constructor(client: HttpClient, info: SandboxInfo, defaultRuntimeBackend?: BackendConfig);
4503
5196
  /** Unique sandbox identifier */
4504
5197
  get id(): string;
@@ -4520,6 +5213,8 @@ declare class SandboxInstance {
4520
5213
  get expiresAt(): Date | undefined;
4521
5214
  /** Error message if status is 'failed' */
4522
5215
  get error(): string | undefined;
5216
+ /** GPU lease attached during sandbox creation, when requested. */
5217
+ get gpuLease(): GpuLease | undefined;
4523
5218
  /** Web terminal URL for browser-based access */
4524
5219
  get url(): string | undefined;
4525
5220
  /**
@@ -4715,7 +5410,7 @@ declare class SandboxInstance {
4715
5410
  * await box.write("/tmp/config.json", JSON.stringify(config));
4716
5411
  * ```
4717
5412
  */
4718
- write(path: string, content: string, options?: WriteFileOptions): Promise<void>;
5413
+ write(path: string, content: string, options?: WriteFileOptions): Promise<FileWriteResult>;
4719
5414
  /**
4720
5415
  * Write many files in one paced, retry-aware batch — see
4721
5416
  * {@link FileSystem.writeMany}. Each file goes through {@link write}; a small
@@ -4730,6 +5425,7 @@ declare class SandboxInstance {
4730
5425
  * Returns the complete response after the agent finishes.
4731
5426
  */
4732
5427
  prompt(message: string | PromptInputPart[], options?: PromptOptions): Promise<PromptResult>;
5428
+ private logStreamCheckpoint;
4733
5429
  /**
4734
5430
  * Stream events from an agent prompt.
4735
5431
  * Use this for real-time updates during agent execution.
@@ -4852,6 +5548,14 @@ declare class SandboxInstance {
4852
5548
  * ```
4853
5549
  */
4854
5550
  search(pattern: string, options?: SearchOptions): AsyncGenerator<SearchMatch>;
5551
+ /** Basic health reported by the runtime inside this sandbox. */
5552
+ runtimeHealth(): Promise<SandboxRuntimeHealth>;
5553
+ /** Return the runtime's current listening-port snapshot. */
5554
+ ports(): Promise<SandboxPortBinding[]>;
5555
+ /** Interactive terminal operations for this runtime. */
5556
+ get terminals(): SandboxTerminalManager;
5557
+ /** List profiles installed in this sandbox runtime. */
5558
+ listProfiles(): Promise<SandboxRuntimeProfileList>;
4855
5559
  /**
4856
5560
  * Live whole-sandbox resource usage (memory + CPU) from the container cgroup.
4857
5561
  *
@@ -4935,6 +5639,8 @@ declare class SandboxInstance {
4935
5639
  * ```
4936
5640
  */
4937
5641
  get fs(): FileSystem;
5642
+ private fsReadBatch;
5643
+ private fsTree;
4938
5644
  private fsUpload;
4939
5645
  private fsDownload;
4940
5646
  private fsUploadDir;
@@ -5098,12 +5804,23 @@ declare class SandboxInstance {
5098
5804
  * ```
5099
5805
  */
5100
5806
  get egress(): EgressManager;
5807
+ /**
5808
+ * On-demand GPU leases attached to this sandbox.
5809
+ *
5810
+ * The base sandbox stays cheap; `attach` starts a temporary external GPU
5811
+ * worker with an explicit spend cap, and `detach` destroys it.
5812
+ */
5813
+ get gpu(): GpuLeaseManager;
5101
5814
  private networkUpdate;
5102
5815
  private networkExposePort;
5103
5816
  private networkListUrls;
5104
5817
  private networkGetConfig;
5105
5818
  private egressGet;
5106
5819
  private egressUpdate;
5820
+ private gpuAttach;
5821
+ private gpuList;
5822
+ private gpuExec;
5823
+ private gpuDetach;
5107
5824
  /**
5108
5825
  * Validate CIDR notation (IPv4 and IPv6)
5109
5826
  */
@@ -5227,91 +5944,46 @@ declare class SandboxInstance {
5227
5944
  */
5228
5945
  restoreFromStorage(storage: SnapshotOptions["storage"], options?: RestoreSnapshotOptions): Promise<SnapshotResult | null>;
5229
5946
  /**
5230
- * Create a CRIU checkpoint of the sandbox's memory state.
5231
- *
5232
- * Checkpoints capture the complete memory state of the running sandbox,
5233
- * enabling true pause/resume and fork operations. Unlike snapshots which
5234
- * only preserve filesystem state, checkpoints preserve process memory,
5235
- * open file descriptors, and execution state.
5236
- *
5237
- * **Requirements:** CRIU must be available on the host. Check availability
5238
- * with `client.criuStatus()` before calling.
5239
- *
5240
- * **Note:** By default, checkpoint stops the sandbox. Use `leaveRunning: true`
5241
- * to keep it running (creates a copy-on-write checkpoint).
5242
- *
5243
- * @param options - Checkpoint options
5244
- * @returns Checkpoint result with ID and metadata
5245
- *
5246
- * @example Basic checkpoint (stops sandbox)
5247
- * ```typescript
5248
- * const checkpoint = await box.checkpoint();
5249
- * console.log(`Checkpoint: ${checkpoint.checkpointId}`);
5250
- * // Sandbox is now stopped, resume with box.resume()
5251
- * ```
5252
- *
5253
- * @example Checkpoint without stopping
5254
- * ```typescript
5255
- * const checkpoint = await box.checkpoint({
5256
- * tags: ["before-deploy"],
5257
- * leaveRunning: true,
5258
- * });
5259
- * // Sandbox continues running
5260
- * ```
5947
+ * @deprecated CRIU checkpoints were removed. To branch live memory into
5948
+ * copy-on-write children of a running sandbox use {@link branch}; for durable
5949
+ * filesystem state use {@link snapshot}. This method now throws.
5261
5950
  */
5262
- checkpoint(options?: CheckpointOptions): Promise<CheckpointResult>;
5951
+ checkpoint(): never;
5263
5952
  /**
5264
- * List all checkpoints for this sandbox.
5265
- *
5266
- * @returns Array of checkpoint metadata
5267
- *
5268
- * @example
5269
- * ```typescript
5270
- * const checkpoints = await box.listCheckpoints();
5271
- * for (const cp of checkpoints) {
5272
- * console.log(`${cp.checkpointId}: ${cp.createdAt}`);
5273
- * }
5274
- * ```
5953
+ * @deprecated CRIU checkpoints were removed. List durable filesystem state
5954
+ * with {@link listSnapshots}. This method now throws.
5275
5955
  */
5276
- listCheckpoints(): Promise<CheckpointInfo[]>;
5956
+ listCheckpoints(): never;
5277
5957
  /**
5278
- * Delete a checkpoint.
5279
- *
5280
- * @param checkpointId - ID of the checkpoint to delete
5958
+ * @deprecated CRIU checkpoints were removed. This method now throws.
5281
5959
  */
5282
- deleteCheckpoint(checkpointId: string): Promise<void>;
5960
+ deleteCheckpoint(): never;
5283
5961
  /**
5284
- * Fork a new sandbox from a checkpoint.
5285
- *
5286
- * Creates a new sandbox with the same memory state as this sandbox
5287
- * at the time of the checkpoint. The fork has a new identity but
5288
- * preserves the execution state.
5289
- *
5290
- * **Use cases:**
5291
- * - Branch workflows: Create parallel execution paths
5292
- * - A/B testing: Run same state with different configurations
5293
- * - Debugging: Fork at a specific point to investigate
5294
- *
5295
- * @param checkpointId - ID of the checkpoint to fork from
5296
- * @param options - Fork configuration
5297
- * @returns The new sandbox instance
5962
+ * @deprecated Forking from a CRIU checkpoint was removed. Use {@link branch}
5963
+ * to fork a running sandbox's live memory into copy-on-write children, or
5964
+ * `client.create({ fromSnapshot })` to provision from durable disk state.
5965
+ * This method now throws.
5966
+ */
5967
+ fork(): never;
5968
+ /**
5969
+ * Branch this RUNNING sandbox into `count` copy-on-write children
5970
+ * (Morph Infinibranch parity). Unlike {@link fork} which rehydrates one
5971
+ * sandbox from a CRIU checkpoint branch forks the live VM's memory into
5972
+ * many children at once via Firecracker UFFD copy-on-write: the children
5973
+ * share the parent's clean pages instead of each copying full guest
5974
+ * memory. The parent stays running.
5298
5975
  *
5299
- * @example Basic fork
5300
- * ```typescript
5301
- * const checkpoint = await box.checkpoint({ leaveRunning: true });
5302
- * const forked = await box.fork(checkpoint.checkpointId);
5303
- * // forked has same memory state as box at checkpoint time
5304
- * ```
5976
+ * @param count - Number of children to create (must be >= 1).
5977
+ * @param options - Per-child overrides.
5978
+ * @returns Exactly `count` new sandbox instances.
5305
5979
  *
5306
- * @example Fork with custom config
5980
+ * @example
5307
5981
  * ```typescript
5308
- * const forked = await box.fork(checkpointId, {
5309
- * name: "experiment-branch",
5310
- * env: { EXPERIMENT: "true" },
5311
- * });
5982
+ * const [a, b, c] = await box.branch(3);
5983
+ * // a, b, c each share box's memory state at branch time
5312
5984
  * ```
5313
5985
  */
5314
- fork(checkpointId: string, options?: ForkOptions): Promise<SandboxInstance>;
5986
+ branch(count: number, options?: BranchOptions): Promise<SandboxInstance[]>;
5315
5987
  /**
5316
5988
  * Stop the sandbox (keeps state for resume).
5317
5989
  */
@@ -5365,7 +6037,6 @@ declare class SandboxInstance {
5365
6037
  * delivers progress callbacks while waiting for a target status.
5366
6038
  */
5367
6039
  private waitForWithSSE;
5368
- private parseCheckpointInfo;
5369
6040
  private ensureRunning;
5370
6041
  private runtimeFetch;
5371
6042
  /**
@@ -5394,9 +6065,24 @@ declare class SandboxInstance {
5394
6065
  * ```
5395
6066
  */
5396
6067
  registerSessionMapping(opts: {
6068
+ sessionId: string;
6069
+ userId: string; /** The runtime (sidecar) session id this agent session routes to. */
6070
+ runtimeSessionId: string; /** Optional container id for direct routing. */
6071
+ sidecarId?: string; /** Optional projectRef so the server can detect a stale sidecar. */
6072
+ projectRef?: string;
6073
+ }): Promise<SessionMappingResult>;
6074
+ /**
6075
+ * Remove the sidecar session mapping for an agent session. Sandbox deletion
6076
+ * also cleans mappings, so this is only needed to release a mapping while the
6077
+ * sandbox stays alive.
6078
+ */
6079
+ unregisterSessionMapping(opts: {
5397
6080
  sessionId: string;
5398
6081
  userId: string;
5399
- }): Promise<void>;
6082
+ }): Promise<{
6083
+ success: boolean;
6084
+ sessionId: string;
6085
+ }>;
5400
6086
  private parseInfo;
5401
6087
  private sleep;
5402
6088
  /**
@@ -5405,6 +6091,20 @@ declare class SandboxInstance {
5405
6091
  * Use {@link sessions} to discover existing session ids.
5406
6092
  */
5407
6093
  session(id: string): SandboxSession;
6094
+ /** Create an agent session and return both its handle and initial metadata. */
6095
+ createSession(options: CreateSessionOptions): Promise<{
6096
+ session: SandboxSession;
6097
+ info: SessionInfo;
6098
+ }>;
6099
+ /** Delete an agent session by id. */
6100
+ deleteSession(id: string): Promise<void>;
6101
+ /** Get a lazy background-task session reference. */
6102
+ taskSession(id: string): SandboxTaskSession;
6103
+ /** Create a background task session. Dispatch work with `session.sendMessage()`. */
6104
+ createTaskSession(options: CreateTaskSessionOptions): Promise<{
6105
+ session: SandboxTaskSession;
6106
+ info: TaskSessionInfo;
6107
+ }>;
5408
6108
  /**
5409
6109
  * List sessions on this sandbox, optionally filtering by status. Returns
5410
6110
  * `SandboxSession` instances paired with their last-known
@@ -5440,6 +6140,15 @@ declare class SandboxInstance {
5440
6140
  * abort stamps `interrupted: true` explicitly.
5441
6141
  */
5442
6142
  messages(opts: ListMessagesOptions): Promise<SessionMessage[]>;
6143
+ /** @internal — invoked by SandboxSession.sendMessage(). */
6144
+ _sessionSendMessage(id: string, request: SendSessionMessageRequest, options?: SendSessionMessageOptions): Promise<SentSessionMessage>;
6145
+ /** @internal — invoked by SandboxSession.delete(). */
6146
+ _sessionDelete(id: string): Promise<void>;
6147
+ /** @internal — invoked by SandboxTaskSession.changes(). */
6148
+ _taskSessionChanges(id: string): Promise<TaskSessionChanges>;
6149
+ /** @internal — invoked by SandboxTaskSession.commit(). */
6150
+ _taskSessionCommit(id: string, options?: CommitTaskSessionOptions): Promise<TaskSessionCommitResult>;
6151
+ _sessionFork(id: string, opts?: SessionForkOptions): Promise<SessionInfo>;
5443
6152
  /**
5444
6153
  * Look up a cached turn result by idempotency key. Returns the cached
5445
6154
  * payload if a turn with this `turnId` previously completed on the
@@ -5525,4 +6234,4 @@ declare class SandboxInstance {
5525
6234
  _answerQuestion(id: string, answers: Record<string, string[]>): Promise<void>;
5526
6235
  }
5527
6236
  //#endregion
5528
- export { CreateSandboxFleetOptions as $, SandboxFleetTraceBundle as $n, WriteFileOptions as $r, NetworkConfig as $t, AttachSandboxFleetMachineOptions as A, SSHCredentials as An, SnapshotInfo as Ar, ForkResult as At, BatchTask as B, SandboxFleetDriverCapability as Bn, TeeAttestationOptions as Br, InstalledTool as Bt, SandboxMcpEndpoint as C, PublishPublicTemplateVersionOptions as Cn, SecretInfo as Cr, FleetDispatchStreamOptions as Ct, AcceleratorKind as D, ReconcileSandboxFleetsResult as Dn, SessionListOptions as Dr, FleetPromptDispatchOptions as Dt, buildSandboxMcpConfig as E, ReconcileSandboxFleetsOptions as En, SessionInfo as Er, FleetMachineId as Et, BackendStatus as F, SandboxFleetArtifact as Fn, StartupOperation as Fr, GitDiff as Ft, CodeExecutionOptions as G, SandboxFleetMachineMeteredUsage as Gn, TokenRefreshHandler as Gr, IntelligenceReportWindow as Gt, CheckpointInfo as H, SandboxFleetInfo as Hn, TeeAttestationResponse as Hr, IntelligenceReportBudget as Ht, BackendType as I, SandboxFleetArtifactSpec as In, StorageConfig as Ir, GitStatus as It, CodeResult as J, SandboxFleetManifest as Jn, UpdateUserOptions as Jr, ListSandboxFleetOptions as Jt, CodeExecutionResult as K, SandboxFleetMachineRecord as Kn, ToolsConfig as Kr, ListMessagesOptions as Kt, BatchEvent as L, SandboxFleetCostEstimate as Ln, SubscriptionInfo as Lr, GpuType as Lt, BackendConfig as M, SandboxConnection as Mn, SnapshotResult as Mr, GitBranch as Mt, BackendInfo as N, SandboxEnvironment as Nn, SshKeysManager as Nr, GitCommit as Nt, AccessPolicyRule as O, RunCodeOptions as On, SessionMessage as Or, FleetPromptDispatchResult as Ot, BackendManager as P, SandboxEvent as Pn, StartupDiagnostics as Pr, GitConfig as Pt, CreateRequestOptions as Q, SandboxFleetToken as Qn, WaitForOptions as Qr, MkdirOptions as Qt, BatchOptions as R, SandboxFleetDispatchFailureClass as Rn, TaskOptions as Rr, HostAgentDriverConfig as Rt, SandboxMcpConfig as S, PublishPublicTemplateOptions as Sn, SearchOptions as Sr, FleetDispatchResultBufferOptions as St, buildControlPlaneMcpConfig as T, ReapExpiredSandboxFleetsResult as Tn, SessionEventStreamOptions as Tr, FleetExecDispatchResult as Tt, CheckpointOptions as U, SandboxFleetIntelligenceEnvelope as Un, TeePublicKey as Ur, IntelligenceReportCompareTo as Ut, BatchTaskResult as V, SandboxFleetDriverTimings as Vn, TeeAttestationReport as Vr, IntelligenceReport as Vt, CheckpointResult as W, SandboxFleetMachine as Wn, TeePublicKeyResponse as Wr, IntelligenceReportSubjectType as Wt, CompletedTurnResult as X, SandboxFleetOperationsSummary as Xn, UploadProgress as Xr, McpServerConfig as Xt, CodeResultPart as Y, SandboxFleetManifestMachine as Yn, UploadOptions as Yr, ListSandboxOptions as Yt, CreateIntelligenceReportOptions as Z, SandboxFleetPolicy as Zn, UsageInfo as Zr, MintScopedTokenOptions as Zt, StartInteractiveOptions as _, defineGitHubResource as _i, ProvisionResult as _n, SandboxTraceOptions as _r, ExecResult as _t, TraceExportSink as a, AgentProfileConnection as ai, PreviewLinkManager as an, SandboxFleetWorkspaceReconcileResult as ar, DispatchPromptOptions as at, CONTROL_PLANE_MCP_SERVER_NAME as b, PublicTemplateInfo as bn, ScopedTokenScope as br, FleetDispatchCancelResult as bt, otelTraceIdForTangleTrace as c, AgentProfileModelHints as ci, ProcessLogEntry as cn, SandboxInfo as cr, DownloadProgress as ct, InteractiveAuthFile as d, AgentProfileResourceRef as di, ProcessSpawnOptions as dn, SandboxResourceUsage as dr, DriverInfo as dt, WriteManyFile as ei, NetworkManager as en, SandboxFleetTraceEvent as er, CreateSandboxFleetTokenOptions as et, InteractiveSessionHandle as f, AgentProfileResources as fi, ProcessStatus as fn, SandboxResources as fr, DriverType as ft, RespondToPermissionOptions as g, defineAgentProfile as gi, ProvisionEvent as gn, SandboxTraceExport as gr, ExecOptions as gt, InterruptResult as h, AgentSubagentProfile as hi, PromptResult as hn, SandboxTraceEvent as hr, EventStreamOptions as ht, TraceExportResult as i, AgentProfileConfidential as ii, PreviewLinkInfo as in, SandboxFleetWorkspace as ir, DirectoryPermission as it, BackendCapabilities as j, SandboxClientConfig as jn, SnapshotOptions as jr, GitAuth as jt, AddUserOptions as k, SSHCommandDescriptor as kn, SessionStatus as kr, ForkOptions as kt, toOtelJson as l, AgentProfilePermissionValue as li, ProcessManager as ln, SandboxIntelligenceEnvelope as lr, DriveTurnOptions as lt, InteractiveSessionInfo as m, AgentProfileValidationResult as mi, PromptOptions as mn, SandboxTraceBundle as mr, EgressPolicy as mt, SandboxInstance as n, AgentProfile as ni, PermissionLevel as nn, SandboxFleetTraceOptions as nr, CreateSandboxOptions as nt, buildTraceExportPayload as o, AgentProfileFileMount as oi, Process as on, SandboxFleetWorkspaceRestoreResult as or, DispatchedSession as ot, InteractiveSessionHost as p, AgentProfileValidationIssue as pi, PromptInputPart as pn, SandboxStatus as pr, EgressManager as pt, CodeLanguage as q, SandboxFleetMachineSpec as qn, TurnDriveResult as qr, ListOptions as qt, TraceExportFormat as r, AgentProfileCapabilities as ri, PermissionsManager as rn, SandboxFleetUsage as rr, DeleteOptions as rt, exportTraceBundle as s, AgentProfileMcpServer as si, ProcessInfo as sn, SandboxFleetWorkspaceSnapshotResult as sr, DownloadOptions as st, HttpClient as t, WriteManyOptions as ti, NonHostAgentDriverConfig as tn, SandboxFleetTraceExport as tr, CreateSandboxFleetWithCoordinatorOptions as tt, SandboxSession as u, AgentProfilePrompt as ui, ProcessSignal as un, SandboxPermissionsConfig as ur, DriverConfig as ut, BuildControlPlaneMcpConfigOptions as v, defineInlineResource as vi, ProvisionStatus as vn, SandboxUser as vr, FileInfo as vt, SandboxMcpServerEntry as w, ReapExpiredSandboxFleetsOptions as wn, SecretsManager as wr, FleetExecDispatchOptions as wt, SANDBOX_MCP_SERVER_NAME as x, PublicTemplateVersionInfo as xn, SearchMatch as xr, FleetDispatchResultBuffer as xt, BuildSandboxMcpConfigOptions as y, mergeAgentProfiles as yi, ProvisionStep as yn, ScopedToken as yr, FileSystem as yt, BatchResult as z, SandboxFleetDispatchResponse as zn, TaskResult as zr, HostAgentRuntimeBackend as zt };
6237
+ export { CodeExecutionResult as $, AgentProfileFileMount as $i, ReconcileSandboxFleetsResult as $n, SandboxTraceOptions as $r, GitDiff as $t, AddUserOptions as A, TaskSessionFileChange as Ai, PreviewLinkInfo as An, SandboxFleetWorkspace as Ar, FileReadBatchOptions as At, BatchBackendStats as B, TurnDriveResult as Bi, PromptOptions as Bn, SandboxResourceUsage as Br, FleetDispatchResultBuffer as Bt, SandboxMcpConfig as C, StartupOperation as Ci, MintScopedTokenOptions as Cn, SandboxFleetPolicy as Cr, DriverType as Ct, buildSandboxMcpConfig as D, TaskResult as Di, NonHostAgentDriverConfig as Dn, SandboxFleetTraceExport as Dr, ExecOptions as Dt, buildControlPlaneMcpConfig as E, TaskOptions as Ei, NetworkManager as En, SandboxFleetTraceEvent as Er, EventStreamOptions as Et, BackendInfo as F, TeeAttestationResponse as Fi, ProcessManager as Fn, SandboxIntelligenceEnvelope as Fr, FileTreeFile as Ft, BatchRunOptions as G, WaitForOptions as Gi, ProvisionStep as Gn, SandboxStatus as Gr, FleetMachineId as Gt, BatchEventDataMap as H, UploadOptions as Hi, ProvisionEvent as Hn, SandboxRuntimeHealth as Hr, FleetDispatchStreamOptions as Ht, BackendManager as I, TeePublicKey as Ii, ProcessSignal as In, SandboxPermissionsConfig as Ir, FileTreeOptions as It, BatchTask as J, WriteManyOptions as Ji, PublishPublicTemplateOptions as Jn, SandboxTerminalManager as Jr, GPU_LEASE_PROVIDER_NAMES as Jt, BatchRunRequest as K, WriteFileOptions as Ki, PublicTemplateInfo as Kn, SandboxTerminalCreateOptions as Kr, FleetPromptDispatchOptions as Kt, BackendStatus as L, TeePublicKeyResponse as Li, ProcessSpawnOptions as Ln, SandboxPortBinding as Lr, FileTreeResult as Lt, AttachSandboxFleetMachineOptions as M, TaskSessionProfile as Mi, Process as Mn, SandboxFleetWorkspaceRestoreResult as Mr, FileReadError as Mt, BackendCapabilities as N, TeeAttestationOptions as Ni, ProcessInfo as Nn, SandboxFleetWorkspaceSnapshotResult as Nr, FileReadResult as Nt, AcceleratorKind as O, TaskSessionChanges as Oi, PermissionLevel as On, SandboxFleetTraceOptions as Or, ExecResult as Ot, BackendConfig as P, TeeAttestationReport as Pi, ProcessLogEntry as Pn, SandboxInfo as Pr, FileSystem as Pt, CodeExecutionOptions as Q, AgentProfileConnection as Qi, ReconcileSandboxFleetsOptions as Qn, SandboxTraceExport as Qr, GitConfig as Qt, BackendType as R, TokenRefreshHandler as Ri, ProcessStatus as Rn, SandboxPortPreviewLink as Rr, FileWriteResult as Rt, SANDBOX_MCP_SERVER_NAME as S, StartupDiagnostics as Si, McpServerConfig as Sn, SandboxFleetOperationsSummary as Sr, DriverInfo as St, SandboxMcpServerEntry as T, SubscriptionInfo as Ti, NetworkConfig as Tn, SandboxFleetTraceBundle as Tr, EgressPolicy as Tt, BatchOptions as U, UploadProgress as Ui, ProvisionResult as Un, SandboxRuntimeProfile as Ur, FleetExecDispatchOptions as Ut, BatchEvent as V, UpdateUserOptions as Vi, PromptResult as Vn, SandboxResources as Vr, FleetDispatchResultBufferOptions as Vt, BatchResult as W, UsageInfo as Wi, ProvisionStatus as Wn, SandboxRuntimeProfileList as Wr, FleetExecDispatchResult as Wt, BatchTaskUsage as X, AgentProfileCapabilities as Xi, ReapExpiredSandboxFleetsOptions as Xn, SandboxTraceBundle as Xr, GitBranch as Xt, BatchTaskResult as Y, AgentProfile as Yi, PublishPublicTemplateVersionOptions as Yn, SandboxTerminalRequestOptions as Yr, GitAuth as Yt, BranchOptions as Z, AgentProfileConfidential as Zi, ReapExpiredSandboxFleetsResult as Zn, SandboxTraceEvent as Zr, GitCommit as Zt, RespondToPermissionOptions as _, SessionStatus as _i, IntelligenceReportWindow as _n, SandboxFleetMachineMeteredUsage as _r, DispatchedSession as _t, TraceExportSink as a, AgentProfileResources as aa, SecretInfo as ai, GpuLeaseExecResult as an, SandboxEnvironment as ar, CreateGpuLeaseOptions as at, BuildSandboxMcpConfigOptions as b, SnapshotResult as bi, ListSandboxFleetOptions as bn, SandboxFleetManifest as br, DriveTurnOptions as bt, otelTraceIdForTangleTrace as c, AgentSubagentProfile as ca, SendSessionMessageRequest as ci, GpuLeaseStatus as cn, SandboxFleetArtifactSpec as cr, CreateSandboxFleetOptions as ct, SandboxSession as d, defineInlineResource as da, SessionEventStreamOptions as di, HostAgentRuntimeBackend as dn, SandboxFleetDispatchResponse as dr, CreateSandboxOptions as dt, AgentProfileMcpServer as ea, SandboxUser as ei, GitStatus as en, RunCodeOptions as er, CodeLanguage as et, InteractiveAuthFile as f, mergeAgentProfiles as fa, SessionForkOptions as fi, InstalledTool as fn, SandboxFleetDriverCapability as fr, CreateSessionOptions as ft, InterruptResult as g, SessionMessageInputPart as gi, IntelligenceReportSubjectType as gn, SandboxFleetMachine as gr, DispatchPromptOptions as gt, InteractiveSessionInfo as h, SessionMessage as hi, IntelligenceReportCompareTo as hn, SandboxFleetIntelligenceEnvelope as hr, DirectoryPermission as ht, TraceExportResult as i, AgentProfileResourceRef as ia, SearchOptions as ii, GpuLeaseExecOptions as in, SandboxConnection as ir, CompletedTurnResult as it, AttachGpuLeaseOptions as j, TaskSessionInfo as ji, PreviewLinkManager as jn, SandboxFleetWorkspaceReconcileResult as jr, FileReadBatchResult as jt, AccessPolicyRule as k, TaskSessionCommitResult as ki, PermissionsManager as kn, SandboxFleetUsage as kr, FileInfo as kt, toOtelJson as l, defineAgentProfile as la, SentSessionMessage as li, GpuType as ln, SandboxFleetCostEstimate as lr, CreateSandboxFleetTokenOptions as lt, InteractiveSessionHost as m, SessionListOptions as mi, IntelligenceReportBudget as mn, SandboxFleetInfo as mr, DeleteOptions as mt, SandboxInstance as n, AgentProfilePermissionValue as na, ScopedTokenScope as ni, GpuLeaseBilling as nn, SSHCredentials as nr, CodeResultPart as nt, buildTraceExportPayload as o, AgentProfileValidationIssue as oa, SecretsManager as oi, GpuLeaseManager as on, SandboxEvent as or, CreateIntelligenceReportOptions as ot, InteractiveSessionHandle as p, SessionInfo as pi, IntelligenceReport as pn, SandboxFleetDriverTimings as pr, CreateTaskSessionOptions as pt, BatchSidecarGroup as q, WriteManyFile as qi, PublicTemplateVersionInfo as qn, SandboxTerminalInfo as qr, FleetPromptDispatchResult as qt, TraceExportFormat as r, AgentProfilePrompt as ra, SearchMatch as ri, GpuLeaseCommandResult as rn, SandboxClientConfig as rr, CommitTaskSessionOptions as rt, exportTraceBundle as s, AgentProfileValidationResult as sa, SendSessionMessageOptions as si, GpuLeaseProviderName as sn, SandboxFleetArtifact as sr, CreateRequestOptions as st, HttpClient as t, AgentProfileModelHints as ta, ScopedToken as ti, GpuLease as tn, SSHCommandDescriptor as tr, CodeResult as tt, SandboxTaskSession as u, defineGitHubResource as ua, SessionBackendCredentials as ui, HostAgentDriverConfig as un, SandboxFleetDispatchFailureClass as ur, CreateSandboxFleetWithCoordinatorOptions as ut, StartInteractiveOptions as v, SnapshotInfo as vi, ListMessagesOptions as vn, SandboxFleetMachineRecord as vr, DownloadOptions as vt, SandboxMcpEndpoint as w, StorageConfig as wi, MkdirOptions as wn, SandboxFleetToken as wr, EgressManager as wt, CONTROL_PLANE_MCP_SERVER_NAME as x, SshKeysManager as xi, ListSandboxOptions as xn, SandboxFleetManifestMachine as xr, DriverConfig as xt, BuildControlPlaneMcpConfigOptions as y, SnapshotOptions as yi, ListOptions as yn, SandboxFleetMachineSpec as yr, DownloadProgress as yt, BatchBackend as z, ToolsConfig as zi, PromptInputPart as zn, SandboxProfileSummary as zr, FleetDispatchCancelResult as zt };