@strands-agents/sdk 0.6.0 → 1.0.0-rc.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 (487) hide show
  1. package/README.md +71 -7
  2. package/dist/src/__fixtures__/agent-helpers.d.ts +81 -4
  3. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  4. package/dist/src/__fixtures__/agent-helpers.js +76 -4
  5. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  6. package/dist/src/__fixtures__/metrics-helpers.d.ts +30 -0
  7. package/dist/src/__fixtures__/metrics-helpers.d.ts.map +1 -1
  8. package/dist/src/__fixtures__/metrics-helpers.js +29 -6
  9. package/dist/src/__fixtures__/metrics-helpers.js.map +1 -1
  10. package/dist/src/__fixtures__/mock-message-model.d.ts +8 -4
  11. package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -1
  12. package/dist/src/__fixtures__/mock-message-model.js +13 -7
  13. package/dist/src/__fixtures__/mock-message-model.js.map +1 -1
  14. package/dist/src/__fixtures__/mock-meter.d.ts +32 -0
  15. package/dist/src/__fixtures__/mock-meter.d.ts.map +1 -0
  16. package/dist/src/__fixtures__/mock-meter.js +47 -0
  17. package/dist/src/__fixtures__/mock-meter.js.map +1 -0
  18. package/dist/src/__fixtures__/mock-plugin.d.ts +13 -0
  19. package/dist/src/__fixtures__/mock-plugin.d.ts.map +1 -0
  20. package/dist/src/__fixtures__/{mock-hook-provider.js → mock-plugin.js} +11 -6
  21. package/dist/src/__fixtures__/mock-plugin.js.map +1 -0
  22. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
  23. package/dist/src/__fixtures__/tool-helpers.js +6 -2
  24. package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
  25. package/dist/src/__tests__/index.test.js +21 -0
  26. package/dist/src/__tests__/index.test.js.map +1 -1
  27. package/dist/src/__tests__/mcp.test.js.map +1 -1
  28. package/dist/src/__tests__/mime.test.d.ts +2 -0
  29. package/dist/src/__tests__/mime.test.d.ts.map +1 -0
  30. package/dist/src/__tests__/mime.test.js +83 -0
  31. package/dist/src/__tests__/mime.test.js.map +1 -0
  32. package/dist/src/__tests__/state-store.test.d.ts +2 -0
  33. package/dist/src/__tests__/state-store.test.d.ts.map +1 -0
  34. package/dist/src/__tests__/{app-state.test.js → state-store.test.js} +86 -51
  35. package/dist/src/__tests__/state-store.test.js.map +1 -0
  36. package/dist/src/a2a/__tests__/a2a-agent.test.d.ts +2 -0
  37. package/dist/src/a2a/__tests__/a2a-agent.test.d.ts.map +1 -0
  38. package/dist/src/a2a/__tests__/a2a-agent.test.js +364 -0
  39. package/dist/src/a2a/__tests__/a2a-agent.test.js.map +1 -0
  40. package/dist/src/a2a/__tests__/adapters.test.d.ts +2 -0
  41. package/dist/src/a2a/__tests__/adapters.test.d.ts.map +1 -0
  42. package/dist/src/a2a/__tests__/adapters.test.js +151 -0
  43. package/dist/src/a2a/__tests__/adapters.test.js.map +1 -0
  44. package/dist/src/a2a/__tests__/events.test.d.ts +2 -0
  45. package/dist/src/a2a/__tests__/events.test.d.ts.map +1 -0
  46. package/dist/src/a2a/__tests__/events.test.js +66 -0
  47. package/dist/src/a2a/__tests__/events.test.js.map +1 -0
  48. package/dist/src/a2a/__tests__/executor.test.d.ts +2 -0
  49. package/dist/src/a2a/__tests__/executor.test.d.ts.map +1 -0
  50. package/dist/src/a2a/__tests__/executor.test.js +196 -0
  51. package/dist/src/a2a/__tests__/executor.test.js.map +1 -0
  52. package/dist/src/a2a/__tests__/server.test.d.ts +2 -0
  53. package/dist/src/a2a/__tests__/server.test.d.ts.map +1 -0
  54. package/dist/src/a2a/__tests__/server.test.js +51 -0
  55. package/dist/src/a2a/__tests__/server.test.js.map +1 -0
  56. package/dist/src/a2a/__tests__/server.test.node.d.ts +2 -0
  57. package/dist/src/a2a/__tests__/server.test.node.d.ts.map +1 -0
  58. package/dist/src/a2a/__tests__/server.test.node.js +110 -0
  59. package/dist/src/a2a/__tests__/server.test.node.js.map +1 -0
  60. package/dist/src/a2a/a2a-agent.d.ts +132 -0
  61. package/dist/src/a2a/a2a-agent.d.ts.map +1 -0
  62. package/dist/src/a2a/a2a-agent.js +255 -0
  63. package/dist/src/a2a/a2a-agent.js.map +1 -0
  64. package/dist/src/a2a/adapters.d.ts +27 -0
  65. package/dist/src/a2a/adapters.d.ts.map +1 -0
  66. package/dist/src/a2a/adapters.js +175 -0
  67. package/dist/src/a2a/adapters.js.map +1 -0
  68. package/dist/src/a2a/events.d.ts +44 -0
  69. package/dist/src/a2a/events.d.ts.map +1 -0
  70. package/dist/src/a2a/events.js +41 -0
  71. package/dist/src/a2a/events.js.map +1 -0
  72. package/dist/src/a2a/executor.d.ts +57 -0
  73. package/dist/src/a2a/executor.d.ts.map +1 -0
  74. package/dist/src/a2a/executor.js +130 -0
  75. package/dist/src/a2a/executor.js.map +1 -0
  76. package/dist/src/a2a/express-server.d.ts +67 -0
  77. package/dist/src/a2a/express-server.d.ts.map +1 -0
  78. package/dist/src/a2a/express-server.js +95 -0
  79. package/dist/src/a2a/express-server.js.map +1 -0
  80. package/dist/src/a2a/index.d.ts +15 -0
  81. package/dist/src/a2a/index.d.ts.map +1 -0
  82. package/dist/src/a2a/index.js +15 -0
  83. package/dist/src/a2a/index.js.map +1 -0
  84. package/dist/src/a2a/logging.d.ts +8 -0
  85. package/dist/src/a2a/logging.d.ts.map +1 -0
  86. package/dist/src/a2a/logging.js +15 -0
  87. package/dist/src/a2a/logging.js.map +1 -0
  88. package/dist/src/a2a/server.d.ts +67 -0
  89. package/dist/src/a2a/server.d.ts.map +1 -0
  90. package/dist/src/a2a/server.js +67 -0
  91. package/dist/src/a2a/server.js.map +1 -0
  92. package/dist/src/agent/__tests__/agent.hook.test.js +315 -51
  93. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
  94. package/dist/src/agent/__tests__/agent.test.js +298 -48
  95. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  96. package/dist/src/agent/__tests__/agent.tracer.test.node.d.ts +2 -0
  97. package/dist/src/agent/__tests__/agent.tracer.test.node.d.ts.map +1 -0
  98. package/dist/src/agent/__tests__/{agent.tracer.test.js → agent.tracer.test.node.js} +62 -50
  99. package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -0
  100. package/dist/src/agent/__tests__/printer.test.js +7 -7
  101. package/dist/src/agent/__tests__/printer.test.js.map +1 -1
  102. package/dist/src/agent/__tests__/snapshot.test.js +50 -13
  103. package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
  104. package/dist/src/agent/agent.d.ts +55 -44
  105. package/dist/src/agent/agent.d.ts.map +1 -1
  106. package/dist/src/agent/agent.js +230 -128
  107. package/dist/src/agent/agent.js.map +1 -1
  108. package/dist/src/agent/printer.d.ts.map +1 -1
  109. package/dist/src/agent/printer.js +3 -0
  110. package/dist/src/agent/printer.js.map +1 -1
  111. package/dist/src/agent/snapshot.d.ts +3 -3
  112. package/dist/src/agent/snapshot.d.ts.map +1 -1
  113. package/dist/src/agent/snapshot.js +16 -8
  114. package/dist/src/agent/snapshot.js.map +1 -1
  115. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +2 -0
  116. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +1 -0
  117. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +100 -0
  118. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -0
  119. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +26 -10
  120. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
  121. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +153 -64
  122. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
  123. package/dist/src/conversation-manager/conversation-manager.d.ts +87 -0
  124. package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -0
  125. package/dist/src/conversation-manager/conversation-manager.js +59 -0
  126. package/dist/src/conversation-manager/conversation-manager.js.map +1 -0
  127. package/dist/src/conversation-manager/index.d.ts +1 -0
  128. package/dist/src/conversation-manager/index.d.ts.map +1 -1
  129. package/dist/src/conversation-manager/index.js +1 -0
  130. package/dist/src/conversation-manager/index.js.map +1 -1
  131. package/dist/src/conversation-manager/null-conversation-manager.d.ts +12 -8
  132. package/dist/src/conversation-manager/null-conversation-manager.d.ts.map +1 -1
  133. package/dist/src/conversation-manager/null-conversation-manager.js +13 -7
  134. package/dist/src/conversation-manager/null-conversation-manager.js.map +1 -1
  135. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +28 -19
  136. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  137. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +57 -42
  138. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  139. package/dist/src/errors.d.ts +8 -0
  140. package/dist/src/errors.d.ts.map +1 -1
  141. package/dist/src/errors.js +11 -0
  142. package/dist/src/errors.js.map +1 -1
  143. package/dist/src/hooks/__tests__/events.test.js +387 -0
  144. package/dist/src/hooks/__tests__/events.test.js.map +1 -1
  145. package/dist/src/hooks/__tests__/registry.test.js +10 -154
  146. package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
  147. package/dist/src/hooks/events.d.ts +148 -44
  148. package/dist/src/hooks/events.d.ts.map +1 -1
  149. package/dist/src/hooks/events.js +148 -11
  150. package/dist/src/hooks/events.js.map +1 -1
  151. package/dist/src/hooks/index.d.ts +3 -3
  152. package/dist/src/hooks/index.d.ts.map +1 -1
  153. package/dist/src/hooks/index.js +2 -2
  154. package/dist/src/hooks/registry.d.ts +1 -32
  155. package/dist/src/hooks/registry.d.ts.map +1 -1
  156. package/dist/src/hooks/registry.js +1 -47
  157. package/dist/src/hooks/registry.js.map +1 -1
  158. package/dist/src/hooks/types.d.ts +0 -31
  159. package/dist/src/hooks/types.d.ts.map +1 -1
  160. package/dist/src/index.d.ts +14 -13
  161. package/dist/src/index.d.ts.map +1 -1
  162. package/dist/src/index.js +11 -9
  163. package/dist/src/index.js.map +1 -1
  164. package/dist/src/mime.d.ts +24 -0
  165. package/dist/src/mime.d.ts.map +1 -0
  166. package/dist/src/mime.js +82 -0
  167. package/dist/src/mime.js.map +1 -0
  168. package/dist/src/models/__tests__/anthropic.test.js +79 -3
  169. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  170. package/dist/src/models/__tests__/bedrock.test.js +1858 -627
  171. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  172. package/dist/src/models/__tests__/google.test.d.ts +2 -0
  173. package/dist/src/models/__tests__/google.test.d.ts.map +1 -0
  174. package/dist/src/models/__tests__/{gemini.test.js → google.test.js} +155 -22
  175. package/dist/src/models/__tests__/google.test.js.map +1 -0
  176. package/dist/src/models/__tests__/model.test.js +25 -0
  177. package/dist/src/models/__tests__/model.test.js.map +1 -1
  178. package/dist/src/models/__tests__/openai.test.js +255 -96
  179. package/dist/src/models/__tests__/openai.test.js.map +1 -1
  180. package/dist/src/models/anthropic.d.ts.map +1 -1
  181. package/dist/src/models/anthropic.js +14 -14
  182. package/dist/src/models/anthropic.js.map +1 -1
  183. package/dist/src/models/bedrock.d.ts +67 -13
  184. package/dist/src/models/bedrock.d.ts.map +1 -1
  185. package/dist/src/models/bedrock.js +207 -28
  186. package/dist/src/models/bedrock.js.map +1 -1
  187. package/dist/src/models/{gemini → google}/adapters.d.ts +3 -3
  188. package/dist/src/models/{gemini → google}/adapters.d.ts.map +1 -1
  189. package/dist/src/models/{gemini → google}/adapters.js +66 -15
  190. package/dist/src/models/google/adapters.js.map +1 -0
  191. package/dist/src/models/{gemini → google}/errors.d.ts +7 -7
  192. package/dist/src/models/google/errors.d.ts.map +1 -0
  193. package/dist/src/models/{gemini → google}/errors.js +11 -5
  194. package/dist/src/models/google/errors.js.map +1 -0
  195. package/dist/src/models/google/index.d.ts +15 -0
  196. package/dist/src/models/google/index.d.ts.map +1 -0
  197. package/dist/src/models/google/index.js +15 -0
  198. package/dist/src/models/google/index.js.map +1 -0
  199. package/dist/src/models/{gemini → google}/model.d.ts +18 -18
  200. package/dist/src/models/{gemini → google}/model.d.ts.map +1 -1
  201. package/dist/src/models/{gemini → google}/model.js +22 -19
  202. package/dist/src/models/google/model.js.map +1 -0
  203. package/dist/src/models/{gemini → google}/types.d.ts +9 -9
  204. package/dist/src/models/{gemini → google}/types.d.ts.map +1 -1
  205. package/dist/src/models/google/types.js +5 -0
  206. package/dist/src/models/google/types.js.map +1 -0
  207. package/dist/src/models/model.d.ts +12 -0
  208. package/dist/src/models/model.d.ts.map +1 -1
  209. package/dist/src/models/model.js +6 -10
  210. package/dist/src/models/model.js.map +1 -1
  211. package/dist/src/models/openai.d.ts +44 -11
  212. package/dist/src/models/openai.d.ts.map +1 -1
  213. package/dist/src/models/openai.js +133 -79
  214. package/dist/src/models/openai.js.map +1 -1
  215. package/dist/src/models/streaming.d.ts +18 -0
  216. package/dist/src/models/streaming.d.ts.map +1 -1
  217. package/dist/src/models/streaming.js +29 -0
  218. package/dist/src/models/streaming.js.map +1 -1
  219. package/dist/src/multiagent/__tests__/events.test.js +201 -7
  220. package/dist/src/multiagent/__tests__/events.test.js.map +1 -1
  221. package/dist/src/multiagent/__tests__/graph.test.js +28 -13
  222. package/dist/src/multiagent/__tests__/graph.test.js.map +1 -1
  223. package/dist/src/multiagent/__tests__/graph.tracer.test.d.ts +2 -0
  224. package/dist/src/multiagent/__tests__/graph.tracer.test.d.ts.map +1 -0
  225. package/dist/src/multiagent/__tests__/graph.tracer.test.js +204 -0
  226. package/dist/src/multiagent/__tests__/graph.tracer.test.js.map +1 -0
  227. package/dist/src/multiagent/__tests__/nodes.test.js +76 -15
  228. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
  229. package/dist/src/multiagent/__tests__/swarm.test.js +67 -16
  230. package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -1
  231. package/dist/src/multiagent/__tests__/swarm.tracer.test.d.ts +2 -0
  232. package/dist/src/multiagent/__tests__/swarm.tracer.test.d.ts.map +1 -0
  233. package/dist/src/multiagent/__tests__/swarm.tracer.test.js +235 -0
  234. package/dist/src/multiagent/__tests__/swarm.tracer.test.js.map +1 -0
  235. package/dist/src/multiagent/events.d.ts +62 -14
  236. package/dist/src/multiagent/events.d.ts.map +1 -1
  237. package/dist/src/multiagent/events.js +45 -3
  238. package/dist/src/multiagent/events.js.map +1 -1
  239. package/dist/src/multiagent/graph.d.ts +25 -11
  240. package/dist/src/multiagent/graph.d.ts.map +1 -1
  241. package/dist/src/multiagent/graph.js +76 -44
  242. package/dist/src/multiagent/graph.js.map +1 -1
  243. package/dist/src/multiagent/index.d.ts +4 -3
  244. package/dist/src/multiagent/index.d.ts.map +1 -1
  245. package/dist/src/multiagent/index.js.map +1 -1
  246. package/dist/src/multiagent/multiagent.d.ts +41 -0
  247. package/dist/src/multiagent/multiagent.d.ts.map +1 -0
  248. package/dist/src/multiagent/multiagent.js +2 -0
  249. package/dist/src/multiagent/multiagent.js.map +1 -0
  250. package/dist/src/multiagent/nodes.d.ts +35 -24
  251. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  252. package/dist/src/multiagent/nodes.js +50 -23
  253. package/dist/src/multiagent/nodes.js.map +1 -1
  254. package/dist/src/multiagent/plugins.d.ts +70 -0
  255. package/dist/src/multiagent/plugins.d.ts.map +1 -0
  256. package/dist/src/multiagent/plugins.js +70 -0
  257. package/dist/src/multiagent/plugins.js.map +1 -0
  258. package/dist/src/multiagent/state.d.ts +10 -5
  259. package/dist/src/multiagent/state.d.ts.map +1 -1
  260. package/dist/src/multiagent/state.js +20 -6
  261. package/dist/src/multiagent/state.js.map +1 -1
  262. package/dist/src/multiagent/swarm.d.ts +41 -17
  263. package/dist/src/multiagent/swarm.d.ts.map +1 -1
  264. package/dist/src/multiagent/swarm.js +101 -42
  265. package/dist/src/multiagent/swarm.js.map +1 -1
  266. package/dist/src/plugins/__tests__/plugin.test.d.ts +2 -0
  267. package/dist/src/plugins/__tests__/plugin.test.d.ts.map +1 -0
  268. package/dist/src/plugins/__tests__/plugin.test.js +114 -0
  269. package/dist/src/plugins/__tests__/plugin.test.js.map +1 -0
  270. package/dist/src/plugins/__tests__/registry.test.d.ts +2 -0
  271. package/dist/src/plugins/__tests__/registry.test.d.ts.map +1 -0
  272. package/dist/src/plugins/__tests__/registry.test.js +147 -0
  273. package/dist/src/plugins/__tests__/registry.test.js.map +1 -0
  274. package/dist/src/plugins/index.d.ts +30 -0
  275. package/dist/src/plugins/index.d.ts.map +1 -0
  276. package/dist/src/plugins/index.js +30 -0
  277. package/dist/src/plugins/index.js.map +1 -0
  278. package/dist/src/plugins/plugin.d.ts +74 -0
  279. package/dist/src/plugins/plugin.d.ts.map +1 -0
  280. package/dist/src/plugins/plugin.js +8 -0
  281. package/dist/src/plugins/plugin.js.map +1 -0
  282. package/dist/src/plugins/registry.d.ts +25 -0
  283. package/dist/src/plugins/registry.d.ts.map +1 -0
  284. package/dist/src/plugins/registry.js +41 -0
  285. package/dist/src/plugins/registry.js.map +1 -0
  286. package/dist/src/session/__tests__/session-manager.test.js +110 -92
  287. package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
  288. package/dist/src/session/index.d.ts +0 -1
  289. package/dist/src/session/index.d.ts.map +1 -1
  290. package/dist/src/session/index.js +0 -1
  291. package/dist/src/session/index.js.map +1 -1
  292. package/dist/src/session/session-manager.d.ts +11 -8
  293. package/dist/src/session/session-manager.d.ts.map +1 -1
  294. package/dist/src/session/session-manager.js +24 -16
  295. package/dist/src/session/session-manager.js.map +1 -1
  296. package/dist/src/session/storage.d.ts +1 -1
  297. package/dist/src/session/storage.d.ts.map +1 -1
  298. package/dist/src/session/types.d.ts +2 -2
  299. package/dist/src/session/types.d.ts.map +1 -1
  300. package/dist/src/{app-state.d.ts → state-store.d.ts} +11 -11
  301. package/dist/src/state-store.d.ts.map +1 -0
  302. package/dist/src/{app-state.js → state-store.js} +8 -7
  303. package/dist/src/state-store.js.map +1 -0
  304. package/dist/src/telemetry/__tests__/config.test.js +24 -0
  305. package/dist/src/telemetry/__tests__/config.test.js.map +1 -1
  306. package/dist/src/telemetry/__tests__/config.test.node.js +56 -0
  307. package/dist/src/telemetry/__tests__/config.test.node.js.map +1 -1
  308. package/dist/src/telemetry/__tests__/local-trace.test.d.ts +2 -0
  309. package/dist/src/telemetry/__tests__/local-trace.test.d.ts.map +1 -0
  310. package/dist/src/telemetry/__tests__/local-trace.test.js +158 -0
  311. package/dist/src/telemetry/__tests__/local-trace.test.js.map +1 -0
  312. package/dist/src/telemetry/__tests__/meter.test.js +176 -9
  313. package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
  314. package/dist/src/telemetry/__tests__/tracer.test.node.js +151 -2
  315. package/dist/src/telemetry/__tests__/tracer.test.node.js.map +1 -1
  316. package/dist/src/telemetry/config.d.ts +72 -12
  317. package/dist/src/telemetry/config.d.ts.map +1 -1
  318. package/dist/src/telemetry/config.js +102 -25
  319. package/dist/src/telemetry/config.js.map +1 -1
  320. package/dist/src/telemetry/index.d.ts +10 -7
  321. package/dist/src/telemetry/index.d.ts.map +1 -1
  322. package/dist/src/telemetry/index.js +9 -6
  323. package/dist/src/telemetry/index.js.map +1 -1
  324. package/dist/src/telemetry/meter.d.ts +23 -17
  325. package/dist/src/telemetry/meter.d.ts.map +1 -1
  326. package/dist/src/telemetry/meter.js +86 -41
  327. package/dist/src/telemetry/meter.js.map +1 -1
  328. package/dist/src/telemetry/tracer.d.ts +134 -18
  329. package/dist/src/telemetry/tracer.d.ts.map +1 -1
  330. package/dist/src/telemetry/tracer.js +325 -38
  331. package/dist/src/telemetry/tracer.js.map +1 -1
  332. package/dist/src/telemetry/types.d.ts +51 -0
  333. package/dist/src/telemetry/types.d.ts.map +1 -1
  334. package/dist/src/telemetry/utils.d.ts +10 -0
  335. package/dist/src/telemetry/utils.d.ts.map +1 -0
  336. package/dist/src/telemetry/utils.js +13 -0
  337. package/dist/src/telemetry/utils.js.map +1 -0
  338. package/dist/src/tools/__tests__/structured-output-tool.test.d.ts +2 -0
  339. package/dist/src/tools/__tests__/structured-output-tool.test.d.ts.map +1 -0
  340. package/dist/src/tools/__tests__/structured-output-tool.test.js +84 -0
  341. package/dist/src/tools/__tests__/structured-output-tool.test.js.map +1 -0
  342. package/dist/src/tools/__tests__/tool.test.js +22 -1
  343. package/dist/src/tools/__tests__/tool.test.js.map +1 -1
  344. package/dist/src/tools/function-tool.d.ts +11 -1
  345. package/dist/src/tools/function-tool.d.ts.map +1 -1
  346. package/dist/src/tools/function-tool.js +64 -3
  347. package/dist/src/tools/function-tool.js.map +1 -1
  348. package/dist/src/tools/structured-output-tool.d.ts +41 -0
  349. package/dist/src/tools/structured-output-tool.d.ts.map +1 -0
  350. package/dist/src/tools/structured-output-tool.js +82 -0
  351. package/dist/src/tools/structured-output-tool.js.map +1 -0
  352. package/dist/src/tools/tool.d.ts +2 -2
  353. package/dist/src/tools/tool.d.ts.map +1 -1
  354. package/dist/src/tools/zod-tool.js +1 -1
  355. package/dist/src/tools/zod-tool.js.map +1 -1
  356. package/dist/src/{utils/zod.d.ts → tools/zod-utils.d.ts} +1 -1
  357. package/dist/src/tools/zod-utils.d.ts.map +1 -0
  358. package/dist/src/{utils/zod.js → tools/zod-utils.js} +1 -1
  359. package/dist/src/tools/zod-utils.js.map +1 -0
  360. package/dist/src/tsconfig.tsbuildinfo +1 -1
  361. package/dist/src/types/__tests__/agent.test.js +127 -0
  362. package/dist/src/types/__tests__/agent.test.js.map +1 -1
  363. package/dist/src/types/__tests__/media.test.js +22 -16
  364. package/dist/src/types/__tests__/media.test.js.map +1 -1
  365. package/dist/src/types/agent.d.ts +101 -7
  366. package/dist/src/types/agent.d.ts.map +1 -1
  367. package/dist/src/types/agent.js +26 -0
  368. package/dist/src/types/agent.js.map +1 -1
  369. package/dist/src/types/media.d.ts +27 -30
  370. package/dist/src/types/media.d.ts.map +1 -1
  371. package/dist/src/types/media.js +15 -56
  372. package/dist/src/types/media.js.map +1 -1
  373. package/dist/src/types/messages.d.ts +18 -4
  374. package/dist/src/types/messages.d.ts.map +1 -1
  375. package/dist/src/types/messages.js +22 -26
  376. package/dist/src/types/messages.js.map +1 -1
  377. package/dist/src/types/serializable.d.ts +34 -4
  378. package/dist/src/types/serializable.d.ts.map +1 -1
  379. package/dist/src/types/serializable.js +31 -2
  380. package/dist/src/types/serializable.js.map +1 -1
  381. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +17 -4
  382. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  383. package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
  384. package/dist/src/vended-tools/bash/bash.js +16 -14
  385. package/dist/src/vended-tools/bash/bash.js.map +1 -1
  386. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.d.ts.map +1 -0
  387. package/dist/src/vended-tools/{file_editor → file-editor}/__tests__/file-editor.test.node.js +11 -4
  388. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -0
  389. package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.d.ts +1 -1
  390. package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.d.ts.map +1 -1
  391. package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.js +2 -2
  392. package/dist/src/vended-tools/{file_editor → file-editor}/file-editor.js.map +1 -1
  393. package/dist/src/vended-tools/{file_editor → file-editor}/index.d.ts.map +1 -1
  394. package/dist/src/vended-tools/file-editor/index.js.map +1 -0
  395. package/dist/src/vended-tools/{file_editor → file-editor}/types.d.ts.map +1 -1
  396. package/dist/src/vended-tools/file-editor/types.js.map +1 -0
  397. package/dist/src/vended-tools/http-request/__tests__/http-request.test.d.ts.map +1 -0
  398. package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.js.map +1 -1
  399. package/dist/src/vended-tools/{http_request → http-request}/http-request.d.ts.map +1 -1
  400. package/dist/src/vended-tools/{http_request → http-request}/http-request.js.map +1 -1
  401. package/dist/src/vended-tools/{http_request → http-request}/index.d.ts.map +1 -1
  402. package/dist/src/vended-tools/http-request/index.js.map +1 -0
  403. package/dist/src/vended-tools/{http_request → http-request}/types.d.ts.map +1 -1
  404. package/dist/src/vended-tools/http-request/types.js.map +1 -0
  405. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +5 -4
  406. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
  407. package/dist/src/vended-tools/notebook/notebook.js +2 -2
  408. package/dist/src/vended-tools/notebook/notebook.js.map +1 -1
  409. package/package.json +63 -17
  410. package/dist/src/__fixtures__/mock-hook-provider.d.ts +0 -10
  411. package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +0 -1
  412. package/dist/src/__fixtures__/mock-hook-provider.js.map +0 -1
  413. package/dist/src/__tests__/app-state.test.d.ts +0 -2
  414. package/dist/src/__tests__/app-state.test.d.ts.map +0 -1
  415. package/dist/src/__tests__/app-state.test.js.map +0 -1
  416. package/dist/src/agent/__tests__/agent.tracer.test.d.ts +0 -2
  417. package/dist/src/agent/__tests__/agent.tracer.test.d.ts.map +0 -1
  418. package/dist/src/agent/__tests__/agent.tracer.test.js.map +0 -1
  419. package/dist/src/app-state.d.ts.map +0 -1
  420. package/dist/src/app-state.js.map +0 -1
  421. package/dist/src/models/__tests__/gemini.test.d.ts +0 -2
  422. package/dist/src/models/__tests__/gemini.test.d.ts.map +0 -1
  423. package/dist/src/models/__tests__/gemini.test.js.map +0 -1
  424. package/dist/src/models/gemini/adapters.js.map +0 -1
  425. package/dist/src/models/gemini/errors.d.ts.map +0 -1
  426. package/dist/src/models/gemini/errors.js.map +0 -1
  427. package/dist/src/models/gemini/model.js.map +0 -1
  428. package/dist/src/models/gemini/types.js +0 -5
  429. package/dist/src/models/gemini/types.js.map +0 -1
  430. package/dist/src/multiagent/base.d.ts +0 -25
  431. package/dist/src/multiagent/base.d.ts.map +0 -1
  432. package/dist/src/multiagent/base.js +0 -2
  433. package/dist/src/multiagent/base.js.map +0 -1
  434. package/dist/src/structured-output/__tests__/context.test.d.ts +0 -2
  435. package/dist/src/structured-output/__tests__/context.test.d.ts.map +0 -1
  436. package/dist/src/structured-output/__tests__/context.test.js +0 -201
  437. package/dist/src/structured-output/__tests__/context.test.js.map +0 -1
  438. package/dist/src/structured-output/__tests__/exceptions.test.d.ts +0 -2
  439. package/dist/src/structured-output/__tests__/exceptions.test.d.ts.map +0 -1
  440. package/dist/src/structured-output/__tests__/exceptions.test.js +0 -103
  441. package/dist/src/structured-output/__tests__/exceptions.test.js.map +0 -1
  442. package/dist/src/structured-output/__tests__/tool.test.d.ts +0 -2
  443. package/dist/src/structured-output/__tests__/tool.test.d.ts.map +0 -1
  444. package/dist/src/structured-output/__tests__/tool.test.js +0 -256
  445. package/dist/src/structured-output/__tests__/tool.test.js.map +0 -1
  446. package/dist/src/structured-output/__tests__/utils.test.d.ts +0 -2
  447. package/dist/src/structured-output/__tests__/utils.test.d.ts.map +0 -1
  448. package/dist/src/structured-output/__tests__/utils.test.js +0 -183
  449. package/dist/src/structured-output/__tests__/utils.test.js.map +0 -1
  450. package/dist/src/structured-output/context.d.ts +0 -91
  451. package/dist/src/structured-output/context.d.ts.map +0 -1
  452. package/dist/src/structured-output/context.js +0 -112
  453. package/dist/src/structured-output/context.js.map +0 -1
  454. package/dist/src/structured-output/exceptions.d.ts +0 -18
  455. package/dist/src/structured-output/exceptions.d.ts.map +0 -1
  456. package/dist/src/structured-output/exceptions.js +0 -28
  457. package/dist/src/structured-output/exceptions.js.map +0 -1
  458. package/dist/src/structured-output/tool.d.ts +0 -33
  459. package/dist/src/structured-output/tool.d.ts.map +0 -1
  460. package/dist/src/structured-output/tool.js +0 -73
  461. package/dist/src/structured-output/tool.js.map +0 -1
  462. package/dist/src/structured-output/utils.d.ts +0 -23
  463. package/dist/src/structured-output/utils.d.ts.map +0 -1
  464. package/dist/src/structured-output/utils.js +0 -104
  465. package/dist/src/structured-output/utils.js.map +0 -1
  466. package/dist/src/utils/zod.d.ts.map +0 -1
  467. package/dist/src/utils/zod.js.map +0 -1
  468. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.d.ts.map +0 -1
  469. package/dist/src/vended-tools/file_editor/__tests__/file-editor.test.node.js.map +0 -1
  470. package/dist/src/vended-tools/file_editor/index.js.map +0 -1
  471. package/dist/src/vended-tools/file_editor/types.js.map +0 -1
  472. package/dist/src/vended-tools/http_request/__tests__/http-request.test.d.ts.map +0 -1
  473. package/dist/src/vended-tools/http_request/index.js.map +0 -1
  474. package/dist/src/vended-tools/http_request/types.js.map +0 -1
  475. /package/dist/src/vended-tools/{file_editor → file-editor}/__tests__/file-editor.test.node.d.ts +0 -0
  476. /package/dist/src/vended-tools/{file_editor → file-editor}/index.d.ts +0 -0
  477. /package/dist/src/vended-tools/{file_editor → file-editor}/index.js +0 -0
  478. /package/dist/src/vended-tools/{file_editor → file-editor}/types.d.ts +0 -0
  479. /package/dist/src/vended-tools/{file_editor → file-editor}/types.js +0 -0
  480. /package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.d.ts +0 -0
  481. /package/dist/src/vended-tools/{http_request → http-request}/__tests__/http-request.test.js +0 -0
  482. /package/dist/src/vended-tools/{http_request → http-request}/http-request.d.ts +0 -0
  483. /package/dist/src/vended-tools/{http_request → http-request}/http-request.js +0 -0
  484. /package/dist/src/vended-tools/{http_request → http-request}/index.d.ts +0 -0
  485. /package/dist/src/vended-tools/{http_request → http-request}/index.js +0 -0
  486. /package/dist/src/vended-tools/{http_request → http-request}/types.d.ts +0 -0
  487. /package/dist/src/vended-tools/{http_request → http-request}/types.js +0 -0
