sbox-sdk 0.0.2

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 (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +137 -0
  3. package/dist/adapter/index.d.ts +22 -0
  4. package/dist/adapter/index.d.ts.map +1 -0
  5. package/dist/adapter/index.js +16 -0
  6. package/dist/agent-tools/index.d.ts +13 -0
  7. package/dist/agent-tools/index.d.ts.map +1 -0
  8. package/dist/agent-tools/index.js +9 -0
  9. package/dist/agent-tools/policy.d.ts +48 -0
  10. package/dist/agent-tools/policy.d.ts.map +1 -0
  11. package/dist/agent-tools/policy.js +51 -0
  12. package/dist/agent-tools/registry.d.ts +9 -0
  13. package/dist/agent-tools/registry.d.ts.map +1 -0
  14. package/dist/agent-tools/registry.js +412 -0
  15. package/dist/agent-tools/result.d.ts +32 -0
  16. package/dist/agent-tools/result.d.ts.map +1 -0
  17. package/dist/agent-tools/result.js +14 -0
  18. package/dist/agent-tools/types.d.ts +76 -0
  19. package/dist/agent-tools/types.d.ts.map +1 -0
  20. package/dist/agent-tools/types.js +1 -0
  21. package/dist/ai/index.d.ts +36 -0
  22. package/dist/ai/index.d.ts.map +1 -0
  23. package/dist/ai/index.js +40 -0
  24. package/dist/ai-sdk/index.d.ts +31 -0
  25. package/dist/ai-sdk/index.d.ts.map +1 -0
  26. package/dist/ai-sdk/index.js +80 -0
  27. package/dist/anthropic/index.d.ts +42 -0
  28. package/dist/anthropic/index.d.ts.map +1 -0
  29. package/dist/anthropic/index.js +64 -0
  30. package/dist/aws-lambda/index.d.ts +87 -0
  31. package/dist/aws-lambda/index.d.ts.map +1 -0
  32. package/dist/aws-lambda/index.js +290 -0
  33. package/dist/beam/index.d.ts +92 -0
  34. package/dist/beam/index.d.ts.map +1 -0
  35. package/dist/beam/index.js +222 -0
  36. package/dist/blaxel/index.d.ts +125 -0
  37. package/dist/blaxel/index.d.ts.map +1 -0
  38. package/dist/blaxel/index.js +220 -0
  39. package/dist/cli.d.ts +3 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +249 -0
  42. package/dist/cloudflare/index.d.ts +64 -0
  43. package/dist/cloudflare/index.d.ts.map +1 -0
  44. package/dist/cloudflare/index.js +259 -0
  45. package/dist/codesandbox/index.d.ts +100 -0
  46. package/dist/codesandbox/index.d.ts.map +1 -0
  47. package/dist/codesandbox/index.js +227 -0
  48. package/dist/conformance/index.d.ts +20 -0
  49. package/dist/conformance/index.d.ts.map +1 -0
  50. package/dist/conformance/index.js +189 -0
  51. package/dist/daytona/index.d.ts +64 -0
  52. package/dist/daytona/index.d.ts.map +1 -0
  53. package/dist/daytona/index.js +258 -0
  54. package/dist/e2b/index.d.ts +63 -0
  55. package/dist/e2b/index.d.ts.map +1 -0
  56. package/dist/e2b/index.js +411 -0
  57. package/dist/fly/index.d.ts +75 -0
  58. package/dist/fly/index.d.ts.map +1 -0
  59. package/dist/fly/index.js +222 -0
  60. package/dist/index.d.ts +21 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +16 -0
  63. package/dist/internal/capabilities.d.ts +57 -0
  64. package/dist/internal/capabilities.d.ts.map +1 -0
  65. package/dist/internal/capabilities.js +68 -0
  66. package/dist/internal/client.d.ts +9 -0
  67. package/dist/internal/client.d.ts.map +1 -0
  68. package/dist/internal/client.js +126 -0
  69. package/dist/internal/encoding.d.ts +8 -0
  70. package/dist/internal/encoding.d.ts.map +1 -0
  71. package/dist/internal/encoding.js +20 -0
  72. package/dist/internal/errors.d.ts +45 -0
  73. package/dist/internal/errors.d.ts.map +1 -0
  74. package/dist/internal/errors.js +79 -0
  75. package/dist/internal/exec.d.ts +19 -0
  76. package/dist/internal/exec.d.ts.map +1 -0
  77. package/dist/internal/exec.js +208 -0
  78. package/dist/internal/plugin.d.ts +38 -0
  79. package/dist/internal/plugin.d.ts.map +1 -0
  80. package/dist/internal/plugin.js +1 -0
  81. package/dist/internal/runtime.d.ts +8 -0
  82. package/dist/internal/runtime.d.ts.map +1 -0
  83. package/dist/internal/runtime.js +21 -0
  84. package/dist/internal/sandbox.d.ts +12 -0
  85. package/dist/internal/sandbox.d.ts.map +1 -0
  86. package/dist/internal/sandbox.js +438 -0
  87. package/dist/internal/shell.d.ts +36 -0
  88. package/dist/internal/shell.d.ts.map +1 -0
  89. package/dist/internal/shell.js +88 -0
  90. package/dist/internal/stream.d.ts +15 -0
  91. package/dist/internal/stream.d.ts.map +1 -0
  92. package/dist/internal/stream.js +58 -0
  93. package/dist/internal/types.d.ts +381 -0
  94. package/dist/internal/types.d.ts.map +1 -0
  95. package/dist/internal/types.js +1 -0
  96. package/dist/langchain/index.d.ts +25 -0
  97. package/dist/langchain/index.d.ts.map +1 -0
  98. package/dist/langchain/index.js +61 -0
  99. package/dist/mastra/index.d.ts +43 -0
  100. package/dist/mastra/index.d.ts.map +1 -0
  101. package/dist/mastra/index.js +69 -0
  102. package/dist/memory/index.d.ts +57 -0
  103. package/dist/memory/index.d.ts.map +1 -0
  104. package/dist/memory/index.js +573 -0
  105. package/dist/modal/index.d.ts +67 -0
  106. package/dist/modal/index.d.ts.map +1 -0
  107. package/dist/modal/index.js +223 -0
  108. package/dist/morph/index.d.ts +91 -0
  109. package/dist/morph/index.d.ts.map +1 -0
  110. package/dist/morph/index.js +221 -0
  111. package/dist/northflank/index.d.ts +74 -0
  112. package/dist/northflank/index.d.ts.map +1 -0
  113. package/dist/northflank/index.js +265 -0
  114. package/dist/openai/index.d.ts +25 -0
  115. package/dist/openai/index.d.ts.map +1 -0
  116. package/dist/openai/index.js +71 -0
  117. package/dist/railway/index.d.ts +109 -0
  118. package/dist/railway/index.d.ts.map +1 -0
  119. package/dist/railway/index.js +219 -0
  120. package/dist/runloop/index.d.ts +69 -0
  121. package/dist/runloop/index.d.ts.map +1 -0
  122. package/dist/runloop/index.js +226 -0
  123. package/dist/testing/index.d.ts +44 -0
  124. package/dist/testing/index.d.ts.map +1 -0
  125. package/dist/testing/index.js +61 -0
  126. package/dist/vercel/index.d.ts +63 -0
  127. package/dist/vercel/index.d.ts.map +1 -0
  128. package/dist/vercel/index.js +241 -0
  129. package/package.json +252 -0
  130. package/src/aws-lambda/runner/Dockerfile +15 -0
  131. package/src/aws-lambda/runner/README.md +59 -0
  132. package/src/aws-lambda/runner/server.mjs +91 -0
@@ -0,0 +1,258 @@
1
+ /**
2
+ * `sbox-sdk/daytona` — adapter for `@daytonaio/sdk`. A full-featured sandbox:
3
+ * exec + code interpreter (with matplotlib charts), filesystem, snapshots,
4
+ * stop/pause/resume, preview links, regions. Node-only (uses Buffer for fs).
5
+ * Notable normalization: Daytona timeouts are in SECONDS — the adapter converts
6
+ * from the SDK's milliseconds. Requires the optional peer dependency
7
+ * `@daytonaio/sdk`.
8
+ */
9
+ import { AsyncQueue, defineProvider, SandboxError } from "../adapter/index.js";
10
+ export const DAYTONA_CAPS = {
11
+ background: "unsupported",
12
+ codeInterpreter: "native",
13
+ egressControl: "unsupported",
14
+ exposePort: "native",
15
+ filesUpload: "native",
16
+ filesWatch: "unsupported",
17
+ fork: "unsupported",
18
+ gpu: "unsupported",
19
+ killProcess: "unsupported",
20
+ list: "native",
21
+ metrics: "unsupported",
22
+ pause: "native",
23
+ privatePreview: "native",
24
+ proxiedFetch: "unsupported",
25
+ pty: "unsupported",
26
+ region: "native",
27
+ secretsVault: "unsupported",
28
+ setTimeout: "native",
29
+ snapshot: "unsupported",
30
+ ssh: "unsupported",
31
+ statefulKernel: "unsupported",
32
+ stdin: "unsupported",
33
+ stop: "native",
34
+ streaming: "emulated",
35
+ volumes: "unsupported",
36
+ };
37
+ const DAYTONA_FLAGS = {
38
+ exitCodeNative: true,
39
+ perCommandEnvCwd: true,
40
+ preservesDiskOnStop: true,
41
+ preservesMemoryOnPause: true,
42
+ previewModel: "subdomain",
43
+ };
44
+ let cached = null;
45
+ async function loadDaytona() {
46
+ if (!cached) {
47
+ cached = (await import("@daytonaio/sdk"));
48
+ }
49
+ return cached;
50
+ }
51
+ function mapState(state) {
52
+ switch (state) {
53
+ case "started":
54
+ case "running": {
55
+ return "running";
56
+ }
57
+ case "stopped":
58
+ case "archived": {
59
+ return "stopped";
60
+ }
61
+ case "paused": {
62
+ return "paused";
63
+ }
64
+ case "starting":
65
+ case "creating": {
66
+ return "creating";
67
+ }
68
+ case "error": {
69
+ return "error";
70
+ }
71
+ default: {
72
+ return "unknown";
73
+ }
74
+ }
75
+ }
76
+ function secs(ms) {
77
+ return ms === undefined ? undefined : Math.ceil(ms / 1000);
78
+ }
79
+ function mapDaytonaError(e) {
80
+ const msg = e instanceof Error ? e.message : String(e);
81
+ if (/not ?found/i.test(msg)) {
82
+ return new SandboxError("NotFound", msg, { cause: e, provider: "daytona" });
83
+ }
84
+ if (/unauthor|forbidden|api key/i.test(msg)) {
85
+ return new SandboxError("Unauthorized", msg, {
86
+ cause: e,
87
+ provider: "daytona",
88
+ });
89
+ }
90
+ if (/timeout|timed out/i.test(msg)) {
91
+ return new SandboxError("Timeout", msg, { cause: e, provider: "daytona" });
92
+ }
93
+ return undefined;
94
+ }
95
+ export const daytona = defineProvider((opts) => {
96
+ let client = null;
97
+ const getClient = async () => {
98
+ if (!client) {
99
+ const mod = await loadDaytona();
100
+ client = new mod.Daytona({
101
+ apiKey: opts.apiKey,
102
+ apiUrl: opts.apiUrl,
103
+ target: opts.target,
104
+ });
105
+ }
106
+ return client;
107
+ };
108
+ const makeHandle = (sb) => {
109
+ const proc = sb.process;
110
+ const { fs } = sb;
111
+ const lifecycle = sb;
112
+ return {
113
+ id: lifecycle.id,
114
+ raw: sb,
115
+ getInfo() {
116
+ return {
117
+ id: lifecycle.id,
118
+ state: mapState(lifecycle.state),
119
+ provider: "daytona",
120
+ metadata: {},
121
+ raw: sb,
122
+ };
123
+ },
124
+ async destroy() {
125
+ await lifecycle.delete();
126
+ },
127
+ async stop() {
128
+ await lifecycle.stop();
129
+ },
130
+ async pause() {
131
+ await lifecycle.pause();
132
+ },
133
+ async resume() {
134
+ await lifecycle.start();
135
+ },
136
+ async setTimeout(ttlMs) {
137
+ await lifecycle.setAutostopInterval(Math.max(0, Math.ceil(ttlMs / 60_000)));
138
+ },
139
+ exec(cmd, options) {
140
+ const queue = new AsyncQueue();
141
+ void proc
142
+ .executeCommand(cmd, options.cwd, options.env, secs(options.timeoutMs))
143
+ .then((res) => {
144
+ const out = res.result ?? res.artifacts?.stdout ?? "";
145
+ if (out) {
146
+ queue.push({ type: "stdout", data: out });
147
+ }
148
+ queue.push({ type: "exit", exitCode: res.exitCode ?? 0 });
149
+ queue.close();
150
+ })
151
+ .catch((error) => queue.fail(mapDaytonaError(error) ?? SandboxError.wrap(error, "daytona")));
152
+ return {
153
+ pid: Promise.resolve(""),
154
+ async kill() {
155
+ /* executeCommand is buffered; no kill handle */
156
+ },
157
+ [Symbol.asyncIterator]: () => queue.iterator(),
158
+ };
159
+ },
160
+ async readFile(path) {
161
+ return new Uint8Array(await fs.downloadFile(path));
162
+ },
163
+ async writeFile(path, data) {
164
+ await fs.uploadFile(data, path);
165
+ },
166
+ async listDir(path) {
167
+ const files = await fs.listFiles(path);
168
+ return files.map((f) => ({
169
+ name: f.name,
170
+ path: `${path.replace(/\/$/, "")}/${f.name}`,
171
+ type: f.isDir ? "dir" : "file",
172
+ }));
173
+ },
174
+ async mkdir(path) {
175
+ await fs.createFolder(path, "755");
176
+ },
177
+ async remove(path, recursive) {
178
+ await fs.deleteFile(path, recursive);
179
+ },
180
+ async rename(from, to) {
181
+ await fs.moveFiles(from, to);
182
+ },
183
+ async stat(path) {
184
+ const d = await fs.getFileDetails(path);
185
+ return {
186
+ path,
187
+ type: d.isDir ? "dir" : "file",
188
+ size: d.size ?? 0,
189
+ mtime: d.modTime ? new Date(d.modTime) : undefined,
190
+ };
191
+ },
192
+ async exposePort(port) {
193
+ const link = await lifecycle.getPreviewLink(port);
194
+ return { url: link.url, port, token: link.token };
195
+ },
196
+ async runCode(code, options) {
197
+ const res = await proc.codeRun(code, { language: options.language });
198
+ const charts = res.artifacts?.charts ?? [];
199
+ return {
200
+ results: charts.map((c) => {
201
+ const cc = c;
202
+ const mime = {};
203
+ if (cc.png) {
204
+ mime["image/png"] = cc.png;
205
+ }
206
+ return { mime };
207
+ }),
208
+ logs: { stdout: res.result ? [res.result] : [], stderr: [] },
209
+ error: res.exitCode && res.exitCode !== 0
210
+ ? { name: "Error", value: res.result ?? "" }
211
+ : undefined,
212
+ };
213
+ },
214
+ async createContext(options) {
215
+ // Daytona codeRun is stateless; return a nominal context (statefulKernel = unsupported).
216
+ return { id: "default", language: options.language ?? "python" };
217
+ },
218
+ };
219
+ };
220
+ const provider = {
221
+ name: "daytona",
222
+ capabilities: DAYTONA_CAPS,
223
+ flags: DAYTONA_FLAGS,
224
+ mapError: mapDaytonaError,
225
+ async create(spec) {
226
+ const c = await getClient();
227
+ const tpl = spec.template;
228
+ const base = tpl && /[:/]/.test(tpl) ? { image: tpl } : tpl ? { snapshot: tpl } : {};
229
+ const sb = await c.create({
230
+ ...base,
231
+ envVars: spec.env,
232
+ labels: spec.metadata,
233
+ ...(spec.resources?.vcpus
234
+ ? { resources: { cpu: spec.resources.vcpus } }
235
+ : {}),
236
+ }, spec.ttlMs ? { timeout: secs(spec.ttlMs) } : undefined);
237
+ return makeHandle(sb);
238
+ },
239
+ async connect(id) {
240
+ const c = await getClient();
241
+ return makeHandle((await c.get(id)));
242
+ },
243
+ async *list() {
244
+ const c = await getClient();
245
+ for await (const s of c.list()) {
246
+ const sb = s;
247
+ yield {
248
+ id: sb.id,
249
+ state: mapState(sb.state),
250
+ provider: "daytona",
251
+ metadata: {},
252
+ raw: s,
253
+ };
254
+ }
255
+ },
256
+ };
257
+ return provider;
258
+ });
@@ -0,0 +1,63 @@
1
+ import type { Sandbox as E2BSandbox } from "@e2b/code-interpreter";
2
+ import type { SandboxProvider } from "../adapter/index.js";
3
+ export interface E2BOptions {
4
+ apiKey: string;
5
+ /** Self-hosted E2B domain, if not the default cloud. */
6
+ domain?: string;
7
+ }
8
+ export declare const E2B_CAPS: {
9
+ readonly background: "native";
10
+ readonly codeInterpreter: "native";
11
+ readonly egressControl: "unsupported";
12
+ readonly exposePort: "native";
13
+ readonly filesUpload: "native";
14
+ readonly filesWatch: "native";
15
+ readonly fork: "unsupported";
16
+ readonly gpu: "unsupported";
17
+ readonly killProcess: "native";
18
+ readonly list: "native";
19
+ readonly metrics: "native";
20
+ readonly pause: "native";
21
+ readonly privatePreview: "unsupported";
22
+ readonly proxiedFetch: "unsupported";
23
+ readonly pty: "unsupported";
24
+ readonly region: "unsupported";
25
+ readonly secretsVault: "unsupported";
26
+ readonly setTimeout: "native";
27
+ readonly snapshot: "native";
28
+ readonly ssh: "unsupported";
29
+ readonly statefulKernel: "native";
30
+ readonly stdin: "unsupported";
31
+ readonly stop: "unsupported";
32
+ readonly streaming: "native";
33
+ readonly volumes: "unsupported";
34
+ };
35
+ export type E2BCaps = typeof E2B_CAPS;
36
+ export declare const e2b: (opts: E2BOptions) => SandboxProvider<{
37
+ readonly background: "native";
38
+ readonly codeInterpreter: "native";
39
+ readonly egressControl: "unsupported";
40
+ readonly exposePort: "native";
41
+ readonly filesUpload: "native";
42
+ readonly filesWatch: "native";
43
+ readonly fork: "unsupported";
44
+ readonly gpu: "unsupported";
45
+ readonly killProcess: "native";
46
+ readonly list: "native";
47
+ readonly metrics: "native";
48
+ readonly pause: "native";
49
+ readonly privatePreview: "unsupported";
50
+ readonly proxiedFetch: "unsupported";
51
+ readonly pty: "unsupported";
52
+ readonly region: "unsupported";
53
+ readonly secretsVault: "unsupported";
54
+ readonly setTimeout: "native";
55
+ readonly snapshot: "native";
56
+ readonly ssh: "unsupported";
57
+ readonly statefulKernel: "native";
58
+ readonly stdin: "unsupported";
59
+ readonly stop: "unsupported";
60
+ readonly streaming: "native";
61
+ readonly volumes: "unsupported";
62
+ }, E2BSandbox>;
63
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/e2b/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAenE,OAAO,KAAK,EAkBV,eAAe,EAIhB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Ba,CAAC;AAEnC,MAAM,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC;AAwHtC,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;cAiTd,CAAC"}