@strands-agents/sdk 1.6.0 → 1.8.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 (708) hide show
  1. package/dist/src/agent/agent.d.ts +1 -1
  2. package/dist/src/agent/agent.d.ts.map +1 -1
  3. package/dist/src/agent/agent.js +1 -1
  4. package/dist/src/agent/agent.js.map +1 -1
  5. package/dist/src/context-manager/modes/agentic/agentic-context.d.ts +3 -3
  6. package/dist/src/context-manager/modes/agentic/agentic-context.d.ts.map +1 -1
  7. package/dist/src/index.d.ts +1 -1
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +1 -1
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/index.node.d.ts.map +1 -1
  12. package/dist/src/index.node.js +3 -0
  13. package/dist/src/index.node.js.map +1 -1
  14. package/dist/src/interventions/actions.d.ts.map +1 -1
  15. package/dist/src/interventions/actions.js.map +1 -1
  16. package/dist/src/{mcp.d.ts → mcp/client.d.ts} +13 -4
  17. package/dist/src/mcp/client.d.ts.map +1 -0
  18. package/dist/src/{mcp.js → mcp/client.js} +15 -3
  19. package/dist/src/mcp/client.js.map +1 -0
  20. package/dist/src/mcp/config.d.ts +52 -0
  21. package/dist/src/mcp/config.d.ts.map +1 -0
  22. package/dist/src/mcp/config.js +12 -0
  23. package/dist/src/mcp/config.js.map +1 -0
  24. package/dist/src/mcp/config.node.d.ts +16 -0
  25. package/dist/src/mcp/config.node.d.ts.map +1 -0
  26. package/dist/src/mcp/config.node.js +145 -0
  27. package/dist/src/mcp/config.node.js.map +1 -0
  28. package/dist/src/mcp/index.d.ts +3 -0
  29. package/dist/src/mcp/index.d.ts.map +1 -0
  30. package/dist/src/mcp/index.js +2 -0
  31. package/dist/src/mcp/index.js.map +1 -0
  32. package/dist/src/memory/extraction/coordinator.d.ts +6 -1
  33. package/dist/src/memory/extraction/coordinator.d.ts.map +1 -1
  34. package/dist/src/memory/extraction/coordinator.js +48 -10
  35. package/dist/src/memory/extraction/coordinator.js.map +1 -1
  36. package/dist/src/memory/extraction/model-extractor.d.ts.map +1 -1
  37. package/dist/src/memory/extraction/model-extractor.js +30 -9
  38. package/dist/src/memory/extraction/model-extractor.js.map +1 -1
  39. package/dist/src/memory/extraction/types.d.ts +7 -0
  40. package/dist/src/memory/extraction/types.d.ts.map +1 -1
  41. package/dist/src/memory/extraction/types.js.map +1 -1
  42. package/dist/src/memory/memory-manager.d.ts +15 -2
  43. package/dist/src/memory/memory-manager.d.ts.map +1 -1
  44. package/dist/src/memory/memory-manager.js +123 -45
  45. package/dist/src/memory/memory-manager.js.map +1 -1
  46. package/dist/src/memory/types.d.ts +7 -0
  47. package/dist/src/memory/types.d.ts.map +1 -1
  48. package/dist/src/models/google/adapters.d.ts.map +1 -1
  49. package/dist/src/models/google/adapters.js +21 -3
  50. package/dist/src/models/google/adapters.js.map +1 -1
  51. package/dist/src/models/model.d.ts.map +1 -1
  52. package/dist/src/models/model.js +2 -1
  53. package/dist/src/models/model.js.map +1 -1
  54. package/dist/src/models/openai/errors.d.ts.map +1 -1
  55. package/dist/src/models/openai/errors.js +4 -1
  56. package/dist/src/models/openai/errors.js.map +1 -1
  57. package/dist/src/models/openai/responses-adapter.d.ts +1 -0
  58. package/dist/src/models/openai/responses-adapter.d.ts.map +1 -1
  59. package/dist/src/models/openai/responses-adapter.js +24 -10
  60. package/dist/src/models/openai/responses-adapter.js.map +1 -1
  61. package/dist/src/multiagent/graph.d.ts +7 -0
  62. package/dist/src/multiagent/graph.d.ts.map +1 -1
  63. package/dist/src/multiagent/graph.js +26 -2
  64. package/dist/src/multiagent/graph.js.map +1 -1
  65. package/dist/src/multiagent/nodes.d.ts +5 -0
  66. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  67. package/dist/src/multiagent/nodes.js +15 -0
  68. package/dist/src/multiagent/nodes.js.map +1 -1
  69. package/dist/src/multiagent/state.d.ts.map +1 -1
  70. package/dist/src/multiagent/state.js.map +1 -1
  71. package/dist/src/telemetry/tracer.d.ts +82 -2
  72. package/dist/src/telemetry/tracer.d.ts.map +1 -1
  73. package/dist/src/telemetry/tracer.js +242 -3
  74. package/dist/src/telemetry/tracer.js.map +1 -1
  75. package/dist/src/telemetry/types.d.ts +86 -1
  76. package/dist/src/telemetry/types.d.ts.map +1 -1
  77. package/dist/src/tools/function-tool.d.ts +1 -1
  78. package/dist/src/tools/function-tool.d.ts.map +1 -1
  79. package/dist/src/tools/function-tool.js +4 -12
  80. package/dist/src/tools/function-tool.js.map +1 -1
  81. package/dist/src/tools/mcp-tool.d.ts +2 -1
  82. package/dist/src/tools/mcp-tool.d.ts.map +1 -1
  83. package/dist/src/tools/mcp-tool.js +1 -0
  84. package/dist/src/tools/mcp-tool.js.map +1 -1
  85. package/dist/src/tools/tool-factory.d.ts +1 -1
  86. package/dist/src/tools/tool-factory.d.ts.map +1 -1
  87. package/dist/src/tools/types.d.ts +4 -0
  88. package/dist/src/tools/types.d.ts.map +1 -1
  89. package/dist/src/tools/zod-tool.d.ts +4 -2
  90. package/dist/src/tools/zod-tool.d.ts.map +1 -1
  91. package/dist/src/tools/zod-tool.js.map +1 -1
  92. package/dist/src/tsconfig.tsbuildinfo +1 -1
  93. package/dist/src/types/json.js +2 -2
  94. package/dist/src/types/json.js.map +1 -1
  95. package/dist/src/types/media.d.ts.map +1 -1
  96. package/dist/src/types/media.js.map +1 -1
  97. package/dist/src/types/messages.d.ts.map +1 -1
  98. package/dist/src/types/messages.js.map +1 -1
  99. package/dist/src/vended-interventions/cedar/cedar.d.ts +12 -0
  100. package/dist/src/vended-interventions/cedar/cedar.d.ts.map +1 -1
  101. package/dist/src/vended-interventions/cedar/cedar.js +15 -4
  102. package/dist/src/vended-interventions/cedar/cedar.js.map +1 -1
  103. package/dist/src/vended-interventions/cedar/schema-generator.d.ts +1 -1
  104. package/dist/src/vended-interventions/cedar/schema-generator.d.ts.map +1 -1
  105. package/dist/src/vended-interventions/cedar/schema-generator.js +8 -3
  106. package/dist/src/vended-interventions/cedar/schema-generator.js.map +1 -1
  107. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts +1 -1
  108. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.d.ts.map +1 -1
  109. package/dist/src/vended-memory-stores/bedrock-knowledge-base/index.js.map +1 -1
  110. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts +57 -0
  111. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.d.ts.map +1 -1
  112. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js +86 -11
  113. package/dist/src/vended-memory-stores/bedrock-knowledge-base/store.js.map +1 -1
  114. package/dist/src/vended-memory-stores/local/index.d.ts +2 -0
  115. package/dist/src/vended-memory-stores/local/index.d.ts.map +1 -0
  116. package/dist/src/vended-memory-stores/local/index.js +2 -0
  117. package/dist/src/vended-memory-stores/local/index.js.map +1 -0
  118. package/dist/src/vended-memory-stores/local/store.d.ts +122 -0
  119. package/dist/src/vended-memory-stores/local/store.d.ts.map +1 -0
  120. package/dist/src/vended-memory-stores/local/store.js +281 -0
  121. package/dist/src/vended-memory-stores/local/store.js.map +1 -0
  122. package/dist/src/vended-plugins/context-offloader/search.d.ts.map +1 -1
  123. package/dist/src/vended-plugins/context-offloader/search.js +4 -2
  124. package/dist/src/vended-plugins/context-offloader/search.js.map +1 -1
  125. package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -1
  126. package/dist/src/vended-plugins/context-offloader/storage.js +16 -3
  127. package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -1
  128. package/dist/src/vended-plugins/skills/skill.d.ts.map +1 -1
  129. package/dist/src/vended-plugins/skills/skill.js +4 -2
  130. package/dist/src/vended-plugins/skills/skill.js.map +1 -1
  131. package/dist/src/vended-tools/http-request/http-request.js +1 -1
  132. package/dist/src/vended-tools/http-request/http-request.js.map +1 -1
  133. package/dist/src/vended-tools/notebook/notebook.d.ts +1 -1
  134. package/package.json +46 -39
  135. package/dist/src/__fixtures__/agent-helpers.d.ts +0 -136
  136. package/dist/src/__fixtures__/agent-helpers.d.ts.map +0 -1
  137. package/dist/src/__fixtures__/agent-helpers.js +0 -156
  138. package/dist/src/__fixtures__/agent-helpers.js.map +0 -1
  139. package/dist/src/__fixtures__/environment.d.ts +0 -12
  140. package/dist/src/__fixtures__/environment.d.ts.map +0 -1
  141. package/dist/src/__fixtures__/environment.js +0 -12
  142. package/dist/src/__fixtures__/environment.js.map +0 -1
  143. package/dist/src/__fixtures__/metrics-helpers.d.ts +0 -55
  144. package/dist/src/__fixtures__/metrics-helpers.d.ts.map +0 -1
  145. package/dist/src/__fixtures__/metrics-helpers.js +0 -57
  146. package/dist/src/__fixtures__/metrics-helpers.js.map +0 -1
  147. package/dist/src/__fixtures__/mock-message-model.d.ts +0 -103
  148. package/dist/src/__fixtures__/mock-message-model.d.ts.map +0 -1
  149. package/dist/src/__fixtures__/mock-message-model.js +0 -245
  150. package/dist/src/__fixtures__/mock-message-model.js.map +0 -1
  151. package/dist/src/__fixtures__/mock-meter.d.ts +0 -32
  152. package/dist/src/__fixtures__/mock-meter.d.ts.map +0 -1
  153. package/dist/src/__fixtures__/mock-meter.js +0 -47
  154. package/dist/src/__fixtures__/mock-meter.js.map +0 -1
  155. package/dist/src/__fixtures__/mock-plugin.d.ts +0 -13
  156. package/dist/src/__fixtures__/mock-plugin.d.ts.map +0 -1
  157. package/dist/src/__fixtures__/mock-plugin.js +0 -35
  158. package/dist/src/__fixtures__/mock-plugin.js.map +0 -1
  159. package/dist/src/__fixtures__/mock-span.d.ts +0 -78
  160. package/dist/src/__fixtures__/mock-span.d.ts.map +0 -1
  161. package/dist/src/__fixtures__/mock-span.js +0 -93
  162. package/dist/src/__fixtures__/mock-span.js.map +0 -1
  163. package/dist/src/__fixtures__/mock-storage-provider.d.ts +0 -42
  164. package/dist/src/__fixtures__/mock-storage-provider.d.ts.map +0 -1
  165. package/dist/src/__fixtures__/mock-storage-provider.js +0 -122
  166. package/dist/src/__fixtures__/mock-storage-provider.js.map +0 -1
  167. package/dist/src/__fixtures__/model-test-helpers.d.ts +0 -56
  168. package/dist/src/__fixtures__/model-test-helpers.d.ts.map +0 -1
  169. package/dist/src/__fixtures__/model-test-helpers.js +0 -85
  170. package/dist/src/__fixtures__/model-test-helpers.js.map +0 -1
  171. package/dist/src/__fixtures__/register-node-defaults.d.ts +0 -2
  172. package/dist/src/__fixtures__/register-node-defaults.d.ts.map +0 -1
  173. package/dist/src/__fixtures__/register-node-defaults.js +0 -6
  174. package/dist/src/__fixtures__/register-node-defaults.js.map +0 -1
  175. package/dist/src/__fixtures__/slim-types.d.ts +0 -51
  176. package/dist/src/__fixtures__/slim-types.d.ts.map +0 -1
  177. package/dist/src/__fixtures__/slim-types.js +0 -6
  178. package/dist/src/__fixtures__/slim-types.js.map +0 -1
  179. package/dist/src/__fixtures__/test-sandbox.node.d.ts +0 -15
  180. package/dist/src/__fixtures__/test-sandbox.node.d.ts.map +0 -1
  181. package/dist/src/__fixtures__/test-sandbox.node.js +0 -23
  182. package/dist/src/__fixtures__/test-sandbox.node.js.map +0 -1
  183. package/dist/src/__fixtures__/tool-helpers.d.ts +0 -45
  184. package/dist/src/__fixtures__/tool-helpers.d.ts.map +0 -1
  185. package/dist/src/__fixtures__/tool-helpers.js +0 -101
  186. package/dist/src/__fixtures__/tool-helpers.js.map +0 -1
  187. package/dist/src/__tests__/default-slot.test.d.ts +0 -2
  188. package/dist/src/__tests__/default-slot.test.d.ts.map +0 -1
  189. package/dist/src/__tests__/default-slot.test.js +0 -33
  190. package/dist/src/__tests__/default-slot.test.js.map +0 -1
  191. package/dist/src/__tests__/errors.test.d.ts +0 -2
  192. package/dist/src/__tests__/errors.test.d.ts.map +0 -1
  193. package/dist/src/__tests__/errors.test.js +0 -170
  194. package/dist/src/__tests__/errors.test.js.map +0 -1
  195. package/dist/src/__tests__/index.test.d.ts +0 -2
  196. package/dist/src/__tests__/index.test.d.ts.map +0 -1
  197. package/dist/src/__tests__/index.test.js +0 -48
  198. package/dist/src/__tests__/index.test.js.map +0 -1
  199. package/dist/src/__tests__/interrupt.test.d.ts +0 -2
  200. package/dist/src/__tests__/interrupt.test.d.ts.map +0 -1
  201. package/dist/src/__tests__/interrupt.test.js +0 -264
  202. package/dist/src/__tests__/interrupt.test.js.map +0 -1
  203. package/dist/src/__tests__/mcp.test.d.ts +0 -2
  204. package/dist/src/__tests__/mcp.test.d.ts.map +0 -1
  205. package/dist/src/__tests__/mcp.test.js +0 -1003
  206. package/dist/src/__tests__/mcp.test.js.map +0 -1
  207. package/dist/src/__tests__/mime.test.d.ts +0 -2
  208. package/dist/src/__tests__/mime.test.d.ts.map +0 -1
  209. package/dist/src/__tests__/mime.test.js +0 -83
  210. package/dist/src/__tests__/mime.test.js.map +0 -1
  211. package/dist/src/__tests__/state-store.test.d.ts +0 -2
  212. package/dist/src/__tests__/state-store.test.d.ts.map +0 -1
  213. package/dist/src/__tests__/state-store.test.js +0 -285
  214. package/dist/src/__tests__/state-store.test.js.map +0 -1
  215. package/dist/src/a2a/__tests__/a2a-agent.test.d.ts +0 -2
  216. package/dist/src/a2a/__tests__/a2a-agent.test.d.ts.map +0 -1
  217. package/dist/src/a2a/__tests__/a2a-agent.test.js +0 -383
  218. package/dist/src/a2a/__tests__/a2a-agent.test.js.map +0 -1
  219. package/dist/src/a2a/__tests__/adapters.test.d.ts +0 -2
  220. package/dist/src/a2a/__tests__/adapters.test.d.ts.map +0 -1
  221. package/dist/src/a2a/__tests__/adapters.test.js +0 -151
  222. package/dist/src/a2a/__tests__/adapters.test.js.map +0 -1
  223. package/dist/src/a2a/__tests__/async-lock.test.d.ts +0 -2
  224. package/dist/src/a2a/__tests__/async-lock.test.d.ts.map +0 -1
  225. package/dist/src/a2a/__tests__/async-lock.test.js +0 -137
  226. package/dist/src/a2a/__tests__/async-lock.test.js.map +0 -1
  227. package/dist/src/a2a/__tests__/events.test.d.ts +0 -2
  228. package/dist/src/a2a/__tests__/events.test.d.ts.map +0 -1
  229. package/dist/src/a2a/__tests__/events.test.js +0 -68
  230. package/dist/src/a2a/__tests__/events.test.js.map +0 -1
  231. package/dist/src/a2a/__tests__/executor.test.d.ts +0 -2
  232. package/dist/src/a2a/__tests__/executor.test.d.ts.map +0 -1
  233. package/dist/src/a2a/__tests__/executor.test.js +0 -345
  234. package/dist/src/a2a/__tests__/executor.test.js.map +0 -1
  235. package/dist/src/a2a/__tests__/server.test.d.ts +0 -2
  236. package/dist/src/a2a/__tests__/server.test.d.ts.map +0 -1
  237. package/dist/src/a2a/__tests__/server.test.js +0 -71
  238. package/dist/src/a2a/__tests__/server.test.js.map +0 -1
  239. package/dist/src/a2a/__tests__/server.test.node.d.ts +0 -2
  240. package/dist/src/a2a/__tests__/server.test.node.d.ts.map +0 -1
  241. package/dist/src/a2a/__tests__/server.test.node.js +0 -110
  242. package/dist/src/a2a/__tests__/server.test.node.js.map +0 -1
  243. package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts +0 -2
  244. package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts.map +0 -1
  245. package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js +0 -23
  246. package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js.map +0 -1
  247. package/dist/src/agent/__tests__/agent-as-tool.test.d.ts +0 -2
  248. package/dist/src/agent/__tests__/agent-as-tool.test.d.ts.map +0 -1
  249. package/dist/src/agent/__tests__/agent-as-tool.test.js +0 -347
  250. package/dist/src/agent/__tests__/agent-as-tool.test.js.map +0 -1
  251. package/dist/src/agent/__tests__/agent.cancel.test.d.ts +0 -2
  252. package/dist/src/agent/__tests__/agent.cancel.test.d.ts.map +0 -1
  253. package/dist/src/agent/__tests__/agent.cancel.test.js +0 -337
  254. package/dist/src/agent/__tests__/agent.cancel.test.js.map +0 -1
  255. package/dist/src/agent/__tests__/agent.concurrent.test.d.ts +0 -2
  256. package/dist/src/agent/__tests__/agent.concurrent.test.d.ts.map +0 -1
  257. package/dist/src/agent/__tests__/agent.concurrent.test.js +0 -488
  258. package/dist/src/agent/__tests__/agent.concurrent.test.js.map +0 -1
  259. package/dist/src/agent/__tests__/agent.context-manager.test.d.ts +0 -2
  260. package/dist/src/agent/__tests__/agent.context-manager.test.d.ts.map +0 -1
  261. package/dist/src/agent/__tests__/agent.context-manager.test.js +0 -107
  262. package/dist/src/agent/__tests__/agent.context-manager.test.js.map +0 -1
  263. package/dist/src/agent/__tests__/agent.hook.test.d.ts +0 -2
  264. package/dist/src/agent/__tests__/agent.hook.test.d.ts.map +0 -1
  265. package/dist/src/agent/__tests__/agent.hook.test.js +0 -1332
  266. package/dist/src/agent/__tests__/agent.hook.test.js.map +0 -1
  267. package/dist/src/agent/__tests__/agent.interrupt.test.d.ts +0 -2
  268. package/dist/src/agent/__tests__/agent.interrupt.test.d.ts.map +0 -1
  269. package/dist/src/agent/__tests__/agent.interrupt.test.js +0 -779
  270. package/dist/src/agent/__tests__/agent.interrupt.test.js.map +0 -1
  271. package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts +0 -2
  272. package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts.map +0 -1
  273. package/dist/src/agent/__tests__/agent.invocation-state.test.js +0 -219
  274. package/dist/src/agent/__tests__/agent.invocation-state.test.js.map +0 -1
  275. package/dist/src/agent/__tests__/agent.model-retry.test.d.ts +0 -2
  276. package/dist/src/agent/__tests__/agent.model-retry.test.d.ts.map +0 -1
  277. package/dist/src/agent/__tests__/agent.model-retry.test.js +0 -161
  278. package/dist/src/agent/__tests__/agent.model-retry.test.js.map +0 -1
  279. package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts +0 -2
  280. package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts.map +0 -1
  281. package/dist/src/agent/__tests__/agent.stateful-model.test.js +0 -169
  282. package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +0 -1
  283. package/dist/src/agent/__tests__/agent.test.d.ts +0 -2
  284. package/dist/src/agent/__tests__/agent.test.d.ts.map +0 -1
  285. package/dist/src/agent/__tests__/agent.test.js +0 -1624
  286. package/dist/src/agent/__tests__/agent.test.js.map +0 -1
  287. package/dist/src/agent/__tests__/agent.tracer.test.node.d.ts +0 -2
  288. package/dist/src/agent/__tests__/agent.tracer.test.node.d.ts.map +0 -1
  289. package/dist/src/agent/__tests__/agent.tracer.test.node.js +0 -535
  290. package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +0 -1
  291. package/dist/src/agent/__tests__/printer.test.d.ts +0 -2
  292. package/dist/src/agent/__tests__/printer.test.d.ts.map +0 -1
  293. package/dist/src/agent/__tests__/printer.test.js +0 -188
  294. package/dist/src/agent/__tests__/printer.test.js.map +0 -1
  295. package/dist/src/agent/__tests__/snapshot.test.d.ts +0 -2
  296. package/dist/src/agent/__tests__/snapshot.test.d.ts.map +0 -1
  297. package/dist/src/agent/__tests__/snapshot.test.js +0 -442
  298. package/dist/src/agent/__tests__/snapshot.test.js.map +0 -1
  299. package/dist/src/agent/__tests__/tool-caller.test.d.ts +0 -2
  300. package/dist/src/agent/__tests__/tool-caller.test.d.ts.map +0 -1
  301. package/dist/src/agent/__tests__/tool-caller.test.js +0 -459
  302. package/dist/src/agent/__tests__/tool-caller.test.js.map +0 -1
  303. package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts +0 -2
  304. package/dist/src/conversation-manager/__tests__/agentic-context.test.d.ts.map +0 -1
  305. package/dist/src/conversation-manager/__tests__/agentic-context.test.js +0 -332
  306. package/dist/src/conversation-manager/__tests__/agentic-context.test.js.map +0 -1
  307. package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts +0 -2
  308. package/dist/src/conversation-manager/__tests__/context-compression.test.d.ts.map +0 -1
  309. package/dist/src/conversation-manager/__tests__/context-compression.test.js +0 -176
  310. package/dist/src/conversation-manager/__tests__/context-compression.test.js.map +0 -1
  311. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +0 -2
  312. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +0 -1
  313. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +0 -321
  314. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +0 -1
  315. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts +0 -2
  316. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts.map +0 -1
  317. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +0 -64
  318. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +0 -1
  319. package/dist/src/conversation-manager/__tests__/pin.test.d.ts +0 -2
  320. package/dist/src/conversation-manager/__tests__/pin.test.d.ts.map +0 -1
  321. package/dist/src/conversation-manager/__tests__/pin.test.js +0 -119
  322. package/dist/src/conversation-manager/__tests__/pin.test.js.map +0 -1
  323. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts +0 -2
  324. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts.map +0 -1
  325. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +0 -1080
  326. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +0 -1
  327. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.d.ts +0 -2
  328. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.d.ts.map +0 -1
  329. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +0 -400
  330. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +0 -1
  331. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts +0 -2
  332. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.d.ts.map +0 -1
  333. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js +0 -138
  334. package/dist/src/conversation-manager/__tests__/token-usage-middleware.test.js.map +0 -1
  335. package/dist/src/hooks/__tests__/events.test.d.ts +0 -2
  336. package/dist/src/hooks/__tests__/events.test.d.ts.map +0 -1
  337. package/dist/src/hooks/__tests__/events.test.js +0 -1060
  338. package/dist/src/hooks/__tests__/events.test.js.map +0 -1
  339. package/dist/src/hooks/__tests__/registry.test.d.ts +0 -2
  340. package/dist/src/hooks/__tests__/registry.test.d.ts.map +0 -1
  341. package/dist/src/hooks/__tests__/registry.test.js +0 -325
  342. package/dist/src/hooks/__tests__/registry.test.js.map +0 -1
  343. package/dist/src/injection/__tests__/message-injection.test.d.ts +0 -2
  344. package/dist/src/injection/__tests__/message-injection.test.d.ts.map +0 -1
  345. package/dist/src/injection/__tests__/message-injection.test.js +0 -200
  346. package/dist/src/injection/__tests__/message-injection.test.js.map +0 -1
  347. package/dist/src/interventions/__tests__/handler.test.d.ts +0 -2
  348. package/dist/src/interventions/__tests__/handler.test.d.ts.map +0 -1
  349. package/dist/src/interventions/__tests__/handler.test.js +0 -35
  350. package/dist/src/interventions/__tests__/handler.test.js.map +0 -1
  351. package/dist/src/interventions/__tests__/registry.test.d.ts +0 -2
  352. package/dist/src/interventions/__tests__/registry.test.d.ts.map +0 -1
  353. package/dist/src/interventions/__tests__/registry.test.js +0 -692
  354. package/dist/src/interventions/__tests__/registry.test.js.map +0 -1
  355. package/dist/src/logging/__tests__/logger.test.d.ts +0 -2
  356. package/dist/src/logging/__tests__/logger.test.d.ts.map +0 -1
  357. package/dist/src/logging/__tests__/logger.test.js +0 -70
  358. package/dist/src/logging/__tests__/logger.test.js.map +0 -1
  359. package/dist/src/logging/__tests__/warn-once.test.d.ts +0 -2
  360. package/dist/src/logging/__tests__/warn-once.test.d.ts.map +0 -1
  361. package/dist/src/logging/__tests__/warn-once.test.js +0 -30
  362. package/dist/src/logging/__tests__/warn-once.test.js.map +0 -1
  363. package/dist/src/mcp.d.ts.map +0 -1
  364. package/dist/src/mcp.js.map +0 -1
  365. package/dist/src/memory/__tests__/memory-manager.test.d.ts +0 -2
  366. package/dist/src/memory/__tests__/memory-manager.test.d.ts.map +0 -1
  367. package/dist/src/memory/__tests__/memory-manager.test.js +0 -679
  368. package/dist/src/memory/__tests__/memory-manager.test.js.map +0 -1
  369. package/dist/src/memory/extraction/__tests__/extraction.test.d.ts +0 -2
  370. package/dist/src/memory/extraction/__tests__/extraction.test.d.ts.map +0 -1
  371. package/dist/src/memory/extraction/__tests__/extraction.test.js +0 -637
  372. package/dist/src/memory/extraction/__tests__/extraction.test.js.map +0 -1
  373. package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts +0 -2
  374. package/dist/src/memory/extraction/__tests__/model-extractor.test.d.ts.map +0 -1
  375. package/dist/src/memory/extraction/__tests__/model-extractor.test.js +0 -68
  376. package/dist/src/memory/extraction/__tests__/model-extractor.test.js.map +0 -1
  377. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts +0 -2
  378. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.d.ts.map +0 -1
  379. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js +0 -81
  380. package/dist/src/memory/extraction/__tests__/resolve-extraction-config.test.js.map +0 -1
  381. package/dist/src/middleware/__tests__/agent-middleware.test.d.ts +0 -2
  382. package/dist/src/middleware/__tests__/agent-middleware.test.d.ts.map +0 -1
  383. package/dist/src/middleware/__tests__/agent-middleware.test.js +0 -1206
  384. package/dist/src/middleware/__tests__/agent-middleware.test.js.map +0 -1
  385. package/dist/src/middleware/__tests__/copy-on-input.test.d.ts +0 -2
  386. package/dist/src/middleware/__tests__/copy-on-input.test.d.ts.map +0 -1
  387. package/dist/src/middleware/__tests__/copy-on-input.test.js +0 -379
  388. package/dist/src/middleware/__tests__/copy-on-input.test.js.map +0 -1
  389. package/dist/src/middleware/__tests__/custom-stages.test.d.ts +0 -2
  390. package/dist/src/middleware/__tests__/custom-stages.test.d.ts.map +0 -1
  391. package/dist/src/middleware/__tests__/custom-stages.test.js +0 -97
  392. package/dist/src/middleware/__tests__/custom-stages.test.js.map +0 -1
  393. package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts +0 -2
  394. package/dist/src/middleware/__tests__/middleware-interrupts.test.d.ts.map +0 -1
  395. package/dist/src/middleware/__tests__/middleware-interrupts.test.js +0 -267
  396. package/dist/src/middleware/__tests__/middleware-interrupts.test.js.map +0 -1
  397. package/dist/src/middleware/__tests__/registry.test.d.ts +0 -2
  398. package/dist/src/middleware/__tests__/registry.test.d.ts.map +0 -1
  399. package/dist/src/middleware/__tests__/registry.test.js +0 -525
  400. package/dist/src/middleware/__tests__/registry.test.js.map +0 -1
  401. package/dist/src/models/__tests__/anthropic.test.d.ts +0 -2
  402. package/dist/src/models/__tests__/anthropic.test.d.ts.map +0 -1
  403. package/dist/src/models/__tests__/anthropic.test.js +0 -793
  404. package/dist/src/models/__tests__/anthropic.test.js.map +0 -1
  405. package/dist/src/models/__tests__/bedrock.test.d.ts +0 -2
  406. package/dist/src/models/__tests__/bedrock.test.d.ts.map +0 -1
  407. package/dist/src/models/__tests__/bedrock.test.js +0 -3964
  408. package/dist/src/models/__tests__/bedrock.test.js.map +0 -1
  409. package/dist/src/models/__tests__/defaults.test.d.ts +0 -2
  410. package/dist/src/models/__tests__/defaults.test.d.ts.map +0 -1
  411. package/dist/src/models/__tests__/defaults.test.js +0 -36
  412. package/dist/src/models/__tests__/defaults.test.js.map +0 -1
  413. package/dist/src/models/__tests__/google.test.d.ts +0 -2
  414. package/dist/src/models/__tests__/google.test.d.ts.map +0 -1
  415. package/dist/src/models/__tests__/google.test.js +0 -1104
  416. package/dist/src/models/__tests__/google.test.js.map +0 -1
  417. package/dist/src/models/__tests__/model.test.d.ts +0 -2
  418. package/dist/src/models/__tests__/model.test.d.ts.map +0 -1
  419. package/dist/src/models/__tests__/model.test.js +0 -921
  420. package/dist/src/models/__tests__/model.test.js.map +0 -1
  421. package/dist/src/models/__tests__/streaming.test.d.ts +0 -2
  422. package/dist/src/models/__tests__/streaming.test.d.ts.map +0 -1
  423. package/dist/src/models/__tests__/streaming.test.js +0 -50
  424. package/dist/src/models/__tests__/streaming.test.js.map +0 -1
  425. package/dist/src/models/__tests__/test-utils.d.ts +0 -10
  426. package/dist/src/models/__tests__/test-utils.d.ts.map +0 -1
  427. package/dist/src/models/__tests__/test-utils.js +0 -17
  428. package/dist/src/models/__tests__/test-utils.js.map +0 -1
  429. package/dist/src/models/__tests__/vercel.test.d.ts +0 -2
  430. package/dist/src/models/__tests__/vercel.test.d.ts.map +0 -1
  431. package/dist/src/models/__tests__/vercel.test.js +0 -740
  432. package/dist/src/models/__tests__/vercel.test.js.map +0 -1
  433. package/dist/src/models/openai/__tests__/chat.test.d.ts +0 -2
  434. package/dist/src/models/openai/__tests__/chat.test.d.ts.map +0 -1
  435. package/dist/src/models/openai/__tests__/chat.test.js +0 -1586
  436. package/dist/src/models/openai/__tests__/chat.test.js.map +0 -1
  437. package/dist/src/models/openai/__tests__/errors.test.d.ts +0 -2
  438. package/dist/src/models/openai/__tests__/errors.test.d.ts.map +0 -1
  439. package/dist/src/models/openai/__tests__/errors.test.js +0 -30
  440. package/dist/src/models/openai/__tests__/errors.test.js.map +0 -1
  441. package/dist/src/models/openai/__tests__/mantle.test.d.ts +0 -2
  442. package/dist/src/models/openai/__tests__/mantle.test.d.ts.map +0 -1
  443. package/dist/src/models/openai/__tests__/mantle.test.js +0 -189
  444. package/dist/src/models/openai/__tests__/mantle.test.js.map +0 -1
  445. package/dist/src/models/openai/__tests__/responses.test.d.ts +0 -2
  446. package/dist/src/models/openai/__tests__/responses.test.d.ts.map +0 -1
  447. package/dist/src/models/openai/__tests__/responses.test.js +0 -662
  448. package/dist/src/models/openai/__tests__/responses.test.js.map +0 -1
  449. package/dist/src/multiagent/__tests__/events.test.d.ts +0 -2
  450. package/dist/src/multiagent/__tests__/events.test.d.ts.map +0 -1
  451. package/dist/src/multiagent/__tests__/events.test.js +0 -493
  452. package/dist/src/multiagent/__tests__/events.test.js.map +0 -1
  453. package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts +0 -2
  454. package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts.map +0 -1
  455. package/dist/src/multiagent/__tests__/graph.invocation-state.test.js +0 -95
  456. package/dist/src/multiagent/__tests__/graph.invocation-state.test.js.map +0 -1
  457. package/dist/src/multiagent/__tests__/graph.test.d.ts +0 -2
  458. package/dist/src/multiagent/__tests__/graph.test.d.ts.map +0 -1
  459. package/dist/src/multiagent/__tests__/graph.test.js +0 -677
  460. package/dist/src/multiagent/__tests__/graph.test.js.map +0 -1
  461. package/dist/src/multiagent/__tests__/graph.tracer.test.d.ts +0 -2
  462. package/dist/src/multiagent/__tests__/graph.tracer.test.d.ts.map +0 -1
  463. package/dist/src/multiagent/__tests__/graph.tracer.test.js +0 -218
  464. package/dist/src/multiagent/__tests__/graph.tracer.test.js.map +0 -1
  465. package/dist/src/multiagent/__tests__/interrupts.test.d.ts +0 -2
  466. package/dist/src/multiagent/__tests__/interrupts.test.d.ts.map +0 -1
  467. package/dist/src/multiagent/__tests__/interrupts.test.js +0 -390
  468. package/dist/src/multiagent/__tests__/interrupts.test.js.map +0 -1
  469. package/dist/src/multiagent/__tests__/nodes.test.d.ts +0 -2
  470. package/dist/src/multiagent/__tests__/nodes.test.d.ts.map +0 -1
  471. package/dist/src/multiagent/__tests__/nodes.test.js +0 -321
  472. package/dist/src/multiagent/__tests__/nodes.test.js.map +0 -1
  473. package/dist/src/multiagent/__tests__/queue.test.d.ts +0 -2
  474. package/dist/src/multiagent/__tests__/queue.test.d.ts.map +0 -1
  475. package/dist/src/multiagent/__tests__/queue.test.js +0 -118
  476. package/dist/src/multiagent/__tests__/queue.test.js.map +0 -1
  477. package/dist/src/multiagent/__tests__/snapshot.test.d.ts +0 -2
  478. package/dist/src/multiagent/__tests__/snapshot.test.d.ts.map +0 -1
  479. package/dist/src/multiagent/__tests__/snapshot.test.js +0 -161
  480. package/dist/src/multiagent/__tests__/snapshot.test.js.map +0 -1
  481. package/dist/src/multiagent/__tests__/state.test.d.ts +0 -2
  482. package/dist/src/multiagent/__tests__/state.test.d.ts.map +0 -1
  483. package/dist/src/multiagent/__tests__/state.test.js +0 -526
  484. package/dist/src/multiagent/__tests__/state.test.js.map +0 -1
  485. package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts +0 -2
  486. package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts.map +0 -1
  487. package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js +0 -56
  488. package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js.map +0 -1
  489. package/dist/src/multiagent/__tests__/swarm.test.d.ts +0 -2
  490. package/dist/src/multiagent/__tests__/swarm.test.d.ts.map +0 -1
  491. package/dist/src/multiagent/__tests__/swarm.test.js +0 -477
  492. package/dist/src/multiagent/__tests__/swarm.test.js.map +0 -1
  493. package/dist/src/multiagent/__tests__/swarm.tracer.test.d.ts +0 -2
  494. package/dist/src/multiagent/__tests__/swarm.tracer.test.d.ts.map +0 -1
  495. package/dist/src/multiagent/__tests__/swarm.tracer.test.js +0 -235
  496. package/dist/src/multiagent/__tests__/swarm.tracer.test.js.map +0 -1
  497. package/dist/src/plugins/__tests__/plugin.test.d.ts +0 -2
  498. package/dist/src/plugins/__tests__/plugin.test.d.ts.map +0 -1
  499. package/dist/src/plugins/__tests__/plugin.test.js +0 -114
  500. package/dist/src/plugins/__tests__/plugin.test.js.map +0 -1
  501. package/dist/src/plugins/__tests__/registry.test.d.ts +0 -2
  502. package/dist/src/plugins/__tests__/registry.test.d.ts.map +0 -1
  503. package/dist/src/plugins/__tests__/registry.test.js +0 -147
  504. package/dist/src/plugins/__tests__/registry.test.js.map +0 -1
  505. package/dist/src/registry/__tests__/tool-registry.test.d.ts +0 -2
  506. package/dist/src/registry/__tests__/tool-registry.test.d.ts.map +0 -1
  507. package/dist/src/registry/__tests__/tool-registry.test.js +0 -210
  508. package/dist/src/registry/__tests__/tool-registry.test.js.map +0 -1
  509. package/dist/src/retry/__tests__/backoff-strategy.test.d.ts +0 -2
  510. package/dist/src/retry/__tests__/backoff-strategy.test.d.ts.map +0 -1
  511. package/dist/src/retry/__tests__/backoff-strategy.test.js +0 -116
  512. package/dist/src/retry/__tests__/backoff-strategy.test.js.map +0 -1
  513. package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts +0 -2
  514. package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts.map +0 -1
  515. package/dist/src/retry/__tests__/default-model-retry-strategy.test.js +0 -225
  516. package/dist/src/retry/__tests__/default-model-retry-strategy.test.js.map +0 -1
  517. package/dist/src/sandbox/__tests__/default.test.browser.d.ts +0 -2
  518. package/dist/src/sandbox/__tests__/default.test.browser.d.ts.map +0 -1
  519. package/dist/src/sandbox/__tests__/default.test.browser.js +0 -11
  520. package/dist/src/sandbox/__tests__/default.test.browser.js.map +0 -1
  521. package/dist/src/sandbox/__tests__/default.test.node.d.ts +0 -2
  522. package/dist/src/sandbox/__tests__/default.test.node.d.ts.map +0 -1
  523. package/dist/src/sandbox/__tests__/default.test.node.js +0 -23
  524. package/dist/src/sandbox/__tests__/default.test.node.js.map +0 -1
  525. package/dist/src/sandbox/__tests__/docker.test.node.d.ts +0 -2
  526. package/dist/src/sandbox/__tests__/docker.test.node.d.ts.map +0 -1
  527. package/dist/src/sandbox/__tests__/docker.test.node.js +0 -89
  528. package/dist/src/sandbox/__tests__/docker.test.node.js.map +0 -1
  529. package/dist/src/sandbox/__tests__/errors.test.node.d.ts +0 -2
  530. package/dist/src/sandbox/__tests__/errors.test.node.d.ts.map +0 -1
  531. package/dist/src/sandbox/__tests__/errors.test.node.js +0 -33
  532. package/dist/src/sandbox/__tests__/errors.test.node.js.map +0 -1
  533. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts +0 -2
  534. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.d.ts.map +0 -1
  535. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js +0 -124
  536. package/dist/src/sandbox/__tests__/not-a-sandbox-local-environment.test.node.js.map +0 -1
  537. package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts +0 -2
  538. package/dist/src/sandbox/__tests__/posix-shell.test.node.d.ts.map +0 -1
  539. package/dist/src/sandbox/__tests__/posix-shell.test.node.js +0 -298
  540. package/dist/src/sandbox/__tests__/posix-shell.test.node.js.map +0 -1
  541. package/dist/src/sandbox/__tests__/ssh.test.node.d.ts +0 -2
  542. package/dist/src/sandbox/__tests__/ssh.test.node.d.ts.map +0 -1
  543. package/dist/src/sandbox/__tests__/ssh.test.node.js +0 -262
  544. package/dist/src/sandbox/__tests__/ssh.test.node.js.map +0 -1
  545. package/dist/src/session/__tests__/file-storage.test.node.d.ts +0 -2
  546. package/dist/src/session/__tests__/file-storage.test.node.d.ts.map +0 -1
  547. package/dist/src/session/__tests__/file-storage.test.node.js +0 -278
  548. package/dist/src/session/__tests__/file-storage.test.node.js.map +0 -1
  549. package/dist/src/session/__tests__/s3-storage.test.d.ts +0 -2
  550. package/dist/src/session/__tests__/s3-storage.test.d.ts.map +0 -1
  551. package/dist/src/session/__tests__/s3-storage.test.js +0 -461
  552. package/dist/src/session/__tests__/s3-storage.test.js.map +0 -1
  553. package/dist/src/session/__tests__/session-manager.test.d.ts +0 -2
  554. package/dist/src/session/__tests__/session-manager.test.d.ts.map +0 -1
  555. package/dist/src/session/__tests__/session-manager.test.js +0 -832
  556. package/dist/src/session/__tests__/session-manager.test.js.map +0 -1
  557. package/dist/src/session/__tests__/validation.test.d.ts +0 -2
  558. package/dist/src/session/__tests__/validation.test.d.ts.map +0 -1
  559. package/dist/src/session/__tests__/validation.test.js +0 -47
  560. package/dist/src/session/__tests__/validation.test.js.map +0 -1
  561. package/dist/src/telemetry/__tests__/config.test.d.ts +0 -2
  562. package/dist/src/telemetry/__tests__/config.test.d.ts.map +0 -1
  563. package/dist/src/telemetry/__tests__/config.test.js +0 -64
  564. package/dist/src/telemetry/__tests__/config.test.js.map +0 -1
  565. package/dist/src/telemetry/__tests__/config.test.node.d.ts +0 -2
  566. package/dist/src/telemetry/__tests__/config.test.node.d.ts.map +0 -1
  567. package/dist/src/telemetry/__tests__/config.test.node.js +0 -164
  568. package/dist/src/telemetry/__tests__/config.test.node.js.map +0 -1
  569. package/dist/src/telemetry/__tests__/json.test.d.ts +0 -2
  570. package/dist/src/telemetry/__tests__/json.test.d.ts.map +0 -1
  571. package/dist/src/telemetry/__tests__/json.test.js +0 -89
  572. package/dist/src/telemetry/__tests__/json.test.js.map +0 -1
  573. package/dist/src/telemetry/__tests__/local-trace.test.d.ts +0 -2
  574. package/dist/src/telemetry/__tests__/local-trace.test.d.ts.map +0 -1
  575. package/dist/src/telemetry/__tests__/local-trace.test.js +0 -158
  576. package/dist/src/telemetry/__tests__/local-trace.test.js.map +0 -1
  577. package/dist/src/telemetry/__tests__/meter.test.d.ts +0 -2
  578. package/dist/src/telemetry/__tests__/meter.test.d.ts.map +0 -1
  579. package/dist/src/telemetry/__tests__/meter.test.js +0 -695
  580. package/dist/src/telemetry/__tests__/meter.test.js.map +0 -1
  581. package/dist/src/telemetry/__tests__/tracer.test.node.d.ts +0 -2
  582. package/dist/src/telemetry/__tests__/tracer.test.node.d.ts.map +0 -1
  583. package/dist/src/telemetry/__tests__/tracer.test.node.js +0 -760
  584. package/dist/src/telemetry/__tests__/tracer.test.node.js.map +0 -1
  585. package/dist/src/tools/__tests__/structured-output-tool.test.d.ts +0 -2
  586. package/dist/src/tools/__tests__/structured-output-tool.test.d.ts.map +0 -1
  587. package/dist/src/tools/__tests__/structured-output-tool.test.js +0 -84
  588. package/dist/src/tools/__tests__/structured-output-tool.test.js.map +0 -1
  589. package/dist/src/tools/__tests__/tool-factory.test.d.ts +0 -2
  590. package/dist/src/tools/__tests__/tool-factory.test.d.ts.map +0 -1
  591. package/dist/src/tools/__tests__/tool-factory.test.js +0 -98
  592. package/dist/src/tools/__tests__/tool-factory.test.js.map +0 -1
  593. package/dist/src/tools/__tests__/tool.test.d.ts +0 -2
  594. package/dist/src/tools/__tests__/tool.test.d.ts.map +0 -1
  595. package/dist/src/tools/__tests__/tool.test.js +0 -1043
  596. package/dist/src/tools/__tests__/tool.test.js.map +0 -1
  597. package/dist/src/tools/__tests__/zod-tool.test-d.d.ts +0 -2
  598. package/dist/src/tools/__tests__/zod-tool.test-d.d.ts.map +0 -1
  599. package/dist/src/tools/__tests__/zod-tool.test-d.js +0 -227
  600. package/dist/src/tools/__tests__/zod-tool.test-d.js.map +0 -1
  601. package/dist/src/tools/__tests__/zod-tool.test.d.ts +0 -2
  602. package/dist/src/tools/__tests__/zod-tool.test.d.ts.map +0 -1
  603. package/dist/src/tools/__tests__/zod-tool.test.js +0 -563
  604. package/dist/src/tools/__tests__/zod-tool.test.js.map +0 -1
  605. package/dist/src/types/__tests__/agent.test.d.ts +0 -2
  606. package/dist/src/types/__tests__/agent.test.d.ts.map +0 -1
  607. package/dist/src/types/__tests__/agent.test.js +0 -476
  608. package/dist/src/types/__tests__/agent.test.js.map +0 -1
  609. package/dist/src/types/__tests__/citations.test.d.ts +0 -2
  610. package/dist/src/types/__tests__/citations.test.d.ts.map +0 -1
  611. package/dist/src/types/__tests__/citations.test.js +0 -104
  612. package/dist/src/types/__tests__/citations.test.js.map +0 -1
  613. package/dist/src/types/__tests__/json.test.d.ts +0 -2
  614. package/dist/src/types/__tests__/json.test.d.ts.map +0 -1
  615. package/dist/src/types/__tests__/json.test.js +0 -298
  616. package/dist/src/types/__tests__/json.test.js.map +0 -1
  617. package/dist/src/types/__tests__/media.test.d.ts +0 -2
  618. package/dist/src/types/__tests__/media.test.d.ts.map +0 -1
  619. package/dist/src/types/__tests__/media.test.js +0 -478
  620. package/dist/src/types/__tests__/media.test.js.map +0 -1
  621. package/dist/src/types/__tests__/messages.test.d.ts +0 -2
  622. package/dist/src/types/__tests__/messages.test.d.ts.map +0 -1
  623. package/dist/src/types/__tests__/messages.test.js +0 -681
  624. package/dist/src/types/__tests__/messages.test.js.map +0 -1
  625. package/dist/src/types/__tests__/validation.test.d.ts +0 -2
  626. package/dist/src/types/__tests__/validation.test.d.ts.map +0 -1
  627. package/dist/src/types/__tests__/validation.test.js +0 -30
  628. package/dist/src/types/__tests__/validation.test.js.map +0 -1
  629. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts +0 -2
  630. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.d.ts.map +0 -1
  631. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js +0 -675
  632. package/dist/src/vended-interventions/cedar/__tests__/cedar.test.node.js.map +0 -1
  633. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts +0 -2
  634. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.d.ts.map +0 -1
  635. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js +0 -358
  636. package/dist/src/vended-interventions/hitl/__tests__/hitl.test.js.map +0 -1
  637. package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts +0 -2
  638. package/dist/src/vended-interventions/steering/__tests__/handler.test.d.ts.map +0 -1
  639. package/dist/src/vended-interventions/steering/__tests__/handler.test.js +0 -163
  640. package/dist/src/vended-interventions/steering/__tests__/handler.test.js.map +0 -1
  641. package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts +0 -2
  642. package/dist/src/vended-interventions/steering/__tests__/llm.test.d.ts.map +0 -1
  643. package/dist/src/vended-interventions/steering/__tests__/llm.test.js +0 -60
  644. package/dist/src/vended-interventions/steering/__tests__/llm.test.js.map +0 -1
  645. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts +0 -2
  646. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.d.ts.map +0 -1
  647. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js +0 -94
  648. package/dist/src/vended-interventions/steering/__tests__/tool-ledger.test.js.map +0 -1
  649. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts +0 -2
  650. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.d.ts.map +0 -1
  651. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js +0 -611
  652. package/dist/src/vended-memory-stores/bedrock-knowledge-base/__tests__/bedrock-knowledge-base-store.test.js.map +0 -1
  653. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts +0 -2
  654. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.d.ts.map +0 -1
  655. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js +0 -96
  656. package/dist/src/vended-plugins/context-injector/__tests__/plugin.test.js.map +0 -1
  657. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts +0 -2
  658. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.d.ts.map +0 -1
  659. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js +0 -68
  660. package/dist/src/vended-plugins/context-offloader/__tests__/file-storage-sandbox.test.node.js.map +0 -1
  661. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts +0 -2
  662. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts.map +0 -1
  663. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +0 -539
  664. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +0 -1
  665. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts +0 -2
  666. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.d.ts.map +0 -1
  667. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js +0 -93
  668. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.node.js.map +0 -1
  669. package/dist/src/vended-plugins/context-offloader/__tests__/search.test.d.ts +0 -2
  670. package/dist/src/vended-plugins/context-offloader/__tests__/search.test.d.ts.map +0 -1
  671. package/dist/src/vended-plugins/context-offloader/__tests__/search.test.js +0 -149
  672. package/dist/src/vended-plugins/context-offloader/__tests__/search.test.js.map +0 -1
  673. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts +0 -2
  674. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts.map +0 -1
  675. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +0 -216
  676. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +0 -1
  677. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts +0 -2
  678. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts.map +0 -1
  679. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js +0 -78
  680. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js.map +0 -1
  681. package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts +0 -2
  682. package/dist/src/vended-plugins/goal/__tests__/plugin.test.d.ts.map +0 -1
  683. package/dist/src/vended-plugins/goal/__tests__/plugin.test.js +0 -736
  684. package/dist/src/vended-plugins/goal/__tests__/plugin.test.js.map +0 -1
  685. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.d.ts +0 -2
  686. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.d.ts.map +0 -1
  687. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +0 -482
  688. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +0 -1
  689. package/dist/src/vended-plugins/skills/__tests__/skill.test.node.d.ts +0 -2
  690. package/dist/src/vended-plugins/skills/__tests__/skill.test.node.d.ts.map +0 -1
  691. package/dist/src/vended-plugins/skills/__tests__/skill.test.node.js +0 -476
  692. package/dist/src/vended-plugins/skills/__tests__/skill.test.node.js.map +0 -1
  693. package/dist/src/vended-tools/bash/__tests__/bash.test.node.d.ts +0 -2
  694. package/dist/src/vended-tools/bash/__tests__/bash.test.node.d.ts.map +0 -1
  695. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +0 -390
  696. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +0 -1
  697. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.d.ts +0 -2
  698. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.d.ts.map +0 -1
  699. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +0 -452
  700. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +0 -1
  701. package/dist/src/vended-tools/http-request/__tests__/http-request.test.d.ts +0 -2
  702. package/dist/src/vended-tools/http-request/__tests__/http-request.test.d.ts.map +0 -1
  703. package/dist/src/vended-tools/http-request/__tests__/http-request.test.js +0 -189
  704. package/dist/src/vended-tools/http-request/__tests__/http-request.test.js.map +0 -1
  705. package/dist/src/vended-tools/notebook/__tests__/notebook.test.d.ts +0 -2
  706. package/dist/src/vended-tools/notebook/__tests__/notebook.test.d.ts.map +0 -1
  707. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +0 -388
  708. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +0 -1
