zeitlich 0.2.33 → 0.2.34

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 (117) hide show
  1. package/README.md +17 -6
  2. package/dist/{activities-fnX8-vhR.d.cts → activities-JOqPfKP0.d.cts} +2 -2
  3. package/dist/{activities-YBD5BaHh.d.ts → activities-WwMsjRwm.d.ts} +2 -2
  4. package/dist/adapters/sandbox/bedrock/index.cjs +2 -0
  5. package/dist/adapters/sandbox/bedrock/index.cjs.map +1 -1
  6. package/dist/adapters/sandbox/bedrock/index.d.cts +4 -3
  7. package/dist/adapters/sandbox/bedrock/index.d.ts +4 -3
  8. package/dist/adapters/sandbox/bedrock/index.js +2 -0
  9. package/dist/adapters/sandbox/bedrock/index.js.map +1 -1
  10. package/dist/adapters/sandbox/bedrock/workflow.cjs +1 -0
  11. package/dist/adapters/sandbox/bedrock/workflow.cjs.map +1 -1
  12. package/dist/adapters/sandbox/bedrock/workflow.d.cts +2 -2
  13. package/dist/adapters/sandbox/bedrock/workflow.d.ts +2 -2
  14. package/dist/adapters/sandbox/bedrock/workflow.js +1 -0
  15. package/dist/adapters/sandbox/bedrock/workflow.js.map +1 -1
  16. package/dist/adapters/sandbox/daytona/index.cjs +2 -0
  17. package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
  18. package/dist/adapters/sandbox/daytona/index.d.cts +2 -1
  19. package/dist/adapters/sandbox/daytona/index.d.ts +2 -1
  20. package/dist/adapters/sandbox/daytona/index.js +2 -0
  21. package/dist/adapters/sandbox/daytona/index.js.map +1 -1
  22. package/dist/adapters/sandbox/daytona/workflow.cjs +1 -0
  23. package/dist/adapters/sandbox/daytona/workflow.cjs.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/daytona/workflow.js +1 -0
  27. package/dist/adapters/sandbox/daytona/workflow.js.map +1 -1
  28. package/dist/adapters/sandbox/e2b/index.cjs +3 -0
  29. package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
  30. package/dist/adapters/sandbox/e2b/index.d.cts +2 -1
  31. package/dist/adapters/sandbox/e2b/index.d.ts +2 -1
  32. package/dist/adapters/sandbox/e2b/index.js +3 -0
  33. package/dist/adapters/sandbox/e2b/index.js.map +1 -1
  34. package/dist/adapters/sandbox/e2b/workflow.cjs +1 -0
  35. package/dist/adapters/sandbox/e2b/workflow.cjs.map +1 -1
  36. package/dist/adapters/sandbox/e2b/workflow.d.cts +1 -1
  37. package/dist/adapters/sandbox/e2b/workflow.d.ts +1 -1
  38. package/dist/adapters/sandbox/e2b/workflow.js +1 -0
  39. package/dist/adapters/sandbox/e2b/workflow.js.map +1 -1
  40. package/dist/adapters/sandbox/inmemory/index.cjs +2 -0
  41. package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
  42. package/dist/adapters/sandbox/inmemory/index.d.cts +2 -1
  43. package/dist/adapters/sandbox/inmemory/index.d.ts +2 -1
  44. package/dist/adapters/sandbox/inmemory/index.js +2 -0
  45. package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
  46. package/dist/adapters/sandbox/inmemory/workflow.cjs +1 -0
  47. package/dist/adapters/sandbox/inmemory/workflow.cjs.map +1 -1
  48. package/dist/adapters/sandbox/inmemory/workflow.d.cts +1 -1
  49. package/dist/adapters/sandbox/inmemory/workflow.d.ts +1 -1
  50. package/dist/adapters/sandbox/inmemory/workflow.js +1 -0
  51. package/dist/adapters/sandbox/inmemory/workflow.js.map +1 -1
  52. package/dist/adapters/thread/anthropic/index.d.cts +5 -5
  53. package/dist/adapters/thread/anthropic/index.d.ts +5 -5
  54. package/dist/adapters/thread/anthropic/workflow.d.cts +5 -5
  55. package/dist/adapters/thread/anthropic/workflow.d.ts +5 -5
  56. package/dist/adapters/thread/google-genai/index.d.cts +5 -5
  57. package/dist/adapters/thread/google-genai/index.d.ts +5 -5
  58. package/dist/adapters/thread/google-genai/workflow.d.cts +5 -5
  59. package/dist/adapters/thread/google-genai/workflow.d.ts +5 -5
  60. package/dist/adapters/thread/langchain/index.d.cts +5 -5
  61. package/dist/adapters/thread/langchain/index.d.ts +5 -5
  62. package/dist/adapters/thread/langchain/workflow.d.cts +5 -5
  63. package/dist/adapters/thread/langchain/workflow.d.ts +5 -5
  64. package/dist/index.cjs +114 -30
  65. package/dist/index.cjs.map +1 -1
  66. package/dist/index.d.cts +10 -9
  67. package/dist/index.d.ts +10 -9
  68. package/dist/index.js +114 -30
  69. package/dist/index.js.map +1 -1
  70. package/dist/{proxy-CTCYWjkr.d.cts → proxy-BesT2ioL.d.cts} +1 -1
  71. package/dist/{proxy-Br4unLTC.d.ts → proxy-Bz6wXYW-.d.ts} +1 -1
  72. package/dist/{thread-manager-Cv_BR28i.d.cts → thread-manager-CCVAOK8g.d.cts} +1 -1
  73. package/dist/{thread-manager-CUubPYPH.d.cts → thread-manager-Cf_34H8w.d.cts} +1 -1
  74. package/dist/{thread-manager-YJLoc1vH.d.ts → thread-manager-ClKAQx78.d.ts} +1 -1
  75. package/dist/{thread-manager-DKWxHUzD.d.ts → thread-manager-DarJIK_b.d.ts} +1 -1
  76. package/dist/{types-Bpq5fDI5.d.cts → types-BGLW5Zyj.d.ts} +35 -20
  77. package/dist/{types-BxiT8w9d.d.ts → types-BVUmLYpj.d.ts} +1 -1
  78. package/dist/{types-DUvEZSDe.d.cts → types-CBH54cwr.d.cts} +1 -1
  79. package/dist/{types-NJDyMyUx.d.cts → types-DPAZ3KCs.d.cts} +1 -1
  80. package/dist/{types-CheCTLeV.d.ts → types-DlLajQcu.d.cts} +35 -20
  81. package/dist/{types-AujBIMMn.d.cts → types-DxCpFNv_.d.cts} +4 -0
  82. package/dist/{types-AujBIMMn.d.ts → types-DxCpFNv_.d.ts} +4 -0
  83. package/dist/{types-DBk-C8zM.d.ts → types-wiGLvxWf.d.ts} +1 -1
  84. package/dist/{workflow-D9nNERvs.d.ts → workflow-_ZGcacCK.d.ts} +3 -3
  85. package/dist/{workflow-Od9vx5Jk.d.cts → workflow-hocXpLwg.d.cts} +3 -3
  86. package/dist/workflow.cjs +108 -30
  87. package/dist/workflow.cjs.map +1 -1
  88. package/dist/workflow.d.cts +3 -3
  89. package/dist/workflow.d.ts +3 -3
  90. package/dist/workflow.js +108 -30
  91. package/dist/workflow.js.map +1 -1
  92. package/package.json +1 -1
  93. package/src/adapters/sandbox/bedrock/index.ts +4 -0
  94. package/src/adapters/sandbox/bedrock/proxy.ts +1 -0
  95. package/src/adapters/sandbox/daytona/index.ts +4 -0
  96. package/src/adapters/sandbox/daytona/proxy.ts +1 -0
  97. package/src/adapters/sandbox/e2b/index.ts +4 -0
  98. package/src/adapters/sandbox/e2b/proxy.ts +1 -0
  99. package/src/adapters/sandbox/inmemory/index.ts +4 -0
  100. package/src/adapters/sandbox/inmemory/proxy.ts +1 -0
  101. package/src/lib/lifecycle.ts +7 -3
  102. package/src/lib/sandbox/manager.ts +7 -0
  103. package/src/lib/sandbox/types.ts +4 -0
  104. package/src/lib/session/session-edge-cases.integration.test.ts +194 -0
  105. package/src/lib/session/session.integration.test.ts +5 -0
  106. package/src/lib/session/session.ts +9 -0
  107. package/src/lib/session/types.ts +5 -0
  108. package/src/lib/subagent/define.ts +1 -1
  109. package/src/lib/subagent/handler.ts +142 -32
  110. package/src/lib/subagent/index.ts +5 -1
  111. package/src/lib/subagent/signals.ts +8 -1
  112. package/src/lib/subagent/subagent.integration.test.ts +532 -25
  113. package/src/lib/subagent/types.ts +32 -15
  114. package/src/lib/subagent/workflow.ts +26 -13
  115. package/src/lib/virtual-fs/manager.ts +1 -1
  116. package/src/lib/virtual-fs/types.ts +2 -2
  117. package/src/lib/virtual-fs/virtual-fs.test.ts +2 -2
