zeitlich 0.2.37 → 0.2.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/dist/{activities-Bb-nAjwQ.d.ts → activities-Bmu7XnaG.d.ts} +4 -4
- package/dist/{activities-vkI4_3CC.d.cts → activities-ByBFLvm2.d.cts} +4 -4
- package/dist/adapter-id-BB-mmrts.d.cts +17 -0
- package/dist/adapter-id-BB-mmrts.d.ts +17 -0
- package/dist/adapter-id-CMwVrVqv.d.cts +17 -0
- package/dist/adapter-id-CMwVrVqv.d.ts +17 -0
- package/dist/adapter-id-CbY2zeSt.d.cts +17 -0
- package/dist/adapter-id-CbY2zeSt.d.ts +17 -0
- package/dist/adapters/sandbox/bedrock/index.cjs +3 -3
- package/dist/adapters/sandbox/bedrock/index.cjs.map +1 -1
- package/dist/adapters/sandbox/bedrock/index.d.cts +6 -6
- package/dist/adapters/sandbox/bedrock/index.d.ts +6 -6
- package/dist/adapters/sandbox/bedrock/index.js +3 -3
- package/dist/adapters/sandbox/bedrock/index.js.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/daytona/index.cjs +3 -3
- package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/index.d.cts +4 -4
- package/dist/adapters/sandbox/daytona/index.d.ts +4 -4
- package/dist/adapters/sandbox/daytona/index.js +3 -3
- package/dist/adapters/sandbox/daytona/index.js.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/e2b/index.cjs +26 -14
- package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/index.d.cts +24 -4
- package/dist/adapters/sandbox/e2b/index.d.ts +24 -4
- package/dist/adapters/sandbox/e2b/index.js +26 -14
- package/dist/adapters/sandbox/e2b/index.js.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/inmemory/index.cjs +3 -3
- package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.d.cts +4 -4
- package/dist/adapters/sandbox/inmemory/index.d.ts +4 -4
- package/dist/adapters/sandbox/inmemory/index.js +3 -3
- package/dist/adapters/sandbox/inmemory/index.js.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/thread/anthropic/index.cjs +150 -13
- package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/index.d.cts +9 -8
- package/dist/adapters/thread/anthropic/index.d.ts +9 -8
- package/dist/adapters/thread/anthropic/index.js +150 -14
- package/dist/adapters/thread/anthropic/index.js.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.cjs +9 -3
- package/dist/adapters/thread/anthropic/workflow.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.d.cts +6 -5
- package/dist/adapters/thread/anthropic/workflow.d.ts +6 -5
- package/dist/adapters/thread/anthropic/workflow.js +9 -4
- package/dist/adapters/thread/anthropic/workflow.js.map +1 -1
- package/dist/adapters/thread/google-genai/index.cjs +154 -13
- package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/index.d.cts +6 -5
- package/dist/adapters/thread/google-genai/index.d.ts +6 -5
- package/dist/adapters/thread/google-genai/index.js +154 -14
- package/dist/adapters/thread/google-genai/index.js.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.cjs +9 -3
- package/dist/adapters/thread/google-genai/workflow.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.d.cts +6 -5
- package/dist/adapters/thread/google-genai/workflow.d.ts +6 -5
- package/dist/adapters/thread/google-genai/workflow.js +9 -4
- package/dist/adapters/thread/google-genai/workflow.js.map +1 -1
- package/dist/adapters/thread/index.cjs +16 -0
- package/dist/adapters/thread/index.cjs.map +1 -0
- package/dist/adapters/thread/index.d.cts +34 -0
- package/dist/adapters/thread/index.d.ts +34 -0
- package/dist/adapters/thread/index.js +12 -0
- package/dist/adapters/thread/index.js.map +1 -0
- package/dist/adapters/thread/langchain/index.cjs +149 -14
- package/dist/adapters/thread/langchain/index.cjs.map +1 -1
- package/dist/adapters/thread/langchain/index.d.cts +9 -8
- package/dist/adapters/thread/langchain/index.d.ts +9 -8
- package/dist/adapters/thread/langchain/index.js +149 -15
- package/dist/adapters/thread/langchain/index.js.map +1 -1
- package/dist/adapters/thread/langchain/workflow.cjs +9 -3
- package/dist/adapters/thread/langchain/workflow.cjs.map +1 -1
- package/dist/adapters/thread/langchain/workflow.d.cts +6 -5
- package/dist/adapters/thread/langchain/workflow.d.ts +6 -5
- package/dist/adapters/thread/langchain/workflow.js +9 -4
- package/dist/adapters/thread/langchain/workflow.js.map +1 -1
- package/dist/index.cjs +367 -59
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.js +365 -61
- package/dist/index.js.map +1 -1
- package/dist/{proxy-DEtowJyd.d.cts → proxy-BAKzNGRq.d.cts} +1 -1
- package/dist/{proxy-0smGKvx8.d.ts → proxy-DO_MXbY4.d.ts} +1 -1
- package/dist/{thread-manager-C-C4pI2z.d.ts → thread-manager-CcRXasqs.d.ts} +2 -2
- package/dist/{thread-manager-D4vgzYrh.d.cts → thread-manager-ClwSaUnj.d.cts} +2 -2
- package/dist/{thread-manager-3fszQih4.d.ts → thread-manager-D-7lp1JK.d.ts} +2 -2
- package/dist/{thread-manager-CzYln2OC.d.cts → thread-manager-Y8Ucf0Tf.d.cts} +2 -2
- package/dist/{types-CPKDl-y_.d.ts → types-Bcbiq8iv.d.cts} +195 -22
- package/dist/{types-CNuWnvy9.d.ts → types-DAsQ21Rt.d.ts} +1 -1
- package/dist/{types-B37hKoWA.d.ts → types-DpHTX-iO.d.ts} +58 -1
- package/dist/{types-BO7Yju20.d.cts → types-Dt8-HBBT.d.ts} +195 -22
- package/dist/{types-D08CXPh8.d.cts → types-hFFi-Zd9.d.cts} +58 -1
- package/dist/{types-DWEUmYAJ.d.cts → types-lm8tMNJQ.d.cts} +1 -1
- package/dist/{types-tQL9njTu.d.cts → types-yx0LzPGn.d.cts} +21 -7
- package/dist/{types-tQL9njTu.d.ts → types-yx0LzPGn.d.ts} +21 -7
- package/dist/{workflow-CjXHbZZc.d.ts → workflow-Bmf9EtDW.d.ts} +83 -3
- package/dist/{workflow-Do_lzJpT.d.cts → workflow-Bx9utBwb.d.cts} +83 -3
- package/dist/workflow.cjs +266 -39
- 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 +264 -41
- package/dist/workflow.js.map +1 -1
- package/package.json +12 -2
- package/src/adapters/sandbox/bedrock/index.ts +12 -3
- package/src/adapters/sandbox/daytona/index.ts +12 -3
- package/src/adapters/sandbox/e2b/index.ts +36 -14
- package/src/adapters/sandbox/e2b/types.ts +16 -0
- package/src/adapters/sandbox/inmemory/index.ts +12 -3
- package/src/adapters/thread/adapter-id.test.ts +42 -0
- package/src/adapters/thread/anthropic/activities.ts +40 -5
- package/src/adapters/thread/anthropic/adapter-id.ts +16 -0
- package/src/adapters/thread/anthropic/fork-transform.test.ts +291 -0
- package/src/adapters/thread/anthropic/index.ts +3 -0
- package/src/adapters/thread/anthropic/model-invoker.ts +7 -1
- package/src/adapters/thread/anthropic/proxy.ts +3 -2
- package/src/adapters/thread/anthropic/thread-manager.ts +27 -1
- package/src/adapters/thread/google-genai/activities.ts +44 -5
- package/src/adapters/thread/google-genai/adapter-id.ts +16 -0
- package/src/adapters/thread/google-genai/fork-transform.test.ts +149 -0
- package/src/adapters/thread/google-genai/index.ts +3 -0
- package/src/adapters/thread/google-genai/model-invoker.ts +8 -2
- package/src/adapters/thread/google-genai/proxy.ts +3 -2
- package/src/adapters/thread/google-genai/thread-manager.ts +27 -1
- package/src/adapters/thread/index.ts +39 -0
- package/src/adapters/thread/langchain/activities.ts +40 -5
- package/src/adapters/thread/langchain/adapter-id.ts +16 -0
- package/src/adapters/thread/langchain/fork-transform.test.ts +142 -0
- package/src/adapters/thread/langchain/index.ts +3 -0
- package/src/adapters/thread/langchain/model-invoker.ts +7 -1
- package/src/adapters/thread/langchain/proxy.ts +3 -2
- package/src/adapters/thread/langchain/thread-manager.ts +27 -1
- package/src/lib/lifecycle.ts +14 -5
- package/src/lib/model/types.ts +7 -0
- package/src/lib/sandbox/manager.ts +26 -18
- package/src/lib/sandbox/types.ts +27 -7
- package/src/lib/session/session-edge-cases.integration.test.ts +336 -4
- package/src/lib/session/session.integration.test.ts +192 -2
- package/src/lib/session/session.ts +102 -8
- package/src/lib/session/types.ts +66 -3
- package/src/lib/state/index.ts +1 -0
- package/src/lib/state/manager.integration.test.ts +109 -0
- package/src/lib/state/manager.ts +38 -8
- package/src/lib/state/types.ts +25 -0
- package/src/lib/subagent/handler.ts +124 -11
- package/src/lib/subagent/index.ts +5 -1
- package/src/lib/subagent/subagent.integration.test.ts +628 -104
- package/src/lib/subagent/types.ts +63 -14
- package/src/lib/subagent/workflow.ts +29 -2
- package/src/lib/thread/index.ts +5 -0
- package/src/lib/thread/keys.test.ts +101 -0
- package/src/lib/thread/keys.ts +94 -0
- package/src/lib/thread/manager.test.ts +139 -0
- package/src/lib/thread/manager.ts +105 -9
- package/src/lib/thread/proxy.ts +3 -0
- package/src/lib/thread/types.ts +64 -1
- package/src/lib/tool-router/index.ts +2 -0
- package/src/lib/tool-router/router-edge-cases.integration.test.ts +92 -0
- package/src/lib/tool-router/router.integration.test.ts +12 -0
- package/src/lib/tool-router/router.ts +89 -16
- package/src/lib/tool-router/types.ts +42 -1
- package/src/lib/types.ts +12 -0
- package/src/workflow.ts +14 -1
- package/tsup.config.ts +1 -0
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
|
|
2
|
-
export {
|
|
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, D as DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT, 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 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-Bx9utBwb.cjs';
|
|
2
|
+
export { d as ActivityToolHandler, m as AgentConfig, n as AgentFile, A as AgentResponse, o as AgentState, p as AgentStateManager, q as AgentStatus, r as AppendToolResultFn, B as BaseAgentState, s as FileEntry, F as FileEntryMetadata, j as FileResolver, H as Hooks, I as InferToolResults, t as JsonPrimitive, u as JsonSerializable, J as JsonValue, 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, l as PrefixedVirtualFsOps, U as ProcessToolCallsContext, W as ProcessToolCallsResult, X as RawToolCall, Y as RewindSignal, R as RouterContext, Z as RunAgentActivity, f as RunAgentConfig, _ 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, i as Skill, h as SkillMetadata, g as SkillProvider, 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, c as ToolHandlerResponse, ar as ToolHooks, as as ToolMap, at as ToolNames, au as ToolResult, e as ToolResultConfig, av as ToolRouter, aw as ToolRouterHooks, ax as ToolWithHandler, k as TreeMutation, az as VirtualFileTree, aA as VirtualFsOps, aB as VirtualFsState, aC as WorkflowTask, aD as ZeitlichSession, aE as isTerminalStatus } from './types-Bcbiq8iv.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-yx0LzPGn.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
|
|
2
|
-
export {
|
|
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, D as DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT, 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 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-Bmf9EtDW.js';
|
|
2
|
+
export { d as ActivityToolHandler, m as AgentConfig, n as AgentFile, A as AgentResponse, o as AgentState, p as AgentStateManager, q as AgentStatus, r as AppendToolResultFn, B as BaseAgentState, s as FileEntry, F as FileEntryMetadata, j as FileResolver, H as Hooks, I as InferToolResults, t as JsonPrimitive, u as JsonSerializable, J as JsonValue, 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, l as PrefixedVirtualFsOps, U as ProcessToolCallsContext, W as ProcessToolCallsResult, X as RawToolCall, Y as RewindSignal, R as RouterContext, Z as RunAgentActivity, f as RunAgentConfig, _ 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, i as Skill, h as SkillMetadata, g as SkillProvider, 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, c as ToolHandlerResponse, ar as ToolHooks, as as ToolMap, at as ToolNames, au as ToolResult, e as ToolResultConfig, av as ToolRouter, aw as ToolRouterHooks, ax as ToolWithHandler, k as TreeMutation, az as VirtualFileTree, aA as VirtualFsOps, aB as VirtualFsState, aC as WorkflowTask, aD as ZeitlichSession, aE as isTerminalStatus } from './types-Dt8-HBBT.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-yx0LzPGn.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, executeChild } from '@temporalio/workflow';
|
|
1
|
+
import { defineSignal, CancellationScope, isCancellation, 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
|
|
|
@@ -107,7 +107,7 @@ function createToolRouter(options) {
|
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
-
async function processToolCall(toolCall, turn, sandboxId) {
|
|
110
|
+
async function processToolCall(toolCall, turn, sandboxId, onRewindRequested) {
|
|
111
111
|
const startTime = Date.now();
|
|
112
112
|
const tool = toolMap.get(toolCall.name);
|
|
113
113
|
const preResult = await runPreHooks(toolCall, tool, turn);
|
|
@@ -122,7 +122,7 @@ function createToolRouter(options) {
|
|
|
122
122
|
reason: "Skipped by PreToolUse hook"
|
|
123
123
|
})
|
|
124
124
|
});
|
|
125
|
-
return
|
|
125
|
+
return { kind: "skipped" };
|
|
126
126
|
}
|
|
127
127
|
const effectiveArgs = preResult.args;
|
|
128
128
|
log.debug("tool call dispatched", {
|
|
@@ -134,6 +134,7 @@ function createToolRouter(options) {
|
|
|
134
134
|
let content;
|
|
135
135
|
let resultAppended = false;
|
|
136
136
|
let metadata;
|
|
137
|
+
let rewindRequested = false;
|
|
137
138
|
try {
|
|
138
139
|
if (tool) {
|
|
139
140
|
const routerContext = {
|
|
@@ -151,11 +152,15 @@ function createToolRouter(options) {
|
|
|
151
152
|
content = response.toolResponse;
|
|
152
153
|
resultAppended = response.resultAppended === true;
|
|
153
154
|
metadata = response.metadata;
|
|
155
|
+
rewindRequested = response.rewind === true;
|
|
154
156
|
} else {
|
|
155
157
|
result = { error: `Unknown tool: ${toolCall.name}` };
|
|
156
158
|
content = JSON.stringify(result, null, 2);
|
|
157
159
|
}
|
|
158
160
|
} catch (error) {
|
|
161
|
+
if (isCancellation(error)) {
|
|
162
|
+
throw error;
|
|
163
|
+
}
|
|
159
164
|
log.warn("tool call failed", {
|
|
160
165
|
toolName: toolCall.name,
|
|
161
166
|
toolCallId: toolCall.id,
|
|
@@ -173,6 +178,15 @@ function createToolRouter(options) {
|
|
|
173
178
|
result = recovery.result;
|
|
174
179
|
content = recovery.content;
|
|
175
180
|
}
|
|
181
|
+
if (rewindRequested) {
|
|
182
|
+
const signal = {
|
|
183
|
+
toolCallId: toolCall.id,
|
|
184
|
+
toolName: toolCall.name
|
|
185
|
+
};
|
|
186
|
+
log.info("tool requested rewind", { ...signal });
|
|
187
|
+
onRewindRequested?.(signal);
|
|
188
|
+
return { kind: "rewind", signal };
|
|
189
|
+
}
|
|
176
190
|
if (!resultAppended) {
|
|
177
191
|
const config = {
|
|
178
192
|
threadId: options.threadId,
|
|
@@ -209,7 +223,7 @@ function createToolRouter(options) {
|
|
|
209
223
|
turn,
|
|
210
224
|
durationMs
|
|
211
225
|
);
|
|
212
|
-
return toolResult;
|
|
226
|
+
return { kind: "result", value: toolResult };
|
|
213
227
|
}
|
|
214
228
|
return {
|
|
215
229
|
hasTools() {
|
|
@@ -244,27 +258,59 @@ function createToolRouter(options) {
|
|
|
244
258
|
}));
|
|
245
259
|
},
|
|
246
260
|
async processToolCalls(toolCalls, context) {
|
|
261
|
+
const attachRewind = (arr, rewind) => {
|
|
262
|
+
if (rewind) {
|
|
263
|
+
arr.rewind = rewind;
|
|
264
|
+
}
|
|
265
|
+
return arr;
|
|
266
|
+
};
|
|
247
267
|
if (toolCalls.length === 0) {
|
|
248
|
-
return [];
|
|
268
|
+
return attachRewind([], void 0);
|
|
249
269
|
}
|
|
250
270
|
const turn = context?.turn ?? 0;
|
|
251
271
|
const sandboxId = context?.sandboxId;
|
|
272
|
+
let rewindSignal;
|
|
252
273
|
if (options.parallel) {
|
|
253
|
-
const
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
274
|
+
const scope = new CancellationScope({ cancellable: true });
|
|
275
|
+
const onRewindRequested = (signal) => {
|
|
276
|
+
if (!rewindSignal) {
|
|
277
|
+
rewindSignal = signal;
|
|
278
|
+
scope.cancel();
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
const outcomes = await scope.run(
|
|
282
|
+
async () => Promise.allSettled(
|
|
283
|
+
toolCalls.map(
|
|
284
|
+
(tc) => processToolCall(tc, turn, sandboxId, onRewindRequested)
|
|
285
|
+
)
|
|
286
|
+
)
|
|
258
287
|
);
|
|
288
|
+
const results2 = [];
|
|
289
|
+
for (const outcome of outcomes) {
|
|
290
|
+
if (outcome.status === "rejected") {
|
|
291
|
+
if (isCancellation(outcome.reason)) {
|
|
292
|
+
continue;
|
|
293
|
+
}
|
|
294
|
+
throw outcome.reason;
|
|
295
|
+
}
|
|
296
|
+
if (outcome.value.kind === "result") {
|
|
297
|
+
results2.push(outcome.value.value);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return attachRewind(results2, rewindSignal);
|
|
259
301
|
}
|
|
260
302
|
const results = [];
|
|
261
303
|
for (const toolCall of toolCalls) {
|
|
262
|
-
const
|
|
263
|
-
if (
|
|
264
|
-
|
|
304
|
+
const outcome = await processToolCall(toolCall, turn, sandboxId);
|
|
305
|
+
if (outcome.kind === "rewind") {
|
|
306
|
+
rewindSignal = outcome.signal;
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
if (outcome.kind === "result") {
|
|
310
|
+
results.push(outcome.value);
|
|
265
311
|
}
|
|
266
312
|
}
|
|
267
|
-
return results;
|
|
313
|
+
return attachRewind(results, rewindSignal);
|
|
268
314
|
},
|
|
269
315
|
async processToolCallsByName(toolCalls, toolName, handler, context) {
|
|
270
316
|
const matchingCalls = toolCalls.filter((tc) => tc.name === toolName);
|
|
@@ -388,6 +434,7 @@ function createSubagentTool(subagents) {
|
|
|
388
434
|
var childSandboxReadySignal = defineSignal("childSandboxReady");
|
|
389
435
|
|
|
390
436
|
// src/lib/subagent/handler.ts
|
|
437
|
+
var DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT = "1h";
|
|
391
438
|
function resolveSandboxConfig(config) {
|
|
392
439
|
if (!config || config === "none") {
|
|
393
440
|
return { source: "none", init: "per-call", continuation: "fork" };
|
|
@@ -419,17 +466,28 @@ function createSubagentHandler(subagents) {
|
|
|
419
466
|
const threadSandboxes = /* @__PURE__ */ new Map();
|
|
420
467
|
const persistentSandboxes = /* @__PURE__ */ new Map();
|
|
421
468
|
const persistentSandboxCreating = /* @__PURE__ */ new Set();
|
|
469
|
+
const persistentSandboxCreationError = /* @__PURE__ */ new Map();
|
|
422
470
|
const lazyCreatorAgent = /* @__PURE__ */ new Map();
|
|
471
|
+
const snapshotBaseCreatorAgent = /* @__PURE__ */ new Map();
|
|
423
472
|
const threadSnapshots = /* @__PURE__ */ new Map();
|
|
424
473
|
const persistentBaseSnapshot = /* @__PURE__ */ new Map();
|
|
425
474
|
const persistentBaseSnapshotCreating = /* @__PURE__ */ new Set();
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
lazyCreatorAgent.
|
|
475
|
+
const persistentBaseSnapshotCreationError = /* @__PURE__ */ new Map();
|
|
476
|
+
setHandler(
|
|
477
|
+
childSandboxReadySignal,
|
|
478
|
+
({ childWorkflowId, sandboxId, baseSnapshot }) => {
|
|
479
|
+
const lazyAgent = lazyCreatorAgent.get(childWorkflowId);
|
|
480
|
+
if (lazyAgent && !persistentSandboxes.has(lazyAgent)) {
|
|
481
|
+
persistentSandboxes.set(lazyAgent, sandboxId);
|
|
482
|
+
lazyCreatorAgent.delete(childWorkflowId);
|
|
483
|
+
}
|
|
484
|
+
const snapAgent = snapshotBaseCreatorAgent.get(childWorkflowId);
|
|
485
|
+
if (snapAgent && baseSnapshot && !persistentBaseSnapshot.has(snapAgent)) {
|
|
486
|
+
persistentBaseSnapshot.set(snapAgent, baseSnapshot);
|
|
487
|
+
snapshotBaseCreatorAgent.delete(childWorkflowId);
|
|
488
|
+
}
|
|
431
489
|
}
|
|
432
|
-
|
|
490
|
+
);
|
|
433
491
|
const handler = async (args, context) => {
|
|
434
492
|
const config = subagents.find((s) => s.agentName === args.subagent);
|
|
435
493
|
if (!config) {
|
|
@@ -485,8 +543,20 @@ function createSubagentHandler(subagents) {
|
|
|
485
543
|
baseSnap = persistentBaseSnapshot.get(config.agentName);
|
|
486
544
|
if (!baseSnap) {
|
|
487
545
|
if (persistentBaseSnapshotCreating.has(config.agentName)) {
|
|
488
|
-
await condition(
|
|
546
|
+
await condition(
|
|
547
|
+
() => persistentBaseSnapshot.has(config.agentName) || persistentBaseSnapshotCreationError.has(config.agentName) || !persistentBaseSnapshotCreating.has(config.agentName)
|
|
548
|
+
);
|
|
549
|
+
const creatorErr = persistentBaseSnapshotCreationError.get(
|
|
550
|
+
config.agentName
|
|
551
|
+
);
|
|
552
|
+
if (creatorErr !== void 0) {
|
|
553
|
+
throw creatorErr;
|
|
554
|
+
}
|
|
489
555
|
baseSnap = persistentBaseSnapshot.get(config.agentName);
|
|
556
|
+
if (!baseSnap) {
|
|
557
|
+
persistentBaseSnapshotCreating.add(config.agentName);
|
|
558
|
+
isSnapshotBaseCreator = true;
|
|
559
|
+
}
|
|
490
560
|
} else {
|
|
491
561
|
persistentBaseSnapshotCreating.add(config.agentName);
|
|
492
562
|
isSnapshotBaseCreator = true;
|
|
@@ -504,8 +574,20 @@ function createSubagentHandler(subagents) {
|
|
|
504
574
|
baseSandboxId = persistentSandboxes.get(config.agentName);
|
|
505
575
|
if (!baseSandboxId) {
|
|
506
576
|
if (persistentSandboxCreating.has(config.agentName)) {
|
|
507
|
-
await condition(
|
|
577
|
+
await condition(
|
|
578
|
+
() => persistentSandboxes.has(config.agentName) || persistentSandboxCreationError.has(config.agentName) || !persistentSandboxCreating.has(config.agentName)
|
|
579
|
+
);
|
|
580
|
+
const creatorErr = persistentSandboxCreationError.get(
|
|
581
|
+
config.agentName
|
|
582
|
+
);
|
|
583
|
+
if (creatorErr !== void 0) {
|
|
584
|
+
throw creatorErr;
|
|
585
|
+
}
|
|
508
586
|
baseSandboxId = persistentSandboxes.get(config.agentName);
|
|
587
|
+
if (!baseSandboxId) {
|
|
588
|
+
persistentSandboxCreating.add(config.agentName);
|
|
589
|
+
isLazyCreator = true;
|
|
590
|
+
}
|
|
509
591
|
} else {
|
|
510
592
|
persistentSandboxCreating.add(config.agentName);
|
|
511
593
|
isLazyCreator = true;
|
|
@@ -534,6 +616,12 @@ function createSubagentHandler(subagents) {
|
|
|
534
616
|
};
|
|
535
617
|
const resolvedContext = config.context === void 0 ? void 0 : typeof config.context === "function" ? config.context() : config.context;
|
|
536
618
|
const childOpts = {
|
|
619
|
+
// Apply a bounded run timeout by default so a child workflow that
|
|
620
|
+
// fails to initialize or otherwise never reaches a terminal state
|
|
621
|
+
// cannot hang the parent's `Subagent` tool call forever. Callers can
|
|
622
|
+
// raise, lower, or disable it via `workflowOptions.workflowRunTimeout`.
|
|
623
|
+
workflowRunTimeout: DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT,
|
|
624
|
+
...config.workflowOptions ?? {},
|
|
537
625
|
workflowId: childWorkflowId,
|
|
538
626
|
args: resolvedContext === void 0 ? [args.prompt, workflowInput] : [args.prompt, workflowInput, resolvedContext],
|
|
539
627
|
taskQueue: config.taskQueue ?? parentTaskQueue
|
|
@@ -541,13 +629,39 @@ function createSubagentHandler(subagents) {
|
|
|
541
629
|
if (isLazyCreator) {
|
|
542
630
|
lazyCreatorAgent.set(childWorkflowId, config.agentName);
|
|
543
631
|
}
|
|
632
|
+
if (isSnapshotBaseCreator) {
|
|
633
|
+
snapshotBaseCreatorAgent.set(childWorkflowId, config.agentName);
|
|
634
|
+
}
|
|
544
635
|
log.info("subagent spawned", {
|
|
545
636
|
subagent: config.agentName,
|
|
546
637
|
childWorkflowId,
|
|
547
638
|
threadMode,
|
|
548
639
|
sandboxSource: sandboxCfg.source
|
|
549
640
|
});
|
|
550
|
-
|
|
641
|
+
let childResult;
|
|
642
|
+
try {
|
|
643
|
+
childResult = await executeChild(
|
|
644
|
+
config.workflow,
|
|
645
|
+
childOpts
|
|
646
|
+
);
|
|
647
|
+
} catch (err) {
|
|
648
|
+
log.warn("subagent failed", {
|
|
649
|
+
subagent: config.agentName,
|
|
650
|
+
childWorkflowId,
|
|
651
|
+
error: err instanceof Error ? err.message : String(err)
|
|
652
|
+
});
|
|
653
|
+
if (isLazyCreator) {
|
|
654
|
+
persistentSandboxCreating.delete(config.agentName);
|
|
655
|
+
persistentSandboxCreationError.set(config.agentName, err);
|
|
656
|
+
lazyCreatorAgent.delete(childWorkflowId);
|
|
657
|
+
}
|
|
658
|
+
if (isSnapshotBaseCreator) {
|
|
659
|
+
persistentBaseSnapshotCreating.delete(config.agentName);
|
|
660
|
+
persistentBaseSnapshotCreationError.set(config.agentName, err);
|
|
661
|
+
snapshotBaseCreatorAgent.delete(childWorkflowId);
|
|
662
|
+
}
|
|
663
|
+
throw err;
|
|
664
|
+
}
|
|
551
665
|
const effectiveShutdown = sandboxShutdownOverride ?? sandboxCfg.shutdown ?? "destroy";
|
|
552
666
|
log.info("subagent completed", {
|
|
553
667
|
subagent: config.agentName,
|
|
@@ -591,10 +705,13 @@ function createSubagentHandler(subagents) {
|
|
|
591
705
|
}
|
|
592
706
|
if (isLazyCreator) {
|
|
593
707
|
persistentSandboxCreating.delete(config.agentName);
|
|
708
|
+
persistentSandboxCreationError.delete(config.agentName);
|
|
594
709
|
lazyCreatorAgent.delete(childWorkflowId);
|
|
595
710
|
}
|
|
596
711
|
if (isSnapshotBaseCreator) {
|
|
597
712
|
persistentBaseSnapshotCreating.delete(config.agentName);
|
|
713
|
+
persistentBaseSnapshotCreationError.delete(config.agentName);
|
|
714
|
+
snapshotBaseCreatorAgent.delete(childWorkflowId);
|
|
598
715
|
}
|
|
599
716
|
if (!toolResponse) {
|
|
600
717
|
return {
|
|
@@ -837,6 +954,7 @@ async function createSession({
|
|
|
837
954
|
sandbox: sandboxInit,
|
|
838
955
|
sandboxShutdown = "destroy",
|
|
839
956
|
onSandboxReady,
|
|
957
|
+
onSessionExit,
|
|
840
958
|
virtualFs: virtualFsConfig,
|
|
841
959
|
virtualFsOps
|
|
842
960
|
}) {
|
|
@@ -861,7 +979,9 @@ async function createSession({
|
|
|
861
979
|
initializeThread,
|
|
862
980
|
appendSystemMessage,
|
|
863
981
|
appendAgentMessage,
|
|
864
|
-
forkThread
|
|
982
|
+
forkThread,
|
|
983
|
+
loadThreadState,
|
|
984
|
+
saveThreadState
|
|
865
985
|
} = threadOps;
|
|
866
986
|
const plugins = [];
|
|
867
987
|
let destroySubagentSandboxes;
|
|
@@ -955,8 +1075,10 @@ async function createSession({
|
|
|
955
1075
|
nonRetryable: true
|
|
956
1076
|
});
|
|
957
1077
|
}
|
|
1078
|
+
const forkInit = sandboxInit;
|
|
958
1079
|
sandboxId = await sandboxOps.forkSandbox(
|
|
959
|
-
|
|
1080
|
+
forkInit.sandboxId,
|
|
1081
|
+
forkInit.options
|
|
960
1082
|
);
|
|
961
1083
|
sandboxOwned = true;
|
|
962
1084
|
} else if (sandboxMode === "from-snapshot") {
|
|
@@ -966,8 +1088,11 @@ async function createSession({
|
|
|
966
1088
|
nonRetryable: true
|
|
967
1089
|
});
|
|
968
1090
|
}
|
|
969
|
-
const
|
|
970
|
-
sandboxId = await sandboxOps.restoreSandbox(
|
|
1091
|
+
const restoreInit = sandboxInit;
|
|
1092
|
+
sandboxId = await sandboxOps.restoreSandbox(
|
|
1093
|
+
restoreInit.snapshot,
|
|
1094
|
+
restoreInit.options
|
|
1095
|
+
);
|
|
971
1096
|
sandboxOwned = true;
|
|
972
1097
|
} else if (sandboxOps) {
|
|
973
1098
|
const skillFiles = skills ? collectSkillFiles(skills) : void 0;
|
|
@@ -984,7 +1109,10 @@ async function createSession({
|
|
|
984
1109
|
baseSnapshot = await sandboxOps.snapshotSandbox(sandboxId);
|
|
985
1110
|
}
|
|
986
1111
|
if (sandboxId && sandboxOwned && onSandboxReady) {
|
|
987
|
-
onSandboxReady(
|
|
1112
|
+
onSandboxReady({
|
|
1113
|
+
sandboxId,
|
|
1114
|
+
...baseSnapshot && { baseSnapshot }
|
|
1115
|
+
});
|
|
988
1116
|
}
|
|
989
1117
|
if (virtualFsConfig) {
|
|
990
1118
|
if (!virtualFsOps) {
|
|
@@ -1027,9 +1155,20 @@ async function createSession({
|
|
|
1027
1155
|
});
|
|
1028
1156
|
const sessionStartMs = Date.now();
|
|
1029
1157
|
const systemPrompt = stateManager.getSystemPrompt();
|
|
1158
|
+
const rehydrateFromSlice = (slice) => {
|
|
1159
|
+
stateManager.mergeUpdate({
|
|
1160
|
+
tasks: new Map(slice.tasks),
|
|
1161
|
+
...slice.custom
|
|
1162
|
+
});
|
|
1163
|
+
};
|
|
1030
1164
|
if (threadMode === "fork" && sourceThreadId) {
|
|
1031
1165
|
await forkThread(sourceThreadId, threadId, threadKey);
|
|
1032
|
-
|
|
1166
|
+
const forkedSlice = await loadThreadState(threadId, threadKey);
|
|
1167
|
+
if (forkedSlice) rehydrateFromSlice(forkedSlice);
|
|
1168
|
+
} else if (threadMode === "continue") {
|
|
1169
|
+
const continuedSlice = await loadThreadState(threadId, threadKey);
|
|
1170
|
+
if (continuedSlice) rehydrateFromSlice(continuedSlice);
|
|
1171
|
+
} else {
|
|
1033
1172
|
if (appendSystemPrompt) {
|
|
1034
1173
|
if (systemPrompt == null || typeof systemPrompt === "string" && systemPrompt.trim() === "") {
|
|
1035
1174
|
throw ApplicationFailure.create({
|
|
@@ -1051,18 +1190,21 @@ async function createSession({
|
|
|
1051
1190
|
let exitReason = "completed";
|
|
1052
1191
|
let finalMessage = null;
|
|
1053
1192
|
try {
|
|
1193
|
+
let assistantId;
|
|
1054
1194
|
while (stateManager.isRunning() && !stateManager.isTerminal() && stateManager.getTurns() < maxTurns) {
|
|
1055
1195
|
stateManager.incrementTurns();
|
|
1056
1196
|
const currentTurn = stateManager.getTurns();
|
|
1057
1197
|
log.debug("turn started", { agentName, threadId, turn: currentTurn });
|
|
1058
1198
|
stateManager.setTools(toolRouter.getToolDefinitions());
|
|
1199
|
+
assistantId ??= uuid4();
|
|
1059
1200
|
const { message, rawToolCalls, usage } = await runAgent({
|
|
1060
1201
|
threadId,
|
|
1061
1202
|
threadKey,
|
|
1062
1203
|
agentName,
|
|
1063
|
-
metadata
|
|
1204
|
+
metadata,
|
|
1205
|
+
assistantMessageId: assistantId
|
|
1064
1206
|
});
|
|
1065
|
-
await appendAgentMessage(threadId,
|
|
1207
|
+
await appendAgentMessage(threadId, assistantId, message, threadKey);
|
|
1066
1208
|
if (usage) {
|
|
1067
1209
|
stateManager.updateUsage(usage);
|
|
1068
1210
|
}
|
|
@@ -1107,6 +1249,18 @@ async function createSession({
|
|
|
1107
1249
|
stateManager.updateUsage(result.usage);
|
|
1108
1250
|
}
|
|
1109
1251
|
}
|
|
1252
|
+
const rewind = toolCallResults.rewind;
|
|
1253
|
+
if (rewind) {
|
|
1254
|
+
log.info("rewinding turn", {
|
|
1255
|
+
agentName,
|
|
1256
|
+
threadId,
|
|
1257
|
+
turn: currentTurn,
|
|
1258
|
+
toolCallId: rewind.toolCallId,
|
|
1259
|
+
toolName: rewind.toolName
|
|
1260
|
+
});
|
|
1261
|
+
continue;
|
|
1262
|
+
}
|
|
1263
|
+
assistantId = void 0;
|
|
1110
1264
|
if (stateManager.getStatus() === "WAITING_FOR_INPUT") {
|
|
1111
1265
|
const conditionMet = await condition(
|
|
1112
1266
|
() => stateManager.getStatus() === "RUNNING",
|
|
@@ -1139,6 +1293,19 @@ async function createSession({
|
|
|
1139
1293
|
});
|
|
1140
1294
|
throw ApplicationFailure.fromError(error);
|
|
1141
1295
|
} finally {
|
|
1296
|
+
try {
|
|
1297
|
+
await saveThreadState(
|
|
1298
|
+
threadId,
|
|
1299
|
+
stateManager.getPersistedSlice(),
|
|
1300
|
+
threadKey
|
|
1301
|
+
);
|
|
1302
|
+
} catch (persistError) {
|
|
1303
|
+
log.warn("failed to persist thread state", {
|
|
1304
|
+
agentName,
|
|
1305
|
+
threadId,
|
|
1306
|
+
error: persistError instanceof Error ? persistError.message : String(persistError)
|
|
1307
|
+
});
|
|
1308
|
+
}
|
|
1142
1309
|
await callSessionEnd(exitReason, stateManager.getTurns());
|
|
1143
1310
|
if (sandboxOwned && sandboxId && sandboxOps) {
|
|
1144
1311
|
switch (sandboxShutdown) {
|
|
@@ -1175,6 +1342,12 @@ async function createSession({
|
|
|
1175
1342
|
...baseSnapshot && { hasBaseSnapshot: true },
|
|
1176
1343
|
...exitSnapshot && { hasExitSnapshot: true }
|
|
1177
1344
|
});
|
|
1345
|
+
if (onSessionExit) {
|
|
1346
|
+
onSessionExit({
|
|
1347
|
+
...sandboxId && { sandboxId },
|
|
1348
|
+
...exitSnapshot && { snapshot: exitSnapshot }
|
|
1349
|
+
});
|
|
1350
|
+
}
|
|
1178
1351
|
return {
|
|
1179
1352
|
threadId,
|
|
1180
1353
|
finalMessage,
|
|
@@ -1203,6 +1376,15 @@ function defineWorkflow(config, fn) {
|
|
|
1203
1376
|
return workflow;
|
|
1204
1377
|
}
|
|
1205
1378
|
|
|
1379
|
+
// src/lib/thread/keys.ts
|
|
1380
|
+
var THREAD_TTL_SECONDS = 60 * 60 * 24 * 90;
|
|
1381
|
+
function getThreadListKey(threadKey, threadId) {
|
|
1382
|
+
return `${threadKey}:thread:${threadId}`;
|
|
1383
|
+
}
|
|
1384
|
+
function getThreadMetaKey(threadKey, threadId) {
|
|
1385
|
+
return `${threadKey}:meta:thread:${threadId}`;
|
|
1386
|
+
}
|
|
1387
|
+
|
|
1206
1388
|
// src/lib/types.ts
|
|
1207
1389
|
function isTerminalStatus(status) {
|
|
1208
1390
|
return status === "COMPLETED" || status === "FAILED" || status === "CANCELLED";
|
|
@@ -1222,11 +1404,19 @@ function createAgentStateManager({
|
|
|
1222
1404
|
let systemPrompt = initialState?.systemPrompt;
|
|
1223
1405
|
const tasks = new Map(initialState?.tasks);
|
|
1224
1406
|
const {
|
|
1225
|
-
status:
|
|
1226
|
-
version:
|
|
1227
|
-
turns:
|
|
1228
|
-
tasks:
|
|
1229
|
-
tools:
|
|
1407
|
+
status: _status,
|
|
1408
|
+
version: _version,
|
|
1409
|
+
turns: _turns,
|
|
1410
|
+
tasks: _tasks,
|
|
1411
|
+
tools: _tools,
|
|
1412
|
+
systemPrompt: _systemPrompt,
|
|
1413
|
+
fileTree: _fileTree,
|
|
1414
|
+
inlineFiles: _inlineFiles,
|
|
1415
|
+
virtualFsCtx: _virtualFsCtx,
|
|
1416
|
+
totalInputTokens: _totalInputTokens,
|
|
1417
|
+
totalOutputTokens: _totalOutputTokens,
|
|
1418
|
+
cachedWriteTokens: _cachedWriteTokens,
|
|
1419
|
+
cachedReadTokens: _cachedReadTokens,
|
|
1230
1420
|
...custom
|
|
1231
1421
|
} = initialState ?? {};
|
|
1232
1422
|
const customState = custom;
|
|
@@ -1306,7 +1496,14 @@ function createAgentStateManager({
|
|
|
1306
1496
|
version++;
|
|
1307
1497
|
},
|
|
1308
1498
|
mergeUpdate(update) {
|
|
1309
|
-
|
|
1499
|
+
const { tasks: nextTasks, ...rest } = update;
|
|
1500
|
+
if (nextTasks) {
|
|
1501
|
+
tasks.clear();
|
|
1502
|
+
for (const [id, task] of nextTasks) {
|
|
1503
|
+
tasks.set(id, task);
|
|
1504
|
+
}
|
|
1505
|
+
}
|
|
1506
|
+
Object.assign(customState, rest);
|
|
1310
1507
|
version++;
|
|
1311
1508
|
},
|
|
1312
1509
|
getCurrentState() {
|
|
@@ -1344,6 +1541,12 @@ function createAgentStateManager({
|
|
|
1344
1541
|
}
|
|
1345
1542
|
return deleted;
|
|
1346
1543
|
},
|
|
1544
|
+
getPersistedSlice() {
|
|
1545
|
+
return {
|
|
1546
|
+
tasks: Array.from(tasks.entries()),
|
|
1547
|
+
custom: { ...customState }
|
|
1548
|
+
};
|
|
1549
|
+
},
|
|
1347
1550
|
updateUsage(usage) {
|
|
1348
1551
|
totalInputTokens += usage.inputTokens ?? 0;
|
|
1349
1552
|
totalOutputTokens += usage.outputTokens ?? 0;
|
|
@@ -1387,22 +1590,42 @@ function defineSubagentWorkflow(config, fn) {
|
|
|
1387
1590
|
});
|
|
1388
1591
|
}
|
|
1389
1592
|
const parentHandle = getExternalWorkflowHandle(parent.workflowId);
|
|
1593
|
+
let capturedSandboxId;
|
|
1594
|
+
let capturedSnapshot;
|
|
1595
|
+
let capturedBaseSnapshot;
|
|
1596
|
+
let capturedThreadId;
|
|
1390
1597
|
const sessionInput = {
|
|
1391
1598
|
agentName: config.name,
|
|
1392
1599
|
sandboxShutdown: effectiveShutdown,
|
|
1393
1600
|
...workflowInput.thread && { thread: workflowInput.thread },
|
|
1394
1601
|
...workflowInput.sandbox && { sandbox: workflowInput.sandbox },
|
|
1395
|
-
onSandboxReady: (sandboxId) => {
|
|
1602
|
+
onSandboxReady: ({ sandboxId, baseSnapshot }) => {
|
|
1603
|
+
capturedBaseSnapshot = baseSnapshot;
|
|
1396
1604
|
const isReuse = workflowInput.sandbox?.mode === "continue";
|
|
1397
1605
|
if (!isReuse) {
|
|
1398
1606
|
void parentHandle.signal(childSandboxReadySignal, {
|
|
1399
1607
|
childWorkflowId: workflowInfo().workflowId,
|
|
1400
|
-
sandboxId
|
|
1608
|
+
sandboxId,
|
|
1609
|
+
...baseSnapshot && { baseSnapshot }
|
|
1401
1610
|
});
|
|
1402
1611
|
}
|
|
1612
|
+
},
|
|
1613
|
+
onSessionExit: ({ sandboxId, snapshot, threadId }) => {
|
|
1614
|
+
capturedSandboxId = sandboxId;
|
|
1615
|
+
capturedSnapshot = snapshot;
|
|
1616
|
+
capturedThreadId = threadId;
|
|
1617
|
+
}
|
|
1618
|
+
};
|
|
1619
|
+
const result = await fn(prompt, sessionInput, context ?? {});
|
|
1620
|
+
return {
|
|
1621
|
+
...result,
|
|
1622
|
+
...capturedThreadId !== void 0 && { threadId: capturedThreadId },
|
|
1623
|
+
...capturedSandboxId !== void 0 && { sandboxId: capturedSandboxId },
|
|
1624
|
+
...capturedSnapshot !== void 0 && { snapshot: capturedSnapshot },
|
|
1625
|
+
...capturedBaseSnapshot !== void 0 && {
|
|
1626
|
+
baseSnapshot: capturedBaseSnapshot
|
|
1403
1627
|
}
|
|
1404
1628
|
};
|
|
1405
|
-
return fn(prompt, sessionInput, context ?? {});
|
|
1406
1629
|
};
|
|
1407
1630
|
Object.defineProperty(workflow, "name", { value: config.name });
|
|
1408
1631
|
return Object.assign(workflow, {
|
|
@@ -2061,6 +2284,6 @@ var createAskUserQuestionHandler = () => async (args) => {
|
|
|
2061
2284
|
};
|
|
2062
2285
|
};
|
|
2063
2286
|
|
|
2064
|
-
export { SandboxNotFoundError, SandboxNotSupportedError, applyVirtualTreeMutations, askUserQuestionTool, bashTool, composeHooks, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createObservabilityHooks, createReadSkillHandler, createReadSkillTool, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createToolRouter, defineSubagent, defineSubagentWorkflow, defineTool, defineWorkflow, editTool, filesWithMimeType, formatVirtualFileTree, getShortId, globTool, grepTool, hasDirectory, hasFileWithMimeType, hasNoOtherToolCalls, isTerminalStatus, parseSkillFile, proxyRunAgent, proxyVirtualFsOps, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, writeFileTool };
|
|
2287
|
+
export { DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT, SandboxNotFoundError, SandboxNotSupportedError, THREAD_TTL_SECONDS, applyVirtualTreeMutations, askUserQuestionTool, bashTool, composeHooks, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createObservabilityHooks, createReadSkillHandler, createReadSkillTool, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createToolRouter, defineSubagent, defineSubagentWorkflow, defineTool, defineWorkflow, editTool, filesWithMimeType, formatVirtualFileTree, getShortId, getThreadListKey, getThreadMetaKey, globTool, grepTool, hasDirectory, hasFileWithMimeType, hasNoOtherToolCalls, isTerminalStatus, parseSkillFile, proxyRunAgent, proxyVirtualFsOps, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, writeFileTool };
|
|
2065
2288
|
//# sourceMappingURL=workflow.js.map
|
|
2066
2289
|
//# sourceMappingURL=workflow.js.map
|