zeitlich 0.2.40 → 0.2.42

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 (134) hide show
  1. package/README.md +12 -1
  2. package/dist/{activities-CvUrG3YG.d.cts → activities-Coafq5zr.d.cts} +2 -2
  3. package/dist/{activities-CULxRzJ1.d.ts → activities-CrN-ghLo.d.ts} +2 -2
  4. package/dist/adapters/sandbox/daytona/index.cjs +4 -23
  5. package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
  6. package/dist/adapters/sandbox/daytona/index.d.cts +18 -86
  7. package/dist/adapters/sandbox/daytona/index.d.ts +18 -86
  8. package/dist/adapters/sandbox/daytona/index.js +4 -23
  9. package/dist/adapters/sandbox/daytona/index.js.map +1 -1
  10. package/dist/adapters/sandbox/daytona/workflow.cjs +1 -7
  11. package/dist/adapters/sandbox/daytona/workflow.cjs.map +1 -1
  12. package/dist/adapters/sandbox/daytona/workflow.d.cts +9 -2
  13. package/dist/adapters/sandbox/daytona/workflow.d.ts +9 -2
  14. package/dist/adapters/sandbox/daytona/workflow.js +1 -7
  15. package/dist/adapters/sandbox/daytona/workflow.js.map +1 -1
  16. package/dist/adapters/sandbox/e2b/index.cjs +21 -3
  17. package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
  18. package/dist/adapters/sandbox/e2b/index.d.cts +48 -7
  19. package/dist/adapters/sandbox/e2b/index.d.ts +48 -7
  20. package/dist/adapters/sandbox/e2b/index.js +22 -5
  21. package/dist/adapters/sandbox/e2b/index.js.map +1 -1
  22. package/dist/adapters/sandbox/e2b/workflow.cjs.map +1 -1
  23. package/dist/adapters/sandbox/e2b/workflow.d.cts +4 -2
  24. package/dist/adapters/sandbox/e2b/workflow.d.ts +4 -2
  25. package/dist/adapters/sandbox/e2b/workflow.js.map +1 -1
  26. package/dist/adapters/sandbox/inmemory/index.cjs +11 -0
  27. package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
  28. package/dist/adapters/sandbox/inmemory/index.d.cts +11 -3
  29. package/dist/adapters/sandbox/inmemory/index.d.ts +11 -3
  30. package/dist/adapters/sandbox/inmemory/index.js +11 -1
  31. package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
  32. package/dist/adapters/sandbox/inmemory/workflow.cjs.map +1 -1
  33. package/dist/adapters/sandbox/inmemory/workflow.d.cts +4 -2
  34. package/dist/adapters/sandbox/inmemory/workflow.d.ts +4 -2
  35. package/dist/adapters/sandbox/inmemory/workflow.js.map +1 -1
  36. package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
  37. package/dist/adapters/thread/anthropic/index.d.cts +6 -6
  38. package/dist/adapters/thread/anthropic/index.d.ts +6 -6
  39. package/dist/adapters/thread/anthropic/index.js.map +1 -1
  40. package/dist/adapters/thread/anthropic/workflow.d.cts +6 -6
  41. package/dist/adapters/thread/anthropic/workflow.d.ts +6 -6
  42. package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
  43. package/dist/adapters/thread/google-genai/index.d.cts +6 -6
  44. package/dist/adapters/thread/google-genai/index.d.ts +6 -6
  45. package/dist/adapters/thread/google-genai/index.js.map +1 -1
  46. package/dist/adapters/thread/google-genai/workflow.d.cts +6 -6
  47. package/dist/adapters/thread/google-genai/workflow.d.ts +6 -6
  48. package/dist/adapters/thread/langchain/index.cjs.map +1 -1
  49. package/dist/adapters/thread/langchain/index.d.cts +6 -6
  50. package/dist/adapters/thread/langchain/index.d.ts +6 -6
  51. package/dist/adapters/thread/langchain/index.js.map +1 -1
  52. package/dist/adapters/thread/langchain/workflow.d.cts +6 -6
  53. package/dist/adapters/thread/langchain/workflow.d.ts +6 -6
  54. package/dist/index.cjs +316 -119
  55. package/dist/index.cjs.map +1 -1
  56. package/dist/index.d.cts +93 -17
  57. package/dist/index.d.ts +93 -17
  58. package/dist/index.js +317 -120
  59. package/dist/index.js.map +1 -1
  60. package/dist/{proxy-5EbwzaY4.d.cts → proxy-Bf7uI-Hw.d.cts} +1 -1
  61. package/dist/{proxy-wZufFfBh.d.ts → proxy-COqA95FW.d.ts} +1 -1
  62. package/dist/{thread-manager-BqBAIsED.d.ts → thread-manager-BhkOyQ1I.d.ts} +2 -2
  63. package/dist/{thread-manager-BNiIt5r8.d.ts → thread-manager-Bi1XlbpJ.d.ts} +2 -2
  64. package/dist/{thread-manager-DF8WuCRs.d.cts → thread-manager-BsLO3Fgc.d.cts} +2 -2
  65. package/dist/{thread-manager-BoN5DOvG.d.cts → thread-manager-wRVVBFgj.d.cts} +2 -2
  66. package/dist/{types-C7OoY7h8.d.ts → types-BkX4HLzi.d.ts} +1 -1
  67. package/dist/{types-CuISs0Ub.d.cts → types-C66-BVBr.d.cts} +1 -1
  68. package/dist/types-CJ7tCdl6.d.cts +266 -0
  69. package/dist/types-CJ7tCdl6.d.ts +266 -0
  70. package/dist/{types-DeQH84C_.d.ts → types-CdALEF3z.d.cts} +342 -23
  71. package/dist/{types-Cn2r3ol3.d.cts → types-ChAy_jSP.d.ts} +342 -23
  72. package/dist/types-CjY93AWZ.d.cts +84 -0
  73. package/dist/types-gVa5XCWD.d.ts +84 -0
  74. package/dist/{workflow-DhplIN65.d.cts → workflow-BwT5EybR.d.ts} +7 -6
  75. package/dist/{workflow-C2MZZj5K.d.ts → workflow-DMmiaw6w.d.cts} +7 -6
  76. package/dist/workflow.cjs +138 -77
  77. package/dist/workflow.cjs.map +1 -1
  78. package/dist/workflow.d.cts +4 -4
  79. package/dist/workflow.d.ts +4 -4
  80. package/dist/workflow.js +139 -78
  81. package/dist/workflow.js.map +1 -1
  82. package/package.json +17 -33
  83. package/src/adapters/sandbox/daytona/index.ts +25 -48
  84. package/src/adapters/sandbox/daytona/proxy.ts +7 -8
  85. package/src/adapters/sandbox/e2b/README.md +81 -0
  86. package/src/adapters/sandbox/e2b/index.ts +53 -11
  87. package/src/adapters/sandbox/e2b/keep-alive.test.ts +115 -0
  88. package/src/adapters/sandbox/e2b/proxy.ts +3 -2
  89. package/src/adapters/sandbox/e2b/types.ts +34 -2
  90. package/src/adapters/sandbox/inmemory/index.ts +21 -1
  91. package/src/adapters/sandbox/inmemory/proxy.ts +7 -3
  92. package/src/index.ts +1 -1
  93. package/src/lib/activity.ts +5 -0
  94. package/src/lib/sandbox/capability-types.test.ts +859 -0
  95. package/src/lib/sandbox/index.ts +1 -0
  96. package/src/lib/sandbox/manager.ts +187 -31
  97. package/src/lib/sandbox/types.ts +189 -46
  98. package/src/lib/session/index.ts +1 -0
  99. package/src/lib/session/session.integration.test.ts +58 -0
  100. package/src/lib/session/session.ts +109 -50
  101. package/src/lib/session/types.ts +189 -8
  102. package/src/lib/subagent/handler.ts +66 -43
  103. package/src/lib/subagent/subagent.integration.test.ts +2 -0
  104. package/src/lib/subagent/types.ts +492 -16
  105. package/src/lib/subagent/workflow.ts +11 -1
  106. package/src/lib/tool-router/auto-append-sandbox.integration.test.ts +158 -0
  107. package/src/lib/tool-router/index.ts +1 -1
  108. package/src/lib/tool-router/with-sandbox.ts +45 -2
  109. package/src/lib/virtual-fs/filesystem.ts +41 -16
  110. package/src/lib/virtual-fs/types.ts +19 -0
  111. package/src/lib/virtual-fs/virtual-fs.test.ts +204 -1
  112. package/src/tools/read-file/handler.test.ts +83 -0
  113. package/src/workflow.ts +3 -0
  114. package/tsup.config.ts +0 -4
  115. package/dist/adapters/sandbox/bedrock/index.cjs +0 -457
  116. package/dist/adapters/sandbox/bedrock/index.cjs.map +0 -1
  117. package/dist/adapters/sandbox/bedrock/index.d.cts +0 -25
  118. package/dist/adapters/sandbox/bedrock/index.d.ts +0 -25
  119. package/dist/adapters/sandbox/bedrock/index.js +0 -454
  120. package/dist/adapters/sandbox/bedrock/index.js.map +0 -1
  121. package/dist/adapters/sandbox/bedrock/workflow.cjs +0 -36
  122. package/dist/adapters/sandbox/bedrock/workflow.cjs.map +0 -1
  123. package/dist/adapters/sandbox/bedrock/workflow.d.cts +0 -29
  124. package/dist/adapters/sandbox/bedrock/workflow.d.ts +0 -29
  125. package/dist/adapters/sandbox/bedrock/workflow.js +0 -34
  126. package/dist/adapters/sandbox/bedrock/workflow.js.map +0 -1
  127. package/dist/types-DAsQ21Rt.d.ts +0 -74
  128. package/dist/types-lm8tMNJQ.d.cts +0 -74
  129. package/dist/types-yx0LzPGn.d.cts +0 -173
  130. package/dist/types-yx0LzPGn.d.ts +0 -173
  131. package/src/adapters/sandbox/bedrock/filesystem.ts +0 -340
  132. package/src/adapters/sandbox/bedrock/index.ts +0 -274
  133. package/src/adapters/sandbox/bedrock/proxy.ts +0 -59
  134. package/src/adapters/sandbox/bedrock/types.ts +0 -24
