@strands-agents/sdk 0.5.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.
Files changed (234) hide show
  1. package/dist/src/__fixtures__/metrics-helpers.d.ts +25 -0
  2. package/dist/src/__fixtures__/metrics-helpers.d.ts.map +1 -0
  3. package/dist/src/__fixtures__/metrics-helpers.js +34 -0
  4. package/dist/src/__fixtures__/metrics-helpers.js.map +1 -0
  5. package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
  6. package/dist/src/__fixtures__/mock-message-model.js +12 -0
  7. package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
  8. package/dist/src/__fixtures__/mock-storage-provider.d.ts +5 -0
  9. package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -1
  10. package/dist/src/__fixtures__/mock-storage-provider.js +23 -6
  11. package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -1
  12. package/dist/src/__fixtures__/slim-types.d.ts +2 -1
  13. package/dist/src/__fixtures__/slim-types.d.ts.map +1 -1
  14. package/dist/src/__tests__/mcp.test.js +45 -15
  15. package/dist/src/__tests__/mcp.test.js.map +1 -1
  16. package/dist/src/agent/__tests__/agent.test.js +90 -92
  17. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  18. package/dist/src/agent/agent.d.ts +35 -18
  19. package/dist/src/agent/agent.d.ts.map +1 -1
  20. package/dist/src/agent/agent.js +115 -57
  21. package/dist/src/agent/agent.js.map +1 -1
  22. package/dist/src/errors.d.ts +6 -0
  23. package/dist/src/errors.d.ts.map +1 -1
  24. package/dist/src/errors.js +9 -0
  25. package/dist/src/errors.js.map +1 -1
  26. package/dist/src/hooks/__tests__/events.test.js +2 -0
  27. package/dist/src/hooks/__tests__/events.test.js.map +1 -1
  28. package/dist/src/hooks/events.d.ts +16 -0
  29. package/dist/src/hooks/events.d.ts.map +1 -1
  30. package/dist/src/hooks/events.js.map +1 -1
  31. package/dist/src/hooks/index.d.ts +1 -1
  32. package/dist/src/hooks/index.d.ts.map +1 -1
  33. package/dist/src/index.d.ts +21 -6
  34. package/dist/src/index.d.ts.map +1 -1
  35. package/dist/src/index.js +15 -2
  36. package/dist/src/index.js.map +1 -1
  37. package/dist/src/mcp.d.ts +38 -0
  38. package/dist/src/mcp.d.ts.map +1 -1
  39. package/dist/src/mcp.js +23 -6
  40. package/dist/src/mcp.js.map +1 -1
  41. package/dist/src/models/__tests__/bedrock.test.js +688 -0
  42. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  43. package/dist/src/models/__tests__/model.test.js +106 -0
  44. package/dist/src/models/__tests__/model.test.js.map +1 -1
  45. package/dist/src/models/__tests__/streaming.test.d.ts +2 -0
  46. package/dist/src/models/__tests__/streaming.test.d.ts.map +1 -0
  47. package/dist/src/models/__tests__/streaming.test.js +50 -0
  48. package/dist/src/models/__tests__/streaming.test.js.map +1 -0
  49. package/dist/src/models/bedrock.d.ts +80 -1
  50. package/dist/src/models/bedrock.d.ts.map +1 -1
  51. package/dist/src/models/bedrock.js +214 -5
  52. package/dist/src/models/bedrock.js.map +1 -1
  53. package/dist/src/models/model.d.ts +6 -0
  54. package/dist/src/models/model.d.ts.map +1 -1
  55. package/dist/src/models/model.js +52 -2
  56. package/dist/src/models/model.js.map +1 -1
  57. package/dist/src/models/streaming.d.ts +83 -2
  58. package/dist/src/models/streaming.d.ts.map +1 -1
  59. package/dist/src/models/streaming.js +26 -0
  60. package/dist/src/models/streaming.js.map +1 -1
  61. package/dist/src/multiagent/__tests__/events.test.js +18 -2
  62. package/dist/src/multiagent/__tests__/events.test.js.map +1 -1
  63. package/dist/src/multiagent/__tests__/graph.test.d.ts +2 -0
  64. package/dist/src/multiagent/__tests__/graph.test.d.ts.map +1 -0
  65. package/dist/src/multiagent/__tests__/graph.test.js +438 -0
  66. package/dist/src/multiagent/__tests__/graph.test.js.map +1 -0
  67. package/dist/src/multiagent/__tests__/nodes.test.js +8 -8
  68. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
  69. package/dist/src/multiagent/__tests__/queue.test.js +22 -0
  70. package/dist/src/multiagent/__tests__/queue.test.js.map +1 -1
  71. package/dist/src/multiagent/__tests__/swarm.test.d.ts +2 -0
  72. package/dist/src/multiagent/__tests__/swarm.test.d.ts.map +1 -0
  73. package/dist/src/multiagent/__tests__/swarm.test.js +241 -0
  74. package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -0
  75. package/dist/src/multiagent/edge.d.ts +9 -2
  76. package/dist/src/multiagent/edge.d.ts.map +1 -1
  77. package/dist/src/multiagent/events.d.ts +15 -1
  78. package/dist/src/multiagent/events.d.ts.map +1 -1
  79. package/dist/src/multiagent/events.js +17 -0
  80. package/dist/src/multiagent/events.js.map +1 -1
  81. package/dist/src/multiagent/graph.d.ts +125 -0
  82. package/dist/src/multiagent/graph.d.ts.map +1 -0
  83. package/dist/src/multiagent/graph.js +394 -0
  84. package/dist/src/multiagent/graph.js.map +1 -0
  85. package/dist/src/multiagent/index.d.ts +5 -1
  86. package/dist/src/multiagent/index.d.ts.map +1 -1
  87. package/dist/src/multiagent/index.js +3 -1
  88. package/dist/src/multiagent/index.js.map +1 -1
  89. package/dist/src/multiagent/nodes.d.ts +8 -6
  90. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  91. package/dist/src/multiagent/nodes.js +16 -5
  92. package/dist/src/multiagent/nodes.js.map +1 -1
  93. package/dist/src/multiagent/queue.d.ts +6 -0
  94. package/dist/src/multiagent/queue.d.ts.map +1 -1
  95. package/dist/src/multiagent/queue.js +13 -0
  96. package/dist/src/multiagent/queue.js.map +1 -1
  97. package/dist/src/multiagent/state.d.ts +2 -0
  98. package/dist/src/multiagent/state.d.ts.map +1 -1
  99. package/dist/src/multiagent/state.js +3 -0
  100. package/dist/src/multiagent/state.js.map +1 -1
  101. package/dist/src/multiagent/swarm.d.ts +102 -0
  102. package/dist/src/multiagent/swarm.d.ts.map +1 -0
  103. package/dist/src/multiagent/swarm.js +238 -0
  104. package/dist/src/multiagent/swarm.js.map +1 -0
  105. package/dist/src/registry/__tests__/tool-registry.test.d.ts +2 -0
  106. package/dist/src/registry/__tests__/tool-registry.test.d.ts.map +1 -0
  107. package/dist/src/registry/__tests__/tool-registry.test.js +124 -0
  108. package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -0
  109. package/dist/src/registry/tool-registry.d.ts +32 -20
  110. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  111. package/dist/src/registry/tool-registry.js +60 -158
  112. package/dist/src/registry/tool-registry.js.map +1 -1
  113. package/dist/src/session/__tests__/file-storage.test.node.js +75 -15
  114. package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -1
  115. package/dist/src/session/__tests__/s3-storage.test.d.ts +2 -0
  116. package/dist/src/session/__tests__/s3-storage.test.d.ts.map +1 -0
  117. package/dist/src/session/__tests__/{s3-storage.test.node.js → s3-storage.test.js} +161 -75
  118. package/dist/src/session/__tests__/s3-storage.test.js.map +1 -0
  119. package/dist/src/session/__tests__/session-manager.test.d.ts +2 -0
  120. package/dist/src/session/__tests__/session-manager.test.d.ts.map +1 -0
  121. package/dist/src/session/__tests__/session-manager.test.js +461 -0
  122. package/dist/src/session/__tests__/session-manager.test.js.map +1 -0
  123. package/dist/src/session/__tests__/validation.test.js +28 -1
  124. package/dist/src/session/__tests__/validation.test.js.map +1 -1
  125. package/dist/src/session/file-storage.d.ts +53 -27
  126. package/dist/src/session/file-storage.d.ts.map +1 -1
  127. package/dist/src/session/file-storage.js +103 -52
  128. package/dist/src/session/file-storage.js.map +1 -1
  129. package/dist/src/session/index.d.ts +6 -13
  130. package/dist/src/session/index.d.ts.map +1 -1
  131. package/dist/src/session/index.js +4 -12
  132. package/dist/src/session/index.js.map +1 -1
  133. package/dist/src/session/s3-storage.d.ts +49 -20
  134. package/dist/src/session/s3-storage.d.ts.map +1 -1
  135. package/dist/src/session/s3-storage.js +120 -35
  136. package/dist/src/session/s3-storage.js.map +1 -1
  137. package/dist/src/session/session-manager.d.ts +83 -0
  138. package/dist/src/session/session-manager.d.ts.map +1 -0
  139. package/dist/src/session/session-manager.js +122 -0
  140. package/dist/src/session/session-manager.js.map +1 -0
  141. package/dist/src/session/storage.d.ts +19 -11
  142. package/dist/src/session/storage.d.ts.map +1 -1
  143. package/dist/src/session/types.d.ts +6 -18
  144. package/dist/src/session/types.d.ts.map +1 -1
  145. package/dist/src/session/validation.d.ts +7 -0
  146. package/dist/src/session/validation.d.ts.map +1 -1
  147. package/dist/src/session/validation.js +12 -0
  148. package/dist/src/session/validation.js.map +1 -1
  149. package/dist/src/structured-output/__tests__/context.test.js +13 -13
  150. package/dist/src/structured-output/__tests__/context.test.js.map +1 -1
  151. package/dist/src/structured-output/context.js +1 -1
  152. package/dist/src/structured-output/context.js.map +1 -1
  153. package/dist/src/telemetry/__tests__/config.test.d.ts +2 -0
  154. package/dist/src/telemetry/__tests__/config.test.d.ts.map +1 -0
  155. package/dist/src/telemetry/__tests__/config.test.js +40 -0
  156. package/dist/src/telemetry/__tests__/config.test.js.map +1 -0
  157. package/dist/src/telemetry/__tests__/config.test.node.js +10 -36
  158. package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -1
  159. package/dist/src/telemetry/__tests__/meter.test.d.ts +2 -0
  160. package/dist/src/telemetry/__tests__/meter.test.d.ts.map +1 -0
  161. package/dist/src/telemetry/__tests__/meter.test.js +457 -0
  162. package/dist/src/telemetry/__tests__/meter.test.js.map +1 -0
  163. package/dist/src/telemetry/config.d.ts +40 -19
  164. package/dist/src/telemetry/config.d.ts.map +1 -1
  165. package/dist/src/telemetry/config.js +63 -31
  166. package/dist/src/telemetry/config.js.map +1 -1
  167. package/dist/src/telemetry/index.d.ts +1 -1
  168. package/dist/src/telemetry/index.d.ts.map +1 -1
  169. package/dist/src/telemetry/index.js +1 -1
  170. package/dist/src/telemetry/index.js.map +1 -1
  171. package/dist/src/telemetry/meter.d.ts +277 -0
  172. package/dist/src/telemetry/meter.d.ts.map +1 -0
  173. package/dist/src/telemetry/meter.js +292 -0
  174. package/dist/src/telemetry/meter.js.map +1 -0
  175. package/dist/src/telemetry/tracer.js +2 -2
  176. package/dist/src/telemetry/tracer.js.map +1 -1
  177. package/dist/src/tools/__tests__/tool-factory.test.d.ts +2 -0
  178. package/dist/src/tools/__tests__/tool-factory.test.d.ts.map +1 -0
  179. package/dist/src/tools/__tests__/tool-factory.test.js +98 -0
  180. package/dist/src/tools/__tests__/tool-factory.test.js.map +1 -0
  181. package/dist/src/tools/__tests__/zod-tool.test-d.js +1 -1
  182. package/dist/src/tools/__tests__/zod-tool.test-d.js.map +1 -1
  183. package/dist/src/tools/__tests__/zod-tool.test.js +3 -4
  184. package/dist/src/tools/__tests__/zod-tool.test.js.map +1 -1
  185. package/dist/src/tools/function-tool.d.ts +15 -2
  186. package/dist/src/tools/function-tool.d.ts.map +1 -1
  187. package/dist/src/tools/function-tool.js +24 -0
  188. package/dist/src/tools/function-tool.js.map +1 -1
  189. package/dist/src/tools/tool-factory.d.ts +22 -0
  190. package/dist/src/tools/tool-factory.d.ts.map +1 -0
  191. package/dist/src/tools/tool-factory.js +55 -0
  192. package/dist/src/tools/tool-factory.js.map +1 -0
  193. package/dist/src/tools/zod-tool.d.ts +55 -52
  194. package/dist/src/tools/zod-tool.d.ts.map +1 -1
  195. package/dist/src/tools/zod-tool.js +7 -61
  196. package/dist/src/tools/zod-tool.js.map +1 -1
  197. package/dist/src/tsconfig.tsbuildinfo +1 -1
  198. package/dist/src/types/__tests__/agent.test.js +11 -0
  199. package/dist/src/types/__tests__/agent.test.js.map +1 -1
  200. package/dist/src/types/__tests__/citations.test.d.ts +2 -0
  201. package/dist/src/types/__tests__/citations.test.d.ts.map +1 -0
  202. package/dist/src/types/__tests__/citations.test.js +104 -0
  203. package/dist/src/types/__tests__/citations.test.js.map +1 -0
  204. package/dist/src/types/__tests__/messages.test.js +26 -0
  205. package/dist/src/types/__tests__/messages.test.js.map +1 -1
  206. package/dist/src/types/agent.d.ts +7 -0
  207. package/dist/src/types/agent.d.ts.map +1 -1
  208. package/dist/src/types/agent.js +9 -0
  209. package/dist/src/types/agent.js.map +1 -1
  210. package/dist/src/types/citations.d.ts +180 -0
  211. package/dist/src/types/citations.d.ts.map +1 -0
  212. package/dist/src/types/citations.js +45 -0
  213. package/dist/src/types/citations.js.map +1 -0
  214. package/dist/src/types/messages.d.ts +5 -1
  215. package/dist/src/types/messages.d.ts.map +1 -1
  216. package/dist/src/types/messages.js +4 -0
  217. package/dist/src/types/messages.js.map +1 -1
  218. package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
  219. package/dist/src/vended-tools/bash/bash.js +1 -2
  220. package/dist/src/vended-tools/bash/bash.js.map +1 -1
  221. package/dist/src/vended-tools/file_editor/file-editor.js +1 -1
  222. package/dist/src/vended-tools/file_editor/file-editor.js.map +1 -1
  223. package/dist/src/vended-tools/http_request/http-request.d.ts.map +1 -1
  224. package/dist/src/vended-tools/http_request/http-request.js +1 -2
  225. package/dist/src/vended-tools/http_request/http-request.js.map +1 -1
  226. package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
  227. package/package.json +15 -3
  228. package/dist/src/registry/registry.d.ts +0 -117
  229. package/dist/src/registry/registry.d.ts.map +0 -1
  230. package/dist/src/registry/registry.js +0 -298
  231. package/dist/src/registry/registry.js.map +0 -1
  232. package/dist/src/session/__tests__/s3-storage.test.node.d.ts +0 -2
  233. package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +0 -1
  234. package/dist/src/session/__tests__/s3-storage.test.node.js.map +0 -1
