@opencoredev/sandbox-sdk 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +3 -1
  3. package/dist/{agentos-DFJ4TFaY.mjs → agentos-CbrZW7R0.mjs} +5 -4
  4. package/dist/{agentos-DFJ4TFaY.mjs.map → agentos-CbrZW7R0.mjs.map} +1 -1
  5. package/dist/ai/harness.d.mts +2 -2
  6. package/dist/ai/harness.mjs +2 -2
  7. package/dist/ai/index.d.mts +1 -1
  8. package/dist/ai/index.mjs +2 -2
  9. package/dist/{ai-DhfwIZdL.mjs → ai-DeFa8yPk.mjs} +2 -2
  10. package/dist/{ai-DhfwIZdL.mjs.map → ai-DeFa8yPk.mjs.map} +1 -1
  11. package/dist/{capabilities-DftdOpIu.d.mts → capabilities-BWvOVFbH.d.mts} +5 -3
  12. package/dist/{capabilities-CEowrzRM.mjs → capabilities-CaSNd6J1.mjs} +29 -3
  13. package/dist/{capabilities-CEowrzRM.mjs.map → capabilities-CaSNd6J1.mjs.map} +1 -1
  14. package/dist/{capabilities-COKpwoFH.mjs → capabilities-xs9kaHrK.mjs} +2 -2
  15. package/dist/{capabilities-COKpwoFH.mjs.map → capabilities-xs9kaHrK.mjs.map} +1 -1
  16. package/dist/{errors-Ch9PHKTd.mjs → errors-BuF9bYOQ.mjs} +10 -3
  17. package/dist/errors-BuF9bYOQ.mjs.map +1 -0
  18. package/dist/eve/index.d.mts +2 -2
  19. package/dist/eve/index.mjs +2 -2
  20. package/dist/{index-Bk6GmoEt.d.mts → index-CkTwqD0X.d.mts} +2 -2
  21. package/dist/{index-BufLdrbp.d.mts → index-Dh9xob2s.d.mts} +2 -2
  22. package/dist/index.d.mts +4 -4
  23. package/dist/index.mjs +6 -4
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/{provider-utils-BjOSWNsh.mjs → managed-provider-BsZGVQ4I.mjs} +4 -57
  26. package/dist/managed-provider-BsZGVQ4I.mjs.map +1 -0
  27. package/dist/mastra/index.d.mts +2 -2
  28. package/dist/mastra/index.mjs +1 -1
  29. package/dist/metadata.d.mts +1 -1
  30. package/dist/metadata.mjs +35 -3
  31. package/dist/metadata.mjs.map +1 -1
  32. package/dist/{provider-BzzkIVmv.d.mts → provider-DOBErkBO.d.mts} +2 -2
  33. package/dist/provider-utils-CfB9nvJx.mjs +57 -0
  34. package/dist/provider-utils-CfB9nvJx.mjs.map +1 -0
  35. package/dist/providers/agentos/index.d.mts +6 -6
  36. package/dist/providers/agentos/index.mjs +7 -6
  37. package/dist/providers/box/index.d.mts +34 -0
  38. package/dist/providers/box/index.mjs +348 -0
  39. package/dist/providers/box/index.mjs.map +1 -0
  40. package/dist/providers/daytona/index.d.mts +5 -5
  41. package/dist/providers/daytona/index.mjs +6 -5
  42. package/dist/providers/daytona/index.mjs.map +1 -1
  43. package/dist/providers/e2b/index.d.mts +5 -5
  44. package/dist/providers/e2b/index.mjs +6 -5
  45. package/dist/providers/e2b/index.mjs.map +1 -1
  46. package/dist/providers/local/index.d.mts +6 -6
  47. package/dist/providers/local/index.mjs +7 -6
  48. package/dist/providers/local/index.mjs.map +1 -1
  49. package/dist/providers/railway/index.d.mts +29 -0
  50. package/dist/providers/railway/index.mjs +211 -0
  51. package/dist/providers/railway/index.mjs.map +1 -0
  52. package/dist/providers/upstash/index.d.mts +5 -5
  53. package/dist/providers/upstash/index.mjs +6 -5
  54. package/dist/providers/upstash/index.mjs.map +1 -1
  55. package/dist/providers/vercel/index.d.mts +5 -5
  56. package/dist/providers/vercel/index.mjs +6 -5
  57. package/dist/providers/vercel/index.mjs.map +1 -1
  58. package/dist/{sandbox-Dco6z9aB.d.mts → sandbox-DdEqoXJF.d.mts} +3 -3
  59. package/dist/{sandbox-rIOcbhtM.mjs → sandbox-DgtY5hvt.mjs} +2 -2
  60. package/dist/{sandbox-rIOcbhtM.mjs.map → sandbox-DgtY5hvt.mjs.map} +1 -1
  61. package/dist/testing/index.d.mts +3 -3
  62. package/dist/testing/index.mjs +3 -3
  63. package/dist/{types-DEi_dfRR.d.mts → types-Bv6I2U1c.d.mts} +2 -2
  64. package/package.json +23 -3
  65. package/dist/errors-Ch9PHKTd.mjs.map +0 -1
  66. package/dist/provider-utils-BjOSWNsh.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
- import { t as SandboxError } from "./errors-Ch9PHKTd.mjs";
2
- import { t as createSandbox } from "./sandbox-rIOcbhtM.mjs";
1
+ import { t as SandboxError } from "./errors-BuF9bYOQ.mjs";
2
+ import { t as createSandbox } from "./sandbox-DgtY5hvt.mjs";
3
3
 
4
4
  //#region src/internal/managed-provider.ts