package/dist/index.d.cts CHANGED
@@ -1,15 +1,15 @@
1
- import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-DhplIN65.cjs';
2
- export { A as AskUserQuestionArgs, D as DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as THREAD_TTL_SECONDS, g as TaskCreateArgs, h as TaskGetArgs, i as TaskListArgs, j as TaskUpdateArgs, k as ToolExecutedEvent, l as TurnCompletedEvent, W as WorkflowConfig, m as WorkflowInput, n as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, o as applyVirtualTreeMutations, p as askUserQuestionTool, q as bashTool, r as composeHooks, s as createAgentStateManager, t as createAskUserQuestionHandler, u as createBashToolDescription, v as createObservabilityHooks, w as createReadSkillHandler, x as createReadSkillTool, y as createSession, z as createTaskCreateHandler, C as createTaskGetHandler, E as createTaskListHandler, H as createTaskUpdateHandler, I as createToolRouter, J as defineSubagent, K as defineSubagentWorkflow, L as defineTool, M as defineWorkflow, N as editTool, P as filesWithMimeType, Q as formatVirtualFileTree, U as getShortId, V as getThreadListKey, X as getThreadMetaKey, Y as globTool, _ as grepTool, $ as hasDirectory, a0 as hasFileWithMimeType, a1 as hasNoOtherToolCalls, a2 as parseSkillFile, a3 as proxyRunAgent, a4 as proxyVirtualFsOps, a5 as readFileTool, a6 as taskCreateTool, a7 as taskGetTool, a8 as taskListTool, a9 as taskUpdateTool, aa as writeFileTool } from './workflow-DhplIN65.cjs';
3
- import { R as RouterContext, e as ToolResultConfig, d as ActivityToolHandler, J as JsonValue, c as ToolHandlerResponse, B as BaseAgentState, f as RunAgentConfig, g as SkillProvider, h as SkillMetadata, i as Skill, F as FileEntryMetadata, j as FileResolver, V as VirtualFsContext, k as TreeMutation, l as PrefixedVirtualFsOps } from './types-Cn2r3ol3.cjs';
4
- export { m as AgentConfig, n as AgentFile, A as AgentResponse, o as AgentState, p as AgentStateManager, q as AgentStatus, r as AppendToolResultFn, s as FileEntry, H as Hooks, I as InferToolResults, t as JsonPrimitive, u as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, v as ParsedToolCall, w as ParsedToolCallUnion, P as PersistedThreadState, x as PostHumanMessageAppendHook, y as PostHumanMessageAppendHookContext, z as PostToolUseFailureHook, C as PostToolUseFailureHookContext, D as PostToolUseFailureHookResult, E as PostToolUseHook, G as PostToolUseHookContext, K as PreHumanMessageAppendHook, L as PreHumanMessageAppendHookContext, N as PreToolUseHook, O as PreToolUseHookContext, Q as PreToolUseHookResult, b as PrefixedThreadOps, U as ProcessToolCallsContext, W as ProcessToolCallsResult, X as RawToolCall, Y as RewindSignal, Z as RunAgentActivity, _ as SandboxInit, $ as SandboxShutdown, S as ScopedPrefix, a0 as SerializableToolDefinition, a1 as SessionConfig, a2 as SessionEndHook, a3 as SessionEndHookContext, a4 as SessionExitReason, a5 as SessionResult, a6 as SessionStartHook, a7 as SessionStartHookContext, a8 as SubagentChildWorkflowOptions, a9 as SubagentConfig, aa as SubagentDefinition, ab as SubagentFnResult, ac as SubagentHandlerResponse, ad as SubagentHooks, ae as SubagentSandboxConfig, af as SubagentSandboxShutdown, ag as SubagentSessionInput, ah as SubagentWorkflow, ai as SubagentWorkflowInput, aj as TaskStatus, ak as ThreadInit, T as ThreadOps, al as TokenUsage, am as ToolArgs, an as ToolCallResult, ao as ToolCallResultUnion, ap as ToolDefinition, aq as ToolHandler, ar as ToolHooks, as as ToolMap, at as ToolNames, au as ToolResult, av as ToolRouter, aw as ToolRouterHooks, ax as ToolWithHandler, ay as VirtualFileSystem, az as VirtualFileTree, aA as VirtualFsOps, aB as VirtualFsState, aC as WorkflowTask, aD as ZeitlichSession, aE as isTerminalStatus } from './types-Cn2r3ol3.cjs';
5
- import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, P as PrefixedSandboxOps, F as FileStat, D as DirentEntry, E as ExecResult } from './types-yx0LzPGn.cjs';
6
- export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-yx0LzPGn.cjs';
1
+ import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-DMmiaw6w.cjs';
2
+ export { A as AskUserQuestionArgs, D as DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as THREAD_TTL_SECONDS, g as TaskCreateArgs, h as TaskGetArgs, i as TaskListArgs, j as TaskUpdateArgs, k as ToolExecutedEvent, l as TurnCompletedEvent, W as WorkflowConfig, m as WorkflowInput, n as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, o as applyVirtualTreeMutations, p as askUserQuestionTool, q as bashTool, r as composeHooks, s as createAgentStateManager, t as createAskUserQuestionHandler, u as createBashToolDescription, v as createObservabilityHooks, w as createReadSkillHandler, x as createReadSkillTool, y as createSession, z as createTaskCreateHandler, C as createTaskGetHandler, E as createTaskListHandler, H as createTaskUpdateHandler, I as createToolRouter, J as defineSubagent, K as defineSubagentWorkflow, L as defineTool, M as defineWorkflow, N as editTool, P as filesWithMimeType, Q as formatVirtualFileTree, U as getShortId, V as getThreadListKey, X as getThreadMetaKey, Y as globTool, _ as grepTool, $ as hasDirectory, a0 as hasFileWithMimeType, a1 as hasNoOtherToolCalls, a2 as parseSkillFile, a3 as proxyRunAgent, a4 as proxyVirtualFsOps, a5 as readFileTool, a6 as taskCreateTool, a7 as taskGetTool, a8 as taskListTool, a9 as taskUpdateTool, aa as writeFileTool } from './workflow-DMmiaw6w.cjs';
3
+ import { R as RouterContext, e as ToolResultConfig, d as ActivityToolHandler, J as JsonValue, c as ToolHandlerResponse, B as BaseAgentState, f as RunAgentConfig, g as SkillProvider, h as SkillMetadata, i as Skill, F as FileEntryMetadata, j as FileResolver, V as VirtualFsContext, k as TreeMutation, l as PrefixedVirtualFsOps } from './types-CdALEF3z.cjs';
4
+ export { m as AgentConfig, n as AgentFile, A as AgentResponse, o as AgentState, p as AgentStateManager, q as AgentStatus, r as AppendToolResultFn, s as FileEntry, H as Hooks, I as InferToolResults, t as JsonPrimitive, u as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, v as ParsedToolCall, w as ParsedToolCallUnion, P as PersistedThreadState, x as PostHumanMessageAppendHook, y as PostHumanMessageAppendHookContext, z as PostToolUseFailureHook, C as PostToolUseFailureHookContext, D as PostToolUseFailureHookResult, E as PostToolUseHook, G as PostToolUseHookContext, K as PreHumanMessageAppendHook, L as PreHumanMessageAppendHookContext, N as PreToolUseHook, O as PreToolUseHookContext, Q as PreToolUseHookResult, b as PrefixedThreadOps, U as ProcessToolCallsContext, W as ProcessToolCallsResult, X as RawToolCall, Y as RewindSignal, Z as RunAgentActivity, _ as SandboxInit, $ as SandboxShutdown, S as ScopedPrefix, a0 as SerializableToolDefinition, a1 as SessionConfig, a2 as SessionEndHook, a3 as SessionEndHookContext, a4 as SessionExitReason, a5 as SessionRequiredCaps, a6 as SessionResult, a7 as SessionStartHook, a8 as SessionStartHookContext, a9 as SubagentChildWorkflowOptions, aa as SubagentConfig, ab as SubagentContinuationCaps, ac as SubagentDefinition, ad as SubagentFnResult, ae as SubagentHandlerResponse, af as SubagentHooks, ag as SubagentSandboxConfig, ah as SubagentSandboxShutdown, ai as SubagentSessionInput, aj as SubagentWorkflow, ak as SubagentWorkflowInput, al as TaskStatus, am as ThreadInit, T as ThreadOps, an as TokenUsage, ao as ToolArgs, ap as ToolCallResult, aq as ToolCallResultUnion, ar as ToolDefinition, as as ToolHandler, at as ToolHooks, au as ToolMap, av as ToolNames, aw as ToolResult, ax as ToolRouter, ay as ToolRouterHooks, az as ToolWithHandler, aA as VirtualFileSystem, aB as VirtualFileTree, aC as VirtualFsOps, aD as VirtualFsState, aE as WorkflowTask, aF as ZeitlichSession, aG as isTerminalStatus } from './types-CdALEF3z.cjs';
5
+ import { b as Sandbox, c as SandboxFileSystem, a as SandboxCreateOptions, h as SandboxCapability, d as SandboxProvider, g as SandboxSnapshot, P as PrefixedSandboxOps, F as FileStat, D as DirentEntry, E as ExecResult } from './types-CJ7tCdl6.cjs';
6
+ export { i as ExecOptions, e as SandboxCapabilities, f as SandboxCreateResult, j as SandboxNotFoundError, k as SandboxNotSupportedError, S as SandboxOps } from './types-CJ7tCdl6.cjs';
7
7
  import { WorkflowClient } from '@temporalio/client';
