@strands-agents/sdk 0.4.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.
Files changed (141) hide show
  1. package/dist/src/__fixtures__/agent-helpers.d.ts +10 -1
  2. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  3. package/dist/src/__fixtures__/agent-helpers.js +13 -2
  4. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  5. package/dist/src/__fixtures__/mock-span.d.ts +78 -0
  6. package/dist/src/__fixtures__/mock-span.d.ts.map +1 -0
  7. package/dist/src/__fixtures__/mock-span.js +93 -0
  8. package/dist/src/__fixtures__/mock-span.js.map +1 -0
  9. package/dist/src/__fixtures__/tool-helpers.d.ts +2 -2
  10. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
  11. package/dist/src/__fixtures__/tool-helpers.js +4 -4
  12. package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
  13. package/dist/src/__tests__/app-state.test.d.ts +2 -0
  14. package/dist/src/__tests__/app-state.test.d.ts.map +1 -0
  15. package/dist/src/{agent/__tests__/state.test.js → __tests__/app-state.test.js} +46 -46
  16. package/dist/src/__tests__/app-state.test.js.map +1 -0
  17. package/dist/src/__tests__/mcp.test.js +96 -15
  18. package/dist/src/__tests__/mcp.test.js.map +1 -1
  19. package/dist/src/agent/__tests__/agent.test.js +110 -0
  20. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  21. package/dist/src/agent/__tests__/agent.tracer.test.d.ts +2 -0
  22. package/dist/src/agent/__tests__/agent.tracer.test.d.ts.map +1 -0
  23. package/dist/src/agent/__tests__/agent.tracer.test.js +470 -0
  24. package/dist/src/agent/__tests__/agent.tracer.test.js.map +1 -0
  25. package/dist/src/agent/agent.d.ts +59 -6
  26. package/dist/src/agent/agent.d.ts.map +1 -1
  27. package/dist/src/agent/agent.js +187 -60
  28. package/dist/src/agent/agent.js.map +1 -1
  29. package/dist/src/{agent/state.d.ts → app-state.d.ts} +7 -7
  30. package/dist/src/app-state.d.ts.map +1 -0
  31. package/dist/src/{agent/state.js → app-state.js} +6 -6
  32. package/dist/src/app-state.js.map +1 -0
  33. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +1 -1
  34. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +1 -1
  35. package/dist/src/index.d.ts +2 -1
  36. package/dist/src/index.d.ts.map +1 -1
  37. package/dist/src/index.js +4 -0
  38. package/dist/src/index.js.map +1 -1
  39. package/dist/src/mcp.d.ts +3 -0
  40. package/dist/src/mcp.d.ts.map +1 -1
  41. package/dist/src/mcp.js +38 -1
  42. package/dist/src/mcp.js.map +1 -1
  43. package/dist/src/models/__tests__/model.test.js +7 -0
  44. package/dist/src/models/__tests__/model.test.js.map +1 -1
  45. package/dist/src/models/model.d.ts +4 -0
  46. package/dist/src/models/model.d.ts.map +1 -1
  47. package/dist/src/models/model.js +6 -0
  48. package/dist/src/models/model.js.map +1 -1
  49. package/dist/src/models/streaming.d.ts +1 -1
  50. package/dist/src/multiagent/__tests__/events.test.d.ts +2 -0
  51. package/dist/src/multiagent/__tests__/events.test.d.ts.map +1 -0
  52. package/dist/src/multiagent/__tests__/events.test.js +189 -0
  53. package/dist/src/multiagent/__tests__/events.test.js.map +1 -0
  54. package/dist/src/multiagent/__tests__/nodes.test.js +102 -6
  55. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
  56. package/dist/src/multiagent/__tests__/queue.test.d.ts +2 -0
  57. package/dist/src/multiagent/__tests__/queue.test.d.ts.map +1 -0
  58. package/dist/src/multiagent/__tests__/queue.test.js +96 -0
  59. package/dist/src/multiagent/__tests__/queue.test.js.map +1 -0
  60. package/dist/src/multiagent/base.d.ts +25 -0
  61. package/dist/src/multiagent/base.d.ts.map +1 -0
  62. package/dist/src/multiagent/base.js +2 -0
  63. package/dist/src/multiagent/base.js.map +1 -0
  64. package/dist/src/multiagent/edge.d.ts +29 -0
  65. package/dist/src/multiagent/edge.d.ts.map +1 -0
  66. package/dist/src/multiagent/edge.js +15 -0
  67. package/dist/src/multiagent/edge.js.map +1 -0
  68. package/dist/src/multiagent/events.d.ts +115 -4
  69. package/dist/src/multiagent/events.d.ts.map +1 -1
  70. package/dist/src/multiagent/events.js +123 -2
  71. package/dist/src/multiagent/events.js.map +1 -1
  72. package/dist/src/multiagent/index.d.ts +8 -6
  73. package/dist/src/multiagent/index.d.ts.map +1 -1
  74. package/dist/src/multiagent/index.js +4 -3
  75. package/dist/src/multiagent/index.js.map +1 -1
  76. package/dist/src/multiagent/nodes.d.ts +62 -14
  77. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  78. package/dist/src/multiagent/nodes.js +67 -20
  79. package/dist/src/multiagent/nodes.js.map +1 -1
  80. package/dist/src/multiagent/queue.d.ts +67 -0
  81. package/dist/src/multiagent/queue.d.ts.map +1 -0
  82. package/dist/src/multiagent/queue.js +59 -0
  83. package/dist/src/multiagent/queue.js.map +1 -0
  84. package/dist/src/multiagent/state.d.ts +77 -10
  85. package/dist/src/multiagent/state.d.ts.map +1 -1
  86. package/dist/src/multiagent/state.js +98 -9
  87. package/dist/src/multiagent/state.js.map +1 -1
  88. package/dist/src/telemetry/__tests__/config.test.node.d.ts +2 -0
  89. package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +1 -0
  90. package/dist/src/telemetry/__tests__/config.test.node.js +129 -0
  91. package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -0
  92. package/dist/src/telemetry/__tests__/json.test.d.ts +2 -0
  93. package/dist/src/telemetry/__tests__/json.test.d.ts.map +1 -0
  94. package/dist/src/telemetry/__tests__/json.test.js +89 -0
  95. package/dist/src/telemetry/__tests__/json.test.js.map +1 -0
  96. package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +2 -0
  97. package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +1 -0
  98. package/dist/src/telemetry/__tests__/tracer.test.node.js +611 -0
  99. package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -0
  100. package/dist/src/telemetry/config.d.ts +61 -0
  101. package/dist/src/telemetry/config.d.ts.map +1 -0
  102. package/dist/src/telemetry/config.js +101 -0
  103. package/dist/src/telemetry/config.js.map +1 -0
  104. package/dist/src/telemetry/index.d.ts +34 -0
  105. package/dist/src/telemetry/index.d.ts.map +1 -0
  106. package/dist/src/telemetry/index.js +33 -0
  107. package/dist/src/telemetry/index.js.map +1 -0
  108. package/dist/src/telemetry/json.d.ts +11 -0
  109. package/dist/src/telemetry/json.d.ts.map +1 -0
  110. package/dist/src/telemetry/json.js +25 -0
  111. package/dist/src/telemetry/json.js.map +1 -0
  112. package/dist/src/telemetry/tracer.d.ts +219 -0
  113. package/dist/src/telemetry/tracer.d.ts.map +1 -0
  114. package/dist/src/telemetry/tracer.js +610 -0
  115. package/dist/src/telemetry/tracer.js.map +1 -0
  116. package/dist/src/telemetry/types.d.ts +101 -0
  117. package/dist/src/telemetry/types.d.ts.map +1 -0
  118. package/dist/src/telemetry/types.js +5 -0
  119. package/dist/src/{multiagent → telemetry}/types.js.map +1 -1
  120. package/dist/src/tools/tool.d.ts +1 -1
  121. package/dist/src/tools/tool.js +1 -1
  122. package/dist/src/tsconfig.tsbuildinfo +1 -1
  123. package/dist/src/types/agent.d.ts +3 -3
  124. package/dist/src/types/agent.d.ts.map +1 -1
  125. package/dist/src/types/messages.d.ts +4 -4
  126. package/dist/src/types/messages.js +1 -1
  127. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +2 -2
  128. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  129. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js +4 -4
  130. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +1 -1
  131. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +2 -2
  132. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
  133. package/package.json +11 -2
  134. package/dist/src/agent/__tests__/state.test.d.ts +0 -2
  135. package/dist/src/agent/__tests__/state.test.d.ts.map +0 -1
  136. package/dist/src/agent/__tests__/state.test.js.map +0 -1
  137. package/dist/src/agent/state.d.ts.map +0 -1
  138. package/dist/src/agent/state.js.map +0 -1
  139. package/dist/src/multiagent/types.d.ts +0 -5
  140. package/dist/src/multiagent/types.d.ts.map +0 -1
  141. package/dist/src/multiagent/types.js +0 -2