5
5
  /**
@@ -144,58 +144,5 @@ async function restoreFiles(sandbox, files) {
144
144
  }
145
145
 
146
146
  //#endregion
147
- //#region src/internal/provider-utils.ts
148
- async function toUint8Array(value) {
149
- if (typeof value === "string") return new TextEncoder().encode(value);
150
- if (value instanceof Uint8Array) return value;
151
- if (value instanceof ArrayBuffer) return new Uint8Array(value);
152
- if (value instanceof Blob) return new Uint8Array(await value.arrayBuffer());
153
- const response = new Response(value);
154
- return new Uint8Array(await response.arrayBuffer());
155
- }
156
- function commandString(input) {
157
- if (typeof input === "string") return input;
158
- return [input.command, ...input.args ?? []].map(shellQuote).join(" ");
159
- }
160
- function shellQuote(value) {
161
- return `'${value.replaceAll("'", `'"'"'`)}'`;
162
- }
163
- function portResult(port, url, isPublic, authenticated, request) {
164
- return {
165
- port,
166
- url,
167
- public: isPublic,
168
- authenticated,
169
- request,
170
- toJSON: () => ({
171
- port,
172
- url: authenticated ? redactUrl(url) : url,
173
- public: isPublic,
174
- authenticated
175
- })
176
- };
177
- }
178
- function redactUrl(url) {
179
- const parsed = new URL(url);
180
- for (const key of parsed.searchParams.keys()) parsed.searchParams.set(key, "[REDACTED]");
181
- return parsed.toString();
182
- }
183
- function unsupported(provider, operation) {
184
- throw new SandboxError({
185
- code: "unsupported",
186
- provider,
187
- operation,
188
- message: `${provider} does not support normalized ${operation}`
189
- });
190
- }
191
- function unsupportedSnapshots(provider) {
192
- return {
193
- create: async () => unsupported(provider, "snapshot.create"),
194
- delete: async () => unsupported(provider, "snapshot.delete"),
195
- restore: async () => unsupported(provider, "snapshot.restore")
196
- };
197
- }
198
-
199
- //#endregion
200
- export { unsupportedSnapshots as a, unsupported as i, portResult as n, withManagedSessions as o, toUint8Array as r, commandString as t };
201
- //# sourceMappingURL=provider-utils-BjOSWNsh.mjs.map
147
+ export { withManagedSessions as t };
148
+ //# sourceMappingURL=managed-provider-BsZGVQ4I.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-provider-BsZGVQ4I.mjs","names":["managed: ManagedSandboxProvider","ownedTemplate: Promise<TemplateFile[]> | undefined","result: TemplateFile[]"],"sources":["../src/internal/managed-provider.ts"],"sourcesContent":["import { SandboxError } from \"../core/errors\";\nimport type {\n ManagedSandboxProvider,\n ManagedSandboxSession,\n SandboxProvider,\n} from \"../core/provider\";\nimport { createSandbox } from \"../core/sandbox\";\nimport type { Sandbox } from \"../core/types\";\nimport type { SandboxNetworkPolicy } from \"../core/provider\";\n\ntype TemplateFile = { path: string; content: Uint8Array };\n\n/**\n * Shared managed lifecycle for built-in providers. Provider-native implementations\n * can replace this optional surface without changing `createSandbox()`.\n */\nexport function withManagedSessions<TRaw>(\n provider: SandboxProvider<TRaw>,\n configuredPorts: ReadonlyArray<number> = [],\n lifecycle: {\n stop?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n resume?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n destroy?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n setPorts?: (\n sandbox: Sandbox<TRaw>,\n ports: ReadonlyArray<number>,\n signal?: AbortSignal,\n ) => Promise<void>;\n setNetworkPolicy?: (sandbox: Sandbox<TRaw>, policy: SandboxNetworkPolicy) => Promise<void>;\n } = {},\n): SandboxProvider<TRaw> {\n const sessions = new Map<string, ManagedSandboxSession>();\n const templates = new Map<string, Promise<TemplateFile[]>>();\n\n const managed: ManagedSandboxProvider = {\n async create(options) {\n const existing = sessions.get(options.sessionId);\n if (existing) return existing;\n const sandbox = await createSandbox({\n provider,\n cwd: options.cwd,\n env: options.env,\n signal: options.signal,\n });\n const ports = new Set([...configuredPorts, ...(options.ports ?? [])]);\n let ownedTemplate: Promise<TemplateFile[]> | undefined;\n try {\n if (options.identity) {\n let template = templates.get(options.identity);\n if (!template) {\n template = (async () => {\n await options.onFirstCreate?.(sandbox);\n return captureFiles(sandbox, sandbox.cwd);\n })();\n ownedTemplate = template;\n templates.set(options.identity, template);\n await template;\n } else {\n await restoreFiles(sandbox, await template);\n }\n } else {\n await options.onFirstCreate?.(sandbox);\n }\n const session = createManagedSession(\n options.sessionId,\n sandbox,\n ports,\n sessions,\n lifecycle,\n );\n sessions.set(options.sessionId, session);\n return session;\n } catch (error) {\n if (\n options.identity &&\n ownedTemplate &&\n templates.get(options.identity) === ownedTemplate\n ) {\n templates.delete(options.identity);\n }\n try {\n if (lifecycle.destroy) await lifecycle.destroy(sandbox);\n else await sandbox.stop();\n } catch (cleanupError) {\n if (error instanceof Error) {\n Object.defineProperty(error, \"cleanupError\", {\n value: cleanupError,\n enumerable: false,\n });\n }\n }\n throw error;\n }\n },\n async resume(options) {\n const session = sessions.get(options.sessionId);\n if (!session) {\n throw new SandboxError({\n code: \"not_found\",\n provider: provider.id,\n operation: \"managed.resume\",\n message: `Managed sandbox session not found: ${options.sessionId}`,\n });\n }\n await session.resume();\n return session;\n },\n };\n return { ...provider, managed };\n}\n\nfunction createManagedSession<TRaw>(\n id: string,\n sandbox: Sandbox<TRaw>,\n initialPorts: Set<number>,\n sessions: Map<string, ManagedSandboxSession>,\n lifecycle: {\n stop?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n resume?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n destroy?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n setPorts?: (\n sandbox: Sandbox<TRaw>,\n ports: ReadonlyArray<number>,\n signal?: AbortSignal,\n ) => Promise<void>;\n setNetworkPolicy?: (sandbox: Sandbox<TRaw>, policy: SandboxNetworkPolicy) => Promise<void>;\n },\n): ManagedSandboxSession {\n let destroyed = false;\n let stopped = false;\n const assertActive = () => {\n if (destroyed) {\n throw new SandboxError({\n code: \"terminated\",\n provider: sandbox.provider,\n operation: \"managed.session\",\n message: `Managed sandbox session has been destroyed: ${id}`,\n });\n }\n };\n const session: ManagedSandboxSession = {\n id,\n sandbox,\n defaultWorkingDirectory: sandbox.cwd,\n get ports() {\n return [...initialPorts];\n },\n async getPortUrl({ port, protocol }) {\n assertActive();\n if (!initialPorts.has(port)) {\n throw new SandboxError({\n code: \"invalid_input\",\n provider: sandbox.provider,\n operation: \"managed.getPortUrl\",\n message: `Port ${port} is not exposed by this session`,\n });\n }\n const exposed = await sandbox.ports.expose(port);\n const url = new URL(exposed.url);\n if (protocol) url.protocol = `${protocol}:`;\n return url.toString().replace(/\\/$/, \"\");\n },\n async stop() {\n assertActive();\n if (stopped) return;\n await lifecycle.stop?.(sandbox);\n stopped = true;\n },\n async resume() {\n assertActive();\n if (!stopped) return;\n await lifecycle.resume?.(sandbox);\n stopped = false;\n },\n async destroy() {\n if (destroyed) return;\n destroyed = true;\n sessions.delete(id);\n if (lifecycle.destroy) await lifecycle.destroy(sandbox);\n else await sandbox.stop();\n },\n ...(lifecycle.setPorts\n ? {\n async setPorts(ports: ReadonlyArray<number>, options?: { signal?: AbortSignal }) {\n assertActive();\n await lifecycle.setPorts!(sandbox, ports, options?.signal);\n initialPorts.clear();\n for (const port of ports) initialPorts.add(port);\n },\n }\n : {}),\n ...(lifecycle.setNetworkPolicy\n ? {\n setNetworkPolicy: (policy: SandboxNetworkPolicy) => {\n assertActive();\n return lifecycle.setNetworkPolicy!(sandbox, policy);\n },\n }\n : {}),\n };\n return session;\n}\n\nasync function captureFiles(sandbox: Sandbox, path: string): Promise<TemplateFile[]> {\n const result: TemplateFile[] = [];\n for (const entry of await sandbox.files.list(path)) {\n if (entry.type === \"directory\") result.push(...(await captureFiles(sandbox, entry.path)));\n else if (entry.type === \"file\")\n result.push({\n path: entry.path,\n content: await sandbox.files.read(entry.path),\n });\n }\n return result;\n}\n\nasync function restoreFiles(sandbox: Sandbox, files: ReadonlyArray<TemplateFile>): Promise<void> {\n await Promise.all(files.map((file) => sandbox.files.write(file.path, file.content)));\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { f as Sandbox } from "../types-DEi_dfRR.mjs";
2
- import { o as SandboxProvider } from "../provider-BzzkIVmv.mjs";
1
+ import { f as Sandbox } from "../types-Bv6I2U1c.mjs";
2
+ import { o as SandboxProvider } from "../provider-DOBErkBO.mjs";
3
3
  import { CopyOptions, FileContent, FileEntry, FilesystemInfo, InstructionsOption, ListOptions, MastraFilesystem, MastraFilesystemOptions, MastraSandbox, MastraSandboxOptions, ProcessHandle, ProcessInfo, ProviderStatus, ReadOptions, RemoveOptions, SandboxInfo, SandboxProcessManager, SpawnProcessOptions, Workspace, WorkspaceConfig, WriteOptions } from "@mastra/core/workspace";
4
4
  import { RequestContext } from "@mastra/core/di";
5
5
 
@@ -1,4 +1,4 @@
1
- import { n as isSandboxError, t as SandboxError } from "../errors-Ch9PHKTd.mjs";
1
+ import { n as isSandboxError, t as SandboxError } from "../errors-BuF9bYOQ.mjs";
2
2
  import { DirectoryNotEmptyError, DirectoryNotFoundError, FileExistsError, FileNotFoundError, IsDirectoryError, MastraFilesystem, MastraSandbox, NotDirectoryError, PermissionError, ProcessHandle, SandboxNotReadyError, SandboxProcessManager, StaleFileError, Workspace, WorkspaceReadOnlyError } from "@mastra/core/workspace";
3
3
 
4
4
  //#region src/mastra/index.ts
@@ -1,4 +1,4 @@
1
- import { n as CapabilityMap, u as ProviderName } from "./types-DEi_dfRR.mjs";
1
+ import { n as CapabilityMap, u as ProviderName } from "./types-Bv6I2U1c.mjs";
2
2
 
3
3
  //#region src/metadata.d.ts
4
4
  interface LiveTestResult {
package/dist/metadata.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import "./errors-Ch9PHKTd.mjs";
2
- import "./capabilities-COKpwoFH.mjs";
3
- import { a as upstashCapabilities, i as localCapabilities, n as daytonaCapabilities, o as vercelCapabilities, r as e2bCapabilities } from "./capabilities-CEowrzRM.mjs";
1
+ import "./errors-BuF9bYOQ.mjs";
2
+ import "./capabilities-xs9kaHrK.mjs";
3
+ import { a as localCapabilities, c as vercelCapabilities, i as e2bCapabilities, n as boxCapabilities, o as railwayCapabilities, r as daytonaCapabilities, s as upstashCapabilities } from "./capabilities-CaSNd6J1.mjs";
4
4
 
5
5
  //#region src/metadata.ts
6
6
  const providers = [
@@ -92,6 +92,38 @@ const providers = [
92
92
  portBehavior: "Creates a public URL by default, or a bearer-token URL whose credential stays inside request().",
93
93
  snapshotBehavior: "Captures persistent workspace state. Restoring creates a new Box and remains available through raw.",
94
94
  runtimeLimitations: "Durable Debian or Alpine boxes with Node.js, Python, Go, Ruby, or Rust runtimes."
95
+ },
96
+ {
97
+ id: "box",
98
+ displayName: "Ascii Box",
99
+ officialUrl: "https://docs.ascii.dev/box/quickstart",
100
+ packageName: "@asciidev/box-sdk",
101
+ packageVersion: "0.0.24",
102
+ capabilities: boxCapabilities,
103
+ environmentVariables: ["BOX_API_KEY", "BOX_BASE_URL"],
104
+ technicalStatus: "supported",
105
+ providerReviewed: false,
106
+ sponsor: false,
107
+ liveTest: null,
108
+ portBehavior: "Runs Box's native host command and returns a public HTTPS URL by default; protected mode can be requested explicitly.",
109
+ snapshotBehavior: "Stop and resume snapshots are available through the native Box client; on-demand normalized snapshots are not exposed.",
110
+ runtimeLimitations: "Foreground commands use the Box HTTP command endpoint, which has a 60-second maximum and no streaming or background-process handle."
111
+ },
112
+ {
113
+ id: "railway",
114
+ displayName: "Railway Sandboxes",
115
+ officialUrl: "https://docs.railway.com/sandboxes",
116
+ packageName: "railway",
117
+ packageVersion: "3.5.7",
118
+ capabilities: railwayCapabilities,
119
+ environmentVariables: ["RAILWAY_API_TOKEN", "RAILWAY_ENVIRONMENT_ID"],
120
+ technicalStatus: "experimental",
121
+ providerReviewed: false,
122
+ sponsor: false,
123
+ liveTest: null,
124
+ portBehavior: "The TypeScript SDK has no public preview URL API; use Railway CLI port forwarding outside the normalized runtime.",
125
+ snapshotBehavior: "Creates and deletes named Railway checkpoints. Booting from a checkpoint creates a new sandbox and remains on raw.",
126
+ runtimeLimitations: "Railway Sandboxes are in Priority Boarding and the provider SDK may introduce breaking changes between releases."
95
127
  }
96
128
  ];
97
129
  function getProviderMetadata(id) {
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.mjs","names":["providers: readonly ProviderMetadata[]"],"sources":["../src/metadata.ts"],"sourcesContent":["import {\n daytonaCapabilities,\n e2bCapabilities,\n localCapabilities,\n upstashCapabilities,\n vercelCapabilities,\n} from \"./providers/capabilities\";\nimport type { CapabilityMap, ProviderName } from \"./core/types\";\n\nexport interface LiveTestResult {\n provider: ProviderName;\n testedAt: string;\n adapterVersion: string;\n providerSdkVersion: string;\n passed: number;\n failed: number;\n skipped: number;\n capabilities: Partial<CapabilityMap>;\n}\n\nexport interface ProviderMetadata {\n id: ProviderName;\n displayName: string;\n officialUrl: string;\n packageName: string | null;\n packageVersion: string;\n capabilities: CapabilityMap;\n environmentVariables: readonly string[];\n technicalStatus: \"supported\" | \"experimental\";\n providerReviewed: boolean;\n sponsor: boolean;\n liveTest: LiveTestResult | null;\n portBehavior: string;\n snapshotBehavior: string;\n runtimeLimitations: string;\n}\n\nexport const providers: readonly ProviderMetadata[] = [\n {\n id: \"local\",\n displayName: \"Local\",\n officialUrl: \"https://rivet.dev/docs/agent-os/\",\n packageName: \"@rivet-dev/agentos-core\",\n packageVersion: \"0.2.7\",\n capabilities: localCapabilities,\n environmentVariables: [],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Returns a private in-process URL. HTTP traffic is bridged through ExposedPort.request().\",\n snapshotBehavior:\n \"Exports the AgentOS virtual filesystem and recreates the VM when restoring it.\",\n runtimeLimitations:\n \"Powered by the beta AgentOS runtime. Requires a supported Node.js host and cannot run arbitrary native Linux binaries.\",\n },\n {\n id: \"e2b\",\n displayName: \"E2B\",\n officialUrl: \"https://e2b.dev/docs\",\n packageName: \"e2b\",\n packageVersion: \"2.32.0\",\n capabilities: e2bCapabilities,\n environmentVariables: [\"E2B_API_KEY\"],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Returns an E2B host. Restricted traffic uses the native access token only inside request().\",\n snapshotBehavior:\n \"Creates persistent E2B snapshot templates; restore creates a new native sandbox and remains on raw.\",\n runtimeLimitations: \"Requires Node.js 20.18.1 or newer and an E2B account.\",\n },\n {\n id: \"daytona\",\n displayName: \"Daytona\",\n officialUrl: \"https://www.daytona.io/docs/en/sandboxes/\",\n packageName: \"@daytona/sdk\",\n packageVersion: \"0.196.0\",\n capabilities: daytonaCapabilities,\n environmentVariables: [\"DAYTONA_API_KEY\", \"DAYTONA_API_URL\", \"DAYTONA_TARGET\"],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Returns public or token-authenticated preview URLs according to the sandbox setting.\",\n snapshotBehavior:\n \"Daytona snapshot and fork operations have provider-specific lifecycle semantics and remain on raw.\",\n runtimeLimitations: \"Some binary and streaming methods require a Node.js-compatible runtime.\",\n },\n {\n id: \"vercel\",\n displayName: \"Vercel Sandbox\",\n officialUrl: \"https://vercel.com/docs/sandbox\",\n packageName: \"@vercel/sandbox\",\n packageVersion: \"2.5.0\",\n capabilities: vercelCapabilities,\n environmentVariables: [\n \"VERCEL_OIDC_TOKEN\",\n \"VERCEL_TOKEN\",\n \"VERCEL_TEAM_ID\",\n \"VERCEL_PROJECT_ID\",\n ],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Returns a public vercel.run route. Port registration is updated when expose() is called.\",\n snapshotBehavior:\n \"Creating a filesystem snapshot stops the session. Starting from it creates a new sandbox through raw.\",\n runtimeLimitations:\n \"Available runtimes are controlled by Vercel; node24 is the adapter default.\",\n },\n {\n id: \"upstash\",\n displayName: \"Upstash Box\",\n officialUrl: \"https://upstash.com/docs/box\",\n packageName: \"@upstash/box\",\n packageVersion: \"0.5.3\",\n capabilities: upstashCapabilities,\n environmentVariables: [\"UPSTASH_BOX_API_KEY\"],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Creates a public URL by default, or a bearer-token URL whose credential stays inside request().\",\n snapshotBehavior:\n \"Captures persistent workspace state. Restoring creates a new Box and remains available through raw.\",\n runtimeLimitations:\n \"Durable Debian or Alpine boxes with Node.js, Python, Go, Ruby, or Rust runtimes.\",\n },\n];\n\nexport function getProviderMetadata(id: ProviderName): ProviderMetadata {\n return providers.find((provider) => provider.id === id)!;\n}\n"],"mappings":";;;;;AAqCA,MAAaA,YAAyC;CACpD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB,EAAE;EACxB,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBACE;EACH;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB,CAAC,cAAc;EACrC,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBAAoB;EACrB;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB;GAAC;GAAmB;GAAmB;GAAiB;EAC9E,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBAAoB;EACrB;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB;GACpB;GACA;GACA;GACA;GACD;EACD,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBACE;EACH;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB,CAAC,sBAAsB;EAC7C,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBACE;EACH;CACF;AAED,SAAgB,oBAAoB,IAAoC;AACtE,QAAO,UAAU,MAAM,aAAa,SAAS,OAAO,GAAG"}
1
+ {"version":3,"file":"metadata.mjs","names":["providers: readonly ProviderMetadata[]"],"sources":["../src/metadata.ts"],"sourcesContent":["import {\n boxCapabilities,\n daytonaCapabilities,\n e2bCapabilities,\n localCapabilities,\n railwayCapabilities,\n upstashCapabilities,\n vercelCapabilities,\n} from \"./providers/capabilities\";\nimport type { CapabilityMap, ProviderName } from \"./core/types\";\n\nexport interface LiveTestResult {\n provider: ProviderName;\n testedAt: string;\n adapterVersion: string;\n providerSdkVersion: string;\n passed: number;\n failed: number;\n skipped: number;\n capabilities: Partial<CapabilityMap>;\n}\n\nexport interface ProviderMetadata {\n id: ProviderName;\n displayName: string;\n officialUrl: string;\n packageName: string | null;\n packageVersion: string;\n capabilities: CapabilityMap;\n environmentVariables: readonly string[];\n technicalStatus: \"supported\" | \"experimental\";\n providerReviewed: boolean;\n sponsor: boolean;\n liveTest: LiveTestResult | null;\n portBehavior: string;\n snapshotBehavior: string;\n runtimeLimitations: string;\n}\n\nexport const providers: readonly ProviderMetadata[] = [\n {\n id: \"local\",\n displayName: \"Local\",\n officialUrl: \"https://rivet.dev/docs/agent-os/\",\n packageName: \"@rivet-dev/agentos-core\",\n packageVersion: \"0.2.7\",\n capabilities: localCapabilities,\n environmentVariables: [],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Returns a private in-process URL. HTTP traffic is bridged through ExposedPort.request().\",\n snapshotBehavior:\n \"Exports the AgentOS virtual filesystem and recreates the VM when restoring it.\",\n runtimeLimitations:\n \"Powered by the beta AgentOS runtime. Requires a supported Node.js host and cannot run arbitrary native Linux binaries.\",\n },\n {\n id: \"e2b\",\n displayName: \"E2B\",\n officialUrl: \"https://e2b.dev/docs\",\n packageName: \"e2b\",\n packageVersion: \"2.32.0\",\n capabilities: e2bCapabilities,\n environmentVariables: [\"E2B_API_KEY\"],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Returns an E2B host. Restricted traffic uses the native access token only inside request().\",\n snapshotBehavior:\n \"Creates persistent E2B snapshot templates; restore creates a new native sandbox and remains on raw.\",\n runtimeLimitations: \"Requires Node.js 20.18.1 or newer and an E2B account.\",\n },\n {\n id: \"daytona\",\n displayName: \"Daytona\",\n officialUrl: \"https://www.daytona.io/docs/en/sandboxes/\",\n packageName: \"@daytona/sdk\",\n packageVersion: \"0.196.0\",\n capabilities: daytonaCapabilities,\n environmentVariables: [\"DAYTONA_API_KEY\", \"DAYTONA_API_URL\", \"DAYTONA_TARGET\"],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Returns public or token-authenticated preview URLs according to the sandbox setting.\",\n snapshotBehavior:\n \"Daytona snapshot and fork operations have provider-specific lifecycle semantics and remain on raw.\",\n runtimeLimitations: \"Some binary and streaming methods require a Node.js-compatible runtime.\",\n },\n {\n id: \"vercel\",\n displayName: \"Vercel Sandbox\",\n officialUrl: \"https://vercel.com/docs/sandbox\",\n packageName: \"@vercel/sandbox\",\n packageVersion: \"2.5.0\",\n capabilities: vercelCapabilities,\n environmentVariables: [\n \"VERCEL_OIDC_TOKEN\",\n \"VERCEL_TOKEN\",\n \"VERCEL_TEAM_ID\",\n \"VERCEL_PROJECT_ID\",\n ],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Returns a public vercel.run route. Port registration is updated when expose() is called.\",\n snapshotBehavior:\n \"Creating a filesystem snapshot stops the session. Starting from it creates a new sandbox through raw.\",\n runtimeLimitations:\n \"Available runtimes are controlled by Vercel; node24 is the adapter default.\",\n },\n {\n id: \"upstash\",\n displayName: \"Upstash Box\",\n officialUrl: \"https://upstash.com/docs/box\",\n packageName: \"@upstash/box\",\n packageVersion: \"0.5.3\",\n capabilities: upstashCapabilities,\n environmentVariables: [\"UPSTASH_BOX_API_KEY\"],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Creates a public URL by default, or a bearer-token URL whose credential stays inside request().\",\n snapshotBehavior:\n \"Captures persistent workspace state. Restoring creates a new Box and remains available through raw.\",\n runtimeLimitations:\n \"Durable Debian or Alpine boxes with Node.js, Python, Go, Ruby, or Rust runtimes.\",\n },\n {\n id: \"box\",\n displayName: \"Ascii Box\",\n officialUrl: \"https://docs.ascii.dev/box/quickstart\",\n packageName: \"@asciidev/box-sdk\",\n packageVersion: \"0.0.24\",\n capabilities: boxCapabilities,\n environmentVariables: [\"BOX_API_KEY\", \"BOX_BASE_URL\"],\n technicalStatus: \"supported\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"Runs Box's native host command and returns a public HTTPS URL by default; protected mode can be requested explicitly.\",\n snapshotBehavior:\n \"Stop and resume snapshots are available through the native Box client; on-demand normalized snapshots are not exposed.\",\n runtimeLimitations:\n \"Foreground commands use the Box HTTP command endpoint, which has a 60-second maximum and no streaming or background-process handle.\",\n },\n {\n id: \"railway\",\n displayName: \"Railway Sandboxes\",\n officialUrl: \"https://docs.railway.com/sandboxes\",\n packageName: \"railway\",\n packageVersion: \"3.5.7\",\n capabilities: railwayCapabilities,\n environmentVariables: [\"RAILWAY_API_TOKEN\", \"RAILWAY_ENVIRONMENT_ID\"],\n technicalStatus: \"experimental\",\n providerReviewed: false,\n sponsor: false,\n liveTest: null,\n portBehavior:\n \"The TypeScript SDK has no public preview URL API; use Railway CLI port forwarding outside the normalized runtime.\",\n snapshotBehavior:\n \"Creates and deletes named Railway checkpoints. Booting from a checkpoint creates a new sandbox and remains on raw.\",\n runtimeLimitations:\n \"Railway Sandboxes are in Priority Boarding and the provider SDK may introduce breaking changes between releases.\",\n },\n];\n\nexport function getProviderMetadata(id: ProviderName): ProviderMetadata {\n return providers.find((provider) => provider.id === id)!;\n}\n"],"mappings":";;;;;AAuCA,MAAaA,YAAyC;CACpD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB,EAAE;EACxB,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBACE;EACH;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB,CAAC,cAAc;EACrC,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBAAoB;EACrB;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB;GAAC;GAAmB;GAAmB;GAAiB;EAC9E,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBAAoB;EACrB;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB;GACpB;GACA;GACA;GACA;GACD;EACD,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBACE;EACH;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB,CAAC,sBAAsB;EAC7C,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBACE;EACH;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB,CAAC,eAAe,eAAe;EACrD,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBACE;EACH;CACD;EACE,IAAI;EACJ,aAAa;EACb,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,sBAAsB,CAAC,qBAAqB,yBAAyB;EACrE,iBAAiB;EACjB,kBAAkB;EAClB,SAAS;EACT,UAAU;EACV,cACE;EACF,kBACE;EACF,oBACE;EACH;CACF;AAED,SAAgB,oBAAoB,IAAoC;AACtE,QAAO,UAAU,MAAM,aAAa,SAAS,OAAO,GAAG"}
@@ -1,4 +1,4 @@
1
- import { a as CommandResult, d as RunOptions, f as Sandbox, g as SandboxProcess, i as CommandInput, n as CapabilityMap, o as ExposedPort, p as SandboxDirectoryEntry, s as FileValue, u as ProviderName, v as SandboxSnapshot } from "./types-DEi_dfRR.mjs";
1
+ import { a as CommandResult, d as RunOptions, f as Sandbox, g as SandboxProcess, i as CommandInput, n as CapabilityMap, o as ExposedPort, p as SandboxDirectoryEntry, s as FileValue, u as ProviderName, v as SandboxSnapshot } from "./types-Bv6I2U1c.mjs";
2
2
 
3
3
  //#region src/core/provider.d.ts
4
4
  interface ProviderCreateOptions {
@@ -88,4 +88,4 @@ interface ManagedSandboxProvider {
88
88
  }
89
89
  //#endregion
90
90
  export { SandboxNetworkPolicy as a, ManagedSandboxSession as i, ManagedSandboxProvider as n, SandboxProvider as o, ManagedSandboxResumeOptions as r, ManagedSandboxCreateOptions as t };
91
- //# sourceMappingURL=provider-BzzkIVmv.d.mts.map
91
+ //# sourceMappingURL=provider-DOBErkBO.d.mts.map
@@ -0,0 +1,57 @@
1
+ import { t as SandboxError } from "./errors-BuF9bYOQ.mjs";
2
+
3
+ //#region src/internal/provider-utils.ts
4
+ async function toUint8Array(value) {
5
+ if (typeof value === "string") return new TextEncoder().encode(value);
6
+ if (value instanceof Uint8Array) return value;
7
+ if (value instanceof ArrayBuffer) return new Uint8Array(value);
8
+ if (value instanceof Blob) return new Uint8Array(await value.arrayBuffer());
9
+ const response = new Response(value);
10
+ return new Uint8Array(await response.arrayBuffer());
11
+ }
12
+ function commandString(input) {
13
+ if (typeof input === "string") return input;
14
+ return [input.command, ...input.args ?? []].map(shellQuote).join(" ");
15
+ }
16
+ function shellQuote(value) {
17
+ return `'${value.replaceAll("'", `'"'"'`)}'`;
18
+ }
19
+ function portResult(port, url, isPublic, authenticated, request) {
20
+ return {
21
+ port,
22
+ url,
23
+ public: isPublic,
24
+ authenticated,
25
+ request,
26
+ toJSON: () => ({
27
+ port,
28
+ url: authenticated ? redactUrl(url) : url,
29
+ public: isPublic,
30
+ authenticated
31
+ })
32
+ };
33
+ }
34
+ function redactUrl(url) {
35
+ const parsed = new URL(url);
36
+ for (const key of parsed.searchParams.keys()) parsed.searchParams.set(key, "[REDACTED]");
37
+ return parsed.toString();
38
+ }
39
+ function unsupported(provider, operation) {
40
+ throw new SandboxError({
41
+ code: "unsupported",
42
+ provider,
43
+ operation,
44
+ message: `${provider} does not support normalized ${operation}`
45
+ });
46
+ }
47
+ function unsupportedSnapshots(provider) {
48
+ return {
49
+ create: async () => unsupported(provider, "snapshot.create"),
50
+ delete: async () => unsupported(provider, "snapshot.delete"),
51
+ restore: async () => unsupported(provider, "snapshot.restore")
52
+ };
53
+ }
54
+
55
+ //#endregion
56
+ export { unsupportedSnapshots as a, unsupported as i, portResult as n, toUint8Array as r, commandString as t };
57
+ //# sourceMappingURL=provider-utils-CfB9nvJx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-utils-CfB9nvJx.mjs","names":[],"sources":["../src/internal/provider-utils.ts"],"sourcesContent":["import { SandboxError } from \"../core/errors\";\nimport type { CommandInput, ExposedPort, FileValue, SandboxSnapshot } from \"../core/types\";\n\nexport async function toUint8Array(value: FileValue): Promise<Uint8Array> {\n if (typeof value === \"string\") return new TextEncoder().encode(value);\n if (value instanceof Uint8Array) return value;\n if (value instanceof ArrayBuffer) return new Uint8Array(value);\n if (value instanceof Blob) return new Uint8Array(await value.arrayBuffer());\n const response = new Response(value);\n return new Uint8Array(await response.arrayBuffer());\n}\n\nexport function commandString(input: CommandInput): string {\n if (typeof input === \"string\") return input;\n return [input.command, ...(input.args ?? [])].map(shellQuote).join(\" \");\n}\n\nfunction shellQuote(value: string): string {\n return `'${value.replaceAll(\"'\", `'\"'\"'`)}'`;\n}\n\nexport function portResult(\n port: number,\n url: string,\n isPublic: boolean,\n authenticated: boolean,\n request?: (path?: string, init?: RequestInit) => Promise<Response>,\n): ExposedPort {\n return {\n port,\n url,\n public: isPublic,\n authenticated,\n request,\n toJSON: () => ({\n port,\n url: authenticated ? redactUrl(url) : url,\n public: isPublic,\n authenticated,\n }),\n };\n}\n\nfunction redactUrl(url: string): string {\n const parsed = new URL(url);\n for (const key of parsed.searchParams.keys()) parsed.searchParams.set(key, \"[REDACTED]\");\n return parsed.toString();\n}\n\nexport function unsupported(provider: string, operation: string): never {\n throw new SandboxError({\n code: \"unsupported\",\n provider,\n operation,\n message: `${provider} does not support normalized ${operation}`,\n });\n}\n\nexport function unsupportedSnapshots(provider: string) {\n return {\n create: async (): Promise<SandboxSnapshot> => unsupported(provider, \"snapshot.create\"),\n delete: async (): Promise<void> => unsupported(provider, \"snapshot.delete\"),\n restore: async (): Promise<void> => unsupported(provider, \"snapshot.restore\"),\n };\n}\n"],"mappings":";;;AAGA,eAAsB,aAAa,OAAuC;AACxE,KAAI,OAAO,UAAU,SAAU,QAAO,IAAI,aAAa,CAAC,OAAO,MAAM;AACrE,KAAI,iBAAiB,WAAY,QAAO;AACxC,KAAI,iBAAiB,YAAa,QAAO,IAAI,WAAW,MAAM;AAC9D,KAAI,iBAAiB,KAAM,QAAO,IAAI,WAAW,MAAM,MAAM,aAAa,CAAC;CAC3E,MAAM,WAAW,IAAI,SAAS,MAAM;AACpC,QAAO,IAAI,WAAW,MAAM,SAAS,aAAa,CAAC;;AAGrD,SAAgB,cAAc,OAA6B;AACzD,KAAI,OAAO,UAAU,SAAU,QAAO;AACtC,QAAO,CAAC,MAAM,SAAS,GAAI,MAAM,QAAQ,EAAE,CAAE,CAAC,IAAI,WAAW,CAAC,KAAK,IAAI;;AAGzE,SAAS,WAAW,OAAuB;AACzC,QAAO,IAAI,MAAM,WAAW,KAAK,QAAQ,CAAC;;AAG5C,SAAgB,WACd,MACA,KACA,UACA,eACA,SACa;AACb,QAAO;EACL;EACA;EACA,QAAQ;EACR;EACA;EACA,eAAe;GACb;GACA,KAAK,gBAAgB,UAAU,IAAI,GAAG;GACtC,QAAQ;GACR;GACD;EACF;;AAGH,SAAS,UAAU,KAAqB;CACtC,MAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,MAAK,MAAM,OAAO,OAAO,aAAa,MAAM,CAAE,QAAO,aAAa,IAAI,KAAK,aAAa;AACxF,QAAO,OAAO,UAAU;;AAG1B,SAAgB,YAAY,UAAkB,WAA0B;AACtE,OAAM,IAAI,aAAa;EACrB,MAAM;EACN;EACA;EACA,SAAS,GAAG,SAAS,+BAA+B;EACrD,CAAC;;AAGJ,SAAgB,qBAAqB,UAAkB;AACrD,QAAO;EACL,QAAQ,YAAsC,YAAY,UAAU,kBAAkB;EACtF,QAAQ,YAA2B,YAAY,UAAU,kBAAkB;EAC3E,SAAS,YAA2B,YAAY,UAAU,mBAAmB;EAC9E"}
@@ -1,7 +1,7 @@
1
- import "../../types-DEi_dfRR.mjs";
2
- import "../../provider-BzzkIVmv.mjs";
3
- import "../../index-BufLdrbp.mjs";
4
- import "../../sandbox-Dco6z9aB.mjs";
5
- import { t as agentosCapabilities } from "../../capabilities-DftdOpIu.mjs";
6
- import { n as AgentOsSandbox, r as agentos, t as AgentOsProviderOptions } from "../../index-Bk6GmoEt.mjs";
1
+ import "../../types-Bv6I2U1c.mjs";
2
+ import "../../provider-DOBErkBO.mjs";
3
+ import "../../index-Dh9xob2s.mjs";
4
+ import "../../sandbox-DdEqoXJF.mjs";
5
+ import { t as agentosCapabilities } from "../../capabilities-BWvOVFbH.mjs";
6
+ import { n as AgentOsSandbox, r as agentos, t as AgentOsProviderOptions } from "../../index-CkTwqD0X.mjs";
7
7
  export { AgentOsProviderOptions, AgentOsSandbox, agentos, agentosCapabilities };
@@ -1,8 +1,9 @@
1
- import "../../errors-Ch9PHKTd.mjs";
2
- import "../../capabilities-COKpwoFH.mjs";
3
- import "../../sandbox-rIOcbhtM.mjs";
4
- import { t as agentosCapabilities } from "../../capabilities-CEowrzRM.mjs";
5
- import "../../provider-utils-BjOSWNsh.mjs";
6
- import { t as agentos } from "../../agentos-DFJ4TFaY.mjs";
1
+ import "../../errors-BuF9bYOQ.mjs";
2
+ import "../../capabilities-xs9kaHrK.mjs";
3
+ import "../../sandbox-DgtY5hvt.mjs";
4
+ import { t as agentosCapabilities } from "../../capabilities-CaSNd6J1.mjs";
5
+ import "../../managed-provider-BsZGVQ4I.mjs";
6
+ import "../../provider-utils-CfB9nvJx.mjs";
7
+ import { t as agentos } from "../../agentos-CbrZW7R0.mjs";
7
8
 
8
9
  export { agentos, agentosCapabilities };
@@ -0,0 +1,34 @@
1
+ import "../../types-Bv6I2U1c.mjs";
2
+ import { o as SandboxProvider } from "../../provider-DOBErkBO.mjs";
3
+ import "../../index-Dh9xob2s.mjs";
4
+ import "../../sandbox-DdEqoXJF.mjs";
5
+ import { n as boxCapabilities } from "../../capabilities-BWvOVFbH.mjs";
6
+ import { Box, BoxApi } from "@asciidev/box-sdk";
7
+
8
+ //#region src/providers/box/index.d.ts
9
+ interface BoxOptions {
10
+ /** Box API key. Defaults to BOX_API_KEY. */
11
+ apiKey?: string;
12
+ /** Box API base URL. Defaults to BOX_BASE_URL, then the public v1 endpoint. */
13
+ baseUrl?: string;
14
+ /** Seconds before Box automatically archives. The service default is one hour. */
15
+ ttlSeconds?: number | null;
16
+ /** Withhold account-level secrets from the Box. */
17
+ noEnv?: boolean;
18
+ /** Friendly Box name applied after provisioning. */
19
+ name?: string;
20
+ /** Return ungated hosted URLs instead of protected URLs. Defaults to true. */
21
+ public?: boolean;
22
+ /** Maximum time to wait for provisioning, in milliseconds. Defaults to 10 minutes. */
23
+ readyTimeout?: number;
24
+ }
25
+ interface AsciiBoxSandbox {
26
+ readonly client: BoxApi;
27
+ box: Box;
28
+ readonly readyTimeoutMs: number;
29
+ }
30
+ declare function box(options?: BoxOptions): SandboxProvider<AsciiBoxSandbox>;
31
+ type BoxSandbox = AsciiBoxSandbox;
32
+ //#endregion
33
+ export { AsciiBoxSandbox, BoxOptions, BoxSandbox, box, boxCapabilities };
34
+ //# sourceMappingURL=index.d.mts.map