package/README.md CHANGED
@@ -47,6 +47,7 @@ Strands Agents is a simple yet powerful SDK that takes a model-driven approach t
47
47
  - **⚡ Streaming Support**: Real-time response streaming for better user experience
48
48
  - **🎣 Extensible Hooks**: Lifecycle hooks for monitoring and customizing agent behavior
49
49
  - **💬 Conversation Management**: Flexible strategies for managing conversation history and context windows
50
+ - **🤝 Multi-Agent Orchestration**: Graph and Swarm patterns for coordinating multiple agents
50
51
 
51
52
  ---
52
53
 
@@ -73,7 +74,7 @@ const result = await agent.invoke('What is the square root of 1764?')
73
74
  console.log(result)
74
75
  ```
75
76
 
76
- > **Note**: For the default Amazon Bedrock model provider, you'll need AWS credentials configured and model access enabled for Claude 4.5 Sonnet in your region.
77
+ > **Note**: For the default Amazon Bedrock model provider, you'll need AWS credentials configured and model access enabled for Claude Sonnet 4 in your region.
77
78
 
78
79
  ---
79
80
 
@@ -113,10 +114,10 @@ const agent = new Agent({ model })
113
114
 
114
115
  ```typescript
115
116
  import { Agent } from '@strands-agents/sdk'