@@ -0,0 +1,241 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { Agent } from '../../agent/agent.js';
3
+ import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
4
+ import { collectGenerator } from '../../__fixtures__/model-test-helpers.js';
5
+ import { BeforeNodeCallEvent, MultiAgentInitializedEvent } from '../events.js';
6
+ import { TextBlock } from '../../types/messages.js';
7
+ import { Status } from '../state.js';
8
+ import { AgentNode } from '../nodes.js';
9
+ import { Swarm } from '../swarm.js';
10
+ /**
11
+ * Creates an agent that produces a structured output handoff via the strands_structured_output tool.
12
+ * The model returns a toolUseBlock with the handoff payload, then a text block to finish.
13
+ */
14
+ function createHandoffAgent(agentId, handoff, description = `Agent ${agentId}`) {
15
+ const model = new MockMessageModel()
16
+ .addTurn({
17
+ type: 'toolUseBlock',
18
+ name: 'strands_structured_output',
19
+ toolUseId: 'tool-1',
20
+ input: handoff,
21
+ })
22
+ .addTurn(new TextBlock('Done'));
23
+ return new Agent({ model, printer: false, agentId, description });
24
+ }
25
+ /**
26
+ * Creates a simple agent that produces a final response (no handoff).
27
+ */
28
+ function createFinalAgent(agentId, message, description = `Agent ${agentId}`) {
29
+ return createHandoffAgent(agentId, { message }, description);
30
+ }
31
+ describe('Swarm', () => {
32
+ describe('constructor', () => {
33
+ it('defaults id to "swarm"', () => {
34
+ const swarm = new Swarm({
35
+ nodes: [createFinalAgent('a', 'hi')],
36
+ start: 'a',
37
+ });
38
+ expect(swarm.id).toBe('swarm');
39
+ });
40
+ it('accepts a custom id', () => {
41
+ const swarm = new Swarm({
42
+ nodes: [createFinalAgent('a', 'hi')],
43
+ start: 'a',
44
+ id: 'my-swarm',
45
+ });
46
+ expect(swarm.id).toBe('my-swarm');
47
+ });
48
+ it('accepts AgentNodeOptions with per-node config', () => {
49
+ const swarm = new Swarm({
50
+ nodes: [{ agent: createFinalAgent('a', 'hi') }],
51
+ start: 'a',
52
+ });
53
+ expect(swarm.nodes.get('a')).toBeInstanceOf(AgentNode);
54
+ });
55
+ it('throws when start references unknown agent', () => {
56
+ expect(() => new Swarm({
57
+ nodes: [createFinalAgent('a', 'hi')],
58
+ start: 'missing',
59
+ })).toThrow('start=<missing> | start references unknown agent');
60
+ });
61
+ it('throws on duplicate agent ids', () => {
62
+ const agent = createFinalAgent('a', 'hi');
63
+ expect(() => new Swarm({
64
+ nodes: [agent, agent],
65
+ start: 'a',
66
+ })).toThrow('agent_id=<a> | duplicate agent id');
67
+ });
68
+ it('throws when maxSteps < 1', () => {
69
+ expect(() => new Swarm({
70
+ nodes: [createFinalAgent('a', 'hi')],
71
+ start: 'a',
72
+ maxSteps: 0,
73
+ })).toThrow('max_steps=<0> | must be at least 1');
74
+ });
75
+ });
76
+ describe('invoke', () => {
77
+ it('returns completed result with content and duration', async () => {
78
+ const swarm = new Swarm({
79
+ nodes: [createFinalAgent('a', 'final answer')],
80
+ start: 'a',
81
+ });
82
+ const result = await swarm.invoke('hello');
83
+ expect(result).toEqual(expect.objectContaining({
84
+ status: Status.COMPLETED,
85
+ duration: expect.any(Number),
86
+ content: expect.arrayContaining([expect.objectContaining({ type: 'textBlock', text: 'Done' })]),
87
+ }));
88
+ expect(result.results.map((r) => r.nodeId)).toStrictEqual(['a']);
89
+ });
90
+ it('hands off from A to B and returns final output', async () => {
91
+ const swarm = new Swarm({
92
+ nodes: [
93
+ createHandoffAgent('a', { agentId: 'b', message: 'please handle this' }),
94
+ createFinalAgent('b', 'done by b'),
95
+ ],
96
+ start: 'a',
97
+ });
98
+ const result = await swarm.invoke('start');
99
+ expect(result.status).toBe(Status.COMPLETED);
100
+ expect(result.results.map((r) => r.nodeId)).toStrictEqual(['a', 'b']);
101
+ });
102
+ it('chains handoffs across multiple agents (A → B → C)', async () => {
103
+ const swarm = new Swarm({
104
+ nodes: [
105
+ createHandoffAgent('a', { agentId: 'b', message: 'go to b' }),
106
+ createHandoffAgent('b', { agentId: 'c', message: 'go to c' }),
107
+ createFinalAgent('c', 'final from c'),
108
+ ],
109
+ start: 'a',
110
+ });
111
+ const result = await swarm.invoke('start');
112
+ expect(result.status).toBe(Status.COMPLETED);
113
+ expect(result.results.map((r) => r.nodeId)).toStrictEqual(['a', 'b', 'c']);
114
+ });
115
+ it('passes serialized context in handoff input', async () => {
116
+ const contextData = { key: 'value', num: 42 };
117
+ const agentB = createFinalAgent('b', 'done');
118
+ const streamSpy = vi.spyOn(agentB, 'stream');
119
+ const swarm = new Swarm({
120
+ nodes: [createHandoffAgent('a', { agentId: 'b', message: 'handle this', context: contextData }), agentB],
121
+ start: 'a',
122
+ });
123
+ await swarm.invoke('start');
124
+ expect(streamSpy).toHaveBeenCalled();
125
+ const args = streamSpy.mock.calls[0][0];
126
+ const texts = args.map((b) => b.text);
127
+ expect(texts).toContainEqual('handle this');
128
+ expect(texts).toContainEqual(expect.stringContaining(JSON.stringify(contextData, null, 2)));
129
+ });
130
+ it('throws when maxSteps is exceeded', async () => {
131
+ const swarm = new Swarm({
132
+ nodes: [createHandoffAgent('a', { agentId: 'b', message: 'to b' }), createFinalAgent('b', 'done')],
133
+ start: 'a',
134
+ maxSteps: 1,
135
+ });
136
+ await expect(swarm.invoke('start')).rejects.toThrow('swarm reached step limit');
137
+ });
138
+ it('returns failed result when agent throws', async () => {
139
+ const model = new MockMessageModel().addTurn(new Error('agent exploded'));
140
+ const agent = new Agent({ model, printer: false, agentId: 'a', description: 'Agent a' });
141
+ const swarm = new Swarm({
142
+ nodes: [{ agent }],
143
+ start: 'a',
144
+ });
145
+ const result = await swarm.invoke('go');
146
+ expect(result.status).toBe(Status.FAILED);
147
+ expect(result.results).toHaveLength(1);
148
+ expect(result.results[0]).toEqual(expect.objectContaining({ nodeId: 'a', status: Status.FAILED }));
149
+ });
150
+ it('calls initialize only once across invocations', async () => {
151
+ let callCount = 0;
152
+ const swarm = new Swarm({
153
+ nodes: [createFinalAgent('a', 'hi')],
154
+ start: 'a',
155
+ });
156
+ swarm.hooks.addCallback(MultiAgentInitializedEvent, () => {
157
+ callCount++;
158
+ });
159
+ await swarm.invoke('first');
160
+ await swarm.invoke('second');
161
+ expect(callCount).toBe(1);
162
+ });
163
+ it('preserves agent messages and state after execution', async () => {
164
+ const agent = createFinalAgent('a', 'reply');
165
+ const messagesBefore = [...agent.messages];
166
+ const stateBefore = agent.state.getAll();
167
+ const swarm = new Swarm({
168
+ nodes: [agent],
169
+ start: 'a',
170
+ });
171
+ await swarm.invoke('hello');
172
+ expect(agent.messages).toStrictEqual(messagesBefore);
173
+ expect(agent.state.getAll()).toStrictEqual(stateBefore);
174
+ });
175
+ });
176
+ describe('stream', () => {
177
+ it('yields lifecycle events in correct order for single agent', async () => {
178
+ const swarm = new Swarm({
179
+ nodes: [createFinalAgent('a', 'reply')],
180
+ start: 'a',
181
+ });
182
+ const { items, result } = await collectGenerator(swarm.stream('go'));
183
+ const eventTypes = items.map((e) => e.type);
184
+ expect(result.status).toBe(Status.COMPLETED);
185
+ expect(result.results.map((r) => r.nodeId)).toStrictEqual(['a']);
186
+ expect(eventTypes).toStrictEqual([
187
+ 'beforeMultiAgentInvocationEvent',
188
+ 'beforeNodeCallEvent',
189
+ // nodeStreamUpdateEvents from agent execution
190
+ ...eventTypes.filter((t) => t === 'nodeStreamUpdateEvent'),
191
+ 'nodeResultEvent',
192
+ 'afterNodeCallEvent',
193
+ 'afterMultiAgentInvocationEvent',
194
+ 'multiAgentResultEvent',
195
+ ]);
196
+ });
197
+ it('yields handoff event between agents', async () => {
198
+ const swarm = new Swarm({
199
+ nodes: [createHandoffAgent('a', { agentId: 'b', message: 'go' }), createFinalAgent('b', 'done')],
200
+ start: 'a',
201
+ });
202
+ const { items } = await collectGenerator(swarm.stream('start'));
203
+ const handoffEvents = items.filter((e) => e.type === 'multiAgentHandoffEvent');
204
+ expect(handoffEvents).toHaveLength(1);
205
+ expect(handoffEvents[0]).toEqual(expect.objectContaining({
206
+ type: 'multiAgentHandoffEvent',
207
+ source: 'a',
208
+ targets: ['b'],
209
+ }));
210
+ });
211
+ it('returns cancelled result with default message when cancel is true', async () => {
212
+ const swarm = new Swarm({
213
+ nodes: [createFinalAgent('a', 'hi')],
214
+ start: 'a',
215
+ });
216
+ swarm.hooks.addCallback(BeforeNodeCallEvent, (event) => {
217
+ event.cancel = true;
218
+ });
219
+ const { items, result } = await collectGenerator(swarm.stream('go'));
220
+ expect(result.status).toBe(Status.CANCELLED);
221
+ expect(result.results).toHaveLength(1);
222
+ expect(result.results[0]).toEqual(expect.objectContaining({ nodeId: 'a', status: Status.CANCELLED, duration: 0 }));
223
+ const cancelEvent = items.find((e) => e.type === 'nodeCancelEvent');
224
+ expect(cancelEvent).toEqual(expect.objectContaining({ nodeId: 'a', message: 'node cancelled by hook' }));
225
+ });
226
+ it('returns cancelled result with custom message when cancel is a string', async () => {
227
+ const swarm = new Swarm({
228
+ nodes: [createFinalAgent('a', 'hi')],
229
+ start: 'a',
230
+ });
231
+ swarm.hooks.addCallback(BeforeNodeCallEvent, (event) => {
232
+ event.cancel = 'agent not ready';
233
+ });
234
+ const { items, result } = await collectGenerator(swarm.stream('go'));
235
+ expect(result.status).toBe(Status.CANCELLED);
236
+ const cancelEvent = items.find((e) => e.type === 'nodeCancelEvent');
237
+ expect(cancelEvent).toEqual(expect.objectContaining({ nodeId: 'a', message: 'agent not ready' }));
238
+ });
239
+ });
240
+ });
241
+ //# sourceMappingURL=swarm.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm.test.js","sourceRoot":"","sources":["../../../../src/multiagent/__tests__/swarm.test.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,18 @@ export declare class Edge {
19
19
  });
