@strands-agents/sdk 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +6 -0
  2. package/dist/src/__tests__/interrupt.test.js +13 -8
  3. package/dist/src/__tests__/interrupt.test.js.map +1 -1
  4. package/dist/src/__tests__/mcp.test.js +221 -7
  5. package/dist/src/__tests__/mcp.test.js.map +1 -1
  6. package/dist/src/agent/__tests__/agent.interrupt.test.js +54 -5
  7. package/dist/src/agent/__tests__/agent.interrupt.test.js.map +1 -1
  8. package/dist/src/agent/__tests__/agent.test.js +56 -0
  9. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  10. package/dist/src/agent/__tests__/snapshot.test.js +98 -0
  11. package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
  12. package/dist/src/agent/agent-as-tool.d.ts.map +1 -1
  13. package/dist/src/agent/agent-as-tool.js +2 -3
  14. package/dist/src/agent/agent-as-tool.js.map +1 -1
  15. package/dist/src/agent/agent.d.ts +59 -0
  16. package/dist/src/agent/agent.d.ts.map +1 -1
  17. package/dist/src/agent/agent.js +86 -10
  18. package/dist/src/agent/agent.js.map +1 -1
  19. package/dist/src/agent/snapshot.d.ts +9 -17
  20. package/dist/src/agent/snapshot.d.ts.map +1 -1
  21. package/dist/src/agent/snapshot.js +9 -17
  22. package/dist/src/agent/snapshot.js.map +1 -1
  23. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +371 -39
  24. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
  25. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +26 -7
  26. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  27. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +192 -41
  28. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  29. package/dist/src/hooks/events.d.ts +24 -3
  30. package/dist/src/hooks/events.d.ts.map +1 -1
  31. package/dist/src/hooks/events.js +26 -4
  32. package/dist/src/hooks/events.js.map +1 -1
  33. package/dist/src/hooks/index.d.ts +1 -1
  34. package/dist/src/hooks/index.d.ts.map +1 -1
  35. package/dist/src/hooks/index.js +1 -1
  36. package/dist/src/hooks/index.js.map +1 -1
  37. package/dist/src/index.d.ts +6 -4
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +4 -2
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/interrupt.d.ts +29 -2
  42. package/dist/src/interrupt.d.ts.map +1 -1
  43. package/dist/src/interrupt.js +45 -3
  44. package/dist/src/interrupt.js.map +1 -1
  45. package/dist/src/mcp.d.ts +38 -2
  46. package/dist/src/mcp.d.ts.map +1 -1
  47. package/dist/src/mcp.js +84 -7
  48. package/dist/src/mcp.js.map +1 -1
  49. package/dist/src/models/__tests__/anthropic.test.js +23 -8
  50. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  51. package/dist/src/models/__tests__/bedrock.test.js +43 -20
  52. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  53. package/dist/src/models/__tests__/google.test.js +14 -6
  54. package/dist/src/models/__tests__/google.test.js.map +1 -1
  55. package/dist/src/models/anthropic.d.ts +5 -3
  56. package/dist/src/models/anthropic.d.ts.map +1 -1
  57. package/dist/src/models/anthropic.js +11 -3
  58. package/dist/src/models/anthropic.js.map +1 -1
  59. package/dist/src/models/bedrock.d.ts +6 -7
  60. package/dist/src/models/bedrock.d.ts.map +1 -1
  61. package/dist/src/models/bedrock.js +31 -18
  62. package/dist/src/models/bedrock.js.map +1 -1
  63. package/dist/src/models/google/model.js +1 -1
  64. package/dist/src/models/google/model.js.map +1 -1
  65. package/dist/src/models/google/types.d.ts +5 -3
  66. package/dist/src/models/google/types.d.ts.map +1 -1
  67. package/dist/src/models/openai/__tests__/chat.test.js +10 -2
  68. package/dist/src/models/openai/__tests__/chat.test.js.map +1 -1
  69. package/dist/src/models/openai/__tests__/responses.test.js +19 -0
  70. package/dist/src/models/openai/__tests__/responses.test.js.map +1 -1
  71. package/dist/src/models/openai/errors.d.ts.map +1 -1
  72. package/dist/src/models/openai/errors.js +7 -4
  73. package/dist/src/models/openai/errors.js.map +1 -1
  74. package/dist/src/multiagent/__tests__/graph.tracer.test.js +14 -0
  75. package/dist/src/multiagent/__tests__/graph.tracer.test.js.map +1 -1
  76. package/dist/src/multiagent/__tests__/interrupts.test.d.ts +2 -0
  77. package/dist/src/multiagent/__tests__/interrupts.test.d.ts.map +1 -0
  78. package/dist/src/multiagent/__tests__/interrupts.test.js +390 -0
  79. package/dist/src/multiagent/__tests__/interrupts.test.js.map +1 -0
  80. package/dist/src/multiagent/__tests__/state.test.js +139 -1
  81. package/dist/src/multiagent/__tests__/state.test.js.map +1 -1
  82. package/dist/src/multiagent/events.d.ts +15 -1
  83. package/dist/src/multiagent/events.d.ts.map +1 -1
  84. package/dist/src/multiagent/events.js +18 -0
  85. package/dist/src/multiagent/events.js.map +1 -1
  86. package/dist/src/multiagent/graph.d.ts +37 -1
  87. package/dist/src/multiagent/graph.d.ts.map +1 -1
  88. package/dist/src/multiagent/graph.js +171 -43
  89. package/dist/src/multiagent/graph.js.map +1 -1
  90. package/dist/src/multiagent/multiagent.d.ts +78 -6
  91. package/dist/src/multiagent/multiagent.d.ts.map +1 -1
  92. package/dist/src/multiagent/multiagent.js +115 -1
  93. package/dist/src/multiagent/multiagent.js.map +1 -1
  94. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  95. package/dist/src/multiagent/nodes.js +55 -21
  96. package/dist/src/multiagent/nodes.js.map +1 -1
  97. package/dist/src/multiagent/state.d.ts +39 -3
  98. package/dist/src/multiagent/state.d.ts.map +1 -1
  99. package/dist/src/multiagent/state.js +80 -1
  100. package/dist/src/multiagent/state.js.map +1 -1
  101. package/dist/src/multiagent/swarm.d.ts +15 -0
  102. package/dist/src/multiagent/swarm.d.ts.map +1 -1
  103. package/dist/src/multiagent/swarm.js +127 -37
  104. package/dist/src/multiagent/swarm.js.map +1 -1
  105. package/dist/src/registry/__tests__/tool-registry.test.js +26 -0
  106. package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -1
  107. package/dist/src/registry/tool-registry.d.ts +9 -7
  108. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  109. package/dist/src/registry/tool-registry.js +29 -10
  110. package/dist/src/registry/tool-registry.js.map +1 -1
  111. package/dist/src/session/__tests__/session-manager.test.js +45 -3
  112. package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
  113. package/dist/src/session/session-manager.d.ts +5 -2
  114. package/dist/src/session/session-manager.d.ts.map +1 -1
  115. package/dist/src/session/session-manager.js +9 -6
  116. package/dist/src/session/session-manager.js.map +1 -1
  117. package/dist/src/telemetry/__tests__/meter.test.js +5 -27
  118. package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
  119. package/dist/src/telemetry/meter.d.ts +12 -4
  120. package/dist/src/telemetry/meter.d.ts.map +1 -1
  121. package/dist/src/telemetry/meter.js +13 -8
  122. package/dist/src/telemetry/meter.js.map +1 -1
  123. package/dist/src/tools/mcp-tool.d.ts.map +1 -1
  124. package/dist/src/tools/mcp-tool.js +3 -2
  125. package/dist/src/tools/mcp-tool.js.map +1 -1
  126. package/dist/src/tsconfig.tsbuildinfo +1 -1
  127. package/dist/src/types/__tests__/agent.test.js +97 -0
  128. package/dist/src/types/__tests__/agent.test.js.map +1 -1
  129. package/dist/src/types/agent.d.ts +26 -5
  130. package/dist/src/types/agent.d.ts.map +1 -1
  131. package/dist/src/types/agent.js +20 -3
  132. package/dist/src/types/agent.js.map +1 -1
  133. package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
  134. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