116
- import { OpenAIModel } from '@strands-agents/sdk/openai'
117
+ import { OpenAIModel } from '@strands-agents/sdk/models/openai'
117
118
 
118
- // Automatically uses process.env.OPENAI_API_KEY and defaults to gpt-4o
119
- const model = new OpenAIModel()
119
+ // Automatically uses process.env.OPENAI_API_KEY and defaults to gpt-5.4
120
+ const model = new OpenAIModel({ api: 'chat' })
120
121
 
121
122
  const agent = new Agent({ model })
122
123
  ```
@@ -193,16 +194,16 @@ console.log(result.structuredOutput.name) // "John Smith"
193
194
  console.log(result.structuredOutput.age) // 30
194
195
  ```
195
196
 
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
+ **Error handling**: The agent automatically retries with validation feedback when the LLM provides invalid output. If validation ultimately fails, a `StructuredOutputError` is thrown:
197
198
 
198
199
  ```typescript
199
- import { StructuredOutputException } from '@strands-agents/sdk'
200
+ import { StructuredOutputError } from '@strands-agents/sdk'
200
201
 
201
202
  try {
202
203
  const result = await agent.invoke('Extract person info...')
203
204
  console.log(result.structuredOutput)
204
205
  } catch (error) {
205
- if (error instanceof StructuredOutputException) {
206
+ if (error instanceof StructuredOutputError) {
206
207
  console.error('Validation failed:', error.message)
207
208
  }
208
209
  }
@@ -235,6 +236,69 @@ await agent.invoke("Use a random tool from the MCP server.");
235
236
  await documentationTools.disconnect();
236
237
  ```