package/dist/index.d.cts CHANGED
@@ -1,12 +1,12 @@
1
- import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-Od9vx5Jk.cjs';
2
- export { A as AskUserQuestionArgs, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as TaskCreateArgs, g as TaskGetArgs, h as TaskListArgs, i as TaskUpdateArgs, j as ToolExecutedEvent, k as TurnCompletedEvent, W as WorkflowConfig, l as WorkflowInput, m as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, n as applyVirtualTreeMutations, o as askUserQuestionTool, p as bashTool, q as composeHooks, r as createAgentStateManager, s as createAskUserQuestionHandler, t as createBashToolDescription, u as createObservabilityHooks, v as createReadSkillHandler, w as createReadSkillTool, x as createSession, y as createTaskCreateHandler, z as createTaskGetHandler, C as createTaskListHandler, D as createTaskUpdateHandler, E as createToolRouter, H as defineSubagent, I as defineSubagentWorkflow, J as defineTool, K as defineWorkflow, L as editTool, M as filesWithMimeType, N as formatVirtualFileTree, P as getShortId, Q as globTool, U as grepTool, V as hasDirectory, X as hasFileWithMimeType, Y as hasNoOtherToolCalls, _ as parseSkillFile, $ as proxyRunAgent, a0 as proxyVirtualFsOps, a1 as readFileTool, a2 as taskCreateTool, a3 as taskGetTool, a4 as taskListTool, a5 as taskUpdateTool, a6 as writeFileTool } from './workflow-Od9vx5Jk.cjs';
3
- import { R as RouterContext, d as ToolResultConfig, c as ActivityToolHandler, J as JsonValue, b as ToolHandlerResponse, B as BaseAgentState, e as RunAgentConfig, f as SkillProvider, g as SkillMetadata, h as Skill, F as FileEntryMetadata, i as FileResolver, V as VirtualFsContext, j as TreeMutation, k as PrefixedVirtualFsOps } from './types-Bpq5fDI5.cjs';
4
- export { l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, r as FileEntry, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, u as ParsedToolCall, v as ParsedToolCallUnion, w as PostHumanMessageAppendHook, x as PostHumanMessageAppendHookContext, y as PostToolUseFailureHook, z as PostToolUseFailureHookContext, C as PostToolUseFailureHookResult, D as PostToolUseHook, E as PostToolUseHookContext, G as PreHumanMessageAppendHook, K as PreHumanMessageAppendHookContext, L as PreToolUseHook, N as PreToolUseHookContext, O as PreToolUseHookResult, P as PrefixedThreadOps, Q as ProcessToolCallsContext, U as RawToolCall, W as RunAgentActivity, X as SandboxInit, Y as SandboxShutdown, S as ScopedPrefix, Z as SerializableToolDefinition, _ as SessionConfig, $ as SessionEndHook, a0 as SessionEndHookContext, a1 as SessionExitReason, a2 as SessionResult, a3 as SessionStartHook, a4 as SessionStartHookContext, a5 as SubagentConfig, a6 as SubagentDefinition, a7 as SubagentFnResult, a8 as SubagentHandlerResponse, a9 as SubagentHooks, aa as SubagentSandboxConfig, ab as SubagentSandboxShutdown, ac as SubagentSessionInput, ad as SubagentWorkflow, ae as SubagentWorkflowInput, af as TaskStatus, ag as ThreadInit, T as ThreadOps, ah as TokenUsage, ai as ToolArgs, aj as ToolCallResult, ak as ToolCallResultUnion, al as ToolDefinition, am as ToolHandler, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, au as VirtualFileSystem, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-Bpq5fDI5.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-AujBIMMn.cjs';
6
- export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-AujBIMMn.cjs';
1
+ import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-hocXpLwg.cjs';
2
+ export { A as AskUserQuestionArgs, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as TaskCreateArgs, g as TaskGetArgs, h as TaskListArgs, i as TaskUpdateArgs, j as ToolExecutedEvent, k as TurnCompletedEvent, W as WorkflowConfig, l as WorkflowInput, m as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, n as applyVirtualTreeMutations, o as askUserQuestionTool, p as bashTool, q as composeHooks, r as createAgentStateManager, s as createAskUserQuestionHandler, t as createBashToolDescription, u as createObservabilityHooks, v as createReadSkillHandler, w as createReadSkillTool, x as createSession, y as createTaskCreateHandler, z as createTaskGetHandler, C as createTaskListHandler, D as createTaskUpdateHandler, E as createToolRouter, H as defineSubagent, I as defineSubagentWorkflow, J as defineTool, K as defineWorkflow, L as editTool, M as filesWithMimeType, N as formatVirtualFileTree, P as getShortId, Q as globTool, U as grepTool, V as hasDirectory, X as hasFileWithMimeType, Y as hasNoOtherToolCalls, _ as parseSkillFile, $ as proxyRunAgent, a0 as proxyVirtualFsOps, a1 as readFileTool, a2 as taskCreateTool, a3 as taskGetTool, a4 as taskListTool, a5 as taskUpdateTool, a6 as writeFileTool } from './workflow-hocXpLwg.cjs';
3
+ import { R as RouterContext, d as ToolResultConfig, c as ActivityToolHandler, J as JsonValue, b as ToolHandlerResponse, B as BaseAgentState, e as RunAgentConfig, f as SkillProvider, g as SkillMetadata, h as Skill, F as FileEntryMetadata, i as FileResolver, V as VirtualFsContext, j as TreeMutation, k as PrefixedVirtualFsOps } from './types-DlLajQcu.cjs';
4
+ export { l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, r as FileEntry, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, u as ParsedToolCall, v as ParsedToolCallUnion, w as PostHumanMessageAppendHook, x as PostHumanMessageAppendHookContext, y as PostToolUseFailureHook, z as PostToolUseFailureHookContext, C as PostToolUseFailureHookResult, D as PostToolUseHook, E as PostToolUseHookContext, G as PreHumanMessageAppendHook, K as PreHumanMessageAppendHookContext, L as PreToolUseHook, N as PreToolUseHookContext, O as PreToolUseHookResult, P as PrefixedThreadOps, Q as ProcessToolCallsContext, U as RawToolCall, W as RunAgentActivity, X as SandboxInit, Y as SandboxShutdown, S as ScopedPrefix, Z as SerializableToolDefinition, _ as SessionConfig, $ as SessionEndHook, a0 as SessionEndHookContext, a1 as SessionExitReason, a2 as SessionResult, a3 as SessionStartHook, a4 as SessionStartHookContext, a5 as SubagentConfig, a6 as SubagentDefinition, a7 as SubagentFnResult, a8 as SubagentHandlerResponse, a9 as SubagentHooks, aa as SubagentSandboxConfig, ab as SubagentSandboxShutdown, ac as SubagentSessionInput, ad as SubagentWorkflow, ae as SubagentWorkflowInput, af as TaskStatus, ag as ThreadInit, T as ThreadOps, ah as TokenUsage, ai as ToolArgs, aj as ToolCallResult, ak as ToolCallResultUnion, al as ToolDefinition, am as ToolHandler, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, au as VirtualFileSystem, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-DlLajQcu.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-DxCpFNv_.cjs';
6
+ export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-DxCpFNv_.cjs';
7
7
  import { WorkflowClient } from '@temporalio/client';
8
- import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-NJDyMyUx.cjs';
9
- export { P as ProviderThreadManager } from './types-NJDyMyUx.cjs';
8
+ import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-DPAZ3KCs.cjs';
9
+ export { P as ProviderThreadManager } from './types-DPAZ3KCs.cjs';
10
10
  import 'zod';
11
11
  import '@temporalio/workflow';
12
12
  import '@temporalio/common';
@@ -297,6 +297,7 @@ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCrea
297
297
  getSandbox(id: string): Promise<TSandbox>;
298
298
  destroy(id: string): Promise<void>;
299
299
  pause(id: string, ttlSeconds?: number): Promise<void>;
300
+ resume(id: string): Promise<void>;
300
301
  snapshot(id: string): Promise<SandboxSnapshot>;
301
302
  restore(snapshot: SandboxSnapshot): Promise<string>;
302
303
  fork(sandboxId: string): Promise<string>;
@@ -416,7 +417,7 @@ declare function withVirtualFs<TArgs, TResult, TCtx, TMeta = FileEntryMetadata,
416
417
  * const activities = {
417
418
  * ...createVirtualFsActivities(resolver, "CodingAgent"),
418
419
  * };
419
- * // registers: codingAgentResolveFileTree
420
+ * // registers: virtualFsCodingAgentResolveFileTree
420
421
  * ```
421
422
  */
422
423
  declare function createVirtualFsActivities<S extends string, TCtx = unknown, TMeta = FileEntryMetadata>(resolver: FileResolver<TCtx, TMeta>, scope: S): PrefixedVirtualFsOps<S, TCtx, TMeta>;
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-D9nNERvs.js';
2
- export { A as AskUserQuestionArgs, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as TaskCreateArgs, g as TaskGetArgs, h as TaskListArgs, i as TaskUpdateArgs, j as ToolExecutedEvent, k as TurnCompletedEvent, W as WorkflowConfig, l as WorkflowInput, m as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, n as applyVirtualTreeMutations, o as askUserQuestionTool, p as bashTool, q as composeHooks, r as createAgentStateManager, s as createAskUserQuestionHandler, t as createBashToolDescription, u as createObservabilityHooks, v as createReadSkillHandler, w as createReadSkillTool, x as createSession, y as createTaskCreateHandler, z as createTaskGetHandler, C as createTaskListHandler, D as createTaskUpdateHandler, E as createToolRouter, H as defineSubagent, I as defineSubagentWorkflow, J as defineTool, K as defineWorkflow, L as editTool, M as filesWithMimeType, N as formatVirtualFileTree, P as getShortId, Q as globTool, U as grepTool, V as hasDirectory, X as hasFileWithMimeType, Y as hasNoOtherToolCalls, _ as parseSkillFile, $ as proxyRunAgent, a0 as proxyVirtualFsOps, a1 as readFileTool, a2 as taskCreateTool, a3 as taskGetTool, a4 as taskListTool, a5 as taskUpdateTool, a6 as writeFileTool } from './workflow-D9nNERvs.js';
3
- import { R as RouterContext, d as ToolResultConfig, c as ActivityToolHandler, J as JsonValue, b as ToolHandlerResponse, B as BaseAgentState, e as RunAgentConfig, f as SkillProvider, g as SkillMetadata, h as Skill, F as FileEntryMetadata, i as FileResolver, V as VirtualFsContext, j as TreeMutation, k as PrefixedVirtualFsOps } from './types-CheCTLeV.js';
4
- export { l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, r as FileEntry, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, u as ParsedToolCall, v as ParsedToolCallUnion, w as PostHumanMessageAppendHook, x as PostHumanMessageAppendHookContext, y as PostToolUseFailureHook, z as PostToolUseFailureHookContext, C as PostToolUseFailureHookResult, D as PostToolUseHook, E as PostToolUseHookContext, G as PreHumanMessageAppendHook, K as PreHumanMessageAppendHookContext, L as PreToolUseHook, N as PreToolUseHookContext, O as PreToolUseHookResult, P as PrefixedThreadOps, Q as ProcessToolCallsContext, U as RawToolCall, W as RunAgentActivity, X as SandboxInit, Y as SandboxShutdown, S as ScopedPrefix, Z as SerializableToolDefinition, _ as SessionConfig, $ as SessionEndHook, a0 as SessionEndHookContext, a1 as SessionExitReason, a2 as SessionResult, a3 as SessionStartHook, a4 as SessionStartHookContext, a5 as SubagentConfig, a6 as SubagentDefinition, a7 as SubagentFnResult, a8 as SubagentHandlerResponse, a9 as SubagentHooks, aa as SubagentSandboxConfig, ab as SubagentSandboxShutdown, ac as SubagentSessionInput, ad as SubagentWorkflow, ae as SubagentWorkflowInput, af as TaskStatus, ag as ThreadInit, T as ThreadOps, ah as TokenUsage, ai as ToolArgs, aj as ToolCallResult, ak as ToolCallResultUnion, al as ToolDefinition, am as ToolHandler, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, au as VirtualFileSystem, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-CheCTLeV.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-AujBIMMn.js';
6
- export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-AujBIMMn.js';
1
+ import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-_ZGcacCK.js';
2
+ export { A as AskUserQuestionArgs, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as TaskCreateArgs, g as TaskGetArgs, h as TaskListArgs, i as TaskUpdateArgs, j as ToolExecutedEvent, k as TurnCompletedEvent, W as WorkflowConfig, l as WorkflowInput, m as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, n as applyVirtualTreeMutations, o as askUserQuestionTool, p as bashTool, q as composeHooks, r as createAgentStateManager, s as createAskUserQuestionHandler, t as createBashToolDescription, u as createObservabilityHooks, v as createReadSkillHandler, w as createReadSkillTool, x as createSession, y as createTaskCreateHandler, z as createTaskGetHandler, C as createTaskListHandler, D as createTaskUpdateHandler, E as createToolRouter, H as defineSubagent, I as defineSubagentWorkflow, J as defineTool, K as defineWorkflow, L as editTool, M as filesWithMimeType, N as formatVirtualFileTree, P as getShortId, Q as globTool, U as grepTool, V as hasDirectory, X as hasFileWithMimeType, Y as hasNoOtherToolCalls, _ as parseSkillFile, $ as proxyRunAgent, a0 as proxyVirtualFsOps, a1 as readFileTool, a2 as taskCreateTool, a3 as taskGetTool, a4 as taskListTool, a5 as taskUpdateTool, a6 as writeFileTool } from './workflow-_ZGcacCK.js';
3
+ import { R as RouterContext, d as ToolResultConfig, c as ActivityToolHandler, J as JsonValue, b as ToolHandlerResponse, B as BaseAgentState, e as RunAgentConfig, f as SkillProvider, g as SkillMetadata, h as Skill, F as FileEntryMetadata, i as FileResolver, V as VirtualFsContext, j as TreeMutation, k as PrefixedVirtualFsOps } from './types-BGLW5Zyj.js';
4
+ export { l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, r as FileEntry, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, u as ParsedToolCall, v as ParsedToolCallUnion, w as PostHumanMessageAppendHook, x as PostHumanMessageAppendHookContext, y as PostToolUseFailureHook, z as PostToolUseFailureHookContext, C as PostToolUseFailureHookResult, D as PostToolUseHook, E as PostToolUseHookContext, G as PreHumanMessageAppendHook, K as PreHumanMessageAppendHookContext, L as PreToolUseHook, N as PreToolUseHookContext, O as PreToolUseHookResult, P as PrefixedThreadOps, Q as ProcessToolCallsContext, U as RawToolCall, W as RunAgentActivity, X as SandboxInit, Y as SandboxShutdown, S as ScopedPrefix, Z as SerializableToolDefinition, _ as SessionConfig, $ as SessionEndHook, a0 as SessionEndHookContext, a1 as SessionExitReason, a2 as SessionResult, a3 as SessionStartHook, a4 as SessionStartHookContext, a5 as SubagentConfig, a6 as SubagentDefinition, a7 as SubagentFnResult, a8 as SubagentHandlerResponse, a9 as SubagentHooks, aa as SubagentSandboxConfig, ab as SubagentSandboxShutdown, ac as SubagentSessionInput, ad as SubagentWorkflow, ae as SubagentWorkflowInput, af as TaskStatus, ag as ThreadInit, T as ThreadOps, ah as TokenUsage, ai as ToolArgs, aj as ToolCallResult, ak as ToolCallResultUnion, al as ToolDefinition, am as ToolHandler, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, au as VirtualFileSystem, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-BGLW5Zyj.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-DxCpFNv_.js';
6
+ export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-DxCpFNv_.js';
7
7
  import { WorkflowClient } from '@temporalio/client';
8
- import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-BxiT8w9d.js';
9
- export { P as ProviderThreadManager } from './types-BxiT8w9d.js';
8
+ import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-BVUmLYpj.js';
9
+ export { P as ProviderThreadManager } from './types-BVUmLYpj.js';
10
10
  import 'zod';
11
11
  import '@temporalio/workflow';
12
12
  import '@temporalio/common';
@@ -297,6 +297,7 @@ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCrea
297
297
  getSandbox(id: string): Promise<TSandbox>;
298
298
  destroy(id: string): Promise<void>;
299
299
  pause(id: string, ttlSeconds?: number): Promise<void>;
300
+ resume(id: string): Promise<void>;
300
301
  snapshot(id: string): Promise<SandboxSnapshot>;
301
302
  restore(snapshot: SandboxSnapshot): Promise<string>;
302
303
  fork(sandboxId: string): Promise<string>;
@@ -416,7 +417,7 @@ declare function withVirtualFs<TArgs, TResult, TCtx, TMeta = FileEntryMetadata,
416
417
  * const activities = {
417
418
  * ...createVirtualFsActivities(resolver, "CodingAgent"),
418
419
  * };
419
- * // registers: codingAgentResolveFileTree
420
+ * // registers: virtualFsCodingAgentResolveFileTree
420
421
  * ```
421
422
  */
422
423
  declare function createVirtualFsActivities<S extends string, TCtx = unknown, TMeta = FileEntryMetadata>(resolver: FileResolver<TCtx, TMeta>, scope: S): PrefixedVirtualFsOps<S, TCtx, TMeta>;
package/dist/index.js CHANGED
@@ -390,23 +390,50 @@ function createSubagentTool(subagents) {
390
390
  };
391
391
  }
392
392
  var childResultSignal = defineSignal("childResult");
393
+ var childSandboxReadySignal = defineSignal("childSandboxReady");
393
394
  var destroySandboxSignal = defineSignal("destroySandbox");
394
395
 
395
396
  // src/lib/subagent/handler.ts
396
397
  function resolveSandboxConfig(config) {
397
- if (!config || config === "none") return { source: "none" };
398
- if (config === "inherit") return { source: "inherit" };
399
- if (config === "own") return { source: "own" };
400
- return { source: "own", shutdown: config.shutdown };
398
+ if (!config || config === "none") {
399
+ return { source: "none", init: "per-call", continuation: "fork" };
400
+ }
401
+ if (config.source === "inherit") {
402
+ return {
403
+ source: "inherit",
404
+ init: "per-call",
405
+ continuation: config.continuation,
406
+ shutdown: config.shutdown
407
+ };
408
+ }
409
+ return {
410
+ source: "own",
411
+ init: config.init ?? "per-call",
412
+ continuation: config.continuation,
413
+ shutdown: config.shutdown
414
+ };
401
415
  }
402
416
  function createSubagentHandler(subagents) {
403
417
  const { taskQueue: parentTaskQueue } = workflowInfo();
404
418
  const childResults = /* @__PURE__ */ new Map();
405
419
  const pendingDestroys = /* @__PURE__ */ new Map();
406
420
  const threadSandboxes = /* @__PURE__ */ new Map();
421
+ const persistentSandboxes = /* @__PURE__ */ new Map();
422
+ const persistentSandboxCreating = /* @__PURE__ */ new Set();
423
+ const lazyCreatorAgent = /* @__PURE__ */ new Map();
407
424
  setHandler(childResultSignal, ({ childWorkflowId, result }) => {
408
425
  childResults.set(childWorkflowId, result);
409
426
  });
427
+ setHandler(
428
+ childSandboxReadySignal,
429
+ ({ childWorkflowId, sandboxId }) => {
430
+ const agentName = lazyCreatorAgent.get(childWorkflowId);
431
+ if (agentName && !persistentSandboxes.has(agentName)) {
432
+ persistentSandboxes.set(agentName, sandboxId);
433
+ lazyCreatorAgent.delete(childWorkflowId);
434
+ }
435
+ }
436
+ );
410
437
  const handler = async (args, context) => {
411
438
  const config = subagents.find((s) => s.agentName === args.subagent);
412
439
  if (!config) {
@@ -433,21 +460,48 @@ function createSubagentHandler(subagents) {
433
460
  };
434
461
  }
435
462
  let sandbox;
463
+ let sandboxShutdownOverride;
464
+ let isLazyCreator = false;
436
465
  if (sandboxCfg.source === "inherit" && parentSandboxId) {
437
- sandbox = {
438
- mode: "inherit",
439
- sandboxId: parentSandboxId
440
- };
466
+ if (sandboxCfg.continuation === "fork") {
467
+ sandbox = { mode: "fork", sandboxId: parentSandboxId };
468
+ } else {
469
+ sandbox = { mode: "inherit", sandboxId: parentSandboxId };
470
+ }
441
471
  } else if (sandboxCfg.source === "own") {
442
- const prevSbId = continuationThreadId ? threadSandboxes.get(continuationThreadId) : void 0;
443
- if (prevSbId) {
444
- sandbox = { mode: "fork", sandboxId: prevSbId };
472
+ const isLazy = sandboxCfg.init === "once";
473
+ let baseSandboxId;
474
+ if (isLazy) {
475
+ baseSandboxId = persistentSandboxes.get(config.agentName);
476
+ if (!baseSandboxId) {
477
+ if (persistentSandboxCreating.has(config.agentName)) {
478
+ await condition(() => persistentSandboxes.has(config.agentName));
479
+ baseSandboxId = persistentSandboxes.get(config.agentName);
480
+ } else {
481
+ persistentSandboxCreating.add(config.agentName);
482
+ isLazyCreator = true;
483
+ }
484
+ }
485
+ } else if (continuationThreadId) {
486
+ baseSandboxId = threadSandboxes.get(continuationThreadId);
487
+ }
488
+ if (baseSandboxId) {
489
+ sandbox = {
490
+ mode: sandboxCfg.continuation === "continue" ? "continue" : "fork",
491
+ sandboxId: baseSandboxId
492
+ };
493
+ }
494
+ const userShutdown = sandboxCfg.shutdown;
495
+ const alreadySurvives = userShutdown === "pause-until-parent-close" || userShutdown === "keep-until-parent-close" || userShutdown === "pause" || userShutdown === "keep";
496
+ const mustSurvive = isLazyCreator || sandboxCfg.continuation === "continue" || isLazy && sandboxCfg.continuation === "fork";
497
+ if (mustSurvive && !alreadySurvives) {
498
+ sandboxShutdownOverride = isLazyCreator ? "pause-until-parent-close" : "pause";
445
499
  }
446
500
  }
447
501
  const workflowInput = {
448
502
  ...thread && { thread },
449
503
  ...sandbox && { sandbox },
450
- ...sandboxCfg.shutdown && { sandboxShutdown: sandboxCfg.shutdown }
504
+ sandboxShutdown: sandboxShutdownOverride ?? sandboxCfg.shutdown ?? void 0
451
505
  };
452
506
  const resolvedContext = config.context === void 0 ? void 0 : typeof config.context === "function" ? config.context() : config.context;
453
507
  const childOpts = {
@@ -455,6 +509,9 @@ function createSubagentHandler(subagents) {
455
509
  args: resolvedContext === void 0 ? [args.prompt, workflowInput] : [args.prompt, workflowInput, resolvedContext],
456
510
  taskQueue: config.taskQueue ?? parentTaskQueue
457
511
  };
512
+ if (isLazyCreator) {
513
+ lazyCreatorAgent.set(childWorkflowId, config.agentName);
514
+ }
458
515
  log.info("subagent spawned", {
459
516
  subagent: config.agentName,
460
517
  childWorkflowId,
@@ -462,10 +519,10 @@ function createSubagentHandler(subagents) {
462
519
  sandboxSource: sandboxCfg.source
463
520
  });
464
521
  const childHandle = await startChild(config.workflow, childOpts);
465
- const effectiveShutdown = sandboxCfg.shutdown ?? "destroy";
466
- const shouldDeferDestroy = effectiveShutdown === "pause-until-parent-close" && (sandboxCfg.source === "own" || allowsContinuation && sandboxCfg.source !== "inherit");
467
- if (shouldDeferDestroy) {
468
- pendingDestroys.set(childWorkflowId, childHandle);
522
+ const effectiveShutdown = sandboxShutdownOverride ?? sandboxCfg.shutdown ?? "destroy";
523
+ if (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close") {
524
+ const key = isLazyCreator ? `persistent:${config.agentName}` : childWorkflowId;
525
+ pendingDestroys.set(key, childHandle);
469
526
  }
470
527
  await Promise.race([
471
528
  condition(() => childResults.has(childWorkflowId)),
@@ -499,8 +556,16 @@ function createSubagentHandler(subagents) {
499
556
  sandboxId: childSandboxId,
500
557
  metadata
501
558
  } = childResult;
502
- if (allowsContinuation && childSandboxId && childThreadId) {
503
- threadSandboxes.set(childThreadId, childSandboxId);
559
+ if (childSandboxId) {
560
+ if (sandboxCfg.source === "own" && sandboxCfg.init === "once" && !persistentSandboxes.has(config.agentName)) {
561
+ persistentSandboxes.set(config.agentName, childSandboxId);
562
+ } else if (allowsContinuation && childThreadId) {
563
+ threadSandboxes.set(childThreadId, childSandboxId);
564
+ }
565
+ }
566
+ if (isLazyCreator) {
567
+ persistentSandboxCreating.delete(config.agentName);
568
+ lazyCreatorAgent.delete(childWorkflowId);
504
569
  }
505
570
  if (!toolResponse) {
506
571
  return {
@@ -706,6 +771,7 @@ async function createSession({
706
771
  thread: threadInit,
707
772
  sandbox: sandboxInit,
708
773
  sandboxShutdown = "destroy",
774
+ onSandboxReady,
709
775
  virtualFs: virtualFsConfig,
710
776
  virtualFsOps
711
777
  }) {
@@ -808,6 +874,9 @@ async function createSession({
808
874
  });
809
875
  }
810
876
  sandboxId = sandboxInit.sandboxId;
877
+ if (sandboxShutdown === "pause-until-parent-close") {
878
+ await sandboxOps.resumeSandbox(sandboxId);
879
+ }
811
880
  sandboxOwned = true;
812
881
  } else if (sandboxMode === "fork") {
813
882
  if (!sandboxOps) {
@@ -830,6 +899,9 @@ async function createSession({
830
899
  sandboxOwned = true;
831
900
  }
832
901
  }
902
+ if (sandboxId && onSandboxReady) {
903
+ onSandboxReady(sandboxId);
904
+ }
833
905
  if (virtualFsConfig) {
834
906
  if (!virtualFsOps) {
835
907
  throw ApplicationFailure.create({
@@ -1299,39 +1371,45 @@ function defineSubagent(definition, overrides) {
1299
1371
  function defineSubagentWorkflow(config, fn) {
1300
1372
  const workflow = async (prompt, workflowInput, context) => {
1301
1373
  const effectiveShutdown = workflowInput.sandboxShutdown ?? config.sandboxShutdown ?? "destroy";
1374
+ const { parent } = workflowInfo();
1375
+ if (!parent) {
1376
+ throw ApplicationFailure.create({
1377
+ message: "Subagent workflow called without a parent workflow",
1378
+ nonRetryable: true
1379
+ });
1380
+ }
1381
+ const parentHandle = getExternalWorkflowHandle(parent.workflowId);
1302
1382
  const sessionInput = {
1303
1383
  agentName: config.name,
1304
1384
  sandboxShutdown: effectiveShutdown,
1305
1385
  ...workflowInput.thread && { thread: workflowInput.thread },
1306
- ...workflowInput.sandbox && { sandbox: workflowInput.sandbox }
1386
+ ...workflowInput.sandbox && { sandbox: workflowInput.sandbox },
1387
+ onSandboxReady: (sandboxId) => {
1388
+ void parentHandle.signal(childSandboxReadySignal, {
1389
+ childWorkflowId: workflowInfo().workflowId,
1390
+ sandboxId
1391
+ });
1392
+ }
1307
1393
  };
1308
1394
  const { destroySandbox, ...result } = await fn(
1309
1395
  prompt,
1310
1396
  sessionInput,
1311
1397
  context ?? {}
1312
1398
  );
1313
- if (effectiveShutdown === "pause-until-parent-close") {
1399
+ if (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close") {
1314
1400
  if (!destroySandbox) {
1315
1401
  throw ApplicationFailure.create({
1316
- message: `Subagent "${config.name}" has sandboxShutdown="pause-until-parent-close" but fn did not return a destroySandbox callback`,
1402
+ message: `Subagent "${config.name}" has sandboxShutdown="${effectiveShutdown}" but fn did not return a destroySandbox callback`,
1317
1403
  nonRetryable: true
1318
1404
  });
1319
1405
  }
1320
1406
  if (!result.sandboxId) {
1321
1407
  throw ApplicationFailure.create({
1322
- message: `Subagent "${config.name}" has sandboxShutdown="pause-until-parent-close" but fn did not return a sandboxId`,
1408
+ message: `Subagent "${config.name}" has sandboxShutdown="${effectiveShutdown}" but fn did not return a sandboxId`,
1323
1409
  nonRetryable: true
1324
1410
  });
1325
1411
  }
1326
1412
  }
1327
- const { parent } = workflowInfo();
1328
- if (!parent) {
1329
- throw ApplicationFailure.create({
1330
- message: "Subagent workflow called without a parent workflow",
1331
- nonRetryable: true
1332
- });
1333
- }
1334
- const parentHandle = getExternalWorkflowHandle(parent.workflowId);
1335
1413
  await parentHandle.signal(childResultSignal, {
1336
1414
  childWorkflowId: workflowInfo().workflowId,
1337
1415
  result
@@ -2262,6 +2340,9 @@ var SandboxManager = class {
2262
2340
  async pause(id, ttlSeconds) {
2263
2341
  await this.provider.pause(id, ttlSeconds);
2264
2342
  }
2343
+ async resume(id) {
2344
+ await this.provider.resume(id);
2345
+ }
2265
2346
  async snapshot(id) {
2266
2347
  return this.provider.snapshot(id);
2267
2348
  }
@@ -2305,6 +2386,9 @@ var SandboxManager = class {
2305
2386
  pauseSandbox: async (sandboxId, ttlSeconds) => {
2306
2387
  await this.pause(sandboxId, ttlSeconds);
2307
2388
  },
2389
+ resumeSandbox: async (sandboxId) => {
2390
+ await this.resume(sandboxId);
2391
+ },
2308
2392
  snapshotSandbox: async (sandboxId) => {
2309
2393
  return this.snapshot(sandboxId);
2310
2394
  },