1
  import { logger } from '../logging/logger.js';
2
2
  import { warnOnce } from '../logging/warn-once.js';
3
+ import { applyOrchestratorHookResponses, dropStaleInterruptedResult, extractResumeResponses, groupInterruptResponsesByNode, recordHookInterrupt, } from './multiagent.js';
4
+ import { InterruptError } from '../interrupt.js';
3
5
  import { z } from 'zod';
4
6
  import { HookableEvent } from '../hooks/events.js';
5
7
  import { HookRegistryImplementation } from '../hooks/registry.js';
@@ -7,7 +9,7 @@ import { MultiAgentPluginRegistry } from './plugins.js';
7
9
  import { TextBlock } from '../types/messages.js';
8
10
  import { AgentNode } from './nodes.js';
9
11
  import { MultiAgentState, MultiAgentResult, NodeResult, Status } from './state.js';
10
- import { AfterMultiAgentInvocationEvent, AfterNodeCallEvent, BeforeMultiAgentInvocationEvent, BeforeNodeCallEvent, MultiAgentHandoffEvent, MultiAgentInitializedEvent, MultiAgentResultEvent, NodeCancelEvent, } from './events.js';
12
+ import { AfterMultiAgentInvocationEvent, AfterNodeCallEvent, BeforeMultiAgentInvocationEvent, BeforeNodeCallEvent, MultiAgentHandoffEvent, MultiAgentInitializedEvent, MultiAgentResultEvent, NodeCancelEvent, NodeResultEvent, } from './events.js';
11
13
  import { Tracer } from '../telemetry/tracer.js';