237
238
 
239
+ ### Multi-Agent Orchestration
240
+
241
+ Coordinate multiple agents using built-in orchestration patterns.
242
+
243
+ **Graph** — You define a deterministic execution plan. Agents run as nodes in a directed graph, with edges controlling execution order. Parallel execution is supported, and downstream nodes run once all dependencies complete.
244
+
245
+ ```typescript
246
+ import { Agent, BedrockModel, Graph } from '@strands-agents/sdk'
247
+
248
+ const model = new BedrockModel({ maxTokens: 1024 })
249
+
250
+ const researcher = new Agent({
251
+ model,
252
+ id: 'researcher',
253
+ systemPrompt: 'Research the topic and provide key facts.',
254
+ })
255
+
256
+ const writer = new Agent({
257
+ model,
258
+ id: 'writer',
259
+ systemPrompt: 'Rewrite the research into a polished paragraph.',
260
+ })
261
+
262
+ const graph = new Graph({
263
+ nodes: [researcher, writer],
264
+ edges: [['researcher', 'writer']],
265
+ })
266
+
267
+ const result = await graph.invoke('What is the largest ocean?')
268
+ ```
269
+
270
+ **Swarm** — The agents decide the routing. Each agent chooses whether to hand off to another agent or produce a final response, making the execution path dynamic and model-driven.
271
+
272
+ ```typescript
273
+ import { Agent, BedrockModel, Swarm } from '@strands-agents/sdk'
274
+
275
+ const model = new BedrockModel({ maxTokens: 1024 })
276
+
277
+ const researcher = new Agent({
278
+ model,
279
+ id: 'researcher',
280
+ description: 'Researches a topic and gathers key facts.',
281
+ systemPrompt: 'Research the answer, then hand off to the writer.',
282
+ })
283
+
284
+ const writer = new Agent({
285
+ model,
286
+ id: 'writer',
287
+ description: 'Writes a polished final answer.',
288
+ systemPrompt: 'Write the final answer. Do not hand off.',
289
+ })
290
+
291
+ const swarm = new Swarm({
292
+ nodes: [researcher, writer],
293
+ start: 'researcher',
294
+ maxSteps: 4,
295
+ })
296
+
297
+ const result = await swarm.invoke('What is the largest ocean?')
298
+ ```
299
+
300
+ Both patterns support streaming via `.stream()` for real-time access to handoff and node execution events. See the [examples](./examples/) directory for complete working samples.
301
+
238
302
  ---
