@strands-agents/sdk 0.3.0 → 0.5.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 +43 -0
- 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__/mock-hook-provider.d.ts +3 -7
- package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-hook-provider.js +3 -9
- package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.d.ts +8 -2
- package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
- package/dist/src/__fixtures__/mock-message-model.js +1 -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 +37 -0
- package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -0
- package/dist/src/__fixtures__/mock-storage-provider.js +105 -0
- package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -0
- package/dist/src/__fixtures__/slim-types.d.ts +50 -0
- package/dist/src/__fixtures__/slim-types.d.ts.map +1 -0
- package/dist/src/__fixtures__/slim-types.js +6 -0
- package/dist/src/__fixtures__/slim-types.js.map +1 -0
- package/dist/src/__fixtures__/tool-helpers.d.ts +10 -5
- package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
- package/dist/src/__fixtures__/tool-helpers.js +5 -5
- 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} +62 -43
- package/dist/src/__tests__/app-state.test.js.map +1 -0
- package/dist/src/__tests__/mcp.test.js +96 -15
- package/dist/src/__tests__/mcp.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.hook.test.js +18 -18
- package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
- package/dist/src/agent/__tests__/agent.test.js +234 -8
- 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/__tests__/printer.test.js +5 -9
- package/dist/src/agent/__tests__/printer.test.js.map +1 -1
- package/dist/src/agent/__tests__/snapshot.test.d.ts +2 -0
- package/dist/src/agent/__tests__/snapshot.test.d.ts.map +1 -0
- package/dist/src/agent/__tests__/snapshot.test.js +249 -0
- package/dist/src/agent/__tests__/snapshot.test.js.map +1 -0
- package/dist/src/agent/agent.d.ts +78 -10
- package/dist/src/agent/agent.d.ts.map +1 -1
- package/dist/src/agent/agent.js +252 -55
- package/dist/src/agent/agent.js.map +1 -1
- package/dist/src/agent/printer.d.ts +4 -0
- package/dist/src/agent/printer.d.ts.map +1 -1
- package/dist/src/agent/printer.js +18 -6
- package/dist/src/agent/printer.js.map +1 -1
- package/dist/src/agent/snapshot.d.ts +132 -0
- package/dist/src/agent/snapshot.d.ts.map +1 -0
- package/dist/src/agent/snapshot.js +151 -0
- package/dist/src/agent/snapshot.js.map +1 -0
- package/dist/src/{agent/state.d.ts → app-state.d.ts} +19 -6
- package/dist/src/app-state.d.ts.map +1 -0
- package/dist/src/{agent/state.js → app-state.js} +27 -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 +15 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +18 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/hooks/__tests__/events.test.js +102 -21
- package/dist/src/hooks/__tests__/events.test.js.map +1 -1
- package/dist/src/hooks/events.d.ts +156 -22
- package/dist/src/hooks/events.d.ts.map +1 -1
- package/dist/src/hooks/events.js +158 -18
- package/dist/src/hooks/events.js.map +1 -1
- package/dist/src/hooks/index.d.ts +12 -4
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +11 -3
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/registry.d.ts +5 -5
- package/dist/src/hooks/registry.d.ts.map +1 -1
- package/dist/src/hooks/registry.js.map +1 -1
- package/dist/src/hooks/types.d.ts +5 -5
- package/dist/src/hooks/types.d.ts.map +1 -1
- package/dist/src/index.d.ts +6 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp.d.ts +3 -0
- package/dist/src/mcp.d.ts.map +1 -1
- package/dist/src/mcp.js +38 -1
- package/dist/src/mcp.js.map +1 -1
- package/dist/src/models/__tests__/anthropic.test.js +31 -42
- package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
- package/dist/src/models/__tests__/bedrock.test.js +70 -107
- package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
- package/dist/src/models/__tests__/gemini.test.js +18 -18
- package/dist/src/models/__tests__/gemini.test.js.map +1 -1
- package/dist/src/models/__tests__/model.test.js +21 -13
- package/dist/src/models/__tests__/model.test.js.map +1 -1
- package/dist/src/models/__tests__/openai.test.js +73 -83
- package/dist/src/models/__tests__/openai.test.js.map +1 -1
- package/dist/src/models/model.d.ts +4 -0
- package/dist/src/models/model.d.ts.map +1 -1
- package/dist/src/models/model.js +6 -0
- package/dist/src/models/model.js.map +1 -1
- package/dist/src/models/streaming.d.ts +9 -1
- package/dist/src/models/streaming.d.ts.map +1 -1
- package/dist/src/models/streaming.js +17 -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 +189 -0
- package/dist/src/multiagent/__tests__/events.test.js.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.d.ts +2 -0
- package/dist/src/multiagent/__tests__/nodes.test.d.ts.map +1 -0
- package/dist/src/multiagent/__tests__/nodes.test.js +194 -0
- package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -0
- 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 +96 -0
- package/dist/src/multiagent/__tests__/queue.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 +29 -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 +135 -0
- package/dist/src/multiagent/events.d.ts.map +1 -0
- package/dist/src/multiagent/events.js +140 -0
- package/dist/src/multiagent/events.js.map +1 -0
- package/dist/src/multiagent/index.d.ts +13 -0
- package/dist/src/multiagent/index.d.ts.map +1 -0
- package/dist/src/multiagent/index.js +8 -0
- package/dist/src/multiagent/index.js.map +1 -0
- package/dist/src/multiagent/nodes.d.ts +123 -0
- package/dist/src/multiagent/nodes.d.ts.map +1 -0
- package/dist/src/multiagent/nodes.js +148 -0
- package/dist/src/multiagent/nodes.js.map +1 -0
- package/dist/src/multiagent/queue.d.ts +67 -0
- package/dist/src/multiagent/queue.d.ts.map +1 -0
- package/dist/src/multiagent/queue.js +59 -0
- package/dist/src/multiagent/queue.js.map +1 -0
- package/dist/src/multiagent/state.d.ts +122 -0
- package/dist/src/multiagent/state.d.ts.map +1 -0
- package/dist/src/multiagent/state.js +132 -0
- package/dist/src/multiagent/state.js.map +1 -0
- package/dist/src/registry/tool-registry.d.ts +2 -1
- package/dist/src/registry/tool-registry.d.ts.map +1 -1
- package/dist/src/registry/tool-registry.js +4 -2
- package/dist/src/registry/tool-registry.js.map +1 -1
- package/dist/src/session/__tests__/file-storage.test.node.d.ts +2 -0
- package/dist/src/session/__tests__/file-storage.test.node.d.ts.map +1 -0
- package/dist/src/session/__tests__/file-storage.test.node.js +218 -0
- package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -0
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts +2 -0
- package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +1 -0
- package/dist/src/session/__tests__/s3-storage.test.node.js +375 -0
- package/dist/src/session/__tests__/s3-storage.test.node.js.map +1 -0
- package/dist/src/session/__tests__/validation.test.d.ts +2 -0
- package/dist/src/session/__tests__/validation.test.d.ts.map +1 -0
- package/dist/src/session/__tests__/validation.test.js +20 -0
- package/dist/src/session/__tests__/validation.test.js.map +1 -0
- package/dist/src/session/file-storage.d.ts +79 -0
- package/dist/src/session/file-storage.d.ts.map +1 -0
- package/dist/src/session/file-storage.js +144 -0
- package/dist/src/session/file-storage.js.map +1 -0
- package/dist/src/session/index.d.ts +19 -0
- package/dist/src/session/index.d.ts.map +1 -0
- package/dist/src/session/index.js +18 -0
- package/dist/src/session/index.js.map +1 -0
- package/dist/src/session/s3-storage.d.ts +93 -0
- package/dist/src/session/s3-storage.d.ts.map +1 -0
- package/dist/src/session/s3-storage.js +150 -0
- package/dist/src/session/s3-storage.js.map +1 -0
- package/dist/src/session/storage.d.ts +91 -0
- package/dist/src/session/storage.d.ts.map +1 -0
- package/dist/src/session/storage.js +2 -0
- package/dist/src/session/storage.js.map +1 -0
- package/dist/src/session/types.d.ts +49 -0
- package/dist/src/session/types.d.ts.map +1 -0
- package/dist/src/session/types.js +2 -0
- package/dist/src/session/types.js.map +1 -0
- package/dist/src/session/validation.d.ts +10 -0
- package/dist/src/session/validation.d.ts.map +1 -0
- package/dist/src/session/validation.js +16 -0
- package/dist/src/session/validation.js.map +1 -0
- package/dist/src/structured-output/__tests__/context.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/context.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/context.test.js +201 -0
- package/dist/src/structured-output/__tests__/context.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/exceptions.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/exceptions.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/exceptions.test.js +103 -0
- package/dist/src/structured-output/__tests__/exceptions.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/tool.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/tool.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/tool.test.js +256 -0
- package/dist/src/structured-output/__tests__/tool.test.js.map +1 -0
- package/dist/src/structured-output/__tests__/utils.test.d.ts +2 -0
- package/dist/src/structured-output/__tests__/utils.test.d.ts.map +1 -0
- package/dist/src/structured-output/__tests__/utils.test.js +183 -0
- package/dist/src/structured-output/__tests__/utils.test.js.map +1 -0
- package/dist/src/structured-output/context.d.ts +91 -0
- package/dist/src/structured-output/context.d.ts.map +1 -0
- package/dist/src/structured-output/context.js +112 -0
- package/dist/src/structured-output/context.js.map +1 -0
- package/dist/src/structured-output/exceptions.d.ts +18 -0
- package/dist/src/structured-output/exceptions.d.ts.map +1 -0
- package/dist/src/structured-output/exceptions.js +28 -0
- package/dist/src/structured-output/exceptions.js.map +1 -0
- package/dist/src/structured-output/tool.d.ts +33 -0
- package/dist/src/structured-output/tool.d.ts.map +1 -0
- package/dist/src/structured-output/tool.js +73 -0
- package/dist/src/structured-output/tool.js.map +1 -0
- package/dist/src/structured-output/utils.d.ts +23 -0
- package/dist/src/structured-output/utils.d.ts.map +1 -0
- package/dist/src/structured-output/utils.js +104 -0
- package/dist/src/structured-output/utils.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 +129 -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__/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 +61 -0
- package/dist/src/telemetry/config.d.ts.map +1 -0
- package/dist/src/telemetry/config.js +101 -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/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/telemetry/types.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.map +1 -1
- package/dist/src/tools/zod-tool.js +2 -5
- package/dist/src/tools/zod-tool.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types/__tests__/media.test.js +216 -1
- package/dist/src/types/__tests__/media.test.js.map +1 -1
- package/dist/src/types/__tests__/messages.test.js +193 -4
- package/dist/src/types/__tests__/messages.test.js.map +1 -1
- package/dist/src/types/agent.d.ts +16 -10
- package/dist/src/types/agent.d.ts.map +1 -1
- package/dist/src/types/agent.js +8 -1
- package/dist/src/types/agent.js.map +1 -1
- package/dist/src/types/json.d.ts +61 -0
- package/dist/src/types/json.d.ts.map +1 -1
- package/dist/src/types/json.js +24 -0
- package/dist/src/types/json.js.map +1 -1
- package/dist/src/types/media.d.ts +84 -4
- package/dist/src/types/media.d.ts.map +1 -1
- package/dist/src/types/media.js +194 -0
- package/dist/src/types/media.js.map +1 -1
- package/dist/src/types/messages.d.ts +152 -13
- package/dist/src/types/messages.d.ts.map +1 -1
- package/dist/src/types/messages.js +235 -8
- package/dist/src/types/messages.js.map +1 -1
- package/dist/src/types/serializable.d.ts +31 -0
- package/dist/src/types/serializable.d.ts.map +1 -0
- package/dist/src/types/serializable.js +19 -0
- package/dist/src/types/serializable.js.map +1 -0
- package/dist/src/utils/zod.d.ts +11 -0
- package/dist/src/utils/zod.d.ts.map +1 -0
- package/dist/src/utils/zod.js +14 -0
- package/dist/src/utils/zod.js.map +1 -0
- 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/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/notebook/__tests__/notebook.test.js +2 -2
- package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
- package/package.json +17 -3
- 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
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { Agent } from '../../agent/agent.js';
|
|
4
|
+
import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
|
|
5
|
+
import { collectGenerator } from '../../__fixtures__/model-test-helpers.js';
|
|
6
|
+
import { TextBlock } from '../../types/messages.js';
|
|
7
|
+
import { MultiAgentResult, MultiAgentState, NodeResult, Status } from '../state.js';
|
|
8
|
+
import { MultiAgentHandoffEvent, NodeStreamUpdateEvent } from '../events.js';
|
|
9
|
+
import { AgentNode, MultiAgentNode, Node } from '../nodes.js';
|
|
10
|
+
/**
|
|
11
|
+
* Concrete Node subclass for testing the abstract base class.
|
|
12
|
+
*/
|
|
13
|
+
class TestNode extends Node {
|
|
14
|
+
_fn;
|
|
15
|
+
constructor(id, fn) {
|
|
16
|
+
super(id, {});
|
|
17
|
+
this._fn = fn;
|
|
18
|
+
}
|
|
19
|
+
async *handle(args, state) {
|
|
20
|
+
return yield* this._fn(args, state);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
describe('Node', () => {
|
|
24
|
+
let state;
|
|
25
|
+
beforeEach(() => {
|
|
26
|
+
state = new MultiAgentState();
|
|
27
|
+
});
|
|
28
|
+
describe('stream', () => {
|
|
29
|
+
it('returns COMPLETED NodeResult on successful execution', async () => {
|
|
30
|
+
const content = [new TextBlock('result')];
|
|
31
|
+
// eslint-disable-next-line require-yield
|
|
32
|
+
const node = new TestNode('test-node', async function* () {
|
|
33
|
+
return { content };
|
|
34
|
+
});
|
|
35
|
+
const { result } = await collectGenerator(node.stream([], state));
|
|
36
|
+
expect(result).toEqual({
|
|
37
|
+
type: 'nodeResult',
|
|
38
|
+
nodeId: 'test-node',
|
|
39
|
+
status: Status.COMPLETED,
|
|
40
|
+
content,
|
|
41
|
+
duration: expect.any(Number),
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it('catches errors and returns FAILED NodeResult', async () => {
|
|
45
|
+
// eslint-disable-next-line require-yield
|
|
46
|
+
const node = new TestNode('fail-node', async function* () {
|
|
47
|
+
throw new Error('boom');
|
|
48
|
+
});
|
|
49
|
+
const { result } = await collectGenerator(node.stream([], state));
|
|
50
|
+
expect(result).toEqual({
|
|
51
|
+
type: 'nodeResult',
|
|
52
|
+
nodeId: 'fail-node',
|
|
53
|
+
status: Status.FAILED,
|
|
54
|
+
content: [],
|
|
55
|
+
duration: expect.any(Number),
|
|
56
|
+
error: expect.objectContaining({ message: 'boom' }),
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('AgentNode', () => {
|
|
62
|
+
let agent;
|
|
63
|
+
let node;
|
|
64
|
+
let state;
|
|
65
|
+
beforeEach(() => {
|
|
66
|
+
const model = new MockMessageModel().addTurn(new TextBlock('reply'));
|
|
67
|
+
agent = new Agent({ model, printer: false, state: { key1: 'value1' } });
|
|
68
|
+
node = new AgentNode({ id: 'agent-1', agent });
|
|
69
|
+
state = new MultiAgentState();
|
|
70
|
+
});
|
|
71
|
+
describe('handle', () => {
|
|
72
|
+
it('wraps agent events and returns content', async () => {
|
|
73
|
+
const { items, result } = await collectGenerator(node.stream([new TextBlock('prompt')], state));
|
|
74
|
+
const streamEvents = items.filter((e) => e.type === 'nodeStreamUpdateEvent');
|
|
75
|
+
expect(streamEvents.length).toBeGreaterThan(0);
|
|
76
|
+
for (const event of streamEvents) {
|
|
77
|
+
expect(event).toEqual(expect.objectContaining({ type: 'nodeStreamUpdateEvent', nodeId: 'agent-1', nodeType: 'agentNode' }));
|
|
78
|
+
}
|
|
79
|
+
const resultEvent = items.find((e) => e.type === 'nodeResultEvent');
|
|
80
|
+
expect(resultEvent).toEqual(expect.objectContaining({ type: 'nodeResultEvent', nodeId: 'agent-1', nodeType: 'agentNode', result }));
|
|
81
|
+
expect(result).toEqual({
|
|
82
|
+
type: 'nodeResult',
|
|
83
|
+
nodeId: 'agent-1',
|
|
84
|
+
status: Status.COMPLETED,
|
|
85
|
+
content: expect.arrayContaining([expect.objectContaining({ type: 'textBlock', text: 'reply' })]),
|
|
86
|
+
duration: expect.any(Number),
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
it('restores agent messages and state after execution', async () => {
|
|
90
|
+
const messagesBefore = [...agent.messages];
|
|
91
|
+
const stateBefore = agent.state.getAll();
|
|
92
|
+
await collectGenerator(node.stream([new TextBlock('prompt')], state));
|
|
93
|
+
expect(agent.messages).toStrictEqual(messagesBefore);
|
|
94
|
+
expect(agent.state.getAll()).toStrictEqual(stateBefore);
|
|
95
|
+
});
|
|
96
|
+
it('passes structuredOutputSchema from state to the agent', async () => {
|
|
97
|
+
const schema = z.object({ agentName: z.string().optional(), message: z.string() });
|
|
98
|
+
const model = new MockMessageModel()
|
|
99
|
+
.addTurn({
|
|
100
|
+
type: 'toolUseBlock',
|
|
101
|
+
name: 'strands_structured_output',
|
|
102
|
+
toolUseId: 'tool-1',
|
|
103
|
+
input: { message: 'hello' },
|
|
104
|
+
})
|
|
105
|
+
.addTurn({ type: 'textBlock', text: 'Done' });
|
|
106
|
+
agent = new Agent({ model, printer: false });
|
|
107
|
+
node = new AgentNode({ id: 'schema-agent', agent });
|
|
108
|
+
state = new MultiAgentState({ structuredOutputSchema: schema });
|
|
109
|
+
const { result } = await collectGenerator(node.stream('test', state));
|
|
110
|
+
expect(result.structuredOutput).toStrictEqual({ message: 'hello' });
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('agent', () => {
|
|
114
|
+
it('exposes the wrapped agent instance', () => {
|
|
115
|
+
expect(node.agent).toBe(agent);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe('MultiAgentNode', () => {
|
|
120
|
+
const content = [new TextBlock('inner-result')];
|
|
121
|
+
/**
|
|
122
|
+
* Creates a mock orchestrator that yields the given events and returns a result with the given content.
|
|
123
|
+
*/
|
|
124
|
+
function mockOrchestrator(id, events) {
|
|
125
|
+
return {
|
|
126
|
+
id,
|
|
127
|
+
invoke: async () => new MultiAgentResult({ results: [], duration: 0 }),
|
|
128
|
+
async *stream() {
|
|
129
|
+
for (const event of events) {
|
|
130
|
+
yield event;
|
|
131
|
+
}
|
|
132
|
+
return new MultiAgentResult({
|
|
133
|
+
results: [new NodeResult({ nodeId: id, status: Status.COMPLETED, duration: 0, content })],
|
|
134
|
+
content,
|
|
135
|
+
duration: 0,
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
let node;
|
|
141
|
+
let state;
|
|
142
|
+
beforeEach(() => {
|
|
143
|
+
const orchestrator = mockOrchestrator('inner', []);
|
|
144
|
+
node = new MultiAgentNode({ orchestrator });
|
|
145
|
+
state = new MultiAgentState();
|
|
146
|
+
});
|
|
147
|
+
describe('constructor', () => {
|
|
148
|
+
it('derives id from orchestrator', () => {
|
|
149
|
+
expect(node.id).toBe('inner');
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
describe('handle', () => {
|
|
153
|
+
it('passes through inner NodeStreamUpdateEvents', async () => {
|
|
154
|
+
const innerUpdate = new MultiAgentHandoffEvent({ source: 'x', targets: ['y'] });
|
|
155
|
+
const innerEvent = new NodeStreamUpdateEvent({
|
|
156
|
+
nodeId: 'deep-node',
|
|
157
|
+
nodeType: 'agentNode',
|
|
158
|
+
event: innerUpdate,
|
|
159
|
+
});
|
|
160
|
+
const orchestrator = mockOrchestrator('inner', [innerEvent]);
|
|
161
|
+
node = new MultiAgentNode({ orchestrator });
|
|
162
|
+
const { items } = await collectGenerator(node.stream([], state));
|
|
163
|
+
const streamEvents = items.filter((e) => e.type === 'nodeStreamUpdateEvent');
|
|
164
|
+
const passthrough = streamEvents.find((e) => e.nodeId === 'deep-node');
|
|
165
|
+
expect(passthrough).toBe(innerEvent);
|
|
166
|
+
});
|
|
167
|
+
it('wraps non-NodeStreamUpdateEvents with this node identity', async () => {
|
|
168
|
+
const handoff = new MultiAgentHandoffEvent({ source: 'a', targets: ['b'] });
|
|
169
|
+
const orchestrator = mockOrchestrator('inner', [handoff]);
|
|
170
|
+
node = new MultiAgentNode({ orchestrator });
|
|
171
|
+
const { items } = await collectGenerator(node.stream([], state));
|
|
172
|
+
const streamEvents = items.filter((e) => e.type === 'nodeStreamUpdateEvent');
|
|
173
|
+
const wrapped = streamEvents.find((e) => e.nodeId === 'inner' && e.event === handoff);
|
|
174
|
+
expect(wrapped).toBeDefined();
|
|
175
|
+
expect(wrapped.nodeType).toBe('multiAgentNode');
|
|
176
|
+
});
|
|
177
|
+
it('returns orchestrator content', async () => {
|
|
178
|
+
const { result } = await collectGenerator(node.stream([], state));
|
|
179
|
+
expect(result).toEqual(expect.objectContaining({
|
|
180
|
+
nodeId: 'inner',
|
|
181
|
+
status: Status.COMPLETED,
|
|
182
|
+
content,
|
|
183
|
+
}));
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
describe('orchestrator', () => {
|
|
187
|
+
it('exposes the wrapped orchestrator instance', () => {
|
|
188
|
+
const orchestrator = mockOrchestrator('test', []);
|
|
189
|
+
node = new MultiAgentNode({ orchestrator });
|
|
190
|
+
expect(node.orchestrator).toBe(orchestrator);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
//# sourceMappingURL=nodes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodes.test.js","sourceRoot":"","sources":["../../../../src/multiagent/__tests__/nodes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.test.d.ts","sourceRoot":"","sources":["../../../../src/multiagent/__tests__/queue.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it } from 'vitest';
|
|
2
|
+
import { Queue } from '../queue.js';
|
|
3
|
+
import { NodeResult, Status } from '../state.js';
|
|
4
|
+
describe('Queue', () => {
|
|
5
|
+
let queue;
|
|
6
|
+
let mockNode;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
mockNode = { id: 'node-1' };
|
|
9
|
+
queue = new Queue();
|
|
10
|
+
});
|
|
11
|
+
describe('push and shift', () => {
|
|
12
|
+
it('dequeues in FIFO order', () => {
|
|
13
|
+
const data1 = {
|
|
14
|
+
type: 'result',
|
|
15
|
+
node: mockNode,
|
|
16
|
+
result: new NodeResult({ nodeId: 'node-1', status: Status.COMPLETED, duration: 10 }),
|
|
17
|
+
};
|
|
18
|
+
const data2 = { type: 'error', node: mockNode, error: new Error('fail') };
|
|
19
|
+
queue.push(data1);
|
|
20
|
+
queue.push(data2);
|
|
21
|
+
expect(queue.shift()?.data).toBe(data1);
|
|
22
|
+
expect(queue.shift()?.data).toBe(data2);
|
|
23
|
+
});
|
|
24
|
+
it('returns undefined when empty', () => {
|
|
25
|
+
expect(queue.shift()).toBeUndefined();
|
|
26
|
+
});
|
|
27
|
+
it('provides a no-op ack for fire-and-forget pushes', () => {
|
|
28
|
+
queue.push({ type: 'error', node: mockNode, error: new Error('a') });
|
|
29
|
+
const entry = queue.shift();
|
|
30
|
+
expect(() => entry.ack()).not.toThrow();
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe('send', () => {
|
|
34
|
+
it('resolves when consumer calls ack', async () => {
|
|
35
|
+
const data = { type: 'error', node: mockNode, error: new Error('a') };
|
|
36
|
+
let resolved = false;
|
|
37
|
+
const waiting = queue.send(data).then(() => {
|
|
38
|
+
resolved = true;
|
|
39
|
+
});
|
|
40
|
+
await Promise.resolve();
|
|
41
|
+
expect(resolved).toBe(false);
|
|
42
|
+
const entry = queue.shift();
|
|
43
|
+
expect(entry.data).toBe(data);
|
|
44
|
+
await Promise.resolve();
|
|
45
|
+
expect(resolved).toBe(false);
|
|
46
|
+
entry.ack();
|
|
47
|
+
await waiting;
|
|
48
|
+
expect(resolved).toBe(true);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
describe('size', () => {
|
|
52
|
+
it('reflects the current number of entries', () => {
|
|
53
|
+
expect(queue.size).toBe(0);
|
|
54
|
+
queue.push({ type: 'error', node: mockNode, error: new Error('a') });
|
|
55
|
+
queue.push({ type: 'error', node: mockNode, error: new Error('b') });
|
|
56
|
+
expect(queue.size).toBe(2);
|
|
57
|
+
queue.shift();
|
|
58
|
+
expect(queue.size).toBe(1);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe('wait', () => {
|
|
62
|
+
it('resolves immediately when entries are available', async () => {
|
|
63
|
+
queue.push({ type: 'error', node: mockNode, error: new Error('a') });
|
|
64
|
+
await queue.wait();
|
|
65
|
+
expect(queue.size).toBe(1);
|
|
66
|
+
});
|
|
67
|
+
it('blocks until data is pushed', async () => {
|
|
68
|
+
let resolved = false;
|
|
69
|
+
const waiting = queue.wait().then(() => {
|
|
70
|
+
resolved = true;
|
|
71
|
+
});
|
|
72
|
+
await Promise.resolve();
|
|
73
|
+
expect(resolved).toBe(false);
|
|
74
|
+
queue.push({ type: 'error', node: mockNode, error: new Error('a') });
|
|
75
|
+
await waiting;
|
|
76
|
+
expect(resolved).toBe(true);
|
|
77
|
+
});
|
|
78
|
+
it('blocks until data is sent', async () => {
|
|
79
|
+
let resolved = false;
|
|
80
|
+
const waiting = queue.wait().then(() => {
|
|
81
|
+
resolved = true;
|
|
82
|
+
});
|
|
83
|
+
await Promise.resolve();
|
|
84
|
+
expect(resolved).toBe(false);
|
|
85
|
+
const data = { type: 'error', node: mockNode, error: new Error('a') };
|
|
86
|
+
// Don't await send — it won't resolve until ack
|
|
87
|
+
const sending = queue.send(data);
|
|
88
|
+
await waiting;
|
|
89
|
+
expect(resolved).toBe(true);
|
|
90
|
+
// Clean up: ack so send resolves
|
|
91
|
+
queue.shift().ack();
|
|
92
|
+
await sending;
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
//# sourceMappingURL=queue.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.test.js","sourceRoot":"","sources":["../../../../src/multiagent/__tests__/queue.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAGnC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEhD,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,IAAI,KAAY,CAAA;IAChB,IAAI,QAAc,CAAA;IAElB,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAU,CAAA;QACnC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACrB,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,KAAK,GAAc;gBACvB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,IAAI,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;aACrF,CAAA;YACD,MAAM,KAAK,GAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAA;YAEpF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACjB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAEjB,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACvC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,aAAa,EAAE,CAAA;QACvC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACpE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;YAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;YAChF,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;gBACzC,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC,CAAC,CAAA;YAEF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAE5B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;YAC5B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAE7B,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAE5B,KAAK,CAAC,GAAG,EAAE,CAAA;YACX,MAAM,OAAO,CAAA;YACb,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAE1B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACpE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACpE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAE1B,KAAK,CAAC,KAAK,EAAE,CAAA;YACb,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;QACpB,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEpE,MAAM,KAAK,CAAC,IAAI,EAAE,CAAA;YAElB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBACrC,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC,CAAC,CAAA;YAEF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAE5B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YAEpE,MAAM,OAAO,CAAA;YACb,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,IAAI,QAAQ,GAAG,KAAK,CAAA;YAEpB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBACrC,QAAQ,GAAG,IAAI,CAAA;YACjB,CAAC,CAAC,CAAA;YAEF,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAE5B,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;YAChF,gDAAgD;YAChD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEhC,MAAM,OAAO,CAAA;YACb,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAE3B,iCAAiC;YACjC,KAAK,CAAC,KAAK,EAAG,CAAC,GAAG,EAAE,CAAA;YACpB,MAAM,OAAO,CAAA;QACf,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { InvokeArgs } from '../agent/agent.js';
|
|
2
|
+
import type { MultiAgentStreamEvent } from './events.js';
|
|
3
|
+
import type { MultiAgentResult } from './state.js';
|
|
4
|
+
/**
|
|
5
|
+
* Interface for any multi-agent orchestrator that can stream execution.
|
|
6
|
+
* Implement this interface to create custom orchestration patterns that can be
|
|
7
|
+
* composed as nodes within other orchestrators via {@link MultiAgentNode}.
|
|
8
|
+
*/
|
|
9
|
+
export interface MultiAgentBase {
|
|
10
|
+
/** Unique identifier for this orchestrator. */
|
|
11
|
+
readonly id: string;
|
|
12
|
+
/**
|
|
13
|
+
* Execute the orchestrator and return the final result.
|
|
14
|
+
* @param input - Input to pass to the orchestrator
|
|
15
|
+
* @returns The aggregate result from all executed nodes
|
|
16
|
+
*/
|
|
17
|
+
invoke(input: InvokeArgs): Promise<MultiAgentResult>;
|
|
18
|
+
/**
|
|
19
|
+
* Execute the orchestrator and stream events as they occur.
|
|
20
|
+
* @param input - Input to pass to the orchestrator
|
|
21
|
+
* @returns Async generator yielding events and returning the final result
|
|
22
|
+
*/
|
|
23
|
+
stream(input: InvokeArgs): AsyncGenerator<MultiAgentStreamEvent, MultiAgentResult, undefined>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/multiagent/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAEpD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAA;CAC9F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/multiagent/base.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Node } from './nodes.js';
|
|
2
|
+
import type { MultiAgentState } from './state.js';
|
|
3
|
+
/**
|
|
4
|
+
* Evaluates whether an edge should be traversed based on the current execution state.
|
|
5
|
+
*/
|
|
6
|
+
export type EdgeHandler = (state: MultiAgentState) => boolean | Promise<boolean>;
|
|
7
|
+
/**
|
|
8
|
+
* Directed edge between two nodes.
|
|
9
|
+
*/
|
|
10
|
+
export declare class Edge {
|
|
11
|
+
readonly source: Node;
|
|
12
|
+
readonly target: Node;
|
|
13
|
+
/** Edge condition. The edge is always traversed when no handler is provided. */
|
|
14
|
+
readonly handler: EdgeHandler;
|
|
15
|
+
constructor(data: {
|
|
16
|
+
source: Node;
|
|
17
|
+
target: Node;
|
|
18
|
+
handler?: EdgeHandler;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* An edge definition accepted by orchestration constructors.
|
|
23
|
+
*/
|
|
24
|
+
export interface EdgeDefinition {
|
|
25
|
+
source: string;
|
|
26
|
+
target: string;
|
|
27
|
+
handler?: EdgeHandler;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=edge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../../src/multiagent/edge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAEhF;;GAEG;AACH,qBAAa,IAAI;IACf,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAA;IACrB,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;gBAEjB,IAAI,EAAE;QAAE,MAAM,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,WAAW,CAAA;KAAE;CAKxE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directed edge between two nodes.
|
|
3
|
+
*/
|
|
4
|
+
export class Edge {
|
|
5
|
+
source;
|
|
6
|
+
target;
|
|
7
|
+
/** Edge condition. The edge is always traversed when no handler is provided. */
|
|
8
|
+
handler;
|
|
9
|
+
constructor(data) {
|
|
10
|
+
this.source = data.source;
|
|
11
|
+
this.target = data.target;
|
|
12
|
+
this.handler = data.handler ?? (() => true);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=edge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge.js","sourceRoot":"","sources":["../../../src/multiagent/edge.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,OAAO,IAAI;IACN,MAAM,CAAM;IACZ,MAAM,CAAM;IACrB,gFAAgF;IACvE,OAAO,CAAa;IAE7B,YAAY,IAA2D;QACrE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,GAAY,EAAE,CAAC,IAAI,CAAC,CAAA;IACtD,CAAC;CACF"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { HookableEvent } from '../hooks/events.js';
|
|
2
|
+
import type { AgentStreamEvent } from '../types/agent.js';
|
|
3
|
+
import type { MultiAgentResult, MultiAgentState, NodeResult } from './state.js';
|
|
4
|
+
import type { MultiAgentBase } from './base.js';
|
|
5
|
+
import type { NodeType } from './nodes.js';
|
|
6
|
+
/**
|
|
7
|
+
* Event triggered when a multi-agent orchestrator has finished initialization.
|
|
8
|
+
*/
|
|
9
|
+
export declare class MultiAgentInitializedEvent extends HookableEvent {
|
|
10
|
+
readonly type: "multiAgentInitializedEvent";
|
|
11
|
+
readonly orchestrator: MultiAgentBase;
|
|
12
|
+
constructor(data: {
|
|
13
|
+
orchestrator: MultiAgentBase;
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Event triggered before orchestrator execution starts.
|
|
18
|
+
*/
|
|
19
|
+
export declare class BeforeMultiAgentInvocationEvent extends HookableEvent {
|
|
20
|
+
readonly type: "beforeMultiAgentInvocationEvent";
|
|
21
|
+
readonly orchestrator: MultiAgentBase;
|
|
22
|
+
readonly state: MultiAgentState;
|
|
23
|
+
constructor(data: {
|
|
24
|
+
orchestrator: MultiAgentBase;
|
|
25
|
+
state: MultiAgentState;
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Event triggered after orchestrator execution completes.
|
|
30
|
+
*/
|
|
31
|
+
export declare class AfterMultiAgentInvocationEvent extends HookableEvent {
|
|
32
|
+
readonly type: "afterMultiAgentInvocationEvent";
|
|
33
|
+
readonly orchestrator: MultiAgentBase;
|
|
34
|
+
readonly state: MultiAgentState;
|
|
35
|
+
constructor(data: {
|
|
36
|
+
orchestrator: MultiAgentBase;
|
|
37
|
+
state: MultiAgentState;
|
|
38
|
+
});
|
|
39
|
+
_shouldReverseCallbacks(): boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Event triggered before a node begins execution.
|
|
43
|
+
* Hook callbacks can set {@link cancel} to prevent the node from executing.
|
|
44
|
+
*/
|
|
45
|
+
export declare class BeforeNodeCallEvent extends HookableEvent {
|
|
46
|
+
readonly type: "beforeNodeCallEvent";
|
|
47
|
+
readonly orchestrator: MultiAgentBase;
|
|
48
|
+
readonly state: MultiAgentState;
|
|
49
|
+
readonly nodeId: string;
|
|
50
|
+
/**
|
|
51
|
+
* Set by hook callbacks to cancel node execution.
|
|
52
|
+
* When set to `true`, a default cancel message is used.
|
|
53
|
+
* When set to a string, that string is used as the cancel message.
|
|
54
|
+
*/
|
|
55
|
+
cancel: boolean | string;
|
|
56
|
+
constructor(data: {
|
|
57
|
+
orchestrator: MultiAgentBase;
|
|
58
|
+
state: MultiAgentState;
|
|
59
|
+
nodeId: string;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Event triggered after a node completes execution.
|
|
64
|
+
*/
|
|
65
|
+
export declare class AfterNodeCallEvent extends HookableEvent {
|
|
66
|
+
readonly type: "afterNodeCallEvent";
|
|
67
|
+
readonly orchestrator: MultiAgentBase;
|
|
68
|
+
readonly state: MultiAgentState;
|
|
69
|
+
readonly nodeId: string;
|
|
70
|
+
constructor(data: {
|
|
71
|
+
orchestrator: MultiAgentBase;
|
|
72
|
+
state: MultiAgentState;
|
|
73
|
+
nodeId: string;
|
|
74
|
+
});
|
|
75
|
+
_shouldReverseCallbacks(): boolean;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Wraps an inner streaming event from a node with the node's identity.
|
|
79
|
+
* Emitted during node execution to propagate agent-level or nested
|
|
80
|
+
* multi-agent events up to the orchestration layer.
|
|
81
|
+
*/
|
|
82
|
+
export declare class NodeStreamUpdateEvent extends HookableEvent {
|
|
83
|
+
readonly type: "nodeStreamUpdateEvent";
|
|
84
|
+
readonly nodeId: string;
|
|
85
|
+
readonly nodeType: NodeType;
|
|
86
|
+
readonly event: AgentStreamEvent | Exclude<MultiAgentStreamEvent, NodeStreamUpdateEvent>;
|
|
87
|
+
constructor(data: {
|
|
88
|
+
nodeId: string;
|
|
89
|
+
nodeType: NodeType;
|
|
90
|
+
event: AgentStreamEvent | Exclude<MultiAgentStreamEvent, NodeStreamUpdateEvent>;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Event triggered when a node finishes execution.
|
|
95
|
+
* Wraps the {@link NodeResult} for the completed node.
|
|
96
|
+
*/
|
|
97
|
+
export declare class NodeResultEvent extends HookableEvent {
|
|
98
|
+
readonly type: "nodeResultEvent";
|
|
99
|
+
readonly nodeId: string;
|
|
100
|
+
readonly nodeType: NodeType;
|
|
101
|
+
readonly result: NodeResult;
|
|
102
|
+
constructor(data: {
|
|
103
|
+
nodeId: string;
|
|
104
|
+
nodeType: NodeType;
|
|
105
|
+
result: NodeResult;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Event triggered when execution transitions between nodes.
|
|
110
|
+
*/
|
|
111
|
+
export declare class MultiAgentHandoffEvent extends HookableEvent {
|
|
112
|
+
readonly type: "multiAgentHandoffEvent";
|
|
113
|
+
readonly source: string;
|
|
114
|
+
readonly targets: string[];
|
|
115
|
+
constructor(data: {
|
|
116
|
+
source: string;
|
|
117
|
+
targets: string[];
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Event triggered as the final event in the multi-agent stream.
|
|
122
|
+
* Wraps the {@link MultiAgentResult} containing the aggregate outcome.
|
|
123
|
+
*/
|
|
124
|
+
export declare class MultiAgentResultEvent extends HookableEvent {
|
|
125
|
+
readonly type: "multiAgentResultEvent";
|
|
126
|
+
readonly result: MultiAgentResult;
|
|
127
|
+
constructor(data: {
|
|
128
|
+
result: MultiAgentResult;
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Union of all multi-agent streaming events.
|
|
133
|
+
*/
|
|
134
|
+
export type MultiAgentStreamEvent = BeforeMultiAgentInvocationEvent | AfterMultiAgentInvocationEvent | BeforeNodeCallEvent | AfterNodeCallEvent | NodeStreamUpdateEvent | NodeResultEvent | MultiAgentHandoffEvent | MultiAgentResultEvent;
|
|
135
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/multiagent/events.ts"],"names":[],"mappings":"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"}
|