12
14
  import { normalizeError } from '../errors.js';
13
15
  /**
@@ -48,6 +50,13 @@ export class Swarm {
48
50
  start;
49
51
  sessionManager;
50
52
  _initialized;
53
+ /**
54
+ * State retained across invocations when a run ends INTERRUPTED. Lets
55
+ * `swarm.invoke(responses)` resume on the same instance without requiring a
56
+ * SessionManager, mirroring single-agent ergonomics. Cleared when a run
57
+ * terminates in any non-INTERRUPTED state.
58
+ */
59
+ _pendingInterruptState;
51
60
  constructor(options) {
52
61
  const { id, nodes, start, sessionManager, plugins, traceAttributes, ...config } = options;
53
62
  this.id = id ?? 'swarm';
@@ -123,60 +132,106 @@ export class Swarm {
123
132
  // Shared by reference across every node so mutations in one node's agent
124
133
  // are visible to the next.
125
134
  const invocationState = options?.invocationState ?? {};
126
- const gen = this._stream(input, invocationState);
135
+ // Hook invocation lives in `_stream` so hook-raised `InterruptError`s land in the
136
+ // same frame as the execution loop.
137
+ const gen = this._stream(input, invocationState, options?.cancelSignal);
127
138
  let next = await gen.next();
128
139
  while (!next.done) {
129
- if (next.value instanceof HookableEvent) {
130
- await this._hookRegistry.invokeCallbacks(next.value);
131
- }
132
140
  yield next.value;
133
141
  next = await gen.next();
134
142
  }
135
143
  return next.value;
136
144
  }
137
- async *_stream(input, invocationState) {
138
- const state = new MultiAgentState({
139
- nodeIds: [...this.nodes.keys()],
140
- });
145
+ async *_stream(input, invocationState, externalCancelSignal) {
146
+ // Reuse state from a prior INTERRUPTED run so `swarm.invoke(responses)` can
147
+ // resume on the same instance without a SessionManager.
148
+ const state = this._pendingInterruptState ??
149
+ new MultiAgentState({
150
+ nodeIds: [...this.nodes.keys()],
151
+ });
152
+ delete this._pendingInterruptState;
141
153
  const multiAgentSpan = this._tracer.startMultiAgentSpan({
142
154
  orchestratorId: this.id,
143
155
  orchestratorType: 'swarm',
144
156
  input,
145
157
  });
146
158
  // SessionManager (or plugins) may restore state.results here via the hook
147
- yield new BeforeMultiAgentInvocationEvent({ orchestrator: this, state, invocationState });
148
- // Resume: if state was restored from a snapshot, derive the next node from the last handoff
149
- const resumeNode = this._findResumeNode(state);
150
- let node = resumeNode?.node ?? this.start;
151
- let handoff = resumeNode?.lastHandoff;
159
+ yield* this._emit(new BeforeMultiAgentInvocationEvent({ orchestrator: this, state, invocationState }));
160
+ // Resume input bypasses handoff-derived resume (goes straight to the interrupted
161
+ // node). On fresh runs, stash the input for replay if a hook-gate pauses before
162
+ // the node runs.
163
+ const resumeResponses = extractResumeResponses(input);
164
+ const interruptResponsesByNode = resumeResponses ? groupInterruptResponsesByNode(resumeResponses, state) : undefined;
165
+ if (!resumeResponses) {
166
+ state._pendingInput = input;
167
+ }
168
+ let node;
169
+ let handoff;
170
+ let nextInput = input;
171
+ if (interruptResponsesByNode) {
172
+ // Swarm runs sequentially, so at most one node can be INTERRUPTED per run.
173
+ // Assert the invariant so a future change that accidentally produces multiple
174
+ // interrupted nodes surfaces loudly rather than silently taking the first.
175
+ if (interruptResponsesByNode.size > 1) {
176
+ throw new Error(`swarm_id=<${this.id}>, interrupted_nodes=<${[...interruptResponsesByNode.keys()].join(',')}> | swarm cannot have multiple interrupted nodes simultaneously`);
177
+ }
178
+ const entry = interruptResponsesByNode.entries().next().value;
179
+ if (!entry)
180
+ throw new Error(`swarm_id=<${this.id}> | no interrupt responses to route`);
181
+ const [nodeId, responses] = entry;
182
+ const resolvedNode = this.nodes.get(nodeId);
183
+ if (!resolvedNode) {
184
+ throw new Error(`node_id=<${nodeId}>, swarm_id=<${this.id}> | resume response targets a node missing from the swarm; topology changed between save and resume?`);
185
+ }
186
+ node = resolvedNode;
187
+ const resolvedNodeState = state.node(nodeId);
188
+ if (!resolvedNodeState) {
189
+ throw new Error(`node_id=<${nodeId}>, swarm_id=<${this.id}> | routed interrupt response targets a node missing from state; topology changed between save and resume?`);
190
+ }
191
+ // Orchestrator hooks consume matching responses; leftovers go to the child
192
+ // agent. If the hook consumed everything, replay the original invocation input.
193
+ const forwarded = applyOrchestratorHookResponses(resolvedNodeState, responses);
194
+ nextInput = forwarded.length > 0 ? forwarded : (state._pendingInput ?? '');
195
+ }
196
+ else {
197
+ const resumeNode = this._findResumeNode(state);
198
+ node = resumeNode?.node ?? this.start;
199
+ handoff = resumeNode?.lastHandoff;
200
+ }
152
201
  let caughtError;
153
202
  let result;
154
- // Swarm-level timeout: when fired, composes with each node's per-node signal so a node
155
- // that hangs and ignores its own signal still gets an abort when the overall budget expires.
156
- // The between-steps elapsed check below handles the case where the current node returned
157
- // cleanly but we've run out of budget.
203
+ // Swarm-level timeout composes with each node's signal so a hung node still gets
204
+ // aborted. Timer starts fresh per invocation; human response time between resumes
205
+ // is not deducted.
158
206
  const execController = Number.isFinite(this.config.timeout) ? new AbortController() : undefined;
159
207
  const execTimeoutHandle = execController ? setTimeout(() => execController.abort(), this.config.timeout) : undefined;
208
+ const nodeCancelSignal = execController && externalCancelSignal
209
+ ? AbortSignal.any([execController.signal, externalCancelSignal])
210
+ : (execController?.signal ?? externalCancelSignal);
160
211
  try {
161
212
  while (state.steps < this.config.maxSteps) {
162
- const elapsed = Date.now() - state.startTime;
163
- if (elapsed >= this.config.timeout) {
213
+ if (execController?.signal.aborted) {
164
214
  throw new Error(`timeout=<${this.config.timeout}>, swarm_id=<${this.id}> | swarm exceeded wall-clock budget`);
165
215
  }
216
+ if (externalCancelSignal?.aborted) {
217
+ throw new Error(`swarm_id=<${this.id}> | swarm cancelled by external signal`);
218
+ }
166
219
  state.steps++;
167
- // Execute current node
168
- const nodeResult = yield* this._streamNode(node, input, state, handoff, multiAgentSpan, invocationState, execController?.signal);
220
+ // After the first step (which may use routed resume responses), revert to the
221
+ // original input so post-handoff nodes see fresh content.
222
+ const nodeResult = yield* this._streamNode(node, nextInput, state, handoff, multiAgentSpan, invocationState, nodeCancelSignal);
223
+ nextInput = input;
169
224
  handoff = nodeResult.structuredOutput;
170
225
  if (execController?.signal.aborted) {
171
226
  throw new Error(`timeout=<${this.config.timeout}>, swarm_id=<${this.id}>, node_id=<${node.id}> | swarm exceeded wall-clock budget during node execution`);
172
227
  }
173
228
  // Check for terminal conditions
174
- if (nodeResult.status === Status.FAILED || !handoff?.agentId) {
229
+ if (nodeResult.status === Status.FAILED || nodeResult.status === Status.INTERRUPTED || !handoff?.agentId) {
175
230
  break;
176
231
  }
177
232
  // Hand off to next agent
178
233
  const target = this.nodes.get(handoff.agentId);
179
- yield new MultiAgentHandoffEvent({ source: node.id, targets: [target.id], state, invocationState });
234
+ yield* this._emit(new MultiAgentHandoffEvent({ source: node.id, targets: [target.id], state, invocationState }));
180
235
  logger.debug(`source=<${node.id}>, target=<${target.id}> | swarm handoff`);
181
236
  node = target;
182
237
  }
@@ -186,6 +241,14 @@ export class Swarm {
186
241
  content: this._resolveContent(state),
187
242
  duration: Date.now() - state.startTime,
188
243
  });
244
+ // Stash on interrupt so same-instance resume has state; otherwise start fresh.
245
+ if (result.status === Status.INTERRUPTED) {
246
+ this._pendingInterruptState = state;
247
+ }
248
+ else {
249
+ delete this._pendingInterruptState;
250
+ delete state._pendingInput;
251
+ }
189
252
  }
190
253
  catch (error) {
191
254
  caughtError = normalizeError(error);
@@ -199,25 +262,47 @@ export class Swarm {
199
262
  ...(result && { usage: result.usage }),
200
263
  ...(caughtError && { error: caughtError }),
201
264
  });
202
- yield new AfterMultiAgentInvocationEvent({ orchestrator: this, state, invocationState });
265
+ yield* this._emit(new AfterMultiAgentInvocationEvent({ orchestrator: this, state, invocationState }));
203
266
  }
204
- yield new MultiAgentResultEvent({ result, invocationState });
267
+ yield* this._emit(new MultiAgentResultEvent({ result, invocationState }));
205
268
  return result;
206
269
  }
270
+ /** Invokes hook callbacks on an event, then yields it. */
271
+ async *_emit(event) {
272
+ await this._hookRegistry.invokeCallbacks(event);
273
+ yield event;
274
+ }
207
275
  async *_streamNode(node, input, state, handoff, multiAgentSpan, invocationState, executionSignal) {
208
276
  const nodeState = state.node(node.id);
209
277
  const handoffSchema = this._buildHandoffSchema(node.id);
210
278
  const nodeSpan = this._tracer.withSpanContext(multiAgentSpan, () => this._tracer.startNodeSpan({ nodeId: node.id, nodeType: node.type }));
211
279
  const beforeEvent = new BeforeNodeCallEvent({ orchestrator: this, state, nodeId: node.id, invocationState });
280
+ try {
281
+ await this._hookRegistry.invokeCallbacks(beforeEvent);
282
+ }
283
+ catch (error) {
284
+ if (error instanceof InterruptError) {
285
+ const result = recordHookInterrupt(node.id, nodeState);
286
+ state.results.push(result);
287
+ yield beforeEvent;
288
+ yield* this._emit(new NodeResultEvent({ nodeId: node.id, nodeType: node.type, state, result, invocationState }));
289
+ yield* this._emit(new AfterNodeCallEvent({ orchestrator: this, state, nodeId: node.id, invocationState }));
290
+ this._tracer.endNodeSpan(nodeSpan, { status: Status.INTERRUPTED, duration: result.duration });
291
+ return result;
292
+ }
293
+ throw error;
294
+ }
212
295
  yield beforeEvent;
213
296
  if (beforeEvent.cancel) {
214
297
  const message = typeof beforeEvent.cancel === 'string' ? beforeEvent.cancel : 'node cancelled by hook';
298
+ // Cancel path doesn't go through Node.stream, so do its INTERRUPTED cleanup here.
299
+ dropStaleInterruptedResult(node.id, nodeState, state);
215
300
  const result = new NodeResult({ nodeId: node.id, status: Status.CANCELLED, duration: 0 });
216
301
  nodeState.status = Status.CANCELLED;
217
302
  nodeState.results.push(result);
218
303
  state.results.push(result);
219
- yield new NodeCancelEvent({ nodeId: node.id, state, message, invocationState });
220
- yield new AfterNodeCallEvent({ orchestrator: this, state, nodeId: node.id, invocationState });
304
+ yield* this._emit(new NodeCancelEvent({ nodeId: node.id, state, message, invocationState }));
305
+ yield* this._emit(new AfterNodeCallEvent({ orchestrator: this, state, nodeId: node.id, invocationState }));
221
306
  this._tracer.endNodeSpan(nodeSpan, { status: Status.CANCELLED, duration: 0 });
222
307
  return result;
223
308
  }
@@ -235,7 +320,12 @@ export class Swarm {
235
320
  }));
236
321
  let next = await this._tracer.withSpanContext(nodeSpan, () => gen.next());
237
322
  while (!next.done) {
238
- yield next.value;
323
+ if (next.value instanceof HookableEvent) {
324
+ yield* this._emit(next.value);
325
+ }
326
+ else {
327
+ yield next.value;
328
+ }
239
329
  next = await this._tracer.withSpanContext(nodeSpan, () => gen.next());
240
330
  }
241
331
  if (timeoutController?.signal.aborted) {
@@ -244,19 +334,13 @@ export class Swarm {
244
334
  const result = next.value;
245
335
  this._tracer.endNodeSpan(nodeSpan, { status: result.status, duration: result.duration, usage: result.usage });
246
336
  state.results.push(result);
247
- yield new AfterNodeCallEvent({ orchestrator: this, state, nodeId: node.id, invocationState });
337
+ yield* this._emit(new AfterNodeCallEvent({ orchestrator: this, state, nodeId: node.id, invocationState }));
248
338
  return result;
249
339
  }
250
340
  catch (error) {
251
341
  const nodeError = normalizeError(error);
252
342
  this._tracer.endNodeSpan(nodeSpan, { error: nodeError });
253
- yield new AfterNodeCallEvent({
254
- orchestrator: this,
255
- state,
256
- nodeId: node.id,
257
- invocationState,
258
- error: nodeError,
259
- });
343
+ yield* this._emit(new AfterNodeCallEvent({ orchestrator: this, state, nodeId: node.id, invocationState, error: nodeError }));
260
344
  throw nodeError;
261
345
  }
262
346
  finally {
@@ -308,6 +392,12 @@ export class Swarm {
308
392
  }
309
393
  return [...last.content];
310
394
  }
395
+ /**
396
+ * Builds the input for the next node after a handoff, or returns the input as-is
397
+ * when there is no handoff (initial or resume invocation). The caller passes the
398
+ * original `MultiAgentInput` through; resume responses flow through here untouched
399
+ * so the underlying agent sees them directly.
400
+ */
311
401
  _resolveNodeInput(input, handoff) {
312
402
  if (!handoff)
313
403
  return input;
@@ -1 +1 @@
1
- {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../../src/multiagent/swarm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../../src/multiagent/swarm.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,11 @@ describe('ToolRegistry', () => {
39
39
  expect(() => registry.add(createMockTool({ name: 'duplicate' }))).toThrow(ToolValidationError);
40
40
  expect(() => registry.add(createMockTool({ name: 'duplicate' }))).toThrow("Tool with name 'duplicate' already registered");
41
41
  });
42
+ it("throws ToolValidationError when a name differs only by '-' vs '_'", () => {
43
+ registry.add(createMockTool({ name: 'foo-bar' }));
44
+ expect(() => registry.add(createMockTool({ name: 'foo_bar' }))).toThrow(ToolValidationError);
45
+ expect(() => registry.add(createMockTool({ name: 'foo_bar' }))).toThrow("Tool name 'foo_bar' already exists as 'foo-bar'. Cannot add a duplicate tool which differs by a '-' or '_'");
46
+ });
42
47
  it('throws ToolValidationError for an invalid tool name pattern', () => {
43
48
  expect(() => registry.add(createMockTool({ name: 'invalid name!' }))).toThrow(ToolValidationError);
44
49
  expect(() => registry.add(createMockTool({ name: 'invalid name!' }))).toThrow('Tool name must contain only alphanumeric characters, hyphens, and underscores');
@@ -82,6 +87,27 @@ describe('ToolRegistry', () => {
82
87
  expect(() => registry.add(tool)).not.toThrow();
83
88
  });
84
89
  });
90
+ describe('addOrReplace', () => {
91
+ it('registers tools', () => {
92
+ const tool = createMockTool({ name: 'tool-1' });
93
+ registry.addOrReplace([tool]);
94
+ expect(registry.get('tool-1')).toBe(tool);
95
+ });
96
+ it('replaces an existing tool with the same name', () => {
97
+ const original = createMockTool({ name: 'tool-1', description: 'original' });
98
+ const replacement = createMockTool({ name: 'tool-1', description: 'replacement' });
99
+ registry.add(original);
100
+ registry.addOrReplace([replacement]);
101
+ expect(registry.get('tool-1')).toBe(replacement);
102
+ });
103
+ it('validates tool properties', () => {
104
+ expect(() => registry.addOrReplace([createMockTool({ name: 'invalid name!' })])).toThrow(ToolValidationError);
105
+ });
106
+ it("throws ToolValidationError when a new tool name differs only by '-' vs '_'", () => {
107
+ registry.add(createMockTool({ name: 'foo-bar' }));
108
+ expect(() => registry.addOrReplace([createMockTool({ name: 'foo_bar' })])).toThrow(ToolValidationError);
109
+ });
110
+ });
85
111
  describe('get', () => {
86
112
  it('retrieves a tool by name', () => {
87
113
  const tool = createMockTool({ name: 'find-me' });
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.test.js","sourceRoot":"","sources":["../../../../src/registry/__tests__/tool-registry.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-registry.test.js","sourceRoot":"","sources":["../../../../src/registry/__tests__/tool-registry.test.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,13 @@ export declare class ToolRegistry {
17
17
  * @throws ToolValidationError If a tool's properties are invalid or its name is already registered
18
18
  */
19
19
  add(tool: Tool | Tool[]): void;
20
+ /**
21
+ * Registers one or more tools, replacing any existing tools with the same name.
22
+ *
23
+ * @param tools - Array of tools to register
24
+ * @throws ToolValidationError If a tool's properties are invalid
25
+ */
26
+ addOrReplace(newTools: Tool[]): void;
20
27
  /**
21
28
  * Retrieves a tool by name.
22
29
  *
@@ -40,12 +47,7 @@ export declare class ToolRegistry {
40
47
  * @returns Array of all registered tools
41
48
  */
42
49
  list(): Tool[];
43
- /**
44
- * Validates a tool before registration.
45
- *
46
- * @param tool - The tool to validate
47
- * @throws ToolValidationError If the tool's properties are invalid or its name is already registered
48
- */
49
- private _validate;
50
+ private _validateProperties;
51
+ private _checkNormalizedConflict;
50
52
  }
51
53
  //# sourceMappingURL=tool-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/registry/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAG5C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA+B;IAE7C;;;;OAIG;gBACS,KAAK,CAAC,EAAE,IAAI,EAAE;IAM1B;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI;IAQ9B;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,IAAI,IAAI,EAAE;IAId;;;;;OAKG;IACH,OAAO,CAAC,SAAS;CAwBlB"}
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../src/registry/tool-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AAG5C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA+B;IAE7C;;;;OAIG;gBACS,KAAK,CAAC,EAAE,IAAI,EAAE;IAM1B;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI;IAY9B;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI;IAUpC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAInC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,IAAI,IAAI,IAAI,EAAE;IAId,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,wBAAwB;CAWjC"}
@@ -23,10 +23,29 @@ export class ToolRegistry {
23
23
  add(tool) {
24
24
  const tools = Array.isArray(tool) ? tool : [tool];
25
25
  for (const t of tools) {
26
- this._validate(t);
26
+ this._validateProperties(t);
27
+ if (this._tools.has(t.name)) {
28
+ throw new ToolValidationError(`Tool with name '${t.name}' already registered`);
29
+ }
30
+ this._checkNormalizedConflict(t.name);
27
31
  this._tools.set(t.name, t);
28
32
  }
29
33
  }
34
+ /**
35
+ * Registers one or more tools, replacing any existing tools with the same name.
36
+ *
37
+ * @param tools - Array of tools to register
38
+ * @throws ToolValidationError If a tool's properties are invalid
39
+ */
40
+ addOrReplace(newTools) {
41
+ for (const tool of newTools) {
42
+ this._validateProperties(tool);
43
+ if (!this._tools.has(tool.name)) {
44
+ this._checkNormalizedConflict(tool.name);
45
+ }
46
+ this._tools.set(tool.name, tool);
47
+ }
48
+ }
30
49
  /**
31
50
  * Retrieves a tool by name.
32
51
  *
@@ -58,13 +77,7 @@ export class ToolRegistry {
58
77
  list() {
59
78
  return Array.from(this._tools.values());
60
79
  }
61
- /**
62
- * Validates a tool before registration.
63
- *
64
- * @param tool - The tool to validate
65
- * @throws ToolValidationError If the tool's properties are invalid or its name is already registered
66
- */
67
- _validate(tool) {
80
+ _validateProperties(tool) {
68
81
  if (typeof tool.name !== 'string') {
69
82
  throw new ToolValidationError('Tool name must be a string');
70
83
  }
@@ -80,8 +93,14 @@ export class ToolRegistry {
80
93
  throw new ToolValidationError('Tool description must be a non-empty string');
81
94
  }
82
95
  }
83
- if (this._tools.has(tool.name)) {
84
- throw new ToolValidationError(`Tool with name '${tool.name}' already registered`);
96
+ }
97
+ _checkNormalizedConflict(name) {
98
+ const normalized = name.replaceAll('-', '_');
99
+ for (const existing of this._tools.keys()) {
100
+ if (existing !== name && existing.replaceAll('-', '_') === normalized) {
101
+ throw new ToolValidationError(`Tool name '${name}' already exists as '${existing}'.` +
102
+ " Cannot add a duplicate tool which differs by a '-' or '_'");
103
+ }
85
104
  }
86
105
  }
87
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../../src/registry/tool-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,GAAsB,IAAI,GAAG,EAAE,CAAA;IAE7C;;;;OAIG;IACH,YAAY,KAAc;QACxB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAmB;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACjD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;YACjB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACzC,CAAC;IAED;;;;;OAKG;IACK,SAAS,CAAC,IAAU;QAC1B,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAA;QAC7D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,mBAAmB,CAAC,+CAA+C,CAAC,CAAA;QAChF,CAAC;QAED,MAAM,gBAAgB,GAAG,kBAAkB,CAAA;QAC3C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,mBAAmB,CAAC,+EAA+E,CAAC,CAAA;QAChH,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAChE,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,mBAAmB,CAAC,6CAA6C,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,mBAAmB,CAAC,mBAAmB,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAA;QACnF,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../../src/registry/tool-registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD;;GAEG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,GAAsB,IAAI,GAAG,EAAE,CAAA;IAE7C;;;;OAIG;IACH,YAAY,KAAc;QACxB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAmB;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACjD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAA;YAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,IAAI,sBAAsB,CAAC,CAAA;YAChF,CAAC;YACD,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;YACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,YAAY,CAAC,QAAgB;QAC3B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;YAC9B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC1C,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QAClC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,IAAY;QACjB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;IAED;;;;OAIG;IACH,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAA;IACzC,CAAC;IAEO,mBAAmB,CAAC,IAAU;QACpC,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,MAAM,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAA;QAC7D,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,mBAAmB,CAAC,+CAA+C,CAAC,CAAA;QAChF,CAAC;QAED,MAAM,gBAAgB,GAAG,kBAAkB,CAAA;QAC3C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,mBAAmB,CAAC,+EAA+E,CAAC,CAAA;QAChH,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAChE,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,MAAM,IAAI,mBAAmB,CAAC,6CAA6C,CAAC,CAAA;YAC9E,CAAC;QACH,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,IAAY;QAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC5C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,UAAU,EAAE,CAAC;gBACtE,MAAM,IAAI,mBAAmB,CAC3B,cAAc,IAAI,wBAAwB,QAAQ,IAAI;oBACpD,4DAA4D,CAC/D,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -9,6 +9,7 @@ import { loadStateFromJSONSymbol, stateToJSONSymbol } from '../../types/serializ
9
9
  import { StateStore } from '../../state-store.js';
10
10
  import { logger } from '../../logging/logger.js';
11
11
  import { AfterMultiAgentInvocationEvent, AfterNodeCallEvent, BeforeMultiAgentInvocationEvent, Graph, MultiAgentState, NodeResult, Status, } from '../../multiagent/index.js';
12
+ import { takeSnapshot, loadSnapshot } from '../../agent/snapshot.js';
12
13
  // Test fixtures
13
14
  function createMockAgent(id = 'agent') {
14
15
  const agent = {
@@ -31,6 +32,12 @@ function createMockAgent(id = 'agent') {
31
32
  },
32
33
  modelState: new StateStore(),
33
34
  systemPrompt: 'Test prompt',
35
+ takeSnapshot(options) {
36
+ return takeSnapshot(agent, options);
37
+ },
38
+ loadSnapshot(snapshot) {
39
+ loadSnapshot(agent, snapshot);
40
+ },
34
41
  };
35
42
  return agent;
36
43
  }
@@ -502,17 +509,52 @@ describe('SessionManager', () => {
502
509
  });
503
510
  expect(snapshot).toBeNull();
504
511
  });
505
- it('does not save when saveLatestOn is invocation', async () => {
512
+ it.each(['invocation', 'message'])('saves snapshot_latest on redaction when saveLatestOn is %s', async (saveLatestOn) => {
506
513
  sessionManager = new SessionManager({
507
514
  sessionId: 'test-session',
508
515
  storage: { snapshot: storage },
509
- saveLatestOn: 'invocation',
516
+ saveLatestOn,
517
+ });
518
+ const assistantMessage = new Message({ role: 'assistant', content: [new TextBlock('Response')] });
519
+ const event = new AfterModelCallEvent({
520
+ agent: mockAgent,
521
+ model: {},
522
+ stopData: {
523
+ message: assistantMessage,
524
+ stopReason: 'endTurn',
525
+ redaction: { userMessage: '[User input redacted.]' },
526
+ },
527
+ });
528
+ await initPluginAndInvokeHook(sessionManager, event);
529
+ const snapshot = await storage.loadSnapshot({
530
+ location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
531
+ });
532
+ expect(snapshot).not.toBeNull();
533
+ });
534
+ it('does not register AfterModelCallEvent hook when saveLatestOn is trigger', async () => {
535
+ sessionManager = new SessionManager({
536
+ sessionId: 'test-session',
537
+ storage: { snapshot: storage },
538
+ saveLatestOn: 'trigger',
510
539
  });
511
- // AfterModelCallEvent hook is not registered when saveLatestOn is 'invocation'
512
540
  const pluginAgent = createMockAgentWithHooks();
513
541
  sessionManager.initAgent(pluginAgent);
514
542
  const afterModelHook = pluginAgent.trackedHooks.find((h) => h.eventType === AfterModelCallEvent);
515
543
  expect(afterModelHook).toBeUndefined();
544
+ });
545
+ it('does not save on AfterModelCallEvent without redaction under saveLatestOn=invocation', async () => {
546
+ sessionManager = new SessionManager({
547
+ sessionId: 'test-session',
548
+ storage: { snapshot: storage },
549
+ saveLatestOn: 'invocation',
550
+ });
551
+ const assistantMessage = new Message({ role: 'assistant', content: [new TextBlock('Response')] });
552
+ const event = new AfterModelCallEvent({
553
+ agent: mockAgent,
554
+ model: {},
555
+ stopData: { message: assistantMessage, stopReason: 'endTurn' },
556
+ });
557
+ await initPluginAndInvokeHook(sessionManager, event);
516
558
  const snapshot = await storage.loadSnapshot({
517
559
  location: { sessionId: 'test-session', scope: 'agent', scopeId: 'test-agent' },
518
560
  });