239
303
 
240
304
  ## Documentation
@@ -3,9 +3,22 @@
3
3
  * This module provides utilities for testing Agent-related implementations.
4
4
  */
5
5
  import type { Agent } from '../agent/agent.js';
6
+ import type { AgentResult } from '../types/agent.js';
7
+ import type { StopReason } from '../types/messages.js';
6
8
  import { Message } from '../types/messages.js';
7
9
  import type { Role } from '../types/messages.js';
8
10
  import type { JSONValue } from '../types/json.js';
11
+ import { ToolRegistry } from '../registry/tool-registry.js';
12
+ import type { HookableEvent } from '../hooks/events.js';
13
+ import type { HookableEventConstructor, HookCallback } from '../hooks/types.js';
14
+ import { type LoopMetricsMatcher } from './metrics-helpers.js';
15
+ /**
16
+ * A hook registration captured by the mock agent's addHook.
17
+ */
18
+ export type TrackedHook = {
19
+ eventType: HookableEventConstructor<HookableEvent>;
20
+ callback: HookCallback<HookableEvent>;
21
+ };
9
22
  /**
10
23
  * Data for creating a mock Agent.
11
24
  */
@@ -17,16 +30,31 @@ export interface MockAgentData {
17
30
  /**
18
31
  * Initial state for the agent.
19
32
  */
20
- state?: Record<string, JSONValue>;
33
+ appState?: Record<string, JSONValue>;
34
+ /**
35
+ * Optional tool registry for the agent.
36
+ */
37
+ toolRegistry?: ToolRegistry;
38
+ /**
39
+ * Additional properties to spread onto the mock agent.
40
+ */
41
+ extra?: Partial<Agent>;
21
42
  }
