zeitlich 0.2.37 → 0.2.39

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 (172) hide show
  1. package/README.md +18 -0
  2. package/dist/{activities-Bb-nAjwQ.d.ts → activities-Bmu7XnaG.d.ts} +4 -4
  3. package/dist/{activities-vkI4_3CC.d.cts → activities-ByBFLvm2.d.cts} +4 -4
  4. package/dist/adapter-id-BB-mmrts.d.cts +17 -0
  5. package/dist/adapter-id-BB-mmrts.d.ts +17 -0
  6. package/dist/adapter-id-CMwVrVqv.d.cts +17 -0
  7. package/dist/adapter-id-CMwVrVqv.d.ts +17 -0
  8. package/dist/adapter-id-CbY2zeSt.d.cts +17 -0
  9. package/dist/adapter-id-CbY2zeSt.d.ts +17 -0
  10. package/dist/adapters/sandbox/bedrock/index.cjs +3 -3
  11. package/dist/adapters/sandbox/bedrock/index.cjs.map +1 -1
  12. package/dist/adapters/sandbox/bedrock/index.d.cts +6 -6
  13. package/dist/adapters/sandbox/bedrock/index.d.ts +6 -6
  14. package/dist/adapters/sandbox/bedrock/index.js +3 -3
  15. package/dist/adapters/sandbox/bedrock/index.js.map +1 -1
  16. package/dist/adapters/sandbox/bedrock/workflow.d.cts +2 -2
  17. package/dist/adapters/sandbox/bedrock/workflow.d.ts +2 -2
  18. package/dist/adapters/sandbox/daytona/index.cjs +3 -3
  19. package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
  20. package/dist/adapters/sandbox/daytona/index.d.cts +4 -4
  21. package/dist/adapters/sandbox/daytona/index.d.ts +4 -4
  22. package/dist/adapters/sandbox/daytona/index.js +3 -3
  23. package/dist/adapters/sandbox/daytona/index.js.map +1 -1
  24. package/dist/adapters/sandbox/daytona/workflow.d.cts +1 -1
  25. package/dist/adapters/sandbox/daytona/workflow.d.ts +1 -1
  26. package/dist/adapters/sandbox/e2b/index.cjs +26 -14
  27. package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
  28. package/dist/adapters/sandbox/e2b/index.d.cts +24 -4
  29. package/dist/adapters/sandbox/e2b/index.d.ts +24 -4
  30. package/dist/adapters/sandbox/e2b/index.js +26 -14
  31. package/dist/adapters/sandbox/e2b/index.js.map +1 -1
  32. package/dist/adapters/sandbox/e2b/workflow.d.cts +1 -1
  33. package/dist/adapters/sandbox/e2b/workflow.d.ts +1 -1
  34. package/dist/adapters/sandbox/inmemory/index.cjs +3 -3
  35. package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
  36. package/dist/adapters/sandbox/inmemory/index.d.cts +4 -4
  37. package/dist/adapters/sandbox/inmemory/index.d.ts +4 -4
  38. package/dist/adapters/sandbox/inmemory/index.js +3 -3
  39. package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
  40. package/dist/adapters/sandbox/inmemory/workflow.d.cts +1 -1
  41. package/dist/adapters/sandbox/inmemory/workflow.d.ts +1 -1
  42. package/dist/adapters/thread/anthropic/index.cjs +150 -13
  43. package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
  44. package/dist/adapters/thread/anthropic/index.d.cts +9 -8
  45. package/dist/adapters/thread/anthropic/index.d.ts +9 -8
  46. package/dist/adapters/thread/anthropic/index.js +150 -14
  47. package/dist/adapters/thread/anthropic/index.js.map +1 -1
  48. package/dist/adapters/thread/anthropic/workflow.cjs +9 -3
  49. package/dist/adapters/thread/anthropic/workflow.cjs.map +1 -1
  50. package/dist/adapters/thread/anthropic/workflow.d.cts +6 -5
  51. package/dist/adapters/thread/anthropic/workflow.d.ts +6 -5
  52. package/dist/adapters/thread/anthropic/workflow.js +9 -4
  53. package/dist/adapters/thread/anthropic/workflow.js.map +1 -1
  54. package/dist/adapters/thread/google-genai/index.cjs +154 -13
  55. package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
  56. package/dist/adapters/thread/google-genai/index.d.cts +6 -5
  57. package/dist/adapters/thread/google-genai/index.d.ts +6 -5
  58. package/dist/adapters/thread/google-genai/index.js +154 -14
  59. package/dist/adapters/thread/google-genai/index.js.map +1 -1
  60. package/dist/adapters/thread/google-genai/workflow.cjs +9 -3
  61. package/dist/adapters/thread/google-genai/workflow.cjs.map +1 -1
  62. package/dist/adapters/thread/google-genai/workflow.d.cts +6 -5
  63. package/dist/adapters/thread/google-genai/workflow.d.ts +6 -5
  64. package/dist/adapters/thread/google-genai/workflow.js +9 -4
  65. package/dist/adapters/thread/google-genai/workflow.js.map +1 -1
  66. package/dist/adapters/thread/index.cjs +16 -0
  67. package/dist/adapters/thread/index.cjs.map +1 -0
  68. package/dist/adapters/thread/index.d.cts +34 -0
  69. package/dist/adapters/thread/index.d.ts +34 -0
  70. package/dist/adapters/thread/index.js +12 -0
  71. package/dist/adapters/thread/index.js.map +1 -0
  72. package/dist/adapters/thread/langchain/index.cjs +149 -14
  73. package/dist/adapters/thread/langchain/index.cjs.map +1 -1
  74. package/dist/adapters/thread/langchain/index.d.cts +9 -8
  75. package/dist/adapters/thread/langchain/index.d.ts +9 -8
  76. package/dist/adapters/thread/langchain/index.js +149 -15
  77. package/dist/adapters/thread/langchain/index.js.map +1 -1
  78. package/dist/adapters/thread/langchain/workflow.cjs +9 -3
  79. package/dist/adapters/thread/langchain/workflow.cjs.map +1 -1
  80. package/dist/adapters/thread/langchain/workflow.d.cts +6 -5
  81. package/dist/adapters/thread/langchain/workflow.d.ts +6 -5
  82. package/dist/adapters/thread/langchain/workflow.js +9 -4
  83. package/dist/adapters/thread/langchain/workflow.js.map +1 -1
  84. package/dist/index.cjs +367 -59
  85. package/dist/index.cjs.map +1 -1
  86. package/dist/index.d.cts +11 -11
  87. package/dist/index.d.ts +11 -11
  88. package/dist/index.js +365 -61
  89. package/dist/index.js.map +1 -1
  90. package/dist/{proxy-DEtowJyd.d.cts → proxy-BAKzNGRq.d.cts} +1 -1
  91. package/dist/{proxy-0smGKvx8.d.ts → proxy-DO_MXbY4.d.ts} +1 -1
  92. package/dist/{thread-manager-C-C4pI2z.d.ts → thread-manager-CcRXasqs.d.ts} +2 -2
  93. package/dist/{thread-manager-D4vgzYrh.d.cts → thread-manager-ClwSaUnj.d.cts} +2 -2
  94. package/dist/{thread-manager-3fszQih4.d.ts → thread-manager-D-7lp1JK.d.ts} +2 -2
  95. package/dist/{thread-manager-CzYln2OC.d.cts → thread-manager-Y8Ucf0Tf.d.cts} +2 -2
  96. package/dist/{types-CPKDl-y_.d.ts → types-Bcbiq8iv.d.cts} +195 -22
  97. package/dist/{types-CNuWnvy9.d.ts → types-DAsQ21Rt.d.ts} +1 -1
  98. package/dist/{types-B37hKoWA.d.ts → types-DpHTX-iO.d.ts} +58 -1
  99. package/dist/{types-BO7Yju20.d.cts → types-Dt8-HBBT.d.ts} +195 -22
  100. package/dist/{types-D08CXPh8.d.cts → types-hFFi-Zd9.d.cts} +58 -1
  101. package/dist/{types-DWEUmYAJ.d.cts → types-lm8tMNJQ.d.cts} +1 -1
  102. package/dist/{types-tQL9njTu.d.cts → types-yx0LzPGn.d.cts} +21 -7
  103. package/dist/{types-tQL9njTu.d.ts → types-yx0LzPGn.d.ts} +21 -7
  104. package/dist/{workflow-CjXHbZZc.d.ts → workflow-Bmf9EtDW.d.ts} +83 -3
  105. package/dist/{workflow-Do_lzJpT.d.cts → workflow-Bx9utBwb.d.cts} +83 -3
  106. package/dist/workflow.cjs +266 -39
  107. package/dist/workflow.cjs.map +1 -1
  108. package/dist/workflow.d.cts +3 -3
  109. package/dist/workflow.d.ts +3 -3
  110. package/dist/workflow.js +264 -41
  111. package/dist/workflow.js.map +1 -1
  112. package/package.json +12 -2
  113. package/src/adapters/sandbox/bedrock/index.ts +12 -3
  114. package/src/adapters/sandbox/daytona/index.ts +12 -3
  115. package/src/adapters/sandbox/e2b/index.ts +36 -14
  116. package/src/adapters/sandbox/e2b/types.ts +16 -0
  117. package/src/adapters/sandbox/inmemory/index.ts +12 -3
  118. package/src/adapters/thread/adapter-id.test.ts +42 -0
  119. package/src/adapters/thread/anthropic/activities.ts +40 -5
  120. package/src/adapters/thread/anthropic/adapter-id.ts +16 -0
  121. package/src/adapters/thread/anthropic/fork-transform.test.ts +291 -0
  122. package/src/adapters/thread/anthropic/index.ts +3 -0
  123. package/src/adapters/thread/anthropic/model-invoker.ts +7 -1
  124. package/src/adapters/thread/anthropic/proxy.ts +3 -2
  125. package/src/adapters/thread/anthropic/thread-manager.ts +27 -1
  126. package/src/adapters/thread/google-genai/activities.ts +44 -5
  127. package/src/adapters/thread/google-genai/adapter-id.ts +16 -0
  128. package/src/adapters/thread/google-genai/fork-transform.test.ts +149 -0
  129. package/src/adapters/thread/google-genai/index.ts +3 -0
  130. package/src/adapters/thread/google-genai/model-invoker.ts +8 -2
  131. package/src/adapters/thread/google-genai/proxy.ts +3 -2
  132. package/src/adapters/thread/google-genai/thread-manager.ts +27 -1
  133. package/src/adapters/thread/index.ts +39 -0
  134. package/src/adapters/thread/langchain/activities.ts +40 -5
  135. package/src/adapters/thread/langchain/adapter-id.ts +16 -0
  136. package/src/adapters/thread/langchain/fork-transform.test.ts +142 -0
  137. package/src/adapters/thread/langchain/index.ts +3 -0
  138. package/src/adapters/thread/langchain/model-invoker.ts +7 -1
  139. package/src/adapters/thread/langchain/proxy.ts +3 -2
  140. package/src/adapters/thread/langchain/thread-manager.ts +27 -1
  141. package/src/lib/lifecycle.ts +14 -5
  142. package/src/lib/model/types.ts +7 -0
  143. package/src/lib/sandbox/manager.ts +26 -18
  144. package/src/lib/sandbox/types.ts +27 -7
  145. package/src/lib/session/session-edge-cases.integration.test.ts +336 -4
  146. package/src/lib/session/session.integration.test.ts +192 -2
  147. package/src/lib/session/session.ts +102 -8
  148. package/src/lib/session/types.ts +66 -3
  149. package/src/lib/state/index.ts +1 -0
  150. package/src/lib/state/manager.integration.test.ts +109 -0
  151. package/src/lib/state/manager.ts +38 -8
  152. package/src/lib/state/types.ts +25 -0
  153. package/src/lib/subagent/handler.ts +124 -11
  154. package/src/lib/subagent/index.ts +5 -1
  155. package/src/lib/subagent/subagent.integration.test.ts +628 -104
  156. package/src/lib/subagent/types.ts +63 -14
  157. package/src/lib/subagent/workflow.ts +29 -2
  158. package/src/lib/thread/index.ts +5 -0
  159. package/src/lib/thread/keys.test.ts +101 -0
  160. package/src/lib/thread/keys.ts +94 -0
  161. package/src/lib/thread/manager.test.ts +139 -0
  162. package/src/lib/thread/manager.ts +105 -9
  163. package/src/lib/thread/proxy.ts +3 -0
  164. package/src/lib/thread/types.ts +64 -1
  165. package/src/lib/tool-router/index.ts +2 -0
  166. package/src/lib/tool-router/router-edge-cases.integration.test.ts +92 -0
  167. package/src/lib/tool-router/router.integration.test.ts +12 -0
  168. package/src/lib/tool-router/router.ts +89 -16
  169. package/src/lib/tool-router/types.ts +42 -1
  170. package/src/lib/types.ts +12 -0
  171. package/src/workflow.ts +14 -1
  172. package/tsup.config.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/sandbox/types.ts","../../../../src/adapters/sandbox/daytona/filesystem.ts","../../../../src/adapters/sandbox/daytona/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// ============================================================================\n// Sandbox Filesystem\n// ============================================================================\n\nexport interface DirentEntry {\n name: string;\n isFile: boolean;\n isDirectory: boolean;\n isSymbolicLink: boolean;\n}\n\nexport interface FileStat {\n isFile: boolean;\n isDirectory: boolean;\n isSymbolicLink: boolean;\n size: number;\n mtime: Date;\n}\n\n// ============================================================================\n// Network & lifecycle\n// ============================================================================\n\nexport interface SandboxNetworkConfig {\n allowOut?: string[];\n denyOut?: string[];\n allowPublicTraffic?: boolean;\n}\n\nexport interface SandboxLifecycleConfig {\n onTimeout: \"kill\" | \"pause\";\n autoResume?: boolean;\n}\n\n/**\n * Provider-agnostic filesystem interface.\n *\n * Implementations that don't support a method should throw\n * {@link SandboxNotSupportedError}.\n */\nexport interface SandboxFileSystem {\n /** Base directory used when resolving relative paths. */\n readonly workspaceBase: string;\n readFile(path: string): Promise<string>;\n readFileBuffer(path: string): Promise<Uint8Array>;\n writeFile(path: string, content: string | Uint8Array): Promise<void>;\n appendFile(path: string, content: string | Uint8Array): Promise<void>;\n exists(path: string): Promise<boolean>;\n stat(path: string): Promise<FileStat>;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n readdir(path: string): Promise<string[]>;\n readdirWithFileTypes(path: string): Promise<DirentEntry[]>;\n rm(\n path: string,\n options?: { recursive?: boolean; force?: boolean }\n ): Promise<void>;\n cp(\n src: string,\n dest: string,\n options?: { recursive?: boolean }\n ): Promise<void>;\n mv(src: string, dest: string): Promise<void>;\n readlink(path: string): Promise<string>;\n resolvePath(base: string, path: string): string;\n}\n\n// ============================================================================\n// Execution\n// ============================================================================\n\nexport interface ExecOptions {\n timeout?: number;\n cwd?: string;\n env?: Record<string, string>;\n}\n\nexport interface ExecResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n}\n\n// ============================================================================\n// Capabilities\n// ============================================================================\n\nexport interface SandboxCapabilities {\n /** Sandbox supports filesystem operations */\n filesystem: boolean;\n /** Sandbox supports shell/command execution */\n execution: boolean;\n /** Sandbox state can be persisted and restored */\n persistence: boolean;\n}\n\n// ============================================================================\n// Sandbox\n// ============================================================================\n\nexport interface Sandbox {\n readonly id: string;\n readonly capabilities: SandboxCapabilities;\n readonly fs: SandboxFileSystem;\n\n exec(command: string, options?: ExecOptions): Promise<ExecResult>;\n destroy(): Promise<void>;\n}\n\n// ============================================================================\n// Snapshots\n// ============================================================================\n\nexport interface SandboxSnapshot {\n sandboxId: string;\n providerId: string;\n /** Provider-specific serialised state */\n data: unknown;\n createdAt: string;\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport interface SandboxCreateOptions {\n /** Preferred sandbox ID (provider may ignore) */\n id?: string;\n /** Seed the filesystem with these files */\n initialFiles?: Record<string, string | Uint8Array>;\n /** Environment variables available inside the sandbox */\n env?: Record<string, string>;\n /** Key-value metadata surfaced via provider list/query APIs */\n metadata?: Record<string, string>;\n /** Sandbox idle timeout in milliseconds */\n timeoutMs?: number;\n /** Enable or disable outbound internet access */\n allowInternetAccess?: boolean;\n /** Outbound network allow/deny rules */\n network?: SandboxNetworkConfig;\n /** Sandbox timeout behaviour */\n lifecycle?: SandboxLifecycleConfig;\n}\n\nexport interface SandboxCreateResult {\n sandbox: Sandbox;\n}\n\nexport interface SandboxProvider<\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TSandbox extends Sandbox = Sandbox,\n> {\n readonly id: string;\n readonly capabilities: SandboxCapabilities;\n\n create(options?: TOptions): Promise<SandboxCreateResult>;\n get(sandboxId: string): Promise<TSandbox>;\n destroy(sandboxId: string): Promise<void>;\n pause(sandboxId: string, ttlSeconds?: number): Promise<void>;\n /** Resume a paused sandbox. No-op if already running. */\n resume(sandboxId: string): Promise<void>;\n snapshot(sandboxId: string): Promise<SandboxSnapshot>;\n restore(snapshot: SandboxSnapshot): Promise<Sandbox>;\n /** Delete a previously captured snapshot. No-op if already deleted. */\n deleteSnapshot(snapshot: SandboxSnapshot): Promise<void>;\n fork(sandboxId: string): Promise<Sandbox>;\n}\n\n// ============================================================================\n// SandboxOps — workflow-side activity interface (like ThreadOps)\n// ============================================================================\n\nexport interface SandboxOps<\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TCtx = unknown,\n> {\n createSandbox(\n options?: TOptions,\n ctx?: TCtx\n ): Promise<{ sandboxId: string } | null>;\n destroySandbox(sandboxId: string): Promise<void>;\n pauseSandbox(sandboxId: string): Promise<void>;\n /** Resume a paused sandbox. No-op if already running. */\n resumeSandbox(sandboxId: string): Promise<void>;\n snapshotSandbox(sandboxId: string): Promise<SandboxSnapshot>;\n /** Create a fresh sandbox from a previously captured snapshot. */\n restoreSandbox(snapshot: SandboxSnapshot): Promise<string>;\n /** Delete a previously captured snapshot. No-op if already deleted. */\n deleteSandboxSnapshot(snapshot: SandboxSnapshot): Promise<void>;\n forkSandbox(sandboxId: string): Promise<string>;\n}\n\n/**\n * Maps generic {@link SandboxOps} method names to adapter-prefixed names.\n *\n * @example\n * ```typescript\n * type InMemOps = PrefixedSandboxOps<\"inMemory\">;\n * // → { inMemoryCreateSandbox, inMemoryDestroySandbox, inMemorySnapshotSandbox }\n * ```\n */\nexport type PrefixedSandboxOps<\n TPrefix extends string,\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TCtx = unknown,\n> = {\n [K in keyof SandboxOps<\n TOptions,\n TCtx\n > as `${TPrefix}${Capitalize<K & string>}`]: SandboxOps<TOptions, TCtx>[K];\n};\n\n// ============================================================================\n// Errors\n// ============================================================================\n\nimport { ApplicationFailure } from \"@temporalio/common\";\n\nexport class SandboxNotSupportedError extends ApplicationFailure {\n constructor(operation: string) {\n super(\n `Sandbox does not support: ${operation}`,\n \"SandboxNotSupportedError\",\n true\n );\n }\n}\n\nexport class SandboxNotFoundError extends ApplicationFailure {\n constructor(sandboxId: string) {\n super(`Sandbox not found: ${sandboxId}`, \"SandboxNotFoundError\", true);\n }\n}\n","import type { Sandbox as DaytonaSdkSandbox } from \"@daytonaio/sdk\";\nimport type {\n SandboxFileSystem,\n DirentEntry,\n FileStat,\n} from \"../../../lib/sandbox/types\";\nimport { SandboxNotSupportedError } from \"../../../lib/sandbox/types\";\nimport { posix } from \"node:path\";\n\n/**\n * {@link SandboxFileSystem} backed by a Daytona SDK sandbox.\n *\n * Maps zeitlich's filesystem interface to Daytona's `sandbox.fs` and\n * `sandbox.process` APIs. Operations that have no direct Daytona equivalent\n * (e.g. `appendFile`, `cp`) are composed from primitives.\n */\nexport class DaytonaSandboxFileSystem implements SandboxFileSystem {\n readonly workspaceBase: string;\n\n constructor(\n private sandbox: DaytonaSdkSandbox,\n workspaceBase = \"/home/daytona\"\n ) {\n this.workspaceBase = posix.resolve(\"/\", workspaceBase);\n }\n\n private normalisePath(path: string): string {\n return posix.resolve(this.workspaceBase, path);\n }\n\n private async ensureParentDirs(absolutePaths: string[]): Promise<void> {\n const prefix = this.workspaceBase === \"/\" ? \"/\" : `${this.workspaceBase}/`;\n const dirs = new Set<string>();\n for (const p of absolutePaths) {\n let dir = posix.dirname(p);\n while (dir.startsWith(prefix)) {\n dirs.add(dir);\n dir = posix.dirname(dir);\n }\n }\n const sorted = [...dirs].sort(\n (a, b) => a.split(\"/\").length - b.split(\"/\").length\n );\n for (const dir of sorted) {\n try {\n await this.sandbox.fs.createFolder(dir, \"755\");\n } catch {\n // Folder already exists — Daytona's createFolder throws in that case.\n }\n }\n }\n\n async readFile(path: string): Promise<string> {\n const norm = this.normalisePath(path);\n const buf = await this.sandbox.fs.downloadFile(norm);\n return buf.toString(\"utf-8\");\n }\n\n async readFileBuffer(path: string): Promise<Uint8Array> {\n const norm = this.normalisePath(path);\n const buf = await this.sandbox.fs.downloadFile(norm);\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n\n async writeFile(path: string, content: string | Uint8Array): Promise<void> {\n const norm = this.normalisePath(path);\n const buf =\n typeof content === \"string\"\n ? Buffer.from(content, \"utf-8\")\n : Buffer.from(content);\n await this.ensureParentDirs([norm]);\n await this.sandbox.fs.uploadFile(buf, norm);\n }\n\n async writeFiles(\n files: { path: string; content: string | Uint8Array }[]\n ): Promise<void> {\n const uploads = files.map((f) => ({\n source: Buffer.from(f.content),\n destination: this.normalisePath(f.path),\n }));\n await this.ensureParentDirs(uploads.map((u) => u.destination));\n await this.sandbox.fs.uploadFiles(uploads);\n }\n\n async appendFile(path: string, content: string | Uint8Array): Promise<void> {\n const norm = this.normalisePath(path);\n let existing: Buffer;\n try {\n existing = await this.sandbox.fs.downloadFile(norm);\n } catch {\n return this.writeFile(norm, content);\n }\n\n const addition =\n typeof content === \"string\" ? Buffer.from(content, \"utf-8\") : content;\n const merged = Buffer.concat([existing, Buffer.from(addition)]);\n await this.sandbox.fs.uploadFile(merged, norm);\n }\n\n async exists(path: string): Promise<boolean> {\n const norm = this.normalisePath(path);\n try {\n await this.sandbox.fs.getFileDetails(norm);\n return true;\n } catch {\n return false;\n }\n }\n\n async stat(path: string): Promise<FileStat> {\n const norm = this.normalisePath(path);\n const info = await this.sandbox.fs.getFileDetails(norm);\n return {\n isFile: !info.isDir,\n isDirectory: info.isDir,\n isSymbolicLink: false,\n size: info.size,\n mtime: new Date(info.modTime),\n };\n }\n\n async mkdir(path: string, _options?: { recursive?: boolean }): Promise<void> {\n const norm = this.normalisePath(path);\n await this.sandbox.fs.createFolder(norm, \"755\");\n }\n\n async readdir(path: string): Promise<string[]> {\n const norm = this.normalisePath(path);\n const entries = await this.sandbox.fs.listFiles(norm);\n return entries.map((e) => e.name);\n }\n\n async readdirWithFileTypes(path: string): Promise<DirentEntry[]> {\n const norm = this.normalisePath(path);\n const entries = await this.sandbox.fs.listFiles(norm);\n return entries.map((e) => ({\n name: e.name,\n isFile: !e.isDir,\n isDirectory: e.isDir,\n isSymbolicLink: false,\n }));\n }\n\n async rm(\n path: string,\n options?: { recursive?: boolean; force?: boolean }\n ): Promise<void> {\n const norm = this.normalisePath(path);\n try {\n await this.sandbox.fs.deleteFile(norm, options?.recursive);\n } catch (err) {\n if (!options?.force) throw err;\n }\n }\n\n async cp(\n src: string,\n dest: string,\n options?: { recursive?: boolean }\n ): Promise<void> {\n const normSrc = this.normalisePath(src);\n const normDest = this.normalisePath(dest);\n const info = await this.sandbox.fs.getFileDetails(normSrc);\n if (info.isDir) {\n if (!options?.recursive) {\n throw new Error(`EISDIR: is a directory (use recursive): ${src}`);\n }\n await this.sandbox.process.executeCommand(\n `cp -r \"${normSrc}\" \"${normDest}\"`\n );\n } else {\n await this.sandbox.process.executeCommand(\n `cp \"${normSrc}\" \"${normDest}\"`\n );\n }\n }\n\n async mv(src: string, dest: string): Promise<void> {\n const normSrc = this.normalisePath(src);\n const normDest = this.normalisePath(dest);\n await this.sandbox.fs.moveFiles(normSrc, normDest);\n }\n\n async readlink(_path: string): Promise<string> {\n throw new SandboxNotSupportedError(\"readlink\");\n }\n\n resolvePath(base: string, path: string): string {\n return posix.resolve(this.normalisePath(base), path);\n }\n}\n","import { Daytona, type Sandbox as DaytonaSdkSandbox } from \"@daytonaio/sdk\";\nimport type {\n Sandbox,\n SandboxCapabilities,\n SandboxCreateResult,\n SandboxProvider,\n SandboxSnapshot,\n ExecOptions,\n ExecResult,\n} from \"../../../lib/sandbox/types\";\nimport {\n SandboxNotFoundError,\n SandboxNotSupportedError,\n} from \"../../../lib/sandbox/types\";\nimport { DaytonaSandboxFileSystem } from \"./filesystem\";\nimport type {\n DaytonaSandbox,\n DaytonaSandboxConfig,\n DaytonaSandboxCreateOptions,\n} from \"./types\";\n\n// ============================================================================\n// DaytonaSandbox\n// ============================================================================\n\nclass DaytonaSandboxImpl implements Sandbox {\n readonly capabilities: SandboxCapabilities = {\n filesystem: true,\n execution: true,\n persistence: false,\n };\n\n readonly fs: DaytonaSandboxFileSystem;\n\n constructor(\n readonly id: string,\n private sdkSandbox: DaytonaSdkSandbox,\n workspaceBase = \"/home/daytona\"\n ) {\n this.fs = new DaytonaSandboxFileSystem(sdkSandbox, workspaceBase);\n }\n\n async exec(command: string, options?: ExecOptions): Promise<ExecResult> {\n const response = await this.sdkSandbox.process.executeCommand(\n command,\n options?.cwd,\n options?.env,\n options?.timeout\n );\n\n return {\n exitCode: response.exitCode ?? 0,\n stdout: response.result ?? \"\",\n stderr: \"\",\n };\n }\n\n async destroy(): Promise<void> {\n await this.sdkSandbox.delete(60);\n }\n}\n\n// ============================================================================\n// DaytonaSandboxProvider\n// ============================================================================\n\nexport class DaytonaSandboxProvider implements SandboxProvider<\n DaytonaSandboxCreateOptions,\n DaytonaSandbox\n> {\n readonly id = \"daytona\";\n readonly capabilities: SandboxCapabilities = {\n filesystem: true,\n execution: true,\n persistence: false,\n };\n\n private client: Daytona;\n private readonly defaultWorkspaceBase: string;\n\n constructor(config?: DaytonaSandboxConfig) {\n this.client = new Daytona(config);\n this.defaultWorkspaceBase = config?.workspaceBase ?? \"/home/daytona\";\n }\n\n async create(\n options?: DaytonaSandboxCreateOptions\n ): Promise<SandboxCreateResult> {\n const sdkSandbox = await this.client.create(\n {\n language: options?.language,\n snapshot: options?.snapshot,\n envVars: options?.env,\n labels: options?.labels,\n autoStopInterval: options?.autoStopInterval,\n autoArchiveInterval: options?.autoArchiveInterval,\n autoDeleteInterval: options?.autoDeleteInterval,\n },\n { timeout: options?.timeout ?? 60 }\n );\n\n const workspaceBase = options?.workspaceBase ?? this.defaultWorkspaceBase;\n\n const sandbox = new DaytonaSandboxImpl(\n sdkSandbox.id,\n sdkSandbox,\n workspaceBase\n );\n\n if (options?.initialFiles) {\n await sandbox.fs.writeFiles(\n Object.entries(options.initialFiles).map(([path, content]) => ({\n path,\n content,\n }))\n );\n }\n\n return { sandbox };\n }\n\n async get(sandboxId: string): Promise<DaytonaSandbox> {\n try {\n const sdkSandbox = await this.client.get(sandboxId);\n return new DaytonaSandboxImpl(\n sdkSandbox.id,\n sdkSandbox,\n this.defaultWorkspaceBase\n );\n } catch {\n throw new SandboxNotFoundError(sandboxId);\n }\n }\n\n async destroy(sandboxId: string): Promise<void> {\n try {\n const sdkSandbox = await this.client.get(sandboxId);\n await this.client.delete(sdkSandbox);\n } catch {\n // Already gone\n }\n }\n\n async pause(_sandboxId: string, _ttlSeconds?: number): Promise<void> {\n throw new SandboxNotSupportedError(\"pause\");\n }\n\n async resume(_sandboxId: string): Promise<void> {\n // Daytona sandboxes don't support pause, so resume is a no-op\n }\n\n async fork(_sandboxId: string): Promise<Sandbox> {\n throw new Error(\"Not implemented\");\n }\n\n async snapshot(_sandboxId: string): Promise<SandboxSnapshot> {\n throw new SandboxNotSupportedError(\n \"snapshot (use Daytona's native snapshot API directly)\"\n );\n }\n\n async restore(_snapshot: SandboxSnapshot): Promise<never> {\n throw new SandboxNotSupportedError(\n \"restore (use Daytona's native snapshot API directly)\"\n );\n }\n\n async deleteSnapshot(_snapshot: SandboxSnapshot): Promise<void> {\n throw new SandboxNotSupportedError(\n \"deleteSnapshot (use Daytona's native snapshot API directly)\"\n );\n }\n}\n\n// Re-exports\nexport { DaytonaSandboxFileSystem } from \"./filesystem\";\nexport type {\n DaytonaSandbox,\n DaytonaSandboxConfig,\n DaytonaSandboxCreateOptions,\n} from \"./types\";\n"]}