@@ -0,0 +1,189 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { MultiAgentInitializedEvent, BeforeMultiAgentInvocationEvent, AfterMultiAgentInvocationEvent, BeforeNodeCallEvent, AfterNodeCallEvent, NodeStreamUpdateEvent, NodeResultEvent, MultiAgentHandoffEvent, MultiAgentResultEvent, } from '../events.js';
3
+ import { MultiAgentResult, MultiAgentState, NodeResult, Status } from '../state.js';
4
+ const mockOrchestrator = {
5
+ id: 'test-orchestrator',
6
+ invoke: async () => new MultiAgentResult({ results: [], duration: 0 }),
7
+ // eslint-disable-next-line require-yield
8
+ async *stream() {
9
+ return new MultiAgentResult({ results: [], duration: 0 });
10
+ },
11
+ };
12
+ describe('MultiAgentInitializedEvent', () => {
13
+ it('creates instance with correct properties', () => {
14
+ const event = new MultiAgentInitializedEvent({ orchestrator: mockOrchestrator });
15
+ expect(event).toEqual({
16
+ type: 'multiAgentInitializedEvent',
17
+ orchestrator: mockOrchestrator,
18
+ });
19
+ // @ts-expect-error verifying that property is readonly
20
+ event.orchestrator = mockOrchestrator;
21
+ });
22
+ it('returns false for _shouldReverseCallbacks', () => {
23
+ const event = new MultiAgentInitializedEvent({ orchestrator: mockOrchestrator });
24
+ expect(event._shouldReverseCallbacks()).toBe(false);
25
+ });
26
+ });
27
+ describe('BeforeMultiAgentInvocationEvent', () => {
28
+ it('creates instance with correct properties', () => {
29
+ const state = new MultiAgentState();
30
+ const event = new BeforeMultiAgentInvocationEvent({ orchestrator: mockOrchestrator, state });
31
+ expect(event).toEqual({
32
+ type: 'beforeMultiAgentInvocationEvent',
33
+ orchestrator: mockOrchestrator,
34
+ state,
35
+ });
36
+ // @ts-expect-error verifying that property is readonly
37
+ event.orchestrator = mockOrchestrator;
38
+ // @ts-expect-error verifying that property is readonly
39
+ event.state = state;
40
+ });
41
+ it('returns false for _shouldReverseCallbacks', () => {
42
+ const state = new MultiAgentState();
43
+ const event = new BeforeMultiAgentInvocationEvent({ orchestrator: mockOrchestrator, state });
44
+ expect(event._shouldReverseCallbacks()).toBe(false);
45
+ });
46
+ });
47
+ describe('AfterMultiAgentInvocationEvent', () => {
48
+ it('creates instance with correct properties', () => {
49
+ const state = new MultiAgentState();
50
+ const event = new AfterMultiAgentInvocationEvent({ orchestrator: mockOrchestrator, state });
51
+ expect(event).toEqual({
52
+ type: 'afterMultiAgentInvocationEvent',
53
+ orchestrator: mockOrchestrator,
54
+ state,
55
+ });
56
+ // @ts-expect-error verifying that property is readonly
57
+ event.orchestrator = mockOrchestrator;
58
+ // @ts-expect-error verifying that property is readonly
59
+ event.state = state;
60
+ });
61
+ it('returns true for _shouldReverseCallbacks', () => {
62
+ const state = new MultiAgentState();
63
+ const event = new AfterMultiAgentInvocationEvent({ orchestrator: mockOrchestrator, state });
64
+ expect(event._shouldReverseCallbacks()).toBe(true);
65
+ });
66
+ });
67
+ describe('BeforeNodeCallEvent', () => {
68
+ it('creates instance with correct properties', () => {
69
+ const state = new MultiAgentState();
70
+ const event = new BeforeNodeCallEvent({ orchestrator: mockOrchestrator, state, nodeId: 'node-1' });
71
+ expect(event).toEqual({
72
+ type: 'beforeNodeCallEvent',
73
+ orchestrator: mockOrchestrator,
74
+ state,
75
+ nodeId: 'node-1',
76
+ cancel: false,
77
+ });
78
+ // @ts-expect-error verifying that property is readonly
79
+ event.orchestrator = mockOrchestrator;
80
+ // @ts-expect-error verifying that property is readonly
81
+ event.state = state;
82
+ // @ts-expect-error verifying that property is readonly
83
+ event.nodeId = 'node-1';
84
+ });
85
+ it('returns false for _shouldReverseCallbacks', () => {
86
+ const state = new MultiAgentState();
87
+ const event = new BeforeNodeCallEvent({ orchestrator: mockOrchestrator, state, nodeId: 'node-1' });
88
+ expect(event._shouldReverseCallbacks()).toBe(false);
89
+ });
90
+ it('allows cancel to be set to true', () => {
91
+ const state = new MultiAgentState();
92
+ const event = new BeforeNodeCallEvent({ orchestrator: mockOrchestrator, state, nodeId: 'node-1' });
93
+ expect(event.cancel).toBe(false);
94
+ event.cancel = true;
95
+ expect(event.cancel).toBe(true);
96
+ });
97
+ it('allows cancel to be set to a string message', () => {
98
+ const state = new MultiAgentState();
99
+ const event = new BeforeNodeCallEvent({ orchestrator: mockOrchestrator, state, nodeId: 'node-1' });
100
+ event.cancel = 'node is not ready';
101
+ expect(event.cancel).toBe('node is not ready');
102
+ });
103
+ });
104
+ describe('AfterNodeCallEvent', () => {
105
+ it('creates instance with correct properties', () => {
106
+ const state = new MultiAgentState();
107
+ const event = new AfterNodeCallEvent({ orchestrator: mockOrchestrator, state, nodeId: 'node-1' });
108
+ expect(event).toEqual({
109
+ type: 'afterNodeCallEvent',
110
+ orchestrator: mockOrchestrator,
111
+ state,
112
+ nodeId: 'node-1',
113
+ });
114
+ // @ts-expect-error verifying that property is readonly
115
+ event.orchestrator = mockOrchestrator;
116
+ // @ts-expect-error verifying that property is readonly
117
+ event.state = state;
118
+ // @ts-expect-error verifying that property is readonly
119
+ event.nodeId = 'node-1';
120
+ });
121
+ it('returns true for _shouldReverseCallbacks', () => {
122
+ const state = new MultiAgentState();
123
+ const event = new AfterNodeCallEvent({ orchestrator: mockOrchestrator, state, nodeId: 'node-1' });
124
+ expect(event._shouldReverseCallbacks()).toBe(true);
125
+ });
126
+ });
127
+ describe('NodeStreamUpdateEvent', () => {
128
+ it('creates instance with correct properties', () => {
129
+ const innerEvent = { type: 'beforeInvocationEvent' };
130
+ const event = new NodeStreamUpdateEvent({ nodeId: 'node-1', nodeType: 'agentNode', event: innerEvent });
131
+ expect(event).toEqual({
132
+ type: 'nodeStreamUpdateEvent',
133
+ nodeId: 'node-1',
134
+ nodeType: 'agentNode',
135
+ event: innerEvent,
136
+ });
137
+ // @ts-expect-error verifying that property is readonly
138
+ event.nodeId = 'node-1';
139
+ // @ts-expect-error verifying that property is readonly
140
+ event.nodeType = 'agentNode';
141
+ // @ts-expect-error verifying that property is readonly
142
+ event.event = innerEvent;
143
+ });
144
+ });
145
+ describe('NodeResultEvent', () => {
146
+ it('creates instance with correct properties', () => {
147
+ const result = new NodeResult({ nodeId: 'node-1', status: Status.COMPLETED, duration: 100 });
148
+ const event = new NodeResultEvent({ nodeId: 'node-1', nodeType: 'agentNode', result });
149
+ expect(event).toEqual({
150
+ type: 'nodeResultEvent',
151
+ nodeId: 'node-1',
152
+ nodeType: 'agentNode',
153
+ result,
154
+ });
155
+ // @ts-expect-error verifying that property is readonly
156
+ event.nodeId = 'node-1';
157
+ // @ts-expect-error verifying that property is readonly
158
+ event.nodeType = 'agentNode';
159
+ // @ts-expect-error verifying that property is readonly
160
+ event.result = result;
161
+ });
162
+ });
163
+ describe('MultiAgentHandoffEvent', () => {
164
+ it('creates instance with correct properties', () => {
165
+ const event = new MultiAgentHandoffEvent({ source: 'node-a', targets: ['node-b', 'node-c'] });
166
+ expect(event).toEqual({
167
+ type: 'multiAgentHandoffEvent',
168
+ source: 'node-a',
169
+ targets: ['node-b', 'node-c'],
170
+ });
171
+ // @ts-expect-error verifying that property is readonly
172
+ event.source = 'node-a';
173
+ // @ts-expect-error verifying that property is readonly
174
+ event.targets = [];
175
+ });
176
+ });
177
+ describe('MultiAgentResultEvent', () => {
178
+ it('creates instance with correct properties', () => {
179
+ const result = new MultiAgentResult({ results: [], duration: 0 });
180
+ const event = new MultiAgentResultEvent({ result });
181
+ expect(event).toEqual({
182
+ type: 'multiAgentResultEvent',
183
+ result,
184
+ });
185
+ // @ts-expect-error verifying that property is readonly
186
+ event.result = result;
187
+ });
188
+ });
189
+ //# sourceMappingURL=events.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.test.js","sourceRoot":"","sources":["../../../../src/multiagent/__tests__/events.test.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,19 @@
1
1
  import { beforeEach, describe, expect, it } from 'vitest';
