zeitlich 0.2.32 → 0.2.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +28 -16
- package/dist/{activities-FIXVz7DT.d.ts → activities-JOqPfKP0.d.cts} +6 -5
- package/dist/{activities-DA-bQM12.d.cts → activities-WwMsjRwm.d.ts} +6 -5
- package/dist/adapters/sandbox/bedrock/index.cjs +2 -0
- package/dist/adapters/sandbox/bedrock/index.cjs.map +1 -1
- package/dist/adapters/sandbox/bedrock/index.d.cts +4 -3
- package/dist/adapters/sandbox/bedrock/index.d.ts +4 -3
- package/dist/adapters/sandbox/bedrock/index.js +2 -0
- package/dist/adapters/sandbox/bedrock/index.js.map +1 -1
- package/dist/adapters/sandbox/bedrock/workflow.cjs +1 -0
- package/dist/adapters/sandbox/bedrock/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/bedrock/workflow.d.cts +2 -2
- package/dist/adapters/sandbox/bedrock/workflow.d.ts +2 -2
- package/dist/adapters/sandbox/bedrock/workflow.js +1 -0
- package/dist/adapters/sandbox/bedrock/workflow.js.map +1 -1
- package/dist/adapters/sandbox/daytona/index.cjs +2 -0
- package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/index.d.cts +2 -1
- package/dist/adapters/sandbox/daytona/index.d.ts +2 -1
- package/dist/adapters/sandbox/daytona/index.js +2 -0
- package/dist/adapters/sandbox/daytona/index.js.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.cjs +1 -0
- package/dist/adapters/sandbox/daytona/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/daytona/workflow.js +1 -0
- package/dist/adapters/sandbox/daytona/workflow.js.map +1 -1
- package/dist/adapters/sandbox/e2b/index.cjs +3 -0
- package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/index.d.cts +2 -1
- package/dist/adapters/sandbox/e2b/index.d.ts +2 -1
- package/dist/adapters/sandbox/e2b/index.js +3 -0
- package/dist/adapters/sandbox/e2b/index.js.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.cjs +1 -0
- package/dist/adapters/sandbox/e2b/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/e2b/workflow.js +1 -0
- package/dist/adapters/sandbox/e2b/workflow.js.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.cjs +2 -0
- package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.d.cts +2 -1
- package/dist/adapters/sandbox/inmemory/index.d.ts +2 -1
- package/dist/adapters/sandbox/inmemory/index.js +2 -0
- package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.cjs +1 -0
- package/dist/adapters/sandbox/inmemory/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.js +1 -0
- package/dist/adapters/sandbox/inmemory/workflow.js.map +1 -1
- package/dist/adapters/thread/anthropic/index.cjs +18 -2
- package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/index.d.cts +12 -11
- package/dist/adapters/thread/anthropic/index.d.ts +12 -11
- package/dist/adapters/thread/anthropic/index.js +18 -2
- package/dist/adapters/thread/anthropic/index.js.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.d.cts +5 -5
- package/dist/adapters/thread/anthropic/workflow.d.ts +5 -5
- package/dist/adapters/thread/google-genai/index.cjs +29 -8
- package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/index.d.cts +8 -8
- package/dist/adapters/thread/google-genai/index.d.ts +8 -8
- package/dist/adapters/thread/google-genai/index.js +29 -8
- package/dist/adapters/thread/google-genai/index.js.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.d.cts +5 -5
- package/dist/adapters/thread/google-genai/workflow.d.ts +5 -5
- package/dist/adapters/thread/langchain/index.cjs +42 -23
- package/dist/adapters/thread/langchain/index.cjs.map +1 -1
- package/dist/adapters/thread/langchain/index.d.cts +13 -11
- package/dist/adapters/thread/langchain/index.d.ts +13 -11
- package/dist/adapters/thread/langchain/index.js +42 -23
- package/dist/adapters/thread/langchain/index.js.map +1 -1
- package/dist/adapters/thread/langchain/workflow.d.cts +5 -5
- package/dist/adapters/thread/langchain/workflow.d.ts +5 -5
- package/dist/index.cjs +148 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +32 -16
- package/dist/index.d.ts +32 -16
- package/dist/index.js +147 -35
- package/dist/index.js.map +1 -1
- package/dist/{proxy-CTCYWjkr.d.cts → proxy-BesT2ioL.d.cts} +1 -1
- package/dist/{proxy-Br4unLTC.d.ts → proxy-Bz6wXYW-.d.ts} +1 -1
- package/dist/{thread-manager-Cv_BR28i.d.cts → thread-manager-CCVAOK8g.d.cts} +1 -1
- package/dist/{thread-manager-CUubPYPH.d.cts → thread-manager-Cf_34H8w.d.cts} +1 -1
- package/dist/{thread-manager-YJLoc1vH.d.ts → thread-manager-ClKAQx78.d.ts} +1 -1
- package/dist/{thread-manager-DKWxHUzD.d.ts → thread-manager-DarJIK_b.d.ts} +1 -1
- package/dist/{types-Bpq5fDI5.d.cts → types-BGLW5Zyj.d.ts} +35 -20
- package/dist/{types-BxiT8w9d.d.ts → types-BVUmLYpj.d.ts} +1 -1
- package/dist/{types-DUvEZSDe.d.cts → types-CBH54cwr.d.cts} +1 -1
- package/dist/{types-NJDyMyUx.d.cts → types-DPAZ3KCs.d.cts} +1 -1
- package/dist/{types-CheCTLeV.d.ts → types-DlLajQcu.d.cts} +35 -20
- package/dist/{types-AujBIMMn.d.cts → types-DxCpFNv_.d.cts} +4 -0
- package/dist/{types-AujBIMMn.d.ts → types-DxCpFNv_.d.ts} +4 -0
- package/dist/{types-DBk-C8zM.d.ts → types-wiGLvxWf.d.ts} +1 -1
- package/dist/{workflow-BWKQcz9d.d.cts → workflow-_ZGcacCK.d.ts} +32 -4
- package/dist/{workflow-D8wK7TJY.d.ts → workflow-hocXpLwg.d.cts} +32 -4
- package/dist/workflow.cjs +126 -30
- 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 +126 -31
- package/dist/workflow.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/sandbox/bedrock/index.ts +4 -0
- package/src/adapters/sandbox/bedrock/proxy.ts +1 -0
- package/src/adapters/sandbox/daytona/index.ts +4 -0
- package/src/adapters/sandbox/daytona/proxy.ts +1 -0
- package/src/adapters/sandbox/e2b/index.ts +4 -0
- package/src/adapters/sandbox/e2b/proxy.ts +1 -0
- package/src/adapters/sandbox/inmemory/index.ts +4 -0
- package/src/adapters/sandbox/inmemory/proxy.ts +1 -0
- package/src/adapters/thread/anthropic/activities.ts +4 -3
- package/src/adapters/thread/anthropic/model-invoker.ts +15 -5
- package/src/adapters/thread/google-genai/activities.ts +4 -3
- package/src/adapters/thread/google-genai/model-invoker.ts +24 -11
- package/src/adapters/thread/langchain/activities.ts +3 -3
- package/src/adapters/thread/langchain/model-invoker.ts +63 -34
- package/src/index.ts +1 -0
- package/src/lib/activity.ts +36 -9
- package/src/lib/lifecycle.ts +7 -3
- package/src/lib/model/helpers.ts +1 -0
- package/src/lib/model/index.ts +1 -0
- package/src/lib/model/proxy.ts +50 -0
- package/src/lib/sandbox/manager.ts +7 -0
- package/src/lib/sandbox/types.ts +4 -0
- package/src/lib/session/session-edge-cases.integration.test.ts +194 -0
- package/src/lib/session/session.integration.test.ts +5 -0
- package/src/lib/session/session.ts +9 -0
- package/src/lib/session/types.ts +5 -0
- package/src/lib/subagent/define.ts +1 -1
- package/src/lib/subagent/handler.ts +142 -32
- package/src/lib/subagent/index.ts +5 -1
- package/src/lib/subagent/signals.ts +8 -1
- package/src/lib/subagent/subagent.integration.test.ts +532 -25
- package/src/lib/subagent/types.ts +32 -15
- package/src/lib/subagent/workflow.ts +26 -13
- package/src/lib/virtual-fs/manager.ts +1 -1
- package/src/lib/virtual-fs/types.ts +2 -2
- package/src/lib/virtual-fs/virtual-fs.test.ts +2 -2
- package/src/workflow.ts +3 -0
- package/src/lib/.env +0 -1
- package/src/tools/bash/.env +0 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-
|
|
2
|
-
export { A as AskUserQuestionArgs, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as TaskCreateArgs, g as TaskGetArgs, h as TaskListArgs, i as TaskUpdateArgs, j as ToolExecutedEvent, k as TurnCompletedEvent, W as WorkflowConfig, l as WorkflowInput, m as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, n as applyVirtualTreeMutations, o as askUserQuestionTool, p as bashTool, q as composeHooks, r as createAgentStateManager, s as createAskUserQuestionHandler, t as createBashToolDescription, u as createObservabilityHooks, v as createReadSkillHandler, w as createReadSkillTool, x as createSession, y as createTaskCreateHandler, z as createTaskGetHandler, C as createTaskListHandler, D as createTaskUpdateHandler, E as createToolRouter, H as defineSubagent, I as defineSubagentWorkflow, J as defineTool, K as defineWorkflow, L as editTool, M as filesWithMimeType, N as formatVirtualFileTree, P as getShortId, Q as globTool, U as grepTool, V as hasDirectory, X as hasFileWithMimeType, Y as hasNoOtherToolCalls, _ as parseSkillFile, $ as
|
|
3
|
-
import { R as RouterContext, d as ToolResultConfig, c as ActivityToolHandler, J as JsonValue, b as ToolHandlerResponse, B as BaseAgentState, e as RunAgentConfig, f as SkillProvider, g as SkillMetadata, h as Skill, F as FileEntryMetadata, i as FileResolver, V as VirtualFsContext, j as TreeMutation, k as PrefixedVirtualFsOps } from './types-
|
|
4
|
-
export { l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, r as FileEntry, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, u as ParsedToolCall, v as ParsedToolCallUnion, w as PostHumanMessageAppendHook, x as PostHumanMessageAppendHookContext, y as PostToolUseFailureHook, z as PostToolUseFailureHookContext, C as PostToolUseFailureHookResult, D as PostToolUseHook, E as PostToolUseHookContext, G as PreHumanMessageAppendHook, K as PreHumanMessageAppendHookContext, L as PreToolUseHook, N as PreToolUseHookContext, O as PreToolUseHookResult, P as PrefixedThreadOps, Q as ProcessToolCallsContext, U as RawToolCall, W as RunAgentActivity, X as SandboxInit, Y as SandboxShutdown, S as ScopedPrefix, Z as SerializableToolDefinition, _ as SessionConfig, $ as SessionEndHook, a0 as SessionEndHookContext, a1 as SessionExitReason, a2 as SessionResult, a3 as SessionStartHook, a4 as SessionStartHookContext, a5 as SubagentConfig, a6 as SubagentDefinition, a7 as SubagentFnResult, a8 as SubagentHandlerResponse, a9 as SubagentHooks, aa as SubagentSandboxConfig, ab as SubagentSandboxShutdown, ac as SubagentSessionInput, ad as SubagentWorkflow, ae as SubagentWorkflowInput, af as TaskStatus, ag as ThreadInit, T as ThreadOps, ah as TokenUsage, ai as ToolArgs, aj as ToolCallResult, ak as ToolCallResultUnion, al as ToolDefinition, am as ToolHandler, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, au as VirtualFileSystem, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-
|
|
5
|
-
import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, P as PrefixedSandboxOps, F as FileStat, D as DirentEntry, E as ExecResult } from './types-
|
|
6
|
-
export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-
|
|
1
|
+
import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-hocXpLwg.cjs';
|
|
2
|
+
export { A as AskUserQuestionArgs, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as TaskCreateArgs, g as TaskGetArgs, h as TaskListArgs, i as TaskUpdateArgs, j as ToolExecutedEvent, k as TurnCompletedEvent, W as WorkflowConfig, l as WorkflowInput, m as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, n as applyVirtualTreeMutations, o as askUserQuestionTool, p as bashTool, q as composeHooks, r as createAgentStateManager, s as createAskUserQuestionHandler, t as createBashToolDescription, u as createObservabilityHooks, v as createReadSkillHandler, w as createReadSkillTool, x as createSession, y as createTaskCreateHandler, z as createTaskGetHandler, C as createTaskListHandler, D as createTaskUpdateHandler, E as createToolRouter, H as defineSubagent, I as defineSubagentWorkflow, J as defineTool, K as defineWorkflow, L as editTool, M as filesWithMimeType, N as formatVirtualFileTree, P as getShortId, Q as globTool, U as grepTool, V as hasDirectory, X as hasFileWithMimeType, Y as hasNoOtherToolCalls, _ as parseSkillFile, $ as proxyRunAgent, a0 as proxyVirtualFsOps, a1 as readFileTool, a2 as taskCreateTool, a3 as taskGetTool, a4 as taskListTool, a5 as taskUpdateTool, a6 as writeFileTool } from './workflow-hocXpLwg.cjs';
|
|
3
|
+
import { R as RouterContext, d as ToolResultConfig, c as ActivityToolHandler, J as JsonValue, b as ToolHandlerResponse, B as BaseAgentState, e as RunAgentConfig, f as SkillProvider, g as SkillMetadata, h as Skill, F as FileEntryMetadata, i as FileResolver, V as VirtualFsContext, j as TreeMutation, k as PrefixedVirtualFsOps } from './types-DlLajQcu.cjs';
|
|
4
|
+
export { l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, r as FileEntry, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, u as ParsedToolCall, v as ParsedToolCallUnion, w as PostHumanMessageAppendHook, x as PostHumanMessageAppendHookContext, y as PostToolUseFailureHook, z as PostToolUseFailureHookContext, C as PostToolUseFailureHookResult, D as PostToolUseHook, E as PostToolUseHookContext, G as PreHumanMessageAppendHook, K as PreHumanMessageAppendHookContext, L as PreToolUseHook, N as PreToolUseHookContext, O as PreToolUseHookResult, P as PrefixedThreadOps, Q as ProcessToolCallsContext, U as RawToolCall, W as RunAgentActivity, X as SandboxInit, Y as SandboxShutdown, S as ScopedPrefix, Z as SerializableToolDefinition, _ as SessionConfig, $ as SessionEndHook, a0 as SessionEndHookContext, a1 as SessionExitReason, a2 as SessionResult, a3 as SessionStartHook, a4 as SessionStartHookContext, a5 as SubagentConfig, a6 as SubagentDefinition, a7 as SubagentFnResult, a8 as SubagentHandlerResponse, a9 as SubagentHooks, aa as SubagentSandboxConfig, ab as SubagentSandboxShutdown, ac as SubagentSessionInput, ad as SubagentWorkflow, ae as SubagentWorkflowInput, af as TaskStatus, ag as ThreadInit, T as ThreadOps, ah as TokenUsage, ai as ToolArgs, aj as ToolCallResult, ak as ToolCallResultUnion, al as ToolDefinition, am as ToolHandler, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, au as VirtualFileSystem, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-DlLajQcu.cjs';
|
|
5
|
+
import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, P as PrefixedSandboxOps, F as FileStat, D as DirentEntry, E as ExecResult } from './types-DxCpFNv_.cjs';
|
|
6
|
+
export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-DxCpFNv_.cjs';
|
|
7
7
|
import { WorkflowClient } from '@temporalio/client';
|
|
8
|
-
import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-
|
|
9
|
-
export { P as ProviderThreadManager } from './types-
|
|
8
|
+
import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-DPAZ3KCs.cjs';
|
|
9
|
+
export { P as ProviderThreadManager } from './types-DPAZ3KCs.cjs';
|
|
10
10
|
import 'zod';
|
|
11
11
|
import '@temporalio/workflow';
|
|
12
12
|
import '@temporalio/common';
|
|
@@ -97,27 +97,42 @@ declare function withSandbox<TArgs, TResult, TSandbox extends Sandbox = Sandbox,
|
|
|
97
97
|
sandboxId: string;
|
|
98
98
|
}) => Promise<ToolHandlerResponse<TResult, TToolResponse>>): ActivityToolHandler<TArgs, TResult | null, RouterContext, TToolResponse | string>;
|
|
99
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Safely retrieve Temporal activity heartbeat and cancellation signal.
|
|
102
|
+
* Returns empty object when called outside a Temporal activity (e.g. tests).
|
|
103
|
+
*/
|
|
104
|
+
declare function getActivityContext(): {
|
|
105
|
+
heartbeat?: () => void;
|
|
106
|
+
signal?: AbortSignal;
|
|
107
|
+
};
|
|
100
108
|
/**
|
|
101
109
|
* Query the parent workflow's state from within an activity.
|
|
102
110
|
* Resolves the workflow handle from the current activity context.
|
|
103
111
|
*/
|
|
104
112
|
declare function queryParentWorkflowState<T>(client: WorkflowClient): Promise<T>;
|
|
105
113
|
/**
|
|
106
|
-
* Wraps a handler into a `RunAgentActivity` by auto-fetching
|
|
107
|
-
* workflow's agent state before each invocation.
|
|
114
|
+
* Wraps a handler into a scope-prefixed `RunAgentActivity` by auto-fetching
|
|
115
|
+
* the parent workflow's agent state before each invocation.
|
|
116
|
+
*
|
|
117
|
+
* Returns a `Record` with a single key `run<Scope>` so it can be spread
|
|
118
|
+
* into the activities object alongside adapter activities.
|
|
119
|
+
*
|
|
120
|
+
* @param scope - Workflow scope used to derive the activity name.
|
|
121
|
+
* `"myAgentWorkflow"` produces `{ runMyAgentWorkflow: fn }`.
|
|
108
122
|
*
|
|
109
123
|
* @example
|
|
110
124
|
* ```typescript
|
|
111
125
|
* import { createRunAgentActivity } from 'zeitlich';
|
|
112
|
-
* import { createLangChainModelInvoker } from 'zeitlich/adapters/thread/langchain';
|
|
113
126
|
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
127
|
+
* return {
|
|
128
|
+
* ...adapter.createActivities("myAgentWorkflow"),
|
|
129
|
+
* ...createRunAgentActivity(client, adapter.invoker, "myAgentWorkflow"),
|
|
130
|
+
* };
|
|
116
131
|
* ```
|
|
117
132
|
*/
|
|
118
133
|
declare function createRunAgentActivity<R, S extends BaseAgentState = BaseAgentState>(client: WorkflowClient, handler: (config: RunAgentConfig & {
|
|
119
134
|
state: S;
|
|
120
|
-
}) => Promise<R
|
|
135
|
+
}) => Promise<R>, scope: string): Record<string, (config: RunAgentConfig) => Promise<R>>;
|
|
121
136
|
/**
|
|
122
137
|
* Context injected into tool handlers created via {@link withParentWorkflowState}.
|
|
123
138
|
*/
|
|
@@ -282,6 +297,7 @@ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCrea
|
|
|
282
297
|
getSandbox(id: string): Promise<TSandbox>;
|
|
283
298
|
destroy(id: string): Promise<void>;
|
|
284
299
|
pause(id: string, ttlSeconds?: number): Promise<void>;
|
|
300
|
+
resume(id: string): Promise<void>;
|
|
285
301
|
snapshot(id: string): Promise<SandboxSnapshot>;
|
|
286
302
|
restore(snapshot: SandboxSnapshot): Promise<string>;
|
|
287
303
|
fork(sandboxId: string): Promise<string>;
|
|
@@ -401,7 +417,7 @@ declare function withVirtualFs<TArgs, TResult, TCtx, TMeta = FileEntryMetadata,
|
|
|
401
417
|
* const activities = {
|
|
402
418
|
* ...createVirtualFsActivities(resolver, "CodingAgent"),
|
|
403
419
|
* };
|
|
404
|
-
* // registers:
|
|
420
|
+
* // registers: virtualFsCodingAgentResolveFileTree
|
|
405
421
|
* ```
|
|
406
422
|
*/
|
|
407
423
|
declare function createVirtualFsActivities<S extends string, TCtx = unknown, TMeta = FileEntryMetadata>(resolver: FileResolver<TCtx, TMeta>, scope: S): PrefixedVirtualFsOps<S, TCtx, TMeta>;
|
|
@@ -496,4 +512,4 @@ declare const toTree: (fs: SandboxFileSystem, opts?: {
|
|
|
496
512
|
sort?: boolean;
|
|
497
513
|
}) => Promise<string>;
|
|
498
514
|
|
|
499
|
-
export { ActivityToolHandler, type AgentStateContext, BaseAgentState, BaseThreadManager, BashArgs, ExecResult, FileEditArgs, FileEntryMetadata, FileReadArgs, FileResolver, FileSystemSkillProvider, FileWriteArgs, GlobArgs, JsonValue, NodeFsSandboxFileSystem, type PreCreateHookResult, PrefixedSandboxOps, PrefixedVirtualFsOps, RouterContext, RunAgentConfig, Sandbox, type SandboxContext, SandboxCreateOptions, DirentEntry as SandboxDirentEntry, FileStat as SandboxFileStat, SandboxFileSystem, SandboxManager, type SandboxManagerHooks, SandboxProvider, SandboxSnapshot, Skill, SkillMetadata, SkillProvider, ThreadManagerConfig, ToolHandlerResponse, ToolResultConfig, TreeMutation, VirtualFsContext, bashHandler, createRunAgentActivity, createThreadManager, createVirtualFsActivities, editHandler, globHandler, queryParentWorkflowState, readFileHandler, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler };
|
|
515
|
+
export { ActivityToolHandler, type AgentStateContext, BaseAgentState, BaseThreadManager, BashArgs, ExecResult, FileEditArgs, FileEntryMetadata, FileReadArgs, FileResolver, FileSystemSkillProvider, FileWriteArgs, GlobArgs, JsonValue, NodeFsSandboxFileSystem, type PreCreateHookResult, PrefixedSandboxOps, PrefixedVirtualFsOps, RouterContext, RunAgentConfig, Sandbox, type SandboxContext, SandboxCreateOptions, DirentEntry as SandboxDirentEntry, FileStat as SandboxFileStat, SandboxFileSystem, SandboxManager, type SandboxManagerHooks, SandboxProvider, SandboxSnapshot, Skill, SkillMetadata, SkillProvider, ThreadManagerConfig, ToolHandlerResponse, ToolResultConfig, TreeMutation, VirtualFsContext, bashHandler, createRunAgentActivity, createThreadManager, createVirtualFsActivities, editHandler, getActivityContext, globHandler, queryParentWorkflowState, readFileHandler, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-
|
|
2
|
-
export { A as AskUserQuestionArgs, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as TaskCreateArgs, g as TaskGetArgs, h as TaskListArgs, i as TaskUpdateArgs, j as ToolExecutedEvent, k as TurnCompletedEvent, W as WorkflowConfig, l as WorkflowInput, m as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, n as applyVirtualTreeMutations, o as askUserQuestionTool, p as bashTool, q as composeHooks, r as createAgentStateManager, s as createAskUserQuestionHandler, t as createBashToolDescription, u as createObservabilityHooks, v as createReadSkillHandler, w as createReadSkillTool, x as createSession, y as createTaskCreateHandler, z as createTaskGetHandler, C as createTaskListHandler, D as createTaskUpdateHandler, E as createToolRouter, H as defineSubagent, I as defineSubagentWorkflow, J as defineTool, K as defineWorkflow, L as editTool, M as filesWithMimeType, N as formatVirtualFileTree, P as getShortId, Q as globTool, U as grepTool, V as hasDirectory, X as hasFileWithMimeType, Y as hasNoOtherToolCalls, _ as parseSkillFile, $ as
|
|
3
|
-
import { R as RouterContext, d as ToolResultConfig, c as ActivityToolHandler, J as JsonValue, b as ToolHandlerResponse, B as BaseAgentState, e as RunAgentConfig, f as SkillProvider, g as SkillMetadata, h as Skill, F as FileEntryMetadata, i as FileResolver, V as VirtualFsContext, j as TreeMutation, k as PrefixedVirtualFsOps } from './types-
|
|
4
|
-
export { l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, r as FileEntry, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, u as ParsedToolCall, v as ParsedToolCallUnion, w as PostHumanMessageAppendHook, x as PostHumanMessageAppendHookContext, y as PostToolUseFailureHook, z as PostToolUseFailureHookContext, C as PostToolUseFailureHookResult, D as PostToolUseHook, E as PostToolUseHookContext, G as PreHumanMessageAppendHook, K as PreHumanMessageAppendHookContext, L as PreToolUseHook, N as PreToolUseHookContext, O as PreToolUseHookResult, P as PrefixedThreadOps, Q as ProcessToolCallsContext, U as RawToolCall, W as RunAgentActivity, X as SandboxInit, Y as SandboxShutdown, S as ScopedPrefix, Z as SerializableToolDefinition, _ as SessionConfig, $ as SessionEndHook, a0 as SessionEndHookContext, a1 as SessionExitReason, a2 as SessionResult, a3 as SessionStartHook, a4 as SessionStartHookContext, a5 as SubagentConfig, a6 as SubagentDefinition, a7 as SubagentFnResult, a8 as SubagentHandlerResponse, a9 as SubagentHooks, aa as SubagentSandboxConfig, ab as SubagentSandboxShutdown, ac as SubagentSessionInput, ad as SubagentWorkflow, ae as SubagentWorkflowInput, af as TaskStatus, ag as ThreadInit, T as ThreadOps, ah as TokenUsage, ai as ToolArgs, aj as ToolCallResult, ak as ToolCallResultUnion, al as ToolDefinition, am as ToolHandler, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, au as VirtualFileSystem, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-
|
|
5
|
-
import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, P as PrefixedSandboxOps, F as FileStat, D as DirentEntry, E as ExecResult } from './types-
|
|
6
|
-
export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-
|
|
1
|
+
import { B as BashArgs, F as FileEditArgs, G as GlobArgs, a as FileReadArgs, b as FileWriteArgs } from './workflow-_ZGcacCK.js';
|
|
2
|
+
export { A as AskUserQuestionArgs, c as FileTreeAccessor, d as GrepArgs, O as ObservabilityHooks, R as ReadSkillArgs, S as SessionEndedEvent, e as SessionStartedEvent, f as SubagentArgs, T as TaskCreateArgs, g as TaskGetArgs, h as TaskListArgs, i as TaskUpdateArgs, j as ToolExecutedEvent, k as TurnCompletedEvent, W as WorkflowConfig, l as WorkflowInput, m as WorkflowSessionInput, Z as ZeitlichObservabilitySinks, n as applyVirtualTreeMutations, o as askUserQuestionTool, p as bashTool, q as composeHooks, r as createAgentStateManager, s as createAskUserQuestionHandler, t as createBashToolDescription, u as createObservabilityHooks, v as createReadSkillHandler, w as createReadSkillTool, x as createSession, y as createTaskCreateHandler, z as createTaskGetHandler, C as createTaskListHandler, D as createTaskUpdateHandler, E as createToolRouter, H as defineSubagent, I as defineSubagentWorkflow, J as defineTool, K as defineWorkflow, L as editTool, M as filesWithMimeType, N as formatVirtualFileTree, P as getShortId, Q as globTool, U as grepTool, V as hasDirectory, X as hasFileWithMimeType, Y as hasNoOtherToolCalls, _ as parseSkillFile, $ as proxyRunAgent, a0 as proxyVirtualFsOps, a1 as readFileTool, a2 as taskCreateTool, a3 as taskGetTool, a4 as taskListTool, a5 as taskUpdateTool, a6 as writeFileTool } from './workflow-_ZGcacCK.js';
|
|
3
|
+
import { R as RouterContext, d as ToolResultConfig, c as ActivityToolHandler, J as JsonValue, b as ToolHandlerResponse, B as BaseAgentState, e as RunAgentConfig, f as SkillProvider, g as SkillMetadata, h as Skill, F as FileEntryMetadata, i as FileResolver, V as VirtualFsContext, j as TreeMutation, k as PrefixedVirtualFsOps } from './types-BGLW5Zyj.js';
|
|
4
|
+
export { l as AgentConfig, m as AgentFile, A as AgentResponse, n as AgentState, o as AgentStateManager, p as AgentStatus, q as AppendToolResultFn, r as FileEntry, H as Hooks, I as InferToolResults, s as JsonPrimitive, t as JsonSerializable, a as ModelInvoker, M as ModelInvokerConfig, u as ParsedToolCall, v as ParsedToolCallUnion, w as PostHumanMessageAppendHook, x as PostHumanMessageAppendHookContext, y as PostToolUseFailureHook, z as PostToolUseFailureHookContext, C as PostToolUseFailureHookResult, D as PostToolUseHook, E as PostToolUseHookContext, G as PreHumanMessageAppendHook, K as PreHumanMessageAppendHookContext, L as PreToolUseHook, N as PreToolUseHookContext, O as PreToolUseHookResult, P as PrefixedThreadOps, Q as ProcessToolCallsContext, U as RawToolCall, W as RunAgentActivity, X as SandboxInit, Y as SandboxShutdown, S as ScopedPrefix, Z as SerializableToolDefinition, _ as SessionConfig, $ as SessionEndHook, a0 as SessionEndHookContext, a1 as SessionExitReason, a2 as SessionResult, a3 as SessionStartHook, a4 as SessionStartHookContext, a5 as SubagentConfig, a6 as SubagentDefinition, a7 as SubagentFnResult, a8 as SubagentHandlerResponse, a9 as SubagentHooks, aa as SubagentSandboxConfig, ab as SubagentSandboxShutdown, ac as SubagentSessionInput, ad as SubagentWorkflow, ae as SubagentWorkflowInput, af as TaskStatus, ag as ThreadInit, T as ThreadOps, ah as TokenUsage, ai as ToolArgs, aj as ToolCallResult, ak as ToolCallResultUnion, al as ToolDefinition, am as ToolHandler, an as ToolHooks, ao as ToolMap, ap as ToolNames, aq as ToolResult, ar as ToolRouter, as as ToolRouterHooks, at as ToolWithHandler, au as VirtualFileSystem, av as VirtualFileTree, aw as VirtualFsOps, ax as VirtualFsState, ay as WorkflowTask, az as ZeitlichSession, aA as isTerminalStatus } from './types-BGLW5Zyj.js';
|
|
5
|
+
import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, P as PrefixedSandboxOps, F as FileStat, D as DirentEntry, E as ExecResult } from './types-DxCpFNv_.js';
|
|
6
|
+
export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, i as SandboxNotFoundError, j as SandboxNotSupportedError, g as SandboxOps } from './types-DxCpFNv_.js';
|
|
7
7
|
import { WorkflowClient } from '@temporalio/client';
|
|
8
|
-
import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-
|
|
9
|
-
export { P as ProviderThreadManager } from './types-
|
|
8
|
+
import { a as ThreadManagerConfig, B as BaseThreadManager } from './types-BVUmLYpj.js';
|
|
9
|
+
export { P as ProviderThreadManager } from './types-BVUmLYpj.js';
|
|
10
10
|
import 'zod';
|
|
11
11
|
import '@temporalio/workflow';
|
|
12
12
|
import '@temporalio/common';
|
|
@@ -97,27 +97,42 @@ declare function withSandbox<TArgs, TResult, TSandbox extends Sandbox = Sandbox,
|
|
|
97
97
|
sandboxId: string;
|
|
98
98
|
}) => Promise<ToolHandlerResponse<TResult, TToolResponse>>): ActivityToolHandler<TArgs, TResult | null, RouterContext, TToolResponse | string>;
|
|
99
99
|
|
|
100
|
+
/**
|
|
101
|
+
* Safely retrieve Temporal activity heartbeat and cancellation signal.
|
|
102
|
+
* Returns empty object when called outside a Temporal activity (e.g. tests).
|
|
103
|
+
*/
|
|
104
|
+
declare function getActivityContext(): {
|
|
105
|
+
heartbeat?: () => void;
|
|
106
|
+
signal?: AbortSignal;
|
|
107
|
+
};
|
|
100
108
|
/**
|
|
101
109
|
* Query the parent workflow's state from within an activity.
|
|
102
110
|
* Resolves the workflow handle from the current activity context.
|
|
103
111
|
*/
|
|
104
112
|
declare function queryParentWorkflowState<T>(client: WorkflowClient): Promise<T>;
|
|
105
113
|
/**
|
|
106
|
-
* Wraps a handler into a `RunAgentActivity` by auto-fetching
|
|
107
|
-
* workflow's agent state before each invocation.
|
|
114
|
+
* Wraps a handler into a scope-prefixed `RunAgentActivity` by auto-fetching
|
|
115
|
+
* the parent workflow's agent state before each invocation.
|
|
116
|
+
*
|
|
117
|
+
* Returns a `Record` with a single key `run<Scope>` so it can be spread
|
|
118
|
+
* into the activities object alongside adapter activities.
|
|
119
|
+
*
|
|
120
|
+
* @param scope - Workflow scope used to derive the activity name.
|
|
121
|
+
* `"myAgentWorkflow"` produces `{ runMyAgentWorkflow: fn }`.
|
|
108
122
|
*
|
|
109
123
|
* @example
|
|
110
124
|
* ```typescript
|
|
111
125
|
* import { createRunAgentActivity } from 'zeitlich';
|
|
112
|
-
* import { createLangChainModelInvoker } from 'zeitlich/adapters/thread/langchain';
|
|
113
126
|
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
127
|
+
* return {
|
|
128
|
+
* ...adapter.createActivities("myAgentWorkflow"),
|
|
129
|
+
* ...createRunAgentActivity(client, adapter.invoker, "myAgentWorkflow"),
|
|
130
|
+
* };
|
|
116
131
|
* ```
|
|
117
132
|
*/
|
|
118
133
|
declare function createRunAgentActivity<R, S extends BaseAgentState = BaseAgentState>(client: WorkflowClient, handler: (config: RunAgentConfig & {
|
|
119
134
|
state: S;
|
|
120
|
-
}) => Promise<R
|
|
135
|
+
}) => Promise<R>, scope: string): Record<string, (config: RunAgentConfig) => Promise<R>>;
|
|
121
136
|
/**
|
|
122
137
|
* Context injected into tool handlers created via {@link withParentWorkflowState}.
|
|
123
138
|
*/
|
|
@@ -282,6 +297,7 @@ declare class SandboxManager<TOptions extends SandboxCreateOptions = SandboxCrea
|
|
|
282
297
|
getSandbox(id: string): Promise<TSandbox>;
|
|
283
298
|
destroy(id: string): Promise<void>;
|
|
284
299
|
pause(id: string, ttlSeconds?: number): Promise<void>;
|
|
300
|
+
resume(id: string): Promise<void>;
|
|
285
301
|
snapshot(id: string): Promise<SandboxSnapshot>;
|
|
286
302
|
restore(snapshot: SandboxSnapshot): Promise<string>;
|
|
287
303
|
fork(sandboxId: string): Promise<string>;
|
|
@@ -401,7 +417,7 @@ declare function withVirtualFs<TArgs, TResult, TCtx, TMeta = FileEntryMetadata,
|
|
|
401
417
|
* const activities = {
|
|
402
418
|
* ...createVirtualFsActivities(resolver, "CodingAgent"),
|
|
403
419
|
* };
|
|
404
|
-
* // registers:
|
|
420
|
+
* // registers: virtualFsCodingAgentResolveFileTree
|
|
405
421
|
* ```
|
|
406
422
|
*/
|
|
407
423
|
declare function createVirtualFsActivities<S extends string, TCtx = unknown, TMeta = FileEntryMetadata>(resolver: FileResolver<TCtx, TMeta>, scope: S): PrefixedVirtualFsOps<S, TCtx, TMeta>;
|
|
@@ -496,4 +512,4 @@ declare const toTree: (fs: SandboxFileSystem, opts?: {
|
|
|
496
512
|
sort?: boolean;
|
|
497
513
|
}) => Promise<string>;
|
|
498
514
|
|
|
499
|
-
export { ActivityToolHandler, type AgentStateContext, BaseAgentState, BaseThreadManager, BashArgs, ExecResult, FileEditArgs, FileEntryMetadata, FileReadArgs, FileResolver, FileSystemSkillProvider, FileWriteArgs, GlobArgs, JsonValue, NodeFsSandboxFileSystem, type PreCreateHookResult, PrefixedSandboxOps, PrefixedVirtualFsOps, RouterContext, RunAgentConfig, Sandbox, type SandboxContext, SandboxCreateOptions, DirentEntry as SandboxDirentEntry, FileStat as SandboxFileStat, SandboxFileSystem, SandboxManager, type SandboxManagerHooks, SandboxProvider, SandboxSnapshot, Skill, SkillMetadata, SkillProvider, ThreadManagerConfig, ToolHandlerResponse, ToolResultConfig, TreeMutation, VirtualFsContext, bashHandler, createRunAgentActivity, createThreadManager, createVirtualFsActivities, editHandler, globHandler, queryParentWorkflowState, readFileHandler, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler };
|
|
515
|
+
export { ActivityToolHandler, type AgentStateContext, BaseAgentState, BaseThreadManager, BashArgs, ExecResult, FileEditArgs, FileEntryMetadata, FileReadArgs, FileResolver, FileSystemSkillProvider, FileWriteArgs, GlobArgs, JsonValue, NodeFsSandboxFileSystem, type PreCreateHookResult, PrefixedSandboxOps, PrefixedVirtualFsOps, RouterContext, RunAgentConfig, Sandbox, type SandboxContext, SandboxCreateOptions, DirentEntry as SandboxDirentEntry, FileStat as SandboxFileStat, SandboxFileSystem, SandboxManager, type SandboxManagerHooks, SandboxProvider, SandboxSnapshot, Skill, SkillMetadata, SkillProvider, ThreadManagerConfig, ToolHandlerResponse, ToolResultConfig, TreeMutation, VirtualFsContext, bashHandler, createRunAgentActivity, createThreadManager, createVirtualFsActivities, editHandler, getActivityContext, globHandler, queryParentWorkflowState, readFileHandler, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler };
|
package/dist/index.js
CHANGED
|
@@ -390,23 +390,50 @@ function createSubagentTool(subagents) {
|
|
|
390
390
|
};
|
|
391
391
|
}
|
|
392
392
|
var childResultSignal = defineSignal("childResult");
|
|
393
|
+
var childSandboxReadySignal = defineSignal("childSandboxReady");
|
|
393
394
|
var destroySandboxSignal = defineSignal("destroySandbox");
|
|
394
395
|
|
|
395
396
|
// src/lib/subagent/handler.ts
|
|
396
397
|
function resolveSandboxConfig(config) {
|
|
397
|
-
if (!config || config === "none")
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
398
|
+
if (!config || config === "none") {
|
|
399
|
+
return { source: "none", init: "per-call", continuation: "fork" };
|
|
400
|
+
}
|
|
401
|
+
if (config.source === "inherit") {
|
|
402
|
+
return {
|
|
403
|
+
source: "inherit",
|
|
404
|
+
init: "per-call",
|
|
405
|
+
continuation: config.continuation,
|
|
406
|
+
shutdown: config.shutdown
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
return {
|
|
410
|
+
source: "own",
|
|
411
|
+
init: config.init ?? "per-call",
|
|
412
|
+
continuation: config.continuation,
|
|
413
|
+
shutdown: config.shutdown
|
|
414
|
+
};
|
|
401
415
|
}
|
|
402
416
|
function createSubagentHandler(subagents) {
|
|
403
417
|
const { taskQueue: parentTaskQueue } = workflowInfo();
|
|
404
418
|
const childResults = /* @__PURE__ */ new Map();
|
|
405
419
|
const pendingDestroys = /* @__PURE__ */ new Map();
|
|
406
420
|
const threadSandboxes = /* @__PURE__ */ new Map();
|
|
421
|
+
const persistentSandboxes = /* @__PURE__ */ new Map();
|
|
422
|
+
const persistentSandboxCreating = /* @__PURE__ */ new Set();
|
|
423
|
+
const lazyCreatorAgent = /* @__PURE__ */ new Map();
|
|
407
424
|
setHandler(childResultSignal, ({ childWorkflowId, result }) => {
|
|
408
425
|
childResults.set(childWorkflowId, result);
|
|
409
426
|
});
|
|
427
|
+
setHandler(
|
|
428
|
+
childSandboxReadySignal,
|
|
429
|
+
({ childWorkflowId, sandboxId }) => {
|
|
430
|
+
const agentName = lazyCreatorAgent.get(childWorkflowId);
|
|
431
|
+
if (agentName && !persistentSandboxes.has(agentName)) {
|
|
432
|
+
persistentSandboxes.set(agentName, sandboxId);
|
|
433
|
+
lazyCreatorAgent.delete(childWorkflowId);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
);
|
|
410
437
|
const handler = async (args, context) => {
|
|
411
438
|
const config = subagents.find((s) => s.agentName === args.subagent);
|
|
412
439
|
if (!config) {
|
|
@@ -433,21 +460,48 @@ function createSubagentHandler(subagents) {
|
|
|
433
460
|
};
|
|
434
461
|
}
|
|
435
462
|
let sandbox;
|
|
463
|
+
let sandboxShutdownOverride;
|
|
464
|
+
let isLazyCreator = false;
|
|
436
465
|
if (sandboxCfg.source === "inherit" && parentSandboxId) {
|
|
437
|
-
|
|
438
|
-
mode: "
|
|
439
|
-
|
|
440
|
-
|
|
466
|
+
if (sandboxCfg.continuation === "fork") {
|
|
467
|
+
sandbox = { mode: "fork", sandboxId: parentSandboxId };
|
|
468
|
+
} else {
|
|
469
|
+
sandbox = { mode: "inherit", sandboxId: parentSandboxId };
|
|
470
|
+
}
|
|
441
471
|
} else if (sandboxCfg.source === "own") {
|
|
442
|
-
const
|
|
443
|
-
|
|
444
|
-
|
|
472
|
+
const isLazy = sandboxCfg.init === "once";
|
|
473
|
+
let baseSandboxId;
|
|
474
|
+
if (isLazy) {
|
|
475
|
+
baseSandboxId = persistentSandboxes.get(config.agentName);
|
|
476
|
+
if (!baseSandboxId) {
|
|
477
|
+
if (persistentSandboxCreating.has(config.agentName)) {
|
|
478
|
+
await condition(() => persistentSandboxes.has(config.agentName));
|
|
479
|
+
baseSandboxId = persistentSandboxes.get(config.agentName);
|
|
480
|
+
} else {
|
|
481
|
+
persistentSandboxCreating.add(config.agentName);
|
|
482
|
+
isLazyCreator = true;
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
} else if (continuationThreadId) {
|
|
486
|
+
baseSandboxId = threadSandboxes.get(continuationThreadId);
|
|
487
|
+
}
|
|
488
|
+
if (baseSandboxId) {
|
|
489
|
+
sandbox = {
|
|
490
|
+
mode: sandboxCfg.continuation === "continue" ? "continue" : "fork",
|
|
491
|
+
sandboxId: baseSandboxId
|
|
492
|
+
};
|
|
493
|
+
}
|
|
494
|
+
const userShutdown = sandboxCfg.shutdown;
|
|
495
|
+
const alreadySurvives = userShutdown === "pause-until-parent-close" || userShutdown === "keep-until-parent-close" || userShutdown === "pause" || userShutdown === "keep";
|
|
496
|
+
const mustSurvive = isLazyCreator || sandboxCfg.continuation === "continue" || isLazy && sandboxCfg.continuation === "fork";
|
|
497
|
+
if (mustSurvive && !alreadySurvives) {
|
|
498
|
+
sandboxShutdownOverride = isLazyCreator ? "pause-until-parent-close" : "pause";
|
|
445
499
|
}
|
|
446
500
|
}
|
|
447
501
|
const workflowInput = {
|
|
448
502
|
...thread && { thread },
|
|
449
503
|
...sandbox && { sandbox },
|
|
450
|
-
|
|
504
|
+
sandboxShutdown: sandboxShutdownOverride ?? sandboxCfg.shutdown ?? void 0
|
|
451
505
|
};
|
|
452
506
|
const resolvedContext = config.context === void 0 ? void 0 : typeof config.context === "function" ? config.context() : config.context;
|
|
453
507
|
const childOpts = {
|
|
@@ -455,6 +509,9 @@ function createSubagentHandler(subagents) {
|
|
|
455
509
|
args: resolvedContext === void 0 ? [args.prompt, workflowInput] : [args.prompt, workflowInput, resolvedContext],
|
|
456
510
|
taskQueue: config.taskQueue ?? parentTaskQueue
|
|
457
511
|
};
|
|
512
|
+
if (isLazyCreator) {
|
|
513
|
+
lazyCreatorAgent.set(childWorkflowId, config.agentName);
|
|
514
|
+
}
|
|
458
515
|
log.info("subagent spawned", {
|
|
459
516
|
subagent: config.agentName,
|
|
460
517
|
childWorkflowId,
|
|
@@ -462,10 +519,10 @@ function createSubagentHandler(subagents) {
|
|
|
462
519
|
sandboxSource: sandboxCfg.source
|
|
463
520
|
});
|
|
464
521
|
const childHandle = await startChild(config.workflow, childOpts);
|
|
465
|
-
const effectiveShutdown = sandboxCfg.shutdown ?? "destroy";
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
pendingDestroys.set(
|
|
522
|
+
const effectiveShutdown = sandboxShutdownOverride ?? sandboxCfg.shutdown ?? "destroy";
|
|
523
|
+
if (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close") {
|
|
524
|
+
const key = isLazyCreator ? `persistent:${config.agentName}` : childWorkflowId;
|
|
525
|
+
pendingDestroys.set(key, childHandle);
|
|
469
526
|
}
|
|
470
527
|
await Promise.race([
|
|
471
528
|
condition(() => childResults.has(childWorkflowId)),
|
|
@@ -499,8 +556,16 @@ function createSubagentHandler(subagents) {
|
|
|
499
556
|
sandboxId: childSandboxId,
|
|
500
557
|
metadata
|
|
501
558
|
} = childResult;
|
|
502
|
-
if (
|
|
503
|
-
|
|
559
|
+
if (childSandboxId) {
|
|
560
|
+
if (sandboxCfg.source === "own" && sandboxCfg.init === "once" && !persistentSandboxes.has(config.agentName)) {
|
|
561
|
+
persistentSandboxes.set(config.agentName, childSandboxId);
|
|
562
|
+
} else if (allowsContinuation && childThreadId) {
|
|
563
|
+
threadSandboxes.set(childThreadId, childSandboxId);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
if (isLazyCreator) {
|
|
567
|
+
persistentSandboxCreating.delete(config.agentName);
|
|
568
|
+
lazyCreatorAgent.delete(childWorkflowId);
|
|
504
569
|
}
|
|
505
570
|
if (!toolResponse) {
|
|
506
571
|
return {
|
|
@@ -706,6 +771,7 @@ async function createSession({
|
|
|
706
771
|
thread: threadInit,
|
|
707
772
|
sandbox: sandboxInit,
|
|
708
773
|
sandboxShutdown = "destroy",
|
|
774
|
+
onSandboxReady,
|
|
709
775
|
virtualFs: virtualFsConfig,
|
|
710
776
|
virtualFsOps
|
|
711
777
|
}) {
|
|
@@ -808,6 +874,9 @@ async function createSession({
|
|
|
808
874
|
});
|
|
809
875
|
}
|
|
810
876
|
sandboxId = sandboxInit.sandboxId;
|
|
877
|
+
if (sandboxShutdown === "pause-until-parent-close") {
|
|
878
|
+
await sandboxOps.resumeSandbox(sandboxId);
|
|
879
|
+
}
|
|
811
880
|
sandboxOwned = true;
|
|
812
881
|
} else if (sandboxMode === "fork") {
|
|
813
882
|
if (!sandboxOps) {
|
|
@@ -830,6 +899,9 @@ async function createSession({
|
|
|
830
899
|
sandboxOwned = true;
|
|
831
900
|
}
|
|
832
901
|
}
|
|
902
|
+
if (sandboxId && onSandboxReady) {
|
|
903
|
+
onSandboxReady(sandboxId);
|
|
904
|
+
}
|
|
833
905
|
if (virtualFsConfig) {
|
|
834
906
|
if (!virtualFsOps) {
|
|
835
907
|
throw ApplicationFailure.create({
|
|
@@ -1299,39 +1371,45 @@ function defineSubagent(definition, overrides) {
|
|
|
1299
1371
|
function defineSubagentWorkflow(config, fn) {
|
|
1300
1372
|
const workflow = async (prompt, workflowInput, context) => {
|
|
1301
1373
|
const effectiveShutdown = workflowInput.sandboxShutdown ?? config.sandboxShutdown ?? "destroy";
|
|
1374
|
+
const { parent } = workflowInfo();
|
|
1375
|
+
if (!parent) {
|
|
1376
|
+
throw ApplicationFailure.create({
|
|
1377
|
+
message: "Subagent workflow called without a parent workflow",
|
|
1378
|
+
nonRetryable: true
|
|
1379
|
+
});
|
|
1380
|
+
}
|
|
1381
|
+
const parentHandle = getExternalWorkflowHandle(parent.workflowId);
|
|
1302
1382
|
const sessionInput = {
|
|
1303
1383
|
agentName: config.name,
|
|
1304
1384
|
sandboxShutdown: effectiveShutdown,
|
|
1305
1385
|
...workflowInput.thread && { thread: workflowInput.thread },
|
|
1306
|
-
...workflowInput.sandbox && { sandbox: workflowInput.sandbox }
|
|
1386
|
+
...workflowInput.sandbox && { sandbox: workflowInput.sandbox },
|
|
1387
|
+
onSandboxReady: (sandboxId) => {
|
|
1388
|
+
void parentHandle.signal(childSandboxReadySignal, {
|
|
1389
|
+
childWorkflowId: workflowInfo().workflowId,
|
|
1390
|
+
sandboxId
|
|
1391
|
+
});
|
|
1392
|
+
}
|
|
1307
1393
|
};
|
|
1308
1394
|
const { destroySandbox, ...result } = await fn(
|
|
1309
1395
|
prompt,
|
|
1310
1396
|
sessionInput,
|
|
1311
1397
|
context ?? {}
|
|
1312
1398
|
);
|
|
1313
|
-
if (effectiveShutdown === "pause-until-parent-close") {
|
|
1399
|
+
if (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close") {
|
|
1314
1400
|
if (!destroySandbox) {
|
|
1315
1401
|
throw ApplicationFailure.create({
|
|
1316
|
-
message: `Subagent "${config.name}" has sandboxShutdown="
|
|
1402
|
+
message: `Subagent "${config.name}" has sandboxShutdown="${effectiveShutdown}" but fn did not return a destroySandbox callback`,
|
|
1317
1403
|
nonRetryable: true
|
|
1318
1404
|
});
|
|
1319
1405
|
}
|
|
1320
1406
|
if (!result.sandboxId) {
|
|
1321
1407
|
throw ApplicationFailure.create({
|
|
1322
|
-
message: `Subagent "${config.name}" has sandboxShutdown="
|
|
1408
|
+
message: `Subagent "${config.name}" has sandboxShutdown="${effectiveShutdown}" but fn did not return a sandboxId`,
|
|
1323
1409
|
nonRetryable: true
|
|
1324
1410
|
});
|
|
1325
1411
|
}
|
|
1326
1412
|
}
|
|
1327
|
-
const { parent } = workflowInfo();
|
|
1328
|
-
if (!parent) {
|
|
1329
|
-
throw ApplicationFailure.create({
|
|
1330
|
-
message: "Subagent workflow called without a parent workflow",
|
|
1331
|
-
nonRetryable: true
|
|
1332
|
-
});
|
|
1333
|
-
}
|
|
1334
|
-
const parentHandle = getExternalWorkflowHandle(parent.workflowId);
|
|
1335
1413
|
await parentHandle.signal(childResultSignal, {
|
|
1336
1414
|
childWorkflowId: workflowInfo().workflowId,
|
|
1337
1415
|
result
|
|
@@ -1410,6 +1488,23 @@ function composeHooks(...fns) {
|
|
|
1410
1488
|
return lastResult;
|
|
1411
1489
|
};
|
|
1412
1490
|
}
|
|
1491
|
+
function proxyRunAgent(scope, options) {
|
|
1492
|
+
const resolvedScope = scope ?? workflowInfo().workflowType;
|
|
1493
|
+
const name = `run${resolvedScope.charAt(0).toUpperCase()}${resolvedScope.slice(1)}`;
|
|
1494
|
+
const acts = proxyActivities(
|
|
1495
|
+
options ?? {
|
|
1496
|
+
startToCloseTimeout: "10m",
|
|
1497
|
+
heartbeatTimeout: "1m",
|
|
1498
|
+
retry: {
|
|
1499
|
+
maximumAttempts: 3,
|
|
1500
|
+
initialInterval: "10s",
|
|
1501
|
+
maximumInterval: "2m",
|
|
1502
|
+
backoffCoefficient: 3
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
);
|
|
1506
|
+
return acts[name];
|
|
1507
|
+
}
|
|
1413
1508
|
var SandboxNotSupportedError = class extends ApplicationFailure$1 {
|
|
1414
1509
|
constructor(operation) {
|
|
1415
1510
|
super(
|
|
@@ -2166,6 +2261,14 @@ function createThreadManager(config) {
|
|
|
2166
2261
|
}
|
|
2167
2262
|
};
|
|
2168
2263
|
}
|
|
2264
|
+
function getActivityContext() {
|
|
2265
|
+
try {
|
|
2266
|
+
const ctx = Context.current();
|
|
2267
|
+
return { heartbeat: () => ctx.heartbeat(), signal: ctx.cancellationSignal };
|
|
2268
|
+
} catch {
|
|
2269
|
+
return {};
|
|
2270
|
+
}
|
|
2271
|
+
}
|
|
2169
2272
|
async function queryParentWorkflowState(client) {
|
|
2170
2273
|
const { workflowExecution } = Context.current().info;
|
|
2171
2274
|
const handle = client.getHandle(
|
|
@@ -2174,10 +2277,13 @@ async function queryParentWorkflowState(client) {
|
|
|
2174
2277
|
);
|
|
2175
2278
|
return handle.query("getAgentState");
|
|
2176
2279
|
}
|
|
2177
|
-
function createRunAgentActivity(client, handler) {
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2280
|
+
function createRunAgentActivity(client, handler, scope) {
|
|
2281
|
+
const name = `run${scope.charAt(0).toUpperCase()}${scope.slice(1)}`;
|
|
2282
|
+
return {
|
|
2283
|
+
[name]: async (config) => {
|
|
2284
|
+
const state = await queryParentWorkflowState(client);
|
|
2285
|
+
return handler({ ...config, state });
|
|
2286
|
+
}
|
|
2181
2287
|
};
|
|
2182
2288
|
}
|
|
2183
2289
|
function withParentWorkflowState(client, handler) {
|
|
@@ -2234,6 +2340,9 @@ var SandboxManager = class {
|
|
|
2234
2340
|
async pause(id, ttlSeconds) {
|
|
2235
2341
|
await this.provider.pause(id, ttlSeconds);
|
|
2236
2342
|
}
|
|
2343
|
+
async resume(id) {
|
|
2344
|
+
await this.provider.resume(id);
|
|
2345
|
+
}
|
|
2237
2346
|
async snapshot(id) {
|
|
2238
2347
|
return this.provider.snapshot(id);
|
|
2239
2348
|
}
|
|
@@ -2277,6 +2386,9 @@ var SandboxManager = class {
|
|
|
2277
2386
|
pauseSandbox: async (sandboxId, ttlSeconds) => {
|
|
2278
2387
|
await this.pause(sandboxId, ttlSeconds);
|
|
2279
2388
|
},
|
|
2389
|
+
resumeSandbox: async (sandboxId) => {
|
|
2390
|
+
await this.resume(sandboxId);
|
|
2391
|
+
},
|
|
2280
2392
|
snapshotSandbox: async (sandboxId) => {
|
|
2281
2393
|
return this.snapshot(sandboxId);
|
|
2282
2394
|
},
|
|
@@ -2948,6 +3060,6 @@ var toTree = async (fs, opts = {}) => {
|
|
|
2948
3060
|
return base + subtree;
|
|
2949
3061
|
};
|
|
2950
3062
|
|
|
2951
|
-
export { FileSystemSkillProvider, NodeFsSandboxFileSystem, SandboxManager, SandboxNotFoundError, SandboxNotSupportedError, VirtualFileSystem, applyVirtualTreeMutations, askUserQuestionTool, bashHandler, bashTool, composeHooks, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createObservabilityHooks, createReadSkillHandler, createReadSkillTool, createRunAgentActivity, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createThreadManager, createToolRouter, createVirtualFsActivities, defineSubagent, defineSubagentWorkflow, defineTool, defineWorkflow, editHandler, editTool, filesWithMimeType, formatVirtualFileTree, getShortId, globHandler, globTool, grepTool, hasDirectory, hasFileWithMimeType, hasNoOtherToolCalls, isTerminalStatus, parseSkillFile, proxyVirtualFsOps, queryParentWorkflowState, readFileHandler, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler, writeFileTool };
|
|
3063
|
+
export { FileSystemSkillProvider, NodeFsSandboxFileSystem, SandboxManager, SandboxNotFoundError, SandboxNotSupportedError, VirtualFileSystem, applyVirtualTreeMutations, askUserQuestionTool, bashHandler, bashTool, composeHooks, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createObservabilityHooks, createReadSkillHandler, createReadSkillTool, createRunAgentActivity, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createThreadManager, createToolRouter, createVirtualFsActivities, defineSubagent, defineSubagentWorkflow, defineTool, defineWorkflow, editHandler, editTool, filesWithMimeType, formatVirtualFileTree, getActivityContext, getShortId, globHandler, globTool, grepTool, hasDirectory, hasFileWithMimeType, hasNoOtherToolCalls, isTerminalStatus, parseSkillFile, proxyRunAgent, proxyVirtualFsOps, queryParentWorkflowState, readFileHandler, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, toTree, withAutoAppend, withParentWorkflowState, withSandbox, withVirtualFs, writeFileHandler, writeFileTool };
|
|
2952
3064
|
//# sourceMappingURL=index.js.map
|
|
2953
3065
|
//# sourceMappingURL=index.js.map
|