@opencoredev/sandbox-sdk 0.2.0 → 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 (166) hide show
  1. package/CHANGELOG.md +32 -11
  2. package/README.md +350 -25
  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 +164 -106
  102. package/dist/agentos-CbrZW7R0.mjs +0 -390
  103. package/dist/agentos-CbrZW7R0.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-DeFa8yPk.mjs +0 -243
  110. package/dist/ai-DeFa8yPk.mjs.map +0 -1
  111. package/dist/capabilities-BWvOVFbH.d.mts +0 -15
  112. package/dist/capabilities-CaSNd6J1.mjs +0 -125
  113. package/dist/capabilities-CaSNd6J1.mjs.map +0 -1
  114. package/dist/capabilities-xs9kaHrK.mjs +0 -28
  115. package/dist/capabilities-xs9kaHrK.mjs.map +0 -1
  116. package/dist/errors-BuF9bYOQ.mjs +0 -68
  117. package/dist/errors-BuF9bYOQ.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-CkTwqD0X.d.mts +0 -25
  122. package/dist/index-Dh9xob2s.d.mts +0 -31
  123. package/dist/index.d.mts +0 -5
  124. package/dist/index.mjs +0 -40
  125. package/dist/index.mjs.map +0 -1
  126. package/dist/managed-provider-BsZGVQ4I.mjs +0 -148
  127. package/dist/managed-provider-BsZGVQ4I.mjs.map +0 -1
  128. package/dist/mastra/index.d.mts +0 -118
  129. package/dist/mastra/index.mjs +0 -662
  130. package/dist/mastra/index.mjs.map +0 -1
  131. package/dist/metadata.d.mts +0 -34
  132. package/dist/metadata.mjs +0 -135
  133. package/dist/metadata.mjs.map +0 -1
  134. package/dist/provider-DOBErkBO.d.mts +0 -91
  135. package/dist/provider-utils-CfB9nvJx.mjs +0 -57
  136. package/dist/provider-utils-CfB9nvJx.mjs.map +0 -1
  137. package/dist/providers/agentos/index.d.mts +0 -7
  138. package/dist/providers/agentos/index.mjs +0 -9
  139. package/dist/providers/box/index.d.mts +0 -34
  140. package/dist/providers/box/index.mjs +0 -348
  141. package/dist/providers/box/index.mjs.map +0 -1
  142. package/dist/providers/daytona/index.d.mts +0 -21
  143. package/dist/providers/daytona/index.mjs +0 -206
  144. package/dist/providers/daytona/index.mjs.map +0 -1
  145. package/dist/providers/e2b/index.d.mts +0 -17
  146. package/dist/providers/e2b/index.mjs +0 -169
  147. package/dist/providers/e2b/index.mjs.map +0 -1
  148. package/dist/providers/local/index.d.mts +0 -22
  149. package/dist/providers/local/index.mjs +0 -22
  150. package/dist/providers/local/index.mjs.map +0 -1
  151. package/dist/providers/railway/index.d.mts +0 -29
  152. package/dist/providers/railway/index.mjs +0 -211
  153. package/dist/providers/railway/index.mjs.map +0 -1
  154. package/dist/providers/upstash/index.d.mts +0 -17
  155. package/dist/providers/upstash/index.mjs +0 -211
  156. package/dist/providers/upstash/index.mjs.map +0 -1
  157. package/dist/providers/vercel/index.d.mts +0 -28
  158. package/dist/providers/vercel/index.mjs +0 -186
  159. package/dist/providers/vercel/index.mjs.map +0 -1
  160. package/dist/sandbox-DdEqoXJF.d.mts +0 -26
  161. package/dist/sandbox-DgtY5hvt.mjs +0 -112
  162. package/dist/sandbox-DgtY5hvt.mjs.map +0 -1
  163. package/dist/testing/index.d.mts +0 -27
  164. package/dist/testing/index.mjs +0 -173
  165. package/dist/testing/index.mjs.map +0 -1
  166. package/dist/types-Bv6I2U1c.d.mts +0 -103
