@strands-agents/sdk 1.0.0 → 1.2.0
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 +6 -0
- package/dist/src/__fixtures__/agent-helpers.d.ts +16 -1
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +42 -0
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts +2 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +20 -3
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/interrupt.test.d.ts +2 -0
- package/dist/src/__tests__/interrupt.test.d.ts.map +1 -0
- package/dist/src/__tests__/interrupt.test.js +264 -0
- package/dist/src/__tests__/interrupt.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.js +447 -7
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.hook.test.js +551 -1
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.interrupt.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.interrupt.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.interrupt.test.js +779 -0
- package/dist/src/agent/__tests__/agent.interrupt.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.model-retry.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.model-retry.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.model-retry.test.js +161 -0
- package/dist/src/agent/__tests__/agent.model-retry.test.js.map +1 -0
- package/dist/src/agent/__tests__/agent.test.js +174 -0
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/snapshot.test.js +148 -4
- package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
- package/dist/src/agent/agent-as-tool.d.ts.map +1 -1
- package/dist/src/agent/agent-as-tool.js +2 -3
- package/dist/src/agent/agent-as-tool.js.map +1 -1
- package/dist/src/agent/agent.d.ts +94 -4
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +625 -223
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/snapshot.d.ts +11 -19
- package/dist/src/agent/snapshot.d.ts.map +1 -1
- package/dist/src/agent/snapshot.js +23 -19
- package/dist/src/agent/snapshot.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +230 -9
- package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +19 -6
- package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +422 -41
- package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +75 -1
- package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
- package/dist/src/conversation-manager/conversation-manager.d.ts +67 -22
- package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/conversation-manager.js +65 -13
- package/dist/src/conversation-manager/conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/index.d.ts +1 -1
- package/dist/src/conversation-manager/index.d.ts.map +1 -1
- package/dist/src/conversation-manager/index.js +1 -1
- package/dist/src/conversation-manager/index.js.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +43 -10
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +202 -45
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +23 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
- package/dist/src/conversation-manager/summarizing-conversation-manager.js +39 -17
- package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +99 -12
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/__tests__/registry.test.js +166 -2
- package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +125 -32
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +111 -8
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/hooks/index.d.ts +4 -3
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +2 -1
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/registry.d.ts +12 -12
- package/dist/src/hooks/registry.d.ts.map +1 -1
- package/dist/src/hooks/registry.js +55 -15
- package/dist/src/hooks/registry.js.map +1 -1
- package/dist/src/hooks/types.d.ts +23 -0
- package/dist/src/hooks/types.d.ts.map +1 -1
- package/dist/src/hooks/types.js +17 -1
- package/dist/src/hooks/types.js.map +1 -1
- package/dist/src/index.d.ts +12 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/interrupt.d.ts +247 -0
- package/dist/src/interrupt.d.ts.map +1 -0
- package/dist/src/interrupt.js +316 -0
- package/dist/src/interrupt.js.map +1 -0
- package/dist/src/mcp.d.ts +61 -4
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +161 -25
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/models/__tests__/anthropic.test.js +78 -8
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +156 -18
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/defaults.test.d.ts +2 -0
- package/dist/src/models/__tests__/defaults.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/defaults.test.js +36 -0
- package/dist/src/models/__tests__/defaults.test.js.map +1 -0
- package/dist/src/models/__tests__/google.test.js +72 -6
- package/dist/src/models/__tests__/google.test.js.map +1 -1
- package/dist/src/models/anthropic.d.ts +10 -0
- package/dist/src/models/anthropic.d.ts.map +1 -1
- package/dist/src/models/anthropic.js +14 -4
- package/dist/src/models/anthropic.js.map +1 -1
- package/dist/src/models/bedrock.d.ts +17 -3
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +80 -13
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/defaults.d.ts +10 -0
- package/dist/src/models/defaults.d.ts.map +1 -1
- package/dist/src/models/defaults.js +129 -0
- package/dist/src/models/defaults.js.map +1 -1
- package/dist/src/models/google/model.d.ts.map +1 -1
- package/dist/src/models/google/model.js +4 -2
- package/dist/src/models/google/model.js.map +1 -1
- package/dist/src/models/google/types.d.ts +10 -0
- package/dist/src/models/google/types.d.ts.map +1 -1
- package/dist/src/models/model.d.ts +15 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +18 -0
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/openai/__tests__/chat.test.js +55 -2
- package/dist/src/models/openai/__tests__/chat.test.js.map +1 -1
- package/dist/src/models/openai/__tests__/responses.test.js +19 -0
- package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
- package/dist/src/models/openai/errors.d.ts.map +1 -1
- package/dist/src/models/openai/errors.js +7 -4
- package/dist/src/models/openai/errors.js.map +1 -1
- package/dist/src/models/openai/model.d.ts.map +1 -1
- package/dist/src/models/openai/model.js +2 -2
- package/dist/src/models/openai/model.js.map +1 -1
- package/dist/src/multiagent/__tests__/graph.test.js +69 -0
- package/dist/src/multiagent/__tests__/graph.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/graph.tracer.test.js +14 -0
- package/dist/src/multiagent/__tests__/graph.tracer.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/interrupts.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/interrupts.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/interrupts.test.js +390 -0
- package/dist/src/multiagent/__tests__/interrupts.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +13 -0
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/state.test.js +139 -1
- package/dist/src/multiagent/__tests__/state.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/swarm.test.js +77 -0
- package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -1
- package/dist/src/multiagent/events.d.ts +15 -1
- package/dist/src/multiagent/events.d.ts.map +1 -1
- package/dist/src/multiagent/events.js +18 -0
- package/dist/src/multiagent/events.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts +59 -3
- package/dist/src/multiagent/graph.d.ts.map +1 -1
- package/dist/src/multiagent/graph.js +201 -34
- package/dist/src/multiagent/graph.js.map +1 -1
- package/dist/src/multiagent/multiagent.d.ts +77 -3
- package/dist/src/multiagent/multiagent.d.ts.map +1 -1
- package/dist/src/multiagent/multiagent.js +115 -1
- package/dist/src/multiagent/multiagent.js.map +1 -1
- package/dist/src/multiagent/nodes.d.ts +18 -0
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +69 -22
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/multiagent/state.d.ts +39 -3
- package/dist/src/multiagent/state.d.ts.map +1 -1
- package/dist/src/multiagent/state.js +80 -1
- package/dist/src/multiagent/state.js.map +1 -1
- package/dist/src/multiagent/swarm.d.ts +30 -1
- package/dist/src/multiagent/swarm.d.ts.map +1 -1
- package/dist/src/multiagent/swarm.js +166 -33
- package/dist/src/multiagent/swarm.js.map +1 -1
- package/dist/src/registry/__tests__/tool-registry.test.js +37 -0
- package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -1
- package/dist/src/registry/tool-registry.d.ts +13 -7
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +35 -10
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/retry/__tests__/backoff-strategy.test.d.ts +2 -0
- package/dist/src/retry/__tests__/backoff-strategy.test.d.ts.map +1 -0
- package/dist/src/retry/__tests__/backoff-strategy.test.js +116 -0
- package/dist/src/retry/__tests__/backoff-strategy.test.js.map +1 -0
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts +2 -0
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts.map +1 -0
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.js +225 -0
- package/dist/src/retry/__tests__/default-model-retry-strategy.test.js.map +1 -0
- package/dist/src/retry/backoff-strategy.d.ts +108 -0
- package/dist/src/retry/backoff-strategy.d.ts.map +1 -0
- package/dist/src/retry/backoff-strategy.js +86 -0
- package/dist/src/retry/backoff-strategy.js.map +1 -0
- package/dist/src/retry/default-model-retry-strategy.d.ts +76 -0
- package/dist/src/retry/default-model-retry-strategy.d.ts.map +1 -0
- package/dist/src/retry/default-model-retry-strategy.js +104 -0
- package/dist/src/retry/default-model-retry-strategy.js.map +1 -0
- package/dist/src/retry/index.d.ts +8 -0
- package/dist/src/retry/index.d.ts.map +1 -0
- package/dist/src/retry/index.js +7 -0
- package/dist/src/retry/index.js.map +1 -0
- package/dist/src/retry/model-retry-strategy.d.ts +80 -0
- package/dist/src/retry/model-retry-strategy.d.ts.map +1 -0
- package/dist/src/retry/model-retry-strategy.js +85 -0
- package/dist/src/retry/model-retry-strategy.js.map +1 -0
- package/dist/src/retry/retry-strategy.d.ts +34 -0
- package/dist/src/retry/retry-strategy.d.ts.map +1 -0
- package/dist/src/retry/retry-strategy.js +25 -0
- package/dist/src/retry/retry-strategy.js.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.js +84 -3
- package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
- package/dist/src/session/session-manager.d.ts +11 -2
- package/dist/src/session/session-manager.d.ts.map +1 -1
- package/dist/src/session/session-manager.js +17 -6
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/telemetry/__tests__/meter.test.js +5 -27
- package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
- package/dist/src/telemetry/meter.d.ts +12 -4
- package/dist/src/telemetry/meter.d.ts.map +1 -1
- package/dist/src/telemetry/meter.js +13 -8
- package/dist/src/telemetry/meter.js.map +1 -1
- package/dist/src/tools/__tests__/tool.test.js +24 -1
- package/dist/src/tools/__tests__/tool.test.js.map +1 -1
- package/dist/src/tools/function-tool.d.ts.map +1 -1
- package/dist/src/tools/function-tool.js +6 -1
- package/dist/src/tools/function-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts.map +1 -1
- package/dist/src/tools/mcp-tool.js +3 -2
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/tool.d.ts +10 -1
- package/dist/src/tools/tool.d.ts.map +1 -1
- package/dist/src/tools/tool.js +12 -0
- package/dist/src/tools/tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/agent.test.js +97 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +48 -8
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +28 -3
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/interrupt.d.ts +103 -0
- package/dist/src/types/interrupt.d.ts.map +1 -0
- package/dist/src/types/interrupt.js +63 -0
- package/dist/src/types/interrupt.js.map +1 -0
- package/dist/src/types/messages.d.ts +2 -1
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +292 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +148 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts +2 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js +78 -0
- package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/index.d.ts +23 -0
- package/dist/src/vended-plugins/context-offloader/index.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/index.js +21 -0
- package/dist/src/vended-plugins/context-offloader/index.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts +48 -0
- package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/plugin.js +244 -0
- package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -0
- package/dist/src/vended-plugins/context-offloader/storage.d.ts +114 -0
- package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -0
- package/dist/src/vended-plugins/context-offloader/storage.js +204 -0
- package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -0
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +12 -0
- package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +3 -0
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
- package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
- package/dist/src/vended-tools/bash/bash.js +0 -3
- package/dist/src/vended-tools/bash/bash.js.map +1 -1
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +3 -0
- package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +3 -0
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
- package/package.json +9 -5
|
@@ -2,13 +2,30 @@ import type { InvocationState, InvokeArgs } from '../types/agent.js';
|
|
|
2
2
|
import type { Message, MessageData } from '../types/messages.js';
|
|
3
3
|
import type { HookableEvent } from '../hooks/events.js';
|
|
4
4
|
import type { HookCallback, HookableEventConstructor, HookCleanup } from '../hooks/types.js';
|
|
5
|
+
import type { InterruptResponseContentData } from '../types/interrupt.js';
|
|
6
|
+
import { InterruptResponseContent } from '../types/interrupt.js';
|
|
5
7
|
import type { MultiAgentStreamEvent } from './events.js';
|
|
6
|
-
import
|
|
8
|
+
import { NodeResult } from './state.js';
|
|
9
|
+
import type { MultiAgentResult, MultiAgentState, NodeState } from './state.js';
|
|
7
10
|
/**
|
|
8
|
-
* Input type for multi-agent orchestrators. Excludes `Message[]`
|
|
9
|
-
*
|
|
11
|
+
* Input type for multi-agent orchestrators. Excludes `Message[]` / `MessageData[]`
|
|
12
|
+
* since orchestrators route content blocks between nodes rather than replaying raw
|
|
13
|
+
* conversation history.
|
|
14
|
+
*
|
|
15
|
+
* Accepts `InterruptResponseContent[]` / `InterruptResponseContentData[]` for resuming
|
|
16
|
+
* from an interrupted run — orchestrators detect resume input at the entry point and
|
|
17
|
+
* route responses to the interrupted nodes rather than flowing through dependency
|
|
18
|
+
* resolution.
|
|
10
19
|
*/
|
|
11
20
|
export type MultiAgentInput = Exclude<InvokeArgs, Message[] | MessageData[]>;
|
|
21
|
+
/**
|
|
22
|
+
* The non-resume subset of {@link MultiAgentInput}. Internal orchestrator helpers that
|
|
23
|
+
* participate in dependency resolution / handoff routing accept this narrower type so
|
|
24
|
+
* they don't need to re-check for {@link InterruptResponseContent} entries at each call.
|
|
25
|
+
*
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export type MultiAgentContentInput = Exclude<MultiAgentInput, InterruptResponseContent[] | InterruptResponseContentData[]>;
|
|
12
29
|
/**
|
|
13
30
|
* Options for a single multi-agent orchestrator invocation.
|
|
14
31
|
*/
|
|
@@ -19,6 +36,18 @@ export interface MultiAgentInvokeOptions {
|
|
|
19
36
|
* {@link InvocationState} for details. Defaults to `{}` when omitted.
|
|
20
37
|
*/
|
|
21
38
|
invocationState?: InvocationState;
|
|
39
|
+
/**
|
|
40
|
+
* Cancellation signal forwarded to every node (and into any nested orchestrators
|
|
41
|
+
* via `MultiAgentNode`). Composed with the orchestrator's own timeout and
|
|
42
|
+
* short-circuit signals, matching {@link InvokeOptions.cancelSignal} on the
|
|
43
|
+
* single-agent path. Cooperative — honored by nodes that forward it to their
|
|
44
|
+
* underlying agents/tools.
|
|
45
|
+
*
|
|
46
|
+
* When this signal aborts, the orchestrator throws rather than returning a clean
|
|
47
|
+
* result. This matches single-agent behavior: external cancellation is treated as
|
|
48
|
+
* an exceptional exit, not a normal terminal state.
|
|
49
|
+
*/
|
|
50
|
+
cancelSignal?: AbortSignal;
|
|
22
51
|
}
|
|
23
52
|
/**
|
|
24
53
|
* Interface for any multi-agent orchestrator that can stream execution.
|
|
@@ -51,4 +80,49 @@ export interface MultiAgent {
|
|
|
51
80
|
*/
|
|
52
81
|
addHook<T extends HookableEvent>(eventType: HookableEventConstructor<T>, callback: HookCallback<T>): HookCleanup;
|
|
53
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Detects whether a {@link MultiAgentInput} is a resume from an interrupted run and
|
|
85
|
+
* normalizes its entries to {@link InterruptResponseContent} instances.
|
|
86
|
+
*
|
|
87
|
+
* Returns `undefined` for fresh input (string / content blocks / empty array).
|
|
88
|
+
*/
|
|
89
|
+
export declare function extractResumeResponses(input: MultiAgentInput): InterruptResponseContent[] | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* Groups a flat list of interrupt responses by the node that raised each interrupt.
|
|
92
|
+
*
|
|
93
|
+
* For each response, finds the node whose `NodeState.interrupts` contains an entry
|
|
94
|
+
* with a matching id. Ids are globally unique (derived from model-assigned
|
|
95
|
+
* `toolUseId`s) so each response maps to exactly one node. Nested orchestrators
|
|
96
|
+
* carry their subtree's interrupts on the wrapping `MultiAgentNode`'s state, so a
|
|
97
|
+
* matching response is forwarded as-is to the nested orchestrator, which does its
|
|
98
|
+
* own grouping recursively.
|
|
99
|
+
*
|
|
100
|
+
* @throws Error if any response's interrupt id does not match any tracked node
|
|
101
|
+
*/
|
|
102
|
+
export declare function groupInterruptResponsesByNode(responses: InterruptResponseContent[], state: MultiAgentState): Map<string, InterruptResponseContent[]>;
|
|
103
|
+
/**
|
|
104
|
+
* Removes a stale INTERRUPTED result for the given node from both per-node history
|
|
105
|
+
* and the orchestrator-level aggregate so a fresh result (from resume or cancel)
|
|
106
|
+
* replaces it cleanly. No-op if the node isn't in an INTERRUPTED state.
|
|
107
|
+
*/
|
|
108
|
+
export declare function dropStaleInterruptedResult(nodeId: string, nodeState: NodeState, state: MultiAgentState): void;
|
|
109
|
+
/**
|
|
110
|
+
* Records a hook-raised interrupt on a node that hadn't started executing: builds
|
|
111
|
+
* the INTERRUPTED {@link NodeResult}, transitions `nodeState.status`, and appends
|
|
112
|
+
* the result to `nodeState.results`. Returns the result so callers can route it
|
|
113
|
+
* into their own queue/lifecycle machinery.
|
|
114
|
+
*
|
|
115
|
+
* Shared between Graph and Swarm so their hook-interrupt branches don't drift.
|
|
116
|
+
*/
|
|
117
|
+
export declare function recordHookInterrupt(nodeId: string, nodeState: NodeState): NodeResult;
|
|
118
|
+
/**
|
|
119
|
+
* Applies interrupt responses to a node's own orchestrator-level interrupts and
|
|
120
|
+
* returns the remaining responses — those bound for the child agent's interrupts.
|
|
121
|
+
*
|
|
122
|
+
* Orchestrator hooks (source `'multiagent-hook'`) store their interrupts on
|
|
123
|
+
* `NodeState.interrupts` directly; the hook re-runs on resume and reads the stored
|
|
124
|
+
* response. Agent-level interrupts aren't answerable here — they flow to the child
|
|
125
|
+
* agent as resume input and are applied by the agent's own interrupt machinery.
|
|
126
|
+
*/
|
|
127
|
+
export declare function applyOrchestratorHookResponses(nodeState: NodeState, responses: InterruptResponseContent[]): InterruptResponseContent[];
|
|
54
128
|
//# sourceMappingURL=multiagent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiagent.d.ts","sourceRoot":"","sources":["../../../src/multiagent/multiagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"multiagent.d.ts","sourceRoot":"","sources":["../../../src/multiagent/multiagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC5F,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AACzE,OAAO,EAAE,wBAAwB,EAA8B,MAAM,uBAAuB,CAAA;AAC5F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,UAAU,EAAU,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE9E;;;;;;;;;GASG;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;AAE5E;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,OAAO,CAC1C,eAAe,EACf,wBAAwB,EAAE,GAAG,4BAA4B,EAAE,CAC5D,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,eAAe,CAAC,EAAE,eAAe,CAAA;IAEjC;;;;;;;;;;OAUG;IACH,YAAY,CAAC,EAAE,WAAW,CAAA;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAE5F;;;;;OAKG;IACH,MAAM,CACJ,KAAK,EAAE,eAAe,EACtB,OAAO,CAAC,EAAE,uBAAuB,GAChC,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAA;IAErE;;;;;;OAMG;IACH,OAAO,CAAC,CAAC,SAAS,aAAa,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,WAAW,CAAA;CACjH;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,wBAAwB,EAAE,GAAG,SAAS,CAerG;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,wBAAwB,EAAE,EACrC,KAAK,EAAE,eAAe,GACrB,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAmBzC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAO7G;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU,CAUpF;AAED;;;;;;;;GAQG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,wBAAwB,EAAE,GACpC,wBAAwB,EAAE,CAa5B"}
|
|
@@ -1,2 +1,116 @@
|
|
|
1
|
-
|
|
1
|
+
import { InterruptResponseContent, isInterruptResponseContent } from '../types/interrupt.js';
|
|
2
|
+
import { NodeResult, Status } from './state.js';
|
|
3
|
+
/**
|
|
4
|
+
* Detects whether a {@link MultiAgentInput} is a resume from an interrupted run and
|
|
5
|
+
* normalizes its entries to {@link InterruptResponseContent} instances.
|
|
6
|
+
*
|
|
7
|
+
* Returns `undefined` for fresh input (string / content blocks / empty array).
|
|
8
|
+
*/
|
|
9
|
+
export function extractResumeResponses(input) {
|
|
10
|
+
if (!Array.isArray(input) || input.length === 0)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (!isInterruptResponseContent(input[0]))
|
|
13
|
+
return undefined;
|
|
14
|
+
const responses = [];
|
|
15
|
+
for (const entry of input) {
|
|
16
|
+
if (entry instanceof InterruptResponseContent) {
|
|
17
|
+
responses.push(entry);
|
|
18
|
+
}
|
|
19
|
+
else if (isInterruptResponseContent(entry)) {
|
|
20
|
+
responses.push(InterruptResponseContent.fromJSON(entry));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
throw new TypeError('Must resume from interrupt with a list of interruptResponse content blocks only');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return responses;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Groups a flat list of interrupt responses by the node that raised each interrupt.
|
|
30
|
+
*
|
|
31
|
+
* For each response, finds the node whose `NodeState.interrupts` contains an entry
|
|
32
|
+
* with a matching id. Ids are globally unique (derived from model-assigned
|
|
33
|
+
* `toolUseId`s) so each response maps to exactly one node. Nested orchestrators
|
|
34
|
+
* carry their subtree's interrupts on the wrapping `MultiAgentNode`'s state, so a
|
|
35
|
+
* matching response is forwarded as-is to the nested orchestrator, which does its
|
|
36
|
+
* own grouping recursively.
|
|
37
|
+
*
|
|
38
|
+
* @throws Error if any response's interrupt id does not match any tracked node
|
|
39
|
+
*/
|
|
40
|
+
export function groupInterruptResponsesByNode(responses, state) {
|
|
41
|
+
const grouped = new Map();
|
|
42
|
+
for (const response of responses) {
|
|
43
|
+
const id = response.interruptResponse.interruptId;
|
|
44
|
+
let target;
|
|
45
|
+
for (const [nodeId, nodeState] of state.nodes) {
|
|
46
|
+
if (nodeState.interrupts.some((i) => i.id === id)) {
|
|
47
|
+
target = nodeId;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (!target) {
|
|
52
|
+
throw new Error(`interrupt_id=<${id}> | no node found with matching interrupt`);
|
|
53
|
+
}
|
|
54
|
+
const bucket = grouped.get(target) ?? [];
|
|
55
|
+
bucket.push(response);
|
|
56
|
+
grouped.set(target, bucket);
|
|
57
|
+
}
|
|
58
|
+
return grouped;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Removes a stale INTERRUPTED result for the given node from both per-node history
|
|
62
|
+
* and the orchestrator-level aggregate so a fresh result (from resume or cancel)
|
|
63
|
+
* replaces it cleanly. No-op if the node isn't in an INTERRUPTED state.
|
|
64
|
+
*/
|
|
65
|
+
export function dropStaleInterruptedResult(nodeId, nodeState, state) {
|
|
66
|
+
if (nodeState.status !== Status.INTERRUPTED)
|
|
67
|
+
return;
|
|
68
|
+
if (nodeState.results[nodeState.results.length - 1]?.status === Status.INTERRUPTED) {
|
|
69
|
+
nodeState.results.pop();
|
|
70
|
+
}
|
|
71
|
+
const idx = state.results.findIndex((r) => r.nodeId === nodeId && r.status === Status.INTERRUPTED);
|
|
72
|
+
if (idx >= 0)
|
|
73
|
+
state.results.splice(idx, 1);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Records a hook-raised interrupt on a node that hadn't started executing: builds
|
|
77
|
+
* the INTERRUPTED {@link NodeResult}, transitions `nodeState.status`, and appends
|
|
78
|
+
* the result to `nodeState.results`. Returns the result so callers can route it
|
|
79
|
+
* into their own queue/lifecycle machinery.
|
|
80
|
+
*
|
|
81
|
+
* Shared between Graph and Swarm so their hook-interrupt branches don't drift.
|
|
82
|
+
*/
|
|
83
|
+
export function recordHookInterrupt(nodeId, nodeState) {
|
|
84
|
+
const result = new NodeResult({
|
|
85
|
+
nodeId,
|
|
86
|
+
status: Status.INTERRUPTED,
|
|
87
|
+
duration: Date.now() - nodeState.startTime,
|
|
88
|
+
interrupts: nodeState.interrupts,
|
|
89
|
+
});
|
|
90
|
+
nodeState.status = Status.INTERRUPTED;
|
|
91
|
+
nodeState.results.push(result);
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Applies interrupt responses to a node's own orchestrator-level interrupts and
|
|
96
|
+
* returns the remaining responses — those bound for the child agent's interrupts.
|
|
97
|
+
*
|
|
98
|
+
* Orchestrator hooks (source `'multiagent-hook'`) store their interrupts on
|
|
99
|
+
* `NodeState.interrupts` directly; the hook re-runs on resume and reads the stored
|
|
100
|
+
* response. Agent-level interrupts aren't answerable here — they flow to the child
|
|
101
|
+
* agent as resume input and are applied by the agent's own interrupt machinery.
|
|
102
|
+
*/
|
|
103
|
+
export function applyOrchestratorHookResponses(nodeState, responses) {
|
|
104
|
+
const forwarded = [];
|
|
105
|
+
for (const response of responses) {
|
|
106
|
+
const local = nodeState.interrupts.find((i) => i.id === response.interruptResponse.interruptId && i.source === 'multiagent-hook');
|
|
107
|
+
if (local) {
|
|
108
|
+
local.response = response.interruptResponse.response;
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
forwarded.push(response);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return forwarded;
|
|
115
|
+
}
|
|
2
116
|
//# sourceMappingURL=multiagent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiagent.js","sourceRoot":"","sources":["../../../src/multiagent/multiagent.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"multiagent.js","sourceRoot":"","sources":["../../../src/multiagent/multiagent.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,6 +32,11 @@ export interface NodeInputOptions {
|
|
|
32
32
|
* hooks/tools can read state written by a previous node.
|
|
33
33
|
*/
|
|
34
34
|
invocationState?: InvocationState;
|
|
35
|
+
/**
|
|
36
|
+
* Cancellation signal forwarded to the node's underlying agent. Used by
|
|
37
|
+
* orchestrators to enforce per-node timeouts or propagate external cancellation.
|
|
38
|
+
*/
|
|
39
|
+
cancelSignal?: AbortSignal;
|
|
35
40
|
}
|
|
36
41
|
/**
|
|
37
42
|
* Abstract base class for all multi-agent orchestration nodes.
|
|
@@ -77,6 +82,13 @@ export declare abstract class Node {
|
|
|
77
82
|
export interface AgentNodeOptions {
|
|
78
83
|
/** The agent to wrap as a node. */
|
|
79
84
|
agent: InvokableAgent;
|
|
85
|
+
/**
|
|
86
|
+
* Per-node wall-clock ceiling in milliseconds. Overrides the orchestrator's
|
|
87
|
+
* default node timeout. Cancellation is cooperative — a tool that neither
|
|
88
|
+
* polls its cancel signal nor forwards it to a cancellable API can run past
|
|
89
|
+
* this deadline.
|
|
90
|
+
*/
|
|
91
|
+
timeout?: number;
|
|
80
92
|
}
|
|
81
93
|
/**
|
|
82
94
|
* Node that wraps an {@link InvokableAgent} instance for multi-agent orchestration.
|
|
@@ -87,6 +99,12 @@ export interface AgentNodeOptions {
|
|
|
87
99
|
export declare class AgentNode extends Node {
|
|
88
100
|
readonly type: "agentNode";
|
|
89
101
|
private readonly _agent;
|
|
102
|
+
/**
|
|
103
|
+
* Per-node wall-clock ceiling in milliseconds. When set, overrides the orchestrator's
|
|
104
|
+
* `nodeTimeout` for this node. Undefined means "fall back to the orchestrator's setting."
|
|
105
|
+
* See {@link AgentNodeOptions.timeout}.
|
|
106
|
+
*/
|
|
107
|
+
readonly timeout?: number;
|
|
90
108
|
constructor(options: AgentNodeOptions);
|
|
91
109
|
get agent(): InvokableAgent;
|
|
92
110
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../../src/multiagent/nodes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAiB,cAAc,EAAoB,MAAM,mBAAmB,CAAA;AACzG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,EAAE,UAAU,EAAU,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../../src/multiagent/nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Agent } from '../agent/agent.js';
|
|
2
|
-
import {
|
|
2
|
+
import { dropStaleInterruptedResult } from './multiagent.js';
|
|
3
3
|
import { NodeStreamUpdateEvent, NodeResultEvent } from './events.js';
|
|
4
4
|
import { NodeResult, Status } from './state.js';
|
|
5
5
|
import { logger } from '../logging/logger.js';
|
|
6
6
|
import { normalizeError } from '../errors.js';
|
|
7
|
+
import { omitUndefined } from '../types/json.js';
|
|
7
8
|
/**
|
|
8
9
|
* Abstract base class for all multi-agent orchestration nodes.
|
|
9
10
|
*
|
|
@@ -36,6 +37,8 @@ export class Node {
|
|
|
36
37
|
*/
|
|
37
38
|
async *stream(input, state, options) {
|
|
38
39
|
const nodeState = state.node(this.id);
|
|
40
|
+
// Resuming from INTERRUPTED: drop the stale result so the fresh one replaces it.
|
|
41
|
+
dropStaleInterruptedResult(this.id, nodeState, state);
|
|
39
42
|
nodeState.status = Status.EXECUTING;
|
|
40
43
|
nodeState.startTime = Date.now();
|
|
41
44
|
// Resolve invocationState once — the same reference is threaded into handle()
|
|
@@ -45,26 +48,38 @@ export class Node {
|
|
|
45
48
|
let result;
|
|
46
49
|
try {
|
|
47
50
|
const update = yield* this.handle(input, state, resolvedOptions);
|
|
51
|
+
const defaultStatus = update.interrupts && update.interrupts.length > 0 ? Status.INTERRUPTED : Status.COMPLETED;
|
|
48
52
|
result = new NodeResult({
|
|
49
53
|
nodeId: this.id,
|
|
50
|
-
status:
|
|
54
|
+
status: defaultStatus,
|
|
51
55
|
duration: Date.now() - nodeState.startTime,
|
|
52
56
|
content: [],
|
|
53
57
|
...update,
|
|
54
58
|
});
|
|
55
59
|
}
|
|
56
60
|
catch (error) {
|
|
61
|
+
// Orchestrator cancellation (short-circuit or external) maps thrown errors to
|
|
62
|
+
// CANCELLED — node was stopped, not broken.
|
|
63
|
+
const status = options?.cancelSignal?.aborted ? Status.CANCELLED : Status.FAILED;
|
|
57
64
|
result = new NodeResult({
|
|
58
65
|
nodeId: this.id,
|
|
59
|
-
status
|
|
66
|
+
status,
|
|
60
67
|
duration: Date.now() - nodeState.startTime,
|
|
61
68
|
error: normalizeError(error),
|
|
62
69
|
});
|
|
63
|
-
|
|
70
|
+
if (status === Status.FAILED) {
|
|
71
|
+
logger.warn(`node_id=<${this.id}>, error=<${result.error?.message}> | node execution failed`);
|
|
72
|
+
}
|
|
64
73
|
}
|
|
65
74
|
finally {
|
|
66
75
|
nodeState.status = result.status;
|
|
67
76
|
nodeState.results.push(result);
|
|
77
|
+
nodeState.interrupts = result.interrupts ?? [];
|
|
78
|
+
// Clear the stored snapshot on non-INTERRUPTED terminal states; `handle()`
|
|
79
|
+
// repopulates it above if this run itself interrupted.
|
|
80
|
+
if (result.status !== Status.INTERRUPTED) {
|
|
81
|
+
delete nodeState.interruptedSnapshot;
|
|
82
|
+
}
|
|
68
83
|
}
|
|
69
84
|
yield new NodeResultEvent({
|
|
70
85
|
nodeId: this.id,
|
|
@@ -85,13 +100,25 @@ export class Node {
|
|
|
85
100
|
export class AgentNode extends Node {
|
|
86
101
|
type = 'agentNode';
|
|
87
102
|
_agent;
|
|
103
|
+
/**
|
|
104
|
+
* Per-node wall-clock ceiling in milliseconds. When set, overrides the orchestrator's
|
|
105
|
+
* `nodeTimeout` for this node. Undefined means "fall back to the orchestrator's setting."
|
|
106
|
+
* See {@link AgentNodeOptions.timeout}.
|
|
107
|
+
*/
|
|
108
|
+
timeout;
|
|
88
109
|
constructor(options) {
|
|
89
|
-
const { agent, ...config } = options;
|
|
110
|
+
const { agent, timeout, ...config } = options;
|
|
90
111
|
super(agent.id, {
|
|
91
112
|
...config,
|
|
92
113
|
...(agent.description !== undefined && { description: agent.description }),
|
|
93
114
|
});
|
|
94
115
|
this._agent = agent;
|
|
116
|
+
if (timeout !== undefined) {
|
|
117
|
+
if (timeout < 1) {
|
|
118
|
+
throw new Error(`timeout=<${timeout}>, node_id=<${agent.id}> | must be at least 1`);
|
|
119
|
+
}
|
|
120
|
+
this.timeout = timeout;
|
|
121
|
+
}
|
|
95
122
|
}
|
|
96
123
|
get agent() {
|
|
97
124
|
return this._agent;
|
|
@@ -109,13 +136,18 @@ export class AgentNode extends Node {
|
|
|
109
136
|
// Resolve once per handle() call — Node.stream() normally supplies this;
|
|
110
137
|
// handle() is public API, so direct callers get per-call state.
|
|
111
138
|
const invocationState = options?.invocationState ?? {};
|
|
112
|
-
// Only Agent instances support snapshot/restore for state isolation
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
139
|
+
// Only Agent instances support snapshot/restore for state isolation.
|
|
140
|
+
const isAgent = this._agent instanceof Agent;
|
|
141
|
+
const preRunSnapshot = isAgent ? this._agent.takeSnapshot({ preset: 'session' }) : undefined;
|
|
142
|
+
// Rehydrate agent state from a prior INTERRUPTED run (messages + interrupt state).
|
|
143
|
+
const nodeState = state.node(this.id);
|
|
144
|
+
if (isAgent && nodeState?.interruptedSnapshot) {
|
|
145
|
+
this._agent.loadSnapshot(nodeState.interruptedSnapshot);
|
|
146
|
+
}
|
|
116
147
|
try {
|
|
117
148
|
const invokeOptions = {
|
|
118
149
|
...(options?.structuredOutputSchema && { structuredOutputSchema: options.structuredOutputSchema }),
|
|
150
|
+
...(options?.cancelSignal && { cancelSignal: options.cancelSignal }),
|
|
119
151
|
invocationState,
|
|
120
152
|
};
|
|
121
153
|
const gen = this._agent.stream(input, invokeOptions);
|
|
@@ -125,22 +157,32 @@ export class AgentNode extends Node {
|
|
|
125
157
|
nodeId: this.id,
|
|
126
158
|
nodeType: this.type,
|
|
127
159
|
state,
|
|
128
|
-
inner:
|
|
160
|
+
inner: isAgent
|
|
129
161
|
? { source: 'agent', event: next.value }
|
|
130
162
|
: { source: 'custom', event: next.value },
|
|
131
163
|
invocationState,
|
|
132
164
|
});
|
|
133
165
|
next = await gen.next();
|
|
134
166
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
167
|
+
const agentResult = next.value;
|
|
168
|
+
const interrupted = agentResult.stopReason === 'interrupt' && agentResult.interrupts && agentResult.interrupts.length > 0;
|
|
169
|
+
// Capture post-interrupt state for the next resume cycle. Only Agent instances
|
|
170
|
+
// are snapshottable.
|
|
171
|
+
if (interrupted && isAgent && nodeState) {
|
|
172
|
+
nodeState.interruptedSnapshot = this._agent.takeSnapshot({ preset: 'session' });
|
|
173
|
+
}
|
|
174
|
+
return omitUndefined({
|
|
175
|
+
content: agentResult.lastMessage.content,
|
|
176
|
+
structuredOutput: 'structuredOutput' in agentResult ? agentResult.structuredOutput : undefined,
|
|
177
|
+
usage: agentResult.metrics?.accumulatedUsage,
|
|
178
|
+
interrupts: interrupted ? agentResult.interrupts : undefined,
|
|
179
|
+
});
|
|
140
180
|
}
|
|
141
181
|
finally {
|
|
142
|
-
|
|
143
|
-
|
|
182
|
+
// Restore pre-run state — keeps the agent observably unchanged across runs.
|
|
183
|
+
if (preRunSnapshot) {
|
|
184
|
+
;
|
|
185
|
+
this._agent.loadSnapshot(preRunSnapshot);
|
|
144
186
|
}
|
|
145
187
|
}
|
|
146
188
|
}
|
|
@@ -178,7 +220,10 @@ export class MultiAgentNode extends Node {
|
|
|
178
220
|
// Resolve once per handle() call — Node.stream() normally supplies this;
|
|
179
221
|
// handle() is public API, so direct callers get per-call state.
|
|
180
222
|
const invocationState = options?.invocationState ?? {};
|
|
181
|
-
const gen = this._orchestrator.stream(input, {
|
|
223
|
+
const gen = this._orchestrator.stream(input, {
|
|
224
|
+
invocationState,
|
|
225
|
+
...(options?.cancelSignal && { cancelSignal: options.cancelSignal }),
|
|
226
|
+
});
|
|
182
227
|
let next = await gen.next();
|
|
183
228
|
while (!next.done) {
|
|
184
229
|
const event = next.value;
|
|
@@ -197,12 +242,14 @@ export class MultiAgentNode extends Node {
|
|
|
197
242
|
next = await gen.next();
|
|
198
243
|
}
|
|
199
244
|
const innerResult = next.value;
|
|
200
|
-
|
|
245
|
+
const interrupted = innerResult.interrupts && innerResult.interrupts.length > 0;
|
|
246
|
+
return omitUndefined({
|
|
201
247
|
content: innerResult.content,
|
|
202
248
|
usage: innerResult.usage,
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
249
|
+
status: innerResult.status !== Status.COMPLETED ? innerResult.status : undefined,
|
|
250
|
+
error: innerResult.error,
|
|
251
|
+
interrupts: interrupted ? innerResult.interrupts : undefined,
|
|
252
|
+
});
|
|
206
253
|
}
|
|
207
254
|
}
|
|
208
255
|
//# sourceMappingURL=nodes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/multiagent/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAGzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"nodes.js","sourceRoot":"","sources":["../../../src/multiagent/nodes.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,9 @@ import { type ContentBlock } from '../types/messages.js';
|
|
|
3
3
|
import type { Usage } from '../models/streaming.js';
|
|
4
4
|
import type { z } from 'zod';
|
|
5
5
|
import type { JSONValue } from '../types/json.js';
|
|
6
|
+
import { Interrupt } from '../interrupt.js';
|
|
7
|
+
import type { MultiAgentInput } from './multiagent.js';
|
|
8
|
+
import type { Snapshot } from '../types/snapshot.js';
|
|
6
9
|
import { loadStateFromJSONSymbol, stateToJSONSymbol, type StateSerializable } from '../types/serializable.js';
|
|
7
10
|
/**
|
|
8
11
|
* Execution lifecycle status shared across all multi-agent patterns.
|
|
@@ -18,15 +21,17 @@ export declare const Status: {
|
|
|
18
21
|
readonly FAILED: "FAILED";
|
|
19
22
|
/** Execution was cancelled before or during processing. */
|
|
20
23
|
readonly CANCELLED: "CANCELLED";
|
|
24
|
+
/** Execution paused awaiting an interrupt response; can be resumed. */
|
|
25
|
+
readonly INTERRUPTED: "INTERRUPTED";
|
|
21
26
|
};
|
|
22
27
|
/**
|
|
23
28
|
* Union of all valid status values.
|
|
24
29
|
*/
|
|
25
30
|
export type Status = (typeof Status)[keyof typeof Status];
|
|
26
31
|
/**
|
|
27
|
-
* Subset of {@link Status}
|
|
32
|
+
* Subset of {@link Status} valid for a {@link NodeResult}.
|
|
28
33
|
*/
|
|
29
|
-
export type ResultStatus = typeof Status.COMPLETED | typeof Status.FAILED | typeof Status.CANCELLED;
|
|
34
|
+
export type ResultStatus = typeof Status.COMPLETED | typeof Status.FAILED | typeof Status.CANCELLED | typeof Status.INTERRUPTED;
|
|
30
35
|
/**
|
|
31
36
|
* Result of executing a single node.
|
|
32
37
|
*/
|
|
@@ -42,6 +47,8 @@ export declare class NodeResult {
|
|
|
42
47
|
readonly structuredOutput?: z.output<z.ZodType>;
|
|
43
48
|
/** Token usage from the node execution. */
|
|
44
49
|
readonly usage?: Usage;
|
|
50
|
+
/** Interrupts raised by the underlying agent/orchestrator. Present iff `status === 'INTERRUPTED'`. */
|
|
51
|
+
readonly interrupts?: Interrupt[];
|
|
45
52
|
constructor(data: {
|
|
46
53
|
nodeId: string;
|
|
47
54
|
status: ResultStatus;
|
|
@@ -50,6 +57,7 @@ export declare class NodeResult {
|
|
|
50
57
|
error?: Error;
|
|
51
58
|
structuredOutput?: z.output<z.ZodType>;
|
|
52
59
|
usage?: Usage;
|
|
60
|
+
interrupts?: Interrupt[];
|
|
53
61
|
});
|
|
54
62
|
/** Serializes this result to a JSON-compatible value. */
|
|
55
63
|
toJSON(): JSONValue;
|
|
@@ -75,6 +83,15 @@ export declare class NodeState implements StateSerializable {
|
|
|
75
83
|
/** Node execution start time in milliseconds since epoch. */
|
|
76
84
|
startTime: number;
|
|
77
85
|
readonly results: NodeResult[];
|
|
86
|
+
/** Unanswered interrupts raised during this node's most recent run. Populated when `status === 'INTERRUPTED'`. */
|
|
87
|
+
interrupts: Interrupt[];
|
|
88
|
+
/**
|
|
89
|
+
* Snapshot of the node's underlying runnable (Agent or nested orchestrator) captured
|
|
90
|
+
* when the node returned INTERRUPTED. Loaded back into the runnable on resume so it
|
|
91
|
+
* can pick up mid-execution without losing its interrupt bookkeeping. Cleared when
|
|
92
|
+
* the node completes.
|
|
93
|
+
*/
|
|
94
|
+
interruptedSnapshot?: Snapshot;
|
|
78
95
|
constructor();
|
|
79
96
|
/** Content from the most recent result, or empty array if none. */
|
|
80
97
|
get content(): readonly ContentBlock[];
|
|
@@ -96,18 +113,28 @@ export declare class MultiAgentResult {
|
|
|
96
113
|
readonly error?: Error;
|
|
97
114
|
/** Aggregated token usage across all node results. */
|
|
98
115
|
readonly usage: Usage;
|
|
116
|
+
/** Interrupts aggregated across all node results. Present when any node ended INTERRUPTED. */
|
|
117
|
+
readonly interrupts?: Interrupt[];
|
|
99
118
|
constructor(data: {
|
|
100
119
|
status?: ResultStatus;
|
|
101
120
|
results: NodeResult[];
|
|
102
121
|
content?: ContentBlock[];
|
|
103
122
|
duration: number;
|
|
104
123
|
error?: Error;
|
|
124
|
+
interrupts?: Interrupt[];
|
|
105
125
|
});
|
|
106
126
|
/** Serializes this result to a JSON-compatible value. */
|
|
107
127
|
toJSON(): JSONValue;
|
|
108
128
|
/** Creates a MultiAgentResult from a previously serialized JSON value. */
|
|
109
129
|
static fromJSON(data: JSONValue): MultiAgentResult;
|
|
110
|
-
/**
|
|
130
|
+
/**
|
|
131
|
+
* Derives the aggregate status from individual node results.
|
|
132
|
+
*
|
|
133
|
+
* Precedence: FAILED \> INTERRUPTED \> CANCELLED \> COMPLETED. INTERRUPTED outranks
|
|
134
|
+
* CANCELLED because parallel-graph short-circuit aborts siblings as CANCELLED when
|
|
135
|
+
* one node interrupts — the actionable "resume me" signal should surface over the
|
|
136
|
+
* collateral cancellations.
|
|
137
|
+
*/
|
|
111
138
|
private _resolveStatus;
|
|
112
139
|
/** Sums token usage across all node results. */
|
|
113
140
|
private _aggregateNodeUsage;
|
|
@@ -124,6 +151,15 @@ export declare class MultiAgentState implements StateSerializable {
|
|
|
124
151
|
readonly results: NodeResult[];
|
|
125
152
|
/** App-level key-value state accessible from hooks, edge handlers, and custom nodes. */
|
|
126
153
|
readonly app: StateStore;
|
|
154
|
+
/**
|
|
155
|
+
* The invocation's input, carried through an interrupt pause so that resuming a
|
|
156
|
+
* run (on the same instance, or via a SessionManager) can re-enter nodes that
|
|
157
|
+
* never ran (hook-gated source/start nodes) with the original content. Cleared
|
|
158
|
+
* when the invocation terminates in any non-INTERRUPTED state.
|
|
159
|
+
*
|
|
160
|
+
* @internal — not part of the public state shape; orchestrator-owned.
|
|
161
|
+
*/
|
|
162
|
+
_pendingInput?: MultiAgentInput;
|
|
127
163
|
private readonly _nodes;
|
|
128
164
|
constructor(data?: {
|
|
129
165
|
nodeIds?: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/multiagent/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,sBAAsB,CAAA;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EAGjB,KAAK,iBAAiB,EACvB,MAAM,0BAA0B,CAAA;AAEjC;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB,qCAAqC;;IAErC,0CAA0C;;IAE1C,uCAAuC;;IAEvC,sCAAsC;;IAEtC,2DAA2D;;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/multiagent/state.ts"],"names":[],"mappings":"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"}
|