43
+ /**
44
+ * A mock Agent with a `trackedHooks` array populated by `addHook` calls.
45
+ */
46
+ export type MockAgent = Agent & {
47
+ trackedHooks: TrackedHook[];
48
+ };
22
49
  /**
23
50
  * Helper to create a mock Agent for testing.
24
- * Provides minimal Agent interface with messages and state.
51
+ * Provides minimal Agent interface with messages, appState, and tool registry.
52
+ * `addHook` captures registrations into `trackedHooks` for test inspection.
25
53
  *
26
54
  * @param data - Optional mock agent data
27
- * @returns Mock Agent object
55
+ * @returns Mock Agent with trackedHooks
28
56
  */
29
- export declare function createMockAgent(data?: MockAgentData): Agent;
57
+ export declare function createMockAgent(data?: MockAgentData): MockAgent;
30
58
  /**
31
59
  * Creates a Message with the given role containing a single TextBlock.
32
60
  *
@@ -35,4 +63,53 @@ export declare function createMockAgent(data?: MockAgentData): Agent;
35
63
  * @returns A Message with the specified role
36
64
  */
37
65
  export declare function textMessage(role: Role, text: string): Message;
66
+ /**
67
+ * Finds the tracked hook for the given event type and invokes it with the provided event.
68
+ * Throws if no hook is registered for that event type.
69
+ *
70
+ * @param agent - The mock agent with tracked hooks
71
+ * @param event - The event instance to dispatch
72
+ */
73
+ export declare function invokeTrackedHook<T extends HookableEvent>(agent: MockAgent, event: T): Promise<void>;
74
+ /**
75
+ * Options for building an AgentResult matcher.
76
+ */
77
+ export interface AgentResultMatcher extends Omit<LoopMetricsMatcher, 'cycleCount'> {
78
+ /**
79
+ * Expected stop reason from the final model response.
80
+ */
81
+ stopReason: StopReason;
82
+ /**
83
+ * Expected text content in the last assistant message's TextBlock.
84
+ * When provided, asserts exact text match in a TextBlock with role 'assistant'.
85
+ * When omitted, only validates lastMessage exists with role 'assistant'.
86
+ */
87
+ messageText?: string;
88
+ /**
89
+ * Expected number of agent loop cycles.
90
+ */
91
+ cycleCount: number;
92
+ /**
93
+ * Expected number of traces. When provided, asserts exact array length.
94
+ * When omitted, asserts traces array exists with at least one element.
95
+ */
96
+ traceCount?: number;
97
+ }
98
+ /**
99
+ * Creates an asymmetric matcher that validates AgentResult structure and values.
100
+ * Reduces nesting in test assertions by providing a clean, readable matcher.
101
+ *
102
+ * @param options - Expected result values
103
+ * @returns An asymmetric matcher suitable for use in expect().toEqual()
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * expect(result).toEqual(expectAgentResult({
108
+ * stopReason: 'endTurn',
109
+ * messageText: 'Hello',
110
+ * cycleCount: 1,
111
+ * }))
112
+ * ```
113
+ */
114
+ export declare function expectAgentResult(options: AgentResultMatcher): AgentResult;
38
115
  //# sourceMappingURL=agent-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAa,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;CAClC;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,KAAK,CAK3D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D"}
1
+ {"version":3,"file":"agent-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,OAAO,EAAa,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC/E,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAEjF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,wBAAwB,CAAC,aAAa,CAAC,CAAA;IAClD,QAAQ,EAAE,YAAY,CAAC,aAAa,CAAC,CAAA;CACtC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACpC;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG;IAAE,YAAY,EAAE,WAAW,EAAE,CAAA;CAAE,CAAA;AAE/D;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAgB/D;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,SAAS,aAAa,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1G;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC;IAChF;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;IAEtB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW,CA+B1E"}
@@ -2,19 +2,34 @@
2
2
  * Test fixtures and helpers for Agent testing.
3
3
  * This module provides utilities for testing Agent-related implementations.
4
4
  */
5
+ import { expect } from 'vitest';
5
6
  import { Message, TextBlock } from '../types/messages.js';
6
- import { AppState } from '../app-state.js';
7
+ import { StateStore } from '../state-store.js';
8
+ import { ToolRegistry } from '../registry/tool-registry.js';
9
+ import { expectLoopMetrics } from './metrics-helpers.js';
7
10
  /**
8
11
  * Helper to create a mock Agent for testing.
9
- * Provides minimal Agent interface with messages and state.
12
+ * Provides minimal Agent interface with messages, appState, and tool registry.
13
+ * `addHook` captures registrations into `trackedHooks` for test inspection.
10
14
  *
11
15
  * @param data - Optional mock agent data
12
- * @returns Mock Agent object
16
+ * @returns Mock Agent with trackedHooks
13
17
  */
14
18
  export function createMockAgent(data) {
19
+ const trackedHooks = [];
15
20
  return {
16
21
  messages: data?.messages ?? [],
17
- state: new AppState(data?.state ?? {}),
22
+ appState: new StateStore(data?.appState ?? {}),
23
+ toolRegistry: data?.toolRegistry ?? new ToolRegistry(),
24
+ addHook: (eventType, callback) => {
25
+ trackedHooks.push({
26
+ eventType: eventType,
27
+ callback: callback,
28
+ });
29
+ return () => { };
30
+ },
31
+ ...data?.extra,
32
+ trackedHooks,
18
33
  };
19
34
  }
20
35
  /**
@@ -27,4 +42,61 @@ export function createMockAgent(data) {
27
42
  export function textMessage(role, text) {
28
43
  return new Message({ role, content: [new TextBlock(text)] });
29
44
  }
45
+ /**
46
+ * Finds the tracked hook for the given event type and invokes it with the provided event.
47
+ * Throws if no hook is registered for that event type.
48
+ *
49
+ * @param agent - The mock agent with tracked hooks
50
+ * @param event - The event instance to dispatch
51
+ */
52
+ export async function invokeTrackedHook(agent, event) {
53
+ const hook = agent.trackedHooks.find((h) => h.eventType === event.constructor);
54
+ if (!hook) {
55
+ throw new Error(`No hook registered for event type: ${event.constructor.name}`);
56
+ }
57
+ await hook.callback(event);
58
+ }
59
+ /**
60
+ * Creates an asymmetric matcher that validates AgentResult structure and values.
61
+ * Reduces nesting in test assertions by providing a clean, readable matcher.
62
+ *
63
+ * @param options - Expected result values
64
+ * @returns An asymmetric matcher suitable for use in expect().toEqual()
65
+ *
66
+ * @example
67
+ * ```typescript
68
+ * expect(result).toEqual(expectAgentResult({
69
+ * stopReason: 'endTurn',
70
+ * messageText: 'Hello',
71
+ * cycleCount: 1,
72
+ * }))
73
+ * ```
74
+ */
75
+ export function expectAgentResult(options) {
76
+ const { stopReason, messageText, cycleCount, traceCount, toolNames, usage } = options;
77
+ const expectedLastMessage = messageText
78
+ ? expect.objectContaining({
79
+ role: 'assistant',
80
+ content: expect.arrayContaining([expect.objectContaining({ type: 'textBlock', text: messageText })]),
81
+ })
82
+ : expect.objectContaining({ role: 'assistant' });
83
+ const expectedTraces = traceCount !== undefined
84
+ ? expect.objectContaining({ length: traceCount })
85
+ : expect.arrayContaining([expect.objectContaining({ name: expect.any(String) })]);
86
+ // Build metrics matcher options, only including defined properties
87
+ const metricsOptions = { cycleCount };
88
+ if (toolNames !== undefined) {
89
+ metricsOptions.toolNames = toolNames;
90
+ }
91
+ if (usage !== undefined) {
92
+ metricsOptions.usage = usage;
93
+ }
94
+ return expect.objectContaining({
95
+ type: 'agentResult',
96
+ stopReason,
97
+ lastMessage: expectedLastMessage,
98
+ metrics: expectLoopMetrics(metricsOptions),
99
+ traces: expectedTraces,
100
+ });
101
+ }
30
102
  //# sourceMappingURL=agent-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAEzD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAiB1C;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAoB;IAClD,OAAO;QACL,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;QAC9B,KAAK,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;KACnB,CAAA;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,IAAY;IAClD,OAAO,IAAI,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAA;AAC9D,CAAC"}
