zeitlich 0.2.38 → 0.2.40
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-BKhMtKDd.d.ts → activities-CULxRzJ1.d.ts} +4 -6
- package/dist/{activities-CDcwkRZs.d.cts → activities-CvUrG3YG.d.cts} +4 -6
- 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/thread/anthropic/index.cjs +140 -23
- package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/index.d.cts +8 -7
- package/dist/adapters/thread/anthropic/index.d.ts +8 -7
- package/dist/adapters/thread/anthropic/index.js +140 -24
- package/dist/adapters/thread/anthropic/index.js.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.cjs +8 -3
- package/dist/adapters/thread/anthropic/workflow.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.d.cts +5 -4
- package/dist/adapters/thread/anthropic/workflow.d.ts +5 -4
- package/dist/adapters/thread/anthropic/workflow.js +8 -4
- package/dist/adapters/thread/anthropic/workflow.js.map +1 -1
- package/dist/adapters/thread/google-genai/index.cjs +140 -23
- package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/index.d.cts +5 -4
- package/dist/adapters/thread/google-genai/index.d.ts +5 -4
- package/dist/adapters/thread/google-genai/index.js +140 -24
- package/dist/adapters/thread/google-genai/index.js.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.cjs +8 -3
- package/dist/adapters/thread/google-genai/workflow.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.d.cts +5 -4
- package/dist/adapters/thread/google-genai/workflow.d.ts +5 -4
- package/dist/adapters/thread/google-genai/workflow.js +8 -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 +139 -24
- package/dist/adapters/thread/langchain/index.cjs.map +1 -1
- package/dist/adapters/thread/langchain/index.d.cts +8 -7
- package/dist/adapters/thread/langchain/index.d.ts +8 -7
- package/dist/adapters/thread/langchain/index.js +139 -25
- package/dist/adapters/thread/langchain/index.js.map +1 -1
- package/dist/adapters/thread/langchain/workflow.cjs +8 -3
- package/dist/adapters/thread/langchain/workflow.cjs.map +1 -1
- package/dist/adapters/thread/langchain/workflow.d.cts +5 -4
- package/dist/adapters/thread/langchain/workflow.d.ts +5 -4
- package/dist/adapters/thread/langchain/workflow.js +8 -4
- package/dist/adapters/thread/langchain/workflow.js.map +1 -1
- package/dist/index.cjs +267 -48
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +264 -49
- package/dist/index.js.map +1 -1
- package/dist/{proxy-D_3x7RN4.d.cts → proxy-5EbwzaY4.d.cts} +1 -1
- package/dist/{proxy-CUlKSvZS.d.ts → proxy-wZufFfBh.d.ts} +1 -1
- package/dist/{thread-manager-CVu7o2cs.d.ts → thread-manager-BNiIt5r8.d.ts} +2 -4
- package/dist/{thread-manager-c1gPopAG.d.ts → thread-manager-BoN5DOvG.d.cts} +2 -4
- package/dist/{thread-manager-wGi-LqIP.d.cts → thread-manager-BqBAIsED.d.ts} +2 -4
- package/dist/{thread-manager-HSwyh28L.d.cts → thread-manager-DF8WuCRs.d.cts} +2 -4
- package/dist/{types-BH_IRryz.d.ts → types-C7OoY7h8.d.ts} +54 -6
- package/dist/{types-C06FwR96.d.cts → types-Cn2r3ol3.d.cts} +163 -44
- package/dist/{types-BaOw4hKI.d.cts → types-CuISs0Ub.d.cts} +54 -6
- package/dist/{types-DNr31FzL.d.ts → types-DeQH84C_.d.ts} +163 -44
- package/dist/{workflow-CSCkpwAL.d.ts → workflow-C2MZZj5K.d.ts} +82 -2
- package/dist/{workflow-DuvMZ8Vm.d.cts → workflow-DhplIN65.d.cts} +82 -2
- package/dist/workflow.cjs +189 -37
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +2 -2
- package/dist/workflow.d.ts +2 -2
- package/dist/workflow.js +186 -38
- package/dist/workflow.js.map +1 -1
- package/package.json +11 -1
- package/src/adapters/thread/adapter-id.test.ts +42 -0
- package/src/adapters/thread/anthropic/activities.ts +33 -7
- 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 +8 -4
- package/src/adapters/thread/anthropic/proxy.ts +3 -2
- package/src/adapters/thread/anthropic/thread-manager.ts +27 -4
- package/src/adapters/thread/google-genai/activities.ts +33 -7
- 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 +7 -3
- package/src/adapters/thread/google-genai/proxy.ts +3 -2
- package/src/adapters/thread/google-genai/thread-manager.ts +27 -4
- package/src/adapters/thread/index.ts +39 -0
- package/src/adapters/thread/langchain/activities.ts +33 -7
- 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 +8 -3
- package/src/adapters/thread/langchain/proxy.ts +3 -2
- package/src/adapters/thread/langchain/thread-manager.ts +27 -4
- package/src/lib/lifecycle.ts +3 -1
- package/src/lib/model/types.ts +7 -10
- package/src/lib/session/session-edge-cases.integration.test.ts +131 -63
- package/src/lib/session/session.integration.test.ts +174 -5
- package/src/lib/session/session.ts +69 -28
- package/src/lib/session/types.ts +61 -9
- 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 +528 -0
- 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 +92 -14
- package/src/lib/thread/proxy.ts +2 -0
- package/src/lib/thread/types.ts +60 -6
- package/src/lib/tool-router/types.ts +16 -8
- package/src/lib/types.ts +12 -0
- package/src/workflow.ts +12 -1
- package/tsup.config.ts +1 -0
package/dist/workflow.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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 {
|
|
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-DhplIN65.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-Cn2r3ol3.cjs';
|
|
3
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';
|
package/dist/workflow.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
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 {
|
|
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-C2MZZj5K.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-DeQH84C_.js';
|
|
3
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';
|
package/dist/workflow.js
CHANGED
|
@@ -434,6 +434,7 @@ function createSubagentTool(subagents) {
|
|
|
434
434
|
var childSandboxReadySignal = defineSignal("childSandboxReady");
|
|
435
435
|
|
|
436
436
|
// src/lib/subagent/handler.ts
|
|
437
|
+
var DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT = "1h";
|
|
437
438
|
function resolveSandboxConfig(config) {
|
|
438
439
|
if (!config || config === "none") {
|
|
439
440
|
return { source: "none", init: "per-call", continuation: "fork" };
|
|
@@ -465,17 +466,28 @@ function createSubagentHandler(subagents) {
|
|
|
465
466
|
const threadSandboxes = /* @__PURE__ */ new Map();
|
|
466
467
|
const persistentSandboxes = /* @__PURE__ */ new Map();
|
|
467
468
|
const persistentSandboxCreating = /* @__PURE__ */ new Set();
|
|
469
|
+
const persistentSandboxCreationError = /* @__PURE__ */ new Map();
|
|
468
470
|
const lazyCreatorAgent = /* @__PURE__ */ new Map();
|
|
471
|
+
const snapshotBaseCreatorAgent = /* @__PURE__ */ new Map();
|
|
469
472
|
const threadSnapshots = /* @__PURE__ */ new Map();
|
|
470
473
|
const persistentBaseSnapshot = /* @__PURE__ */ new Map();
|
|
471
474
|
const persistentBaseSnapshotCreating = /* @__PURE__ */ new Set();
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
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
|
+
}
|
|
477
489
|
}
|
|
478
|
-
|
|
490
|
+
);
|
|
479
491
|
const handler = async (args, context) => {
|
|
480
492
|
const config = subagents.find((s) => s.agentName === args.subagent);
|
|
481
493
|
if (!config) {
|
|
@@ -531,8 +543,20 @@ function createSubagentHandler(subagents) {
|
|
|
531
543
|
baseSnap = persistentBaseSnapshot.get(config.agentName);
|
|
532
544
|
if (!baseSnap) {
|
|
533
545
|
if (persistentBaseSnapshotCreating.has(config.agentName)) {
|
|
534
|
-
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
|
+
}
|
|
535
555
|
baseSnap = persistentBaseSnapshot.get(config.agentName);
|
|
556
|
+
if (!baseSnap) {
|
|
557
|
+
persistentBaseSnapshotCreating.add(config.agentName);
|
|
558
|
+
isSnapshotBaseCreator = true;
|
|
559
|
+
}
|
|
536
560
|
} else {
|
|
537
561
|
persistentBaseSnapshotCreating.add(config.agentName);
|
|
538
562
|
isSnapshotBaseCreator = true;
|
|
@@ -550,8 +574,20 @@ function createSubagentHandler(subagents) {
|
|
|
550
574
|
baseSandboxId = persistentSandboxes.get(config.agentName);
|
|
551
575
|
if (!baseSandboxId) {
|
|
552
576
|
if (persistentSandboxCreating.has(config.agentName)) {
|
|
553
|
-
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
|
+
}
|
|
554
586
|
baseSandboxId = persistentSandboxes.get(config.agentName);
|
|
587
|
+
if (!baseSandboxId) {
|
|
588
|
+
persistentSandboxCreating.add(config.agentName);
|
|
589
|
+
isLazyCreator = true;
|
|
590
|
+
}
|
|
555
591
|
} else {
|
|
556
592
|
persistentSandboxCreating.add(config.agentName);
|
|
557
593
|
isLazyCreator = true;
|
|
@@ -580,6 +616,12 @@ function createSubagentHandler(subagents) {
|
|
|
580
616
|
};
|
|
581
617
|
const resolvedContext = config.context === void 0 ? void 0 : typeof config.context === "function" ? config.context() : config.context;
|
|
582
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 ?? {},
|
|
583
625
|
workflowId: childWorkflowId,
|
|
584
626
|
args: resolvedContext === void 0 ? [args.prompt, workflowInput] : [args.prompt, workflowInput, resolvedContext],
|
|
585
627
|
taskQueue: config.taskQueue ?? parentTaskQueue
|
|
@@ -587,13 +629,39 @@ function createSubagentHandler(subagents) {
|
|
|
587
629
|
if (isLazyCreator) {
|
|
588
630
|
lazyCreatorAgent.set(childWorkflowId, config.agentName);
|
|
589
631
|
}
|
|
632
|
+
if (isSnapshotBaseCreator) {
|
|
633
|
+
snapshotBaseCreatorAgent.set(childWorkflowId, config.agentName);
|
|
634
|
+
}
|
|
590
635
|
log.info("subagent spawned", {
|
|
591
636
|
subagent: config.agentName,
|
|
592
637
|
childWorkflowId,
|
|
593
638
|
threadMode,
|
|
594
639
|
sandboxSource: sandboxCfg.source
|
|
595
640
|
});
|
|
596
|
-
|
|
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
|
+
}
|
|
597
665
|
const effectiveShutdown = sandboxShutdownOverride ?? sandboxCfg.shutdown ?? "destroy";
|
|
598
666
|
log.info("subagent completed", {
|
|
599
667
|
subagent: config.agentName,
|
|
@@ -637,10 +705,13 @@ function createSubagentHandler(subagents) {
|
|
|
637
705
|
}
|
|
638
706
|
if (isLazyCreator) {
|
|
639
707
|
persistentSandboxCreating.delete(config.agentName);
|
|
708
|
+
persistentSandboxCreationError.delete(config.agentName);
|
|
640
709
|
lazyCreatorAgent.delete(childWorkflowId);
|
|
641
710
|
}
|
|
642
711
|
if (isSnapshotBaseCreator) {
|
|
643
712
|
persistentBaseSnapshotCreating.delete(config.agentName);
|
|
713
|
+
persistentBaseSnapshotCreationError.delete(config.agentName);
|
|
714
|
+
snapshotBaseCreatorAgent.delete(childWorkflowId);
|
|
644
715
|
}
|
|
645
716
|
if (!toolResponse) {
|
|
646
717
|
return {
|
|
@@ -883,6 +954,7 @@ async function createSession({
|
|
|
883
954
|
sandbox: sandboxInit,
|
|
884
955
|
sandboxShutdown = "destroy",
|
|
885
956
|
onSandboxReady,
|
|
957
|
+
onSessionExit,
|
|
886
958
|
virtualFs: virtualFsConfig,
|
|
887
959
|
virtualFsOps
|
|
888
960
|
}) {
|
|
@@ -908,7 +980,8 @@ async function createSession({
|
|
|
908
980
|
appendSystemMessage,
|
|
909
981
|
appendAgentMessage,
|
|
910
982
|
forkThread,
|
|
911
|
-
|
|
983
|
+
loadThreadState,
|
|
984
|
+
saveThreadState
|
|
912
985
|
} = threadOps;
|
|
913
986
|
const plugins = [];
|
|
914
987
|
let destroySubagentSandboxes;
|
|
@@ -1036,7 +1109,10 @@ async function createSession({
|
|
|
1036
1109
|
baseSnapshot = await sandboxOps.snapshotSandbox(sandboxId);
|
|
1037
1110
|
}
|
|
1038
1111
|
if (sandboxId && sandboxOwned && onSandboxReady) {
|
|
1039
|
-
onSandboxReady(
|
|
1112
|
+
onSandboxReady({
|
|
1113
|
+
sandboxId,
|
|
1114
|
+
...baseSnapshot && { baseSnapshot }
|
|
1115
|
+
});
|
|
1040
1116
|
}
|
|
1041
1117
|
if (virtualFsConfig) {
|
|
1042
1118
|
if (!virtualFsOps) {
|
|
@@ -1079,9 +1155,20 @@ async function createSession({
|
|
|
1079
1155
|
});
|
|
1080
1156
|
const sessionStartMs = Date.now();
|
|
1081
1157
|
const systemPrompt = stateManager.getSystemPrompt();
|
|
1158
|
+
const rehydrateFromSlice = (slice) => {
|
|
1159
|
+
stateManager.mergeUpdate({
|
|
1160
|
+
tasks: new Map(slice.tasks),
|
|
1161
|
+
...slice.custom
|
|
1162
|
+
});
|
|
1163
|
+
};
|
|
1082
1164
|
if (threadMode === "fork" && sourceThreadId) {
|
|
1083
1165
|
await forkThread(sourceThreadId, threadId, threadKey);
|
|
1084
|
-
|
|
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 {
|
|
1085
1172
|
if (appendSystemPrompt) {
|
|
1086
1173
|
if (systemPrompt == null || typeof systemPrompt === "string" && systemPrompt.trim() === "") {
|
|
1087
1174
|
throw ApplicationFailure.create({
|
|
@@ -1103,24 +1190,21 @@ async function createSession({
|
|
|
1103
1190
|
let exitReason = "completed";
|
|
1104
1191
|
let finalMessage = null;
|
|
1105
1192
|
try {
|
|
1193
|
+
let assistantId;
|
|
1106
1194
|
while (stateManager.isRunning() && !stateManager.isTerminal() && stateManager.getTurns() < maxTurns) {
|
|
1107
1195
|
stateManager.incrementTurns();
|
|
1108
1196
|
const currentTurn = stateManager.getTurns();
|
|
1109
1197
|
log.debug("turn started", { agentName, threadId, turn: currentTurn });
|
|
1110
1198
|
stateManager.setTools(toolRouter.getToolDefinitions());
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
rawToolCalls,
|
|
1114
|
-
usage,
|
|
1115
|
-
threadLengthAtCall
|
|
1116
|
-
} = await runAgent({
|
|
1199
|
+
assistantId ??= uuid4();
|
|
1200
|
+
const { message, rawToolCalls, usage } = await runAgent({
|
|
1117
1201
|
threadId,
|
|
1118
1202
|
threadKey,
|
|
1119
1203
|
agentName,
|
|
1120
|
-
metadata
|
|
1204
|
+
metadata,
|
|
1205
|
+
assistantMessageId: assistantId
|
|
1121
1206
|
});
|
|
1122
|
-
|
|
1123
|
-
await appendAgentMessage(threadId, uuid4(), message, threadKey);
|
|
1207
|
+
await appendAgentMessage(threadId, assistantId, message, threadKey);
|
|
1124
1208
|
if (usage) {
|
|
1125
1209
|
stateManager.updateUsage(usage);
|
|
1126
1210
|
}
|
|
@@ -1174,15 +1258,9 @@ async function createSession({
|
|
|
1174
1258
|
toolCallId: rewind.toolCallId,
|
|
1175
1259
|
toolName: rewind.toolName
|
|
1176
1260
|
});
|
|
1177
|
-
if (preAssistantLength === void 0) {
|
|
1178
|
-
throw ApplicationFailure.create({
|
|
1179
|
-
message: "Rewind requested but runAgent did not report `threadLengthAtCall`; the adapter must populate it to support rewinds.",
|
|
1180
|
-
nonRetryable: true
|
|
1181
|
-
});
|
|
1182
|
-
}
|
|
1183
|
-
await truncateThread(threadId, preAssistantLength, threadKey);
|
|
1184
1261
|
continue;
|
|
1185
1262
|
}
|
|
1263
|
+
assistantId = void 0;
|
|
1186
1264
|
if (stateManager.getStatus() === "WAITING_FOR_INPUT") {
|
|
1187
1265
|
const conditionMet = await condition(
|
|
1188
1266
|
() => stateManager.getStatus() === "RUNNING",
|
|
@@ -1215,6 +1293,19 @@ async function createSession({
|
|
|
1215
1293
|
});
|
|
1216
1294
|
throw ApplicationFailure.fromError(error);
|
|
1217
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
|
+
}
|
|
1218
1309
|
await callSessionEnd(exitReason, stateManager.getTurns());
|
|
1219
1310
|
if (sandboxOwned && sandboxId && sandboxOps) {
|
|
1220
1311
|
switch (sandboxShutdown) {
|
|
@@ -1251,6 +1342,13 @@ async function createSession({
|
|
|
1251
1342
|
...baseSnapshot && { hasBaseSnapshot: true },
|
|
1252
1343
|
...exitSnapshot && { hasExitSnapshot: true }
|
|
1253
1344
|
});
|
|
1345
|
+
if (onSessionExit) {
|
|
1346
|
+
onSessionExit({
|
|
1347
|
+
...sandboxId && { sandboxId },
|
|
1348
|
+
...exitSnapshot && { snapshot: exitSnapshot },
|
|
1349
|
+
threadId
|
|
1350
|
+
});
|
|
1351
|
+
}
|
|
1254
1352
|
return {
|
|
1255
1353
|
threadId,
|
|
1256
1354
|
finalMessage,
|
|
@@ -1279,6 +1377,15 @@ function defineWorkflow(config, fn) {
|
|
|
1279
1377
|
return workflow;
|
|
1280
1378
|
}
|
|
1281
1379
|
|
|
1380
|
+
// src/lib/thread/keys.ts
|
|
1381
|
+
var THREAD_TTL_SECONDS = 60 * 60 * 24 * 90;
|
|
1382
|
+
function getThreadListKey(threadKey, threadId) {
|
|
1383
|
+
return `${threadKey}:thread:${threadId}`;
|
|
1384
|
+
}
|
|
1385
|
+
function getThreadMetaKey(threadKey, threadId) {
|
|
1386
|
+
return `${threadKey}:meta:thread:${threadId}`;
|
|
1387
|
+
}
|
|
1388
|
+
|
|
1282
1389
|
// src/lib/types.ts
|
|
1283
1390
|
function isTerminalStatus(status) {
|
|
1284
1391
|
return status === "COMPLETED" || status === "FAILED" || status === "CANCELLED";
|
|
@@ -1298,11 +1405,19 @@ function createAgentStateManager({
|
|
|
1298
1405
|
let systemPrompt = initialState?.systemPrompt;
|
|
1299
1406
|
const tasks = new Map(initialState?.tasks);
|
|
1300
1407
|
const {
|
|
1301
|
-
status:
|
|
1302
|
-
version:
|
|
1303
|
-
turns:
|
|
1304
|
-
tasks:
|
|
1305
|
-
tools:
|
|
1408
|
+
status: _status,
|
|
1409
|
+
version: _version,
|
|
1410
|
+
turns: _turns,
|
|
1411
|
+
tasks: _tasks,
|
|
1412
|
+
tools: _tools,
|
|
1413
|
+
systemPrompt: _systemPrompt,
|
|
1414
|
+
fileTree: _fileTree,
|
|
1415
|
+
inlineFiles: _inlineFiles,
|
|
1416
|
+
virtualFsCtx: _virtualFsCtx,
|
|
1417
|
+
totalInputTokens: _totalInputTokens,
|
|
1418
|
+
totalOutputTokens: _totalOutputTokens,
|
|
1419
|
+
cachedWriteTokens: _cachedWriteTokens,
|
|
1420
|
+
cachedReadTokens: _cachedReadTokens,
|
|
1306
1421
|
...custom
|
|
1307
1422
|
} = initialState ?? {};
|
|
1308
1423
|
const customState = custom;
|
|
@@ -1382,7 +1497,14 @@ function createAgentStateManager({
|
|
|
1382
1497
|
version++;
|
|
1383
1498
|
},
|
|
1384
1499
|
mergeUpdate(update) {
|
|
1385
|
-
|
|
1500
|
+
const { tasks: nextTasks, ...rest } = update;
|
|
1501
|
+
if (nextTasks) {
|
|
1502
|
+
tasks.clear();
|
|
1503
|
+
for (const [id, task] of nextTasks) {
|
|
1504
|
+
tasks.set(id, task);
|
|
1505
|
+
}
|
|
1506
|
+
}
|
|
1507
|
+
Object.assign(customState, rest);
|
|
1386
1508
|
version++;
|
|
1387
1509
|
},
|
|
1388
1510
|
getCurrentState() {
|
|
@@ -1420,6 +1542,12 @@ function createAgentStateManager({
|
|
|
1420
1542
|
}
|
|
1421
1543
|
return deleted;
|
|
1422
1544
|
},
|
|
1545
|
+
getPersistedSlice() {
|
|
1546
|
+
return {
|
|
1547
|
+
tasks: Array.from(tasks.entries()),
|
|
1548
|
+
custom: { ...customState }
|
|
1549
|
+
};
|
|
1550
|
+
},
|
|
1423
1551
|
updateUsage(usage) {
|
|
1424
1552
|
totalInputTokens += usage.inputTokens ?? 0;
|
|
1425
1553
|
totalOutputTokens += usage.outputTokens ?? 0;
|
|
@@ -1463,22 +1591,42 @@ function defineSubagentWorkflow(config, fn) {
|
|
|
1463
1591
|
});
|
|
1464
1592
|
}
|
|
1465
1593
|
const parentHandle = getExternalWorkflowHandle(parent.workflowId);
|
|
1594
|
+
let capturedSandboxId;
|
|
1595
|
+
let capturedSnapshot;
|
|
1596
|
+
let capturedBaseSnapshot;
|
|
1597
|
+
let capturedThreadId;
|
|
1466
1598
|
const sessionInput = {
|
|
1467
1599
|
agentName: config.name,
|
|
1468
1600
|
sandboxShutdown: effectiveShutdown,
|
|
1469
1601
|
...workflowInput.thread && { thread: workflowInput.thread },
|
|
1470
1602
|
...workflowInput.sandbox && { sandbox: workflowInput.sandbox },
|
|
1471
|
-
onSandboxReady: (sandboxId) => {
|
|
1603
|
+
onSandboxReady: ({ sandboxId, baseSnapshot }) => {
|
|
1604
|
+
capturedBaseSnapshot = baseSnapshot;
|
|
1472
1605
|
const isReuse = workflowInput.sandbox?.mode === "continue";
|
|
1473
1606
|
if (!isReuse) {
|
|
1474
1607
|
void parentHandle.signal(childSandboxReadySignal, {
|
|
1475
1608
|
childWorkflowId: workflowInfo().workflowId,
|
|
1476
|
-
sandboxId
|
|
1609
|
+
sandboxId,
|
|
1610
|
+
...baseSnapshot && { baseSnapshot }
|
|
1477
1611
|
});
|
|
1478
1612
|
}
|
|
1613
|
+
},
|
|
1614
|
+
onSessionExit: ({ sandboxId, snapshot, threadId }) => {
|
|
1615
|
+
capturedSandboxId = sandboxId;
|
|
1616
|
+
capturedSnapshot = snapshot;
|
|
1617
|
+
capturedThreadId = threadId;
|
|
1618
|
+
}
|
|
1619
|
+
};
|
|
1620
|
+
const result = await fn(prompt, sessionInput, context ?? {});
|
|
1621
|
+
return {
|
|
1622
|
+
...result,
|
|
1623
|
+
...capturedThreadId !== void 0 && { threadId: capturedThreadId },
|
|
1624
|
+
...capturedSandboxId !== void 0 && { sandboxId: capturedSandboxId },
|
|
1625
|
+
...capturedSnapshot !== void 0 && { snapshot: capturedSnapshot },
|
|
1626
|
+
...capturedBaseSnapshot !== void 0 && {
|
|
1627
|
+
baseSnapshot: capturedBaseSnapshot
|
|
1479
1628
|
}
|
|
1480
1629
|
};
|
|
1481
|
-
return fn(prompt, sessionInput, context ?? {});
|
|
1482
1630
|
};
|
|
1483
1631
|
Object.defineProperty(workflow, "name", { value: config.name });
|
|
1484
1632
|
return Object.assign(workflow, {
|
|
@@ -2137,6 +2285,6 @@ var createAskUserQuestionHandler = () => async (args) => {
|
|
|
2137
2285
|
};
|
|
2138
2286
|
};
|
|
2139
2287
|
|
|
2140
|
-
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 };
|
|
2288
|
+
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 };
|
|
2141
2289
|
//# sourceMappingURL=workflow.js.map
|
|
2142
2290
|
//# sourceMappingURL=workflow.js.map
|