20
20
  }
21
21
  /**
22
- * An edge definition accepted by orchestration constructors.
22
+ * Options for creating an edge with an optional condition handler.
23
23
  */
24
- export interface EdgeDefinition {
24
+ export interface EdgeOptions {
25
25
  source: string;
26
26
  target: string;
27
27
  handler?: EdgeHandler;
28
28
  }
29
+ /**
30
+ * An edge definition accepted by orchestration constructors.
31
+ *
32
+ * Pass a `[source, target]` tuple for the simple case, or {@link EdgeOptions}
33
+ * when per-edge configuration is needed.
34
+ */
35
+ export type EdgeDefinition = [source: string, target: string] | EdgeOptions;
29
36
  //# sourceMappingURL=edge.d.ts.map
@@ -1 +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"}
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,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,WAAW,CAAA;CACtB;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAAA"}
@@ -67,10 +67,12 @@ export declare class AfterNodeCallEvent extends HookableEvent {
67
67
  readonly orchestrator: MultiAgentBase;
68
68
  readonly state: MultiAgentState;
69
69
  readonly nodeId: string;
70
+ readonly error?: Error;
70
71
  constructor(data: {
71
72
  orchestrator: MultiAgentBase;
72
73
  state: MultiAgentState;
73
74
  nodeId: string;
75
+ error?: Error;
74
76
  });
75
77
  _shouldReverseCallbacks(): boolean;
76
78
  }
@@ -117,6 +119,18 @@ export declare class MultiAgentHandoffEvent extends HookableEvent {
117
119
  targets: string[];
118
120
  });