1
+ {"version":3,"file":"agent-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/agent-helpers.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Test helpers for asserting on AgentMetrics in agent tests.
3
3
  */
4
+ import type { Usage } from '../models/streaming.js';
4
5
  import { AgentMetrics } from '../telemetry/meter.js';
5
6
  /**
6
7
  * Options for building an AgentMetrics matcher.
@@ -14,6 +15,11 @@ export interface LoopMetricsMatcher {
14
15
  * Expected tool names that were invoked.
15
16
  */
16
17
  toolNames?: string[];
18
+ /**
19
+ * Expected accumulated token usage. When provided, asserts exact values.
20
+ * When omitted, asserts the shape with expect.any(Number).
21
+ */
22
+ usage?: Usage;
17
23
  }
18
24
  /**
19
25
  * Creates an asymmetric matcher that validates AgentMetrics structure and values.
@@ -22,4 +28,28 @@ export interface LoopMetricsMatcher {
22
28
  * @returns An asymmetric matcher suitable for use in expect().toEqual()
23
29
  */
24
30
  export declare function expectLoopMetrics(options: LoopMetricsMatcher): AgentMetrics;
31
+ /**
32
+ * Finds the latest data point value for a named metric from OTEL ResourceMetrics.
33
+ *
34
+ * Flattens the ResourceMetrics → ScopeMetrics → MetricData hierarchy and
35
+ * returns the value of the last data point for the matching metric name.
36
+ * For counters this is a number; for histograms it is an object with
37
+ * sum, count, min, max, etc.
38
+ *
39
+ * @param resourceMetrics - Array of ResourceMetrics from an InMemoryMetricExporter
40
+ * @param metricName - The metric descriptor name to search for
41
+ * @returns The value of the last data point, or undefined if not found
42
+ */
43
+ export declare function findMetricValue(resourceMetrics: {
44
+ scopeMetrics: {
45
+ metrics: {
46
+ descriptor: {
47
+ name: string;
48
+ };
49
+ dataPoints: {
50
+ value: unknown;
51
+ }[];
52
+ }[];
53
+ }[];
54
+ }[], metricName: string): unknown;
25
55
  //# sourceMappingURL=metrics-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/metrics-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,YAAY,CAuB3E"}
1
+ {"version":3,"file":"metrics-helpers.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/metrics-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,YAAY,CA2B3E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,eAAe,EAAE;IACf,YAAY,EAAE;QAAE,OAAO,EAAE;YAAE,UAAU,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,UAAU,EAAE;gBAAE,KAAK,EAAE,OAAO,CAAA;aAAE,EAAE,CAAA;SAAE,EAAE,CAAA;KAAE,EAAE,CAAA;CAClG,EAAE,EACH,UAAU,EAAE,MAAM,GACjB,OAAO,CAQT"}
@@ -10,7 +10,7 @@ import { AgentMetrics } from '../telemetry/meter.js';
10
10
  * @returns An asymmetric matcher suitable for use in expect().toEqual()
11
11
  */
