@opencoredev/sandbox-sdk 0.1.1 → 1.0.0-beta.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 (158) hide show
  1. package/CHANGELOG.md +34 -7
  2. package/README.md +350 -23
  3. package/dist/ai.d.ts +5 -0
  4. package/dist/ai.js +1 -0
  5. package/dist/chunk-59t3rqja.js +2 -0
  6. package/dist/chunk-cwx6cc31.js +2 -0
  7. package/dist/chunk-exv1kf89.js +60 -0
  8. package/dist/chunk-gc8zdxyb.js +2 -0
  9. package/dist/chunk-hjzhc3qg.js +40 -0
  10. package/dist/chunk-md6fmprc.js +1 -0
  11. package/dist/chunk-t5vr9nd8.js +8 -0
  12. package/dist/chunk-v6y7eqxw.js +27 -0
  13. package/dist/chunk-yed8mvs7.js +2 -0
  14. package/dist/chunk-yrsb6hws.js +5 -0
  15. package/dist/chunk-z9rjzn28.js +2 -0
  16. package/dist/errors.d.ts +60 -0
  17. package/dist/files.d.ts +57 -0
  18. package/dist/git.d.ts +28 -0
  19. package/dist/handle.d.ts +4 -0
  20. package/dist/index.d.ts +17 -0
  21. package/dist/index.js +1 -0
  22. package/dist/keys.d.ts +5 -0
  23. package/dist/logs.d.ts +8 -0
  24. package/dist/mastra.d.ts +43 -0
  25. package/dist/mastra.js +1 -0
  26. package/dist/memory.d.ts +34 -0
  27. package/dist/memory.js +11 -0
  28. package/dist/openai.d.ts +39 -0
  29. package/dist/openai.js +1 -0
  30. package/dist/peer.d.ts +5 -0
  31. package/dist/processes.d.ts +71 -0
  32. package/dist/provider.d.ts +138 -0
  33. package/dist/provider.js +0 -0
  34. package/dist/providers/agentos/errors.d.ts +4 -0
  35. package/dist/providers/agentos/index.d.ts +11 -0
  36. package/dist/providers/agentos/index.js +2 -0
  37. package/dist/providers/boat/index.d.ts +23 -0
  38. package/dist/providers/boat/index.js +1 -0
  39. package/dist/providers/boat-api/errors.d.ts +6 -0
  40. package/dist/providers/boat-api/exec.d.ts +11 -0
  41. package/dist/providers/boat-api/index.d.ts +22 -0
  42. package/dist/providers/boxd/errors.d.ts +3 -0
  43. package/dist/providers/boxd/execute.d.ts +3 -0
  44. package/dist/providers/boxd/guest.d.ts +14 -0
  45. package/dist/providers/boxd/index.d.ts +23 -0
  46. package/dist/providers/boxd/index.js +85 -0
  47. package/dist/providers/boxd/transfers.d.ts +19 -0
  48. package/dist/providers/daytona/buffered.d.ts +3 -0
  49. package/dist/providers/daytona/errors.d.ts +3 -0
  50. package/dist/providers/daytona/exec.d.ts +14 -0
  51. package/dist/providers/daytona/index.d.ts +24 -0
  52. package/dist/providers/daytona/index.js +88 -0
  53. package/dist/providers/e2b/errors.d.ts +3 -0
  54. package/dist/providers/e2b/index.d.ts +15 -0
  55. package/dist/providers/e2b/index.js +1 -0
  56. package/dist/providers/freestyle/deadline.d.ts +4 -0
  57. package/dist/providers/freestyle/errors.d.ts +16 -0
  58. package/dist/providers/freestyle/execute.d.ts +12 -0
  59. package/dist/providers/freestyle/index.d.ts +14 -0
  60. package/dist/providers/freestyle/index.js +133 -0
  61. package/dist/providers/freestyle/wire.d.ts +10 -0
  62. package/dist/providers/local/docker.d.ts +32 -0
  63. package/dist/providers/local/index.d.ts +17 -0
  64. package/dist/providers/local/index.js +2 -0
  65. package/dist/providers/railway/errors.d.ts +4 -0
  66. package/dist/providers/railway/index.d.ts +24 -0
  67. package/dist/providers/railway/index.js +1 -0
  68. package/dist/providers/sandboxer/index.d.ts +33 -0
  69. package/dist/providers/sandboxer/index.js +1 -0
  70. package/dist/providers/superserve/bootstrap.d.ts +11 -0
  71. package/dist/providers/superserve/errors.d.ts +3 -0
  72. package/dist/providers/superserve/execute.d.ts +13 -0
  73. package/dist/providers/superserve/index.d.ts +23 -0
  74. package/dist/providers/superserve/index.js +126 -0
  75. package/dist/providers/tenki/deadline.d.ts +2 -0
  76. package/dist/providers/tenki/errors.d.ts +10 -0
  77. package/dist/providers/tenki/exec.d.ts +4 -0
  78. package/dist/providers/tenki/files.d.ts +3 -0
  79. package/dist/providers/tenki/index.d.ts +28 -0
  80. package/dist/providers/tenki/index.js +172 -0
  81. package/dist/providers/tenki/ready.d.ts +7 -0
  82. package/dist/providers/tenki/stream.d.ts +3 -0
  83. package/dist/providers/upstash/buffered.d.ts +3 -0
  84. package/dist/providers/upstash/errors.d.ts +3 -0
  85. package/dist/providers/upstash/exec.d.ts +18 -0
  86. package/dist/providers/upstash/files.d.ts +15 -0
  87. package/dist/providers/upstash/index.d.ts +38 -0
  88. package/dist/providers/upstash/index.js +111 -0
  89. package/dist/providers/vercel/errors.d.ts +3 -0
  90. package/dist/providers/vercel/index.d.ts +14 -0
  91. package/dist/providers/vercel/index.js +1 -0
  92. package/dist/providers/vercel/provider.d.ts +10 -0
  93. package/dist/providers/vercel/transport.d.ts +40 -0
  94. package/dist/run.d.ts +41 -0
  95. package/dist/testing.d.ts +17 -0
  96. package/dist/testing.js +6 -0
  97. package/dist/tool-security.d.ts +9 -0
  98. package/dist/tools.d.ts +117 -0
  99. package/dist/tools.js +1 -0
  100. package/dist/types.d.ts +189 -0
  101. package/package.json +170 -92
  102. package/dist/agentos-DFJ4TFaY.mjs +0 -389
  103. package/dist/agentos-DFJ4TFaY.mjs.map +0 -1
  104. package/dist/ai/harness.d.mts +0 -16
  105. package/dist/ai/harness.mjs +0 -69
  106. package/dist/ai/harness.mjs.map +0 -1
  107. package/dist/ai/index.d.mts +0 -54
  108. package/dist/ai/index.mjs +0 -4
  109. package/dist/ai-DhfwIZdL.mjs +0 -243
  110. package/dist/ai-DhfwIZdL.mjs.map +0 -1
  111. package/dist/capabilities-CEowrzRM.mjs +0 -99
  112. package/dist/capabilities-CEowrzRM.mjs.map +0 -1
  113. package/dist/capabilities-COKpwoFH.mjs +0 -28
  114. package/dist/capabilities-COKpwoFH.mjs.map +0 -1
  115. package/dist/capabilities-DftdOpIu.d.mts +0 -13
  116. package/dist/errors-Ch9PHKTd.mjs +0 -61
  117. package/dist/errors-Ch9PHKTd.mjs.map +0 -1
  118. package/dist/eve/index.d.mts +0 -19
  119. package/dist/eve/index.mjs +0 -155
  120. package/dist/eve/index.mjs.map +0 -1
  121. package/dist/index-Bk6GmoEt.d.mts +0 -25
  122. package/dist/index-BufLdrbp.d.mts +0 -31
  123. package/dist/index.d.mts +0 -5
  124. package/dist/index.mjs +0 -38
  125. package/dist/index.mjs.map +0 -1
  126. package/dist/mastra/index.d.mts +0 -118
  127. package/dist/mastra/index.mjs +0 -662
  128. package/dist/mastra/index.mjs.map +0 -1
  129. package/dist/metadata.d.mts +0 -34
  130. package/dist/metadata.mjs +0 -103
  131. package/dist/metadata.mjs.map +0 -1
  132. package/dist/provider-BzzkIVmv.d.mts +0 -91
  133. package/dist/provider-utils-BjOSWNsh.mjs +0 -201
  134. package/dist/provider-utils-BjOSWNsh.mjs.map +0 -1
  135. package/dist/providers/agentos/index.d.mts +0 -7
  136. package/dist/providers/agentos/index.mjs +0 -8
  137. package/dist/providers/daytona/index.d.mts +0 -21
  138. package/dist/providers/daytona/index.mjs +0 -205
  139. package/dist/providers/daytona/index.mjs.map +0 -1
  140. package/dist/providers/e2b/index.d.mts +0 -17
  141. package/dist/providers/e2b/index.mjs +0 -168
  142. package/dist/providers/e2b/index.mjs.map +0 -1
  143. package/dist/providers/local/index.d.mts +0 -22
  144. package/dist/providers/local/index.mjs +0 -21
  145. package/dist/providers/local/index.mjs.map +0 -1
  146. package/dist/providers/upstash/index.d.mts +0 -17
  147. package/dist/providers/upstash/index.mjs +0 -210
  148. package/dist/providers/upstash/index.mjs.map +0 -1
  149. package/dist/providers/vercel/index.d.mts +0 -28
  150. package/dist/providers/vercel/index.mjs +0 -185
  151. package/dist/providers/vercel/index.mjs.map +0 -1
  152. package/dist/sandbox-Dco6z9aB.d.mts +0 -26
  153. package/dist/sandbox-rIOcbhtM.mjs +0 -112
  154. package/dist/sandbox-rIOcbhtM.mjs.map +0 -1
  155. package/dist/testing/index.d.mts +0 -27
  156. package/dist/testing/index.mjs +0 -173
  157. package/dist/testing/index.mjs.map +0 -1
  158. package/dist/types-DEi_dfRR.d.mts +0 -103
