zeitlich 0.2.36 → 0.2.37
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.
- package/README.md +146 -92
- package/dist/{activities-BVI2lTwr.d.ts → activities-Bb-nAjwQ.d.ts} +2 -2
- package/dist/{activities-hd4aNnZE.d.cts → activities-vkI4_3CC.d.cts} +2 -2
- package/dist/adapters/sandbox/bedrock/index.cjs +14 -11
- package/dist/adapters/sandbox/bedrock/index.cjs.map +1 -1
- package/dist/adapters/sandbox/bedrock/index.d.cts +4 -3
- package/dist/adapters/sandbox/bedrock/index.d.ts +4 -3
- package/dist/adapters/sandbox/bedrock/index.js +14 -11
- package/dist/adapters/sandbox/bedrock/index.js.map +1 -1
- package/dist/adapters/sandbox/bedrock/workflow.cjs +2 -0
- package/dist/adapters/sandbox/bedrock/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/bedrock/workflow.d.cts +2 -2
- package/dist/adapters/sandbox/bedrock/workflow.d.ts +2 -2
- package/dist/adapters/sandbox/bedrock/workflow.js +2 -0
- package/dist/adapters/sandbox/bedrock/workflow.js.map +1 -1
- package/dist/adapters/sandbox/daytona/index.cjs +8 -0
- package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/index.d.cts +2 -1
- package/dist/adapters/sandbox/daytona/index.d.ts +2 -1
- package/dist/adapters/sandbox/daytona/index.js +8 -0
- package/dist/adapters/sandbox/daytona/index.js.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.cjs +2 -0
- package/dist/adapters/sandbox/daytona/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/daytona/workflow.js +2 -0
- package/dist/adapters/sandbox/daytona/workflow.js.map +1 -1
- package/dist/adapters/sandbox/e2b/index.cjs +59 -10
- package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/index.d.cts +5 -3
- package/dist/adapters/sandbox/e2b/index.d.ts +5 -3
- package/dist/adapters/sandbox/e2b/index.js +59 -10
- package/dist/adapters/sandbox/e2b/index.js.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.cjs +2 -0
- package/dist/adapters/sandbox/e2b/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/e2b/workflow.js +2 -0
- package/dist/adapters/sandbox/e2b/workflow.js.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.cjs +5 -0
- package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.d.cts +2 -1
- package/dist/adapters/sandbox/inmemory/index.d.ts +2 -1
- package/dist/adapters/sandbox/inmemory/index.js +5 -0
- package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.cjs +2 -0
- package/dist/adapters/sandbox/inmemory/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.js +2 -0
- package/dist/adapters/sandbox/inmemory/workflow.js.map +1 -1
- package/dist/adapters/thread/anthropic/index.cjs +71 -36
- package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/index.d.cts +5 -5
- package/dist/adapters/thread/anthropic/index.d.ts +5 -5
- package/dist/adapters/thread/anthropic/index.js +71 -36
- package/dist/adapters/thread/anthropic/index.js.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.cjs +5 -1
- package/dist/adapters/thread/anthropic/workflow.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.d.cts +5 -5
- package/dist/adapters/thread/anthropic/workflow.d.ts +5 -5
- package/dist/adapters/thread/anthropic/workflow.js +5 -1
- package/dist/adapters/thread/anthropic/workflow.js.map +1 -1
- package/dist/adapters/thread/google-genai/index.cjs +50 -25
- package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/index.d.cts +5 -5
- package/dist/adapters/thread/google-genai/index.d.ts +5 -5
- package/dist/adapters/thread/google-genai/index.js +50 -25
- package/dist/adapters/thread/google-genai/index.js.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.cjs +5 -1
- package/dist/adapters/thread/google-genai/workflow.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.d.cts +5 -5
- package/dist/adapters/thread/google-genai/workflow.d.ts +5 -5
- package/dist/adapters/thread/google-genai/workflow.js +5 -1
- package/dist/adapters/thread/google-genai/workflow.js.map +1 -1
- package/dist/adapters/thread/langchain/index.cjs +34 -7
- package/dist/adapters/thread/langchain/index.cjs.map +1 -1
- package/dist/adapters/thread/langchain/index.d.cts +5 -5
- package/dist/adapters/thread/langchain/index.d.ts +5 -5
- package/dist/adapters/thread/langchain/index.js +34 -7
- package/dist/adapters/thread/langchain/index.js.map +1 -1
- package/dist/adapters/thread/langchain/workflow.cjs +5 -1
- package/dist/adapters/thread/langchain/workflow.cjs.map +1 -1
- package/dist/adapters/thread/langchain/workflow.d.cts +5 -5
- package/dist/adapters/thread/langchain/workflow.d.ts +5 -5
- package/dist/adapters/thread/langchain/workflow.js +5 -1
- package/dist/adapters/thread/langchain/workflow.js.map +1 -1
- package/dist/index.cjs +206 -120
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -11
- package/dist/index.d.ts +17 -11
- package/dist/index.js +207 -121
- package/dist/index.js.map +1 -1
- package/dist/{proxy-BjdFGPTm.d.ts → proxy-0smGKvx8.d.ts} +1 -1
- package/dist/{proxy-7RnVaPdJ.d.cts → proxy-DEtowJyd.d.cts} +1 -1
- package/dist/{thread-manager-DjN5JYul.d.ts → thread-manager-3fszQih4.d.ts} +2 -2
- package/dist/{thread-manager-CbpiGq1L.d.ts → thread-manager-C-C4pI2z.d.ts} +2 -2
- package/dist/{thread-manager-BBzNgQWH.d.cts → thread-manager-CzYln2OC.d.cts} +2 -2
- package/dist/{thread-manager-DzXm9eeI.d.cts → thread-manager-D4vgzYrh.d.cts} +2 -2
- package/dist/{types-yiXmqedU.d.ts → types-B37hKoWA.d.ts} +1 -1
- package/dist/{types-DQ1l_gXL.d.cts → types-BO7Yju20.d.cts} +63 -14
- package/dist/{types-wiGLvxWf.d.ts → types-CNuWnvy9.d.ts} +1 -1
- package/dist/{types-CADc5V_P.d.ts → types-CPKDl-y_.d.ts} +63 -14
- package/dist/{types-Mc_4BCfT.d.cts → types-D08CXPh8.d.cts} +1 -1
- package/dist/{types-CBH54cwr.d.cts → types-DWEUmYAJ.d.cts} +1 -1
- package/dist/{types-DxCpFNv_.d.cts → types-tQL9njTu.d.cts} +25 -0
- package/dist/{types-DxCpFNv_.d.ts → types-tQL9njTu.d.ts} +25 -0
- package/dist/{workflow-P2pTSfKu.d.ts → workflow-CjXHbZZc.d.ts} +2 -2
- package/dist/{workflow-DhtWRovz.d.cts → workflow-Do_lzJpT.d.cts} +2 -2
- package/dist/workflow.cjs +182 -114
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +3 -3
- package/dist/workflow.d.ts +3 -3
- package/dist/workflow.js +183 -115
- package/dist/workflow.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/sandbox/bedrock/filesystem.ts +6 -12
- package/src/adapters/sandbox/bedrock/index.ts +10 -8
- package/src/adapters/sandbox/bedrock/proxy.ts +2 -0
- package/src/adapters/sandbox/daytona/index.ts +6 -0
- package/src/adapters/sandbox/daytona/proxy.ts +2 -0
- package/src/adapters/sandbox/e2b/filesystem.ts +5 -4
- package/src/adapters/sandbox/e2b/index.ts +63 -12
- package/src/adapters/sandbox/e2b/proxy.ts +2 -0
- package/src/adapters/sandbox/inmemory/index.ts +5 -0
- package/src/adapters/sandbox/inmemory/proxy.ts +2 -0
- package/src/adapters/thread/anthropic/activities.ts +49 -26
- package/src/adapters/thread/anthropic/model-invoker.ts +15 -6
- package/src/adapters/thread/anthropic/proxy.ts +6 -2
- package/src/adapters/thread/anthropic/thread-manager.test.ts +26 -7
- package/src/adapters/thread/anthropic/thread-manager.ts +60 -46
- package/src/adapters/thread/google-genai/activities.ts +7 -2
- package/src/adapters/thread/google-genai/model-invoker.ts +26 -8
- package/src/adapters/thread/google-genai/proxy.ts +6 -2
- package/src/adapters/thread/google-genai/thread-manager.test.ts +13 -3
- package/src/adapters/thread/google-genai/thread-manager.ts +54 -33
- package/src/adapters/thread/langchain/activities.ts +46 -24
- package/src/adapters/thread/langchain/hooks.test.ts +36 -49
- package/src/adapters/thread/langchain/hooks.ts +18 -5
- package/src/adapters/thread/langchain/model-invoker.ts +3 -3
- package/src/adapters/thread/langchain/proxy.ts +6 -2
- package/src/adapters/thread/langchain/thread-manager.test.ts +5 -1
- package/src/adapters/thread/langchain/thread-manager.ts +20 -9
- package/src/index.ts +4 -1
- package/src/lib/activity.ts +16 -6
- package/src/lib/hooks/types.ts +6 -6
- package/src/lib/lifecycle.ts +9 -1
- package/src/lib/model/proxy.ts +2 -2
- package/src/lib/observability/hooks.ts +4 -5
- package/src/lib/observability/index.ts +1 -4
- package/src/lib/sandbox/manager.ts +21 -4
- package/src/lib/sandbox/node-fs.ts +3 -6
- package/src/lib/sandbox/sandbox.test.ts +36 -3
- package/src/lib/sandbox/tree.integration.test.ts +10 -3
- package/src/lib/sandbox/types.ts +35 -1
- package/src/lib/session/session-edge-cases.integration.test.ts +51 -13
- package/src/lib/session/session.integration.test.ts +139 -0
- package/src/lib/session/session.ts +50 -19
- package/src/lib/session/types.ts +13 -5
- package/src/lib/skills/fs-provider.ts +12 -8
- package/src/lib/skills/handler.ts +1 -1
- package/src/lib/skills/parse.ts +3 -1
- package/src/lib/skills/register.ts +1 -3
- package/src/lib/skills/skills.integration.test.ts +25 -15
- package/src/lib/state/manager.integration.test.ts +12 -2
- package/src/lib/subagent/define.ts +1 -1
- package/src/lib/subagent/handler.ts +186 -71
- package/src/lib/subagent/index.ts +1 -5
- package/src/lib/subagent/register.ts +3 -2
- package/src/lib/subagent/signals.ts +1 -10
- package/src/lib/subagent/subagent.integration.test.ts +438 -156
- package/src/lib/subagent/tool.ts +4 -3
- package/src/lib/subagent/types.ts +50 -20
- package/src/lib/subagent/workflow.ts +9 -49
- package/src/lib/thread/id.test.ts +1 -1
- package/src/lib/thread/id.ts +1 -2
- package/src/lib/thread/proxy.ts +3 -4
- package/src/lib/thread/types.ts +11 -3
- package/src/lib/tool-router/index.ts +1 -5
- package/src/lib/tool-router/router-edge-cases.integration.test.ts +1 -1
- package/src/lib/tool-router/router.ts +3 -2
- package/src/lib/tool-router/types.ts +11 -3
- package/src/lib/tool-router/with-sandbox.ts +19 -5
- package/src/lib/virtual-fs/filesystem.ts +1 -1
- package/src/lib/virtual-fs/index.ts +5 -1
- package/src/lib/virtual-fs/mutations.ts +2 -4
- package/src/lib/virtual-fs/queries.ts +9 -5
- package/src/lib/virtual-fs/types.ts +4 -1
- package/src/lib/virtual-fs/virtual-fs.test.ts +9 -11
- package/src/lib/workflow.test.ts +7 -4
- package/src/lib/workflow.ts +1 -5
- package/src/tools/ask-user-question/tool.ts +1 -3
- package/src/tools/glob/handler.ts +1 -4
- package/src/tools/task-get/handler.ts +4 -5
- package/src/tools/task-list/handler.ts +1 -4
- package/src/tools/task-update/handler.ts +4 -5
- package/src/workflow.ts +20 -7
- package/tsup.config.ts +9 -6
- package/src/lib/.env +0 -1
- package/src/tools/bash/.env +0 -1
package/dist/workflow.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { A as AskUserQuestionArgs, B as BashArgs, F as FileEditArgs, a as FileReadArgs, b as FileWriteArgs, G as GlobArgs, 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-
|
|
2
|
-
export { c as ActivityToolHandler, l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, B as BaseAgentState, r as FileEntry, F as FileEntryMetadata, i as FileResolver, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, J as JsonValue, 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, k as PrefixedVirtualFsOps, Q as ProcessToolCallsContext, U as RawToolCall, R as RouterContext, W as RunAgentActivity, e as RunAgentConfig, 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, h as Skill, g as SkillMetadata, f as SkillProvider, 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, b as ToolHandlerResponse, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, d as ToolResultConfig, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, j as TreeMutation, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-
|
|
3
|
-
export { h as ExecOptions, E as ExecResult, P as PrefixedSandboxOps, S as Sandbox, c as SandboxCapabilities, d as SandboxCreateOptions, e as SandboxCreateResult, D as SandboxDirentEntry, F as SandboxFileStat, a as SandboxFileSystem, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps, b as SandboxProvider, f as SandboxSnapshot } from './types-
|
|
1
|
+
export { A as AskUserQuestionArgs, B as BashArgs, F as FileEditArgs, a as FileReadArgs, b as FileWriteArgs, G as GlobArgs, 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-Do_lzJpT.cjs';
|
|
2
|
+
export { c as ActivityToolHandler, l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, B as BaseAgentState, r as FileEntry, F as FileEntryMetadata, i as FileResolver, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, J as JsonValue, 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, k as PrefixedVirtualFsOps, Q as ProcessToolCallsContext, U as RawToolCall, R as RouterContext, W as RunAgentActivity, e as RunAgentConfig, 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, h as Skill, g as SkillMetadata, f as SkillProvider, 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, b as ToolHandlerResponse, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, d as ToolResultConfig, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, j as TreeMutation, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-BO7Yju20.cjs';
|
|
3
|
+
export { h as ExecOptions, E as ExecResult, P as PrefixedSandboxOps, S as Sandbox, c as SandboxCapabilities, d as SandboxCreateOptions, e as SandboxCreateResult, D as SandboxDirentEntry, F as SandboxFileStat, a as SandboxFileSystem, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps, b as SandboxProvider, f as SandboxSnapshot } from './types-tQL9njTu.cjs';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import '@temporalio/workflow';
|
|
6
6
|
import '@temporalio/common';
|
package/dist/workflow.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { A as AskUserQuestionArgs, B as BashArgs, F as FileEditArgs, a as FileReadArgs, b as FileWriteArgs, G as GlobArgs, 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-
|
|
2
|
-
export { c as ActivityToolHandler, l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, B as BaseAgentState, r as FileEntry, F as FileEntryMetadata, i as FileResolver, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, J as JsonValue, 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, k as PrefixedVirtualFsOps, Q as ProcessToolCallsContext, U as RawToolCall, R as RouterContext, W as RunAgentActivity, e as RunAgentConfig, 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, h as Skill, g as SkillMetadata, f as SkillProvider, 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, b as ToolHandlerResponse, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, d as ToolResultConfig, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, j as TreeMutation, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-
|
|
3
|
-
export { h as ExecOptions, E as ExecResult, P as PrefixedSandboxOps, S as Sandbox, c as SandboxCapabilities, d as SandboxCreateOptions, e as SandboxCreateResult, D as SandboxDirentEntry, F as SandboxFileStat, a as SandboxFileSystem, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps, b as SandboxProvider, f as SandboxSnapshot } from './types-
|
|
1
|
+
export { A as AskUserQuestionArgs, B as BashArgs, F as FileEditArgs, a as FileReadArgs, b as FileWriteArgs, G as GlobArgs, 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-CjXHbZZc.js';
|
|
2
|
+
export { c as ActivityToolHandler, l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, B as BaseAgentState, r as FileEntry, F as FileEntryMetadata, i as FileResolver, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, J as JsonValue, 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, k as PrefixedVirtualFsOps, Q as ProcessToolCallsContext, U as RawToolCall, R as RouterContext, W as RunAgentActivity, e as RunAgentConfig, 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, h as Skill, g as SkillMetadata, f as SkillProvider, 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, b as ToolHandlerResponse, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, d as ToolResultConfig, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, j as TreeMutation, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-CPKDl-y_.js';
|
|
3
|
+
export { h as ExecOptions, E as ExecResult, P as PrefixedSandboxOps, S as Sandbox, c as SandboxCapabilities, d as SandboxCreateOptions, e as SandboxCreateResult, D as SandboxDirentEntry, F as SandboxFileStat, a as SandboxFileSystem, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps, b as SandboxProvider, f as SandboxSnapshot } from './types-tQL9njTu.js';
|
|
4
4
|
import 'zod';
|
|
5
5
|
import '@temporalio/workflow';
|
|
6
6
|
import '@temporalio/common';
|
package/dist/workflow.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineSignal, uuid4, setHandler, defineUpdate, ApplicationFailure, log, condition, defineQuery, proxySinks, workflowInfo, proxyActivities, getExternalWorkflowHandle,
|
|
1
|
+
import { defineSignal, uuid4, setHandler, defineUpdate, ApplicationFailure, log, condition, defineQuery, proxySinks, workflowInfo, proxyActivities, getExternalWorkflowHandle, executeChild } from '@temporalio/workflow';
|
|
2
2
|
import z14, { z } from 'zod';
|
|
3
3
|
import { ApplicationFailure as ApplicationFailure$1 } from '@temporalio/common';
|
|
4
4
|
|
|
@@ -385,9 +385,7 @@ function createSubagentTool(subagents) {
|
|
|
385
385
|
schema
|
|
386
386
|
};
|
|
387
387
|
}
|
|
388
|
-
var childResultSignal = defineSignal("childResult");
|
|
389
388
|
var childSandboxReadySignal = defineSignal("childSandboxReady");
|
|
390
|
-
var destroySandboxSignal = defineSignal("destroySandbox");
|
|
391
389
|
|
|
392
390
|
// src/lib/subagent/handler.ts
|
|
393
391
|
function resolveSandboxConfig(config) {
|
|
@@ -411,25 +409,27 @@ function resolveSandboxConfig(config) {
|
|
|
411
409
|
}
|
|
412
410
|
function createSubagentHandler(subagents) {
|
|
413
411
|
const { taskQueue: parentTaskQueue } = workflowInfo();
|
|
414
|
-
const
|
|
412
|
+
const agentSandboxOps = /* @__PURE__ */ new Map();
|
|
413
|
+
for (const cfg of subagents) {
|
|
414
|
+
if (cfg.sandbox && cfg.sandbox !== "none") {
|
|
415
|
+
agentSandboxOps.set(cfg.agentName, cfg.sandbox.proxy(cfg.agentName));
|
|
416
|
+
}
|
|
417
|
+
}
|
|
415
418
|
const pendingDestroys = /* @__PURE__ */ new Map();
|
|
416
419
|
const threadSandboxes = /* @__PURE__ */ new Map();
|
|
417
420
|
const persistentSandboxes = /* @__PURE__ */ new Map();
|
|
418
421
|
const persistentSandboxCreating = /* @__PURE__ */ new Set();
|
|
419
422
|
const lazyCreatorAgent = /* @__PURE__ */ new Map();
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
setHandler(
|
|
424
|
-
|
|
425
|
-
(
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
persistentSandboxes.set(agentName, sandboxId);
|
|
429
|
-
lazyCreatorAgent.delete(childWorkflowId);
|
|
430
|
-
}
|
|
423
|
+
const threadSnapshots = /* @__PURE__ */ new Map();
|
|
424
|
+
const persistentBaseSnapshot = /* @__PURE__ */ new Map();
|
|
425
|
+
const persistentBaseSnapshotCreating = /* @__PURE__ */ new Set();
|
|
426
|
+
setHandler(childSandboxReadySignal, ({ childWorkflowId, sandboxId }) => {
|
|
427
|
+
const agentName = lazyCreatorAgent.get(childWorkflowId);
|
|
428
|
+
if (agentName && !persistentSandboxes.has(agentName)) {
|
|
429
|
+
persistentSandboxes.set(agentName, sandboxId);
|
|
430
|
+
lazyCreatorAgent.delete(childWorkflowId);
|
|
431
431
|
}
|
|
432
|
-
);
|
|
432
|
+
});
|
|
433
433
|
const handler = async (args, context) => {
|
|
434
434
|
const config = subagents.find((s) => s.agentName === args.subagent);
|
|
435
435
|
if (!config) {
|
|
@@ -440,6 +440,12 @@ function createSubagentHandler(subagents) {
|
|
|
440
440
|
const childWorkflowId = `${args.subagent}-${getShortId()}`;
|
|
441
441
|
const { sandboxId: parentSandboxId } = context;
|
|
442
442
|
const sandboxCfg = resolveSandboxConfig(config.sandbox);
|
|
443
|
+
if (sandboxCfg.source !== "none" && !agentSandboxOps.has(config.agentName)) {
|
|
444
|
+
throw ApplicationFailure.create({
|
|
445
|
+
message: `Subagent "${config.agentName}" uses a sandbox but no \`sandbox.proxy\` is configured on its SubagentConfig`,
|
|
446
|
+
nonRetryable: true
|
|
447
|
+
});
|
|
448
|
+
}
|
|
443
449
|
if (sandboxCfg.source === "inherit" && !parentSandboxId) {
|
|
444
450
|
throw new Error(
|
|
445
451
|
`Subagent "${config.agentName}" is configured with sandbox: "inherit" but the parent has no sandbox`
|
|
@@ -458,12 +464,39 @@ function createSubagentHandler(subagents) {
|
|
|
458
464
|
let sandbox;
|
|
459
465
|
let sandboxShutdownOverride;
|
|
460
466
|
let isLazyCreator = false;
|
|
467
|
+
let isSnapshotBaseCreator = false;
|
|
461
468
|
if (sandboxCfg.source === "inherit" && parentSandboxId) {
|
|
462
469
|
if (sandboxCfg.continuation === "fork") {
|
|
463
470
|
sandbox = { mode: "fork", sandboxId: parentSandboxId };
|
|
471
|
+
} else if (sandboxCfg.continuation === "snapshot") {
|
|
472
|
+
throw new Error(
|
|
473
|
+
`Subagent "${config.agentName}" has sandbox source "inherit" with continuation "snapshot" \u2014 snapshot continuation is only supported for source "own"`
|
|
474
|
+
);
|
|
464
475
|
} else {
|
|
465
476
|
sandbox = { mode: "inherit", sandboxId: parentSandboxId };
|
|
466
477
|
}
|
|
478
|
+
} else if (sandboxCfg.source === "own" && sandboxCfg.continuation === "snapshot") {
|
|
479
|
+
const isLazy = sandboxCfg.init === "once";
|
|
480
|
+
let baseSnap;
|
|
481
|
+
if (continuationThreadId) {
|
|
482
|
+
baseSnap = threadSnapshots.get(continuationThreadId)?.snapshot;
|
|
483
|
+
}
|
|
484
|
+
if (!baseSnap && isLazy) {
|
|
485
|
+
baseSnap = persistentBaseSnapshot.get(config.agentName);
|
|
486
|
+
if (!baseSnap) {
|
|
487
|
+
if (persistentBaseSnapshotCreating.has(config.agentName)) {
|
|
488
|
+
await condition(() => persistentBaseSnapshot.has(config.agentName));
|
|
489
|
+
baseSnap = persistentBaseSnapshot.get(config.agentName);
|
|
490
|
+
} else {
|
|
491
|
+
persistentBaseSnapshotCreating.add(config.agentName);
|
|
492
|
+
isSnapshotBaseCreator = true;
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
if (baseSnap) {
|
|
497
|
+
sandbox = { mode: "from-snapshot", snapshot: baseSnap };
|
|
498
|
+
}
|
|
499
|
+
sandboxShutdownOverride = "snapshot";
|
|
467
500
|
} else if (sandboxCfg.source === "own") {
|
|
468
501
|
const isLazy = sandboxCfg.init === "once";
|
|
469
502
|
let baseSandboxId;
|
|
@@ -514,31 +547,8 @@ function createSubagentHandler(subagents) {
|
|
|
514
547
|
threadMode,
|
|
515
548
|
sandboxSource: sandboxCfg.source
|
|
516
549
|
});
|
|
517
|
-
const
|
|
550
|
+
const childResult = await executeChild(config.workflow, childOpts);
|
|
518
551
|
const effectiveShutdown = sandboxShutdownOverride ?? sandboxCfg.shutdown ?? "destroy";
|
|
519
|
-
if (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close") {
|
|
520
|
-
const key = isLazyCreator ? `persistent:${config.agentName}` : childWorkflowId;
|
|
521
|
-
pendingDestroys.set(key, childHandle);
|
|
522
|
-
}
|
|
523
|
-
await Promise.race([
|
|
524
|
-
condition(() => childResults.has(childWorkflowId)),
|
|
525
|
-
childHandle.result()
|
|
526
|
-
]);
|
|
527
|
-
if (!childResults.has(childWorkflowId)) {
|
|
528
|
-
await condition(() => childResults.has(childWorkflowId));
|
|
529
|
-
}
|
|
530
|
-
const childResult = childResults.get(childWorkflowId);
|
|
531
|
-
childResults.delete(childWorkflowId);
|
|
532
|
-
if (!childResult) {
|
|
533
|
-
log.warn("subagent returned no result", {
|
|
534
|
-
subagent: config.agentName,
|
|
535
|
-
childWorkflowId
|
|
536
|
-
});
|
|
537
|
-
return {
|
|
538
|
-
toolResponse: "Subagent workflow did not signal a result",
|
|
539
|
-
data: null
|
|
540
|
-
};
|
|
541
|
-
}
|
|
542
552
|
log.info("subagent completed", {
|
|
543
553
|
subagent: config.agentName,
|
|
544
554
|
childWorkflowId,
|
|
@@ -550,19 +560,42 @@ function createSubagentHandler(subagents) {
|
|
|
550
560
|
usage,
|
|
551
561
|
threadId: childThreadId,
|
|
552
562
|
sandboxId: childSandboxId,
|
|
563
|
+
snapshot: childSnapshot,
|
|
564
|
+
baseSnapshot: childBaseSnapshot,
|
|
553
565
|
metadata
|
|
554
566
|
} = childResult;
|
|
555
567
|
if (childSandboxId) {
|
|
556
|
-
if (sandboxCfg.source === "own" && sandboxCfg.init === "once" && !persistentSandboxes.has(config.agentName)) {
|
|
568
|
+
if (sandboxCfg.source === "own" && sandboxCfg.init === "once" && sandboxCfg.continuation !== "snapshot" && !persistentSandboxes.has(config.agentName)) {
|
|
557
569
|
persistentSandboxes.set(config.agentName, childSandboxId);
|
|
558
|
-
} else if (allowsContinuation && childThreadId) {
|
|
570
|
+
} else if (allowsContinuation && childThreadId && sandboxCfg.source === "own" && sandboxCfg.continuation !== "snapshot") {
|
|
559
571
|
threadSandboxes.set(childThreadId, childSandboxId);
|
|
560
572
|
}
|
|
561
573
|
}
|
|
574
|
+
if (childSandboxId && (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close")) {
|
|
575
|
+
const key = isLazyCreator ? `persistent:${config.agentName}` : childWorkflowId;
|
|
576
|
+
pendingDestroys.set(key, {
|
|
577
|
+
agentName: config.agentName,
|
|
578
|
+
sandboxId: childSandboxId
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
if (sandboxCfg.source === "own" && sandboxCfg.continuation === "snapshot") {
|
|
582
|
+
if (childSnapshot && childThreadId) {
|
|
583
|
+
threadSnapshots.set(childThreadId, {
|
|
584
|
+
agentName: config.agentName,
|
|
585
|
+
snapshot: childSnapshot
|
|
586
|
+
});
|
|
587
|
+
}
|
|
588
|
+
if (isSnapshotBaseCreator && childBaseSnapshot && !persistentBaseSnapshot.has(config.agentName)) {
|
|
589
|
+
persistentBaseSnapshot.set(config.agentName, childBaseSnapshot);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
562
592
|
if (isLazyCreator) {
|
|
563
593
|
persistentSandboxCreating.delete(config.agentName);
|
|
564
594
|
lazyCreatorAgent.delete(childWorkflowId);
|
|
565
595
|
}
|
|
596
|
+
if (isSnapshotBaseCreator) {
|
|
597
|
+
persistentBaseSnapshotCreating.delete(config.agentName);
|
|
598
|
+
}
|
|
566
599
|
if (!toolResponse) {
|
|
567
600
|
return {
|
|
568
601
|
toolResponse: "Subagent workflow returned no response",
|
|
@@ -598,22 +631,60 @@ function createSubagentHandler(subagents) {
|
|
|
598
631
|
};
|
|
599
632
|
};
|
|
600
633
|
const destroySubagentSandboxes = async () => {
|
|
601
|
-
const
|
|
634
|
+
const entries = [...pendingDestroys.values()];
|
|
602
635
|
pendingDestroys.clear();
|
|
603
636
|
await Promise.all(
|
|
604
|
-
|
|
637
|
+
entries.map(async ({ agentName, sandboxId }) => {
|
|
638
|
+
const ops = agentSandboxOps.get(agentName);
|
|
639
|
+
if (!ops) {
|
|
640
|
+
log.warn(
|
|
641
|
+
"Skipping sandbox destroy \u2014 no sandbox.proxy registered for agent",
|
|
642
|
+
{ agentName, sandboxId }
|
|
643
|
+
);
|
|
644
|
+
return;
|
|
645
|
+
}
|
|
605
646
|
try {
|
|
606
|
-
await
|
|
607
|
-
await handle.result();
|
|
647
|
+
await ops.destroySandbox(sandboxId);
|
|
608
648
|
} catch (err) {
|
|
609
|
-
log.warn("Failed to
|
|
649
|
+
log.warn("Failed to destroy subagent sandbox", {
|
|
650
|
+
agentName,
|
|
651
|
+
sandboxId,
|
|
610
652
|
error: err
|
|
611
653
|
});
|
|
612
654
|
}
|
|
613
655
|
})
|
|
614
656
|
);
|
|
615
657
|
};
|
|
616
|
-
|
|
658
|
+
const cleanupSubagentSnapshots = async () => {
|
|
659
|
+
const tagged = [];
|
|
660
|
+
for (const entry of threadSnapshots.values()) tagged.push(entry);
|
|
661
|
+
for (const [agentName, snapshot] of persistentBaseSnapshot.entries()) {
|
|
662
|
+
tagged.push({ agentName, snapshot });
|
|
663
|
+
}
|
|
664
|
+
threadSnapshots.clear();
|
|
665
|
+
persistentBaseSnapshot.clear();
|
|
666
|
+
await Promise.all(
|
|
667
|
+
tagged.map(async ({ agentName, snapshot }) => {
|
|
668
|
+
const ops = agentSandboxOps.get(agentName);
|
|
669
|
+
if (!ops) {
|
|
670
|
+
log.warn(
|
|
671
|
+
"Skipping snapshot delete \u2014 no sandbox.proxy registered for agent",
|
|
672
|
+
{ agentName }
|
|
673
|
+
);
|
|
674
|
+
return;
|
|
675
|
+
}
|
|
676
|
+
try {
|
|
677
|
+
await ops.deleteSandboxSnapshot(snapshot);
|
|
678
|
+
} catch (err) {
|
|
679
|
+
log.warn("Failed to delete subagent snapshot", {
|
|
680
|
+
agentName,
|
|
681
|
+
error: err
|
|
682
|
+
});
|
|
683
|
+
}
|
|
684
|
+
})
|
|
685
|
+
);
|
|
686
|
+
};
|
|
687
|
+
return { handler, destroySubagentSandboxes, cleanupSubagentSnapshots };
|
|
617
688
|
}
|
|
618
689
|
|
|
619
690
|
// src/lib/subagent/register.ts
|
|
@@ -627,7 +698,7 @@ function buildSubagentRegistration(subagents) {
|
|
|
627
698
|
if (s.hooks) subagentHooksMap.set(s.agentName, s.hooks);
|
|
628
699
|
}
|
|
629
700
|
const resolveSubagentName = (args) => args.subagent;
|
|
630
|
-
const { handler, destroySubagentSandboxes } = createSubagentHandler(subagents);
|
|
701
|
+
const { handler, destroySubagentSandboxes, cleanupSubagentSnapshots } = createSubagentHandler(subagents);
|
|
631
702
|
const registration = {
|
|
632
703
|
name: SUBAGENT_TOOL_NAME,
|
|
633
704
|
enabled: () => getEnabled().length > 0,
|
|
@@ -651,7 +722,7 @@ function buildSubagentRegistration(subagents) {
|
|
|
651
722
|
}
|
|
652
723
|
}
|
|
653
724
|
};
|
|
654
|
-
return { registration, destroySubagentSandboxes };
|
|
725
|
+
return { registration, destroySubagentSandboxes, cleanupSubagentSnapshots };
|
|
655
726
|
}
|
|
656
727
|
var READ_SKILL_TOOL_NAME = "ReadSkill";
|
|
657
728
|
function buildReadSkillDescription(skills) {
|
|
@@ -724,9 +795,7 @@ function validateSkillNames(skills) {
|
|
|
724
795
|
const names = skills.map((s) => s.name);
|
|
725
796
|
const dupes = names.filter((n, i) => names.indexOf(n) !== i);
|
|
726
797
|
if (dupes.length > 0) {
|
|
727
|
-
throw new Error(
|
|
728
|
-
`Duplicate skill names: ${[...new Set(dupes)].join(", ")}`
|
|
729
|
-
);
|
|
798
|
+
throw new Error(`Duplicate skill names: ${[...new Set(dupes)].join(", ")}`);
|
|
730
799
|
}
|
|
731
800
|
}
|
|
732
801
|
function buildSkillRegistration(skills) {
|
|
@@ -796,11 +865,13 @@ async function createSession({
|
|
|
796
865
|
} = threadOps;
|
|
797
866
|
const plugins = [];
|
|
798
867
|
let destroySubagentSandboxes;
|
|
868
|
+
let cleanupSubagentSnapshots;
|
|
799
869
|
if (subagents) {
|
|
800
870
|
const result = buildSubagentRegistration(subagents);
|
|
801
871
|
if (result) {
|
|
802
872
|
plugins.push(result.registration);
|
|
803
873
|
destroySubagentSandboxes = result.destroySubagentSandboxes;
|
|
874
|
+
cleanupSubagentSnapshots = result.cleanupSubagentSnapshots;
|
|
804
875
|
}
|
|
805
876
|
}
|
|
806
877
|
if (skills) {
|
|
@@ -853,6 +924,9 @@ async function createSession({
|
|
|
853
924
|
const sandboxMode = sandboxInit?.mode;
|
|
854
925
|
let sandboxId;
|
|
855
926
|
let sandboxOwned = false;
|
|
927
|
+
let baseSnapshot;
|
|
928
|
+
let exitSnapshot;
|
|
929
|
+
let freshlyCreated = false;
|
|
856
930
|
if (sandboxMode === "inherit") {
|
|
857
931
|
const inheritInit = sandboxInit;
|
|
858
932
|
sandboxId = inheritInit.sandboxId;
|
|
@@ -885,6 +959,16 @@ async function createSession({
|
|
|
885
959
|
sandboxInit.sandboxId
|
|
886
960
|
);
|
|
887
961
|
sandboxOwned = true;
|
|
962
|
+
} else if (sandboxMode === "from-snapshot") {
|
|
963
|
+
if (!sandboxOps) {
|
|
964
|
+
throw ApplicationFailure.create({
|
|
965
|
+
message: "No sandboxOps provided \u2014 cannot restore sandbox",
|
|
966
|
+
nonRetryable: true
|
|
967
|
+
});
|
|
968
|
+
}
|
|
969
|
+
const snap = sandboxInit.snapshot;
|
|
970
|
+
sandboxId = await sandboxOps.restoreSandbox(snap);
|
|
971
|
+
sandboxOwned = true;
|
|
888
972
|
} else if (sandboxOps) {
|
|
889
973
|
const skillFiles = skills ? collectSkillFiles(skills) : void 0;
|
|
890
974
|
const ctx = sandboxInit?.ctx;
|
|
@@ -893,9 +977,13 @@ async function createSession({
|
|
|
893
977
|
if (result) {
|
|
894
978
|
sandboxId = result.sandboxId;
|
|
895
979
|
sandboxOwned = true;
|
|
980
|
+
freshlyCreated = true;
|
|
896
981
|
}
|
|
897
982
|
}
|
|
898
|
-
if (sandboxId &&
|
|
983
|
+
if (sandboxId && sandboxOwned && freshlyCreated && sandboxShutdown === "snapshot" && sandboxOps) {
|
|
984
|
+
baseSnapshot = await sandboxOps.snapshotSandbox(sandboxId);
|
|
985
|
+
}
|
|
986
|
+
if (sandboxId && sandboxOwned && onSandboxReady) {
|
|
899
987
|
onSandboxReady(sandboxId);
|
|
900
988
|
}
|
|
901
989
|
if (virtualFsConfig) {
|
|
@@ -961,6 +1049,7 @@ async function createSession({
|
|
|
961
1049
|
threadKey
|
|
962
1050
|
);
|
|
963
1051
|
let exitReason = "completed";
|
|
1052
|
+
let finalMessage = null;
|
|
964
1053
|
try {
|
|
965
1054
|
while (stateManager.isRunning() && !stateManager.isTerminal() && stateManager.getTurns() < maxTurns) {
|
|
966
1055
|
stateManager.incrementTurns();
|
|
@@ -987,21 +1076,8 @@ async function createSession({
|
|
|
987
1076
|
if (!toolRouter.hasTools() || rawToolCalls.length === 0) {
|
|
988
1077
|
stateManager.complete();
|
|
989
1078
|
exitReason = "completed";
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
threadId,
|
|
993
|
-
exitReason,
|
|
994
|
-
turns: currentTurn,
|
|
995
|
-
durationMs: Date.now() - sessionStartMs,
|
|
996
|
-
usage: stateManager.getTotalUsage()
|
|
997
|
-
});
|
|
998
|
-
return {
|
|
999
|
-
threadId,
|
|
1000
|
-
finalMessage: message,
|
|
1001
|
-
exitReason,
|
|
1002
|
-
usage: stateManager.getTotalUsage(),
|
|
1003
|
-
sandboxId
|
|
1004
|
-
};
|
|
1079
|
+
finalMessage = message;
|
|
1080
|
+
break;
|
|
1005
1081
|
}
|
|
1006
1082
|
const parsedToolCalls = [];
|
|
1007
1083
|
for (const tc of rawToolCalls) {
|
|
@@ -1073,11 +1149,21 @@ async function createSession({
|
|
|
1073
1149
|
case "pause-until-parent-close":
|
|
1074
1150
|
await sandboxOps.pauseSandbox(sandboxId);
|
|
1075
1151
|
break;
|
|
1152
|
+
case "keep":
|
|
1153
|
+
case "keep-until-parent-close":
|
|
1154
|
+
break;
|
|
1155
|
+
case "snapshot":
|
|
1156
|
+
exitSnapshot = await sandboxOps.snapshotSandbox(sandboxId);
|
|
1157
|
+
await sandboxOps.destroySandbox(sandboxId);
|
|
1158
|
+
break;
|
|
1076
1159
|
}
|
|
1077
1160
|
}
|
|
1078
1161
|
if (destroySubagentSandboxes) {
|
|
1079
1162
|
await destroySubagentSandboxes();
|
|
1080
1163
|
}
|
|
1164
|
+
if (cleanupSubagentSnapshots) {
|
|
1165
|
+
await cleanupSubagentSnapshots();
|
|
1166
|
+
}
|
|
1081
1167
|
}
|
|
1082
1168
|
log.info("session ended", {
|
|
1083
1169
|
agentName,
|
|
@@ -1085,14 +1171,18 @@ async function createSession({
|
|
|
1085
1171
|
exitReason,
|
|
1086
1172
|
turns: stateManager.getTurns(),
|
|
1087
1173
|
durationMs: Date.now() - sessionStartMs,
|
|
1088
|
-
usage: stateManager.getTotalUsage()
|
|
1174
|
+
usage: stateManager.getTotalUsage(),
|
|
1175
|
+
...baseSnapshot && { hasBaseSnapshot: true },
|
|
1176
|
+
...exitSnapshot && { hasExitSnapshot: true }
|
|
1089
1177
|
});
|
|
1090
1178
|
return {
|
|
1091
1179
|
threadId,
|
|
1092
|
-
finalMessage
|
|
1180
|
+
finalMessage,
|
|
1093
1181
|
exitReason,
|
|
1094
1182
|
usage: stateManager.getTotalUsage(),
|
|
1095
|
-
sandboxId
|
|
1183
|
+
sandboxId,
|
|
1184
|
+
...baseSnapshot && { baseSnapshot },
|
|
1185
|
+
...exitSnapshot && { snapshot: exitSnapshot }
|
|
1096
1186
|
};
|
|
1097
1187
|
}
|
|
1098
1188
|
};
|
|
@@ -1303,44 +1393,16 @@ function defineSubagentWorkflow(config, fn) {
|
|
|
1303
1393
|
...workflowInput.thread && { thread: workflowInput.thread },
|
|
1304
1394
|
...workflowInput.sandbox && { sandbox: workflowInput.sandbox },
|
|
1305
1395
|
onSandboxReady: (sandboxId) => {
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1396
|
+
const isReuse = workflowInput.sandbox?.mode === "continue";
|
|
1397
|
+
if (!isReuse) {
|
|
1398
|
+
void parentHandle.signal(childSandboxReadySignal, {
|
|
1399
|
+
childWorkflowId: workflowInfo().workflowId,
|
|
1400
|
+
sandboxId
|
|
1401
|
+
});
|
|
1402
|
+
}
|
|
1310
1403
|
}
|
|
1311
1404
|
};
|
|
1312
|
-
|
|
1313
|
-
prompt,
|
|
1314
|
-
sessionInput,
|
|
1315
|
-
context ?? {}
|
|
1316
|
-
);
|
|
1317
|
-
if (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close") {
|
|
1318
|
-
if (!destroySandbox) {
|
|
1319
|
-
throw ApplicationFailure.create({
|
|
1320
|
-
message: `Subagent "${config.name}" has sandboxShutdown="${effectiveShutdown}" but fn did not return a destroySandbox callback`,
|
|
1321
|
-
nonRetryable: true
|
|
1322
|
-
});
|
|
1323
|
-
}
|
|
1324
|
-
if (!result.sandboxId) {
|
|
1325
|
-
throw ApplicationFailure.create({
|
|
1326
|
-
message: `Subagent "${config.name}" has sandboxShutdown="${effectiveShutdown}" but fn did not return a sandboxId`,
|
|
1327
|
-
nonRetryable: true
|
|
1328
|
-
});
|
|
1329
|
-
}
|
|
1330
|
-
}
|
|
1331
|
-
await parentHandle.signal(childResultSignal, {
|
|
1332
|
-
childWorkflowId: workflowInfo().workflowId,
|
|
1333
|
-
result
|
|
1334
|
-
});
|
|
1335
|
-
if (destroySandbox) {
|
|
1336
|
-
let destroyRequested = false;
|
|
1337
|
-
setHandler(destroySandboxSignal, () => {
|
|
1338
|
-
destroyRequested = true;
|
|
1339
|
-
});
|
|
1340
|
-
await condition(() => destroyRequested);
|
|
1341
|
-
await destroySandbox();
|
|
1342
|
-
}
|
|
1343
|
-
return result;
|
|
1405
|
+
return fn(prompt, sessionInput, context ?? {});
|
|
1344
1406
|
};
|
|
1345
1407
|
Object.defineProperty(workflow, "name", { value: config.name });
|
|
1346
1408
|
return Object.assign(workflow, {
|
|
@@ -1450,9 +1512,7 @@ function applyVirtualTreeMutations(stateManager, mutations) {
|
|
|
1450
1512
|
tree = tree.filter((e) => e.path !== m.path);
|
|
1451
1513
|
break;
|
|
1452
1514
|
case "update":
|
|
1453
|
-
tree = tree.map(
|
|
1454
|
-
(e) => e.path === m.path ? { ...e, ...m.entry } : e
|
|
1455
|
-
);
|
|
1515
|
+
tree = tree.map((e) => e.path === m.path ? { ...e, ...m.entry } : e);
|
|
1456
1516
|
break;
|
|
1457
1517
|
}
|
|
1458
1518
|
}
|
|
@@ -1511,7 +1571,9 @@ function formatVirtualFileTree(entries, opts = {}) {
|
|
|
1511
1571
|
// src/lib/virtual-fs/queries.ts
|
|
1512
1572
|
function hasFileWithMimeType(stateManager, pattern) {
|
|
1513
1573
|
const tree = stateManager.get("fileTree");
|
|
1514
|
-
const matchers = (Array.isArray(pattern) ? pattern : [pattern]).map(
|
|
1574
|
+
const matchers = (Array.isArray(pattern) ? pattern : [pattern]).map(
|
|
1575
|
+
buildMatcher
|
|
1576
|
+
);
|
|
1515
1577
|
return tree.some((entry) => {
|
|
1516
1578
|
const meta = entry.metadata;
|
|
1517
1579
|
const mime = meta?.mimeType;
|
|
@@ -1572,7 +1634,9 @@ function proxyVirtualFsOps(scope, options) {
|
|
|
1572
1634
|
// src/lib/skills/parse.ts
|
|
1573
1635
|
function parseSkillFile(raw) {
|
|
1574
1636
|
const trimmed = raw.replace(/^\uFEFF/, "");
|
|
1575
|
-
const match = trimmed.match(
|
|
1637
|
+
const match = trimmed.match(
|
|
1638
|
+
/^---[ \t]*\r?\n([\s\S]*?)\r?\n---[ \t]*\r?\n?([\s\S]*)$/
|
|
1639
|
+
);
|
|
1576
1640
|
if (!match) {
|
|
1577
1641
|
throw new Error(
|
|
1578
1642
|
"SKILL.md must start with YAML frontmatter delimited by ---"
|
|
@@ -1844,7 +1908,9 @@ function createTaskGetHandler(stateManager) {
|
|
|
1844
1908
|
const task = stateManager.getTask(args.taskId) ?? null;
|
|
1845
1909
|
if (!task) {
|
|
1846
1910
|
return {
|
|
1847
|
-
toolResponse: JSON.stringify({
|
|
1911
|
+
toolResponse: JSON.stringify({
|
|
1912
|
+
error: `Task not found: ${args.taskId}`
|
|
1913
|
+
}),
|
|
1848
1914
|
data: null
|
|
1849
1915
|
};
|
|
1850
1916
|
}
|
|
@@ -1887,7 +1953,9 @@ function createTaskUpdateHandler(stateManager) {
|
|
|
1887
1953
|
const task = stateManager.getTask(args.taskId);
|
|
1888
1954
|
if (!task) {
|
|
1889
1955
|
return {
|
|
1890
|
-
toolResponse: JSON.stringify({
|
|
1956
|
+
toolResponse: JSON.stringify({
|
|
1957
|
+
error: `Task not found: ${args.taskId}`
|
|
1958
|
+
}),
|
|
1891
1959
|
data: null
|
|
1892
1960
|
};
|
|
1893
1961
|
}
|