@strands-agents/sdk 0.4.0 → 0.6.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/dist/src/__fixtures__/agent-helpers.d.ts +10 -1
- package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/agent-helpers.js +13 -2
- package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
- package/dist/src/__fixtures__/metrics-helpers.d.ts +25 -0
- package/dist/src/__fixtures__/metrics-helpers.d.ts.map +1 -0
- package/dist/src/__fixtures__/metrics-helpers.js +34 -0
- package/dist/src/__fixtures__/metrics-helpers.js.map +1 -0
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.js +12 -0
- package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
- package/dist/src/__fixtures__/mock-span.d.ts +78 -0
- package/dist/src/__fixtures__/mock-span.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-span.js +93 -0
- package/dist/src/__fixtures__/mock-span.js.map +1 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts +5 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-storage-provider.js +23 -6
- package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -1
- package/dist/src/__fixtures__/slim-types.d.ts +2 -1
- package/dist/src/__fixtures__/slim-types.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.d.ts +2 -2
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +4 -4
- package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
- package/dist/src/__tests__/app-state.test.d.ts +2 -0
- package/dist/src/__tests__/app-state.test.d.ts.map +1 -0
- package/dist/src/{agent/__tests__/state.test.js → __tests__/app-state.test.js} +46 -46
- package/dist/src/__tests__/app-state.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.js +129 -18
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.test.js +119 -11
- package/dist/src/agent/__tests__/agent.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.tracer.test.d.ts +2 -0
- package/dist/src/agent/__tests__/agent.tracer.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/agent.tracer.test.js +470 -0
- package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -0
- package/dist/src/agent/agent.d.ts +79 -9
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +253 -68
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/{agent/state.d.ts → app-state.d.ts} +7 -7
- package/dist/src/app-state.d.ts.map +1 -0
- package/dist/src/{agent/state.js → app-state.js} +6 -6
- package/dist/src/app-state.js.map +1 -0
- package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +1 -1
- package/dist/src/conversation-manager/sliding-window-conversation-manager.js +1 -1
- package/dist/src/errors.d.ts +6 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +9 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +2 -0
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +16 -0
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/hooks/index.d.ts +1 -1
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/index.d.ts +23 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +19 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp.d.ts +41 -0
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +60 -6
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +688 -0
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +113 -0
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/__tests__/streaming.test.d.ts +2 -0
- package/dist/src/models/__tests__/streaming.test.d.ts.map +1 -0
- package/dist/src/models/__tests__/streaming.test.js +50 -0
- package/dist/src/models/__tests__/streaming.test.js.map +1 -0
- package/dist/src/models/bedrock.d.ts +80 -1
- package/dist/src/models/bedrock.d.ts.map +1 -1
- package/dist/src/models/bedrock.js +214 -5
- package/dist/src/models/bedrock.js.map +1 -1
- package/dist/src/models/model.d.ts +10 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +58 -2
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/streaming.d.ts +84 -3
- package/dist/src/models/streaming.d.ts.map +1 -1
- package/dist/src/models/streaming.js +26 -0
- package/dist/src/models/streaming.js.map +1 -1
- package/dist/src/multiagent/__tests__/events.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/events.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/events.test.js +205 -0
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/graph.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/graph.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/graph.test.js +438 -0
- package/dist/src/multiagent/__tests__/graph.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +105 -9
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
- package/dist/src/multiagent/__tests__/queue.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/queue.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/queue.test.js +118 -0
- package/dist/src/multiagent/__tests__/queue.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/swarm.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/swarm.test.js +241 -0
- package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -0
- package/dist/src/multiagent/base.d.ts +25 -0
- package/dist/src/multiagent/base.d.ts.map +1 -0
- package/dist/src/multiagent/base.js +2 -0
- package/dist/src/multiagent/base.js.map +1 -0
- package/dist/src/multiagent/edge.d.ts +36 -0
- package/dist/src/multiagent/edge.d.ts.map +1 -0
- package/dist/src/multiagent/edge.js +15 -0
- package/dist/src/multiagent/edge.js.map +1 -0
- package/dist/src/multiagent/events.d.ts +129 -4
- package/dist/src/multiagent/events.d.ts.map +1 -1
- package/dist/src/multiagent/events.js +140 -2
- package/dist/src/multiagent/events.js.map +1 -1
- package/dist/src/multiagent/graph.d.ts +125 -0
- package/dist/src/multiagent/graph.d.ts.map +1 -0
- package/dist/src/multiagent/graph.js +394 -0
- package/dist/src/multiagent/graph.js.map +1 -0
- package/dist/src/multiagent/index.d.ts +12 -6
- package/dist/src/multiagent/index.d.ts.map +1 -1
- package/dist/src/multiagent/index.js +6 -3
- package/dist/src/multiagent/index.js.map +1 -1
- package/dist/src/multiagent/nodes.d.ts +66 -16
- package/dist/src/multiagent/nodes.d.ts.map +1 -1
- package/dist/src/multiagent/nodes.js +82 -24
- package/dist/src/multiagent/nodes.js.map +1 -1
- package/dist/src/multiagent/queue.d.ts +73 -0
- package/dist/src/multiagent/queue.d.ts.map +1 -0
- package/dist/src/multiagent/queue.js +72 -0
- package/dist/src/multiagent/queue.js.map +1 -0
- package/dist/src/multiagent/state.d.ts +79 -10
- package/dist/src/multiagent/state.d.ts.map +1 -1
- package/dist/src/multiagent/state.js +101 -9
- package/dist/src/multiagent/state.js.map +1 -1
- package/dist/src/multiagent/swarm.d.ts +102 -0
- package/dist/src/multiagent/swarm.d.ts.map +1 -0
- package/dist/src/multiagent/swarm.js +238 -0
- package/dist/src/multiagent/swarm.js.map +1 -0
- package/dist/src/registry/__tests__/tool-registry.test.d.ts +2 -0
- package/dist/src/registry/__tests__/tool-registry.test.d.ts.map +1 -0
- package/dist/src/registry/__tests__/tool-registry.test.js +124 -0
- package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -0
- package/dist/src/registry/tool-registry.d.ts +32 -20
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +60 -158
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/session/__tests__/file-storage.test.node.js +75 -15
- package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -1
- package/dist/src/session/__tests__/s3-storage.test.d.ts +2 -0
- package/dist/src/session/__tests__/s3-storage.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/{s3-storage.test.node.js → s3-storage.test.js} +161 -75
- package/dist/src/session/__tests__/s3-storage.test.js.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.d.ts +2 -0
- package/dist/src/session/__tests__/session-manager.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/session-manager.test.js +461 -0
- package/dist/src/session/__tests__/session-manager.test.js.map +1 -0
- package/dist/src/session/__tests__/validation.test.js +28 -1
- package/dist/src/session/__tests__/validation.test.js.map +1 -1
- package/dist/src/session/file-storage.d.ts +53 -27
- package/dist/src/session/file-storage.d.ts.map +1 -1
- package/dist/src/session/file-storage.js +103 -52
- package/dist/src/session/file-storage.js.map +1 -1
- package/dist/src/session/index.d.ts +6 -13
- package/dist/src/session/index.d.ts.map +1 -1
- package/dist/src/session/index.js +4 -12
- package/dist/src/session/index.js.map +1 -1
- package/dist/src/session/s3-storage.d.ts +49 -20
- package/dist/src/session/s3-storage.d.ts.map +1 -1
- package/dist/src/session/s3-storage.js +120 -35
- package/dist/src/session/s3-storage.js.map +1 -1
- package/dist/src/session/session-manager.d.ts +83 -0
- package/dist/src/session/session-manager.d.ts.map +1 -0
- package/dist/src/session/session-manager.js +122 -0
- package/dist/src/session/session-manager.js.map +1 -0
- package/dist/src/session/storage.d.ts +19 -11
- package/dist/src/session/storage.d.ts.map +1 -1
- package/dist/src/session/types.d.ts +6 -18
- package/dist/src/session/types.d.ts.map +1 -1
- package/dist/src/session/validation.d.ts +7 -0
- package/dist/src/session/validation.d.ts.map +1 -1
- package/dist/src/session/validation.js +12 -0
- package/dist/src/session/validation.js.map +1 -1
- package/dist/src/structured-output/__tests__/context.test.js +13 -13
- package/dist/src/structured-output/__tests__/context.test.js.map +1 -1
- package/dist/src/structured-output/context.js +1 -1
- package/dist/src/structured-output/context.js.map +1 -1
- package/dist/src/telemetry/__tests__/config.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/config.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.js +40 -0
- package/dist/src/telemetry/__tests__/config.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.d.ts +2 -0
- package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/config.test.node.js +103 -0
- package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -0
- package/dist/src/telemetry/__tests__/json.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/json.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/json.test.js +89 -0
- package/dist/src/telemetry/__tests__/json.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/meter.test.d.ts +2 -0
- package/dist/src/telemetry/__tests__/meter.test.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/meter.test.js +457 -0
- package/dist/src/telemetry/__tests__/meter.test.js.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +2 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +1 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js +611 -0
- package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -0
- package/dist/src/telemetry/config.d.ts +82 -0
- package/dist/src/telemetry/config.d.ts.map +1 -0
- package/dist/src/telemetry/config.js +133 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +34 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +33 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/json.d.ts +11 -0
- package/dist/src/telemetry/json.d.ts.map +1 -0
- package/dist/src/telemetry/json.js +25 -0
- package/dist/src/telemetry/json.js.map +1 -0
- package/dist/src/telemetry/meter.d.ts +277 -0
- package/dist/src/telemetry/meter.d.ts.map +1 -0
- package/dist/src/telemetry/meter.js +292 -0
- package/dist/src/telemetry/meter.js.map +1 -0
- package/dist/src/telemetry/tracer.d.ts +219 -0
- package/dist/src/telemetry/tracer.d.ts.map +1 -0
- package/dist/src/telemetry/tracer.js +610 -0
- package/dist/src/telemetry/tracer.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +101 -0
- package/dist/src/telemetry/types.d.ts.map +1 -0
- package/dist/src/telemetry/types.js +5 -0
- package/dist/src/{multiagent → telemetry}/types.js.map +1 -1
- package/dist/src/tools/__tests__/tool-factory.test.d.ts +2 -0
- package/dist/src/tools/__tests__/tool-factory.test.d.ts.map +1 -0
- package/dist/src/tools/__tests__/tool-factory.test.js +98 -0
- package/dist/src/tools/__tests__/tool-factory.test.js.map +1 -0
- package/dist/src/tools/__tests__/zod-tool.test-d.js +1 -1
- package/dist/src/tools/__tests__/zod-tool.test-d.js.map +1 -1
- package/dist/src/tools/__tests__/zod-tool.test.js +3 -4
- package/dist/src/tools/__tests__/zod-tool.test.js.map +1 -1
- package/dist/src/tools/function-tool.d.ts +15 -2
- package/dist/src/tools/function-tool.d.ts.map +1 -1
- package/dist/src/tools/function-tool.js +24 -0
- package/dist/src/tools/function-tool.js.map +1 -1
- package/dist/src/tools/tool-factory.d.ts +22 -0
- package/dist/src/tools/tool-factory.d.ts.map +1 -0
- package/dist/src/tools/tool-factory.js +55 -0
- package/dist/src/tools/tool-factory.js.map +1 -0
- package/dist/src/tools/tool.d.ts +1 -1
- package/dist/src/tools/tool.js +1 -1
- package/dist/src/tools/zod-tool.d.ts +55 -52
- package/dist/src/tools/zod-tool.d.ts.map +1 -1
- package/dist/src/tools/zod-tool.js +7 -61
- package/dist/src/tools/zod-tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/agent.test.js +11 -0
- package/dist/src/types/__tests__/agent.test.js.map +1 -1
- package/dist/src/types/__tests__/citations.test.d.ts +2 -0
- package/dist/src/types/__tests__/citations.test.d.ts.map +1 -0
- package/dist/src/types/__tests__/citations.test.js +104 -0
- package/dist/src/types/__tests__/citations.test.js.map +1 -0
- package/dist/src/types/__tests__/messages.test.js +26 -0
- package/dist/src/types/__tests__/messages.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +10 -3
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +9 -0
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/citations.d.ts +180 -0
- package/dist/src/types/citations.d.ts.map +1 -0
- package/dist/src/types/citations.js +45 -0
- package/dist/src/types/citations.js.map +1 -0
- package/dist/src/types/messages.d.ts +9 -5
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +5 -1
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +2 -2
- 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 +1 -2
- package/dist/src/vended-tools/bash/bash.js.map +1 -1
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js +4 -4
- package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +1 -1
- package/dist/src/vended-tools/file_editor/file-editor.js +1 -1
- package/dist/src/vended-tools/file_editor/file-editor.js.map +1 -1
- package/dist/src/vended-tools/http_request/http-request.d.ts.map +1 -1
- package/dist/src/vended-tools/http_request/http-request.js +1 -2
- package/dist/src/vended-tools/http_request/http-request.js.map +1 -1
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +2 -2
- 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 +25 -4
- package/dist/src/agent/__tests__/state.test.d.ts +0 -2
- package/dist/src/agent/__tests__/state.test.d.ts.map +0 -1
- package/dist/src/agent/__tests__/state.test.js.map +0 -1
- package/dist/src/agent/state.d.ts.map +0 -1
- package/dist/src/agent/state.js.map +0 -1
- package/dist/src/multiagent/types.d.ts +0 -5
- package/dist/src/multiagent/types.d.ts.map +0 -1
- package/dist/src/multiagent/types.js +0 -2
- package/dist/src/registry/registry.d.ts +0 -117
- package/dist/src/registry/registry.d.ts.map +0 -1
- package/dist/src/registry/registry.js +0 -298
- package/dist/src/registry/registry.js.map +0 -1
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts +0 -2
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +0 -1
- package/dist/src/session/__tests__/s3-storage.test.node.js.map +0 -1
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import { Agent } from '../agent/agent.js';
|
|
2
|
+
import { TextBlock } from '../types/messages.js';
|
|
3
|
+
import { HookableEvent } from '../hooks/events.js';
|
|
4
|
+
import { HookRegistryImplementation } from '../hooks/registry.js';
|
|
5
|
+
import { AgentNode, MultiAgentNode, Node } from './nodes.js';
|
|
6
|
+
import { MultiAgentState, MultiAgentResult, NodeResult, Status } from './state.js';
|
|
7
|
+
import { AfterMultiAgentInvocationEvent, AfterNodeCallEvent, BeforeMultiAgentInvocationEvent, BeforeNodeCallEvent, MultiAgentHandoffEvent, MultiAgentInitializedEvent, MultiAgentResultEvent, NodeCancelEvent, } from './events.js';
|
|
8
|
+
import { Edge } from './edge.js';
|
|
9
|
+
import { Queue } from './queue.js';
|
|
10
|
+
/**
|
|
11
|
+
* Directed graph orchestration pattern.
|
|
12
|
+
*
|
|
13
|
+
* Agents execute as nodes in a dependency graph, with edges defining execution order
|
|
14
|
+
* and optional conditions controlling routing. Source nodes (those with no incoming edges)
|
|
15
|
+
* run first, and downstream nodes execute once all their dependencies complete. Parallel
|
|
16
|
+
* execution is supported up to a configurable concurrency limit.
|
|
17
|
+
*
|
|
18
|
+
* Key design choices vs the Python SDK:
|
|
19
|
+
* - Construction uses a declarative options object rather than a mutable GraphBuilder.
|
|
20
|
+
* Nodes and edges are passed directly to the constructor.
|
|
21
|
+
* - Dependency resolution uses AND semantics: a node runs only when all incoming edges
|
|
22
|
+
* are satisfied. Python uses OR semantics, firing a node when any single incoming
|
|
23
|
+
* edge from the completed batch is satisfied.
|
|
24
|
+
* - Nodes are launched individually as they become ready (up to maxConcurrency). Python
|
|
25
|
+
* executes in discrete batches, waiting for the entire batch to complete before
|
|
26
|
+
* scheduling the next set of nodes.
|
|
27
|
+
* - Agent nodes are stateless by default (snapshot/restore on each execution). Python
|
|
28
|
+
* accumulates agent state across executions unless `reset_on_revisit` is enabled.
|
|
29
|
+
* - Node failures produce a FAILED result, allowing parallel paths to continue.
|
|
30
|
+
* Orchestrator-level limits (maxSteps) throw exceptions. Python does the inverse:
|
|
31
|
+
* node failures throw exceptions (fail-fast), while limit violations return a
|
|
32
|
+
* FAILED result.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const graph = new Graph({
|
|
37
|
+
* nodes: [researcher, writer],
|
|
38
|
+
* edges: [['researcher', 'writer']],
|
|
39
|
+
* })
|
|
40
|
+
*
|
|
41
|
+
* const result = await graph.invoke('Explain quantum computing')
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export class Graph {
|
|
45
|
+
id;
|
|
46
|
+
nodes;
|
|
47
|
+
edges;
|
|
48
|
+
config;
|
|
49
|
+
hooks;
|
|
50
|
+
_sources;
|
|
51
|
+
_initialized;
|
|
52
|
+
constructor(options) {
|
|
53
|
+
const { id, nodes, edges, sources, hooks, ...config } = options;
|
|
54
|
+
this.id = id ?? 'graph';
|
|
55
|
+
this.config = {
|
|
56
|
+
maxConcurrency: config.maxConcurrency ?? Infinity,
|
|
57
|
+
maxSteps: config.maxSteps ?? Infinity,
|
|
58
|
+
};
|
|
59
|
+
this._validateConfig();
|
|
60
|
+
this.nodes = this._resolveNodes(nodes);
|
|
61
|
+
this.edges = this._resolveEdges(edges);
|
|
62
|
+
this._sources = this._resolveSources(sources);
|
|
63
|
+
this._validateSources();
|
|
64
|
+
this.hooks = new HookRegistryImplementation();
|
|
65
|
+
this.hooks.addAllHooks(hooks ?? []);
|
|
66
|
+
this._initialized = false;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Initialize the graph. Invokes the {@link MultiAgentInitializedEvent} callback.
|
|
70
|
+
* Called automatically on first invocation.
|
|
71
|
+
*/
|
|
72
|
+
async initialize() {
|
|
73
|
+
if (this._initialized)
|
|
74
|
+
return;
|
|
75
|
+
await this.hooks.invokeCallbacks(new MultiAgentInitializedEvent({ orchestrator: this }));
|
|
76
|
+
this._initialized = true;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Invoke graph and return final result (consumes stream).
|
|
80
|
+
*
|
|
81
|
+
* @param input - The input to pass to entry point nodes
|
|
82
|
+
* @returns Promise resolving to the final MultiAgentResult
|
|
83
|
+
*/
|
|
84
|
+
async invoke(input) {
|
|
85
|
+
const gen = this.stream(input);
|
|
86
|
+
let next = await gen.next();
|
|
87
|
+
while (!next.done) {
|
|
88
|
+
next = await gen.next();
|
|
89
|
+
}
|
|
90
|
+
return next.value;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Stream graph execution, yielding events as nodes execute.
|
|
94
|
+
* Invokes hook callbacks for each event before yielding.
|
|
95
|
+
*
|
|
96
|
+
* @param input - The input to pass to entry nodes
|
|
97
|
+
* @returns Async generator yielding streaming events and returning a MultiAgentResult
|
|
98
|
+
*/
|
|
99
|
+
async *stream(input) {
|
|
100
|
+
await this.initialize();
|
|
101
|
+
const gen = this._stream(input);
|
|
102
|
+
try {
|
|
103
|
+
let next = await gen.next();
|
|
104
|
+
while (!next.done) {
|
|
105
|
+
if (next.value instanceof HookableEvent) {
|
|
106
|
+
await this.hooks.invokeCallbacks(next.value);
|
|
107
|
+
}
|
|
108
|
+
yield next.value;
|
|
109
|
+
next = await gen.next();
|
|
110
|
+
}
|
|
111
|
+
return next.value;
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
await gen.return(undefined);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async *_stream(input) {
|
|
118
|
+
const state = new MultiAgentState({ nodeIds: [...this.nodes.keys()] });
|
|
119
|
+
const queue = new Queue();
|
|
120
|
+
const targets = [...this._sources];
|
|
121
|
+
const streams = new Map();
|
|
122
|
+
yield new BeforeMultiAgentInvocationEvent({ orchestrator: this, state });
|
|
123
|
+
try {
|
|
124
|
+
while (targets.length > 0 || streams.size > 0) {
|
|
125
|
+
while (targets.length > 0 && streams.size < this.config.maxConcurrency) {
|
|
126
|
+
const node = targets.shift();
|
|
127
|
+
this._checkSteps(state);
|
|
128
|
+
state.steps++;
|
|
129
|
+
streams.set(node.id, this._streamNode(node, input, state, queue));
|
|
130
|
+
}
|
|
131
|
+
await queue.wait();
|
|
132
|
+
while (queue.size > 0) {
|
|
133
|
+
const { data, ack } = queue.shift();
|
|
134
|
+
if (data.type === 'event') {
|
|
135
|
+
yield data.event;
|
|
136
|
+
ack();
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (data.type === 'error') {
|
|
140
|
+
streams.delete(data.node.id);
|
|
141
|
+
ack();
|
|
142
|
+
throw data.error;
|
|
143
|
+
}
|
|
144
|
+
const { node, result } = data;
|
|
145
|
+
streams.delete(node.id);
|
|
146
|
+
ack();
|
|
147
|
+
state.results.push(result);
|
|
148
|
+
const ready = await this._findReady(node, state, streams, targets);
|
|
149
|
+
if (ready.length > 0) {
|
|
150
|
+
yield new MultiAgentHandoffEvent({
|
|
151
|
+
source: node.id,
|
|
152
|
+
targets: ready.map((n) => n.id),
|
|
153
|
+
});
|
|
154
|
+
targets.push(...ready);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
finally {
|
|
160
|
+
queue.dispose();
|
|
161
|
+
await Promise.allSettled(streams.values());
|
|
162
|
+
yield new AfterMultiAgentInvocationEvent({ orchestrator: this, state });
|
|
163
|
+
}
|
|
164
|
+
const result = new MultiAgentResult({
|
|
165
|
+
results: state.results,
|
|
166
|
+
content: this._resolveContent(state),
|
|
167
|
+
duration: Date.now() - state.startTime,
|
|
168
|
+
});
|
|
169
|
+
yield new MultiAgentResultEvent({ result });
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Executes a single node, pushing streaming events to the shared queue in real-time.
|
|
174
|
+
*/
|
|
175
|
+
async _streamNode(node, input, state, queue) {
|
|
176
|
+
const nodeState = state.node(node.id);
|
|
177
|
+
const beforeEvent = new BeforeNodeCallEvent({ orchestrator: this, state, nodeId: node.id });
|
|
178
|
+
await queue.send({ type: 'event', node, event: beforeEvent });
|
|
179
|
+
if (beforeEvent.cancel) {
|
|
180
|
+
const message = typeof beforeEvent.cancel === 'string' ? beforeEvent.cancel : 'node cancelled by hook';
|
|
181
|
+
const result = new NodeResult({ nodeId: node.id, status: Status.CANCELLED, duration: 0 });
|
|
182
|
+
nodeState.status = Status.CANCELLED;
|
|
183
|
+
nodeState.results.push(result);
|
|
184
|
+
await queue.send({
|
|
185
|
+
type: 'event',
|
|
186
|
+
node,
|
|
187
|
+
event: new NodeCancelEvent({ nodeId: node.id, message }),
|
|
188
|
+
});
|
|
189
|
+
await queue.send({
|
|
190
|
+
type: 'event',
|
|
191
|
+
node,
|
|
192
|
+
event: new AfterNodeCallEvent({ orchestrator: this, state, nodeId: node.id }),
|
|
193
|
+
});
|
|
194
|
+
queue.push({ type: 'result', node, result });
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
const nodeInput = this._resolveNodeInput(node, input, state);
|
|
199
|
+
const gen = node.stream(nodeInput, state);
|
|
200
|
+
let next = await gen.next();
|
|
201
|
+
while (!next.done) {
|
|
202
|
+
await queue.send({ type: 'event', node, event: next.value });
|
|
203
|
+
next = await gen.next();
|
|
204
|
+
}
|
|
205
|
+
queue.push({ type: 'result', node, result: next.value });
|
|
206
|
+
await queue.send({
|
|
207
|
+
type: 'event',
|
|
208
|
+
node,
|
|
209
|
+
event: new AfterNodeCallEvent({ orchestrator: this, state, nodeId: node.id }),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
await queue.send({
|
|
214
|
+
type: 'event',
|
|
215
|
+
node,
|
|
216
|
+
event: new AfterNodeCallEvent({
|
|
217
|
+
orchestrator: this,
|
|
218
|
+
state,
|
|
219
|
+
nodeId: node.id,
|
|
220
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
221
|
+
}),
|
|
222
|
+
});
|
|
223
|
+
queue.push({
|
|
224
|
+
type: 'error',
|
|
225
|
+
node,
|
|
226
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
_validateConfig() {
|
|
231
|
+
if (this.config.maxConcurrency < 1) {
|
|
232
|
+
throw new Error(`max_concurrency=<${this.config.maxConcurrency}> | must be at least 1`);
|
|
233
|
+
}
|
|
234
|
+
if (this.config.maxSteps < 1) {
|
|
235
|
+
throw new Error(`max_steps=<${this.config.maxSteps}> | must be at least 1`);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
_validateSources() {
|
|
239
|
+
if (this._sources.length === 0) {
|
|
240
|
+
throw new Error('graph has no source nodes');
|
|
241
|
+
}
|
|
242
|
+
const visited = new Set();
|
|
243
|
+
const adjacency = new Map();
|
|
244
|
+
for (const edge of this.edges) {
|
|
245
|
+
const targets = adjacency.get(edge.source.id) ?? [];
|
|
246
|
+
targets.push(edge.target.id);
|
|
247
|
+
adjacency.set(edge.source.id, targets);
|
|
248
|
+
}
|
|
249
|
+
const queue = this._sources.map((n) => n.id);
|
|
250
|
+
while (queue.length > 0) {
|
|
251
|
+
const id = queue.shift();
|
|
252
|
+
if (visited.has(id))
|
|
253
|
+
continue;
|
|
254
|
+
visited.add(id);
|
|
255
|
+
for (const target of adjacency.get(id) ?? []) {
|
|
256
|
+
queue.push(target);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
for (const id of this.nodes.keys()) {
|
|
260
|
+
if (!visited.has(id)) {
|
|
261
|
+
throw new Error(`node_id=<${id}> | unreachable from any source node`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
_resolveNodes(definitions) {
|
|
266
|
+
const nodes = new Map();
|
|
267
|
+
for (const definition of definitions) {
|
|
268
|
+
let node;
|
|
269
|
+
if (definition instanceof Node) {
|
|
270
|
+
node = definition;
|
|
271
|
+
}
|
|
272
|
+
else if ('type' in definition) {
|
|
273
|
+
switch (definition.type) {
|
|
274
|
+
case 'agent': {
|
|
275
|
+
const { type: _, ...options } = definition;
|
|
276
|
+
node = new AgentNode(options);
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
case 'multiAgent': {
|
|
280
|
+
const { type: _, ...options } = definition;
|
|
281
|
+
node = new MultiAgentNode(options);
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
default:
|
|
285
|
+
throw new Error('unknown node definition type');
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
else if (definition instanceof Agent) {
|
|
289
|
+
node = new AgentNode({ agent: definition });
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
node = new MultiAgentNode({ orchestrator: definition });
|
|
293
|
+
}
|
|
294
|
+
if (nodes.has(node.id)) {
|
|
295
|
+
throw new Error(`node_id=<${node.id}> | duplicate node id`);
|
|
296
|
+
}
|
|
297
|
+
nodes.set(node.id, node);
|
|
298
|
+
}
|
|
299
|
+
return nodes;
|
|
300
|
+
}
|
|
301
|
+
_resolveEdges(definitions) {
|
|
302
|
+
const edges = [];
|
|
303
|
+
for (const definition of definitions) {
|
|
304
|
+
const [sourceId, targetId, handler] = Array.isArray(definition)
|
|
305
|
+
? [definition[0], definition[1], undefined]
|
|
306
|
+
: [definition.source, definition.target, definition.handler];
|
|
307
|
+
const source = this.nodes.get(sourceId);
|
|
308
|
+
const target = this.nodes.get(targetId);
|
|
309
|
+
if (!source) {
|
|
310
|
+
throw new Error(`source=<${sourceId}> | edge references unknown source node`);
|
|
311
|
+
}
|
|
312
|
+
if (!target) {
|
|
313
|
+
throw new Error(`target=<${targetId}> | edge references unknown target node`);
|
|
314
|
+
}
|
|
315
|
+
edges.push(new Edge({ source, target, ...(handler && { handler }) }));
|
|
316
|
+
}
|
|
317
|
+
return edges;
|
|
318
|
+
}
|
|
319
|
+
_resolveSources(sourceIds) {
|
|
320
|
+
if (sourceIds) {
|
|
321
|
+
const sources = [];
|
|
322
|
+
for (const id of sourceIds) {
|
|
323
|
+
const node = this.nodes.get(id);
|
|
324
|
+
if (!node) {
|
|
325
|
+
throw new Error(`source=<${id}> | source references unknown node`);
|
|
326
|
+
}
|
|
327
|
+
sources.push(node);
|
|
328
|
+
}
|
|
329
|
+
return sources;
|
|
330
|
+
}
|
|
331
|
+
const targetIds = new Set(this.edges.map((e) => e.target.id));
|
|
332
|
+
return [...this.nodes.values()].filter((node) => !targetIds.has(node.id));
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Identifies terminus nodes and returns their combined content.
|
|
336
|
+
* A terminus node is where an execution path ended: completed with no
|
|
337
|
+
* downstream progress, or failed/cancelled.
|
|
338
|
+
*/
|
|
339
|
+
_resolveContent(state) {
|
|
340
|
+
for (const [id, ns] of state.nodes.entries()) {
|
|
341
|
+
if (ns.status === Status.FAILED || ns.status === Status.CANCELLED) {
|
|
342
|
+
ns.terminus = true;
|
|
343
|
+
}
|
|
344
|
+
else if (ns.status === Status.COMPLETED) {
|
|
345
|
+
ns.terminus = !this.edges
|
|
346
|
+
.filter((e) => e.source.id === id)
|
|
347
|
+
.some((e) => state.node(e.target.id)?.status !== Status.PENDING);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
return [...state.nodes.values()].filter((ns) => ns.terminus).flatMap((ns) => ns.content);
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Builds the input for a node by combining the original task with dependency outputs.
|
|
354
|
+
*/
|
|
355
|
+
_resolveNodeInput(node, input, state) {
|
|
356
|
+
const deps = [];
|
|
357
|
+
for (const edge of this.edges.filter((e) => e.target.id === node.id)) {
|
|
358
|
+
const ns = state.node(edge.source.id);
|
|
359
|
+
if (ns.content.length > 0) {
|
|
360
|
+
deps.push(new TextBlock(`[node: ${edge.source.id}]`), ...ns.content);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
if (deps.length === 0)
|
|
364
|
+
return input;
|
|
365
|
+
const blocks = typeof input === 'string' ? [new TextBlock(input)] : input;
|
|
366
|
+
return [...blocks, ...deps];
|
|
367
|
+
}
|
|
368
|
+
_checkSteps(state) {
|
|
369
|
+
if (state.steps >= this.config.maxSteps) {
|
|
370
|
+
throw new Error(`steps=<${state.steps}> | max steps reached`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Finds downstream nodes that are ready to execute after a node completes.
|
|
375
|
+
* A target is ready when all its incoming edge sources are COMPLETED.
|
|
376
|
+
*/
|
|
377
|
+
async _findReady(node, state, streams, targets) {
|
|
378
|
+
if (state.node(node.id)?.status !== Status.COMPLETED)
|
|
379
|
+
return [];
|
|
380
|
+
const ready = [];
|
|
381
|
+
for (const edge of this.edges.filter((e) => e.source.id === node.id)) {
|
|
382
|
+
if (!(await edge.handler(state)))
|
|
383
|
+
continue;
|
|
384
|
+
if (streams.has(edge.target.id) || targets.some((n) => n.id === edge.target.id))
|
|
385
|
+
continue;
|
|
386
|
+
const deps = this.edges.filter((e) => e.target.id === edge.target.id);
|
|
387
|
+
if (deps.every((e) => state.node(e.source.id)?.status === Status.COMPLETED)) {
|
|
388
|
+
ready.push(edge.target);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return ready;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/multiagent/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Multi-agent orchestration module.
|
|
3
3
|
*/
|
|
4
|
-
export { MultiAgentState, Status, NodeResult } from './state.js';
|
|
5
|
-
export type { NodeResultUpdate } from './state.js';
|
|
6
|
-
export { Node, AgentNode } from './nodes.js';
|
|
7
|
-
export type { NodeConfig } from './nodes.js';
|
|
8
|
-
export {
|
|
4
|
+
export { MultiAgentState, NodeState, Status, NodeResult, MultiAgentResult } from './state.js';
|
|
5
|
+
export type { NodeResultUpdate, ResultStatus } from './state.js';
|
|
6
|
+
export { Node, AgentNode, MultiAgentNode } from './nodes.js';
|
|
7
|
+
export type { NodeConfig, AgentNodeOptions, MultiAgentNodeOptions, NodeDefinition, NodeType } from './nodes.js';
|
|
8
|
+
export type { MultiAgentBase } from './base.js';
|
|
9
|
+
export { MultiAgentInitializedEvent, BeforeMultiAgentInvocationEvent, AfterMultiAgentInvocationEvent, BeforeNodeCallEvent, AfterNodeCallEvent, NodeStreamUpdateEvent, NodeResultEvent, NodeCancelEvent, MultiAgentHandoffEvent, MultiAgentResultEvent, } from './events.js';
|
|
9
10
|
export type { MultiAgentStreamEvent } from './events.js';
|
|
10
|
-
export
|
|
11
|
+
export { Edge } from './edge.js';
|
|
12
|
+
export type { EdgeHandler, EdgeDefinition } from './edge.js';
|
|
13
|
+
export { Graph } from './graph.js';
|
|
14
|
+
export type { GraphConfig, GraphOptions } from './graph.js';
|
|
15
|
+
export { Swarm } from './swarm.js';
|
|
16
|
+
export type { SwarmConfig, SwarmNodeDefinition, SwarmOptions } from './swarm.js';
|
|
11
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/multiagent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/multiagent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7F,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEhE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC5D,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE/G,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE/C,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,8BAA8B,EAC9B,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE5D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE3D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Multi-agent orchestration module.
|
|
3
3
|
*/
|
|
4
|
-
export { MultiAgentState, Status, NodeResult } from './state.js';
|
|
5
|
-
export { Node, AgentNode } from './nodes.js';
|
|
6
|
-
export { NodeStreamUpdateEvent } from './events.js';
|
|
4
|
+
export { MultiAgentState, NodeState, Status, NodeResult, MultiAgentResult } from './state.js';
|
|
5
|
+
export { Node, AgentNode, MultiAgentNode } from './nodes.js';
|
|
6
|
+
export { MultiAgentInitializedEvent, BeforeMultiAgentInvocationEvent, AfterMultiAgentInvocationEvent, BeforeNodeCallEvent, AfterNodeCallEvent, NodeStreamUpdateEvent, NodeResultEvent, NodeCancelEvent, MultiAgentHandoffEvent, MultiAgentResultEvent, } from './events.js';
|
|
7
|
+
export { Edge } from './edge.js';
|
|
8
|
+
export { Graph } from './graph.js';
|
|
9
|
+
export { Swarm } from './swarm.js';
|
|
7
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/multiagent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/multiagent/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAG7F,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAK5D,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,8BAA8B,EAC9B,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,aAAa,CAAA;AAGpB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAGlC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import type { Agent, InvokeArgs } from '../agent/agent.js';
|
|
2
2
|
import type { MultiAgentStreamEvent } from './events.js';
|
|
3
|
-
import {
|
|
4
|
-
import type { NodeResultUpdate } from './state.js';
|
|
3
|
+
import { NodeResult } from './state.js';
|
|
4
|
+
import type { MultiAgentState, NodeResultUpdate } from './state.js';
|
|
5
|
+
import type { MultiAgentBase } from './base.js';
|
|
6
|
+
/**
|
|
7
|
+
* Known node type identifiers with extensibility for custom nodes.
|
|
8
|
+
*/
|
|
9
|
+
export type NodeType = 'agentNode' | 'multiAgentNode' | (string & {});
|
|
5
10
|
/**
|
|
6
11
|
* Configuration for a node execution.
|
|
7
12
|
*/
|
|
8
13
|
export interface NodeConfig {
|
|
9
14
|
/**
|
|
10
|
-
*
|
|
15
|
+
* Optional description of what this node does.
|
|
11
16
|
*/
|
|
12
|
-
|
|
17
|
+
description?: string;
|
|
13
18
|
}
|
|
14
19
|
/**
|
|
15
20
|
* Abstract base class for all multi-agent orchestration nodes.
|
|
@@ -19,15 +24,16 @@ export interface NodeConfig {
|
|
|
19
24
|
* delegates to {@link handle} for node-specific execution logic.
|
|
20
25
|
*/
|
|
21
26
|
export declare abstract class Node {
|
|
27
|
+
readonly type: string;
|
|
22
28
|
/** Unique identifier for this node within the orchestration. */
|
|
23
29
|
readonly id: string;
|
|
24
|
-
/**
|
|
25
|
-
readonly config
|
|
30
|
+
/** Per-node configuration. */
|
|
31
|
+
readonly config: NodeConfig;
|
|
26
32
|
/**
|
|
27
33
|
* @param id - Unique identifier for this node within the orchestration
|
|
28
|
-
* @param config -
|
|
34
|
+
* @param config - Per-node configuration
|
|
29
35
|
*/
|
|
30
|
-
constructor(id: string, config
|
|
36
|
+
constructor(id: string, config: NodeConfig);
|
|
31
37
|
/**
|
|
32
38
|
* Execute the node. Handles duration measurement, error capture,
|
|
33
39
|
* and delegates to handle() for node-specific logic.
|
|
@@ -46,6 +52,13 @@ export declare abstract class Node {
|
|
|
46
52
|
*/
|
|
47
53
|
abstract handle(args: InvokeArgs, state: MultiAgentState): AsyncGenerator<MultiAgentStreamEvent, NodeResultUpdate, undefined>;
|
|
48
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* Options for creating an {@link AgentNode}.
|
|
57
|
+
*/
|
|
58
|
+
export interface AgentNodeOptions {
|
|
59
|
+
/** The agent to wrap as a node. */
|
|
60
|
+
agent: Agent;
|
|
61
|
+
}
|
|
49
62
|
/**
|
|
50
63
|
* Node that wraps an Agent instance for multi-agent orchestration.
|
|
51
64
|
*
|
|
@@ -55,21 +68,58 @@ export declare abstract class Node {
|
|
|
55
68
|
export declare class AgentNode extends Node {
|
|
56
69
|
readonly type: "agentNode";
|
|
57
70
|
private readonly _agent;
|
|
58
|
-
|
|
59
|
-
* @param id - Unique identifier for this node within the orchestration
|
|
60
|
-
* @param agent - The Agent instance to wrap
|
|
61
|
-
* @param config - Optional per-node configuration
|
|
62
|
-
*/
|
|
63
|
-
constructor(id: string, agent: Agent, config?: NodeConfig);
|
|
71
|
+
constructor(options: AgentNodeOptions);
|
|
64
72
|
get agent(): Agent;
|
|
65
73
|
/**
|
|
66
74
|
* Executes the wrapped agent, yielding each agent streaming event
|
|
67
|
-
* wrapped in a {@link
|
|
75
|
+
* wrapped in a {@link NodeStreamUpdateEvent}.
|
|
68
76
|
*
|
|
69
77
|
* @param args - Input to pass to the agent
|
|
70
|
-
* @param state - The current multi-agent state
|
|
78
|
+
* @param state - The current multi-agent state
|
|
71
79
|
* @returns Async generator yielding streaming events and returning the agent's content blocks
|
|
72
80
|
*/
|
|
81
|
+
handle(args: InvokeArgs, state: MultiAgentState): AsyncGenerator<MultiAgentStreamEvent, NodeResultUpdate, undefined>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Options for creating a {@link MultiAgentNode}.
|
|
85
|
+
*/
|
|
86
|
+
export interface MultiAgentNodeOptions extends NodeConfig {
|
|
87
|
+
/** The orchestrator to wrap as a node. */
|
|
88
|
+
orchestrator: MultiAgentBase;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Node that wraps a multi-agent orchestrator (e.g. Graph) for nested composition.
|
|
92
|
+
*
|
|
93
|
+
* Inner {@link NodeStreamUpdateEvent}s pass through to preserve the original
|
|
94
|
+
* node's identity. All other events are wrapped in a new {@link NodeStreamUpdateEvent}
|
|
95
|
+
* tagged with this node's identity.
|
|
96
|
+
*/
|
|
97
|
+
export declare class MultiAgentNode extends Node {
|
|
98
|
+
readonly type: "multiAgentNode";
|
|
99
|
+
private readonly _orchestrator;
|
|
100
|
+
constructor(options: MultiAgentNodeOptions);
|
|
101
|
+
get orchestrator(): MultiAgentBase;
|
|
102
|
+
/**
|
|
103
|
+
* Executes the wrapped orchestrator. Inner {@link NodeStreamUpdateEvent}s
|
|
104
|
+
* pass through as-is; all other events are wrapped in a new
|
|
105
|
+
* {@link NodeStreamUpdateEvent} tagged with this node's identity.
|
|
106
|
+
*
|
|
107
|
+
* @param args - Input to pass to the orchestrator
|
|
108
|
+
* @param _state - The current multi-agent state (unused)
|
|
109
|
+
* @returns Async generator yielding streaming events and returning the orchestrator's content
|
|
110
|
+
*/
|
|
73
111
|
handle(args: InvokeArgs, _state: MultiAgentState): AsyncGenerator<MultiAgentStreamEvent, NodeResultUpdate, undefined>;
|
|
74
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* A node definition accepted by orchestration constructors.
|
|
115
|
+
*
|
|
116
|
+
* Pass an {@link Agent} or {@link MultiAgentBase} directly for the simple case,
|
|
117
|
+
* use typed options objects for per-node configuration, or provide pre-built
|
|
118
|
+
* {@link Node} instances for full control.
|
|
119
|
+
*/
|
|
120
|
+
export type NodeDefinition = Agent | MultiAgentBase | Node | (AgentNodeOptions & {
|
|
121
|
+
type: 'agent';
|
|
122
|
+
}) | (MultiAgentNodeOptions & {
|
|
123
|
+
type: 'multiAgent';
|
|
124
|
+
});
|
|
75
125
|
//# sourceMappingURL=nodes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../../src/multiagent/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"nodes.d.ts","sourceRoot":"","sources":["../../../src/multiagent/nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAA;AAEzE,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,cAAc,EAAE,MAAM,WAAW,CAAA;AAG/C;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,gBAAgB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;AAErE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;;;;GAMG;AACH,8BAAsB,IAAI;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAS;IAC9B,gEAAgE;IAChE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAE3B;;;OAGG;gBACS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU;IAK1C;;;;;;;OAOG;IACI,MAAM,CACX,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,eAAe,GACrB,cAAc,CAAC,qBAAqB,EAAE,UAAU,EAAE,SAAS,CAAC;IAgC/D;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CACb,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,eAAe,GACrB,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,SAAS,CAAC;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,KAAK,EAAE,KAAK,CAAA;CACb;AAED;;;;;GAKG;AACH,qBAAa,SAAU,SAAQ,IAAI;IACjC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAO;gBAElB,OAAO,EAAE,gBAAgB;IAWrC,IAAI,KAAK,IAAI,KAAK,CAEjB;IAED;;;;;;;OAOG;IACI,MAAM,CACX,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,eAAe,GACrB,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,SAAS,CAAC;CAsBtE;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,UAAU;IACvD,0CAA0C;IAC1C,YAAY,EAAE,cAAc,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,qBAAa,cAAe,SAAQ,IAAI;IACtC,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAElC,OAAO,EAAE,qBAAqB;IAM1C,IAAI,YAAY,IAAI,cAAc,CAEjC;IAED;;;;;;;;OAQG;IACI,MAAM,CACX,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,eAAe,GACtB,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,SAAS,CAAC;CActE;AAED;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,cAAc,GACd,IAAI,GACJ,CAAC,gBAAgB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,GACtC,CAAC,qBAAqB,GAAG;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAAC,CAAA"}
|