@@ -1,243 +0,0 @@
1
- import { n as isSandboxError, r as normalizeError, t as SandboxError } from "./errors-Ch9PHKTd.mjs";
2
- import { jsonSchema, tool } from "ai";
3
-
4
- //#region src/ai/index.ts
5
- /**
6
- * Adapt a sandbox-sdk sandbox to AI SDK 7's experimental sandbox contract.
7
- * The caller continues to own the original sandbox and must stop it.
8
- */
9
- function toAISandboxSession(sandbox, options = {}) {
10
- const read = async (path, abortSignal) => {
11
- throwIfAborted(abortSignal);
12
- try {
13
- const bytes = await sandbox.files.read(path);
14
- throwIfAborted(abortSignal);
15
- return bytes;
16
- } catch (error) {
17
- if (isSandboxError(error) && error.code === "not_found") return null;
18
- throw normalizeError(sandbox.provider, "ai.readFile", error);
19
- }
20
- };
21
- return {
22
- description: options.description ?? `${sandbox.provider} sandbox ${sandbox.id}; default working directory: ${sandbox.cwd}`,
23
- async readFile({ path, abortSignal }) {
24
- const bytes = await read(path, abortSignal);
25
- return bytes === null ? null : bytesToStream(bytes);
26
- },
27
- readBinaryFile: ({ path, abortSignal }) => read(path, abortSignal),
28
- async readTextFile({ path, encoding = "utf-8", startLine, endLine, abortSignal }) {
29
- const bytes = await read(path, abortSignal);
30
- if (bytes === null) return null;
31
- const content = decode(bytes, encoding);
32
- if (startLine === void 0 && endLine === void 0) return content;
33
- validateLineRange(startLine, endLine);
34
- return content.split("\n").slice((startLine ?? 1) - 1, endLine).join("\n");
35
- },
36
- async writeFile({ path, content, abortSignal }) {
37
- throwIfAborted(abortSignal);
38
- await sandbox.files.write(path, abortableStream(content, abortSignal));
39
- throwIfAborted(abortSignal);
40
- },
41
- async writeBinaryFile({ path, content, abortSignal }) {
42
- throwIfAborted(abortSignal);
43
- await sandbox.files.write(path, content);
44
- throwIfAborted(abortSignal);
45
- },
46
- async writeTextFile({ path, content, encoding = "utf-8", abortSignal }) {
47
- throwIfAborted(abortSignal);
48
- await sandbox.files.write(path, encode(content, encoding));
49
- throwIfAborted(abortSignal);
50
- },
51
- async run({ command, workingDirectory, env, abortSignal }) {
52
- const result = await sandbox.run(command, {
53
- cwd: workingDirectory,
54
- env,
55
- signal: abortSignal
56
- });
57
- return {
58
- exitCode: result.exitCode,
59
- stdout: result.stdout,
60
- stderr: result.stderr
61
- };
62
- },
63
- async spawn({ command, workingDirectory, env, abortSignal }) {
64
- return toAIProcess(await sandbox.processes.start(command, {
65
- cwd: workingDirectory,
66
- env,
67
- signal: abortSignal
68
- }), abortSignal);
69
- }
70
- };
71
- }
72
- /** Ready-made AI SDK tools that execute only through `experimental_sandbox`. */
73
- function createSandboxTools() {
74
- return {
75
- bash: tool({
76
- description: "Run a shell command in the sandbox.",
77
- inputSchema: jsonSchema({
78
- type: "object",
79
- properties: {
80
- command: { type: "string" },
81
- workingDirectory: { type: "string" },
82
- env: {
83
- type: "object",
84
- additionalProperties: { type: "string" }
85
- }
86
- },
87
- required: ["command"],
88
- additionalProperties: false
89
- }),
90
- async execute(input, context) {
91
- return requireSandbox(context.experimental_sandbox).run({
92
- command: input.command,
93
- workingDirectory: input.workingDirectory,
94
- env: input.env,
95
- abortSignal: context.abortSignal
96
- });
97
- }
98
- }),
99
- read_file: tool({
100
- description: "Read a text file from the sandbox. Missing files return null.",
101
- inputSchema: jsonSchema({
102
- type: "object",
103
- properties: {
104
- path: { type: "string" },
105
- encoding: { type: "string" },
106
- startLine: {
107
- type: "integer",
108
- minimum: 1
109
- },
110
- endLine: {
111
- type: "integer",
112
- minimum: 1
113
- }
114
- },
115
- required: ["path"],
116
- additionalProperties: false
117
- }),
118
- async execute(input, context) {
119
- return { content: await requireSandbox(context.experimental_sandbox).readTextFile({
120
- ...input,
121
- abortSignal: context.abortSignal
122
- }) };
123
- }
124
- }),
125
- write_file: tool({
126
- description: "Write a text file in the sandbox, creating parent directories.",
127
- inputSchema: jsonSchema({
128
- type: "object",
129
- properties: {
130
- path: { type: "string" },
131
- content: { type: "string" },
132
- encoding: { type: "string" }
133
- },
134
- required: ["path", "content"],
135
- additionalProperties: false
136
- }),
137
- async execute(input, context) {
138
- await requireSandbox(context.experimental_sandbox).writeTextFile({
139
- ...input,
140
- abortSignal: context.abortSignal
141
- });
142
- return { written: true };
143
- }
144
- })
145
- };
146
- }
147
- /** Create the AI SDK 7 `toolApproval` policy for the ready-made sandbox tools. */
148
- function createSandboxToolApproval(approval = "mutations") {
149
- const status = (mutation) => approval === "always" || approval === "mutations" && mutation ? "user-approval" : "not-applicable";
150
- return {
151
- bash: status(true),
152
- read_file: status(false),
153
- write_file: status(true)
154
- };
155
- }
156
- function requireSandbox(value) {
157
- if (!value) throw new SandboxError({
158
- code: "invalid_input",
159
- provider: "ai",
160
- operation: "tool.execute",
161
- message: "experimental_sandbox is required to execute sandbox tools"
162
- });
163
- return value;
164
- }
165
- function toAIProcess(process, abortSignal) {
166
- let stdoutController;
167
- let stderrController;
168
- const stdout = new ReadableStream({ start: (controller) => stdoutController = controller });
169
- const stderr = new ReadableStream({ start: (controller) => stderrController = controller });
170
- const pump = (async () => {
171
- try {
172
- for await (const event of process.output()) {
173
- const bytes = typeof event.data === "string" ? new TextEncoder().encode(event.data) : event.data;
174
- (event.stream === "stdout" ? stdoutController : stderrController).enqueue(bytes);
175
- }
176
- stdoutController.close();
177
- stderrController.close();
178
- } catch (error) {
179
- stdoutController.error(error);
180
- stderrController.error(error);
181
- }
182
- })();
183
- const abort = () => void process.kill();
184
- abortSignal?.addEventListener("abort", abort, { once: true });
185
- return {
186
- pid: Number.isFinite(Number(process.id)) ? Number(process.id) : void 0,
187
- stdout,
188
- stderr,
189
- async wait() {
190
- try {
191
- const result = await process.wait();
192
- await pump;
193
- if (abortSignal?.aborted) throw abortSignal.reason;
194
- return result;
195
- } finally {
196
- abortSignal?.removeEventListener("abort", abort);
197
- }
198
- },
199
- kill: () => process.kill()
200
- };
201
- }
202
- function bytesToStream(bytes) {
203
- return new ReadableStream({ start(controller) {
204
- controller.enqueue(bytes);
205
- controller.close();
206
- } });
207
- }
208
- function abortableStream(stream, signal) {
209
- if (!signal) return stream;
210
- return stream.pipeThrough(new TransformStream({ transform(chunk, controller) {
211
- throwIfAborted(signal);
212
- controller.enqueue(chunk);
213
- } }), { signal });
214
- }
215
- function validateLineRange(startLine, endLine) {
216
- if (startLine !== void 0 && (!Number.isInteger(startLine) || startLine < 1) || endLine !== void 0 && (!Number.isInteger(endLine) || endLine < 1) || startLine !== void 0 && endLine !== void 0 && endLine < startLine) throw new SandboxError({
217
- code: "invalid_input",
218
- provider: "ai",
219
- operation: "readTextFile",
220
- message: "Line ranges must be positive, 1-based, inclusive, and ordered"
221
- });
222
- }
223
- function decode(bytes, encoding) {
224
- try {
225
- return encoding.toLowerCase() === "utf-8" || encoding.toLowerCase() === "utf8" ? new TextDecoder("utf-8", { fatal: true }).decode(bytes) : Buffer.from(bytes).toString(encoding);
226
- } catch (error) {
227
- throw normalizeError("ai", "files.decode", error, "invalid_input");
228
- }
229
- }
230
- function encode(value, encoding) {
231
- try {
232
- return encoding.toLowerCase() === "utf-8" || encoding.toLowerCase() === "utf8" ? new TextEncoder().encode(value) : new Uint8Array(Buffer.from(value, encoding));
233
- } catch (error) {
234
- throw normalizeError("ai", "files.encode", error, "invalid_input");
235
- }
236
- }
237
- function throwIfAborted(signal) {
238
- if (signal?.aborted) throw signal.reason ?? new DOMException("The operation was aborted", "AbortError");
239
- }
240
-
241
- //#endregion
242
- export { createSandboxTools as n, toAISandboxSession as r, createSandboxToolApproval as t };
243
- //# sourceMappingURL=ai-DhfwIZdL.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ai-DhfwIZdL.mjs","names":["stdoutController!: ReadableStreamDefaultController<Uint8Array>","stderrController!: ReadableStreamDefaultController<Uint8Array>"],"sources":["../src/ai/index.ts"],"sourcesContent":["import { jsonSchema, tool } from \"ai\";\nimport type { Experimental_SandboxProcess, Experimental_SandboxSession, Tool, ToolSet } from \"ai\";\nimport { isSandboxError, normalizeError, SandboxError } from \"../core/errors\";\nimport type { Sandbox, SandboxProcess } from \"../core/types\";\n\nexport interface AISandboxSessionOptions {\n description?: string;\n}\n\nexport type SandboxToolApproval = \"mutations\" | \"always\" | \"never\";\n\nexport type SandboxToolApprovalConfiguration = Readonly<{\n bash: \"user-approval\" | \"not-applicable\";\n read_file: \"user-approval\" | \"not-applicable\";\n write_file: \"user-approval\" | \"not-applicable\";\n}>;\n\n/**\n * Adapt a sandbox-sdk sandbox to AI SDK 7's experimental sandbox contract.\n * The caller continues to own the original sandbox and must stop it.\n */\nexport function toAISandboxSession(\n sandbox: Sandbox,\n options: AISandboxSessionOptions = {},\n): Experimental_SandboxSession {\n const read = async (path: string, abortSignal?: AbortSignal): Promise<Uint8Array | null> => {\n throwIfAborted(abortSignal);\n try {\n const bytes = await sandbox.files.read(path);\n throwIfAborted(abortSignal);\n return bytes;\n } catch (error) {\n if (isSandboxError(error) && error.code === \"not_found\") return null;\n throw normalizeError(sandbox.provider, \"ai.readFile\", error);\n }\n };\n\n return {\n description:\n options.description ??\n `${sandbox.provider} sandbox ${sandbox.id}; default working directory: ${sandbox.cwd}`,\n async readFile({ path, abortSignal }) {\n const bytes = await read(path, abortSignal);\n return bytes === null ? null : bytesToStream(bytes);\n },\n readBinaryFile: ({ path, abortSignal }) => read(path, abortSignal),\n async readTextFile({ path, encoding = \"utf-8\", startLine, endLine, abortSignal }) {\n const bytes = await read(path, abortSignal);\n if (bytes === null) return null;\n const content = decode(bytes, encoding);\n if (startLine === undefined && endLine === undefined) return content;\n validateLineRange(startLine, endLine);\n return content\n .split(\"\\n\")\n .slice((startLine ?? 1) - 1, endLine)\n .join(\"\\n\");\n },\n async writeFile({ path, content, abortSignal }) {\n throwIfAborted(abortSignal);\n await sandbox.files.write(path, abortableStream(content, abortSignal));\n throwIfAborted(abortSignal);\n },\n async writeBinaryFile({ path, content, abortSignal }) {\n throwIfAborted(abortSignal);\n await sandbox.files.write(path, content);\n throwIfAborted(abortSignal);\n },\n async writeTextFile({ path, content, encoding = \"utf-8\", abortSignal }) {\n throwIfAborted(abortSignal);\n await sandbox.files.write(path, encode(content, encoding));\n throwIfAborted(abortSignal);\n },\n async run({ command, workingDirectory, env, abortSignal }) {\n const result = await sandbox.run(command, {\n cwd: workingDirectory,\n env,\n signal: abortSignal,\n });\n return { exitCode: result.exitCode, stdout: result.stdout, stderr: result.stderr };\n },\n async spawn({ command, workingDirectory, env, abortSignal }) {\n const process = await sandbox.processes.start(command, {\n cwd: workingDirectory,\n env,\n signal: abortSignal,\n });\n return toAIProcess(process, abortSignal);\n },\n };\n}\n\ntype BashInput = { command: string; workingDirectory?: string; env?: Record<string, string> };\ntype ReadFileInput = { path: string; encoding?: string; startLine?: number; endLine?: number };\ntype WriteFileInput = { path: string; content: string; encoding?: string };\n\nexport type SandboxTools = ToolSet & {\n bash: Tool<BashInput, { exitCode: number; stdout: string; stderr: string }>;\n read_file: Tool<ReadFileInput, { content: string | null }>;\n write_file: Tool<WriteFileInput, { written: true }>;\n};\n\n/** Ready-made AI SDK tools that execute only through `experimental_sandbox`. */\nexport function createSandboxTools(): SandboxTools {\n return {\n bash: tool({\n description: \"Run a shell command in the sandbox.\",\n inputSchema: jsonSchema<BashInput>({\n type: \"object\",\n properties: {\n command: { type: \"string\" },\n workingDirectory: { type: \"string\" },\n env: { type: \"object\", additionalProperties: { type: \"string\" } },\n },\n required: [\"command\"],\n additionalProperties: false,\n }),\n async execute(input, context) {\n const sandbox = requireSandbox(context.experimental_sandbox);\n return sandbox.run({\n command: input.command,\n workingDirectory: input.workingDirectory,\n env: input.env,\n abortSignal: context.abortSignal,\n });\n },\n }),\n read_file: tool({\n description: \"Read a text file from the sandbox. Missing files return null.\",\n inputSchema: jsonSchema<ReadFileInput>({\n type: \"object\",\n properties: {\n path: { type: \"string\" },\n encoding: { type: \"string\" },\n startLine: { type: \"integer\", minimum: 1 },\n endLine: { type: \"integer\", minimum: 1 },\n },\n required: [\"path\"],\n additionalProperties: false,\n }),\n async execute(input, context) {\n const sandbox = requireSandbox(context.experimental_sandbox);\n return {\n content: await sandbox.readTextFile({\n ...input,\n abortSignal: context.abortSignal,\n }),\n };\n },\n }),\n write_file: tool({\n description: \"Write a text file in the sandbox, creating parent directories.\",\n inputSchema: jsonSchema<WriteFileInput>({\n type: \"object\",\n properties: {\n path: { type: \"string\" },\n content: { type: \"string\" },\n encoding: { type: \"string\" },\n },\n required: [\"path\", \"content\"],\n additionalProperties: false,\n }),\n async execute(input, context) {\n const sandbox = requireSandbox(context.experimental_sandbox);\n await sandbox.writeTextFile({ ...input, abortSignal: context.abortSignal });\n return { written: true as const };\n },\n }),\n };\n}\n\n/** Create the AI SDK 7 `toolApproval` policy for the ready-made sandbox tools. */\nexport function createSandboxToolApproval(\n approval: SandboxToolApproval = \"mutations\",\n): SandboxToolApprovalConfiguration {\n const status = (mutation: boolean) =>\n approval === \"always\" || (approval === \"mutations\" && mutation)\n ? (\"user-approval\" as const)\n : (\"not-applicable\" as const);\n\n return {\n bash: status(true),\n read_file: status(false),\n write_file: status(true),\n };\n}\n\nfunction requireSandbox(\n value: Experimental_SandboxSession | undefined,\n): Experimental_SandboxSession {\n if (!value) {\n throw new SandboxError({\n code: \"invalid_input\",\n provider: \"ai\",\n operation: \"tool.execute\",\n message: \"experimental_sandbox is required to execute sandbox tools\",\n });\n }\n return value;\n}\n\nfunction toAIProcess(\n process: SandboxProcess,\n abortSignal?: AbortSignal,\n): Experimental_SandboxProcess {\n let stdoutController!: ReadableStreamDefaultController<Uint8Array>;\n let stderrController!: ReadableStreamDefaultController<Uint8Array>;\n const stdout = new ReadableStream<Uint8Array>({\n start: (controller) => (stdoutController = controller),\n });\n const stderr = new ReadableStream<Uint8Array>({\n start: (controller) => (stderrController = controller),\n });\n const pump = (async () => {\n try {\n for await (const event of process.output()) {\n const bytes =\n typeof event.data === \"string\" ? new TextEncoder().encode(event.data) : event.data;\n (event.stream === \"stdout\" ? stdoutController : stderrController).enqueue(bytes);\n }\n stdoutController.close();\n stderrController.close();\n } catch (error) {\n stdoutController.error(error);\n stderrController.error(error);\n }\n })();\n const abort = () => void process.kill();\n abortSignal?.addEventListener(\"abort\", abort, { once: true });\n return {\n pid: Number.isFinite(Number(process.id)) ? Number(process.id) : undefined,\n stdout,\n stderr,\n async wait() {\n try {\n const result = await process.wait();\n await pump;\n if (abortSignal?.aborted) throw abortSignal.reason;\n return result;\n } finally {\n abortSignal?.removeEventListener(\"abort\", abort);\n }\n },\n kill: () => process.kill(),\n };\n}\n\nfunction bytesToStream(bytes: Uint8Array): ReadableStream<Uint8Array> {\n return new ReadableStream({\n start(controller) {\n controller.enqueue(bytes);\n controller.close();\n },\n });\n}\n\nfunction abortableStream(\n stream: ReadableStream<Uint8Array>,\n signal?: AbortSignal,\n): ReadableStream<Uint8Array> {\n if (!signal) return stream;\n return stream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n throwIfAborted(signal);\n controller.enqueue(chunk);\n },\n }),\n { signal },\n );\n}\n\nfunction validateLineRange(startLine?: number, endLine?: number): void {\n if (\n (startLine !== undefined && (!Number.isInteger(startLine) || startLine < 1)) ||\n (endLine !== undefined && (!Number.isInteger(endLine) || endLine < 1)) ||\n (startLine !== undefined && endLine !== undefined && endLine < startLine)\n ) {\n throw new SandboxError({\n code: \"invalid_input\",\n provider: \"ai\",\n operation: \"readTextFile\",\n message: \"Line ranges must be positive, 1-based, inclusive, and ordered\",\n });\n }\n}\n\nfunction decode(bytes: Uint8Array, encoding: string): string {\n try {\n return encoding.toLowerCase() === \"utf-8\" || encoding.toLowerCase() === \"utf8\"\n ? new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes)\n : Buffer.from(bytes).toString(encoding as BufferEncoding);\n } catch (error) {\n throw normalizeError(\"ai\", \"files.decode\", error, \"invalid_input\");\n }\n}\n\nfunction encode(value: string, encoding: string): Uint8Array {\n try {\n return encoding.toLowerCase() === \"utf-8\" || encoding.toLowerCase() === \"utf8\"\n ? new TextEncoder().encode(value)\n : new Uint8Array(Buffer.from(value, encoding as BufferEncoding));\n } catch (error) {\n throw normalizeError(\"ai\", \"files.encode\", error, \"invalid_input\");\n }\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted)\n throw signal.reason ?? new DOMException(\"The operation was aborted\", \"AbortError\");\n}\n"],"mappings":"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"}
@@ -1,99 +0,0 @@
1
- import { n as defineCapabilities } from "./capabilities-COKpwoFH.mjs";
2
-
3
- //#region src/providers/capabilities.ts
4
- const localCapabilities = defineCapabilities({
5
- "files.read": "full",
6
- "files.write": "full",
7
- "files.list": "full",
8
- "files.remove": "full",
9
- "process.run": "combined-stream",
10
- "process.stream": "combined-stream",
11
- "process.background": "full",
12
- "process.stdin": "full",
13
- "process.cancel": "full",
14
- "ports.expose": "in-process",
15
- "snapshot.create": "filesystem",
16
- "snapshot.delete": "filesystem",
17
- "snapshot.restore": "filesystem",
18
- "sandbox.resume": "memory",
19
- "filesystem.persistent": "ephemeral",
20
- "network.policy": "native"
21
- });
22
- /** @deprecated AgentOS capabilities are exposed as Local capabilities. */
23
- const agentosCapabilities = localCapabilities;
24
- const e2bCapabilities = defineCapabilities({
25
- "files.read": "full",
26
- "files.write": "full",
27
- "files.list": "full",
28
- "files.remove": "full",
29
- "process.run": "separate-streams",
30
- "process.stream": "separate-streams",
31
- "process.background": "full",
32
- "process.stdin": "full",
33
- "process.cancel": "full",
34
- "process.pty": "native",
35
- "ports.expose": "authenticated",
36
- "ports.authenticatedRequest": "authenticated",
37
- "snapshot.create": "template",
38
- "snapshot.delete": "template",
39
- "sandbox.resume": "memory",
40
- "filesystem.persistent": "ephemeral",
41
- "image.custom": "template",
42
- "network.policy": "native"
43
- });
44
- const daytonaCapabilities = defineCapabilities({
45
- "files.read": "full",
46
- "files.write": "full",
47
- "files.list": "full",
48
- "files.remove": "full",
49
- "process.run": "combined-stream",
50
- "process.stream": "separate-streams",
51
- "process.background": "full",
52
- "process.stdin": "full",
53
- "process.cancel": "full",
54
- "process.pty": "native",
55
- "ports.expose": "authenticated",
56
- "ports.authenticatedRequest": "authenticated",
57
- "filesystem.persistent": "persistent",
58
- "image.custom": "native",
59
- "network.policy": "native",
60
- "compute.gpu": "native"
61
- });
62
- const vercelCapabilities = defineCapabilities({
63
- "files.read": "full",
64
- "files.write": "full",
65
- "files.list": "full",
66
- "files.remove": "full",
67
- "process.run": "separate-streams",
68
- "process.stream": "separate-streams",
69
- "process.background": "full",
70
- "process.cancel": "full",
71
- "process.pty": "native",
72
- "ports.expose": "public",
73
- "snapshot.create": "filesystem",
74
- "snapshot.delete": "filesystem",
75
- "sandbox.resume": "persistent",
76
- "filesystem.persistent": "persistent",
77
- "network.policy": "native"
78
- });
79
- const upstashCapabilities = defineCapabilities({
80
- "files.read": "full",
81
- "files.write": "full",
82
- "files.list": "full",
83
- "files.remove": "full",
84
- "process.run": "combined-stream",
85
- "process.stream": "combined-stream",
86
- "process.background": "full",
87
- "ports.expose": "authenticated",
88
- "ports.authenticatedRequest": "authenticated",
89
- "snapshot.create": "filesystem",
90
- "snapshot.delete": "filesystem",
91
- "sandbox.resume": "persistent",
92
- "filesystem.persistent": "persistent",
93
- "image.custom": "native",
94
- "network.policy": "native"
95
- });
96
-
97
- //#endregion
98
- export { upstashCapabilities as a, localCapabilities as i, daytonaCapabilities as n, vercelCapabilities as o, e2bCapabilities as r, agentosCapabilities as t };
99
- //# sourceMappingURL=capabilities-CEowrzRM.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capabilities-CEowrzRM.mjs","names":[],"sources":["../src/providers/capabilities.ts"],"sourcesContent":["import { defineCapabilities } from \"../core/capabilities\";\n\nexport const localCapabilities = defineCapabilities({\n \"files.read\": \"full\",\n \"files.write\": \"full\",\n \"files.list\": \"full\",\n \"files.remove\": \"full\",\n \"process.run\": \"combined-stream\",\n \"process.stream\": \"combined-stream\",\n \"process.background\": \"full\",\n \"process.stdin\": \"full\",\n \"process.cancel\": \"full\",\n \"ports.expose\": \"in-process\",\n \"snapshot.create\": \"filesystem\",\n \"snapshot.delete\": \"filesystem\",\n \"snapshot.restore\": \"filesystem\",\n \"sandbox.resume\": \"memory\",\n \"filesystem.persistent\": \"ephemeral\",\n \"network.policy\": \"native\",\n});\n\n/** @deprecated AgentOS capabilities are exposed as Local capabilities. */\nexport const agentosCapabilities = localCapabilities;\n\nexport const e2bCapabilities = defineCapabilities({\n \"files.read\": \"full\",\n \"files.write\": \"full\",\n \"files.list\": \"full\",\n \"files.remove\": \"full\",\n \"process.run\": \"separate-streams\",\n \"process.stream\": \"separate-streams\",\n \"process.background\": \"full\",\n \"process.stdin\": \"full\",\n \"process.cancel\": \"full\",\n \"process.pty\": \"native\",\n \"ports.expose\": \"authenticated\",\n \"ports.authenticatedRequest\": \"authenticated\",\n \"snapshot.create\": \"template\",\n \"snapshot.delete\": \"template\",\n \"sandbox.resume\": \"memory\",\n \"filesystem.persistent\": \"ephemeral\",\n \"image.custom\": \"template\",\n \"network.policy\": \"native\",\n});\n\nexport const daytonaCapabilities = defineCapabilities({\n \"files.read\": \"full\",\n \"files.write\": \"full\",\n \"files.list\": \"full\",\n \"files.remove\": \"full\",\n \"process.run\": \"combined-stream\",\n \"process.stream\": \"separate-streams\",\n \"process.background\": \"full\",\n \"process.stdin\": \"full\",\n \"process.cancel\": \"full\",\n \"process.pty\": \"native\",\n \"ports.expose\": \"authenticated\",\n \"ports.authenticatedRequest\": \"authenticated\",\n \"filesystem.persistent\": \"persistent\",\n \"image.custom\": \"native\",\n \"network.policy\": \"native\",\n \"compute.gpu\": \"native\",\n});\n\nexport const vercelCapabilities = defineCapabilities({\n \"files.read\": \"full\",\n \"files.write\": \"full\",\n \"files.list\": \"full\",\n \"files.remove\": \"full\",\n \"process.run\": \"separate-streams\",\n \"process.stream\": \"separate-streams\",\n \"process.background\": \"full\",\n \"process.cancel\": \"full\",\n \"process.pty\": \"native\",\n \"ports.expose\": \"public\",\n \"snapshot.create\": \"filesystem\",\n \"snapshot.delete\": \"filesystem\",\n \"sandbox.resume\": \"persistent\",\n \"filesystem.persistent\": \"persistent\",\n \"network.policy\": \"native\",\n});\n\nexport const upstashCapabilities = defineCapabilities({\n \"files.read\": \"full\",\n \"files.write\": \"full\",\n \"files.list\": \"full\",\n \"files.remove\": \"full\",\n \"process.run\": \"combined-stream\",\n \"process.stream\": \"combined-stream\",\n \"process.background\": \"full\",\n \"ports.expose\": \"authenticated\",\n \"ports.authenticatedRequest\": \"authenticated\",\n \"snapshot.create\": \"filesystem\",\n \"snapshot.delete\": \"filesystem\",\n \"sandbox.resume\": \"persistent\",\n \"filesystem.persistent\": \"persistent\",\n \"image.custom\": \"native\",\n \"network.policy\": \"native\",\n});\n"],"mappings":";;;AAEA,MAAa,oBAAoB,mBAAmB;CAClD,cAAc;CACd,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,kBAAkB;CAClB,sBAAsB;CACtB,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,mBAAmB;CACnB,mBAAmB;CACnB,oBAAoB;CACpB,kBAAkB;CAClB,yBAAyB;CACzB,kBAAkB;CACnB,CAAC;;AAGF,MAAa,sBAAsB;AAEnC,MAAa,kBAAkB,mBAAmB;CAChD,cAAc;CACd,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,kBAAkB;CAClB,sBAAsB;CACtB,iBAAiB;CACjB,kBAAkB;CAClB,eAAe;CACf,gBAAgB;CAChB,8BAA8B;CAC9B,mBAAmB;CACnB,mBAAmB;CACnB,kBAAkB;CAClB,yBAAyB;CACzB,gBAAgB;CAChB,kBAAkB;CACnB,CAAC;AAEF,MAAa,sBAAsB,mBAAmB;CACpD,cAAc;CACd,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,kBAAkB;CAClB,sBAAsB;CACtB,iBAAiB;CACjB,kBAAkB;CAClB,eAAe;CACf,gBAAgB;CAChB,8BAA8B;CAC9B,yBAAyB;CACzB,gBAAgB;CAChB,kBAAkB;CAClB,eAAe;CAChB,CAAC;AAEF,MAAa,qBAAqB,mBAAmB;CACnD,cAAc;CACd,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,kBAAkB;CAClB,sBAAsB;CACtB,kBAAkB;CAClB,eAAe;CACf,gBAAgB;CAChB,mBAAmB;CACnB,mBAAmB;CACnB,kBAAkB;CAClB,yBAAyB;CACzB,kBAAkB;CACnB,CAAC;AAEF,MAAa,sBAAsB,mBAAmB;CACpD,cAAc;CACd,eAAe;CACf,cAAc;CACd,gBAAgB;CAChB,eAAe;CACf,kBAAkB;CAClB,sBAAsB;CACtB,gBAAgB;CAChB,8BAA8B;CAC9B,mBAAmB;CACnB,mBAAmB;CACnB,kBAAkB;CAClB,yBAAyB;CACzB,gBAAgB;CAChB,kBAAkB;CACnB,CAAC"}
@@ -1,28 +0,0 @@
1
- import { t as SandboxError } from "./errors-Ch9PHKTd.mjs";
2
-
3
- //#region src/core/capabilities.ts
4
- function defineCapabilities(values) {
5
- return new Proxy(values, { get(target, property) {
6
- return typeof property === "string" && property in target ? target[property] : false;
7
- } });
8
- }
9
- function supports(sandbox, capability) {
10
- return sandbox.capabilities[capability] !== false;
11
- }
12
- function capabilityMode(sandbox, capability) {
13
- return sandbox.capabilities[capability];
14
- }
15
- function requireCapability(sandbox, capability) {
16
- const mode = sandbox.capabilities[capability];
17
- if (mode === false) throw new SandboxError({
18
- code: "unsupported",
19
- provider: sandbox.provider,
20
- operation: capability,
21
- message: `${sandbox.provider} does not support ${capability}`
22
- });
23
- return mode;
24
- }
25
-
26
- //#endregion
27
- export { supports as i, defineCapabilities as n, requireCapability as r, capabilityMode as t };
28
- //# sourceMappingURL=capabilities-COKpwoFH.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capabilities-COKpwoFH.mjs","names":[],"sources":["../src/core/capabilities.ts"],"sourcesContent":["import { SandboxError } from \"./errors\";\nimport type { Capability, CapabilityMap, CapabilityMode, Sandbox } from \"./types\";\n\nexport function defineCapabilities(\n values: Partial<Record<Capability, CapabilityMode>>,\n): CapabilityMap {\n return new Proxy(values, {\n get(target, property) {\n return typeof property === \"string\" && property in target\n ? target[property as Capability]\n : false;\n },\n }) as CapabilityMap;\n}\n\nexport function supports(sandbox: Pick<Sandbox, \"capabilities\">, capability: Capability): boolean {\n return sandbox.capabilities[capability] !== false;\n}\n\nexport function capabilityMode(\n sandbox: Pick<Sandbox, \"capabilities\">,\n capability: Capability,\n): CapabilityMode | false {\n return sandbox.capabilities[capability];\n}\n\nexport function requireCapability(\n sandbox: Pick<Sandbox, \"capabilities\" | \"provider\">,\n capability: Capability,\n): CapabilityMode {\n const mode = sandbox.capabilities[capability];\n if (mode === false) {\n throw new SandboxError({\n code: \"unsupported\",\n provider: sandbox.provider,\n operation: capability,\n message: `${sandbox.provider} does not support ${capability}`,\n });\n }\n return mode;\n}\n"],"mappings":";;;AAGA,SAAgB,mBACd,QACe;AACf,QAAO,IAAI,MAAM,QAAQ,EACvB,IAAI,QAAQ,UAAU;AACpB,SAAO,OAAO,aAAa,YAAY,YAAY,SAC/C,OAAO,YACP;IAEP,CAAC;;AAGJ,SAAgB,SAAS,SAAwC,YAAiC;AAChG,QAAO,QAAQ,aAAa,gBAAgB;;AAG9C,SAAgB,eACd,SACA,YACwB;AACxB,QAAO,QAAQ,aAAa;;AAG9B,SAAgB,kBACd,SACA,YACgB;CAChB,MAAM,OAAO,QAAQ,aAAa;AAClC,KAAI,SAAS,MACX,OAAM,IAAI,aAAa;EACrB,MAAM;EACN,UAAU,QAAQ;EAClB,WAAW;EACX,SAAS,GAAG,QAAQ,SAAS,oBAAoB;EAClD,CAAC;AAEJ,QAAO"}
@@ -1,13 +0,0 @@
1
- import { r as CapabilityMode } from "./types-DEi_dfRR.mjs";
2
-
3
- //#region src/providers/capabilities.d.ts
4
- declare const localCapabilities: Readonly<Record<"files.read" | "files.write" | "files.list" | "files.remove" | "process.run" | "process.stream" | "process.background" | "process.stdin" | "process.cancel" | "ports.expose" | "ports.authenticatedRequest" | "snapshot.create" | "snapshot.delete" | "snapshot.restore" | "sandbox.resume" | "filesystem.persistent" | "image.custom" | "network.policy" | "process.pty" | "compute.gpu", false | CapabilityMode>>;
5
- /** @deprecated AgentOS capabilities are exposed as Local capabilities. */
6
- declare const agentosCapabilities: Readonly<Record<"files.read" | "files.write" | "files.list" | "files.remove" | "process.run" | "process.stream" | "process.background" | "process.stdin" | "process.cancel" | "ports.expose" | "ports.authenticatedRequest" | "snapshot.create" | "snapshot.delete" | "snapshot.restore" | "sandbox.resume" | "filesystem.persistent" | "image.custom" | "network.policy" | "process.pty" | "compute.gpu", false | CapabilityMode>>;
7
- declare const e2bCapabilities: Readonly<Record<"files.read" | "files.write" | "files.list" | "files.remove" | "process.run" | "process.stream" | "process.background" | "process.stdin" | "process.cancel" | "ports.expose" | "ports.authenticatedRequest" | "snapshot.create" | "snapshot.delete" | "snapshot.restore" | "sandbox.resume" | "filesystem.persistent" | "image.custom" | "network.policy" | "process.pty" | "compute.gpu", false | CapabilityMode>>;
8
- declare const daytonaCapabilities: Readonly<Record<"files.read" | "files.write" | "files.list" | "files.remove" | "process.run" | "process.stream" | "process.background" | "process.stdin" | "process.cancel" | "ports.expose" | "ports.authenticatedRequest" | "snapshot.create" | "snapshot.delete" | "snapshot.restore" | "sandbox.resume" | "filesystem.persistent" | "image.custom" | "network.policy" | "process.pty" | "compute.gpu", false | CapabilityMode>>;
9
- declare const vercelCapabilities: Readonly<Record<"files.read" | "files.write" | "files.list" | "files.remove" | "process.run" | "process.stream" | "process.background" | "process.stdin" | "process.cancel" | "ports.expose" | "ports.authenticatedRequest" | "snapshot.create" | "snapshot.delete" | "snapshot.restore" | "sandbox.resume" | "filesystem.persistent" | "image.custom" | "network.policy" | "process.pty" | "compute.gpu", false | CapabilityMode>>;
10
- declare const upstashCapabilities: Readonly<Record<"files.read" | "files.write" | "files.list" | "files.remove" | "process.run" | "process.stream" | "process.background" | "process.stdin" | "process.cancel" | "ports.expose" | "ports.authenticatedRequest" | "snapshot.create" | "snapshot.delete" | "snapshot.restore" | "sandbox.resume" | "filesystem.persistent" | "image.custom" | "network.policy" | "process.pty" | "compute.gpu", false | CapabilityMode>>;
11
- //#endregion
12
- export { upstashCapabilities as a, localCapabilities as i, daytonaCapabilities as n, vercelCapabilities as o, e2bCapabilities as r, agentosCapabilities as t };
13
- //# sourceMappingURL=capabilities-DftdOpIu.d.mts.map
@@ -1,61 +0,0 @@
1
- //#region src/core/errors.ts
2
- const sandboxErrorCodes = [
3
- "authentication",
4
- "permission",
5
- "not_found",
6
- "timeout",
7
- "rate_limited",
8
- "unavailable",
9
- "unsupported",
10
- "invalid_input",
11
- "conflict",
12
- "terminated",
13
- "process_failed",
14
- "internal"
15
- ];
16
- const sensitive = /((?:token|key|secret|authorization|credential|signature)=?)[^\s&,]+|https?:\/\/[^\s]+(?:token|sig|signature|key)=[^\s&]+/gi;
17
- function redactSensitive(value) {
18
- return value.replace(sensitive, "$1[REDACTED]");
19
- }
20
- var SandboxError = class extends Error {
21
- code;
22
- provider;
23
- operation;
24
- retryable;
25
- cause;
26
- constructor(options) {
27
- super(redactSensitive(options.message), { cause: options.cause });
28
- this.name = "SandboxError";
29
- this.code = options.code;
30
- this.provider = options.provider;
31
- this.operation = options.operation;
32
- this.retryable = options.retryable ?? [
33
- "rate_limited",
34
- "timeout",
35
- "unavailable"
36
- ].includes(options.code);
37
- this.cause = options.cause;
38
- }
39
- toString() {
40
- return `${this.name} [${this.code}]: ${this.message}`;
41
- }
42
- };
43
- function isSandboxError(error) {
44
- return error instanceof SandboxError;
45
- }
46
- function normalizeError(provider, operation, error, fallback = "internal") {
47
- if (isSandboxError(error)) return error;
48
- const message = error instanceof Error ? error.message : "Unknown provider error";
49
- const lower = message.toLowerCase();
50
- return new SandboxError({
51
- code: lower.includes("unauthorized") || lower.includes("api key") ? "authentication" : lower.includes("forbidden") || lower.includes("permission") ? "permission" : lower.includes("not found") || lower.includes("enoent") ? "not_found" : lower.includes("timeout") || lower.includes("timed out") ? "timeout" : lower.includes("rate limit") || lower.includes("429") ? "rate_limited" : lower.includes("already exists") || lower.includes("conflict") ? "conflict" : fallback,
52
- provider,
53
- operation,
54
- message,
55
- cause: error
56
- });
57
- }
58
-
59
- //#endregion
60
- export { sandboxErrorCodes as a, redactSensitive as i, isSandboxError as n, normalizeError as r, SandboxError as t };
61
- //# sourceMappingURL=errors-Ch9PHKTd.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors-Ch9PHKTd.mjs","names":[],"sources":["../src/core/errors.ts"],"sourcesContent":["export const sandboxErrorCodes = [\n \"authentication\",\n \"permission\",\n \"not_found\",\n \"timeout\",\n \"rate_limited\",\n \"unavailable\",\n \"unsupported\",\n \"invalid_input\",\n \"conflict\",\n \"terminated\",\n \"process_failed\",\n \"internal\",\n] as const;\n\nexport type SandboxErrorCode = (typeof sandboxErrorCodes)[number];\n\nconst sensitive =\n /((?:token|key|secret|authorization|credential|signature)=?)[^\\s&,]+|https?:\\/\\/[^\\s]+(?:token|sig|signature|key)=[^\\s&]+/gi;\n\nexport function redactSensitive(value: string): string {\n return value.replace(sensitive, \"$1[REDACTED]\");\n}\n\nexport class SandboxError extends Error {\n readonly code: SandboxErrorCode;\n readonly provider: string;\n readonly operation?: string;\n readonly retryable: boolean;\n override readonly cause?: unknown;\n\n constructor(options: {\n code: SandboxErrorCode;\n provider: string;\n message: string;\n operation?: string;\n retryable?: boolean;\n cause?: unknown;\n }) {\n super(redactSensitive(options.message), { cause: options.cause });\n this.name = \"SandboxError\";\n this.code = options.code;\n this.provider = options.provider;\n this.operation = options.operation;\n this.retryable =\n options.retryable ?? [\"rate_limited\", \"timeout\", \"unavailable\"].includes(options.code);\n this.cause = options.cause;\n }\n\n override toString(): string {\n return `${this.name} [${this.code}]: ${this.message}`;\n }\n}\n\nexport function isSandboxError(error: unknown): error is SandboxError {\n return error instanceof SandboxError;\n}\n\nexport function normalizeError(\n provider: string,\n operation: string,\n error: unknown,\n fallback: SandboxErrorCode = \"internal\",\n): SandboxError {\n if (isSandboxError(error)) return error;\n const message = error instanceof Error ? error.message : \"Unknown provider error\";\n const lower = message.toLowerCase();\n const code =\n lower.includes(\"unauthorized\") || lower.includes(\"api key\")\n ? \"authentication\"\n : lower.includes(\"forbidden\") || lower.includes(\"permission\")\n ? \"permission\"\n : lower.includes(\"not found\") || lower.includes(\"enoent\")\n ? \"not_found\"\n : lower.includes(\"timeout\") || lower.includes(\"timed out\")\n ? \"timeout\"\n : lower.includes(\"rate limit\") || lower.includes(\"429\")\n ? \"rate_limited\"\n : lower.includes(\"already exists\") || lower.includes(\"conflict\")\n ? \"conflict\"\n : fallback;\n return new SandboxError({ code, provider, operation, message, cause: error });\n}\n"],"mappings":";AAAA,MAAa,oBAAoB;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AAID,MAAM,YACJ;AAEF,SAAgB,gBAAgB,OAAuB;AACrD,QAAO,MAAM,QAAQ,WAAW,eAAe;;AAGjD,IAAa,eAAb,cAAkC,MAAM;CACtC,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAS;CACT,AAAkB;CAElB,YAAY,SAOT;AACD,QAAM,gBAAgB,QAAQ,QAAQ,EAAE,EAAE,OAAO,QAAQ,OAAO,CAAC;AACjE,OAAK,OAAO;AACZ,OAAK,OAAO,QAAQ;AACpB,OAAK,WAAW,QAAQ;AACxB,OAAK,YAAY,QAAQ;AACzB,OAAK,YACH,QAAQ,aAAa;GAAC;GAAgB;GAAW;GAAc,CAAC,SAAS,QAAQ,KAAK;AACxF,OAAK,QAAQ,QAAQ;;CAGvB,AAAS,WAAmB;AAC1B,SAAO,GAAG,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK;;;AAIhD,SAAgB,eAAe,OAAuC;AACpE,QAAO,iBAAiB;;AAG1B,SAAgB,eACd,UACA,WACA,OACA,WAA6B,YACf;AACd,KAAI,eAAe,MAAM,CAAE,QAAO;CAClC,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU;CACzD,MAAM,QAAQ,QAAQ,aAAa;AAenC,QAAO,IAAI,aAAa;EAAE,MAbxB,MAAM,SAAS,eAAe,IAAI,MAAM,SAAS,UAAU,GACvD,mBACA,MAAM,SAAS,YAAY,IAAI,MAAM,SAAS,aAAa,GACzD,eACA,MAAM,SAAS,YAAY,IAAI,MAAM,SAAS,SAAS,GACrD,cACA,MAAM,SAAS,UAAU,IAAI,MAAM,SAAS,YAAY,GACtD,YACA,MAAM,SAAS,aAAa,IAAI,MAAM,SAAS,MAAM,GACnD,iBACA,MAAM,SAAS,iBAAiB,IAAI,MAAM,SAAS,WAAW,GAC5D,aACA;EACgB;EAAU;EAAW;EAAS,OAAO;EAAO,CAAC"}
@@ -1,19 +0,0 @@
1
- import "../types-DEi_dfRR.mjs";
2
- import { o as SandboxProvider } from "../provider-BzzkIVmv.mjs";
3
- import { SandboxBackend, SandboxBackendHandle, SandboxNetworkPolicy, SandboxSession as EveSandboxSession } from "eve/sandbox";
4
-
5
- //#region src/eve/index.d.ts
6
- interface EveSandboxUseOptions {
7
- networkPolicy?: SandboxNetworkPolicy;
8
- }
9
- interface CreateEveSandboxBackendOptions {
10
- provider: SandboxProvider<unknown>;
11
- ports?: ReadonlyArray<number>;
12
- cwd?: string;
13
- env?: Readonly<Record<string, string>>;
14
- }
15
- /** Create an Eve beta SandboxBackend backed by a managed sandbox-sdk provider. */
16
- declare function createEveSandboxBackend(options: CreateEveSandboxBackendOptions): SandboxBackend<EveSandboxUseOptions, EveSandboxUseOptions>;
17
- //#endregion
18
- export { CreateEveSandboxBackendOptions, type EveSandboxSession, EveSandboxUseOptions, type SandboxBackend, type SandboxBackendHandle, createEveSandboxBackend };
19
- //# sourceMappingURL=index.d.mts.map