1
+ {"version":3,"sources":["../../../../src/lib/sandbox/types.ts","../../../../src/adapters/sandbox/daytona/filesystem.ts","../../../../src/adapters/sandbox/daytona/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["// ============================================================================\n// Sandbox Filesystem\n// ============================================================================\n\nexport interface DirentEntry {\n name: string;\n isFile: boolean;\n isDirectory: boolean;\n isSymbolicLink: boolean;\n}\n\nexport interface FileStat {\n isFile: boolean;\n isDirectory: boolean;\n isSymbolicLink: boolean;\n size: number;\n mtime: Date;\n}\n\n// ============================================================================\n// Network & lifecycle\n// ============================================================================\n\nexport interface SandboxNetworkConfig {\n allowOut?: string[];\n denyOut?: string[];\n allowPublicTraffic?: boolean;\n}\n\nexport interface SandboxLifecycleConfig {\n onTimeout: \"kill\" | \"pause\";\n autoResume?: boolean;\n}\n\n/**\n * Provider-agnostic filesystem interface.\n *\n * Implementations that don't support a method should throw\n * {@link SandboxNotSupportedError}.\n */\nexport interface SandboxFileSystem {\n /** Base directory used when resolving relative paths. */\n readonly workspaceBase: string;\n readFile(path: string): Promise<string>;\n readFileBuffer(path: string): Promise<Uint8Array>;\n writeFile(path: string, content: string | Uint8Array): Promise<void>;\n appendFile(path: string, content: string | Uint8Array): Promise<void>;\n exists(path: string): Promise<boolean>;\n stat(path: string): Promise<FileStat>;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n readdir(path: string): Promise<string[]>;\n readdirWithFileTypes(path: string): Promise<DirentEntry[]>;\n rm(\n path: string,\n options?: { recursive?: boolean; force?: boolean }\n ): Promise<void>;\n cp(\n src: string,\n dest: string,\n options?: { recursive?: boolean }\n ): Promise<void>;\n mv(src: string, dest: string): Promise<void>;\n readlink(path: string): Promise<string>;\n resolvePath(base: string, path: string): string;\n}\n\n// ============================================================================\n// Execution\n// ============================================================================\n\nexport interface ExecOptions {\n timeout?: number;\n cwd?: string;\n env?: Record<string, string>;\n}\n\nexport interface ExecResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n}\n\n// ============================================================================\n// Capabilities\n// ============================================================================\n\nexport interface SandboxCapabilities {\n /** Sandbox supports filesystem operations */\n filesystem: boolean;\n /** Sandbox supports shell/command execution */\n execution: boolean;\n /** Sandbox state can be persisted and restored */\n persistence: boolean;\n}\n\n// ============================================================================\n// Sandbox\n// ============================================================================\n\nexport interface Sandbox {\n readonly id: string;\n readonly capabilities: SandboxCapabilities;\n readonly fs: SandboxFileSystem;\n\n exec(command: string, options?: ExecOptions): Promise<ExecResult>;\n destroy(): Promise<void>;\n}\n\n// ============================================================================\n// Snapshots\n// ============================================================================\n\nexport interface SandboxSnapshot {\n sandboxId: string;\n providerId: string;\n /** Provider-specific serialised state */\n data: unknown;\n createdAt: string;\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport interface SandboxCreateOptions {\n /** Preferred sandbox ID (provider may ignore) */\n id?: string;\n /** Seed the filesystem with these files */\n initialFiles?: Record<string, string | Uint8Array>;\n /** Environment variables available inside the sandbox */\n env?: Record<string, string>;\n /** Key-value metadata surfaced via provider list/query APIs */\n metadata?: Record<string, string>;\n /** Sandbox idle timeout in milliseconds */\n timeoutMs?: number;\n /** Enable or disable outbound internet access */\n allowInternetAccess?: boolean;\n /** Outbound network allow/deny rules */\n network?: SandboxNetworkConfig;\n /** Sandbox timeout behaviour */\n lifecycle?: SandboxLifecycleConfig;\n}\n\nexport interface SandboxCreateResult {\n sandbox: Sandbox;\n}\n\nexport interface SandboxProvider<\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TSandbox extends Sandbox = Sandbox,\n> {\n readonly id: string;\n readonly capabilities: SandboxCapabilities;\n\n create(options?: TOptions): Promise<SandboxCreateResult>;\n get(sandboxId: string): Promise<TSandbox>;\n destroy(sandboxId: string): Promise<void>;\n pause(sandboxId: string, ttlSeconds?: number): Promise<void>;\n /** Resume a paused sandbox. No-op if already running. */\n resume(sandboxId: string): Promise<void>;\n /**\n * Capture a snapshot of a running sandbox. `options` is a per-call override\n * merged on top of the provider's static defaults.\n */\n snapshot(sandboxId: string, options?: TOptions): Promise<SandboxSnapshot>;\n /**\n * Restore a sandbox from a snapshot. `options` is a per-call override\n * merged on top of the provider's static defaults.\n */\n restore(snapshot: SandboxSnapshot, options?: TOptions): Promise<Sandbox>;\n /** Delete a previously captured snapshot. No-op if already deleted. */\n deleteSnapshot(snapshot: SandboxSnapshot): Promise<void>;\n /**\n * Fork a running sandbox into a new one. `options` is a per-call override\n * merged on top of the provider's static defaults.\n */\n fork(sandboxId: string, options?: TOptions): Promise<Sandbox>;\n}\n\n// ============================================================================\n// SandboxOps — workflow-side activity interface (like ThreadOps)\n// ============================================================================\n\nexport interface SandboxOps<\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TCtx = unknown,\n> {\n createSandbox(\n options?: TOptions,\n ctx?: TCtx\n ): Promise<{ sandboxId: string } | null>;\n destroySandbox(sandboxId: string): Promise<void>;\n pauseSandbox(sandboxId: string): Promise<void>;\n /** Resume a paused sandbox. No-op if already running. */\n resumeSandbox(sandboxId: string): Promise<void>;\n /** Capture a snapshot. `options` is a per-call override merged on top of provider defaults. */\n snapshotSandbox(\n sandboxId: string,\n options?: TOptions\n ): Promise<SandboxSnapshot>;\n /** Create a fresh sandbox from a snapshot. `options` is a per-call override merged on top of provider defaults. */\n restoreSandbox(\n snapshot: SandboxSnapshot,\n options?: TOptions\n ): Promise<string>;\n /** Delete a previously captured snapshot. No-op if already deleted. */\n deleteSandboxSnapshot(snapshot: SandboxSnapshot): Promise<void>;\n /** Fork a running sandbox. `options` is a per-call override merged on top of provider defaults. */\n forkSandbox(sandboxId: string, options?: TOptions): Promise<string>;\n}\n\n/**\n * Maps generic {@link SandboxOps} method names to adapter-prefixed names.\n *\n * @example\n * ```typescript\n * type InMemOps = PrefixedSandboxOps<\"inMemory\">;\n * // → { inMemoryCreateSandbox, inMemoryDestroySandbox, inMemorySnapshotSandbox }\n * ```\n */\nexport type PrefixedSandboxOps<\n TPrefix extends string,\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TCtx = unknown,\n> = {\n [K in keyof SandboxOps<\n TOptions,\n TCtx\n > as `${TPrefix}${Capitalize<K & string>}`]: SandboxOps<TOptions, TCtx>[K];\n};\n\n// ============================================================================\n// Errors\n// ============================================================================\n\nimport { ApplicationFailure } from \"@temporalio/common\";\n\nexport class SandboxNotSupportedError extends ApplicationFailure {\n constructor(operation: string) {\n super(\n `Sandbox does not support: ${operation}`,\n \"SandboxNotSupportedError\",\n true\n );\n }\n}\n\nexport class SandboxNotFoundError extends ApplicationFailure {\n constructor(sandboxId: string) {\n super(`Sandbox not found: ${sandboxId}`, \"SandboxNotFoundError\", true);\n }\n}\n","import type { Sandbox as DaytonaSdkSandbox } from \"@daytonaio/sdk\";\nimport type {\n SandboxFileSystem,\n DirentEntry,\n FileStat,\n} from \"../../../lib/sandbox/types\";\nimport { SandboxNotSupportedError } from \"../../../lib/sandbox/types\";\nimport { posix } from \"node:path\";\n\n/**\n * {@link SandboxFileSystem} backed by a Daytona SDK sandbox.\n *\n * Maps zeitlich's filesystem interface to Daytona's `sandbox.fs` and\n * `sandbox.process` APIs. Operations that have no direct Daytona equivalent\n * (e.g. `appendFile`, `cp`) are composed from primitives.\n */\nexport class DaytonaSandboxFileSystem implements SandboxFileSystem {\n readonly workspaceBase: string;\n\n constructor(\n private sandbox: DaytonaSdkSandbox,\n workspaceBase = \"/home/daytona\"\n ) {\n this.workspaceBase = posix.resolve(\"/\", workspaceBase);\n }\n\n private normalisePath(path: string): string {\n return posix.resolve(this.workspaceBase, path);\n }\n\n private async ensureParentDirs(absolutePaths: string[]): Promise<void> {\n const prefix = this.workspaceBase === \"/\" ? \"/\" : `${this.workspaceBase}/`;\n const dirs = new Set<string>();\n for (const p of absolutePaths) {\n let dir = posix.dirname(p);\n while (dir.startsWith(prefix)) {\n dirs.add(dir);\n dir = posix.dirname(dir);\n }\n }\n const sorted = [...dirs].sort(\n (a, b) => a.split(\"/\").length - b.split(\"/\").length\n );\n for (const dir of sorted) {\n try {\n await this.sandbox.fs.createFolder(dir, \"755\");\n } catch {\n // Folder already exists — Daytona's createFolder throws in that case.\n }\n }\n }\n\n async readFile(path: string): Promise<string> {\n const norm = this.normalisePath(path);\n const buf = await this.sandbox.fs.downloadFile(norm);\n return buf.toString(\"utf-8\");\n }\n\n async readFileBuffer(path: string): Promise<Uint8Array> {\n const norm = this.normalisePath(path);\n const buf = await this.sandbox.fs.downloadFile(norm);\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n\n async writeFile(path: string, content: string | Uint8Array): Promise<void> {\n const norm = this.normalisePath(path);\n const buf =\n typeof content === \"string\"\n ? Buffer.from(content, \"utf-8\")\n : Buffer.from(content);\n await this.ensureParentDirs([norm]);\n await this.sandbox.fs.uploadFile(buf, norm);\n }\n\n async writeFiles(\n files: { path: string; content: string | Uint8Array }[]\n ): Promise<void> {\n const uploads = files.map((f) => ({\n source: Buffer.from(f.content),\n destination: this.normalisePath(f.path),\n }));\n await this.ensureParentDirs(uploads.map((u) => u.destination));\n await this.sandbox.fs.uploadFiles(uploads);\n }\n\n async appendFile(path: string, content: string | Uint8Array): Promise<void> {\n const norm = this.normalisePath(path);\n let existing: Buffer;\n try {\n existing = await this.sandbox.fs.downloadFile(norm);\n } catch {\n return this.writeFile(norm, content);\n }\n\n const addition =\n typeof content === \"string\" ? Buffer.from(content, \"utf-8\") : content;\n const merged = Buffer.concat([existing, Buffer.from(addition)]);\n await this.sandbox.fs.uploadFile(merged, norm);\n }\n\n async exists(path: string): Promise<boolean> {\n const norm = this.normalisePath(path);\n try {\n await this.sandbox.fs.getFileDetails(norm);\n return true;\n } catch {\n return false;\n }\n }\n\n async stat(path: string): Promise<FileStat> {\n const norm = this.normalisePath(path);\n const info = await this.sandbox.fs.getFileDetails(norm);\n return {\n isFile: !info.isDir,\n isDirectory: info.isDir,\n isSymbolicLink: false,\n size: info.size,\n mtime: new Date(info.modTime),\n };\n }\n\n async mkdir(path: string, _options?: { recursive?: boolean }): Promise<void> {\n const norm = this.normalisePath(path);\n await this.sandbox.fs.createFolder(norm, \"755\");\n }\n\n async readdir(path: string): Promise<string[]> {\n const norm = this.normalisePath(path);\n const entries = await this.sandbox.fs.listFiles(norm);\n return entries.map((e) => e.name);\n }\n\n async readdirWithFileTypes(path: string): Promise<DirentEntry[]> {\n const norm = this.normalisePath(path);\n const entries = await this.sandbox.fs.listFiles(norm);\n return entries.map((e) => ({\n name: e.name,\n isFile: !e.isDir,\n isDirectory: e.isDir,\n isSymbolicLink: false,\n }));\n }\n\n async rm(\n path: string,\n options?: { recursive?: boolean; force?: boolean }\n ): Promise<void> {\n const norm = this.normalisePath(path);\n try {\n await this.sandbox.fs.deleteFile(norm, options?.recursive);\n } catch (err) {\n if (!options?.force) throw err;\n }\n }\n\n async cp(\n src: string,\n dest: string,\n options?: { recursive?: boolean }\n ): Promise<void> {\n const normSrc = this.normalisePath(src);\n const normDest = this.normalisePath(dest);\n const info = await this.sandbox.fs.getFileDetails(normSrc);\n if (info.isDir) {\n if (!options?.recursive) {\n throw new Error(`EISDIR: is a directory (use recursive): ${src}`);\n }\n await this.sandbox.process.executeCommand(\n `cp -r \"${normSrc}\" \"${normDest}\"`\n );\n } else {\n await this.sandbox.process.executeCommand(\n `cp \"${normSrc}\" \"${normDest}\"`\n );\n }\n }\n\n async mv(src: string, dest: string): Promise<void> {\n const normSrc = this.normalisePath(src);\n const normDest = this.normalisePath(dest);\n await this.sandbox.fs.moveFiles(normSrc, normDest);\n }\n\n async readlink(_path: string): Promise<string> {\n throw new SandboxNotSupportedError(\"readlink\");\n }\n\n resolvePath(base: string, path: string): string {\n return posix.resolve(this.normalisePath(base), path);\n }\n}\n","import { Daytona, type Sandbox as DaytonaSdkSandbox } from \"@daytonaio/sdk\";\nimport type {\n Sandbox,\n SandboxCapabilities,\n SandboxCreateResult,\n SandboxProvider,\n SandboxSnapshot,\n ExecOptions,\n ExecResult,\n} from \"../../../lib/sandbox/types\";\nimport {\n SandboxNotFoundError,\n SandboxNotSupportedError,\n} from \"../../../lib/sandbox/types\";\nimport { DaytonaSandboxFileSystem } from \"./filesystem\";\nimport type {\n DaytonaSandbox,\n DaytonaSandboxConfig,\n DaytonaSandboxCreateOptions,\n} from \"./types\";\n\n// ============================================================================\n// DaytonaSandbox\n// ============================================================================\n\nclass DaytonaSandboxImpl implements Sandbox {\n readonly capabilities: SandboxCapabilities = {\n filesystem: true,\n execution: true,\n persistence: false,\n };\n\n readonly fs: DaytonaSandboxFileSystem;\n\n constructor(\n readonly id: string,\n private sdkSandbox: DaytonaSdkSandbox,\n workspaceBase = \"/home/daytona\"\n ) {\n this.fs = new DaytonaSandboxFileSystem(sdkSandbox, workspaceBase);\n }\n\n async exec(command: string, options?: ExecOptions): Promise<ExecResult> {\n const response = await this.sdkSandbox.process.executeCommand(\n command,\n options?.cwd,\n options?.env,\n options?.timeout\n );\n\n return {\n exitCode: response.exitCode ?? 0,\n stdout: response.result ?? \"\",\n stderr: \"\",\n };\n }\n\n async destroy(): Promise<void> {\n await this.sdkSandbox.delete(60);\n }\n}\n\n// ============================================================================\n// DaytonaSandboxProvider\n// ============================================================================\n\nexport class DaytonaSandboxProvider implements SandboxProvider<\n DaytonaSandboxCreateOptions,\n DaytonaSandbox\n> {\n readonly id = \"daytona\";\n readonly capabilities: SandboxCapabilities = {\n filesystem: true,\n execution: true,\n persistence: false,\n };\n\n private client: Daytona;\n private readonly defaultWorkspaceBase: string;\n\n constructor(config?: DaytonaSandboxConfig) {\n this.client = new Daytona(config);\n this.defaultWorkspaceBase = config?.workspaceBase ?? \"/home/daytona\";\n }\n\n async create(\n options?: DaytonaSandboxCreateOptions\n ): Promise<SandboxCreateResult> {\n const sdkSandbox = await this.client.create(\n {\n language: options?.language,\n snapshot: options?.snapshot,\n envVars: options?.env,\n labels: options?.labels,\n autoStopInterval: options?.autoStopInterval,\n autoArchiveInterval: options?.autoArchiveInterval,\n autoDeleteInterval: options?.autoDeleteInterval,\n },\n { timeout: options?.timeout ?? 60 }\n );\n\n const workspaceBase = options?.workspaceBase ?? this.defaultWorkspaceBase;\n\n const sandbox = new DaytonaSandboxImpl(\n sdkSandbox.id,\n sdkSandbox,\n workspaceBase\n );\n\n if (options?.initialFiles) {\n await sandbox.fs.writeFiles(\n Object.entries(options.initialFiles).map(([path, content]) => ({\n path,\n content,\n }))\n );\n }\n\n return { sandbox };\n }\n\n async get(sandboxId: string): Promise<DaytonaSandbox> {\n try {\n const sdkSandbox = await this.client.get(sandboxId);\n return new DaytonaSandboxImpl(\n sdkSandbox.id,\n sdkSandbox,\n this.defaultWorkspaceBase\n );\n } catch {\n throw new SandboxNotFoundError(sandboxId);\n }\n }\n\n async destroy(sandboxId: string): Promise<void> {\n try {\n const sdkSandbox = await this.client.get(sandboxId);\n await this.client.delete(sdkSandbox);\n } catch {\n // Already gone\n }\n }\n\n async pause(_sandboxId: string, _ttlSeconds?: number): Promise<void> {\n throw new SandboxNotSupportedError(\"pause\");\n }\n\n async resume(_sandboxId: string): Promise<void> {\n // Daytona sandboxes don't support pause, so resume is a no-op\n }\n\n async fork(\n _sandboxId: string,\n _options?: DaytonaSandboxCreateOptions\n ): Promise<Sandbox> {\n throw new Error(\"Not implemented\");\n }\n\n async snapshot(\n _sandboxId: string,\n _options?: DaytonaSandboxCreateOptions\n ): Promise<SandboxSnapshot> {\n throw new SandboxNotSupportedError(\n \"snapshot (use Daytona's native snapshot API directly)\"\n );\n }\n\n async restore(\n _snapshot: SandboxSnapshot,\n _options?: DaytonaSandboxCreateOptions\n ): Promise<never> {\n throw new SandboxNotSupportedError(\n \"restore (use Daytona's native snapshot API directly)\"\n );\n }\n\n async deleteSnapshot(_snapshot: SandboxSnapshot): Promise<void> {\n throw new SandboxNotSupportedError(\n \"deleteSnapshot (use Daytona's native snapshot API directly)\"\n );\n }\n}\n\n// Re-exports\nexport { DaytonaSandboxFileSystem } from \"./filesystem\";\nexport type {\n DaytonaSandbox,\n DaytonaSandboxConfig,\n DaytonaSandboxCreateOptions,\n} from \"./types\";\n"]}
@@ -1,5 +1,5 @@
1
1
  import { proxyActivities } from '@temporalio/workflow';
2
- import { g as SandboxOps } from '../../../types-tQL9njTu.cjs';
2
+ import { g as SandboxOps } from '../../../types-yx0LzPGn.cjs';
3
3
  import '@temporalio/common';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  import { proxyActivities } from '@temporalio/workflow';
2
- import { g as SandboxOps } from '../../../types-tQL9njTu.js';
2
+ import { g as SandboxOps } from '../../../types-yx0LzPGn.js';
3
3
  import '@temporalio/common';
4
4
 
5
5
  /**
@@ -167,10 +167,18 @@ var E2bSandboxProvider = class {
167
167
  defaultTemplate;
168
168
  defaultWorkspaceBase;
169
169
  defaultTimeoutMs;
170
+ defaultAllowInternetAccess;
171
+ defaultNetwork;
172
+ defaultMetadata;
173
+ defaultLifecycle;
170
174
  constructor(config) {
171
175
  this.defaultTemplate = config?.template;
172
176
  this.defaultWorkspaceBase = config?.workspaceBase ?? "/home/user";
173
177
  this.defaultTimeoutMs = config?.timeoutMs;
178
+ this.defaultAllowInternetAccess = config?.allowInternetAccess;
179
+ this.defaultNetwork = config?.network;
180
+ this.defaultMetadata = config?.metadata;
181
+ this.defaultLifecycle = config?.lifecycle;
174
182
  }
175
183
  async create(options) {
176
184
  const template = options?.template ?? this.defaultTemplate;
@@ -217,7 +225,7 @@ var E2bSandboxProvider = class {
217
225
  async resume(sandboxId) {
218
226
  await codeInterpreter.Sandbox.connect(sandboxId);
219
227
  }
220
- async snapshot(sandboxId) {
228
+ async snapshot(sandboxId, _options) {
221
229
  const { snapshotId } = await codeInterpreter.Sandbox.createSnapshot(sandboxId);
222
230
  return {
223
231
  sandboxId,
@@ -226,14 +234,15 @@ var E2bSandboxProvider = class {
226
234
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
227
235
  };
228
236
  }
229
- async restore(snapshot) {
237
+ async restore(snapshot, options) {
230
238
  const data = snapshot.data;
231
239
  if (!data?.snapshotId) {
232
240
  throw new SandboxNotSupportedError(
233
241
  "restore: snapshot is missing snapshotId"
234
242
  );
235
243
  }
236
- const sdkSandbox = await codeInterpreter.Sandbox.create(data.snapshotId);
244
+ const sdkOpts = this.buildSdkCreateOpts(options);
245
+ const sdkSandbox = await codeInterpreter.Sandbox.create(data.snapshotId, sdkOpts);
237
246
  return new E2bSandboxImpl(
238
247
  sdkSandbox.sandboxId,
239
248
  sdkSandbox,
@@ -248,9 +257,10 @@ var E2bSandboxProvider = class {
248
257
  } catch {
249
258
  }
250
259
  }
251
- async fork(sandboxId) {
260
+ async fork(sandboxId, options) {
252
261
  const { snapshotId } = await codeInterpreter.Sandbox.createSnapshot(sandboxId);
253
- const sdkSandbox = await codeInterpreter.Sandbox.create(snapshotId);
262
+ const sdkOpts = this.buildSdkCreateOpts(options);
263
+ const sdkSandbox = await codeInterpreter.Sandbox.create(snapshotId, sdkOpts);
254
264
  return new E2bSandboxImpl(
255
265
  sdkSandbox.sandboxId,
256
266
  sdkSandbox,
@@ -258,19 +268,21 @@ var E2bSandboxProvider = class {
258
268
  );
259
269
  }
260
270
  buildSdkCreateOpts(options) {
271
+ const network = options?.network ?? this.defaultNetwork;
272
+ const lifecycle = options?.lifecycle ?? this.defaultLifecycle;
261
273
  return {
262
274
  envs: options?.env,
263
275
  timeoutMs: options?.timeoutMs ?? this.defaultTimeoutMs,
264
- metadata: options?.metadata,
265
- allowInternetAccess: options?.allowInternetAccess,
266
- network: options?.network ? {
267
- allowOut: options.network.allowOut,
268
- denyOut: options.network.denyOut,
269
- allowPublicTraffic: options.network.allowPublicTraffic
276
+ metadata: options?.metadata ?? this.defaultMetadata,
277
+ allowInternetAccess: options?.allowInternetAccess ?? this.defaultAllowInternetAccess,
278
+ network: network ? {
279
+ allowOut: network.allowOut,
280
+ denyOut: network.denyOut,
281
+ allowPublicTraffic: network.allowPublicTraffic
270
282
  } : void 0,
271
- lifecycle: options?.lifecycle ? {
272
- onTimeout: options.lifecycle.onTimeout,
273
- autoResume: options.lifecycle.autoResume
283
+ lifecycle: lifecycle ? {
284
+ onTimeout: lifecycle.onTimeout,
285
+ autoResume: lifecycle.autoResume
274
286
  } : void 0
275
287
  };
276
288
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/sandbox/types.ts","../../../../src/adapters/sandbox/e2b/filesystem.ts","../../../../src/adapters/sandbox/e2b/index.ts"],"names":["ApplicationFailure","posix","path","FileType","E2bSdkSandbox"],"mappings":"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","file":"index.cjs","sourcesContent":["// ============================================================================\n// Sandbox Filesystem\n// ============================================================================\n\nexport interface DirentEntry {\n name: string;\n isFile: boolean;\n isDirectory: boolean;\n isSymbolicLink: boolean;\n}\n\nexport interface FileStat {\n isFile: boolean;\n isDirectory: boolean;\n isSymbolicLink: boolean;\n size: number;\n mtime: Date;\n}\n\n// ============================================================================\n// Network & lifecycle\n// ============================================================================\n\nexport interface SandboxNetworkConfig {\n allowOut?: string[];\n denyOut?: string[];\n allowPublicTraffic?: boolean;\n}\n\nexport interface SandboxLifecycleConfig {\n onTimeout: \"kill\" | \"pause\";\n autoResume?: boolean;\n}\n\n/**\n * Provider-agnostic filesystem interface.\n *\n * Implementations that don't support a method should throw\n * {@link SandboxNotSupportedError}.\n */\nexport interface SandboxFileSystem {\n /** Base directory used when resolving relative paths. */\n readonly workspaceBase: string;\n readFile(path: string): Promise<string>;\n readFileBuffer(path: string): Promise<Uint8Array>;\n writeFile(path: string, content: string | Uint8Array): Promise<void>;\n appendFile(path: string, content: string | Uint8Array): Promise<void>;\n exists(path: string): Promise<boolean>;\n stat(path: string): Promise<FileStat>;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n readdir(path: string): Promise<string[]>;\n readdirWithFileTypes(path: string): Promise<DirentEntry[]>;\n rm(\n path: string,\n options?: { recursive?: boolean; force?: boolean }\n ): Promise<void>;\n cp(\n src: string,\n dest: string,\n options?: { recursive?: boolean }\n ): Promise<void>;\n mv(src: string, dest: string): Promise<void>;\n readlink(path: string): Promise<string>;\n resolvePath(base: string, path: string): string;\n}\n\n// ============================================================================\n// Execution\n// ============================================================================\n\nexport interface ExecOptions {\n timeout?: number;\n cwd?: string;\n env?: Record<string, string>;\n}\n\nexport interface ExecResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n}\n\n// ============================================================================\n// Capabilities\n// ============================================================================\n\nexport interface SandboxCapabilities {\n /** Sandbox supports filesystem operations */\n filesystem: boolean;\n /** Sandbox supports shell/command execution */\n execution: boolean;\n /** Sandbox state can be persisted and restored */\n persistence: boolean;\n}\n\n// ============================================================================\n// Sandbox\n// ============================================================================\n\nexport interface Sandbox {\n readonly id: string;\n readonly capabilities: SandboxCapabilities;\n readonly fs: SandboxFileSystem;\n\n exec(command: string, options?: ExecOptions): Promise<ExecResult>;\n destroy(): Promise<void>;\n}\n\n// ============================================================================\n// Snapshots\n// ============================================================================\n\nexport interface SandboxSnapshot {\n sandboxId: string;\n providerId: string;\n /** Provider-specific serialised state */\n data: unknown;\n createdAt: string;\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport interface SandboxCreateOptions {\n /** Preferred sandbox ID (provider may ignore) */\n id?: string;\n /** Seed the filesystem with these files */\n initialFiles?: Record<string, string | Uint8Array>;\n /** Environment variables available inside the sandbox */\n env?: Record<string, string>;\n /** Key-value metadata surfaced via provider list/query APIs */\n metadata?: Record<string, string>;\n /** Sandbox idle timeout in milliseconds */\n timeoutMs?: number;\n /** Enable or disable outbound internet access */\n allowInternetAccess?: boolean;\n /** Outbound network allow/deny rules */\n network?: SandboxNetworkConfig;\n /** Sandbox timeout behaviour */\n lifecycle?: SandboxLifecycleConfig;\n}\n\nexport interface SandboxCreateResult {\n sandbox: Sandbox;\n}\n\nexport interface SandboxProvider<\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TSandbox extends Sandbox = Sandbox,\n> {\n readonly id: string;\n readonly capabilities: SandboxCapabilities;\n\n create(options?: TOptions): Promise<SandboxCreateResult>;\n get(sandboxId: string): Promise<TSandbox>;\n destroy(sandboxId: string): Promise<void>;\n pause(sandboxId: string, ttlSeconds?: number): Promise<void>;\n /** Resume a paused sandbox. No-op if already running. */\n resume(sandboxId: string): Promise<void>;\n snapshot(sandboxId: string): Promise<SandboxSnapshot>;\n restore(snapshot: SandboxSnapshot): Promise<Sandbox>;\n /** Delete a previously captured snapshot. No-op if already deleted. */\n deleteSnapshot(snapshot: SandboxSnapshot): Promise<void>;\n fork(sandboxId: string): Promise<Sandbox>;\n}\n\n// ============================================================================\n// SandboxOps — workflow-side activity interface (like ThreadOps)\n// ============================================================================\n\nexport interface SandboxOps<\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TCtx = unknown,\n> {\n createSandbox(\n options?: TOptions,\n ctx?: TCtx\n ): Promise<{ sandboxId: string } | null>;\n destroySandbox(sandboxId: string): Promise<void>;\n pauseSandbox(sandboxId: string): Promise<void>;\n /** Resume a paused sandbox. No-op if already running. */\n resumeSandbox(sandboxId: string): Promise<void>;\n snapshotSandbox(sandboxId: string): Promise<SandboxSnapshot>;\n /** Create a fresh sandbox from a previously captured snapshot. */\n restoreSandbox(snapshot: SandboxSnapshot): Promise<string>;\n /** Delete a previously captured snapshot. No-op if already deleted. */\n deleteSandboxSnapshot(snapshot: SandboxSnapshot): Promise<void>;\n forkSandbox(sandboxId: string): Promise<string>;\n}\n\n/**\n * Maps generic {@link SandboxOps} method names to adapter-prefixed names.\n *\n * @example\n * ```typescript\n * type InMemOps = PrefixedSandboxOps<\"inMemory\">;\n * // → { inMemoryCreateSandbox, inMemoryDestroySandbox, inMemorySnapshotSandbox }\n * ```\n */\nexport type PrefixedSandboxOps<\n TPrefix extends string,\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TCtx = unknown,\n> = {\n [K in keyof SandboxOps<\n TOptions,\n TCtx\n > as `${TPrefix}${Capitalize<K & string>}`]: SandboxOps<TOptions, TCtx>[K];\n};\n\n// ============================================================================\n// Errors\n// ============================================================================\n\nimport { ApplicationFailure } from \"@temporalio/common\";\n\nexport class SandboxNotSupportedError extends ApplicationFailure {\n constructor(operation: string) {\n super(\n `Sandbox does not support: ${operation}`,\n \"SandboxNotSupportedError\",\n true\n );\n }\n}\n\nexport class SandboxNotFoundError extends ApplicationFailure {\n constructor(sandboxId: string) {\n super(`Sandbox not found: ${sandboxId}`, \"SandboxNotFoundError\", true);\n }\n}\n","import { FileType, type Sandbox as E2bSdkSandbox } from \"@e2b/code-interpreter\";\nimport type {\n SandboxFileSystem,\n DirentEntry,\n FileStat,\n} from \"../../../lib/sandbox/types\";\nimport { posix } from \"node:path\";\n\nfunction toArrayBuffer(u8: Uint8Array): ArrayBuffer {\n return u8.buffer.slice(\n u8.byteOffset,\n u8.byteOffset + u8.byteLength\n ) as ArrayBuffer;\n}\n\n/**\n * {@link SandboxFileSystem} backed by an E2B SDK sandbox.\n *\n * Maps zeitlich's filesystem interface to E2B's `sandbox.files` and\n * `sandbox.commands` APIs. Operations that have no direct E2B equivalent\n * (e.g. `appendFile`, `cp`) are composed from primitives.\n */\nexport class E2bSandboxFileSystem implements SandboxFileSystem {\n readonly workspaceBase: string;\n\n constructor(\n private sandbox: E2bSdkSandbox,\n workspaceBase = \"/home/user\"\n ) {\n this.workspaceBase = posix.resolve(\"/\", workspaceBase);\n }\n\n private normalisePath(path: string): string {\n return posix.resolve(this.workspaceBase, path);\n }\n\n async readFile(path: string): Promise<string> {\n return this.sandbox.files.read(this.normalisePath(path));\n }\n\n async readFileBuffer(path: string): Promise<Uint8Array> {\n return this.sandbox.files.read(this.normalisePath(path), {\n format: \"bytes\",\n });\n }\n\n async writeFile(path: string, content: string | Uint8Array): Promise<void> {\n const norm = this.normalisePath(path);\n if (typeof content === \"string\") {\n await this.sandbox.files.write(norm, content);\n } else {\n await this.sandbox.files.write(norm, toArrayBuffer(content));\n }\n }\n\n async appendFile(path: string, content: string | Uint8Array): Promise<void> {\n const norm = this.normalisePath(path);\n let existing = \"\";\n try {\n existing = await this.sandbox.files.read(norm);\n } catch {\n // file doesn't exist yet — write from scratch\n }\n const addition =\n typeof content === \"string\" ? content : new TextDecoder().decode(content);\n await this.sandbox.files.write(norm, existing + addition);\n }\n\n async exists(path: string): Promise<boolean> {\n return this.sandbox.files.exists(this.normalisePath(path));\n }\n\n async stat(path: string): Promise<FileStat> {\n const norm = this.normalisePath(path);\n const info = await this.sandbox.files.getInfo(norm);\n const isSymlink = !!info.symlinkTarget;\n return {\n isFile: isSymlink ? false : info.type === FileType.FILE,\n isDirectory: isSymlink ? false : info.type === FileType.DIR,\n isSymbolicLink: isSymlink,\n size: info.size,\n mtime: info.modifiedTime ?? new Date(0),\n };\n }\n\n async mkdir(path: string, _options?: { recursive?: boolean }): Promise<void> {\n await this.sandbox.files.makeDir(this.normalisePath(path));\n }\n\n async readdir(path: string): Promise<string[]> {\n const entries = await this.sandbox.files.list(this.normalisePath(path));\n return entries.map((e) => posix.basename(e.path));\n }\n\n async readdirWithFileTypes(path: string): Promise<DirentEntry[]> {\n const entries = await this.sandbox.files.list(this.normalisePath(path));\n return entries.map((e) => {\n const isSymlink = !!e.symlinkTarget;\n return {\n name: posix.basename(e.path),\n isFile: isSymlink ? false : e.type === FileType.FILE,\n isDirectory: isSymlink ? false : e.type === FileType.DIR,\n isSymbolicLink: isSymlink,\n };\n });\n }\n\n async rm(\n path: string,\n options?: { recursive?: boolean; force?: boolean }\n ): Promise<void> {\n const norm = this.normalisePath(path);\n try {\n await this.sandbox.files.remove(norm);\n } catch (err) {\n if (!options?.force) throw err;\n }\n }\n\n async cp(\n src: string,\n dest: string,\n _options?: { recursive?: boolean }\n ): Promise<void> {\n const normSrc = this.normalisePath(src);\n const normDest = this.normalisePath(dest);\n await this.sandbox.commands.run(`cp -r \"${normSrc}\" \"${normDest}\"`);\n }\n\n async mv(src: string, dest: string): Promise<void> {\n const normSrc = this.normalisePath(src);\n const normDest = this.normalisePath(dest);\n await this.sandbox.files.rename(normSrc, normDest);\n }\n\n async readlink(path: string): Promise<string> {\n const norm = this.normalisePath(path);\n const info = await this.sandbox.files.getInfo(norm);\n if (!info.symlinkTarget) {\n throw new Error(`EINVAL: invalid argument, readlink '${path}'`);\n }\n return info.symlinkTarget;\n }\n\n resolvePath(base: string, path: string): string {\n return posix.resolve(this.normalisePath(base), path);\n }\n}\n","import { Sandbox as E2bSdkSandbox } from \"@e2b/code-interpreter\";\nimport type {\n Sandbox,\n SandboxCapabilities,\n SandboxCreateResult,\n SandboxProvider,\n SandboxSnapshot,\n ExecOptions,\n ExecResult,\n} from \"../../../lib/sandbox/types\";\nimport {\n SandboxNotFoundError,\n SandboxNotSupportedError,\n} from \"../../../lib/sandbox/types\";\nimport { E2bSandboxFileSystem } from \"./filesystem\";\nimport type {\n E2bSandbox,\n E2bSandboxConfig,\n E2bSandboxCreateOptions,\n} from \"./types\";\n\n// ============================================================================\n// E2bSandbox\n// ============================================================================\n\nclass E2bSandboxImpl implements Sandbox {\n readonly capabilities: SandboxCapabilities = {\n filesystem: true,\n execution: true,\n persistence: true,\n };\n\n readonly fs: E2bSandboxFileSystem;\n\n constructor(\n readonly id: string,\n private sdkSandbox: E2bSdkSandbox,\n workspaceBase = \"/home/user\"\n ) {\n this.fs = new E2bSandboxFileSystem(sdkSandbox, workspaceBase);\n }\n\n async exec(command: string, options?: ExecOptions): Promise<ExecResult> {\n const result = await this.sdkSandbox.commands.run(command, {\n cwd: options?.cwd,\n envs: options?.env,\n timeoutMs: options?.timeout,\n });\n return {\n exitCode: result.exitCode,\n stdout: result.stdout,\n stderr: result.stderr,\n };\n }\n\n async destroy(): Promise<void> {\n await this.sdkSandbox.kill();\n }\n}\n\n// ============================================================================\n// E2bSandboxProvider\n// ============================================================================\n\nexport class E2bSandboxProvider implements SandboxProvider<\n E2bSandboxCreateOptions,\n E2bSandbox\n> {\n readonly id = \"e2b\";\n readonly capabilities: SandboxCapabilities = {\n filesystem: true,\n execution: true,\n persistence: true,\n };\n\n private readonly defaultTemplate?: string;\n private readonly defaultWorkspaceBase: string;\n private readonly defaultTimeoutMs?: number;\n\n constructor(config?: E2bSandboxConfig) {\n this.defaultTemplate = config?.template;\n this.defaultWorkspaceBase = config?.workspaceBase ?? \"/home/user\";\n this.defaultTimeoutMs = config?.timeoutMs;\n }\n\n async create(\n options?: E2bSandboxCreateOptions\n ): Promise<SandboxCreateResult> {\n const template = options?.template ?? this.defaultTemplate;\n const workspaceBase = this.defaultWorkspaceBase;\n const createOpts = this.buildSdkCreateOpts(options);\n\n const sdkSandbox = template\n ? await E2bSdkSandbox.create(template, createOpts)\n : await E2bSdkSandbox.create(createOpts);\n\n const sandbox = new E2bSandboxImpl(\n sdkSandbox.sandboxId,\n sdkSandbox,\n workspaceBase\n );\n\n if (options?.initialFiles) {\n await Promise.all(\n Object.entries(options.initialFiles).map(([path, content]) =>\n sandbox.fs.writeFile(path, content)\n )\n );\n }\n\n return { sandbox };\n }\n\n async get(sandboxId: string): Promise<E2bSandbox> {\n try {\n const sdkSandbox = await E2bSdkSandbox.connect(sandboxId);\n return new E2bSandboxImpl(\n sandboxId,\n sdkSandbox,\n this.defaultWorkspaceBase\n );\n } catch {\n throw new SandboxNotFoundError(sandboxId);\n }\n }\n\n async destroy(sandboxId: string): Promise<void> {\n try {\n const sdkSandbox = await E2bSdkSandbox.connect(sandboxId);\n await sdkSandbox.kill();\n } catch {\n // Already gone or not found\n }\n }\n\n async pause(sandboxId: string, _ttlSeconds?: number): Promise<void> {\n const sdkSandbox = await E2bSdkSandbox.connect(sandboxId);\n await sdkSandbox.pause();\n }\n\n async resume(sandboxId: string): Promise<void> {\n await E2bSdkSandbox.connect(sandboxId);\n }\n\n async snapshot(sandboxId: string): Promise<SandboxSnapshot> {\n const { snapshotId } = await E2bSdkSandbox.createSnapshot(sandboxId);\n return {\n sandboxId,\n providerId: this.id,\n data: { snapshotId },\n createdAt: new Date().toISOString(),\n };\n }\n\n async restore(snapshot: SandboxSnapshot): Promise<Sandbox> {\n const data = snapshot.data as { snapshotId?: string } | null;\n if (!data?.snapshotId) {\n throw new SandboxNotSupportedError(\n \"restore: snapshot is missing snapshotId\"\n );\n }\n const sdkSandbox = await E2bSdkSandbox.create(data.snapshotId);\n return new E2bSandboxImpl(\n sdkSandbox.sandboxId,\n sdkSandbox,\n this.defaultWorkspaceBase\n );\n }\n\n async deleteSnapshot(snapshot: SandboxSnapshot): Promise<void> {\n const data = snapshot.data as { snapshotId?: string } | null;\n if (!data?.snapshotId) return;\n try {\n await E2bSdkSandbox.deleteSnapshot(data.snapshotId);\n } catch {\n // Already deleted or no longer accessible — treat as no-op.\n }\n }\n\n async fork(sandboxId: string): Promise<Sandbox> {\n const { snapshotId } = await E2bSdkSandbox.createSnapshot(sandboxId);\n const sdkSandbox = await E2bSdkSandbox.create(snapshotId);\n return new E2bSandboxImpl(\n sdkSandbox.sandboxId,\n sdkSandbox,\n this.defaultWorkspaceBase\n );\n }\n\n private buildSdkCreateOpts(options?: E2bSandboxCreateOptions) {\n return {\n envs: options?.env,\n timeoutMs: options?.timeoutMs ?? this.defaultTimeoutMs,\n metadata: options?.metadata,\n allowInternetAccess: options?.allowInternetAccess,\n network: options?.network\n ? {\n allowOut: options.network.allowOut,\n denyOut: options.network.denyOut,\n allowPublicTraffic: options.network.allowPublicTraffic,\n }\n : undefined,\n lifecycle: options?.lifecycle\n ? {\n onTimeout: options.lifecycle.onTimeout,\n autoResume: options.lifecycle.autoResume,\n }\n : undefined,\n };\n }\n}\n\n// Re-exports\nexport { E2bSandboxFileSystem } from \"./filesystem\";\nexport type {\n E2bSandbox,\n E2bSandboxConfig,\n E2bSandboxCreateOptions,\n} from \"./types\";\n"]}
1
+ {"version":3,"sources":["../../../../src/lib/sandbox/types.ts","../../../../src/adapters/sandbox/e2b/filesystem.ts","../../../../src/adapters/sandbox/e2b/index.ts"],"names":["ApplicationFailure","posix","path","FileType","E2bSdkSandbox"],"mappings":"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","file":"index.cjs","sourcesContent":["// ============================================================================\n// Sandbox Filesystem\n// ============================================================================\n\nexport interface DirentEntry {\n name: string;\n isFile: boolean;\n isDirectory: boolean;\n isSymbolicLink: boolean;\n}\n\nexport interface FileStat {\n isFile: boolean;\n isDirectory: boolean;\n isSymbolicLink: boolean;\n size: number;\n mtime: Date;\n}\n\n// ============================================================================\n// Network & lifecycle\n// ============================================================================\n\nexport interface SandboxNetworkConfig {\n allowOut?: string[];\n denyOut?: string[];\n allowPublicTraffic?: boolean;\n}\n\nexport interface SandboxLifecycleConfig {\n onTimeout: \"kill\" | \"pause\";\n autoResume?: boolean;\n}\n\n/**\n * Provider-agnostic filesystem interface.\n *\n * Implementations that don't support a method should throw\n * {@link SandboxNotSupportedError}.\n */\nexport interface SandboxFileSystem {\n /** Base directory used when resolving relative paths. */\n readonly workspaceBase: string;\n readFile(path: string): Promise<string>;\n readFileBuffer(path: string): Promise<Uint8Array>;\n writeFile(path: string, content: string | Uint8Array): Promise<void>;\n appendFile(path: string, content: string | Uint8Array): Promise<void>;\n exists(path: string): Promise<boolean>;\n stat(path: string): Promise<FileStat>;\n mkdir(path: string, options?: { recursive?: boolean }): Promise<void>;\n readdir(path: string): Promise<string[]>;\n readdirWithFileTypes(path: string): Promise<DirentEntry[]>;\n rm(\n path: string,\n options?: { recursive?: boolean; force?: boolean }\n ): Promise<void>;\n cp(\n src: string,\n dest: string,\n options?: { recursive?: boolean }\n ): Promise<void>;\n mv(src: string, dest: string): Promise<void>;\n readlink(path: string): Promise<string>;\n resolvePath(base: string, path: string): string;\n}\n\n// ============================================================================\n// Execution\n// ============================================================================\n\nexport interface ExecOptions {\n timeout?: number;\n cwd?: string;\n env?: Record<string, string>;\n}\n\nexport interface ExecResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n}\n\n// ============================================================================\n// Capabilities\n// ============================================================================\n\nexport interface SandboxCapabilities {\n /** Sandbox supports filesystem operations */\n filesystem: boolean;\n /** Sandbox supports shell/command execution */\n execution: boolean;\n /** Sandbox state can be persisted and restored */\n persistence: boolean;\n}\n\n// ============================================================================\n// Sandbox\n// ============================================================================\n\nexport interface Sandbox {\n readonly id: string;\n readonly capabilities: SandboxCapabilities;\n readonly fs: SandboxFileSystem;\n\n exec(command: string, options?: ExecOptions): Promise<ExecResult>;\n destroy(): Promise<void>;\n}\n\n// ============================================================================\n// Snapshots\n// ============================================================================\n\nexport interface SandboxSnapshot {\n sandboxId: string;\n providerId: string;\n /** Provider-specific serialised state */\n data: unknown;\n createdAt: string;\n}\n\n// ============================================================================\n// Provider\n// ============================================================================\n\nexport interface SandboxCreateOptions {\n /** Preferred sandbox ID (provider may ignore) */\n id?: string;\n /** Seed the filesystem with these files */\n initialFiles?: Record<string, string | Uint8Array>;\n /** Environment variables available inside the sandbox */\n env?: Record<string, string>;\n /** Key-value metadata surfaced via provider list/query APIs */\n metadata?: Record<string, string>;\n /** Sandbox idle timeout in milliseconds */\n timeoutMs?: number;\n /** Enable or disable outbound internet access */\n allowInternetAccess?: boolean;\n /** Outbound network allow/deny rules */\n network?: SandboxNetworkConfig;\n /** Sandbox timeout behaviour */\n lifecycle?: SandboxLifecycleConfig;\n}\n\nexport interface SandboxCreateResult {\n sandbox: Sandbox;\n}\n\nexport interface SandboxProvider<\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TSandbox extends Sandbox = Sandbox,\n> {\n readonly id: string;\n readonly capabilities: SandboxCapabilities;\n\n create(options?: TOptions): Promise<SandboxCreateResult>;\n get(sandboxId: string): Promise<TSandbox>;\n destroy(sandboxId: string): Promise<void>;\n pause(sandboxId: string, ttlSeconds?: number): Promise<void>;\n /** Resume a paused sandbox. No-op if already running. */\n resume(sandboxId: string): Promise<void>;\n /**\n * Capture a snapshot of a running sandbox. `options` is a per-call override\n * merged on top of the provider's static defaults.\n */\n snapshot(sandboxId: string, options?: TOptions): Promise<SandboxSnapshot>;\n /**\n * Restore a sandbox from a snapshot. `options` is a per-call override\n * merged on top of the provider's static defaults.\n */\n restore(snapshot: SandboxSnapshot, options?: TOptions): Promise<Sandbox>;\n /** Delete a previously captured snapshot. No-op if already deleted. */\n deleteSnapshot(snapshot: SandboxSnapshot): Promise<void>;\n /**\n * Fork a running sandbox into a new one. `options` is a per-call override\n * merged on top of the provider's static defaults.\n */\n fork(sandboxId: string, options?: TOptions): Promise<Sandbox>;\n}\n\n// ============================================================================\n// SandboxOps — workflow-side activity interface (like ThreadOps)\n// ============================================================================\n\nexport interface SandboxOps<\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TCtx = unknown,\n> {\n createSandbox(\n options?: TOptions,\n ctx?: TCtx\n ): Promise<{ sandboxId: string } | null>;\n destroySandbox(sandboxId: string): Promise<void>;\n pauseSandbox(sandboxId: string): Promise<void>;\n /** Resume a paused sandbox. No-op if already running. */\n resumeSandbox(sandboxId: string): Promise<void>;\n /** Capture a snapshot. `options` is a per-call override merged on top of provider defaults. */\n snapshotSandbox(\n sandboxId: string,\n options?: TOptions\n ): Promise<SandboxSnapshot>;\n /** Create a fresh sandbox from a snapshot. `options` is a per-call override merged on top of provider defaults. */\n restoreSandbox(\n snapshot: SandboxSnapshot,\n options?: TOptions\n ): Promise<string>;\n /** Delete a previously captured snapshot. No-op if already deleted. */\n deleteSandboxSnapshot(snapshot: SandboxSnapshot): Promise<void>;\n /** Fork a running sandbox. `options` is a per-call override merged on top of provider defaults. */\n forkSandbox(sandboxId: string, options?: TOptions): Promise<string>;\n}\n\n/**\n * Maps generic {@link SandboxOps} method names to adapter-prefixed names.\n *\n * @example\n * ```typescript\n * type InMemOps = PrefixedSandboxOps<\"inMemory\">;\n * // → { inMemoryCreateSandbox, inMemoryDestroySandbox, inMemorySnapshotSandbox }\n * ```\n */\nexport type PrefixedSandboxOps<\n TPrefix extends string,\n TOptions extends SandboxCreateOptions = SandboxCreateOptions,\n TCtx = unknown,\n> = {\n [K in keyof SandboxOps<\n TOptions,\n TCtx\n > as `${TPrefix}${Capitalize<K & string>}`]: SandboxOps<TOptions, TCtx>[K];\n};\n\n// ============================================================================\n// Errors\n// ============================================================================\n\nimport { ApplicationFailure } from \"@temporalio/common\";\n\nexport class SandboxNotSupportedError extends ApplicationFailure {\n constructor(operation: string) {\n super(\n `Sandbox does not support: ${operation}`,\n \"SandboxNotSupportedError\",\n true\n );\n }\n}\n\nexport class SandboxNotFoundError extends ApplicationFailure {\n constructor(sandboxId: string) {\n super(`Sandbox not found: ${sandboxId}`, \"SandboxNotFoundError\", true);\n }\n}\n","import { FileType, type Sandbox as E2bSdkSandbox } from \"@e2b/code-interpreter\";\nimport type {\n SandboxFileSystem,\n DirentEntry,\n FileStat,\n} from \"../../../lib/sandbox/types\";\nimport { posix } from \"node:path\";\n\nfunction toArrayBuffer(u8: Uint8Array): ArrayBuffer {\n return u8.buffer.slice(\n u8.byteOffset,\n u8.byteOffset + u8.byteLength\n ) as ArrayBuffer;\n}\n\n/**\n * {@link SandboxFileSystem} backed by an E2B SDK sandbox.\n *\n * Maps zeitlich's filesystem interface to E2B's `sandbox.files` and\n * `sandbox.commands` APIs. Operations that have no direct E2B equivalent\n * (e.g. `appendFile`, `cp`) are composed from primitives.\n */\nexport class E2bSandboxFileSystem implements SandboxFileSystem {\n readonly workspaceBase: string;\n\n constructor(\n private sandbox: E2bSdkSandbox,\n workspaceBase = \"/home/user\"\n ) {\n this.workspaceBase = posix.resolve(\"/\", workspaceBase);\n }\n\n private normalisePath(path: string): string {\n return posix.resolve(this.workspaceBase, path);\n }\n\n async readFile(path: string): Promise<string> {\n return this.sandbox.files.read(this.normalisePath(path));\n }\n\n async readFileBuffer(path: string): Promise<Uint8Array> {\n return this.sandbox.files.read(this.normalisePath(path), {\n format: \"bytes\",\n });\n }\n\n async writeFile(path: string, content: string | Uint8Array): Promise<void> {\n const norm = this.normalisePath(path);\n if (typeof content === \"string\") {\n await this.sandbox.files.write(norm, content);\n } else {\n await this.sandbox.files.write(norm, toArrayBuffer(content));\n }\n }\n\n async appendFile(path: string, content: string | Uint8Array): Promise<void> {\n const norm = this.normalisePath(path);\n let existing = \"\";\n try {\n existing = await this.sandbox.files.read(norm);\n } catch {\n // file doesn't exist yet — write from scratch\n }\n const addition =\n typeof content === \"string\" ? content : new TextDecoder().decode(content);\n await this.sandbox.files.write(norm, existing + addition);\n }\n\n async exists(path: string): Promise<boolean> {\n return this.sandbox.files.exists(this.normalisePath(path));\n }\n\n async stat(path: string): Promise<FileStat> {\n const norm = this.normalisePath(path);\n const info = await this.sandbox.files.getInfo(norm);\n const isSymlink = !!info.symlinkTarget;\n return {\n isFile: isSymlink ? false : info.type === FileType.FILE,\n isDirectory: isSymlink ? false : info.type === FileType.DIR,\n isSymbolicLink: isSymlink,\n size: info.size,\n mtime: info.modifiedTime ?? new Date(0),\n };\n }\n\n async mkdir(path: string, _options?: { recursive?: boolean }): Promise<void> {\n await this.sandbox.files.makeDir(this.normalisePath(path));\n }\n\n async readdir(path: string): Promise<string[]> {\n const entries = await this.sandbox.files.list(this.normalisePath(path));\n return entries.map((e) => posix.basename(e.path));\n }\n\n async readdirWithFileTypes(path: string): Promise<DirentEntry[]> {\n const entries = await this.sandbox.files.list(this.normalisePath(path));\n return entries.map((e) => {\n const isSymlink = !!e.symlinkTarget;\n return {\n name: posix.basename(e.path),\n isFile: isSymlink ? false : e.type === FileType.FILE,\n isDirectory: isSymlink ? false : e.type === FileType.DIR,\n isSymbolicLink: isSymlink,\n };\n });\n }\n\n async rm(\n path: string,\n options?: { recursive?: boolean; force?: boolean }\n ): Promise<void> {\n const norm = this.normalisePath(path);\n try {\n await this.sandbox.files.remove(norm);\n } catch (err) {\n if (!options?.force) throw err;\n }\n }\n\n async cp(\n src: string,\n dest: string,\n _options?: { recursive?: boolean }\n ): Promise<void> {\n const normSrc = this.normalisePath(src);\n const normDest = this.normalisePath(dest);\n await this.sandbox.commands.run(`cp -r \"${normSrc}\" \"${normDest}\"`);\n }\n\n async mv(src: string, dest: string): Promise<void> {\n const normSrc = this.normalisePath(src);\n const normDest = this.normalisePath(dest);\n await this.sandbox.files.rename(normSrc, normDest);\n }\n\n async readlink(path: string): Promise<string> {\n const norm = this.normalisePath(path);\n const info = await this.sandbox.files.getInfo(norm);\n if (!info.symlinkTarget) {\n throw new Error(`EINVAL: invalid argument, readlink '${path}'`);\n }\n return info.symlinkTarget;\n }\n\n resolvePath(base: string, path: string): string {\n return posix.resolve(this.normalisePath(base), path);\n }\n}\n","import { Sandbox as E2bSdkSandbox } from \"@e2b/code-interpreter\";\nimport type {\n Sandbox,\n SandboxCapabilities,\n SandboxCreateResult,\n SandboxProvider,\n SandboxSnapshot,\n ExecOptions,\n ExecResult,\n} from \"../../../lib/sandbox/types\";\nimport {\n SandboxNotFoundError,\n SandboxNotSupportedError,\n} from \"../../../lib/sandbox/types\";\nimport { E2bSandboxFileSystem } from \"./filesystem\";\nimport type {\n E2bSandbox,\n E2bSandboxConfig,\n E2bSandboxCreateOptions,\n} from \"./types\";\n\n// ============================================================================\n// E2bSandbox\n// ============================================================================\n\nclass E2bSandboxImpl implements Sandbox {\n readonly capabilities: SandboxCapabilities = {\n filesystem: true,\n execution: true,\n persistence: true,\n };\n\n readonly fs: E2bSandboxFileSystem;\n\n constructor(\n readonly id: string,\n private sdkSandbox: E2bSdkSandbox,\n workspaceBase = \"/home/user\"\n ) {\n this.fs = new E2bSandboxFileSystem(sdkSandbox, workspaceBase);\n }\n\n async exec(command: string, options?: ExecOptions): Promise<ExecResult> {\n const result = await this.sdkSandbox.commands.run(command, {\n cwd: options?.cwd,\n envs: options?.env,\n timeoutMs: options?.timeout,\n });\n return {\n exitCode: result.exitCode,\n stdout: result.stdout,\n stderr: result.stderr,\n };\n }\n\n async destroy(): Promise<void> {\n await this.sdkSandbox.kill();\n }\n}\n\n// ============================================================================\n// E2bSandboxProvider\n// ============================================================================\n\nexport class E2bSandboxProvider implements SandboxProvider<\n E2bSandboxCreateOptions,\n E2bSandbox\n> {\n readonly id = \"e2b\";\n readonly capabilities: SandboxCapabilities = {\n filesystem: true,\n execution: true,\n persistence: true,\n };\n\n private readonly defaultTemplate?: string;\n private readonly defaultWorkspaceBase: string;\n private readonly defaultTimeoutMs?: number;\n private readonly defaultAllowInternetAccess?: boolean;\n private readonly defaultNetwork?: E2bSandboxConfig[\"network\"];\n private readonly defaultMetadata?: E2bSandboxConfig[\"metadata\"];\n private readonly defaultLifecycle?: E2bSandboxConfig[\"lifecycle\"];\n\n constructor(config?: E2bSandboxConfig) {\n this.defaultTemplate = config?.template;\n this.defaultWorkspaceBase = config?.workspaceBase ?? \"/home/user\";\n this.defaultTimeoutMs = config?.timeoutMs;\n this.defaultAllowInternetAccess = config?.allowInternetAccess;\n this.defaultNetwork = config?.network;\n this.defaultMetadata = config?.metadata;\n this.defaultLifecycle = config?.lifecycle;\n }\n\n async create(\n options?: E2bSandboxCreateOptions\n ): Promise<SandboxCreateResult> {\n const template = options?.template ?? this.defaultTemplate;\n const workspaceBase = this.defaultWorkspaceBase;\n const createOpts = this.buildSdkCreateOpts(options);\n\n const sdkSandbox = template\n ? await E2bSdkSandbox.create(template, createOpts)\n : await E2bSdkSandbox.create(createOpts);\n\n const sandbox = new E2bSandboxImpl(\n sdkSandbox.sandboxId,\n sdkSandbox,\n workspaceBase\n );\n\n if (options?.initialFiles) {\n await Promise.all(\n Object.entries(options.initialFiles).map(([path, content]) =>\n sandbox.fs.writeFile(path, content)\n )\n );\n }\n\n return { sandbox };\n }\n\n async get(sandboxId: string): Promise<E2bSandbox> {\n try {\n const sdkSandbox = await E2bSdkSandbox.connect(sandboxId);\n return new E2bSandboxImpl(\n sandboxId,\n sdkSandbox,\n this.defaultWorkspaceBase\n );\n } catch {\n throw new SandboxNotFoundError(sandboxId);\n }\n }\n\n async destroy(sandboxId: string): Promise<void> {\n try {\n const sdkSandbox = await E2bSdkSandbox.connect(sandboxId);\n await sdkSandbox.kill();\n } catch {\n // Already gone or not found\n }\n }\n\n async pause(sandboxId: string, _ttlSeconds?: number): Promise<void> {\n const sdkSandbox = await E2bSdkSandbox.connect(sandboxId);\n await sdkSandbox.pause();\n }\n\n async resume(sandboxId: string): Promise<void> {\n await E2bSdkSandbox.connect(sandboxId);\n }\n\n async snapshot(\n sandboxId: string,\n _options?: E2bSandboxCreateOptions\n ): Promise<SandboxSnapshot> {\n const { snapshotId } = await E2bSdkSandbox.createSnapshot(sandboxId);\n return {\n sandboxId,\n providerId: this.id,\n data: { snapshotId },\n createdAt: new Date().toISOString(),\n };\n }\n\n async restore(\n snapshot: SandboxSnapshot,\n options?: E2bSandboxCreateOptions\n ): Promise<Sandbox> {\n const data = snapshot.data as { snapshotId?: string } | null;\n if (!data?.snapshotId) {\n throw new SandboxNotSupportedError(\n \"restore: snapshot is missing snapshotId\"\n );\n }\n const sdkOpts = this.buildSdkCreateOpts(options);\n const sdkSandbox = await E2bSdkSandbox.create(data.snapshotId, sdkOpts);\n return new E2bSandboxImpl(\n sdkSandbox.sandboxId,\n sdkSandbox,\n this.defaultWorkspaceBase\n );\n }\n\n async deleteSnapshot(snapshot: SandboxSnapshot): Promise<void> {\n const data = snapshot.data as { snapshotId?: string } | null;\n if (!data?.snapshotId) return;\n try {\n await E2bSdkSandbox.deleteSnapshot(data.snapshotId);\n } catch {\n // Already deleted or no longer accessible — treat as no-op.\n }\n }\n\n async fork(\n sandboxId: string,\n options?: E2bSandboxCreateOptions\n ): Promise<Sandbox> {\n const { snapshotId } = await E2bSdkSandbox.createSnapshot(sandboxId);\n const sdkOpts = this.buildSdkCreateOpts(options);\n const sdkSandbox = await E2bSdkSandbox.create(snapshotId, sdkOpts);\n return new E2bSandboxImpl(\n sdkSandbox.sandboxId,\n sdkSandbox,\n this.defaultWorkspaceBase\n );\n }\n\n private buildSdkCreateOpts(options?: E2bSandboxCreateOptions) {\n const network = options?.network ?? this.defaultNetwork;\n const lifecycle = options?.lifecycle ?? this.defaultLifecycle;\n return {\n envs: options?.env,\n timeoutMs: options?.timeoutMs ?? this.defaultTimeoutMs,\n metadata: options?.metadata ?? this.defaultMetadata,\n allowInternetAccess:\n options?.allowInternetAccess ?? this.defaultAllowInternetAccess,\n network: network\n ? {\n allowOut: network.allowOut,\n denyOut: network.denyOut,\n allowPublicTraffic: network.allowPublicTraffic,\n }\n : undefined,\n lifecycle: lifecycle\n ? {\n onTimeout: lifecycle.onTimeout,\n autoResume: lifecycle.autoResume,\n }\n : undefined,\n };\n }\n}\n\n// Re-exports\nexport { E2bSandboxFileSystem } from \"./filesystem\";\nexport type {\n E2bSandbox,\n E2bSandboxConfig,\n E2bSandboxCreateOptions,\n} from \"./types\";\n"]}
@@ -1,4 +1,4 @@
1
- import { a as SandboxFileSystem, F as FileStat, D as DirentEntry, S as Sandbox$1, d as SandboxCreateOptions, b as SandboxProvider, c as SandboxCapabilities, e as SandboxCreateResult, f as SandboxSnapshot } from '../../../types-tQL9njTu.cjs';
1
+ import { a as SandboxFileSystem, F as FileStat, D as DirentEntry, S as Sandbox$1, d as SandboxCreateOptions, b as SandboxProvider, c as SandboxCapabilities, e as SandboxCreateResult, f as SandboxSnapshot } from '../../../types-yx0LzPGn.cjs';
2
2
  import { Sandbox } from '@e2b/code-interpreter';
3
3
  import '@temporalio/common';
4
4
 
@@ -43,6 +43,14 @@ declare class E2bSandboxFileSystem implements SandboxFileSystem {
43
43
  type E2bSandbox = Sandbox$1 & {
44
44
  fs: E2bSandboxFileSystem;
45
45
  };
46
+ /**
47
+ * Provider-level defaults for E2B sandboxes. Every lifecycle op
48
+ * (`create` / `restore` / `fork`) merges per-call options on top of these —
49
+ * per-call options win per-field. This is how E2B preserves sandbox-level
50
+ * config (network policy, metadata, lifecycle, timeout) across
51
+ * snapshot/restore and fork, since the E2B API treats those as pure
52
+ * create-time inputs that aren't carried in the snapshot blob.
53
+ */
46
54
  interface E2bSandboxConfig {
47
55
  /** Sandbox template name or ID */
48
56
  template?: string;
@@ -50,6 +58,14 @@ interface E2bSandboxConfig {
50
58
  workspaceBase?: string;
51
59
  /** Sandbox idle timeout in milliseconds */
52
60
  timeoutMs?: number;
61
+ /** Default outbound internet access policy */
62
+ allowInternetAccess?: boolean;
63
+ /** Default outbound network allow/deny rules */
64
+ network?: SandboxCreateOptions["network"];
65
+ /** Default metadata surfaced via provider list/query APIs */
66
+ metadata?: SandboxCreateOptions["metadata"];
67
+ /** Default sandbox timeout behaviour */
68
+ lifecycle?: SandboxCreateOptions["lifecycle"];
53
69
  }
54
70
  interface E2bSandboxCreateOptions extends SandboxCreateOptions {
55
71
  /** Sandbox template name or ID — overrides the provider default */
@@ -64,16 +80,20 @@ declare class E2bSandboxProvider implements SandboxProvider<E2bSandboxCreateOpti
64
80
  private readonly defaultTemplate?;
65
81
  private readonly defaultWorkspaceBase;
66
82
  private readonly defaultTimeoutMs?;
83
+ private readonly defaultAllowInternetAccess?;
84
+ private readonly defaultNetwork?;
85
+ private readonly defaultMetadata?;
86
+ private readonly defaultLifecycle?;
67
87
  constructor(config?: E2bSandboxConfig);
68
88
  create(options?: E2bSandboxCreateOptions): Promise<SandboxCreateResult>;
69
89
  get(sandboxId: string): Promise<E2bSandbox>;
70
90
  destroy(sandboxId: string): Promise<void>;
71
91
  pause(sandboxId: string, _ttlSeconds?: number): Promise<void>;
72
92
  resume(sandboxId: string): Promise<void>;
73
- snapshot(sandboxId: string): Promise<SandboxSnapshot>;
74
- restore(snapshot: SandboxSnapshot): Promise<Sandbox$1>;
93
+ snapshot(sandboxId: string, _options?: E2bSandboxCreateOptions): Promise<SandboxSnapshot>;
94
+ restore(snapshot: SandboxSnapshot, options?: E2bSandboxCreateOptions): Promise<Sandbox$1>;
75
95
  deleteSnapshot(snapshot: SandboxSnapshot): Promise<void>;
76
- fork(sandboxId: string): Promise<Sandbox$1>;
96
+ fork(sandboxId: string, options?: E2bSandboxCreateOptions): Promise<Sandbox$1>;
77
97
  private buildSdkCreateOpts;
78
98
  }
79
99
 
@@ -1,4 +1,4 @@
1
- import { a as SandboxFileSystem, F as FileStat, D as DirentEntry, S as Sandbox$1, d as SandboxCreateOptions, b as SandboxProvider, c as SandboxCapabilities, e as SandboxCreateResult, f as SandboxSnapshot } from '../../../types-tQL9njTu.js';
1
+ import { a as SandboxFileSystem, F as FileStat, D as DirentEntry, S as Sandbox$1, d as SandboxCreateOptions, b as SandboxProvider, c as SandboxCapabilities, e as SandboxCreateResult, f as SandboxSnapshot } from '../../../types-yx0LzPGn.js';
2
2
  import { Sandbox } from '@e2b/code-interpreter';
3
3
  import '@temporalio/common';
4
4
 
@@ -43,6 +43,14 @@ declare class E2bSandboxFileSystem implements SandboxFileSystem {
43
43
  type E2bSandbox = Sandbox$1 & {
44
44
  fs: E2bSandboxFileSystem;
45
45
  };
46
+ /**
47
+ * Provider-level defaults for E2B sandboxes. Every lifecycle op
48
+ * (`create` / `restore` / `fork`) merges per-call options on top of these —
49
+ * per-call options win per-field. This is how E2B preserves sandbox-level
50
+ * config (network policy, metadata, lifecycle, timeout) across
51
+ * snapshot/restore and fork, since the E2B API treats those as pure
52
+ * create-time inputs that aren't carried in the snapshot blob.
53
+ */
46
54
  interface E2bSandboxConfig {
47
55
  /** Sandbox template name or ID */
48
56
  template?: string;
@@ -50,6 +58,14 @@ interface E2bSandboxConfig {
50
58
  workspaceBase?: string;
51
59
  /** Sandbox idle timeout in milliseconds */
52
60
  timeoutMs?: number;
61
+ /** Default outbound internet access policy */
62
+ allowInternetAccess?: boolean;
63
+ /** Default outbound network allow/deny rules */
64
+ network?: SandboxCreateOptions["network"];
65
+ /** Default metadata surfaced via provider list/query APIs */
66
+ metadata?: SandboxCreateOptions["metadata"];
67
+ /** Default sandbox timeout behaviour */
68
+ lifecycle?: SandboxCreateOptions["lifecycle"];
53
69
  }
54
70
  interface E2bSandboxCreateOptions extends SandboxCreateOptions {
55
71
  /** Sandbox template name or ID — overrides the provider default */
@@ -64,16 +80,20 @@ declare class E2bSandboxProvider implements SandboxProvider<E2bSandboxCreateOpti
64
80
  private readonly defaultTemplate?;
65
81
  private readonly defaultWorkspaceBase;
66
82
  private readonly defaultTimeoutMs?;
83
+ private readonly defaultAllowInternetAccess?;
84
+ private readonly defaultNetwork?;
85
+ private readonly defaultMetadata?;
86
+ private readonly defaultLifecycle?;
67
87
  constructor(config?: E2bSandboxConfig);
68
88
  create(options?: E2bSandboxCreateOptions): Promise<SandboxCreateResult>;
69
89
  get(sandboxId: string): Promise<E2bSandbox>;
70
90
  destroy(sandboxId: string): Promise<void>;
71
91
  pause(sandboxId: string, _ttlSeconds?: number): Promise<void>;
72
92
  resume(sandboxId: string): Promise<void>;
73
- snapshot(sandboxId: string): Promise<SandboxSnapshot>;
74
- restore(snapshot: SandboxSnapshot): Promise<Sandbox$1>;
93
+ snapshot(sandboxId: string, _options?: E2bSandboxCreateOptions): Promise<SandboxSnapshot>;
94
+ restore(snapshot: SandboxSnapshot, options?: E2bSandboxCreateOptions): Promise<Sandbox$1>;
75
95
  deleteSnapshot(snapshot: SandboxSnapshot): Promise<void>;
76
- fork(sandboxId: string): Promise<Sandbox$1>;
96
+ fork(sandboxId: string, options?: E2bSandboxCreateOptions): Promise<Sandbox$1>;
77
97
  private buildSdkCreateOpts;
78
98
  }
79
99
 
@@ -165,10 +165,18 @@ var E2bSandboxProvider = class {
165
165
  defaultTemplate;
166
166
  defaultWorkspaceBase;
167
167
  defaultTimeoutMs;
168
+ defaultAllowInternetAccess;
169
+ defaultNetwork;
170
+ defaultMetadata;
171
+ defaultLifecycle;
168
172
  constructor(config) {
169
173
  this.defaultTemplate = config?.template;
170
174
  this.defaultWorkspaceBase = config?.workspaceBase ?? "/home/user";
171
175
  this.defaultTimeoutMs = config?.timeoutMs;
176
+ this.defaultAllowInternetAccess = config?.allowInternetAccess;
177
+ this.defaultNetwork = config?.network;
178
+ this.defaultMetadata = config?.metadata;
179
+ this.defaultLifecycle = config?.lifecycle;
172
180
  }
173
181
  async create(options) {
174
182
  const template = options?.template ?? this.defaultTemplate;
@@ -215,7 +223,7 @@ var E2bSandboxProvider = class {
215
223
  async resume(sandboxId) {
216
224
  await Sandbox.connect(sandboxId);
217
225
  }
218
- async snapshot(sandboxId) {
226
+ async snapshot(sandboxId, _options) {
219
227
  const { snapshotId } = await Sandbox.createSnapshot(sandboxId);
220
228
  return {
221
229
  sandboxId,
@@ -224,14 +232,15 @@ var E2bSandboxProvider = class {
224
232
  createdAt: (/* @__PURE__ */ new Date()).toISOString()
225
233
  };
226
234
  }
227
- async restore(snapshot) {
235
+ async restore(snapshot, options) {
228
236
  const data = snapshot.data;
229
237
  if (!data?.snapshotId) {
230
238
  throw new SandboxNotSupportedError(
231
239
  "restore: snapshot is missing snapshotId"
232
240
  );
233
241
  }
234
- const sdkSandbox = await Sandbox.create(data.snapshotId);
242
+ const sdkOpts = this.buildSdkCreateOpts(options);
243
+ const sdkSandbox = await Sandbox.create(data.snapshotId, sdkOpts);
235
244
  return new E2bSandboxImpl(
236
245
  sdkSandbox.sandboxId,
237
246
  sdkSandbox,
@@ -246,9 +255,10 @@ var E2bSandboxProvider = class {
246
255
  } catch {
247
256
  }
248
257
  }
249
- async fork(sandboxId) {
258
+ async fork(sandboxId, options) {
250
259
  const { snapshotId } = await Sandbox.createSnapshot(sandboxId);
251
- const sdkSandbox = await Sandbox.create(snapshotId);
260
+ const sdkOpts = this.buildSdkCreateOpts(options);
261
+ const sdkSandbox = await Sandbox.create(snapshotId, sdkOpts);
252
262
  return new E2bSandboxImpl(
253
263
  sdkSandbox.sandboxId,
254
264
  sdkSandbox,
@@ -256,19 +266,21 @@ var E2bSandboxProvider = class {
256
266
  );
257
267
  }
258
268
  buildSdkCreateOpts(options) {
269
+ const network = options?.network ?? this.defaultNetwork;
270
+ const lifecycle = options?.lifecycle ?? this.defaultLifecycle;
259
271
  return {
260
272
  envs: options?.env,
261
273
  timeoutMs: options?.timeoutMs ?? this.defaultTimeoutMs,
262
- metadata: options?.metadata,
263
- allowInternetAccess: options?.allowInternetAccess,
264
- network: options?.network ? {
265
- allowOut: options.network.allowOut,
266
- denyOut: options.network.denyOut,
267
- allowPublicTraffic: options.network.allowPublicTraffic
274
+ metadata: options?.metadata ?? this.defaultMetadata,
275
+ allowInternetAccess: options?.allowInternetAccess ?? this.defaultAllowInternetAccess,
276
+ network: network ? {
277
+ allowOut: network.allowOut,
278
+ denyOut: network.denyOut,
279
+ allowPublicTraffic: network.allowPublicTraffic
268
280
  } : void 0,
269
- lifecycle: options?.lifecycle ? {
270
- onTimeout: options.lifecycle.onTimeout,
271
- autoResume: options.lifecycle.autoResume
281
+ lifecycle: lifecycle ? {
282
+ onTimeout: lifecycle.onTimeout,
283
+ autoResume: lifecycle.autoResume
272
284
  } : void 0
273
285
  };
274
286
  }