8
- import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-CuISs0Ub.cjs';
9
- export { P as ProviderThreadManager } from './types-CuISs0Ub.cjs';
8
+ import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-C66-BVBr.cjs';
9
+ export { P as ProviderThreadManager } from './types-C66-BVBr.cjs';
10
10
  import 'zod';
11
- import '@temporalio/workflow';
12
11
  import '@temporalio/common';
12
+ import '@temporalio/workflow';
13
13
  import '@temporalio/common/lib/interfaces';
14
14
  import 'ioredis';
15
15
 
@@ -42,6 +42,32 @@ import 'ioredis';
42
42
  */
43
43
  declare function withAutoAppend<TArgs, TResult, TContext extends RouterContext = RouterContext, TToolResponse = unknown>(threadHandler: (id: string, config: ToolResultConfig) => Promise<void>, handler: ActivityToolHandler<TArgs, TResult, TContext, TToolResponse>): ActivityToolHandler<TArgs, TResult, TContext>;
44
44
 
45
+ /**
46
+ * Options for {@link withSandbox}.
47
+ */
48
+ interface WithSandboxOptions {
49
+ /**
50
+ * If `true`, a {@link SandboxNotFoundError} thrown by `manager.getSandbox`
51
+ * is translated into a structured tool-handler response (instead of
52
+ * propagating). This lets the agent return a graceful error to the model
53
+ * rather than crashing the workflow when the backing sandbox has been
54
+ * killed mid-run (e.g. because the E2B `timeoutMs` lifetime elapsed).
55
+ *
56
+ * Off by default to preserve the existing contract for callers that rely
57
+ * on the error bubbling out. New callers should generally enable this in
58
+ * combination with the E2B `keepAliveMs` provider option.
59
+ *
60
+ * @default false
61
+ */
62
+ translateSandboxNotFound?: boolean;
63
+ /**
64
+ * Custom tool response returned to the agent when the backing sandbox
65
+ * is not found and `translateSandboxNotFound` is `true`. Defaults to a
66
+ * generic English message. Use this to localize, match agent persona,
67
+ * or give the model more specific recovery instructions.
68
+ */
69
+ sandboxNotFoundToolResponse?: string;
70
+ }
45
71
  /**
46
72
  * Extended router context with a resolved {@link Sandbox} instance.
47
73
  *
@@ -95,7 +121,7 @@ declare function withSandbox<TArgs, TResult, TSandbox extends Sandbox = Sandbox,
95
121
  }, handler: (args: TArgs, context: RouterContext & {
96
122
  sandbox: TSandbox;
97
123
  sandboxId: string;
98
- }) => Promise<ToolHandlerResponse<TResult, TToolResponse>>): ActivityToolHandler<TArgs, TResult | null, RouterContext, TToolResponse | string>;
124
+ }) => Promise<ToolHandlerResponse<TResult, TToolResponse>>, options?: WithSandboxOptions): ActivityToolHandler<TArgs, TResult | null, RouterContext, TToolResponse | string>;
99
125
 
100
126
  /**
101
127
  * Safely retrieve Temporal activity heartbeat and cancellation signal.
@@ -249,8 +275,16 @@ interface SandboxManagerHooks<TOptions extends SandboxCreateOptions = SandboxCre
249
275
  /**
250
276
  * Stateless facade over a {@link SandboxProvider}.
251
277
  *
252
- * Delegates all lifecycle operations to the provider, which is responsible
253
- * for its own instance management strategy (e.g. in-memory map, remote API).
278
+ * Generic over the same capability set (`TCaps`) as the underlying
279
+ * provider. The manager's lifecycle methods are always present on the
280
+ * class (so existing call sites compile unchanged), but
281
+ * {@link SandboxManager.createActivities} is capability-gated: only
282
+ * activities whose capability the provider declares via
283
+ * {@link SandboxProvider.supportedCapabilities} are wrapped, and the
284
+ * returned object's type omits absent ones.
285
+ *
286
+ * The default `TCaps = SandboxCapability` keeps the full method surface
287
+ * for existing usages that only pass `TOptions` / `TSandbox` / `TId`.
254
288
  *
255
289
  * Optional {@link SandboxManagerHooks} can be passed at construction time.
256
290
  * The `onPreCreate` hook runs inside the `createSandbox` activity, receiving
@@ -288,25 +322,61 @@ interface SandboxManagerHooks<TOptions extends SandboxCreateOptions = SandboxCre
288
322
  * );
289
323
  * ```
290
324
  */