@@ -1,155 +0,0 @@
1
- import { n as isSandboxError, t as SandboxError } from "../errors-BuF9bYOQ.mjs";
2
- import { r as toAISandboxSession } from "../ai-DeFa8yPk.mjs";
3
-
4
- //#region src/eve/index.ts
5
- /** Create an Eve beta SandboxBackend backed by a managed sandbox-sdk provider. */
6
- function createEveSandboxBackend(options) {
7
- const managed = requireManaged(options.provider);
8
- const prewarmed = /* @__PURE__ */ new Set();
9
- return {
10
- name: `sandbox-sdk-${options.provider.id}`,
11
- async prewarm(input) {
12
- if (prewarmed.has(input.templateKey)) return { reused: true };
13
- input.log?.(`Preparing ${options.provider.id} sandbox template ${input.templateKey}`);
14
- await (await managed.create({
15
- sessionId: templateSessionId(input.templateKey),
16
- identity: input.templateKey,
17
- cwd: options.cwd,
18
- env: options.env,
19
- ports: options.ports,
20
- onFirstCreate: async (sandbox) => {
21
- await Promise.all(input.seedFiles.map((file) => sandbox.files.write(resolveSandboxPath(sandbox.cwd, file.path), file.content)));
22
- if (input.bootstrap) {
23
- const templateView = {
24
- id: templateSessionId(input.templateKey),
25
- sandbox,
26
- defaultWorkingDirectory: sandbox.cwd,
27
- ports: options.ports ?? [],
28
- getPortUrl: async () => {
29
- throw new Error("Template ports are not available during prewarm");
30
- },
31
- stop: async () => {},
32
- resume: async () => {},
33
- destroy: async () => {}
34
- };
35
- await input.bootstrap({ use: createUseFn(templateView) });
36
- }
37
- }
38
- })).destroy();
39
- prewarmed.add(input.templateKey);
40
- return { reused: false };
41
- },
42
- async create(input) {
43
- const reconnectId = readString(input.existingMetadata, "managedSessionId");
44
- let managedSession;
45
- if (reconnectId) managedSession = await managed.resume({ sessionId: reconnectId });
46
- else managedSession = await managed.create({
47
- sessionId: input.sessionKey,
48
- identity: input.templateKey ?? void 0,
49
- cwd: options.cwd,
50
- env: options.env,
51
- ports: options.ports
52
- });
53
- return createHandle(managedSession, createUseFn(managedSession), options.provider.id);
54
- }
55
- };
56
- }
57
- function createHandle(managed, useSessionFn, providerId) {
58
- return {
59
- session: toEveSession(managed, providerId),
60
- useSessionFn,
61
- async captureState() {
62
- return {
63
- backendName: `sandbox-sdk-${providerId}`,
64
- sessionKey: managed.id,
65
- metadata: {
66
- managedSessionId: managed.id,
67
- provider: providerId
68
- }
69
- };
70
- },
71
- shutdown: () => managed.stop()
72
- };
73
- }
74
- function createUseFn(managed) {
75
- const session = toEveSession(managed, managed.sandbox.provider);
76
- return async (options) => {
77
- if (options?.networkPolicy !== void 0) {
78
- if (!managed.setNetworkPolicy) throw unsupportedNetwork(managed.sandbox.provider);
79
- await managed.setNetworkPolicy(toCoreNetworkPolicy(options.networkPolicy));
80
- }
81
- return session;
82
- };
83
- }
84
- function toEveSession(managed, providerId) {
85
- const ai = toAISandboxSession(managed.sandbox);
86
- return {
87
- run: ai.run,
88
- spawn: ai.spawn,
89
- readFile: ai.readFile,
90
- readBinaryFile: ai.readBinaryFile,
91
- readTextFile: ai.readTextFile,
92
- writeFile: ai.writeFile,
93
- writeBinaryFile: ai.writeBinaryFile,
94
- writeTextFile: ai.writeTextFile,
95
- id: managed.id,
96
- resolvePath: (path) => resolveSandboxPath(managed.defaultWorkingDirectory, path),
97
- async removePath({ path, force }) {
98
- try {
99
- await managed.sandbox.files.remove(resolveSandboxPath(managed.defaultWorkingDirectory, path));
100
- } catch (error) {
101
- if (force && isSandboxError(error) && error.code === "not_found") return;
102
- throw error;
103
- }
104
- },
105
- async setNetworkPolicy(policy) {
106
- if (!managed.setNetworkPolicy) throw unsupportedNetwork(providerId);
107
- await managed.setNetworkPolicy(toCoreNetworkPolicy(policy));
108
- }
109
- };
110
- }
111
- function toCoreNetworkPolicy(policy) {
112
- if (policy === "allow-all") return { mode: "allow-all" };
113
- if (policy === "deny-all") return { mode: "deny-all" };
114
- return {
115
- mode: "native",
116
- value: policy
117
- };
118
- }
119
- function resolveSandboxPath(cwd, path) {
120
- if (path.includes("\0") || path.split("/").includes("..")) throw new SandboxError({
121
- code: "invalid_input",
122
- provider: "eve",
123
- operation: "resolvePath",
124
- message: `Invalid sandbox path: ${path}`
125
- });
126
- return path.startsWith("/") ? path : `${cwd.replace(/\/$/, "")}/${path}`;
127
- }
128
- function templateSessionId(templateKey) {
129
- return `eve-template-${templateKey}`;
130
- }
131
- function readString(record, key) {
132
- const value = record?.[key];
133
- return typeof value === "string" ? value : void 0;
134
- }
135
- function unsupportedNetwork(provider) {
136
- return new SandboxError({
137
- code: "unsupported",
138
- provider,
139
- operation: "network.policy",
140
- message: `Provider ${provider} does not support network-policy mutation`
141
- });
142
- }
143
- function requireManaged(provider) {
144
- if (!provider.managed) throw new SandboxError({
145
- code: "unsupported",
146
- provider: provider.id,
147
- operation: "eve.createBackend",
148
- message: `Provider ${provider.id} does not implement managed sandbox sessions`
149
- });
150
- return provider.managed;
151
- }
152
-
153
- //#endregion
154
- export { createEveSandboxBackend };
155
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["templateView: ManagedSandboxSession","managedSession: ManagedSandboxSession"],"sources":["../../src/eve/index.ts"],"sourcesContent":["import type {\n SandboxBackend,\n SandboxBackendHandle,\n SandboxNetworkPolicy as EveNetworkPolicy,\n SandboxSession as EveSandboxSession,\n} from \"eve/sandbox\";\nimport { isSandboxError, SandboxError } from \"../core/errors\";\nimport type {\n ManagedSandboxProvider,\n ManagedSandboxSession,\n SandboxNetworkPolicy,\n SandboxProvider,\n} from \"../core/provider\";\nimport { toAISandboxSession } from \"../ai/index\";\n\nexport interface EveSandboxUseOptions {\n networkPolicy?: EveNetworkPolicy;\n}\n\nexport interface CreateEveSandboxBackendOptions {\n provider: SandboxProvider<unknown>;\n ports?: ReadonlyArray<number>;\n cwd?: string;\n env?: Readonly<Record<string, string>>;\n}\n\n/** Create an Eve beta SandboxBackend backed by a managed sandbox-sdk provider. */\nexport function createEveSandboxBackend(\n options: CreateEveSandboxBackendOptions,\n): SandboxBackend<EveSandboxUseOptions, EveSandboxUseOptions> {\n const managed = requireManaged(options.provider);\n const prewarmed = new Set<string>();\n\n return {\n name: `sandbox-sdk-${options.provider.id}`,\n async prewarm(input) {\n if (prewarmed.has(input.templateKey)) return { reused: true };\n input.log?.(`Preparing ${options.provider.id} sandbox template ${input.templateKey}`);\n const template = await managed.create({\n sessionId: templateSessionId(input.templateKey),\n identity: input.templateKey,\n cwd: options.cwd,\n env: options.env,\n ports: options.ports,\n onFirstCreate: async (sandbox) => {\n await Promise.all(\n input.seedFiles.map((file) =>\n sandbox.files.write(resolveSandboxPath(sandbox.cwd, file.path), file.content),\n ),\n );\n if (input.bootstrap) {\n const templateView: ManagedSandboxSession = {\n id: templateSessionId(input.templateKey),\n sandbox,\n defaultWorkingDirectory: sandbox.cwd,\n ports: options.ports ?? [],\n getPortUrl: async () => {\n throw new Error(\"Template ports are not available during prewarm\");\n },\n stop: async () => {},\n resume: async () => {},\n destroy: async () => {},\n };\n await input.bootstrap({ use: createUseFn(templateView) });\n }\n },\n });\n await template.destroy();\n prewarmed.add(input.templateKey);\n return { reused: false };\n },\n async create(input) {\n const reconnectId = readString(input.existingMetadata, \"managedSessionId\");\n let managedSession: ManagedSandboxSession;\n if (reconnectId) {\n managedSession = await managed.resume({ sessionId: reconnectId });\n } else {\n managedSession = await managed.create({\n sessionId: input.sessionKey,\n identity: input.templateKey ?? undefined,\n cwd: options.cwd,\n env: options.env,\n ports: options.ports,\n });\n }\n return createHandle(managedSession, createUseFn(managedSession), options.provider.id);\n },\n };\n}\n\nfunction createHandle(\n managed: ManagedSandboxSession,\n useSessionFn: (options?: EveSandboxUseOptions) => Promise<EveSandboxSession>,\n providerId: string,\n): SandboxBackendHandle<EveSandboxUseOptions> {\n return {\n session: toEveSession(managed, providerId),\n useSessionFn,\n async captureState() {\n return {\n backendName: `sandbox-sdk-${providerId}`,\n sessionKey: managed.id,\n metadata: { managedSessionId: managed.id, provider: providerId },\n };\n },\n shutdown: () => managed.stop(),\n };\n}\n\nfunction createUseFn(managed: ManagedSandboxSession) {\n const session = toEveSession(managed, managed.sandbox.provider);\n return async (options?: EveSandboxUseOptions): Promise<EveSandboxSession> => {\n if (options?.networkPolicy !== undefined) {\n if (!managed.setNetworkPolicy) throw unsupportedNetwork(managed.sandbox.provider);\n await managed.setNetworkPolicy(toCoreNetworkPolicy(options.networkPolicy));\n }\n return session;\n };\n}\n\nfunction toEveSession(managed: ManagedSandboxSession, providerId: string): EveSandboxSession {\n const ai = toAISandboxSession(managed.sandbox);\n return {\n run: ai.run,\n spawn: ai.spawn,\n readFile: ai.readFile,\n readBinaryFile: ai.readBinaryFile,\n readTextFile: ai.readTextFile,\n writeFile: ai.writeFile,\n writeBinaryFile: ai.writeBinaryFile,\n writeTextFile: ai.writeTextFile,\n id: managed.id,\n resolvePath: (path) => resolveSandboxPath(managed.defaultWorkingDirectory, path),\n async removePath({ path, force }) {\n try {\n await managed.sandbox.files.remove(\n resolveSandboxPath(managed.defaultWorkingDirectory, path),\n );\n } catch (error) {\n if (force && isSandboxError(error) && error.code === \"not_found\") return;\n throw error;\n }\n },\n async setNetworkPolicy(policy) {\n if (!managed.setNetworkPolicy) throw unsupportedNetwork(providerId);\n await managed.setNetworkPolicy(toCoreNetworkPolicy(policy));\n },\n };\n}\n\nfunction toCoreNetworkPolicy(policy: EveNetworkPolicy): SandboxNetworkPolicy {\n if (policy === \"allow-all\") return { mode: \"allow-all\" };\n if (policy === \"deny-all\") return { mode: \"deny-all\" };\n return { mode: \"native\", value: policy };\n}\n\nfunction resolveSandboxPath(cwd: string, path: string): string {\n if (path.includes(\"\\0\") || path.split(\"/\").includes(\"..\")) {\n throw new SandboxError({\n code: \"invalid_input\",\n provider: \"eve\",\n operation: \"resolvePath\",\n message: `Invalid sandbox path: ${path}`,\n });\n }\n return path.startsWith(\"/\") ? path : `${cwd.replace(/\\/$/, \"\")}/${path}`;\n}\n\nfunction templateSessionId(templateKey: string): string {\n return `eve-template-${templateKey}`;\n}\n\nfunction readString(record: Record<string, unknown> | undefined, key: string): string | undefined {\n const value = record?.[key];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction unsupportedNetwork(provider: string): SandboxError {\n return new SandboxError({\n code: \"unsupported\",\n provider,\n operation: \"network.policy\",\n message: `Provider ${provider} does not support network-policy mutation`,\n });\n}\n\nfunction requireManaged(provider: SandboxProvider<unknown>): ManagedSandboxProvider {\n if (!provider.managed) {\n throw new SandboxError({\n code: \"unsupported\",\n provider: provider.id,\n operation: \"eve.createBackend\",\n message: `Provider ${provider.id} does not implement managed sandbox sessions`,\n });\n }\n return provider.managed;\n}\n\nexport type { SandboxBackend, SandboxBackendHandle, EveSandboxSession };\n"],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import { o as SandboxProvider } from "./provider-DOBErkBO.mjs";
2
- import { AgentOs, AgentOsOptions } from "@rivet-dev/agentos-core";
3
-
4
- //#region src/providers/agentos/index.d.ts
5
- interface AgentOsProviderOptions {
6
- /**
7
- * Native agentOS VM options. The provider supplies production-oriented permissions and limits
8
- * unless these fields are explicitly provided.
9
- */
10
- agentOs?: AgentOsOptions;
11
- }
12
- interface AgentOsSandbox {
13
- /** The currently running native VM. Access throws while the sandbox is suspended or stopped. */
14
- readonly vm: AgentOs;
15
- suspend(): Promise<void>;
16
- resume(): Promise<void>;
17
- }
18
- /**
19
- * @deprecated AgentOS now powers `local()` under the hood. Import `local` from
20
- * `@opencoredev/sandbox-sdk/local` instead.
21
- */
22
- declare function agentos(options?: AgentOsProviderOptions): SandboxProvider<AgentOsSandbox>;
23
- //#endregion
24
- export { AgentOsSandbox as n, agentos as r, AgentOsProviderOptions as t };
25
- //# sourceMappingURL=index-CkTwqD0X.d.mts.map
@@ -1,31 +0,0 @@
1
- import { f as Sandbox, r as CapabilityMode, t as Capability } from "./types-Bv6I2U1c.mjs";
2
-
3
- //#region src/core/capabilities.d.ts
4
- declare function supports(sandbox: Pick<Sandbox, "capabilities">, capability: Capability): boolean;
5
- declare function capabilityMode(sandbox: Pick<Sandbox, "capabilities">, capability: Capability): CapabilityMode | false;
6
- declare function requireCapability(sandbox: Pick<Sandbox, "capabilities" | "provider">, capability: Capability): CapabilityMode;
7
- //#endregion
8
- //#region src/core/errors.d.ts
9
- declare const sandboxErrorCodes: readonly ["authentication", "permission", "not_found", "timeout", "rate_limited", "unavailable", "unsupported", "invalid_input", "conflict", "terminated", "process_failed", "internal"];
10
- type SandboxErrorCode = (typeof sandboxErrorCodes)[number];
11
- declare function redactSensitive(value: string): string;
12
- declare class SandboxError extends Error {
13
- readonly code: SandboxErrorCode;
14
- readonly provider: string;
15
- readonly operation?: string;
16
- readonly retryable: boolean;
17
- readonly cause?: unknown;
18
- constructor(options: {
19
- code: SandboxErrorCode;
20
- provider: string;
21
- message: string;
22
- operation?: string;
23
- retryable?: boolean;
24
- cause?: unknown;
25
- });
26
- toString(): string;
27
- }
28
- declare function isSandboxError(error: unknown): error is SandboxError;
29
- //#endregion
30
- export { sandboxErrorCodes as a, supports as c, redactSensitive as i, SandboxErrorCode as n, capabilityMode as o, isSandboxError as r, requireCapability as s, SandboxError as t };
31
- //# sourceMappingURL=index-Dh9xob2s.d.mts.map
package/dist/index.d.mts DELETED
@@ -1,5 +0,0 @@
1
- import { _ as SandboxProcesses, a as CommandResult, b as capabilityNames, c as ProcessOutputEvent, d as RunOptions, f as Sandbox, g as SandboxProcess, h as SandboxPorts, i as CommandInput, l as ProcessStatus, m as SandboxFiles, n as CapabilityMap, o as ExposedPort, p as SandboxDirectoryEntry, r as CapabilityMode, s as FileValue, t as Capability, u as ProviderName, v as SandboxSnapshot, x as providerNames, y as SandboxSnapshots } from "./types-Bv6I2U1c.mjs";
2
- import { a as SandboxNetworkPolicy, i as ManagedSandboxSession, n as ManagedSandboxProvider, r as ManagedSandboxResumeOptions, t as ManagedSandboxCreateOptions } from "./provider-DOBErkBO.mjs";
3
- import { a as sandboxErrorCodes, c as supports, i as redactSensitive, n as SandboxErrorCode, o as capabilityMode, r as isSandboxError, s as requireCapability, t as SandboxError } from "./index-Dh9xob2s.mjs";
4
- import { n as createSandbox, r as withSandbox } from "./sandbox-DdEqoXJF.mjs";
5
- export { Capability, CapabilityMap, CapabilityMode, CommandInput, CommandResult, ExposedPort, FileValue, ManagedSandboxCreateOptions, ManagedSandboxProvider, ManagedSandboxResumeOptions, ManagedSandboxSession, ProcessOutputEvent, ProcessStatus, ProviderName, RunOptions, Sandbox, SandboxDirectoryEntry, SandboxError, SandboxErrorCode, SandboxFiles, SandboxNetworkPolicy, SandboxPorts, SandboxProcess, SandboxProcesses, SandboxSnapshot, SandboxSnapshots, capabilityMode, capabilityNames, createSandbox, isSandboxError, providerNames, redactSensitive, requireCapability, sandboxErrorCodes, supports, withSandbox };
package/dist/index.mjs DELETED
@@ -1,40 +0,0 @@
1
- import { a as sandboxErrorCodes, i as redactSensitive, n as isSandboxError, t as SandboxError } from "./errors-BuF9bYOQ.mjs";
2
- import { i as supports, r as requireCapability, t as capabilityMode } from "./capabilities-xs9kaHrK.mjs";
3
- import { n as withSandbox, t as createSandbox } from "./sandbox-DgtY5hvt.mjs";
4
-
5
- //#region src/core/types.ts
6
- const providerNames = [
7
- "local",
8
- "e2b",
9
- "daytona",
10
- "vercel",
11
- "upstash",
12
- "box",
13
- "railway"
14
- ];
15
- const capabilityNames = [
16
- "files.read",
17
- "files.write",
18
- "files.list",
19
- "files.remove",
20
- "process.run",
21
- "process.stream",
22
- "process.background",
23
- "process.stdin",
24
- "process.cancel",
25
- "ports.expose",
26
- "ports.authenticatedRequest",
27
- "snapshot.create",
28
- "snapshot.delete",
29
- "snapshot.restore",
30
- "sandbox.resume",
31
- "filesystem.persistent",
32
- "image.custom",
33
- "network.policy",
34
- "process.pty",
35
- "compute.gpu"
36
- ];
37
-
38
- //#endregion
39
- export { SandboxError, capabilityMode, capabilityNames, createSandbox, isSandboxError, providerNames, redactSensitive, requireCapability, sandboxErrorCodes, supports, withSandbox };
40
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
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,148 +0,0 @@
1
- import { t as SandboxError } from "./errors-BuF9bYOQ.mjs";
2
- import { t as createSandbox } from "./sandbox-DgtY5hvt.mjs";
3
-
4
- //#region src/internal/managed-provider.ts
5
- /**
6
- * Shared managed lifecycle for built-in providers. Provider-native implementations
7
- * can replace this optional surface without changing `createSandbox()`.
8
- */
9
- function withManagedSessions(provider, configuredPorts = [], lifecycle = {}) {
10
- const sessions = /* @__PURE__ */ new Map();
11
- const templates = /* @__PURE__ */ new Map();
12
- const managed = {
13
- async create(options) {
14
- const existing = sessions.get(options.sessionId);
15
- if (existing) return existing;
16
- const sandbox = await createSandbox({
17
- provider,
18
- cwd: options.cwd,
19
- env: options.env,
20
- signal: options.signal
21
- });
22
- const ports = new Set([...configuredPorts, ...options.ports ?? []]);
23
- let ownedTemplate;
24
- try {
25
- if (options.identity) {
26
- let template = templates.get(options.identity);
27
- if (!template) {
28
- template = (async () => {
29
- await options.onFirstCreate?.(sandbox);
30
- return captureFiles(sandbox, sandbox.cwd);
31
- })();
32
- ownedTemplate = template;
33
- templates.set(options.identity, template);
34
- await template;
35
- } else await restoreFiles(sandbox, await template);
36
- } else await options.onFirstCreate?.(sandbox);
37
- const session = createManagedSession(options.sessionId, sandbox, ports, sessions, lifecycle);
38
- sessions.set(options.sessionId, session);
39
- return session;
40
- } catch (error) {
41
- if (options.identity && ownedTemplate && templates.get(options.identity) === ownedTemplate) templates.delete(options.identity);
42
- try {
43
- if (lifecycle.destroy) await lifecycle.destroy(sandbox);
44
- else await sandbox.stop();
45
- } catch (cleanupError) {
46
- if (error instanceof Error) Object.defineProperty(error, "cleanupError", {
47
- value: cleanupError,
48
- enumerable: false
49
- });
50
- }
51
- throw error;
52
- }
53
- },
54
- async resume(options) {
55
- const session = sessions.get(options.sessionId);
56
- if (!session) throw new SandboxError({
57
- code: "not_found",
58
- provider: provider.id,
59
- operation: "managed.resume",
60
- message: `Managed sandbox session not found: ${options.sessionId}`
61
- });
62
- await session.resume();
63
- return session;
64
- }
65
- };
66
- return {
67
- ...provider,
68
- managed
69
- };
70
- }
71
- function createManagedSession(id, sandbox, initialPorts, sessions, lifecycle) {
72
- let destroyed = false;
73
- let stopped = false;
74
- const assertActive = () => {
75
- if (destroyed) throw new SandboxError({
76
- code: "terminated",
77
- provider: sandbox.provider,
78
- operation: "managed.session",
79
- message: `Managed sandbox session has been destroyed: ${id}`
80
- });
81
- };
82
- return {
83
- id,
84
- sandbox,
85
- defaultWorkingDirectory: sandbox.cwd,
86
- get ports() {
87
- return [...initialPorts];
88
- },
89
- async getPortUrl({ port, protocol }) {
90
- assertActive();
91
- if (!initialPorts.has(port)) throw new SandboxError({
92
- code: "invalid_input",
93
- provider: sandbox.provider,
94
- operation: "managed.getPortUrl",
95
- message: `Port ${port} is not exposed by this session`
96
- });
97
- const exposed = await sandbox.ports.expose(port);
98
- const url = new URL(exposed.url);
99
- if (protocol) url.protocol = `${protocol}:`;
100
- return url.toString().replace(/\/$/, "");
101
- },
102
- async stop() {
103
- assertActive();
104
- if (stopped) return;
105
- await lifecycle.stop?.(sandbox);
106
- stopped = true;
107
- },
108
- async resume() {
109
- assertActive();
110
- if (!stopped) return;
111
- await lifecycle.resume?.(sandbox);
112
- stopped = false;
113
- },
114
- async destroy() {
115
- if (destroyed) return;
116
- destroyed = true;
117
- sessions.delete(id);
118
- if (lifecycle.destroy) await lifecycle.destroy(sandbox);
119
- else await sandbox.stop();
120
- },
121
- ...lifecycle.setPorts ? { async setPorts(ports, options) {
122
- assertActive();
123
- await lifecycle.setPorts(sandbox, ports, options?.signal);
124
- initialPorts.clear();
125
- for (const port of ports) initialPorts.add(port);
126
- } } : {},
127
- ...lifecycle.setNetworkPolicy ? { setNetworkPolicy: (policy) => {
128
- assertActive();
129
- return lifecycle.setNetworkPolicy(sandbox, policy);
130
- } } : {}
131
- };
132
- }
133
- async function captureFiles(sandbox, path) {
134
- const result = [];
135
- for (const entry of await sandbox.files.list(path)) if (entry.type === "directory") result.push(...await captureFiles(sandbox, entry.path));
136
- else if (entry.type === "file") result.push({
137
- path: entry.path,
138
- content: await sandbox.files.read(entry.path)
139
- });
140
- return result;
141
- }
142
- async function restoreFiles(sandbox, files) {
143
- await Promise.all(files.map((file) => sandbox.files.write(file.path, file.content)));
144
- }
145
-
146
- //#endregion
147
- export { withManagedSessions as t };
148
- //# sourceMappingURL=managed-provider-BsZGVQ4I.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"managed-provider-BsZGVQ4I.mjs","names":["managed: ManagedSandboxProvider","ownedTemplate: Promise<TemplateFile[]> | undefined","result: TemplateFile[]"],"sources":["../src/internal/managed-provider.ts"],"sourcesContent":["import { SandboxError } from \"../core/errors\";\nimport type {\n ManagedSandboxProvider,\n ManagedSandboxSession,\n SandboxProvider,\n} from \"../core/provider\";\nimport { createSandbox } from \"../core/sandbox\";\nimport type { Sandbox } from \"../core/types\";\nimport type { SandboxNetworkPolicy } from \"../core/provider\";\n\ntype TemplateFile = { path: string; content: Uint8Array };\n\n/**\n * Shared managed lifecycle for built-in providers. Provider-native implementations\n * can replace this optional surface without changing `createSandbox()`.\n */\nexport function withManagedSessions<TRaw>(\n provider: SandboxProvider<TRaw>,\n configuredPorts: ReadonlyArray<number> = [],\n lifecycle: {\n stop?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n resume?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n destroy?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n setPorts?: (\n sandbox: Sandbox<TRaw>,\n ports: ReadonlyArray<number>,\n signal?: AbortSignal,\n ) => Promise<void>;\n setNetworkPolicy?: (sandbox: Sandbox<TRaw>, policy: SandboxNetworkPolicy) => Promise<void>;\n } = {},\n): SandboxProvider<TRaw> {\n const sessions = new Map<string, ManagedSandboxSession>();\n const templates = new Map<string, Promise<TemplateFile[]>>();\n\n const managed: ManagedSandboxProvider = {\n async create(options) {\n const existing = sessions.get(options.sessionId);\n if (existing) return existing;\n const sandbox = await createSandbox({\n provider,\n cwd: options.cwd,\n env: options.env,\n signal: options.signal,\n });\n const ports = new Set([...configuredPorts, ...(options.ports ?? [])]);\n let ownedTemplate: Promise<TemplateFile[]> | undefined;\n try {\n if (options.identity) {\n let template = templates.get(options.identity);\n if (!template) {\n template = (async () => {\n await options.onFirstCreate?.(sandbox);\n return captureFiles(sandbox, sandbox.cwd);\n })();\n ownedTemplate = template;\n templates.set(options.identity, template);\n await template;\n } else {\n await restoreFiles(sandbox, await template);\n }\n } else {\n await options.onFirstCreate?.(sandbox);\n }\n const session = createManagedSession(\n options.sessionId,\n sandbox,\n ports,\n sessions,\n lifecycle,\n );\n sessions.set(options.sessionId, session);\n return session;\n } catch (error) {\n if (\n options.identity &&\n ownedTemplate &&\n templates.get(options.identity) === ownedTemplate\n ) {\n templates.delete(options.identity);\n }\n try {\n if (lifecycle.destroy) await lifecycle.destroy(sandbox);\n else await sandbox.stop();\n } catch (cleanupError) {\n if (error instanceof Error) {\n Object.defineProperty(error, \"cleanupError\", {\n value: cleanupError,\n enumerable: false,\n });\n }\n }\n throw error;\n }\n },\n async resume(options) {\n const session = sessions.get(options.sessionId);\n if (!session) {\n throw new SandboxError({\n code: \"not_found\",\n provider: provider.id,\n operation: \"managed.resume\",\n message: `Managed sandbox session not found: ${options.sessionId}`,\n });\n }\n await session.resume();\n return session;\n },\n };\n return { ...provider, managed };\n}\n\nfunction createManagedSession<TRaw>(\n id: string,\n sandbox: Sandbox<TRaw>,\n initialPorts: Set<number>,\n sessions: Map<string, ManagedSandboxSession>,\n lifecycle: {\n stop?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n resume?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n destroy?: (sandbox: Sandbox<TRaw>) => Promise<void>;\n setPorts?: (\n sandbox: Sandbox<TRaw>,\n ports: ReadonlyArray<number>,\n signal?: AbortSignal,\n ) => Promise<void>;\n setNetworkPolicy?: (sandbox: Sandbox<TRaw>, policy: SandboxNetworkPolicy) => Promise<void>;\n },\n): ManagedSandboxSession {\n let destroyed = false;\n let stopped = false;\n const assertActive = () => {\n if (destroyed) {\n throw new SandboxError({\n code: \"terminated\",\n provider: sandbox.provider,\n operation: \"managed.session\",\n message: `Managed sandbox session has been destroyed: ${id}`,\n });\n }\n };\n const session: ManagedSandboxSession = {\n id,\n sandbox,\n defaultWorkingDirectory: sandbox.cwd,\n get ports() {\n return [...initialPorts];\n },\n async getPortUrl({ port, protocol }) {\n assertActive();\n if (!initialPorts.has(port)) {\n throw new SandboxError({\n code: \"invalid_input\",\n provider: sandbox.provider,\n operation: \"managed.getPortUrl\",\n message: `Port ${port} is not exposed by this session`,\n });\n }\n const exposed = await sandbox.ports.expose(port);\n const url = new URL(exposed.url);\n if (protocol) url.protocol = `${protocol}:`;\n return url.toString().replace(/\\/$/, \"\");\n },\n async stop() {\n assertActive();\n if (stopped) return;\n await lifecycle.stop?.(sandbox);\n stopped = true;\n },\n async resume() {\n assertActive();\n if (!stopped) return;\n await lifecycle.resume?.(sandbox);\n stopped = false;\n },\n async destroy() {\n if (destroyed) return;\n destroyed = true;\n sessions.delete(id);\n if (lifecycle.destroy) await lifecycle.destroy(sandbox);\n else await sandbox.stop();\n },\n ...(lifecycle.setPorts\n ? {\n async setPorts(ports: ReadonlyArray<number>, options?: { signal?: AbortSignal }) {\n assertActive();\n await lifecycle.setPorts!(sandbox, ports, options?.signal);\n initialPorts.clear();\n for (const port of ports) initialPorts.add(port);\n },\n }\n : {}),\n ...(lifecycle.setNetworkPolicy\n ? {\n setNetworkPolicy: (policy: SandboxNetworkPolicy) => {\n assertActive();\n return lifecycle.setNetworkPolicy!(sandbox, policy);\n },\n }\n : {}),\n };\n return session;\n}\n\nasync function captureFiles(sandbox: Sandbox, path: string): Promise<TemplateFile[]> {\n const result: TemplateFile[] = [];\n for (const entry of await sandbox.files.list(path)) {\n if (entry.type === \"directory\") result.push(...(await captureFiles(sandbox, entry.path)));\n else if (entry.type === \"file\")\n result.push({\n path: entry.path,\n content: await sandbox.files.read(entry.path),\n });\n }\n return result;\n}\n\nasync function restoreFiles(sandbox: Sandbox, files: ReadonlyArray<TemplateFile>): Promise<void> {\n await Promise.all(files.map((file) => sandbox.files.write(file.path, file.content)));\n}\n"],"mappings":"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"}
@@ -1,118 +0,0 @@
1
- import { f as Sandbox } from "../types-Bv6I2U1c.mjs";
2
- import { o as SandboxProvider } from "../provider-DOBErkBO.mjs";
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
- import { RequestContext } from "@mastra/core/di";
5
-
6
- //#region src/mastra/index.d.ts
7
- type WorkspaceOptions = Omit<WorkspaceConfig<SandboxSDKMastraFilesystem, SandboxSDKMastraSandbox>, "filesystem" | "sandbox" | "mounts">;
8
- interface CreateMastraSandboxOptions extends Omit<MastraSandboxOptions, "processes"> {
9
- provider: SandboxProvider<unknown>;
10
- id?: string;
11
- identity?: string;
12
- cwd?: string;
13
- env?: Readonly<Record<string, string>>;
14
- ports?: ReadonlyArray<number>;
15
- instructions?: InstructionsOption;
16
- onFirstCreate?: (sandbox: Sandbox) => void | Promise<void>;
17
- }
18
- interface CreateMastraWorkspaceOptions extends CreateMastraSandboxOptions {
19
- filesystem?: Omit<CreateMastraFilesystemOptions, "sandbox">;
20
- workspace?: WorkspaceOptions;
21
- }
22
- interface CreateMastraFilesystemOptions extends MastraFilesystemOptions {
23
- sandbox: SandboxSDKMastraSandbox;
24
- readOnly?: boolean;
25
- instructions?: InstructionsOption;
26
- }
27
- /** Create a Mastra sandbox backed by any managed Sandbox SDK provider. */
28
- declare function createMastraSandbox(options: CreateMastraSandboxOptions): SandboxSDKMastraSandbox;
29
- /**
30
- * Create a Mastra workspace whose filesystem and commands share one Sandbox SDK
31
- * session. The workspace owns and destroys the session.
32
- */
33
- declare function createMastraWorkspace(options: CreateMastraWorkspaceOptions): Workspace<SandboxSDKMastraFilesystem, SandboxSDKMastraSandbox>;
34
- /** Mastra WorkspaceSandbox implementation for Sandbox SDK providers. */
35
- declare class SandboxSDKMastraSandbox extends MastraSandbox {
36
- readonly id: string;
37
- readonly name: string;
38
- readonly provider: string;
39
- readonly cwd: string;
40
- readonly processes: SandboxSDKProcessManager;
41
- status: ProviderStatus;
42
- private readonly managed;
43
- private readonly identity?;
44
- private readonly env;
45
- private readonly ports;
46
- private readonly instructions?;
47
- private readonly onFirstCreate?;
48
- private readonly createdAt;
49
- private session?;
50
- constructor(options: CreateMastraSandboxOptions);
51
- /** The live normalized Sandbox SDK session. */
52
- get sandboxSdk(): Sandbox;
53
- start(): Promise<void>;
54
- stop(): Promise<void>;
55
- destroy(): Promise<void>;
56
- getPortUrl(port: number, protocol?: "http" | "https" | "ws"): Promise<string>;
57
- getInfo(): SandboxInfo;
58
- getInstructions(options?: {
59
- requestContext?: RequestContext;
60
- }): string;
61
- /** @deprecated Use `status === "running"` instead. */
62
- isReady(): boolean;
63
- private killTrackedProcesses;
64
- }
65
- /** Mastra background-process bridge for normalized Sandbox SDK processes. */
66
- declare class SandboxSDKProcessManager extends SandboxProcessManager<SandboxSDKMastraSandbox> {
67
- spawn(command: string, options?: SpawnProcessOptions): Promise<ProcessHandle>;
68
- list(): Promise<ProcessInfo[]>;
69
- }
70
- /** Mastra WorkspaceFilesystem implementation sharing a Mastra sandbox session. */
71
- declare class SandboxSDKMastraFilesystem extends MastraFilesystem {
72
- readonly id: string;
73
- readonly name = "Sandbox SDK Filesystem";
74
- readonly provider = "sandbox-sdk";
75
- readonly readOnly: boolean;
76
- readonly basePath: string;
77
- status: ProviderStatus;
78
- private readonly sandbox;
79
- private readonly instructions?;
80
- constructor(options: CreateMastraFilesystemOptions);
81
- init(): Promise<void>;
82
- destroy(): Promise<void>;
83
- getInfo(): FilesystemInfo;
84
- getInstructions(options?: {
85
- requestContext?: RequestContext;
86
- }): string;
87
- realpath(path: string): Promise<string>;
88
- readFile(path: string, options?: ReadOptions): Promise<string | Buffer>;
89
- writeFile(path: string, content: FileContent, options?: WriteOptions): Promise<void>;
90
- appendFile(path: string, content: FileContent): Promise<void>;
91
- deleteFile(path: string, options?: RemoveOptions): Promise<void>;
92
- copyFile(src: string, dest: string, options?: CopyOptions): Promise<void>;
93
- moveFile(src: string, dest: string, options?: CopyOptions): Promise<void>;
94
- mkdir(path: string, options?: {
95
- recursive?: boolean;
96
- }): Promise<void>;
97
- rmdir(path: string, options?: RemoveOptions): Promise<void>;
98
- readdir(path: string, options?: ListOptions): Promise<FileEntry[]>;
99
- exists(path: string): Promise<boolean>;
100
- stat(path: string): Promise<{
101
- name: string;
102
- path: string;
103
- type: "directory" | "file";
104
- size: number;
105
- createdAt: Date;
106
- modifiedAt: Date;
107
- }>;
108
- private ready;
109
- private assertWritable;
110
- private ensureParent;
111
- private requireParent;
112
- private listDirectory;
113
- private findEntry;
114
- private nativeStat;
115
- }
116
- //#endregion
117
- export { CreateMastraFilesystemOptions, CreateMastraSandboxOptions, CreateMastraWorkspaceOptions, SandboxSDKMastraFilesystem, SandboxSDKMastraSandbox, SandboxSDKProcessManager, createMastraSandbox, createMastraWorkspace };
118
- //# sourceMappingURL=index.d.mts.map