zeitlich 0.2.38 → 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-BKhMtKDd.d.ts → activities-Bmu7XnaG.d.ts} +4 -6
- package/dist/{activities-CDcwkRZs.d.cts → activities-ByBFLvm2.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 +266 -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 +263 -49
- package/dist/index.js.map +1 -1
- package/dist/{proxy-D_3x7RN4.d.cts → proxy-BAKzNGRq.d.cts} +1 -1
- package/dist/{proxy-CUlKSvZS.d.ts → proxy-DO_MXbY4.d.ts} +1 -1
- package/dist/{thread-manager-CVu7o2cs.d.ts → thread-manager-CcRXasqs.d.ts} +2 -4
- package/dist/{thread-manager-HSwyh28L.d.cts → thread-manager-ClwSaUnj.d.cts} +2 -4
- package/dist/{thread-manager-c1gPopAG.d.ts → thread-manager-D-7lp1JK.d.ts} +2 -4
- package/dist/{thread-manager-wGi-LqIP.d.cts → thread-manager-Y8Ucf0Tf.d.cts} +2 -4
- package/dist/{types-C06FwR96.d.cts → types-Bcbiq8iv.d.cts} +162 -44
- package/dist/{types-BH_IRryz.d.ts → types-DpHTX-iO.d.ts} +54 -6
- package/dist/{types-DNr31FzL.d.ts → types-Dt8-HBBT.d.ts} +162 -44
- package/dist/{types-BaOw4hKI.d.cts → types-hFFi-Zd9.d.cts} +54 -6
- package/dist/{workflow-CSCkpwAL.d.ts → workflow-Bmf9EtDW.d.ts} +82 -2
- package/dist/{workflow-DuvMZ8Vm.d.cts → workflow-Bx9utBwb.d.cts} +82 -2
- package/dist/workflow.cjs +188 -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 +185 -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 +68 -28
- package/src/lib/session/types.ts +60 -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-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
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-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
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,12 @@ 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
|
+
});
|
|
1350
|
+
}
|
|
1254
1351
|
return {
|
|
1255
1352
|
threadId,
|
|
1256
1353
|
finalMessage,
|
|
@@ -1279,6 +1376,15 @@ function defineWorkflow(config, fn) {
|
|
|
1279
1376
|
return workflow;
|
|
1280
1377
|
}
|
|
1281
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
|
+
|
|
1282
1388
|
// src/lib/types.ts
|
|
1283
1389
|
function isTerminalStatus(status) {
|
|
1284
1390
|
return status === "COMPLETED" || status === "FAILED" || status === "CANCELLED";
|
|
@@ -1298,11 +1404,19 @@ function createAgentStateManager({
|
|
|
1298
1404
|
let systemPrompt = initialState?.systemPrompt;
|
|
1299
1405
|
const tasks = new Map(initialState?.tasks);
|
|
1300
1406
|
const {
|
|
1301
|
-
status:
|
|
1302
|
-
version:
|
|
1303
|
-
turns:
|
|
1304
|
-
tasks:
|
|
1305
|
-
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,
|
|
1306
1420
|
...custom
|
|
1307
1421
|
} = initialState ?? {};
|
|
1308
1422
|
const customState = custom;
|
|
@@ -1382,7 +1496,14 @@ function createAgentStateManager({
|
|
|
1382
1496
|
version++;
|
|
1383
1497
|
},
|
|
1384
1498
|
mergeUpdate(update) {
|
|
1385
|
-
|
|
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);
|
|
1386
1507
|
version++;
|
|
1387
1508
|
},
|
|
1388
1509
|
getCurrentState() {
|
|
@@ -1420,6 +1541,12 @@ function createAgentStateManager({
|
|
|
1420
1541
|
}
|
|
1421
1542
|
return deleted;
|
|
1422
1543
|
},
|
|
1544
|
+
getPersistedSlice() {
|
|
1545
|
+
return {
|
|
1546
|
+
tasks: Array.from(tasks.entries()),
|
|
1547
|
+
custom: { ...customState }
|
|
1548
|
+
};
|
|
1549
|
+
},
|
|
1423
1550
|
updateUsage(usage) {
|
|
1424
1551
|
totalInputTokens += usage.inputTokens ?? 0;
|
|
1425
1552
|
totalOutputTokens += usage.outputTokens ?? 0;
|
|
@@ -1463,22 +1590,42 @@ function defineSubagentWorkflow(config, fn) {
|
|
|
1463
1590
|
});
|
|
1464
1591
|
}
|
|
1465
1592
|
const parentHandle = getExternalWorkflowHandle(parent.workflowId);
|
|
1593
|
+
let capturedSandboxId;
|
|
1594
|
+
let capturedSnapshot;
|
|
1595
|
+
let capturedBaseSnapshot;
|
|
1596
|
+
let capturedThreadId;
|
|
1466
1597
|
const sessionInput = {
|
|
1467
1598
|
agentName: config.name,
|
|
1468
1599
|
sandboxShutdown: effectiveShutdown,
|
|
1469
1600
|
...workflowInput.thread && { thread: workflowInput.thread },
|
|
1470
1601
|
...workflowInput.sandbox && { sandbox: workflowInput.sandbox },
|
|
1471
|
-
onSandboxReady: (sandboxId) => {
|
|
1602
|
+
onSandboxReady: ({ sandboxId, baseSnapshot }) => {
|
|
1603
|
+
capturedBaseSnapshot = baseSnapshot;
|
|
1472
1604
|
const isReuse = workflowInput.sandbox?.mode === "continue";
|
|
1473
1605
|
if (!isReuse) {
|
|
1474
1606
|
void parentHandle.signal(childSandboxReadySignal, {
|
|
1475
1607
|
childWorkflowId: workflowInfo().workflowId,
|
|
1476
|
-
sandboxId
|
|
1608
|
+
sandboxId,
|
|
1609
|
+
...baseSnapshot && { baseSnapshot }
|
|
1477
1610
|
});
|
|
1478
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
|
|
1479
1627
|
}
|
|
1480
1628
|
};
|
|
1481
|
-
return fn(prompt, sessionInput, context ?? {});
|
|
1482
1629
|
};
|
|
1483
1630
|
Object.defineProperty(workflow, "name", { value: config.name });
|
|
1484
1631
|
return Object.assign(workflow, {
|
|
@@ -2137,6 +2284,6 @@ var createAskUserQuestionHandler = () => async (args) => {
|
|
|
2137
2284
|
};
|
|
2138
2285
|
};
|
|
2139
2286
|
|
|
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 };
|
|
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 };
|
|
2141
2288
|
//# sourceMappingURL=workflow.js.map
|
|
2142
2289
|
//# sourceMappingURL=workflow.js.map
|