291
- declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCreateOptions, TSandbox extends Sandbox = Sandbox, TId extends string = string, TCtx = unknown> {
325
+ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCreateOptions, TSandbox extends Sandbox = Sandbox, TId extends string = string, TCtx = unknown, TCaps extends SandboxCapability = SandboxCapability> {
292
326
  private provider;
293
327
  private hooks;
294
- constructor(provider: SandboxProvider<TOptions, TSandbox> & {
328
+ constructor(provider: SandboxProvider<TOptions, TSandbox, TCaps> & {
295
329
  readonly id: TId;
296
330
  }, options?: {
297
331
  hooks?: SandboxManagerHooks<TOptions, TCtx>;
298
332
  });
333
+ /**
334
+ * Verifies that the provider's runtime `supportedCapabilities` set is
335
+ * consistent with the gated methods physically present on the provider.
336
+ *
337
+ * Belt-and-suspenders complement to the type-level
338
+ * `ReadonlySet<TCaps & SandboxCapability>` constraint: TypeScript can
339
+ * prevent the runtime set from containing capabilities not declared in
340
+ * `TCaps`, but it cannot detect a provider that **declares** a cap in
341
+ * `TCaps` and forgets to include it in the runtime set (or that ships
342
+ * a method without listing its cap). Both shapes silently break
343
+ * activity registration, so we trip a loud failure at construction
344
+ * time instead.
345
+ *
346
+ * Adapters that derive both surfaces from a single `as const`
347
+ * capability array (the recommended pattern) pass this check by
348
+ * construction.
349
+ */
350
+ private assertCapabilityRuntimeConsistency;
299
351
  create(options?: TOptions, ctx?: TCtx): Promise<{
300
352
  sandboxId: string;
301
353
  } | null>;
302
354
  getSandbox(id: string): Promise<TSandbox>;
303
355
  destroy(id: string): Promise<void>;
356
+ /**
357
+ * Capability-gated lifecycle methods on the underlying provider.
358
+ *
359
+ * These manager methods always exist at runtime; calling one whose
360
+ * capability is absent from the provider's `supportedCapabilities`
361
+ * throws an error. The activities returned from
362
+ * {@link SandboxManager.createActivities} are gated at the type level
363
+ * via `TCaps`, which is where compile-time safety is enforced.
364
+ */
304
365
  pause(id: string, ttlSeconds?: number): Promise<void>;
305
366
  resume(id: string): Promise<void>;
306
367
  snapshot(id: string, options?: TOptions): Promise<SandboxSnapshot>;
307
368
  restore(snapshot: SandboxSnapshot, options?: TOptions): Promise<string>;
308
369
  deleteSnapshot(snapshot: SandboxSnapshot): Promise<void>;
309
370
  fork(sandboxId: string, options?: TOptions): Promise<string>;
371
+ private providerMethod;
372
+ /**
373
+ * Constructs the structured error thrown when an unsupported lifecycle
374
+ * method is invoked through the manager. Uses the public
375
+ * {@link SandboxNotSupportedError} symbol so consumers that catch on
376
+ * `instanceof SandboxNotSupportedError` (the documented compatibility
377
+ * path) keep matching after the refactor.
378
+ */
379
+ private unsupported;
310
380
  /**
311
381
  * Returns Temporal activity functions with prefixed names.
312
382
  *
@@ -314,6 +384,11 @@ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCrea
314
384
  * to pass the workflow/scope name. Use the matching `proxy*SandboxOps()`
315
385
  * helper from the adapter's `/workflow` entrypoint on the workflow side.
316
386
  *
387
+ * Activities are only registered for capabilities the provider declares
388
+ * via {@link SandboxProvider.supportedCapabilities}: methods omitted
389
+ * from the cap set are not wrapped, and the returned object's type
390
+ * omits the corresponding keys.
391
+ *
317
392
  * @param scope - Workflow name (appended to the provider id)
318
393
  *
319
394
  * @example
@@ -324,10 +399,11 @@ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCrea
324
399
  *
325
400
  * const dmgr = new SandboxManager(new DaytonaSandboxProvider(config));
326
401
  * dmgr.createActivities("CodingAgent");
327
- * // registers: daytonaCodingAgentCreateSandbox,
402
+ * // registers: daytonaCodingAgentCreateSandbox, daytonaCodingAgentDestroySandbox
403
+ * // (snapshot/restore/fork/pause/resume omitted — Daytona doesn't declare them)
328
404
  * ```
329
405
  */
330
- createActivities<S extends string>(scope: S): PrefixedSandboxOps<`${TId}${Capitalize<S>}`, TOptions, TCtx>;
406
+ createActivities<S extends string>(scope: S): PrefixedSandboxOps<`${TId}${Capitalize<S>}`, TOptions, TCtx, TCaps>;
331
407
  }
332
408
 
333
409
  /**
@@ -518,4 +594,4 @@ declare const toTree: (fs: SandboxFileSystem, opts?: {
518
594
  sort?: boolean;
519
595
  }) => Promise<string>;
520
596
 
521
- export { ActivityToolHandler, type AgentStateContext, BaseAgentState, BaseThreadManager, BashArgs, ExecResult, FileEditArgs, FileEntryMetadata, FileReadArgs, FileResolver, FileSystemSkillProvider, FileWriteArgs, GlobArgs, JsonValue, NodeFsSandboxFileSystem, type PreCreateHookResult, PrefixedSandboxOps, PrefixedVirtualFsOps, RouterContext, RunAgentConfig, Sandbox, type SandboxContext, SandboxCreateOptions, DirentEntry as SandboxDirentEntry, FileStat as SandboxFileStat, SandboxFileSystem, SandboxManager, type SandboxManagerHooks, SandboxProvider, SandboxSnapshot, Skill, SkillMetadata, SkillProvider, ThreadManagerConfig, ToolHandlerResponse, ToolResultConfig, TreeMutation, VirtualFsContext, bashHandler, createRunAgentActivity, createThreadManager, createVirtualFsActivities, editHandler, getActivityContext, globHandler, queryParentWorkflowState, readFileHandler, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler };
597
+ export { ActivityToolHandler, type AgentStateContext, BaseAgentState, BaseThreadManager, BashArgs, ExecResult, FileEditArgs, FileEntryMetadata, FileReadArgs, FileResolver, FileSystemSkillProvider, FileWriteArgs, GlobArgs, JsonValue, NodeFsSandboxFileSystem, type PreCreateHookResult, PrefixedSandboxOps, PrefixedVirtualFsOps, RouterContext, RunAgentConfig, Sandbox, SandboxCapability, type SandboxContext, SandboxCreateOptions, DirentEntry as SandboxDirentEntry, FileStat as SandboxFileStat, SandboxFileSystem, SandboxManager, type SandboxManagerHooks, SandboxProvider, SandboxSnapshot, Skill, SkillMetadata, SkillProvider, ThreadManagerConfig, ToolHandlerResponse, ToolResultConfig, TreeMutation, VirtualFsContext, type WithSandboxOptions, bashHandler, createRunAgentActivity, createThreadManager, createVirtualFsActivities, editHandler, getActivityContext, globHandler, queryParentWorkflowState, readFileHandler, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler };
package/dist/index.d.ts CHANGED
@@ -1,15 +1,15 @@
1
- import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-C2MZZj5K.js';
2
- export { A as AskUserQuestionArgs, D as DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as THREAD_TTL_SECONDS, g as TaskCreateArgs, h as TaskGetArgs, i as TaskListArgs, j as TaskUpdateArgs, k as ToolExecutedEvent, l as TurnCompletedEvent, W as WorkflowConfig, m as WorkflowInput, n as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, o as applyVirtualTreeMutations, p as askUserQuestionTool, q as bashTool, r as composeHooks, s as createAgentStateManager, t as createAskUserQuestionHandler, u as createBashToolDescription, v as createObservabilityHooks, w as createReadSkillHandler, x as createReadSkillTool, y as createSession, z as createTaskCreateHandler, C as createTaskGetHandler, E as createTaskListHandler, H as createTaskUpdateHandler, I as createToolRouter, J as defineSubagent, K as defineSubagentWorkflow, L as defineTool, M as defineWorkflow, N as editTool, P as filesWithMimeType, Q as formatVirtualFileTree, U as getShortId, V as getThreadListKey, X as getThreadMetaKey, Y as globTool, _ as grepTool, $ as hasDirectory, a0 as hasFileWithMimeType, a1 as hasNoOtherToolCalls, a2 as parseSkillFile, a3 as proxyRunAgent, a4 as proxyVirtualFsOps, a5 as readFileTool, a6 as taskCreateTool, a7 as taskGetTool, a8 as taskListTool, a9 as taskUpdateTool, aa as writeFileTool } from './workflow-C2MZZj5K.js';
3
- import { R as RouterContext, e as ToolResultConfig, d as ActivityToolHandler, J as JsonValue, c as ToolHandlerResponse, B as BaseAgentState, f as RunAgentConfig, g as SkillProvider, h as SkillMetadata, i as Skill, F as FileEntryMetadata, j as FileResolver, V as VirtualFsContext, k as TreeMutation, l as PrefixedVirtualFsOps } from './types-DeQH84C_.js';
4
- export { m as AgentConfig, n as AgentFile, A as AgentResponse, o as AgentState, p as AgentStateManager, q as AgentStatus, r as AppendToolResultFn, s as FileEntry, H as Hooks, I as InferToolResults, t as JsonPrimitive, u as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, v as ParsedToolCall, w as ParsedToolCallUnion, P as PersistedThreadState, x as PostHumanMessageAppendHook, y as PostHumanMessageAppendHookContext, z as PostToolUseFailureHook, C as PostToolUseFailureHookContext, D as PostToolUseFailureHookResult, E as PostToolUseHook, G as PostToolUseHookContext, K as PreHumanMessageAppendHook, L as PreHumanMessageAppendHookContext, N as PreToolUseHook, O as PreToolUseHookContext, Q as PreToolUseHookResult, b as PrefixedThreadOps, U as ProcessToolCallsContext, W as ProcessToolCallsResult, X as RawToolCall, Y as RewindSignal, Z as RunAgentActivity, _ as SandboxInit, $ as SandboxShutdown, S as ScopedPrefix, a0 as SerializableToolDefinition, a1 as SessionConfig, a2 as SessionEndHook, a3 as SessionEndHookContext, a4 as SessionExitReason, a5 as SessionResult, a6 as SessionStartHook, a7 as SessionStartHookContext, a8 as SubagentChildWorkflowOptions, a9 as SubagentConfig, aa as SubagentDefinition, ab as SubagentFnResult, ac as SubagentHandlerResponse, ad as SubagentHooks, ae as SubagentSandboxConfig, af as SubagentSandboxShutdown, ag as SubagentSessionInput, ah as SubagentWorkflow, ai as SubagentWorkflowInput, aj as TaskStatus, ak as ThreadInit, T as ThreadOps, al as TokenUsage, am as ToolArgs, an as ToolCallResult, ao as ToolCallResultUnion, ap as ToolDefinition, aq as ToolHandler, ar as ToolHooks, as as ToolMap, at as ToolNames, au as ToolResult, av as ToolRouter, aw as ToolRouterHooks, ax as ToolWithHandler, ay as VirtualFileSystem, az as VirtualFileTree, aA as VirtualFsOps, aB as VirtualFsState, aC as WorkflowTask, aD as ZeitlichSession, aE as isTerminalStatus } from './types-DeQH84C_.js';
5
- import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, P as PrefixedSandboxOps, F as FileStat, D as DirentEntry, E as ExecResult } from './types-yx0LzPGn.js';
6
- export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-yx0LzPGn.js';
1
+ import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-BwT5EybR.js';
2
+ export { A as AskUserQuestionArgs, D as DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as THREAD_TTL_SECONDS, g as TaskCreateArgs, h as TaskGetArgs, i as TaskListArgs, j as TaskUpdateArgs, k as ToolExecutedEvent, l as TurnCompletedEvent, W as WorkflowConfig, m as WorkflowInput, n as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, o as applyVirtualTreeMutations, p as askUserQuestionTool, q as bashTool, r as composeHooks, s as createAgentStateManager, t as createAskUserQuestionHandler, u as createBashToolDescription, v as createObservabilityHooks, w as createReadSkillHandler, x as createReadSkillTool, y as createSession, z as createTaskCreateHandler, C as createTaskGetHandler, E as createTaskListHandler, H as createTaskUpdateHandler, I as createToolRouter, J as defineSubagent, K as defineSubagentWorkflow, L as defineTool, M as defineWorkflow, N as editTool, P as filesWithMimeType, Q as formatVirtualFileTree, U as getShortId, V as getThreadListKey, X as getThreadMetaKey, Y as globTool, _ as grepTool, $ as hasDirectory, a0 as hasFileWithMimeType, a1 as hasNoOtherToolCalls, a2 as parseSkillFile, a3 as proxyRunAgent, a4 as proxyVirtualFsOps, a5 as readFileTool, a6 as taskCreateTool, a7 as taskGetTool, a8 as taskListTool, a9 as taskUpdateTool, aa as writeFileTool } from './workflow-BwT5EybR.js';
3
+ import { R as RouterContext, e as ToolResultConfig, d as ActivityToolHandler, J as JsonValue, c as ToolHandlerResponse, B as BaseAgentState, f as RunAgentConfig, g as SkillProvider, h as SkillMetadata, i as Skill, F as FileEntryMetadata, j as FileResolver, V as VirtualFsContext, k as TreeMutation, l as PrefixedVirtualFsOps } from './types-ChAy_jSP.js';
4
+ export { m as AgentConfig, n as AgentFile, A as AgentResponse, o as AgentState, p as AgentStateManager, q as AgentStatus, r as AppendToolResultFn, s as FileEntry, H as Hooks, I as InferToolResults, t as JsonPrimitive, u as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, v as ParsedToolCall, w as ParsedToolCallUnion, P as PersistedThreadState, x as PostHumanMessageAppendHook, y as PostHumanMessageAppendHookContext, z as PostToolUseFailureHook, C as PostToolUseFailureHookContext, D as PostToolUseFailureHookResult, E as PostToolUseHook, G as PostToolUseHookContext, K as PreHumanMessageAppendHook, L as PreHumanMessageAppendHookContext, N as PreToolUseHook, O as PreToolUseHookContext, Q as PreToolUseHookResult, b as PrefixedThreadOps, U as ProcessToolCallsContext, W as ProcessToolCallsResult, X as RawToolCall, Y as RewindSignal, Z as RunAgentActivity, _ as SandboxInit, $ as SandboxShutdown, S as ScopedPrefix, a0 as SerializableToolDefinition, a1 as SessionConfig, a2 as SessionEndHook, a3 as SessionEndHookContext, a4 as SessionExitReason, a5 as SessionRequiredCaps, a6 as SessionResult, a7 as SessionStartHook, a8 as SessionStartHookContext, a9 as SubagentChildWorkflowOptions, aa as SubagentConfig, ab as SubagentContinuationCaps, ac as SubagentDefinition, ad as SubagentFnResult, ae as SubagentHandlerResponse, af as SubagentHooks, ag as SubagentSandboxConfig, ah as SubagentSandboxShutdown, ai as SubagentSessionInput, aj as SubagentWorkflow, ak as SubagentWorkflowInput, al as TaskStatus, am as ThreadInit, T as ThreadOps, an as TokenUsage, ao as ToolArgs, ap as ToolCallResult, aq as ToolCallResultUnion, ar as ToolDefinition, as as ToolHandler, at as ToolHooks, au as ToolMap, av as ToolNames, aw as ToolResult, ax as ToolRouter, ay as ToolRouterHooks, az as ToolWithHandler, aA as VirtualFileSystem, aB as VirtualFileTree, aC as VirtualFsOps, aD as VirtualFsState, aE as WorkflowTask, aF as ZeitlichSession, aG as isTerminalStatus } from './types-ChAy_jSP.js';
5
+ import { b as Sandbox, c as SandboxFileSystem, a as SandboxCreateOptions, h as SandboxCapability, d as SandboxProvider, g as SandboxSnapshot, P as PrefixedSandboxOps, F as FileStat, D as DirentEntry, E as ExecResult } from './types-CJ7tCdl6.js';
6
+ export { i as ExecOptions, e as SandboxCapabilities, f as SandboxCreateResult, j as SandboxNotFoundError, k as SandboxNotSupportedError, S as SandboxOps } from './types-CJ7tCdl6.js';
7
7
  import { WorkflowClient } from '@temporalio/client';
8
- import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-C7OoY7h8.js';
9
- export { P as ProviderThreadManager } from './types-C7OoY7h8.js';
8
+ import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-BkX4HLzi.js';
9
+ export { P as ProviderThreadManager } from './types-BkX4HLzi.js';
10
10
  import 'zod';
11
- import '@temporalio/workflow';
12
11
  import '@temporalio/common';
12
+ import '@temporalio/workflow';
13
13
  import '@temporalio/common/lib/interfaces';
14
14
  import 'ioredis';
15
15
 
@@ -42,6 +42,32 @@ import 'ioredis';
42
42
  */
43
43
  declare function withAutoAppend<TArgs, TResult, TContext extends RouterContext = RouterContext, TToolResponse = unknown>(threadHandler: (id: string, config: ToolResultConfig) => Promise<void>, handler: ActivityToolHandler<TArgs, TResult, TContext, TToolResponse>): ActivityToolHandler<TArgs, TResult, TContext>;
44
44
 
45
+ /**
46
+ * Options for {@link withSandbox}.
47
+ */
48
+ interface WithSandboxOptions {
49
+ /**
50
+ * If `true`, a {@link SandboxNotFoundError} thrown by `manager.getSandbox`
51
+ * is translated into a structured tool-handler response (instead of
52
+ * propagating). This lets the agent return a graceful error to the model
53
+ * rather than crashing the workflow when the backing sandbox has been
54
+ * killed mid-run (e.g. because the E2B `timeoutMs` lifetime elapsed).
55
+ *
56
+ * Off by default to preserve the existing contract for callers that rely
57
+ * on the error bubbling out. New callers should generally enable this in
58
+ * combination with the E2B `keepAliveMs` provider option.
59
+ *
60
+ * @default false
61
+ */
62
+ translateSandboxNotFound?: boolean;
63
+ /**
64
+ * Custom tool response returned to the agent when the backing sandbox
65
+ * is not found and `translateSandboxNotFound` is `true`. Defaults to a
66
+ * generic English message. Use this to localize, match agent persona,
67
+ * or give the model more specific recovery instructions.
68
+ */
69
+ sandboxNotFoundToolResponse?: string;
70
+ }
45
71
  /**
46
72
  * Extended router context with a resolved {@link Sandbox} instance.
47
73
  *
@@ -95,7 +121,7 @@ declare function withSandbox<TArgs, TResult, TSandbox extends Sandbox = Sandbox,
95
121
  }, handler: (args: TArgs, context: RouterContext & {
96
122
  sandbox: TSandbox;
97
123
  sandboxId: string;
98
- }) => Promise<ToolHandlerResponse<TResult, TToolResponse>>): ActivityToolHandler<TArgs, TResult | null, RouterContext, TToolResponse | string>;
124
+ }) => Promise<ToolHandlerResponse<TResult, TToolResponse>>, options?: WithSandboxOptions): ActivityToolHandler<TArgs, TResult | null, RouterContext, TToolResponse | string>;
99
125
 
100
126
  /**
101
127
  * Safely retrieve Temporal activity heartbeat and cancellation signal.
@@ -249,8 +275,16 @@ interface SandboxManagerHooks<TOptions extends SandboxCreateOptions = SandboxCre
249
275
  /**
250
276
  * Stateless facade over a {@link SandboxProvider}.
251
277
  *
252
- * Delegates all lifecycle operations to the provider, which is responsible
253
- * for its own instance management strategy (e.g. in-memory map, remote API).
278
+ * Generic over the same capability set (`TCaps`) as the underlying
279
+ * provider. The manager's lifecycle methods are always present on the
280
+ * class (so existing call sites compile unchanged), but
281
+ * {@link SandboxManager.createActivities} is capability-gated: only
282
+ * activities whose capability the provider declares via
283
+ * {@link SandboxProvider.supportedCapabilities} are wrapped, and the
284
+ * returned object's type omits absent ones.
285
+ *
286
+ * The default `TCaps = SandboxCapability` keeps the full method surface
287
+ * for existing usages that only pass `TOptions` / `TSandbox` / `TId`.
254
288
  *
255
289
  * Optional {@link SandboxManagerHooks} can be passed at construction time.
256
290
  * The `onPreCreate` hook runs inside the `createSandbox` activity, receiving
@@ -288,25 +322,61 @@ interface SandboxManagerHooks<TOptions extends SandboxCreateOptions = SandboxCre
288
322
  * );
289
323
  * ```
290
324
  */
291
- declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCreateOptions, TSandbox extends Sandbox = Sandbox, TId extends string = string, TCtx = unknown> {
325
+ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCreateOptions, TSandbox extends Sandbox = Sandbox, TId extends string = string, TCtx = unknown, TCaps extends SandboxCapability = SandboxCapability> {
292
326
  private provider;
293
327
  private hooks;
294
- constructor(provider: SandboxProvider<TOptions, TSandbox> & {
328
+ constructor(provider: SandboxProvider<TOptions, TSandbox, TCaps> & {
295
329
  readonly id: TId;
296
330
  }, options?: {
297
331
  hooks?: SandboxManagerHooks<TOptions, TCtx>;
298
332
  });
333
+ /**
334
+ * Verifies that the provider's runtime `supportedCapabilities` set is
335
+ * consistent with the gated methods physically present on the provider.
336
+ *
337
+ * Belt-and-suspenders complement to the type-level
338
+ * `ReadonlySet<TCaps & SandboxCapability>` constraint: TypeScript can
339
+ * prevent the runtime set from containing capabilities not declared in
340
+ * `TCaps`, but it cannot detect a provider that **declares** a cap in
341
+ * `TCaps` and forgets to include it in the runtime set (or that ships
342
+ * a method without listing its cap). Both shapes silently break
343
+ * activity registration, so we trip a loud failure at construction
344
+ * time instead.
345
+ *
346
+ * Adapters that derive both surfaces from a single `as const`
347
+ * capability array (the recommended pattern) pass this check by
348
+ * construction.
349
+ */
350
+ private assertCapabilityRuntimeConsistency;
299
351
  create(options?: TOptions, ctx?: TCtx): Promise<{
300
352
  sandboxId: string;
301
353
  } | null>;
302
354
  getSandbox(id: string): Promise<TSandbox>;
303
355
  destroy(id: string): Promise<void>;
356
+ /**
357
+ * Capability-gated lifecycle methods on the underlying provider.
358
+ *
359
+ * These manager methods always exist at runtime; calling one whose
360
+ * capability is absent from the provider's `supportedCapabilities`
361
+ * throws an error. The activities returned from
362
+ * {@link SandboxManager.createActivities} are gated at the type level
363
+ * via `TCaps`, which is where compile-time safety is enforced.
364
+ */
304
365
  pause(id: string, ttlSeconds?: number): Promise<void>;
305
366
  resume(id: string): Promise<void>;
306
367
  snapshot(id: string, options?: TOptions): Promise<SandboxSnapshot>;
307
368
  restore(snapshot: SandboxSnapshot, options?: TOptions): Promise<string>;
308
369
  deleteSnapshot(snapshot: SandboxSnapshot): Promise<void>;
309
370
  fork(sandboxId: string, options?: TOptions): Promise<string>;
371
+ private providerMethod;
372
+ /**
373
+ * Constructs the structured error thrown when an unsupported lifecycle
374
+ * method is invoked through the manager. Uses the public
375
+ * {@link SandboxNotSupportedError} symbol so consumers that catch on
376
+ * `instanceof SandboxNotSupportedError` (the documented compatibility
377
+ * path) keep matching after the refactor.
378
+ */
379
+ private unsupported;
310
380
  /**
311
381
  * Returns Temporal activity functions with prefixed names.
312
382
  *
@@ -314,6 +384,11 @@ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCrea
314
384
  * to pass the workflow/scope name. Use the matching `proxy*SandboxOps()`
315
385
  * helper from the adapter's `/workflow` entrypoint on the workflow side.
316
386
  *
387
+ * Activities are only registered for capabilities the provider declares
388
+ * via {@link SandboxProvider.supportedCapabilities}: methods omitted
389
+ * from the cap set are not wrapped, and the returned object's type
390
+ * omits the corresponding keys.
391
+ *
317
392
  * @param scope - Workflow name (appended to the provider id)
318
393
  *
319
394
  * @example
@@ -324,10 +399,11 @@ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCrea
324
399
  *
325
400
  * const dmgr = new SandboxManager(new DaytonaSandboxProvider(config));
326
401
  * dmgr.createActivities("CodingAgent");
327
- * // registers: daytonaCodingAgentCreateSandbox,
402
+ * // registers: daytonaCodingAgentCreateSandbox, daytonaCodingAgentDestroySandbox
403
+ * // (snapshot/restore/fork/pause/resume omitted — Daytona doesn't declare them)
328
404
  * ```
329
405
  */
330
- createActivities<S extends string>(scope: S): PrefixedSandboxOps<`${TId}${Capitalize<S>}`, TOptions, TCtx>;
406
+ createActivities<S extends string>(scope: S): PrefixedSandboxOps<`${TId}${Capitalize<S>}`, TOptions, TCtx, TCaps>;
331
407
  }
332
408
 
333
409
  /**
@@ -518,4 +594,4 @@ declare const toTree: (fs: SandboxFileSystem, opts?: {
518
594
  sort?: boolean;
519
595
  }) => Promise<string>;
520
596
 
521
- export { ActivityToolHandler, type AgentStateContext, BaseAgentState, BaseThreadManager, BashArgs, ExecResult, FileEditArgs, FileEntryMetadata, FileReadArgs, FileResolver, FileSystemSkillProvider, FileWriteArgs, GlobArgs, JsonValue, NodeFsSandboxFileSystem, type PreCreateHookResult, PrefixedSandboxOps, PrefixedVirtualFsOps, RouterContext, RunAgentConfig, Sandbox, type SandboxContext, SandboxCreateOptions, DirentEntry as SandboxDirentEntry, FileStat as SandboxFileStat, SandboxFileSystem, SandboxManager, type SandboxManagerHooks, SandboxProvider, SandboxSnapshot, Skill, SkillMetadata, SkillProvider, ThreadManagerConfig, ToolHandlerResponse, ToolResultConfig, TreeMutation, VirtualFsContext, bashHandler, createRunAgentActivity, createThreadManager, createVirtualFsActivities, editHandler, getActivityContext, globHandler, queryParentWorkflowState, readFileHandler, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler };
597
+ export { ActivityToolHandler, type AgentStateContext, BaseAgentState, BaseThreadManager, BashArgs, ExecResult, FileEditArgs, FileEntryMetadata, FileReadArgs, FileResolver, FileSystemSkillProvider, FileWriteArgs, GlobArgs, JsonValue, NodeFsSandboxFileSystem, type PreCreateHookResult, PrefixedSandboxOps, PrefixedVirtualFsOps, RouterContext, RunAgentConfig, Sandbox, SandboxCapability, type SandboxContext, SandboxCreateOptions, DirentEntry as SandboxDirentEntry, FileStat as SandboxFileStat, SandboxFileSystem, SandboxManager, type SandboxManagerHooks, SandboxProvider, SandboxSnapshot, Skill, SkillMetadata, SkillProvider, ThreadManagerConfig, ToolHandlerResponse, ToolResultConfig, TreeMutation, VirtualFsContext, type WithSandboxOptions, bashHandler, createRunAgentActivity, createThreadManager, createVirtualFsActivities, editHandler, getActivityContext, globHandler, queryParentWorkflowState, readFileHandler, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler };