@strands-agents/sdk 0.3.0 → 0.4.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 (215) hide show
  1. package/README.md +43 -0
  2. package/dist/src/__fixtures__/mock-hook-provider.d.ts +3 -7
  3. package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -1
  4. package/dist/src/__fixtures__/mock-hook-provider.js +3 -9
  5. package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -1
  6. package/dist/src/__fixtures__/mock-message-model.d.ts +8 -2
  7. package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
  8. package/dist/src/__fixtures__/mock-message-model.js +1 -0
  9. package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
  10. package/dist/src/__fixtures__/mock-storage-provider.d.ts +37 -0
  11. package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +1 -0
  12. package/dist/src/__fixtures__/mock-storage-provider.js +105 -0
  13. package/dist/src/__fixtures__/mock-storage-provider.js.map +1 -0
  14. package/dist/src/__fixtures__/slim-types.d.ts +50 -0
  15. package/dist/src/__fixtures__/slim-types.d.ts.map +1 -0
  16. package/dist/src/__fixtures__/slim-types.js +6 -0
  17. package/dist/src/__fixtures__/slim-types.js.map +1 -0
  18. package/dist/src/__fixtures__/tool-helpers.d.ts +8 -3
  19. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
  20. package/dist/src/__fixtures__/tool-helpers.js +1 -1
  21. package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
  22. package/dist/src/agent/__tests__/agent.hook.test.js +18 -18
  23. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
  24. package/dist/src/agent/__tests__/agent.test.js +124 -8
  25. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  26. package/dist/src/agent/__tests__/printer.test.js +5 -9
  27. package/dist/src/agent/__tests__/printer.test.js.map +1 -1
  28. package/dist/src/agent/__tests__/snapshot.test.d.ts +2 -0
  29. package/dist/src/agent/__tests__/snapshot.test.d.ts.map +1 -0
  30. package/dist/src/agent/__tests__/snapshot.test.js +249 -0
  31. package/dist/src/agent/__tests__/snapshot.test.js.map +1 -0
  32. package/dist/src/agent/__tests__/state.test.js +19 -0
  33. package/dist/src/agent/__tests__/state.test.js.map +1 -1
  34. package/dist/src/agent/agent.d.ts +19 -4
  35. package/dist/src/agent/agent.d.ts.map +1 -1
  36. package/dist/src/agent/agent.js +104 -34
  37. package/dist/src/agent/agent.js.map +1 -1
  38. package/dist/src/agent/printer.d.ts +4 -0
  39. package/dist/src/agent/printer.d.ts.map +1 -1
  40. package/dist/src/agent/printer.js +18 -6
  41. package/dist/src/agent/printer.js.map +1 -1
  42. package/dist/src/agent/snapshot.d.ts +132 -0
  43. package/dist/src/agent/snapshot.d.ts.map +1 -0
  44. package/dist/src/agent/snapshot.js +151 -0
  45. package/dist/src/agent/snapshot.js.map +1 -0
  46. package/dist/src/agent/state.d.ts +14 -1
  47. package/dist/src/agent/state.d.ts.map +1 -1
  48. package/dist/src/agent/state.js +21 -0
  49. package/dist/src/agent/state.js.map +1 -1
  50. package/dist/src/errors.d.ts +15 -0
  51. package/dist/src/errors.d.ts.map +1 -1
  52. package/dist/src/errors.js +18 -0
  53. package/dist/src/errors.js.map +1 -1
  54. package/dist/src/hooks/__tests__/events.test.js +102 -21
  55. package/dist/src/hooks/__tests__/events.test.js.map +1 -1
  56. package/dist/src/hooks/events.d.ts +156 -22
  57. package/dist/src/hooks/events.d.ts.map +1 -1
  58. package/dist/src/hooks/events.js +158 -18
  59. package/dist/src/hooks/events.js.map +1 -1
  60. package/dist/src/hooks/index.d.ts +12 -4
  61. package/dist/src/hooks/index.d.ts.map +1 -1
  62. package/dist/src/hooks/index.js +11 -3
  63. package/dist/src/hooks/index.js.map +1 -1
  64. package/dist/src/hooks/registry.d.ts +5 -5
  65. package/dist/src/hooks/registry.d.ts.map +1 -1
  66. package/dist/src/hooks/registry.js.map +1 -1
  67. package/dist/src/hooks/types.d.ts +5 -5
  68. package/dist/src/hooks/types.d.ts.map +1 -1
  69. package/dist/src/index.d.ts +4 -2
  70. package/dist/src/index.d.ts.map +1 -1
  71. package/dist/src/index.js +4 -3
  72. package/dist/src/index.js.map +1 -1
  73. package/dist/src/models/__tests__/anthropic.test.js +31 -42
  74. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  75. package/dist/src/models/__tests__/bedrock.test.js +70 -107
  76. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  77. package/dist/src/models/__tests__/gemini.test.js +18 -18
  78. package/dist/src/models/__tests__/gemini.test.js.map +1 -1
  79. package/dist/src/models/__tests__/model.test.js +14 -13
  80. package/dist/src/models/__tests__/model.test.js.map +1 -1
  81. package/dist/src/models/__tests__/openai.test.js +73 -83
  82. package/dist/src/models/__tests__/openai.test.js.map +1 -1
  83. package/dist/src/models/streaming.d.ts +8 -0
  84. package/dist/src/models/streaming.d.ts.map +1 -1
  85. package/dist/src/models/streaming.js +17 -0
  86. package/dist/src/models/streaming.js.map +1 -1
  87. package/dist/src/multiagent/__tests__/nodes.test.d.ts +2 -0
  88. package/dist/src/multiagent/__tests__/nodes.test.d.ts.map +1 -0
  89. package/dist/src/multiagent/__tests__/nodes.test.js +98 -0
  90. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -0
  91. package/dist/src/multiagent/events.d.ts +24 -0
  92. package/dist/src/multiagent/events.d.ts.map +1 -0
  93. package/dist/src/multiagent/events.js +19 -0
  94. package/dist/src/multiagent/events.js.map +1 -0
  95. package/dist/src/multiagent/index.d.ts +11 -0
  96. package/dist/src/multiagent/index.d.ts.map +1 -0
  97. package/dist/src/multiagent/index.js +7 -0
  98. package/dist/src/multiagent/index.js.map +1 -0
  99. package/dist/src/multiagent/nodes.d.ts +75 -0
  100. package/dist/src/multiagent/nodes.d.ts.map +1 -0
  101. package/dist/src/multiagent/nodes.js +101 -0
  102. package/dist/src/multiagent/nodes.js.map +1 -0
  103. package/dist/src/multiagent/state.d.ts +55 -0
  104. package/dist/src/multiagent/state.d.ts.map +1 -0
  105. package/dist/src/multiagent/state.js +43 -0
  106. package/dist/src/multiagent/state.js.map +1 -0
  107. package/dist/src/multiagent/types.d.ts +5 -0
  108. package/dist/src/multiagent/types.d.ts.map +1 -0
  109. package/dist/src/multiagent/types.js +2 -0
  110. package/dist/src/multiagent/types.js.map +1 -0
  111. package/dist/src/registry/tool-registry.d.ts +2 -1
  112. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  113. package/dist/src/registry/tool-registry.js +4 -2
  114. package/dist/src/registry/tool-registry.js.map +1 -1
  115. package/dist/src/session/__tests__/file-storage.test.node.d.ts +2 -0
  116. package/dist/src/session/__tests__/file-storage.test.node.d.ts.map +1 -0
  117. package/dist/src/session/__tests__/file-storage.test.node.js +218 -0
  118. package/dist/src/session/__tests__/file-storage.test.node.js.map +1 -0
  119. package/dist/src/session/__tests__/s3-storage.test.node.d.ts +2 -0
  120. package/dist/src/session/__tests__/s3-storage.test.node.d.ts.map +1 -0
  121. package/dist/src/session/__tests__/s3-storage.test.node.js +375 -0
  122. package/dist/src/session/__tests__/s3-storage.test.node.js.map +1 -0
  123. package/dist/src/session/__tests__/validation.test.d.ts +2 -0
  124. package/dist/src/session/__tests__/validation.test.d.ts.map +1 -0
  125. package/dist/src/session/__tests__/validation.test.js +20 -0
  126. package/dist/src/session/__tests__/validation.test.js.map +1 -0
  127. package/dist/src/session/file-storage.d.ts +79 -0
  128. package/dist/src/session/file-storage.d.ts.map +1 -0
  129. package/dist/src/session/file-storage.js +144 -0
  130. package/dist/src/session/file-storage.js.map +1 -0
  131. package/dist/src/session/index.d.ts +19 -0
  132. package/dist/src/session/index.d.ts.map +1 -0
  133. package/dist/src/session/index.js +18 -0
  134. package/dist/src/session/index.js.map +1 -0
  135. package/dist/src/session/s3-storage.d.ts +93 -0
  136. package/dist/src/session/s3-storage.d.ts.map +1 -0
  137. package/dist/src/session/s3-storage.js +150 -0
  138. package/dist/src/session/s3-storage.js.map +1 -0
  139. package/dist/src/session/storage.d.ts +91 -0
  140. package/dist/src/session/storage.d.ts.map +1 -0
  141. package/dist/src/session/storage.js +2 -0
  142. package/dist/src/session/storage.js.map +1 -0
  143. package/dist/src/session/types.d.ts +49 -0
  144. package/dist/src/session/types.d.ts.map +1 -0
  145. package/dist/src/session/types.js +2 -0
  146. package/dist/src/session/types.js.map +1 -0
  147. package/dist/src/session/validation.d.ts +10 -0
  148. package/dist/src/session/validation.d.ts.map +1 -0
  149. package/dist/src/session/validation.js +16 -0
  150. package/dist/src/session/validation.js.map +1 -0
  151. package/dist/src/structured-output/__tests__/context.test.d.ts +2 -0
  152. package/dist/src/structured-output/__tests__/context.test.d.ts.map +1 -0
  153. package/dist/src/structured-output/__tests__/context.test.js +201 -0
  154. package/dist/src/structured-output/__tests__/context.test.js.map +1 -0
  155. package/dist/src/structured-output/__tests__/exceptions.test.d.ts +2 -0
  156. package/dist/src/structured-output/__tests__/exceptions.test.d.ts.map +1 -0
  157. package/dist/src/structured-output/__tests__/exceptions.test.js +103 -0
  158. package/dist/src/structured-output/__tests__/exceptions.test.js.map +1 -0
  159. package/dist/src/structured-output/__tests__/tool.test.d.ts +2 -0
  160. package/dist/src/structured-output/__tests__/tool.test.d.ts.map +1 -0
  161. package/dist/src/structured-output/__tests__/tool.test.js +256 -0
  162. package/dist/src/structured-output/__tests__/tool.test.js.map +1 -0
  163. package/dist/src/structured-output/__tests__/utils.test.d.ts +2 -0
  164. package/dist/src/structured-output/__tests__/utils.test.d.ts.map +1 -0
  165. package/dist/src/structured-output/__tests__/utils.test.js +183 -0
  166. package/dist/src/structured-output/__tests__/utils.test.js.map +1 -0
  167. package/dist/src/structured-output/context.d.ts +91 -0
  168. package/dist/src/structured-output/context.d.ts.map +1 -0
  169. package/dist/src/structured-output/context.js +112 -0
  170. package/dist/src/structured-output/context.js.map +1 -0
  171. package/dist/src/structured-output/exceptions.d.ts +18 -0
  172. package/dist/src/structured-output/exceptions.d.ts.map +1 -0
  173. package/dist/src/structured-output/exceptions.js +28 -0
  174. package/dist/src/structured-output/exceptions.js.map +1 -0
  175. package/dist/src/structured-output/tool.d.ts +33 -0
  176. package/dist/src/structured-output/tool.d.ts.map +1 -0
  177. package/dist/src/structured-output/tool.js +73 -0
  178. package/dist/src/structured-output/tool.js.map +1 -0
  179. package/dist/src/structured-output/utils.d.ts +23 -0
  180. package/dist/src/structured-output/utils.d.ts.map +1 -0
  181. package/dist/src/structured-output/utils.js +104 -0
  182. package/dist/src/structured-output/utils.js.map +1 -0
  183. package/dist/src/tools/zod-tool.d.ts.map +1 -1
  184. package/dist/src/tools/zod-tool.js +2 -5
  185. package/dist/src/tools/zod-tool.js.map +1 -1
  186. package/dist/src/tsconfig.tsbuildinfo +1 -1
  187. package/dist/src/types/__tests__/media.test.js +216 -1
  188. package/dist/src/types/__tests__/media.test.js.map +1 -1
  189. package/dist/src/types/__tests__/messages.test.js +193 -4
  190. package/dist/src/types/__tests__/messages.test.js.map +1 -1
  191. package/dist/src/types/agent.d.ts +13 -7
  192. package/dist/src/types/agent.d.ts.map +1 -1
  193. package/dist/src/types/agent.js +8 -1
  194. package/dist/src/types/agent.js.map +1 -1
  195. package/dist/src/types/json.d.ts +61 -0
  196. package/dist/src/types/json.d.ts.map +1 -1
  197. package/dist/src/types/json.js +24 -0
  198. package/dist/src/types/json.js.map +1 -1
  199. package/dist/src/types/media.d.ts +84 -4
  200. package/dist/src/types/media.d.ts.map +1 -1
  201. package/dist/src/types/media.js +194 -0
  202. package/dist/src/types/media.js.map +1 -1
  203. package/dist/src/types/messages.d.ts +148 -9
  204. package/dist/src/types/messages.d.ts.map +1 -1
  205. package/dist/src/types/messages.js +234 -7
  206. package/dist/src/types/messages.js.map +1 -1
  207. package/dist/src/types/serializable.d.ts +31 -0
  208. package/dist/src/types/serializable.d.ts.map +1 -0
  209. package/dist/src/types/serializable.js +19 -0
  210. package/dist/src/types/serializable.js.map +1 -0
  211. package/dist/src/utils/zod.d.ts +11 -0
  212. package/dist/src/utils/zod.d.ts.map +1 -0
  213. package/dist/src/utils/zod.js +14 -0
  214. package/dist/src/utils/zod.js.map +1 -0
  215. package/package.json +7 -2
package/README.md CHANGED
@@ -41,6 +41,7 @@ Strands Agents is a simple yet powerful SDK that takes a model-driven approach t
41
41
 
42
42
  - **🪶 Lightweight & Flexible**: Simple agent loop that works seamlessly in Node.js and browser environments
43
43
  - **🔒 Type-Safe Tools**: Define tools easily using Zod schemas for robust input validation and type inference
44
+ - **📋 Structured Output**: Get type-safe, validated responses from LLMs using Zod schemas with automatic retry on validation errors
44
45
  - **🔌 Model Agnostic**: First-class support for Amazon Bedrock and OpenAI, with extensible architecture for custom providers
45
46
  - **🔗 Built-in MCP**: Native support for Model Context Protocol (MCP) clients, enabling access to external tools and servers
46
47
  - **⚡ Streaming Support**: Real-time response streaming for better user experience
@@ -166,6 +167,48 @@ await agent.invoke('What is the weather in San Francisco?')
166
167
  - **HTTP Request Tool**: Make HTTP requests to external APIs
167
168
 
168
169
 
170
+ ### Structured Output
171
+
172
+ Get type-safe, validated responses from LLMs by defining the expected output structure with Zod schemas. The agent automatically validates the LLM's response and retries on validation errors:
173
+
174
+ ```typescript
175
+ import { Agent } from '@strands-agents/sdk'
176
+ import { z } from 'zod'
177
+
178
+ const PersonSchema = z.object({
179
+ name: z.string().describe('Name of the person'),
180
+ age: z.number().describe('Age of the person'),
181
+ occupation: z.string().describe('Occupation of the person')
182
+ })
183
+
184
+ // Configure structured output at the agent level
185
+ const agent = new Agent({
186
+ structuredOutputSchema: PersonSchema
187
+ })
188
+
189
+ const result = await agent.invoke('John Smith is a 30 year-old software engineer')
190
+
191
+ // result.structuredOutput is fully typed based on the schema
192
+ console.log(result.structuredOutput.name) // "John Smith"
193
+ console.log(result.structuredOutput.age) // 30
194
+ ```
195
+
196
+ **Error handling**: The agent automatically retries with validation feedback when the LLM provides invalid output. If validation ultimately fails, a `StructuredOutputException` is thrown:
197
+
198
+ ```typescript
199
+ import { StructuredOutputException } from '@strands-agents/sdk'
200
+
201
+ try {
202
+ const result = await agent.invoke('Extract person info...')
203
+ console.log(result.structuredOutput)
204
+ } catch (error) {
205
+ if (error instanceof StructuredOutputException) {
206
+ console.error('Validation failed:', error.message)
207
+ }
208
+ }
209
+ ```
210
+
211
+
169
212
  ### MCP Integration
170
213
 
171
214
  Seamlessly integrate Model Context Protocol (MCP) servers:
@@ -1,13 +1,9 @@
1
- import type { HookEvent, HookProvider, HookRegistry } from '../hooks/index.js';
1
+ import type { HookableEvent, HookProvider, HookRegistry } from '../hooks/index.js';
2
2
  /**
3
- * Mock hook provider that records all hook invocations for testing.
3
+ * Mock hook provider that records all hookable event invocations for testing.
4
4
  */
5
5
  export declare class MockHookProvider implements HookProvider {
6
- invocations: HookEvent[];
7
- private includeModelEvents;
8
- constructor(options?: {
9
- includeModelEvents?: boolean;
10
- });
6
+ invocations: HookableEvent[];
11
7
  registerCallbacks(registry: HookRegistry): void;
12
8
  reset(): void;
13
9
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mock-hook-provider.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-hook-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAc9E;;GAEG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,WAAW,EAAE,SAAS,EAAE,CAAK;IAC7B,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,OAAO,GAAE;QAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;KAAO;IAI1D,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAuB/C,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"mock-hook-provider.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-hook-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAalF;;GAEG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,WAAW,EAAE,aAAa,EAAE,CAAK;IAEjC,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAmB/C,KAAK,IAAI,IAAI;CAGd"}
@@ -1,15 +1,11 @@
1
- import { InitializedEvent, BeforeInvocationEvent, AfterInvocationEvent, MessageAddedEvent, BeforeToolCallEvent, AfterToolCallEvent, BeforeModelCallEvent, AfterModelCallEvent, ModelStreamEventHook, } from '../hooks/index.js';
1
+ import { InitializedEvent, BeforeInvocationEvent, AfterInvocationEvent, MessageAddedEvent, BeforeToolCallEvent, AfterToolCallEvent, BeforeModelCallEvent, AfterModelCallEvent, } from '../hooks/index.js';
2
2
  /**
3
- * Mock hook provider that records all hook invocations for testing.
3
+ * Mock hook provider that records all hookable event invocations for testing.
4
4
  */