2
+ import { z } from 'zod';
2
3
  import { Agent } from '../../agent/agent.js';
3
4
  import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
4
5
  import { collectGenerator } from '../../__fixtures__/model-test-helpers.js';
5
6
  import { TextBlock } from '../../types/messages.js';
6
- import { MultiAgentState, Status } from '../state.js';
7
- import { AgentNode, Node } from '../nodes.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';
8
10
  /**
9
11
  * Concrete Node subclass for testing the abstract base class.
10
12
  */
11
13
  class TestNode extends Node {
12
14
  _fn;
13
15
  constructor(id, fn) {
14
- super(id);
16
+ super(id, {});
15
17
  this._fn = fn;
16
18
  }
17
19
  async *handle(args, state) {
@@ -63,16 +65,19 @@ describe('AgentNode', () => {
63
65
  beforeEach(() => {
64
66
  const model = new MockMessageModel().addTurn(new TextBlock('reply'));
65
67
  agent = new Agent({ model, printer: false, state: { key1: 'value1' } });
66
- node = new AgentNode('agent-1', agent);
68
+ node = new AgentNode({ id: 'agent-1', agent });
67
69
  state = new MultiAgentState();
68
70
  });
69
71
  describe('handle', () => {
70
72
  it('wraps agent events and returns content', async () => {
71
73
  const { items, result } = await collectGenerator(node.stream([new TextBlock('prompt')], state));
72
- expect(items.length).toBeGreaterThan(0);
73
- for (const event of items) {
74
+ const streamEvents = items.filter((e) => e.type === 'nodeStreamUpdateEvent');
75
+ expect(streamEvents.length).toBeGreaterThan(0);
76
+ for (const event of streamEvents) {
74
77
  expect(event).toEqual(expect.objectContaining({ type: 'nodeStreamUpdateEvent', nodeId: 'agent-1', nodeType: 'agentNode' }));
75
78
  }
79
+ const resultEvent = items.find((e) => e.type === 'nodeResultEvent');
80
+ expect(resultEvent).toEqual(expect.objectContaining({ type: 'nodeResultEvent', nodeId: 'agent-1', nodeType: 'agentNode', result }));
76
81
  expect(result).toEqual({
77
82
  type: 'nodeResult',
78
83
  nodeId: 'agent-1',
@@ -88,6 +93,22 @@ describe('AgentNode', () => {
88
93
  expect(agent.messages).toStrictEqual(messagesBefore);
89
94
  expect(agent.state.getAll()).toStrictEqual(stateBefore);
90
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
+ });
91
112
  });
92
113
  describe('agent', () => {
93
114
  it('exposes the wrapped agent instance', () => {
@@ -95,4 +116,79 @@ describe('AgentNode', () => {
95
116
  });
96
117
  });
97
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
+ });
98
194
  //# sourceMappingURL=nodes.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodes.test.js","sourceRoot":"","sources":["../../../../src/multiagent/__tests__/nodes.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nodes.test.js","sourceRoot":"","sources":["../../../../src/multiagent/__tests__/nodes.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=queue.test.d.ts.map
@@ -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":"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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.js.map
@@ -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"}