119
121
  }
122
+ /**
123
+ * Event triggered when a node is cancelled via {@link BeforeNodeCallEvent.cancel}.
124
+ */
125
+ export declare class NodeCancelEvent extends HookableEvent {
126
+ readonly type: "nodeCancelEvent";
127
+ readonly nodeId: string;
128
+ readonly message: string;
129
+ constructor(data: {
130
+ nodeId: string;
131
+ message: string;
132
+ });
133
+ }
120
134
  /**
121
135
  * Event triggered as the final event in the multi-agent stream.
122
136
  * Wraps the {@link MultiAgentResult} containing the aggregate outcome.
@@ -131,5 +145,5 @@ export declare class MultiAgentResultEvent extends HookableEvent {
131
145
  /**
132
146
  * Union of all multi-agent streaming events.
133
147
  */
134
- export type MultiAgentStreamEvent = BeforeMultiAgentInvocationEvent | AfterMultiAgentInvocationEvent | BeforeNodeCallEvent | AfterNodeCallEvent | NodeStreamUpdateEvent | NodeResultEvent | MultiAgentHandoffEvent | MultiAgentResultEvent;
148
+ export type MultiAgentStreamEvent = BeforeMultiAgentInvocationEvent | AfterMultiAgentInvocationEvent | BeforeNodeCallEvent | AfterNodeCallEvent | NodeStreamUpdateEvent | NodeResultEvent | NodeCancelEvent | MultiAgentHandoffEvent | MultiAgentResultEvent;
135
149
  //# sourceMappingURL=events.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/multiagent/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/multiagent/events.ts"],"names":[],"mappings":"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"}
