@opencoredev/sandbox-sdk 0.1.0 → 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.
- package/CHANGELOG.md +10 -0
- package/README.md +24 -8
- package/dist/{agentos-BOFA_q-a.mjs → agentos-CbrZW7R0.mjs} +5 -4
- package/dist/{agentos-BOFA_q-a.mjs.map → agentos-CbrZW7R0.mjs.map} +1 -1
- package/dist/ai/harness.d.mts +2 -2
- package/dist/ai/harness.mjs +2 -2
- package/dist/ai/index.d.mts +1 -1
- package/dist/ai/index.mjs +2 -2
- package/dist/{ai-DhfwIZdL.mjs → ai-DeFa8yPk.mjs} +2 -2
- package/dist/{ai-DhfwIZdL.mjs.map → ai-DeFa8yPk.mjs.map} +1 -1
- package/dist/{capabilities-CMnszzpt.d.mts → capabilities-BWvOVFbH.d.mts} +5 -3
- package/dist/{capabilities-CEowrzRM.mjs → capabilities-CaSNd6J1.mjs} +29 -3
- package/dist/{capabilities-CEowrzRM.mjs.map → capabilities-CaSNd6J1.mjs.map} +1 -1
- package/dist/{capabilities-COKpwoFH.mjs → capabilities-xs9kaHrK.mjs} +2 -2
- package/dist/{capabilities-COKpwoFH.mjs.map → capabilities-xs9kaHrK.mjs.map} +1 -1
- package/dist/{errors-Ch9PHKTd.mjs → errors-BuF9bYOQ.mjs} +10 -3
- package/dist/errors-BuF9bYOQ.mjs.map +1 -0
- package/dist/eve/index.d.mts +2 -2
- package/dist/eve/index.mjs +2 -2
- package/dist/{index-B1YT6OQ8.d.mts → index-CkTwqD0X.d.mts} +2 -2
- package/dist/{index-BMFkO6Fv.d.mts → index-Dh9xob2s.d.mts} +2 -2
- package/dist/index.d.mts +4 -4
- package/dist/index.mjs +6 -4
- package/dist/index.mjs.map +1 -1
- package/dist/{provider-utils-DilOYLBO.mjs → managed-provider-BsZGVQ4I.mjs} +4 -57
- package/dist/managed-provider-BsZGVQ4I.mjs.map +1 -0
- package/dist/mastra/index.d.mts +2 -2
- package/dist/mastra/index.mjs +1 -1
- package/dist/metadata.d.mts +1 -1
- package/dist/metadata.mjs +37 -5
- package/dist/metadata.mjs.map +1 -1
- package/dist/{provider-_caCV8kk.d.mts → provider-DOBErkBO.d.mts} +2 -2
- package/dist/provider-utils-CfB9nvJx.mjs +57 -0
- package/dist/provider-utils-CfB9nvJx.mjs.map +1 -0
- package/dist/providers/agentos/index.d.mts +6 -6
- package/dist/providers/agentos/index.mjs +7 -6
- package/dist/providers/box/index.d.mts +34 -0
- package/dist/providers/box/index.mjs +348 -0
- package/dist/providers/box/index.mjs.map +1 -0
- package/dist/providers/daytona/index.d.mts +5 -5
- package/dist/providers/daytona/index.mjs +6 -5
- package/dist/providers/daytona/index.mjs.map +1 -1
- package/dist/providers/e2b/index.d.mts +5 -5
- package/dist/providers/e2b/index.mjs +6 -5
- package/dist/providers/e2b/index.mjs.map +1 -1
- package/dist/providers/local/index.d.mts +6 -6
- package/dist/providers/local/index.mjs +7 -6
- package/dist/providers/local/index.mjs.map +1 -1
- package/dist/providers/railway/index.d.mts +29 -0
- package/dist/providers/railway/index.mjs +211 -0
- package/dist/providers/railway/index.mjs.map +1 -0
- package/dist/providers/upstash/index.d.mts +5 -5
- package/dist/providers/upstash/index.mjs +6 -5
- package/dist/providers/upstash/index.mjs.map +1 -1
- package/dist/providers/vercel/index.d.mts +6 -5
- package/dist/providers/vercel/index.mjs +6 -5
- package/dist/providers/vercel/index.mjs.map +1 -1
- package/dist/{sandbox-BUYT-1C9.d.mts → sandbox-DdEqoXJF.d.mts} +12 -3
- package/dist/{sandbox-BwyHcB_C.mjs → sandbox-DgtY5hvt.mjs} +13 -3
- package/dist/sandbox-DgtY5hvt.mjs.map +1 -0
- package/dist/testing/index.d.mts +3 -3
- package/dist/testing/index.mjs +3 -3
- package/dist/{types-BTagTtsp.d.mts → types-Bv6I2U1c.d.mts} +5 -2
- package/package.json +23 -3
- package/dist/errors-Ch9PHKTd.mjs.map +0 -1
- package/dist/provider-utils-DilOYLBO.mjs.map +0 -1
- package/dist/sandbox-BwyHcB_C.mjs.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../src/core/types.ts"],"sourcesContent":["export const providerNames = [\"local\"
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/core/types.ts"],"sourcesContent":["export const providerNames = [\n \"local\",\n \"e2b\",\n \"daytona\",\n \"vercel\",\n \"upstash\",\n \"box\",\n \"railway\",\n] as const;\nexport type ProviderName = (typeof providerNames)[number];\n\nexport const capabilityNames = [\n \"files.read\",\n \"files.write\",\n \"files.list\",\n \"files.remove\",\n \"process.run\",\n \"process.stream\",\n \"process.background\",\n \"process.stdin\",\n \"process.cancel\",\n \"ports.expose\",\n \"ports.authenticatedRequest\",\n \"snapshot.create\",\n \"snapshot.delete\",\n \"snapshot.restore\",\n \"sandbox.resume\",\n \"filesystem.persistent\",\n \"image.custom\",\n \"network.policy\",\n \"process.pty\",\n \"compute.gpu\",\n] as const;\n\nexport type Capability = (typeof capabilityNames)[number];\nexport type CapabilityMode =\n | \"filesystem\"\n | \"memory\"\n | \"template\"\n | \"fork\"\n | \"public\"\n | \"authenticated\"\n | \"combined-stream\"\n | \"separate-streams\"\n | \"ephemeral\"\n | \"persistent\"\n | \"localhost\"\n | \"in-process\"\n | \"full\"\n | \"native\";\n\nexport type CapabilityMap = Readonly<Record<Capability, false | CapabilityMode>>;\n\nexport type CommandInput = string | { command: string; args?: readonly string[] };\n\nexport interface RunOptions {\n cwd?: string;\n env?: Readonly<Record<string, string>>;\n timeout?: number;\n signal?: AbortSignal;\n}\n\nexport interface CommandResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n success: boolean;\n signal?: string;\n durationMs?: number;\n}\n\nexport type FileValue = string | Uint8Array | ArrayBuffer | Blob | ReadableStream<Uint8Array>;\n\nexport interface SandboxDirectoryEntry {\n name: string;\n path: string;\n type: \"file\" | \"directory\" | \"symlink\" | \"unknown\";\n size?: number;\n}\n\nexport interface SandboxFiles {\n write(path: string, value: FileValue): Promise<void>;\n read(path: string): Promise<Uint8Array>;\n text(path: string): Promise<string>;\n list(path?: string): Promise<SandboxDirectoryEntry[]>;\n mkdir(path: string): Promise<void>;\n remove(path: string): Promise<void>;\n exists(path: string): Promise<boolean>;\n}\n\nexport interface ProcessOutputEvent {\n stream: \"stdout\" | \"stderr\";\n data: string | Uint8Array;\n timestamp?: Date;\n}\n\nexport type ProcessStatus = \"starting\" | \"running\" | \"exited\" | \"killed\" | \"unknown\";\n\nexport interface SandboxProcess {\n readonly id: string;\n status(): Promise<ProcessStatus>;\n output(): AsyncIterable<ProcessOutputEvent>;\n write(value: string | Uint8Array): Promise<void>;\n wait(): Promise<{ exitCode: number }>;\n kill(signal?: string): Promise<void>;\n}\n\nexport interface SandboxProcesses {\n start(command: CommandInput, options?: RunOptions): Promise<SandboxProcess>;\n}\n\nexport interface ExposedPort {\n readonly port: number;\n readonly url: string;\n readonly public: boolean;\n readonly authenticated: boolean;\n request?(path?: string, init?: RequestInit): Promise<Response>;\n toJSON(): Omit<ExposedPort, \"request\" | \"toJSON\">;\n}\n\nexport interface SandboxPorts {\n expose(port: number): Promise<ExposedPort>;\n}\n\nexport interface SandboxSnapshot {\n readonly id: string;\n readonly name?: string;\n readonly mode: CapabilityMode;\n readonly createdAt?: Date;\n}\n\nexport interface SandboxSnapshots {\n create(options?: { name?: string }): Promise<SandboxSnapshot>;\n delete(snapshot: SandboxSnapshot | string): Promise<void>;\n restore(snapshot: SandboxSnapshot | string): Promise<void>;\n}\n\nexport interface Sandbox<TRaw = unknown> {\n readonly id: string;\n readonly provider: ProviderName;\n readonly cwd: string;\n readonly capabilities: CapabilityMap;\n readonly raw: TRaw;\n readonly files: SandboxFiles;\n readonly processes: SandboxProcesses;\n readonly ports: SandboxPorts;\n readonly snapshots: SandboxSnapshots;\n run(command: CommandInput, options?: RunOptions): Promise<CommandResult>;\n /** Stops the provider runtime. Repeated calls share the same cleanup operation. */\n stop(): Promise<void>;\n /** Stops the sandbox when an `await using` scope exits. */\n [Symbol.asyncDispose](): Promise<void>;\n}\n"],"mappings":";;;;;AAAA,MAAa,gBAAgB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAGD,MAAa,kBAAkB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as SandboxError } from "./errors-
|
|
2
|
-
import { t as createSandbox } from "./sandbox-
|
|
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
|
-
|
|
148
|
-
|
|
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-DilOYLBO.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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"}
|
package/dist/mastra/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { f as Sandbox } from "../types-
|
|
2
|
-
import { o as SandboxProvider } from "../provider-
|
|
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
|
|
package/dist/mastra/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as isSandboxError, t as SandboxError } from "../errors-
|
|
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
|
package/dist/metadata.d.mts
CHANGED
package/dist/metadata.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import "./errors-
|
|
2
|
-
import "./capabilities-
|
|
3
|
-
import { a as
|
|
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 = [
|
|
@@ -23,7 +23,7 @@ const providers = [
|
|
|
23
23
|
{
|
|
24
24
|
id: "e2b",
|
|
25
25
|
displayName: "E2B",
|
|
26
|
-
officialUrl: "https://e2b.dev",
|
|
26
|
+
officialUrl: "https://e2b.dev/docs",
|
|
27
27
|
packageName: "e2b",
|
|
28
28
|
packageVersion: "2.32.0",
|
|
29
29
|
capabilities: e2bCapabilities,
|
|
@@ -39,7 +39,7 @@ const providers = [
|
|
|
39
39
|
{
|
|
40
40
|
id: "daytona",
|
|
41
41
|
displayName: "Daytona",
|
|
42
|
-
officialUrl: "https://www.daytona.io",
|
|
42
|
+
officialUrl: "https://www.daytona.io/docs/en/sandboxes/",
|
|
43
43
|
packageName: "@daytona/sdk",
|
|
44
44
|
packageVersion: "0.196.0",
|
|
45
45
|
capabilities: daytonaCapabilities,
|
|
@@ -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) {
|
package/dist/metadata.mjs.map
CHANGED
|
@@ -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\",\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
|
|
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-
|
|
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-
|
|
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-
|
|
2
|
-
import "../../provider-
|
|
3
|
-
import "../../index-
|
|
4
|
-
import "../../sandbox-
|
|
5
|
-
import { t as agentosCapabilities } from "../../capabilities-
|
|
6
|
-
import { n as AgentOsSandbox, r as agentos, t as AgentOsProviderOptions } from "../../index-
|
|
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-
|
|
2
|
-
import "../../capabilities-
|
|
3
|
-
import "../../sandbox-
|
|
4
|
-
import { t as agentosCapabilities } from "../../capabilities-
|
|
5
|
-
import "../../provider-
|
|
6
|
-
import
|
|
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
|