12
12
  export function expectLoopMetrics(options) {
13
- const { cycleCount, toolNames = [] } = options;
13
+ const { cycleCount, toolNames = [], usage } = options;
14
14
  const expectedToolMetrics = {};
15
15
  for (const name of toolNames) {
16
16
  expectedToolMetrics[name] = {
@@ -20,15 +20,38 @@ export function expectLoopMetrics(options) {
20
20
  totalTime: expect.any(Number),
21
21
  };
22
22
  }
23
- return expect.objectContaining({
24
- cycleCount,
25
- toolMetrics: toolNames.length > 0 ? expect.objectContaining(expectedToolMetrics) : {},
26
- accumulatedUsage: expect.objectContaining({
23
+ const expectedUsage = usage ??
24
+ expect.objectContaining({
27
25
  inputTokens: expect.any(Number),
28
26
  outputTokens: expect.any(Number),
29
27
  totalTokens: expect.any(Number),
30
- }),
28
+ });
29
+ return expect.objectContaining({
30
+ cycleCount,
31
+ toolMetrics: toolNames.length > 0 ? expect.objectContaining(expectedToolMetrics) : {},
32
+ accumulatedUsage: expectedUsage,
31
33
  accumulatedMetrics: { latencyMs: expect.any(Number) },
32
34
  });
33
35
  }
36
+ /**
37
+ * Finds the latest data point value for a named metric from OTEL ResourceMetrics.
38
+ *
39
+ * Flattens the ResourceMetrics → ScopeMetrics → MetricData hierarchy and
40
+ * returns the value of the last data point for the matching metric name.
41
+ * For counters this is a number; for histograms it is an object with
42
+ * sum, count, min, max, etc.
43
+ *
44
+ * @param resourceMetrics - Array of ResourceMetrics from an InMemoryMetricExporter
45
+ * @param metricName - The metric descriptor name to search for
46
+ * @returns The value of the last data point, or undefined if not found
47
+ */
48
+ export function findMetricValue(resourceMetrics, metricName) {
49
+ const dp = resourceMetrics
50
+ .flatMap((rm) => rm.scopeMetrics)
51
+ .flatMap((sm) => sm.metrics)
52
+ .filter((m) => m.descriptor.name === metricName)
53
+ .flatMap((m) => m.dataPoints)
54
+ .at(-1);
55
+ return dp?.value;
56
+ }
34
57
  //# sourceMappingURL=metrics-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/metrics-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAiBpD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,EAAE,UAAU,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,OAAO,CAAA;IAE9C,MAAM,mBAAmB,GAA4B,EAAE,CAAA;IACvD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,mBAAmB,CAAC,IAAI,CAAC,GAAG;YAC1B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7B,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAChC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;SAC9B,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAC,gBAAgB,CAAC;QAC7B,UAAU;QACV,WAAW,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE;QACrF,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;YACxC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/B,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAChC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;SAChC,CAAC;QACF,kBAAkB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;KACtD,CAAiB,CAAA;AACpB,CAAC"}
1
+ {"version":3,"file":"metrics-helpers.js","sourceRoot":"","sources":["../../../src/__fixtures__/metrics-helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAuBpD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,EAAE,UAAU,EAAE,SAAS,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IAErD,MAAM,mBAAmB,GAA4B,EAAE,CAAA;IACvD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,mBAAmB,CAAC,IAAI,CAAC,GAAG;YAC1B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC7B,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAChC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;SAC9B,CAAA;IACH,CAAC;IAED,MAAM,aAAa,GACjB,KAAK;QACL,MAAM,CAAC,gBAAgB,CAAC;YACtB,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAC/B,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;YAChC,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;SAChC,CAAC,CAAA;IAEJ,OAAO,MAAM,CAAC,gBAAgB,CAAC;QAC7B,UAAU;QACV,WAAW,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE;QACrF,gBAAgB,EAAE,aAAa;QAC/B,kBAAkB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;KACtD,CAAiB,CAAA;AACpB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,eAEG,EACH,UAAkB;IAElB,MAAM,EAAE,GAAG,eAAe;SACvB,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC;SAChC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC;SAC/C,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SAC5B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACT,OAAO,EAAE,EAAE,KAAK,CAAA;AAClB,CAAC"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { Model } from '../models/model.js';
8
8
  import type { Message, StopReason } from '../types/messages.js';
9
- import type { ModelStreamEvent } from '../models/streaming.js';
9
+ import type { ModelStreamEvent, Usage } from '../models/streaming.js';
10
10
  import type { BaseModelConfig, StreamOptions } from '../models/model.js';
11
11
  import type { PlainContentBlock } from './slim-types.js';
12
12
  /**
@@ -35,7 +35,7 @@ export declare class MockMessageModel extends Model<BaseModelConfig> {
35
35
  * Returns this for method chaining.
36
36
  *
37
37
  * @param turn - ContentBlock, ContentBlock[], or Error to add
38
- * @param stopReason - Optional explicit stopReason (overrides auto-derivation)
38
+ * @param options - Optional stop reason and token usage
39
39
  * @returns This provider for chaining
40
40
  *
41
41
  * @example
@@ -43,11 +43,15 @@ export declare class MockMessageModel extends Model<BaseModelConfig> {
43
43
  * provider
44
44
  * .addTurn({ type: 'textBlock', text: 'Hello' }) // Single block
45
45
  * .addTurn([{ type: 'toolUseBlock', ... }]) // Array of blocks
46
- * .addTurn({ type: 'textBlock', text: 'Done' }, 'maxTokens') // Explicit stopReason
46
+ * .addTurn({ type: 'textBlock', text: 'Done' }, { stopReason: 'maxTokens' }) // Explicit stopReason
47
+ * .addTurn({ type: 'textBlock', text: 'Hi' }, { usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } })
47
48
  * .addTurn(new Error('Failed')) // Error turn
48
49
  * ```
49
50
  */
50
- addTurn(turn: ContentBlockInput, stopReason?: StopReason): this;
51
+ addTurn(turn: ContentBlockInput, options?: {
52
+ stopReason?: StopReason;
53
+ usage?: Usage;
54
+ }): this;
51
55
  /**
52
56
  * Updates the model configuration.
53
57
  *
@@ -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,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;CA8FvC"}
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,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACrE,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;AAUxE;;;;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;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,GAAG,IAAI;IAK5F;;;;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;IAuBxC;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;YACY,yBAAyB;IAcxC;;OAEG;YACY,uBAAuB;CA8FvC"}
@@ -34,7 +34,7 @@ export class MockMessageModel extends Model {
34
34
  * Returns this for method chaining.
35
35
  *
36
36
  * @param turn - ContentBlock, ContentBlock[], or Error to add
37
- * @param stopReason - Optional explicit stopReason (overrides auto-derivation)
37
+ * @param options - Optional stop reason and token usage
38
38
  * @returns This provider for chaining
39
39
  *
40
40
  * @example
@@ -42,12 +42,13 @@ export class MockMessageModel extends Model {
42
42
  * provider
43
43
  * .addTurn({ type: 'textBlock', text: 'Hello' }) // Single block
44
44
  * .addTurn([{ type: 'toolUseBlock', ... }]) // Array of blocks
45
- * .addTurn({ type: 'textBlock', text: 'Done' }, 'maxTokens') // Explicit stopReason
45
+ * .addTurn({ type: 'textBlock', text: 'Done' }, { stopReason: 'maxTokens' }) // Explicit stopReason
46
+ * .addTurn({ type: 'textBlock', text: 'Hi' }, { usage: { inputTokens: 10, outputTokens: 5, totalTokens: 15 } })
46
47
  * .addTurn(new Error('Failed')) // Error turn
47
48
  * ```
48
49
  */
49
- addTurn(turn, stopReason) {
50
- this._turns.push(this._createTurn(turn, stopReason));
50
+ addTurn(turn, options) {
51
+ this._turns.push(this._createTurn(turn, options?.stopReason, options?.usage));
51
52
  return this;
52
53
  }
53
54
  /**
@@ -97,13 +98,13 @@ export class MockMessageModel extends Model {
97
98
  throw turn.error;
98
99
  }
99
100
  // Generate events for content turn
100
- yield* this._generateEventsForContent(turn.content, turn.stopReason);
101
+ yield* this._generateEventsForContent(turn.content, turn.stopReason, turn.usage);
101
102
  }
102
103
  /**
103
104
  * Generates appropriate ModelStreamEvents for content blocks.
104
105
  * All messages have role 'assistant' since this is for testing model responses.
105
106
  */
106
- async *_generateEventsForContent(content, stopReason) {
107
+ async *_generateEventsForContent(content, stopReason, usage) {
107
108
  // Yield message start event (always assistant role)
108
109
  yield { type: 'modelMessageStartEvent', role: 'assistant' };
109
110
  // Yield events for each content block
@@ -113,11 +114,15 @@ export class MockMessageModel extends Model {
113
114
  }
114
115
  // Yield message stop event
115
116
  yield { type: 'modelMessageStopEvent', stopReason };
117
+ // Yield metadata event with token usage when provided
118
+ if (usage) {
119
+ yield { type: 'modelMetadataEvent', usage };
120
+ }
116
121
  }
117
122
  /**
118
123
  * Creates a Turn object from ContentBlock(s) or Error.
119
124
  */
120
- _createTurn(turn, explicitStopReason) {
125
+ _createTurn(turn, explicitStopReason, usage) {
121
126
  if (turn instanceof Error) {
122
127
  return { type: 'error', error: turn };
123
128
  }
@@ -127,6 +132,7 @@ export class MockMessageModel extends Model {
127
132
  type: 'content',
128
133
  content,
129
134
  stopReason: explicitStopReason ?? this._deriveStopReason(content),
135
+ ...(usage !== undefined && { usage }),
130
136
  };
131
137
  }
132
138
  /**
@@ -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,32 @@
1
+ /**
2
+ * Mock OpenTelemetry Meter for testing metric instrument emission.
3
+ * Records all counter and histogram data points for assertion.
4
+ */
5
+ import type { Attributes } from '@opentelemetry/api';
6
+ export interface MockDataPoint {
7
+ value: number;
8
+ attributes: Attributes | undefined;
9
+ }
10
+ export declare class MockCounter {
11
+ readonly dataPoints: MockDataPoint[];
12
+ add(value: number, attributes?: Attributes): void;
13
+ get sum(): number;
14
+ }
15
+ export declare class MockHistogram {
16
+ readonly dataPoints: MockDataPoint[];
17
+ record(value: number, attributes?: Attributes): void;
18
+ get sum(): number;
19
+ }
20
+ /**
21
+ * Mock OTEL Meter that tracks created instruments by name.
22
+ * Cast to `Meter` when passing to `vi.spyOn(otelMetrics, 'getMeter')`.
23
+ */
24
+ export declare class MockMeter {
25
+ private readonly _counters;
26
+ private readonly _histograms;
27
+ createCounter(name: string): MockCounter;
28
+ createHistogram(name: string): MockHistogram;
29
+ getCounter(name: string): MockCounter | undefined;
30
+ getHistogram(name: string): MockHistogram | undefined;
31
+ }
32
+ //# sourceMappingURL=mock-meter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-meter.d.ts","sourceRoot":"","sources":["../../../src/__fixtures__/mock-meter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAEpD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,UAAU,GAAG,SAAS,CAAA;CACnC;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAK;IAEzC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF;AAED,qBAAa,aAAa;IACxB,QAAQ,CAAC,UAAU,EAAE,aAAa,EAAE,CAAK;IAEzC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAIpD,IAAI,GAAG,IAAI,MAAM,CAEhB;CACF;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;IAE/D,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW;IAMxC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAM5C,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIjD,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;CAGtD"}