@@ -1,779 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { Agent } from '../agent.js';
3
- import { MockMessageModel } from '../../__fixtures__/mock-message-model.js';
4
- import { createMockTool } from '../../__fixtures__/tool-helpers.js';
5
- import { ToolResultBlock } from '../../types/messages.js';
6
- import { AfterToolCallEvent, BeforeToolCallEvent, BeforeToolsEvent, InterruptEvent } from '../../hooks/events.js';
7
- import { FunctionTool } from '../../tools/function-tool.js';
8
- import { InterruptResponseContent } from '../../types/interrupt.js';
9
- /** Access the agent's internal interrupt state for test assertions. */
10
- function getPendingToolExecution(agent) {
11
- // yes it's dirty, but we don't want to expose this publicly
12
- return agent._interruptState.pendingToolExecution;
13
- }
14
- describe('Agent interrupt system', () => {
15
- describe('interrupt from tool callback', () => {
16
- it('returns stopReason interrupt when tool calls interrupt()', async () => {
17
- // Model returns tool use first, then text block (following standard test pattern)
18
- const model = new MockMessageModel()
19
- .addTurn({
20
- type: 'toolUseBlock',
21
- name: 'confirmTool',
22
- toolUseId: 'tool-1',
23
- input: {},
24
- })
25
- .addTurn({ type: 'textBlock', text: 'Should not reach this' });
26
- const tool = createMockTool('confirmTool', (context) => {
27
- context.interrupt({ name: 'confirm', reason: 'Please confirm' });
28
- });
29
- const agent = new Agent({ model, tools: [tool], printer: false });
30
- const result = await agent.invoke('Test');
31
- expect(result).toMatchObject({
32
- stopReason: 'interrupt',
33
- interrupts: [{ name: 'confirm', reason: 'Please confirm' }],
34
- });
35
- });
36
- });
37
- describe('interrupt from BeforeToolCallEvent hook', () => {
38
- it('returns stopReason interrupt when hook calls interrupt()', async () => {
39
- // Model returns tool use first, then text block (following standard test pattern)
40
- const model = new MockMessageModel()
41
- .addTurn({
42
- type: 'toolUseBlock',
43
- name: 'testTool',
44
- toolUseId: 'tool-1',
45
- input: {},
46
- })
47
- .addTurn({ type: 'textBlock', text: 'Should not reach this' });
48
- const tool = createMockTool('testTool', () => 'Success');
49
- const agent = new Agent({ model, tools: [tool], printer: false });
50
- agent.addHook(BeforeToolCallEvent, (event) => {
51
- if (event.toolUse.name === 'testTool') {
52
- event.interrupt({ name: 'confirm_tool', reason: 'Confirm tool execution?' });
53
- }
54
- });
55
- const result = await agent.invoke('Test');
56
- expect(result).toMatchObject({
57
- stopReason: 'interrupt',
58
- interrupts: [{ name: 'confirm_tool', reason: 'Confirm tool execution?' }],
59
- });
60
- });
61
- it('stores pending state and resumes correctly after interrupt', async () => {
62
- const model = new MockMessageModel()
63
- .addTurn({
64
- type: 'toolUseBlock',
65
- name: 'deleteTool',
66
- toolUseId: 'tool-1',
67
- input: { key: 'X' },
68
- })
69
- .addTurn({ type: 'textBlock', text: 'Deleted' });
70
- let toolExecuted = false;
71
- const tool = createMockTool('deleteTool', () => {
72
- toolExecuted = true;
73
- return 'deleted';
74
- });
75
- const agent = new Agent({ model, tools: [tool], printer: false });
76
- agent.addHook(BeforeToolCallEvent, (event) => {
77
- if (event.toolUse.name === 'deleteTool') {
78
- const approval = event.interrupt({ name: 'approve_delete', reason: 'Confirm delete?' });
79
- if (approval !== 'yes') {
80
- event.cancel = 'not approved';
81
- }
82
- }
83
- });
84
- // First invocation — hook interrupts before tool runs
85
- const interruptResult = await agent.invoke('Delete X');
86
- expect(interruptResult.stopReason).toBe('interrupt');
87
- expect(interruptResult.interrupts).toMatchObject([
88
- { id: expect.any(String), name: 'approve_delete', reason: 'Confirm delete?', source: 'hook' },
89
- ]);
90
- expect(toolExecuted).toBe(false);
91
- expect(model.callCount).toBe(1);
92
- // Verify pending execution state was stored (the core of pgrayy's concern:
93
- // the InterruptError thrown back into the generator at `yield beforeToolCallEvent`
94
- // must propagate to executeTools' catch block which stores this state)
95
- const pendingExecution = getPendingToolExecution(agent);
96
- expect(pendingExecution).toEqual({
97
- assistantMessageData: {
98
- role: 'assistant',
99
- content: [{ toolUse: { name: 'deleteTool', toolUseId: 'tool-1', input: { key: 'X' } } }],
100
- },
101
- completedToolResults: {},
102
- });
103
- // Resume with approval — tool should now execute
104
- const finalResult = await agent.invoke([
105
- new InterruptResponseContent({
106
- interruptId: interruptResult.interrupts[0].id,
107
- response: 'yes',
108
- }),
109
- ]);
110
- expect(finalResult.stopReason).toBe('endTurn');
111
- expect(toolExecuted).toBe(true);
112
- expect(model.callCount).toBe(2);
113
- });
114
- it('preserves completed tool results when interrupt fires on a later tool', async () => {
115
- // Tools A, B, C — hook interrupts on B's BeforeToolCallEvent
116
- // A should complete, B and C should not execute
117
- // On resume, A is skipped, B and C execute
118
- const model = new MockMessageModel()
119
- .addTurn([
120
- { type: 'toolUseBlock', name: 'toolA', toolUseId: 'tool-a', input: {} },
121
- { type: 'toolUseBlock', name: 'toolB', toolUseId: 'tool-b', input: {} },
122
- { type: 'toolUseBlock', name: 'toolC', toolUseId: 'tool-c', input: {} },
123
- ])
124
- .addTurn({ type: 'textBlock', text: 'All done' });
125
- const executionLog = [];
126
- const toolA = createMockTool('toolA', () => {
127
- executionLog.push('A');
128
- return 'A result';
129
- });
130
- const toolB = createMockTool('toolB', () => {
131
- executionLog.push('B');
132
- return 'B result';
133
- });
134
- const toolC = createMockTool('toolC', () => {
135
- executionLog.push('C');
136
- return 'C result';
137
- });
138
- const agent = new Agent({ model, tools: [toolA, toolB, toolC], toolExecutor: 'sequential', printer: false });
139
- agent.addHook(BeforeToolCallEvent, (event) => {
140
- if (event.toolUse.name === 'toolB') {
141
- event.interrupt({ name: 'approve_b', reason: 'Approve B?' });
142
- }
143
- });
144
- const interruptResult = await agent.invoke('Run all');
145
- expect(interruptResult.stopReason).toBe('interrupt');
146
- expect(executionLog).toEqual(['A']);
147
- // Verify pending state includes A's completed result
148
- const pendingExecution = getPendingToolExecution(agent);
149
- expect(Object.keys(pendingExecution.completedToolResults)).toEqual(['tool-a']);
150
- expect(pendingExecution.completedToolResults['tool-a'].toolResult.toolUseId).toBe('tool-a');
151
- // Resume — A should be skipped, B and C should execute
152
- const finalResult = await agent.invoke([
153
- new InterruptResponseContent({
154
- interruptId: interruptResult.interrupts[0].id,
155
- response: 'approved',
156
- }),
157
- ]);
158
- expect(finalResult.stopReason).toBe('endTurn');
159
- expect(executionLog).toEqual(['A', 'B', 'C']);
160
- expect(model.callCount).toBe(2);
161
- });
162
- });
163
- describe('interrupt from BeforeToolsEvent hook', () => {
164
- it('returns stopReason interrupt when hook calls interrupt()', async () => {
165
- // Model returns tool use first, then text block (following standard test pattern)
166
- const model = new MockMessageModel()
167
- .addTurn({
168
- type: 'toolUseBlock',
169
- name: 'testTool',
170
- toolUseId: 'tool-1',
171
- input: {},
172
- })
173
- .addTurn({ type: 'textBlock', text: 'Should not reach this' });
174
- const tool = createMockTool('testTool', () => 'Success');
175
- const agent = new Agent({ model, tools: [tool], printer: false });
176
- agent.addHook(BeforeToolsEvent, (event) => {
177
- event.interrupt({ name: 'batch_approval', reason: 'Approve all tools?' });
178
- });
179
- const result = await agent.invoke('Test');
180
- expect(result).toMatchObject({
181
- stopReason: 'interrupt',
182
- interrupts: [{ name: 'batch_approval', reason: 'Approve all tools?' }],
183
- });
184
- });
185
- });
186
- describe('resume flow - interrupt → response → continue', () => {
187
- it('resumes tool callback execution without re-calling model', async () => {
188
- // Turn 0: Model returns tool use (will be interrupted)
189
- // Turn 1: Model returns final response (after tool completes on resume)
190
- // Note: Resume skips model call and uses stored message
191
- const model = new MockMessageModel()
192
- .addTurn({
193
- type: 'toolUseBlock',
194
- name: 'confirmTool',
195
- toolUseId: 'tool-1',
196
- input: { amount: 5000 },
197
- })
198
- .addTurn({ type: 'textBlock', text: 'Transfer completed' });
199
- let callCount = 0;
200
- let receivedResponse;
201
- const tool = new FunctionTool({
202
- name: 'confirmTool',
203
- description: 'Tool that requires confirmation',
204
- inputSchema: {
205
- type: 'object',
206
- properties: { amount: { type: 'number' } },
207
- },
208
- callback: (rawInput, context) => {
209
- callCount++;
210
- const input = rawInput;
211
- const response = context.interrupt({
212
- name: 'confirm_transfer',
213
- reason: `Confirm transfer of $${input.amount}?`,
214
- });
215
- receivedResponse = response;
216
- return response?.approved ? 'Transfer approved' : 'Transfer denied';
217
- },
218
- });
219
- const agent = new Agent({ model, tools: [tool], printer: false });
220
- // First invocation - triggers interrupt
221
- const interruptResult = await agent.invoke('Transfer $5000');
222
- expect(interruptResult).toMatchObject({
223
- stopReason: 'interrupt',
224
- interrupts: [{ name: 'confirm_transfer', reason: 'Confirm transfer of $5000?' }],
225
- });
226
- expect(callCount).toBe(1); // Tool was called once before interrupt
227
- expect(model.callCount).toBe(1); // Model was called once
228
- // Resume with user response
229
- const finalResult = await agent.invoke([
230
- new InterruptResponseContent({
231
- interruptId: interruptResult.interrupts[0].id,
232
- response: { approved: true },
233
- }),
234
- ]);
235
- expect(finalResult.stopReason).toBe('endTurn');
236
- expect(receivedResponse).toEqual({ approved: true });
237
- expect(callCount).toBe(2);
238
- expect(model.callCount).toBe(2);
239
- // Verify tool result was added to messages
240
- const toolResultMessage = agent.messages.find((m) => m.role === 'user' && m.content.some((b) => b.type === 'toolResultBlock'));
241
- expect(toolResultMessage).toBeDefined();
242
- const toolResult = toolResultMessage?.content.find((b) => b.type === 'toolResultBlock');
243
- expect(toolResult?.content[0]).toMatchObject({ type: 'textBlock', text: 'Transfer approved' });
244
- });
245
- it('skips already-completed tools when resuming from partial execution', async () => {
246
- // Scenario: Tools A, B, C where A & B succeed but C interrupts
247
- // On resume: A & B should NOT re-execute, only C should execute
248
- const model = new MockMessageModel()
249
- .addTurn([
250
- { type: 'toolUseBlock', name: 'toolA', toolUseId: 'tool-a', input: {} },
251
- { type: 'toolUseBlock', name: 'toolB', toolUseId: 'tool-b', input: {} },
252
- { type: 'toolUseBlock', name: 'toolC', toolUseId: 'tool-c', input: {} },
253
- ])
254
- .addTurn({ type: 'textBlock', text: 'All tools completed' });
255
- const executionLog = [];
256
- const toolA = createMockTool('toolA', () => {
257
- executionLog.push('A');
258
- return 'A result';
259
- });
260
- const toolB = createMockTool('toolB', () => {
261
- executionLog.push('B');
262
- return 'B result';
263
- });
264
- const toolC = createMockTool('toolC', (context) => {
265
- const response = context.interrupt({
266
- name: 'confirm_c',
267
- reason: 'Confirm tool C?',
268
- });
269
- executionLog.push('C');
270
- return response?.approved ? 'C approved' : 'C denied';
271
- });
272
- const agent = new Agent({ model, tools: [toolA, toolB, toolC], printer: false });
273
- // First invocation - A & B execute, C interrupts
274
- const interruptResult = await agent.invoke('Run all tools');
275
- expect(interruptResult).toMatchObject({
276
- stopReason: 'interrupt',
277
- interrupts: [{ name: 'confirm_c', reason: 'Confirm tool C?' }],
278
- });
279
- expect(executionLog).toEqual(['A', 'B']);
280
- expect(model.callCount).toBe(1);
281
- // Resume with response for C
282
- const finalResult = await agent.invoke([
283
- new InterruptResponseContent({
284
- interruptId: interruptResult.interrupts[0].id,
285
- response: { approved: true },
286
- }),
287
- ]);
288
- expect(finalResult.stopReason).toBe('endTurn');
289
- expect(executionLog).toEqual(['A', 'B', 'C']);
290
- expect(model.callCount).toBe(2);
291
- // Verify all tool results are present in messages
292
- const toolResultMessage = agent.messages.find((m) => m.role === 'user' && m.content.filter((b) => b.type === 'toolResultBlock').length === 3);
293
- expect(toolResultMessage).toBeDefined();
294
- });
295
- it('throws TypeError when sending a new message while in interrupted state', async () => {
296
- const model = new MockMessageModel()
297
- .addTurn({
298
- type: 'toolUseBlock',
299
- name: 'confirmTool',
300
- toolUseId: 'tool-1',
301
- input: {},
302
- })
303
- .addTurn({ type: 'textBlock', text: 'Different response' });
304
- const tool = createMockTool('confirmTool', (context) => {
305
- context.interrupt({ name: 'confirm', reason: 'Confirm?' });
306
- });
307
- const agent = new Agent({ model, tools: [tool], printer: false });
308
- // First invocation - triggers interrupt
309
- const interruptResult = await agent.invoke('First message');
310
- expect(interruptResult).toMatchObject({ stopReason: 'interrupt' });
311
- // Sending a new message instead of interrupt responses should throw
312
- await expect(agent.invoke('Different question')).rejects.toThrow(TypeError);
313
- await expect(agent.invoke('Different question')).rejects.toThrow('Agent is in an interrupted state');
314
- });
315
- });
316
- describe('error handling', () => {
317
- it('throws error when interrupt() called on event with non-Agent implementation', async () => {
318
- const mockLocalAgent = { id: 'mock' };
319
- const event = new BeforeToolCallEvent({
320
- agent: mockLocalAgent,
321
- toolUse: { name: 'test', toolUseId: 'id', input: {} },
322
- tool: undefined,
323
- invocationState: {},
324
- });
325
- expect(() => {
326
- event.interrupt({ name: 'test', reason: 'test' });
327
- }).toThrow('Interrupt state not available');
328
- });
329
- it('throws TypeError when interrupt responses are mixed with other content blocks', async () => {
330
- const model = new MockMessageModel()
331
- .addTurn({
332
- type: 'toolUseBlock',
333
- name: 'confirmTool',
334
- toolUseId: 'tool-1',
335
- input: {},
336
- })
337
- .addTurn({ type: 'textBlock', text: 'Done' });
338
- const tool = createMockTool('confirmTool', (context) => {
339
- context.interrupt({ name: 'confirm', reason: 'Confirm?' });
340
- });
341
- const agent = new Agent({ model, tools: [tool], printer: false });
342
- // First invocation - triggers interrupt
343
- const interruptResult = await agent.invoke('Test');
344
- expect(interruptResult.stopReason).toBe('interrupt');
345
- // Resume with mixed content: interrupt response + text block
346
- await expect(agent.invoke([
347
- new InterruptResponseContent({
348
- interruptId: interruptResult.interrupts[0].id,
349
- response: 'yes',
350
- }),
351
- { type: 'textBlock', text: 'extra text' },
352
- ])).rejects.toThrow(TypeError);
353
- await expect(agent.invoke([
354
- new InterruptResponseContent({
355
- interruptId: interruptResult.interrupts[0].id,
356
- response: 'yes',
357
- }),
358
- { type: 'textBlock', text: 'extra text' },
359
- ])).rejects.toThrow('Must resume from interrupt with a list of interruptResponse content blocks only');
360
- });
361
- it('allows pure interrupt response arrays without error', async () => {
362
- const model = new MockMessageModel()
363
- .addTurn({
364
- type: 'toolUseBlock',
365
- name: 'confirmTool',
366
- toolUseId: 'tool-1',
367
- input: {},
368
- })
369
- .addTurn({ type: 'textBlock', text: 'Done' });
370
- const tool = createMockTool('confirmTool', (context) => {
371
- const response = context.interrupt({ name: 'confirm', reason: 'Confirm?' });
372
- return `Got: ${response}`;
373
- });
374
- const agent = new Agent({ model, tools: [tool], printer: false });
375
- const interruptResult = await agent.invoke('Test');
376
- expect(interruptResult.stopReason).toBe('interrupt');
377
- // Resume with pure interrupt responses — should succeed
378
- const finalResult = await agent.invoke([
379
- new InterruptResponseContent({
380
- interruptId: interruptResult.interrupts[0].id,
381
- response: 'approved',
382
- }),
383
- ]);
384
- expect(finalResult.stopReason).toBe('endTurn');
385
- });
386
- });
387
- describe('multiple hook interrupts', () => {
388
- it('collects interrupts from multiple BeforeToolCallEvent hooks', async () => {
389
- const model = new MockMessageModel()
390
- .addTurn({
391
- type: 'toolUseBlock',
392
- name: 'testTool',
393
- toolUseId: 'tool-1',
394
- input: {},
395
- })
396
- .addTurn({ type: 'textBlock', text: 'Should not reach this' });
397
- const tool = createMockTool('testTool', () => 'Success');
398
- const agent = new Agent({ model, tools: [tool], printer: false });
399
- agent.addHook(BeforeToolCallEvent, (event) => {
400
- event.interrupt({ name: 'security_check', reason: 'Security review required' });
401
- });
402
- agent.addHook(BeforeToolCallEvent, (event) => {
403
- event.interrupt({ name: 'budget_check', reason: 'Budget approval required' });
404
- });
405
- const result = await agent.invoke('Test');
406
- expect(result).toMatchObject({
407
- stopReason: 'interrupt',
408
- interrupts: expect.arrayContaining([
409
- expect.objectContaining({ name: 'security_check', reason: 'Security review required' }),
410
- expect.objectContaining({ name: 'budget_check', reason: 'Budget approval required' }),
411
- ]),
412
- });
413
- });
414
- it('collects interrupts from multiple BeforeToolsEvent hooks', async () => {
415
- const model = new MockMessageModel()
416
- .addTurn({
417
- type: 'toolUseBlock',
418
- name: 'testTool',
419
- toolUseId: 'tool-1',
420
- input: {},
421
- })
422
- .addTurn({ type: 'textBlock', text: 'Should not reach this' });
423
- const tool = createMockTool('testTool', () => 'Success');
424
- const agent = new Agent({ model, tools: [tool], printer: false });
425
- agent.addHook(BeforeToolsEvent, (event) => {
426
- event.interrupt({ name: 'approval_a', reason: 'First approval' });
427
- });
428
- agent.addHook(BeforeToolsEvent, (event) => {
429
- event.interrupt({ name: 'approval_b', reason: 'Second approval' });
430
- });
431
- const result = await agent.invoke('Test');
432
- expect(result).toMatchObject({
433
- stopReason: 'interrupt',
434
- interrupts: expect.arrayContaining([
435
- expect.objectContaining({ name: 'approval_a', reason: 'First approval' }),
436
- expect.objectContaining({ name: 'approval_b', reason: 'Second approval' }),
437
- ]),
438
- });
439
- });
440
- it('resumes correctly after multiple interrupts are answered', async () => {
441
- const model = new MockMessageModel()
442
- .addTurn({
443
- type: 'toolUseBlock',
444
- name: 'testTool',
445
- toolUseId: 'tool-1',
446
- input: {},
447
- })
448
- .addTurn({ type: 'textBlock', text: 'All approved' });
449
- let securityResponse;
450
- let budgetResponse;
451
- let hookCallCount = 0;
452
- const tool = createMockTool('testTool', () => 'Success');
453
- const agent = new Agent({ model, tools: [tool], printer: false });
454
- agent.addHook(BeforeToolCallEvent, (event) => {
455
- hookCallCount++;
456
- securityResponse = event.interrupt({ name: 'security_check', reason: 'Security review' });
457
- });
458
- agent.addHook(BeforeToolCallEvent, (event) => {
459
- hookCallCount++;
460
- budgetResponse = event.interrupt({ name: 'budget_check', reason: 'Budget review' });
461
- });
462
- // First invocation — both hooks interrupt
463
- const interruptResult = await agent.invoke('Test');
464
- expect(interruptResult).toMatchObject({
465
- stopReason: 'interrupt',
466
- interrupts: expect.arrayContaining([
467
- expect.objectContaining({ name: 'security_check' }),
468
- expect.objectContaining({ name: 'budget_check' }),
469
- ]),
470
- });
471
- expect(interruptResult.interrupts).toHaveLength(2);
472
- expect(hookCallCount).toBe(2);
473
- expect(model.callCount).toBe(1);
474
- // Resume with responses for both interrupts
475
- const finalResult = await agent.invoke(interruptResult.interrupts.map((interrupt) => new InterruptResponseContent({
476
- interruptId: interrupt.id,
477
- response: `approved:${interrupt.name}`,
478
- })));
479
- expect(finalResult.stopReason).toBe('endTurn');
480
- expect(model.callCount).toBe(2);
481
- expect(securityResponse).toBe('approved:security_check');
482
- expect(budgetResponse).toBe('approved:budget_check');
483
- });
484
- });
485
- describe('multi-cycle interrupts', () => {
486
- it('interrupts again on cycle 2 after resuming from cycle 1 (BeforeToolsEvent)', async () => {
487
- // Cycle 1: model returns tool use → hook interrupts → user resumes → tool executes
488
- // Cycle 2: model returns another tool use → same hook should interrupt again
489
- const model = new MockMessageModel()
490
- .addTurn({ type: 'toolUseBlock', name: 'testTool', toolUseId: 'tool-1', input: {} })
491
- .addTurn({ type: 'toolUseBlock', name: 'testTool', toolUseId: 'tool-2', input: {} })
492
- .addTurn({ type: 'textBlock', text: 'Done' });
493
- const tool = createMockTool('testTool', () => 'ok');
494
- let interruptCount = 0;
495
- const agent = new Agent({ model, tools: [tool], printer: false });
496
- agent.addHook(BeforeToolsEvent, (event) => {
497
- interruptCount++;
498
- event.interrupt({ name: 'approval', reason: 'Approve?' });
499
- });
500
- // Cycle 1: interrupt
501
- const result1 = await agent.invoke('Go');
502
- expect(result1).toMatchObject({
503
- stopReason: 'interrupt',
504
- interrupts: [{ name: 'approval', reason: 'Approve?' }],
505
- });
506
- expect(interruptCount).toBe(1);
507
- // Resume cycle 1
508
- const result2 = await agent.invoke(result1.interrupts.map((i) => new InterruptResponseContent({
509
- interruptId: i.id,
510
- response: 'yes',
511
- })));
512
- // Cycle 2: should interrupt again, not silently pass through
513
- expect(result2).toMatchObject({ stopReason: 'interrupt' });
514
- expect(interruptCount).toBe(3);
515
- });
516
- });
517
- describe('event contract during interrupt', () => {
518
- it('does not fire AfterToolCallEvent when BeforeToolCallEvent interrupt triggers', async () => {
519
- const model = new MockMessageModel()
520
- .addTurn({
521
- type: 'toolUseBlock',
522
- name: 'testTool',
523
- toolUseId: 'tool-1',
524
- input: {},
525
- })
526
- .addTurn({ type: 'textBlock', text: 'Done' });
527
- const tool = createMockTool('testTool', () => 'Success');
528
- const agent = new Agent({ model, tools: [tool], printer: false });
529
- const firedEvents = [];
530
- agent.addHook(BeforeToolCallEvent, (event) => {
531
- firedEvents.push('BeforeToolCallEvent');
532
- event.interrupt({ name: 'confirm', reason: 'Confirm?' });
533
- });
534
- agent.addHook(AfterToolCallEvent, () => {
535
- firedEvents.push('AfterToolCallEvent');
536
- });
537
- const result = await agent.invoke('Test');
538
- expect(result.stopReason).toBe('interrupt');
539
- expect(firedEvents).toContain('BeforeToolCallEvent');
540
- expect(firedEvents).not.toContain('AfterToolCallEvent');
541
- });
542
- it('does not fire AfterToolCallEvent when tool callback interrupts', async () => {
543
- const model = new MockMessageModel()
544
- .addTurn({
545
- type: 'toolUseBlock',
546
- name: 'confirmTool',
547
- toolUseId: 'tool-1',
548
- input: {},
549
- })
550
- .addTurn({ type: 'textBlock', text: 'Done' });
551
- const tool = createMockTool('confirmTool', (context) => {
552
- context.interrupt({ name: 'confirm', reason: 'Confirm?' });
553
- });
554
- const agent = new Agent({ model, tools: [tool], printer: false });
555
- const firedEvents = [];
556
- agent.addHook(BeforeToolCallEvent, () => {
557
- firedEvents.push('BeforeToolCallEvent');
558
- });
559
- agent.addHook(AfterToolCallEvent, () => {
560
- firedEvents.push('AfterToolCallEvent');
561
- });
562
- const result = await agent.invoke('Test');
563
- expect(result.stopReason).toBe('interrupt');
564
- expect(firedEvents).toContain('BeforeToolCallEvent');
565
- expect(firedEvents).not.toContain('AfterToolCallEvent');
566
- });
567
- });
568
- describe('concurrent tool execution with interrupts', () => {
569
- it('allows in-flight tool to complete when sibling interrupts', async () => {
570
- // Use gated tools to prove concurrency: A completes AFTER B interrupts,
571
- // demonstrating that the executor waits for in-flight tools.
572
- const model = new MockMessageModel()
573
- .addTurn([
574
- { type: 'toolUseBlock', name: 'toolA', toolUseId: 'tool-a', input: {} },
575
- { type: 'toolUseBlock', name: 'toolB', toolUseId: 'tool-b', input: {} },
576
- ])
577
- .addTurn({ type: 'textBlock', text: 'Done' });
578
- let toolACompleted = false;
579
- let toolAResolve;
580
- const toolAGate = new Promise((resolve) => (toolAResolve = resolve));
581
- let toolAStartedResolve;
582
- const toolAStarted = new Promise((resolve) => (toolAStartedResolve = resolve));
583
- const toolA = new FunctionTool({
584
- name: 'toolA',
585
- description: 'Gated tool A',
586
- inputSchema: { type: 'object', properties: {} },
587
- callback: async () => {
588
- toolAStartedResolve();
589
- await toolAGate;
590
- toolACompleted = true;
591
- return 'A done';
592
- },
593
- });
594
- const toolB = new FunctionTool({
595
- name: 'toolB',
596
- description: 'Interrupting tool B',
597
- inputSchema: { type: 'object', properties: {} },
598
- callback: (_input, context) => {
599
- // Interrupt immediately — A is still in-flight
600
- context.interrupt({ name: 'confirm_b', reason: 'Approve B?' });
601
- return 'B done';
602
- },
603
- });
604
- const agent = new Agent({
605
- model,
606
- tools: [toolA, toolB],
607
- toolExecutor: 'concurrent',
608
- printer: false,
609
- });
610
- const invocation = agent.invoke('Go');
611
- // Wait for A to start (proves both tools launched concurrently)
612
- await toolAStarted;
613
- // B has already interrupted, but A is still in-flight
614
- expect(toolACompleted).toBe(false);
615
- // Release A — executor should let it finish
616
- toolAResolve();
617
- const result = await invocation;
618
- expect(result.stopReason).toBe('interrupt');
619
- expect(toolACompleted).toBe(true);
620
- expect(result.interrupts).toMatchObject([
621
- { id: expect.any(String), name: 'confirm_b', reason: 'Approve B?', source: 'tool' },
622
- ]);
623
- // Verify A's result was captured in pending state
624
- const pendingExecution = getPendingToolExecution(agent);
625
- expect(pendingExecution.completedToolResults['tool-a']).toEqual({
626
- toolResult: { toolUseId: 'tool-a', status: 'success', content: [{ text: 'A done' }] },
627
- });
628
- });
629
- it('stores completed tool results and resumes only the interrupted tool', async () => {
630
- const model = new MockMessageModel()
631
- .addTurn([
632
- { type: 'toolUseBlock', name: 'toolA', toolUseId: 'tool-a', input: {} },
633
- { type: 'toolUseBlock', name: 'toolB', toolUseId: 'tool-b', input: {} },
634
- ])
635
- .addTurn({ type: 'textBlock', text: 'Done' });
636
- let toolAResolve;
637
- const toolAGate = new Promise((resolve) => (toolAResolve = resolve));
638
- const executionLog = [];
639
- const toolA = new FunctionTool({
640
- name: 'toolA',
641
- description: 'Gated tool A',
642
- inputSchema: { type: 'object', properties: {} },
643
- callback: async () => {
644
- executionLog.push('A');
645
- await toolAGate;
646
- return 'A result';
647
- },
648
- });
649
- const toolB = new FunctionTool({
650
- name: 'toolB',
651
- description: 'Interrupting tool B',
652
- inputSchema: { type: 'object', properties: {} },
653
- callback: (_input, context) => {
654
- executionLog.push('B');
655
- const response = context.interrupt({ name: 'confirm_b', reason: 'Approve?' });
656
- return `B: ${response}`;
657
- },
658
- });
659
- const agent = new Agent({
660
- model,
661
- tools: [toolA, toolB],
662
- toolExecutor: 'concurrent',
663
- printer: false,
664
- });
665
- // Release A immediately so it completes
666
- toolAResolve();
667
- const interruptResult = await agent.invoke('Go');
668
- expect(interruptResult.stopReason).toBe('interrupt');
669
- expect(executionLog).toEqual(['A', 'B']);
670
- // Verify pending state has A's result
671
- const pendingExecution = getPendingToolExecution(agent);
672
- expect(Object.keys(pendingExecution.completedToolResults)).toEqual(['tool-a']);
673
- // Resume — only B should re-execute
674
- executionLog.length = 0;
675
- const finalResult = await agent.invoke([
676
- {
677
- interruptResponse: {
678
- interruptId: interruptResult.interrupts[0].id,
679
- response: 'approved',
680
- },
681
- },
682
- ]);
683
- expect(finalResult.stopReason).toBe('endTurn');
684
- expect(executionLog).toEqual(['B']);
685
- });
686
- it('handles BeforeToolCallEvent interrupt in concurrent mode', async () => {
687
- const model = new MockMessageModel()
688
- .addTurn([
689
- { type: 'toolUseBlock', name: 'toolA', toolUseId: 'tool-a', input: {} },
690
- { type: 'toolUseBlock', name: 'toolB', toolUseId: 'tool-b', input: {} },
691
- ])
692
- .addTurn({ type: 'textBlock', text: 'Done' });
693
- const executionLog = [];
694
- const toolA = new FunctionTool({
695
- name: 'toolA',
696
- description: 'Tool A',
697
- inputSchema: { type: 'object', properties: {} },
698
- callback: async () => {
699
- executionLog.push('A');
700
- return 'A result';
701
- },
702
- });
703
- const toolB = new FunctionTool({
704
- name: 'toolB',
705
- description: 'Tool B',
706
- inputSchema: { type: 'object', properties: {} },
707
- callback: async () => {
708
- executionLog.push('B');
709
- return 'B result';
710
- },
711
- });
712
- const agent = new Agent({
713
- model,
714
- tools: [toolA, toolB],
715
- toolExecutor: 'concurrent',
716
- printer: false,
717
- });
718
- agent.addHook(BeforeToolCallEvent, (event) => {
719
- if (event.toolUse.name === 'toolB') {
720
- event.interrupt({ name: 'approve_b', reason: 'Approve B?' });
721
- }
722
- });
723
- const interruptResult = await agent.invoke('Go');
724
- expect(interruptResult.stopReason).toBe('interrupt');
725
- expect(interruptResult.interrupts).toMatchObject([
726
- { id: expect.any(String), name: 'approve_b', reason: 'Approve B?', source: 'hook' },
727
- ]);
728
- // A should have executed, B should not (interrupted before execution)
729
- expect(executionLog).toContain('A');
730
- expect(executionLog).not.toContain('B');
731
- });
732
- });
733
- describe('InterruptEvent emission', () => {
734
- it('yields one InterruptEvent per unanswered interrupt at stop, tagged with source', async () => {
735
- const model = new MockMessageModel()
736
- .addTurn({ type: 'toolUseBlock', name: 'toolA', toolUseId: 'tool-a', input: {} })
737
- .addTurn({ type: 'textBlock', text: 'done' });
738
- const toolA = createMockTool('toolA', (context) => {
739
- context.interrupt({ name: 'confirm_tool', reason: 'ok?' });
740
- });
741
- const agent = new Agent({ model, tools: [toolA], printer: false });
742
- // Hook-raised interrupt on a different identifier, via BeforeToolCallEvent.
743
- agent.addHook(BeforeToolCallEvent, (event) => {
744
- if (event.toolUse.name === 'toolA') {
745
- event.interrupt({ name: 'confirm_hook', reason: 'hook ok?' });
746
- }
747
- });
748
- const emittedEvents = [];
749
- agent.addHook(InterruptEvent, (event) => {
750
- emittedEvents.push(event);
751
- });
752
- const result = await agent.invoke('go');
753
- expect(result.stopReason).toBe('interrupt');
754
- expect(result.interrupts).toHaveLength(emittedEvents.length);
755
- // One event per interrupt, each tagged by its origin. Hook interrupts fire
756
- // before tool callbacks, so the hook interrupt is the only one in this run.
757
- for (const event of emittedEvents) {
758
- expect(event.interrupt.source).toBe('hook');
759
- }
760
- });
761
- it('InterruptEvent is available on the stream', async () => {
762
- const model = new MockMessageModel()
763
- .addTurn({ type: 'toolUseBlock', name: 'approveMe', toolUseId: 'tool-1', input: {} })
764
- .addTurn({ type: 'textBlock', text: 'done' });
765
- const tool = createMockTool('approveMe', (context) => {
766
- context.interrupt({ name: 'approve', reason: 'please' });
767
- });
768
- const agent = new Agent({ model, tools: [tool], printer: false });
769
- const events = [];
770
- for await (const event of agent.stream('go')) {
771
- if (event instanceof InterruptEvent)
772
- events.push(event);
773
- }
774
- expect(events).toHaveLength(1);
775
- expect(events[0].interrupt).toMatchObject({ name: 'approve', source: 'tool' });
776
- });
777
- });
778
- });
779
- //# sourceMappingURL=agent.interrupt.test.js.map