5
5
  export class MockHookProvider {
6
6
  invocations = [];
7
- includeModelEvents;
8
- constructor(options = {}) {
9
- this.includeModelEvents = options.includeModelEvents ?? true;
10
- }
11
7
  registerCallbacks(registry) {
12
- const lifecycleEvents = [
8
+ const eventTypes = [
13
9
  InitializedEvent,
14
10
  BeforeInvocationEvent,
15
11
  AfterInvocationEvent,
@@ -19,8 +15,6 @@ export class MockHookProvider {
19
15
  BeforeModelCallEvent,
20
16
  AfterModelCallEvent,
21
17
  ];
22
- const modelEvents = [ModelStreamEventHook];
23
- const eventTypes = this.includeModelEvents ? [...lifecycleEvents, ...modelEvents] : lifecycleEvents;
24
18
  for (const eventType of eventTypes) {
25
19
  registry.addCallback(eventType, (e) => {
26
20
  this.invocations.push(e);
@@ -1 +1 @@
1
- {"version":3,"file":"mock-hook-provider.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-hook-provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,mBAAmB,CAAA;AAG1B;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,WAAW,GAAgB,EAAE,CAAA;IACrB,kBAAkB,CAAS;IAEnC,YAAY,UAA4C,EAAE;QACxD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAA;IAC9D,CAAC;IAED,iBAAiB,CAAC,QAAsB;QACtC,MAAM,eAAe,GAA2B;YAC9C,gBAAgB;YAChB,qBAAqB;YACrB,oBAAoB;YACpB,iBAAiB;YACjB,mBAAmB;YACnB,kBAAkB;YAClB,oBAAoB;YACpB,mBAAmB;SACpB,CAAA;QAED,MAAM,WAAW,GAA2B,CAAC,oBAAoB,CAAC,CAAA;QAElE,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,eAAe,CAAA;QAEnG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;IACvB,CAAC;CACF"}
1
+ {"version":3,"file":"mock-hook-provider.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-hook-provider.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAG1B;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,WAAW,GAAoB,EAAE,CAAA;IAEjC,iBAAiB,CAAC,QAAsB;QACtC,MAAM,UAAU,GAA+B;YAC7C,gBAAgB;YAChB,qBAAqB;YACrB,oBAAoB;YACpB,iBAAiB;YACjB,mBAAmB;YACnB,kBAAkB;YAClB,oBAAoB;YACpB,mBAAmB;SACpB,CAAA;QAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC1B,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;IACvB,CAAC;CACF"}
@@ -5,9 +5,14 @@
5
5
  * construct events in tests.
6
6
  */
7
7
  import { Model } from '../models/model.js';
8
- import type { Message, ContentBlock, StopReason } from '../types/messages.js';
8
+ import type { Message, StopReason } from '../types/messages.js';
9
9
  import type { ModelStreamEvent } from '../models/streaming.js';
10
10
  import type { BaseModelConfig, StreamOptions } from '../models/model.js';
11
+ import type { PlainContentBlock } from './slim-types.js';
12
+ /**
13
+ * Input type for addTurn - accepts plain objects or class instances.
14
+ */
15
+ type ContentBlockInput = PlainContentBlock | PlainContentBlock[] | Error;
11
16
  /**
12
17
  * Test model provider that operates at the content block level.
13
18
  * Simplifies agent loop tests by allowing specification of content blocks
@@ -42,7 +47,7 @@ export declare class MockMessageModel extends Model<BaseModelConfig> {
42
47
  * .addTurn(new Error('Failed')) // Error turn
43
48
  * ```
44
49
  */
45
- addTurn(turn: ContentBlock | ContentBlock[] | Error, stopReason?: StopReason): this;
50
+ addTurn(turn: ContentBlockInput, stopReason?: StopReason): this;
46
51
  /**
47
52
  * Updates the model configuration.
48
53
  *
@@ -90,4 +95,5 @@ export declare class MockMessageModel extends Model<BaseModelConfig> {
90
95
  */
91
96
  private _generateEventsForBlock;
92
97
  }
98
+ export {};
93
99
  //# sourceMappingURL=mock-message-model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-message-model.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-message-model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAQxE;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK,CAAC,eAAe,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,OAAO,CAAiB;IAEhC;;OAEG;;IAQH;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,KAAK,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAKnF;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAIhD;;;;OAIG;IACH,SAAS,IAAI,eAAe;IAI5B;;;;;;;;;;OAUG;IACI,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,gBAAgB,CAAC;IA4B/F;;;OAGG;YACY,yBAAyB;IAiBxC;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;YACY,yBAAyB;IAcxC;;OAEG;YACY,uBAAuB;CAgFvC"}
1
+ {"version":3,"file":"mock-message-model.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-message-model.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD;;GAEG;AACH,KAAK,iBAAiB,GAAG,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,KAAK,CAAA;AAQxE;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK,CAAC,eAAe,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,iBAAiB,CAAQ;IACjC,OAAO,CAAC,OAAO,CAAiB;IAEhC;;OAEG;;IAQH;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAK/D;;;;OAIG;IACH,YAAY,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAIhD;;;;OAIG;IACH,SAAS,IAAI,eAAe;IAI5B;;;;;;;;;;OAUG;IACI,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC,gBAAgB,CAAC;IA4B/F;;;OAGG;YACY,yBAAyB;IAiBxC;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;YACY,yBAAyB;IAcxC;;OAEG;YACY,uBAAuB;CAiFvC"}
@@ -213,6 +213,7 @@ export class MockMessageModel extends Model {
213
213
  case 'imageBlock':
214
214
  case 'videoBlock':
215
215
  case 'documentBlock':
216
+ case 'jsonBlock':
216
217
  // These blocks don't generate events in mock - just skip them
217
218
  break;
218
219
  default: {
@@ -1 +1 @@
1
- {"version":3,"file":"mock-message-model.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-message-model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-message-model.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-message-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Scope, Snapshot, SnapshotManifest } from '../session/types.js';
2
+ import type { SnapshotStorage, SnapshotLocation } from '../session/index.js';
3
+ export declare function createTestSnapshot(overrides?: Partial<Snapshot>): Snapshot;
4
+ export declare function createTestManifest(overrides?: Partial<SnapshotManifest>): SnapshotManifest;
5
+ export declare function createTestScope(kind?: 'agent' | 'multiAgent'): Scope;
6
+ export declare function createTestSnapshots(count: number, baseSnapshot?: Partial<Snapshot>): Snapshot[];
7
+ /**
8
+ * Mock storage implementation for testing that stores data in memory
9
+ */
10
+ export declare class MockSnapshotStorage implements SnapshotStorage {
11
+ private snapshots;
12
+ private manifests;
13
+ shouldThrowErrors: boolean;
14
+ saveSnapshot(params: {
15
+ location: SnapshotLocation;
16
+ snapshotId: string;
17
+ isLatest: boolean;
18
+ snapshot: Snapshot;
19
+ }): Promise<void>;
20
+ loadSnapshot(params: {
21
+ location: SnapshotLocation;
22
+ snapshotId?: string;
23
+ }): Promise<Snapshot | null>;
24
+ listSnapshotIds(params: {
25
+ location: SnapshotLocation;
26
+ }): Promise<string[]>;
27
+ loadManifest(params: {
28
+ location: SnapshotLocation;
29
+ }): Promise<SnapshotManifest>;
30
+ saveManifest(params: {
31
+ location: SnapshotLocation;
32
+ manifest: SnapshotManifest;
33
+ }): Promise<void>;
34
+ private getKey;
35
+ private getManifestKey;
36
+ }
37
+ //# sourceMappingURL=mock-storage-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-storage-provider.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-storage-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE5E,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,OAAO,CAAC,QAAQ,CAAM,GAAG,QAAQ,CAa9E;AAED,wBAAgB,kBAAkB,CAAC,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GAAG,gBAAgB,CAO9F;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,OAAO,GAAG,YAAsB,GAAG,KAAK,CAE7E;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,EAAE,CAO/F;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,eAAe;IACzD,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,SAAS,CAAsC;IAChD,iBAAiB,UAAQ;IAE1B,YAAY,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,gBAAgB,CAAA;QAC1B,UAAU,EAAE,MAAM,CAAA;QAClB,QAAQ,EAAE,OAAO,CAAA;QACjB,QAAQ,EAAE,QAAQ,CAAA;KACnB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYX,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IASnG,eAAe,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAe1E,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAkB/E,YAAY,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,QAAQ,EAAE,gBAAgB,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrG,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,cAAc;CAMvB"}
@@ -0,0 +1,105 @@
1
+ export function createTestSnapshot(overrides = {}) {
2
+ return {
3
+ schemaVersion: '1.0',
4
+ scope: 'agent',
5
+ createdAt: '2024-01-01T00:00:00.000Z',
6
+ data: {
7
+ messages: [],
8
+ state: { testKey: 'testValue' },
9
+ systemPrompt: 'You are a test assistant',
10
+ },
11
+ appData: {},
12
+ ...overrides,
13
+ };
14
+ }
15
+ export function createTestManifest(overrides = {}) {
16
+ return {
17
+ schemaVersion: '1.0',
18
+ nextSnapshotId: '2',
19
+ updatedAt: '2024-01-01T00:00:00.000Z',
20
+ ...overrides,
21
+ };
22
+ }
23
+ export function createTestScope(kind = 'agent') {
24
+ return kind;
25
+ }
26
+ export function createTestSnapshots(count, baseSnapshot) {
27
+ return Array.from({ length: count }, (_, i) => createTestSnapshot({
28
+ ...baseSnapshot,
29
+ createdAt: new Date(2024, 0, 1, 0, i).toISOString(),
30
+ }));
31
+ }
32
+ /**
33
+ * Mock storage implementation for testing that stores data in memory
34
+ */
35
+ export class MockSnapshotStorage {
36
+ snapshots = new Map();
37
+ manifests = new Map();
38
+ shouldThrowErrors = false;
39
+ async saveSnapshot(params) {
40
+ if (this.shouldThrowErrors)
41
+ throw new Error('Mock save error');
42
+ const { location, snapshotId, isLatest, snapshot } = params;
43
+ const key = this.getKey(location, snapshotId);
44
+ this.snapshots.set(key, snapshot);
45
+ if (isLatest) {
46
+ this.snapshots.set(this.getKey(location, 'latest'), snapshot);
47
+ }
48
+ }
49
+ async loadSnapshot(params) {
50
+ if (this.shouldThrowErrors)
51
+ throw new Error('Mock load error');
52
+ if (params.snapshotId === undefined) {
53
+ return this.snapshots.get(this.getKey(params.location, 'latest')) ?? null;
54
+ }
55
+ return this.snapshots.get(this.getKey(params.location, params.snapshotId)) ?? null;
56
+ }
57
+ async listSnapshotIds(params) {
58
+ if (this.shouldThrowErrors)
59
+ throw new Error('Mock list error');
60
+ const prefix = `${params.location.sessionId}::${params.location.scope}::${params.location.scopeId}::`;
61
+ const ids = [];
62
+ for (const [key, _snapshot] of this.snapshots) {
63
+ if (key.startsWith(prefix) && !key.endsWith('::latest')) {
64
+ ids.push(key.slice(prefix.length));
65
+ }
66
+ }
67
+ return ids.sort();
68
+ }
69
+ async loadManifest(params) {
70
+ if (this.shouldThrowErrors)
71
+ throw new Error('Mock manifest load error');
72
+ const { sessionId } = params.location;
73
+ if (!sessionId) {
74
+ throw new Error('Invalid sessionId: cannot be empty or undefined');
75
+ }
76
+ const key = this.getManifestKey(params.location);
77
+ return (this.manifests.get(key) ?? {
78
+ schemaVersion: '1',
79
+ nextSnapshotId: '1',
80
+ updatedAt: new Date().toISOString(),
81
+ });
82
+ }
83
+ async saveManifest(params) {
84
+ if (this.shouldThrowErrors)
85
+ throw new Error('Mock manifest save error');
86
+ const { sessionId } = params.location;
87
+ if (!sessionId) {
88
+ throw new Error('Invalid sessionId: cannot be empty or undefined');
89
+ }
90
+ this.manifests.set(this.getManifestKey(params.location), params.manifest);
91
+ }
92
+ getKey(location, snapshotId) {
93
+ if (!location.sessionId) {
94
+ throw new Error('Invalid sessionId: cannot be empty or undefined');
95
+ }
96
+ return `${location.sessionId}::${location.scope}::${location.scopeId}::${snapshotId}`;
97
+ }
98
+ getManifestKey(location) {
99
+ if (!location.sessionId) {
100
+ throw new Error('Invalid sessionId: cannot be empty or undefined');
101
+ }
102
+ return `${location.sessionId}::${location.scope}::${location.scopeId}::manifest`;
103
+ }
104
+ }
105
+ //# sourceMappingURL=mock-storage-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-storage-provider.js","sourceRoot":"","sources":["../../../src/__fixtures__/mock-storage-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Utility types for testing that strip methods from classes.
3
+ * Allows tests to use plain objects without needing to construct class instances.
4
+ */
5
+ import type { Message, ToolResultBlock, TextBlock, ToolUseBlock, ReasoningBlock, CachePointBlock, GuardContentBlock, JsonBlock } from '../types/messages.js';
6
+ import type { ImageBlock, VideoBlock, DocumentBlock } from '../types/media.js';
7
+ /**
8
+ * Strips the toJSON method from a type, allowing plain objects to be used in tests.
9
+ * This is useful when you want to pass plain object literals where class instances are expected.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const messages: NoJSON<Message>[] = [
14
+ * { type: 'message', role: 'user', content: [{ type: 'textBlock', text: 'Hello' }] }
15
+ * ]
16
+ * ```
17
+ */
18
+ export type NoJSON<T> = Omit<T, 'toJSON'>;
19
+ /**
20
+ * Plain content block without toJSON method - preserves discriminated union.
21
+ */
22
+ export type PlainContentBlock = NoJSON<TextBlock> | NoJSON<ToolUseBlock> | NoJSON<ToolResultBlock> | NoJSON<ReasoningBlock> | NoJSON<CachePointBlock> | NoJSON<GuardContentBlock> | NoJSON<JsonBlock> | NoJSON<ImageBlock> | NoJSON<VideoBlock> | NoJSON<DocumentBlock>;
23
+ /**
24
+ * Plain system content block without toJSON method.
25
+ */
26
+ export type PlainSystemContentBlock = NoJSON<TextBlock> | NoJSON<CachePointBlock> | NoJSON<GuardContentBlock>;
27
+ /**
28
+ * Plain tool result block without toJSON method.
29
+ */
30
+ export type PlainToolResultBlock = NoJSON<ToolResultBlock>;
31
+ /**
32
+ * Recursively strips toJSON from a type and its nested content.
33
+ * Use this for Message which contains ContentBlock arrays.
34
+ */
35
+ export type PlainMessage = NoJSON<Message> & {
36
+ content: PlainContentBlock[];
37
+ };
38
+ /**
39
+ * Type assertion helper for using plain message objects where Message[] is expected.
40
+ * Use this when calling model.stream() with plain objects in tests.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const messages = [
45
+ * { type: 'message', role: 'user', content: [{ type: 'textBlock', text: 'Hello' }] }
46
+ * ] as PlainMessage[] as Message[]
47
+ * ```
48
+ */
49
+ export type { Message };
50
+ //# sourceMappingURL=slim-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slim-types.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/slim-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,OAAO,EACP,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,SAAS,EACV,MAAM,sBAAsB,CAAA;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE9E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;AAEzC;;GAEG;AACH,MAAM,MAAM,iBAAiB,GACzB,MAAM,CAAC,SAAS,CAAC,GACjB,MAAM,CAAC,YAAY,CAAC,GACpB,MAAM,CAAC,eAAe,CAAC,GACvB,MAAM,CAAC,cAAc,CAAC,GACtB,MAAM,CAAC,eAAe,CAAC,GACvB,MAAM,CAAC,iBAAiB,CAAC,GACzB,MAAM,CAAC,SAAS,CAAC,GACjB,MAAM,CAAC,UAAU,CAAC,GAClB,MAAM,CAAC,UAAU,CAAC,GAClB,MAAM,CAAC,aAAa,CAAC,CAAA;AAEzB;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAA;AAE7G;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAA;AAE1D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG;IAAE,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAAA;AAE7E;;;;;;;;;;GAUG;AACH,YAAY,EAAE,OAAO,EAAE,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Utility types for testing that strip methods from classes.
3
+ * Allows tests to use plain objects without needing to construct class instances.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=slim-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slim-types.js","sourceRoot":"","sources":["../../../src/__fixtures__/slim-types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -3,8 +3,8 @@
3
3
  * This module provides utilities for testing Tool implementations.
4
4
  */
5
5
  import type { Tool, ToolContext } from '../tools/tool.js';
6
- import { ToolResultBlock } from '../types/messages.js';
7
6
  import type { JSONValue } from '../types/json.js';
7
+ import type { PlainToolResultBlock } from './slim-types.js';
8
8
  /**
9
9
  * Helper to create a mock ToolContext for testing.
10
10
  *
@@ -17,14 +17,18 @@ export declare function createMockContext(toolUse: {
17
17
  toolUseId: string;
18
18
  input: JSONValue;
19
19
  }, agentState?: Record<string, JSONValue>): ToolContext;
20
+ /**
21
+ * Result function type for createMockTool - accepts plain objects or class instances.
22
+ */
23
+ type ToolResultFn = () => PlainToolResultBlock | AsyncGenerator<never, PlainToolResultBlock, never>;
20
24
  /**
21
25
  * Helper to create a mock tool for testing.
22
26
  *
23
27
  * @param name - The name of the mock tool
24
- * @param resultFn - Function that returns a ToolResultBlock or an AsyncGenerator that yields nothing and returns a ToolResultBlock
28
+ * @param resultFn - Function that returns a ToolResultBlock (plain object or class instance) or an AsyncGenerator
25
29
  * @returns Mock Tool object
26
30
  */
27
- export declare function createMockTool(name: string, resultFn: () => ToolResultBlock | AsyncGenerator<never, ToolResultBlock, never>): Tool;
31
+ export declare function createMockTool(name: string, resultFn: ToolResultFn): Tool;
28
32
  /**
29
33
  * Helper to create a simple mock tool with minimal configuration for testing.
30
34
  * This is a lighter-weight version of createMockTool for scenarios where the tool's
@@ -34,4 +38,5 @@ export declare function createMockTool(name: string, resultFn: () => ToolResultB
34
38
  * @returns Mock Tool object
35
39
  */
36
40
  export declare function createRandomTool(name?: string): Tool;
41
+ export {};
37
42
  //# sourceMappingURL=tool-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAGjD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,EAC9D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACrC,WAAW,CAQb;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,GAC9E,IAAI,CA8BN;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAWpD"}
1
+ {"version":3,"file":"tool-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAE3D;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,EAC9D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GACrC,WAAW,CAQb;AAED;;GAEG;AACH,KAAK,YAAY,GAAG,MAAM,oBAAoB,GAAG,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAA;AAEnG;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CA8BzE;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAWpD"}
@@ -24,7 +24,7 @@ export function createMockContext(toolUse, agentState) {
24
24
  * Helper to create a mock tool for testing.
25
25
  *
26
26
  * @param name - The name of the mock tool
27
- * @param resultFn - Function that returns a ToolResultBlock or an AsyncGenerator that yields nothing and returns a ToolResultBlock
27
+ * @param resultFn - Function that returns a ToolResultBlock (plain object or class instance) or an AsyncGenerator
28
28
  * @returns Mock Tool object
29
29
  */
30
30
  export function createMockTool(name, resultFn) {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA8D,EAC9D,UAAsC;IAEtC,OAAO;QACL,OAAO;QACP,KAAK,EAAE;YACL,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC;YACjC,QAAQ,EAAE,EAAE;SACb;KACF,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,QAA+E;IAE/E,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,aAAa,IAAI,EAAE;QAChC,QAAQ,EAAE;YACR,IAAI;YACJ,WAAW,EAAE,aAAa,IAAI,EAAE;YAChC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;SAChD;QACD,yCAAyC;QACzC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ;YACpB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;YACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC;gBACpF,mCAAmC;gBACnC,MAAM,GAAG,GAAG,MAAuD,CAAA;gBACnE,IAAI,IAAI,GAAG,KAAK,CAAA;gBAChB,OAAO,CAAC,IAAI,EAAE,CAAC;oBACb,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;oBAChD,IAAI,GAAG,MAAM,IAAI,KAAK,CAAA;oBACtB,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,KAAK,CAAA;oBACd,CAAC;gBACH,CAAC;gBACD,6DAA6D;gBAC7D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,OAAO,MAAyB,CAAA;YAClC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,MAAM,QAAQ,GAAG,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IACvD,OAAO,cAAc,CACnB,QAAQ,EACR,GAAG,EAAE,CACH,IAAI,eAAe,CAAC;QAClB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAkB;QAC1B,OAAO,EAAE,EAAE;KACZ,CAAC,CACL,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/tool-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAG9C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAA8D,EAC9D,UAAsC;IAEtC,OAAO;QACL,OAAO;QACP,KAAK,EAAE;YACL,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC;YACjC,QAAQ,EAAE,EAAE;SACb;KACF,CAAA;AACH,CAAC;AAOD;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,QAAsB;IACjE,OAAO;QACL,IAAI;QACJ,WAAW,EAAE,aAAa,IAAI,EAAE;QAChC,QAAQ,EAAE;YACR,IAAI;YACJ,WAAW,EAAE,aAAa,IAAI,EAAE;YAChC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;SAChD;QACD,yCAAyC;QACzC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ;YACpB,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAA;YACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,EAAE,CAAC;gBACpF,mCAAmC;gBACnC,MAAM,GAAG,GAAG,MAAuD,CAAA;gBACnE,IAAI,IAAI,GAAG,KAAK,CAAA;gBAChB,OAAO,CAAC,IAAI,EAAE,CAAC;oBACb,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;oBAChD,IAAI,GAAG,MAAM,IAAI,KAAK,CAAA;oBACtB,IAAI,IAAI,EAAE,CAAC;wBACT,OAAO,KAAK,CAAA;oBACd,CAAC;gBACH,CAAC;gBACD,6DAA6D;gBAC7D,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;YACjD,CAAC;iBAAM,CAAC;gBACN,OAAO,MAAyB,CAAA;YAClC,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,MAAM,QAAQ,GAAG,IAAI,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IACvD,OAAO,cAAc,CACnB,QAAQ,EACR,GAAG,EAAE,CACH,IAAI,eAAe,CAAC;QAClB,SAAS,EAAE,SAAS;QACpB,MAAM,EAAE,SAAkB;QAC1B,OAAO,EAAE,EAAE;KACZ,CAAC,CACL,CAAA;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { beforeEach, describe, expect, it } from 'vitest';
2
2
  import { Agent } from '../agent.js';
3
- import { AfterInvocationEvent, AfterModelCallEvent, AfterToolCallEvent, BeforeInvocationEvent, BeforeModelCallEvent, BeforeToolCallEvent, MessageAddedEvent, ModelStreamEventHook, InitializedEvent, } from '../../hooks/index.js';
3
+ import { AfterInvocationEvent, AfterModelCallEvent, AfterToolCallEvent, BeforeInvocationEvent, BeforeModelCallEvent, BeforeToolCallEvent, MessageAddedEvent, ModelStreamUpdateEvent, InitializedEvent, } from '../../hooks/index.js';
4
4
  import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
5
5
  import { MockHookProvider } from '../../__fixtures__/mock-hook-provider.js';
6
6
  import { collectIterator } from '../../__fixtures__/model-test-helpers.js';
@@ -13,7 +13,7 @@ describe('Agent Hooks Integration', () => {
13
13
  });
14
14
  describe('invocation lifecycle', () => {
15
15
  it('fires hooks during invoke', async () => {
16
- const lifecycleProvider = new MockHookProvider({ includeModelEvents: false });
16
+ const lifecycleProvider = new MockHookProvider();
17
17
  const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
18
18
  const agent = new Agent({ model, hooks: [lifecycleProvider] });
19
19
  await agent.invoke('Hi');
@@ -36,7 +36,7 @@ describe('Agent Hooks Integration', () => {
36
36
  expect(lifecycleProvider.invocations[6]).toEqual(new AfterInvocationEvent({ agent }));
37
37
  });
38
38
  it('fires hooks during stream', async () => {
39
- const lifecycleProvider = new MockHookProvider({ includeModelEvents: false });
39
+ const lifecycleProvider = new MockHookProvider();
40
40
  const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
41
41
  const agent = new Agent({ model, hooks: [lifecycleProvider] });
42
42
  await collectIterator(agent.stream('Hi'));
@@ -64,7 +64,7 @@ describe('Agent Hooks Integration', () => {
64
64
  });
65
65
  describe('runtime hook registration', () => {
66
66
  it('allows adding hooks after agent creation', async () => {
67
- const lifecycleProvider = new MockHookProvider({ includeModelEvents: false });
67
+ const lifecycleProvider = new MockHookProvider();
68
68
  const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
69
69
  const agent = new Agent({ model });
70
70
  agent.hooks.addHook(lifecycleProvider);
@@ -77,7 +77,7 @@ describe('Agent Hooks Integration', () => {
77
77
  });
78
78
  describe('multi-turn conversations', () => {
79
79
  it('fires hooks for each invoke call', async () => {
80
- const lifecycleProvider = new MockHookProvider({ includeModelEvents: false });
80
+ const lifecycleProvider = new MockHookProvider();
81
81
  const model = new MockMessageModel()
82
82
  .addTurn({ type: 'textBlock', text: 'First response' })
83
83
  .addTurn({ type: 'textBlock', text: 'Second response' });
@@ -169,26 +169,26 @@ describe('Agent Hooks Integration', () => {
169
169
  }));
170
170
  });
171
171
  });
172
- describe('ModelStreamEventHook', () => {
173
- it('fires for each streaming event from the model', async () => {
172
+ describe('ModelStreamUpdateEvent', () => {
173
+ it('is yielded in the stream and dispatched to hooks', async () => {
174
174
  const model = new MockMessageModel().addTurn({ type: 'textBlock', text: 'Hello' });
175
- const agent = new Agent({
176
- model,
177
- hooks: [mockProvider],
175
+ const streamUpdateEvents = [];
176
+ const agent = new Agent({ model });
177
+ agent.hooks.addCallback(ModelStreamUpdateEvent, (event) => {
178
+ streamUpdateEvents.push(event);
178
179
  });
179
180
  // Collect all stream events
180
181
  const allStreamEvents = [];
181
182
  for await (const event of agent.stream('Test')) {
182
183
  allStreamEvents.push(event);
183
184
  }
184
- const streamEventHooks = mockProvider.invocations.filter((e) => e instanceof ModelStreamEventHook);
185
- // Should have events
186
- expect(streamEventHooks.length).toBeGreaterThan(0);
187
- // Verify each hook event matches a stream event
188
- for (const hookEvent of streamEventHooks) {
189
- const event = hookEvent.event;
190
- expect(allStreamEvents).toContain(event);
191
- }
185
+ // Should be yielded in the stream
186
+ const streamUpdates = allStreamEvents.filter((e) => e instanceof ModelStreamUpdateEvent);
187
+ expect(streamUpdates.length).toBeGreaterThan(0);
188
+ // Should also fire as hook
189
+ expect(streamUpdateEvents.length).toBeGreaterThan(0);
190
+ // Stream and hook should receive the same event instances
191
+ expect(streamUpdates).toStrictEqual(streamUpdateEvents);
192
192
  });
193
193
  });
194
194
  describe('MessageAddedEvent', () => {