@@ -69,11 +69,15 @@ export class AfterNodeCallEvent extends HookableEvent {
69
69
  orchestrator;
70
70
  state;
71
71
  nodeId;
72
+ error;
72
73
  constructor(data) {
73
74
  super();
74
75
  this.orchestrator = data.orchestrator;
75
76
  this.state = data.state;
76
77
  this.nodeId = data.nodeId;
78
+ if (data.error !== undefined) {
79
+ this.error = data.error;
80
+ }
77
81
  }
78
82
  _shouldReverseCallbacks() {
79
83
  return true;
@@ -125,6 +129,19 @@ export class MultiAgentHandoffEvent extends HookableEvent {
125
129
  this.targets = data.targets;
126
130
  }
127
131
  }
132
+ /**
133
+ * Event triggered when a node is cancelled via {@link BeforeNodeCallEvent.cancel}.
134
+ */
135
+ export class NodeCancelEvent extends HookableEvent {
136
+ type = 'nodeCancelEvent';
137
+ nodeId;
138
+ message;
139
+ constructor(data) {
140
+ super();
141
+ this.nodeId = data.nodeId;
142
+ this.message = data.message;
143
+ }
144
+ }
128
145
  /**
129
146
  * Event triggered as the final event in the multi-agent stream.
130
147
  * Wraps the {@link MultiAgentResult} containing the aggregate outcome.
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/multiagent/events.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/multiagent/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAMlD;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,aAAa;IAClD,IAAI,GAAG,4BAAqC,CAAA;IAC5C,YAAY,CAAgB;IAErC,YAAY,IAAsC;QAChD,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;IACvC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,+BAAgC,SAAQ,aAAa;IACvD,IAAI,GAAG,iCAA0C,CAAA;IACjD,YAAY,CAAgB;IAC5B,KAAK,CAAiB;IAE/B,YAAY,IAA8D;QACxE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACzB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,aAAa;IACtD,IAAI,GAAG,gCAAyC,CAAA;IAChD,YAAY,CAAgB;IAC5B,KAAK,CAAiB;IAE/B,YAAY,IAA8D;QACxE,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACzB,CAAC;IAEQ,uBAAuB;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IAC3C,IAAI,GAAG,qBAA8B,CAAA;IACrC,YAAY,CAAgB;IAC5B,KAAK,CAAiB;IACtB,MAAM,CAAQ;IAEvB;;;;OAIG;IACH,MAAM,GAAqB,KAAK,CAAA;IAEhC,YAAY,IAA8E;QACxF,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,aAAa;IAC1C,IAAI,GAAG,oBAA6B,CAAA;IACpC,YAAY,CAAgB;IAC5B,KAAK,CAAiB;IACtB,MAAM,CAAQ;IACd,KAAK,CAAQ;IAEtB,YAAY,IAA6F;QACvG,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACrC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACzB,CAAC;IACH,CAAC;IAEQ,uBAAuB;QAC9B,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IAC7C,IAAI,GAAG,uBAAgC,CAAA;IACvC,MAAM,CAAQ;IACd,QAAQ,CAAU;IAClB,KAAK,CAA0E;IAExF,YAAY,IAIX;QACC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IACzB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IACvC,IAAI,GAAG,iBAA0B,CAAA;IACjC,MAAM,CAAQ;IACd,QAAQ,CAAU;IAClB,MAAM,CAAY;IAE3B,YAAY,IAAgE;QAC1E,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,aAAa;IAC9C,IAAI,GAAG,wBAAiC,CAAA;IACxC,MAAM,CAAQ;IACd,OAAO,CAAU;IAE1B,YAAY,IAA2C;QACrD,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,aAAa;IACvC,IAAI,GAAG,iBAA0B,CAAA;IACjC,MAAM,CAAQ;IACd,OAAO,CAAQ;IAExB,YAAY,IAAyC;QACnD,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;IAC7B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,qBAAsB,SAAQ,aAAa;IAC7C,IAAI,GAAG,uBAAgC,CAAA;IACvC,MAAM,CAAkB;IAEjC,YAAY,IAAkC;QAC5C,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC3B,CAAC;CACF"}
@@ -0,0 +1,125 @@
1
+ import type { InvokeArgs } from '../agent/agent.js';
2
+ import { HookRegistryImplementation } from '../hooks/registry.js';
3
+ import type { HookProvider } from '../hooks/types.js';
4
+ import type { NodeDefinition } from './nodes.js';
5
+ import { Node } from './nodes.js';
6
+ import { MultiAgentResult } from './state.js';
7
+ import type { MultiAgentBase } from './base.js';
8
+ import type { MultiAgentStreamEvent } from './events.js';
9
+ import type { EdgeDefinition } from './edge.js';
10
+ import { Edge } from './edge.js';
11
+ /**
12
+ * Runtime configuration for graph execution.
13
+ */
14
+ export interface GraphConfig {
15
+ /** Max nodes executing in parallel. */
16
+ maxConcurrency?: number;
17
+ /** Max total steps (prevents infinite loops in cyclic graphs). */
18
+ maxSteps?: number;
19
+ }
20
+ /**
21
+ * Options for creating a Graph instance.
22
+ */
23
+ export interface GraphOptions extends GraphConfig {
24
+ /** Unique identifier for this graph. Defaults to `'graph'`. */
25
+ id?: string;
26
+ /** Node definitions to construct the graph from. */
27
+ nodes: NodeDefinition[];
28
+ /** Edge definitions describing connections between nodes. */
29
+ edges: EdgeDefinition[];
30
+ /** Explicit source node IDs. If omitted, auto-detected from nodes with no incoming edges. */
31
+ sources?: string[];
32
+ /** Hook providers for event-driven extensibility. */
33
+ hooks?: HookProvider[];
34
+ }
35
+ /**
36
+ * Directed graph orchestration pattern.
37
+ *
38
+ * Agents execute as nodes in a dependency graph, with edges defining execution order
39
+ * and optional conditions controlling routing. Source nodes (those with no incoming edges)
40
+ * run first, and downstream nodes execute once all their dependencies complete. Parallel
41
+ * execution is supported up to a configurable concurrency limit.
42
+ *
43
+ * Key design choices vs the Python SDK:
44
+ * - Construction uses a declarative options object rather than a mutable GraphBuilder.
45
+ * Nodes and edges are passed directly to the constructor.
46
+ * - Dependency resolution uses AND semantics: a node runs only when all incoming edges
47
+ * are satisfied. Python uses OR semantics, firing a node when any single incoming
48
+ * edge from the completed batch is satisfied.
49
+ * - Nodes are launched individually as they become ready (up to maxConcurrency). Python
50
+ * executes in discrete batches, waiting for the entire batch to complete before
51
+ * scheduling the next set of nodes.
52
+ * - Agent nodes are stateless by default (snapshot/restore on each execution). Python
53
+ * accumulates agent state across executions unless `reset_on_revisit` is enabled.
54
+ * - Node failures produce a FAILED result, allowing parallel paths to continue.
55
+ * Orchestrator-level limits (maxSteps) throw exceptions. Python does the inverse:
56
+ * node failures throw exceptions (fail-fast), while limit violations return a
57
+ * FAILED result.
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const graph = new Graph({
62
+ * nodes: [researcher, writer],
63
+ * edges: [['researcher', 'writer']],
64
+ * })
65
+ *
66
+ * const result = await graph.invoke('Explain quantum computing')
67
+ * ```
68
+ */
69
+ export declare class Graph implements MultiAgentBase {
70
+ readonly id: string;
71
+ readonly nodes: ReadonlyMap<string, Node>;
72
+ readonly edges: readonly Edge[];
73
+ readonly config: Required<GraphConfig>;
74
+ readonly hooks: HookRegistryImplementation;
75
+ private readonly _sources;
76
+ private _initialized;
77
+ constructor(options: GraphOptions);
78
+ /**
79
+ * Initialize the graph. Invokes the {@link MultiAgentInitializedEvent} callback.
80
+ * Called automatically on first invocation.
81
+ */
82
+ initialize(): Promise<void>;
83
+ /**
84
+ * Invoke graph and return final result (consumes stream).
85
+ *
86
+ * @param input - The input to pass to entry point nodes
87
+ * @returns Promise resolving to the final MultiAgentResult
88
+ */
89
+ invoke(input: InvokeArgs): Promise<MultiAgentResult>;
90
+ /**
91
+ * Stream graph execution, yielding events as nodes execute.
92
+ * Invokes hook callbacks for each event before yielding.
93
+ *
94
+ * @param input - The input to pass to entry nodes
95
+ * @returns Async generator yielding streaming events and returning a MultiAgentResult
96
+ */
97
+ stream(input: InvokeArgs): AsyncGenerator<MultiAgentStreamEvent, MultiAgentResult, undefined>;
98
+ private _stream;
99
+ /**
100
+ * Executes a single node, pushing streaming events to the shared queue in real-time.
101
+ */
102
+ private _streamNode;
103
+ private _validateConfig;
104
+ private _validateSources;
105
+ private _resolveNodes;
106
+ private _resolveEdges;
107
+ private _resolveSources;
108
+ /**
109
+ * Identifies terminus nodes and returns their combined content.
110
+ * A terminus node is where an execution path ended: completed with no
111
+ * downstream progress, or failed/cancelled.
112
+ */
113
+ private _resolveContent;
114
+ /**
115
+ * Builds the input for a node by combining the original task with dependency outputs.
116
+ */
117
+ private _resolveNodeInput;
118
+ private _checkSteps;
119
+ /**
120
+ * Finds downstream nodes that are ready to execute after a node completes.
121
+ * A target is ready when all its incoming edge sources are COMPLETED.
122
+ */
123
+ private _findReady;
124
+ }
125
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/multiagent/graph.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAInD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAA6B,IAAI,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAmB,gBAAgB,EAAsB,MAAM,YAAY,CAAA;AAClF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAWxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,+DAA+D;IAC/D,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,oDAAoD;IACpD,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,6DAA6D;IAC7D,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,qDAAqD;IACrD,KAAK,CAAC,EAAE,YAAY,EAAE,CAAA;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,KAAM,YAAW,cAAc;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAA;IACtC,QAAQ,CAAC,KAAK,EAAE,0BAA0B,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,YAAY;IAqBjC;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAS1D;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,SAAS,CAAC;YAmBrF,OAAO;IAmEtB;;OAEG;YACW,WAAW;IA6DzB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,eAAe;IAiBvB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,WAAW;IAMnB;;;OAGG;YACW,UAAU;CAuBzB"}