@strands-agents/sdk 1.0.0-rc.5 → 1.1.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 (380) hide show
  1. package/LICENSE +175 -0
  2. package/README.md +340 -0
  3. package/dist/src/__fixtures__/agent-helpers.d.ts +22 -1
  4. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -1
  5. package/dist/src/__fixtures__/agent-helpers.js +45 -1
  6. package/dist/src/__fixtures__/agent-helpers.js.map +1 -1
  7. package/dist/src/__fixtures__/mock-plugin.d.ts.map +1 -1
  8. package/dist/src/__fixtures__/mock-plugin.js +3 -1
  9. package/dist/src/__fixtures__/mock-plugin.js.map +1 -1
  10. package/dist/src/__fixtures__/tool-helpers.d.ts +5 -2
  11. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -1
  12. package/dist/src/__fixtures__/tool-helpers.js +23 -4
  13. package/dist/src/__fixtures__/tool-helpers.js.map +1 -1
  14. package/dist/src/__tests__/interrupt.test.d.ts +2 -0
  15. package/dist/src/__tests__/interrupt.test.d.ts.map +1 -0
  16. package/dist/src/__tests__/interrupt.test.js +259 -0
  17. package/dist/src/__tests__/interrupt.test.js.map +1 -0
  18. package/dist/src/__tests__/mcp.test.js +448 -2
  19. package/dist/src/__tests__/mcp.test.js.map +1 -1
  20. package/dist/src/a2a/__tests__/events.test.js +2 -0
  21. package/dist/src/a2a/__tests__/events.test.js.map +1 -1
  22. package/dist/src/a2a/__tests__/executor.test.js +16 -5
  23. package/dist/src/a2a/__tests__/executor.test.js.map +1 -1
  24. package/dist/src/a2a/a2a-agent.d.ts +8 -3
  25. package/dist/src/a2a/a2a-agent.d.ts.map +1 -1
  26. package/dist/src/a2a/a2a-agent.js +12 -6
  27. package/dist/src/a2a/a2a-agent.js.map +1 -1
  28. package/dist/src/a2a/executor.d.ts +13 -0
  29. package/dist/src/a2a/executor.d.ts.map +1 -1
  30. package/dist/src/a2a/executor.js +19 -1
  31. package/dist/src/a2a/executor.js.map +1 -1
  32. package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts +2 -0
  33. package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.d.ts.map +1 -0
  34. package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js +23 -0
  35. package/dist/src/agent/__tests__/agent-as-tool.invocation-state.test.js.map +1 -0
  36. package/dist/src/agent/__tests__/agent.cancel.test.js +1 -1
  37. package/dist/src/agent/__tests__/agent.cancel.test.js.map +1 -1
  38. package/dist/src/agent/__tests__/agent.concurrent.test.d.ts +2 -0
  39. package/dist/src/agent/__tests__/agent.concurrent.test.d.ts.map +1 -0
  40. package/dist/src/agent/__tests__/agent.concurrent.test.js +488 -0
  41. package/dist/src/agent/__tests__/agent.concurrent.test.js.map +1 -0
  42. package/dist/src/agent/__tests__/agent.hook.test.js +724 -12
  43. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -1
  44. package/dist/src/agent/__tests__/agent.interrupt.test.d.ts +2 -0
  45. package/dist/src/agent/__tests__/agent.interrupt.test.d.ts.map +1 -0
  46. package/dist/src/agent/__tests__/agent.interrupt.test.js +730 -0
  47. package/dist/src/agent/__tests__/agent.interrupt.test.js.map +1 -0
  48. package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts +2 -0
  49. package/dist/src/agent/__tests__/agent.invocation-state.test.d.ts.map +1 -0
  50. package/dist/src/agent/__tests__/agent.invocation-state.test.js +219 -0
  51. package/dist/src/agent/__tests__/agent.invocation-state.test.js.map +1 -0
  52. package/dist/src/agent/__tests__/agent.model-retry.test.d.ts +2 -0
  53. package/dist/src/agent/__tests__/agent.model-retry.test.d.ts.map +1 -0
  54. package/dist/src/agent/__tests__/agent.model-retry.test.js +161 -0
  55. package/dist/src/agent/__tests__/agent.model-retry.test.js.map +1 -0
  56. package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts +2 -0
  57. package/dist/src/agent/__tests__/agent.stateful-model.test.d.ts.map +1 -0
  58. package/dist/src/agent/__tests__/agent.stateful-model.test.js +169 -0
  59. package/dist/src/agent/__tests__/agent.stateful-model.test.js.map +1 -0
  60. package/dist/src/agent/__tests__/agent.test.js +217 -2
  61. package/dist/src/agent/__tests__/agent.test.js.map +1 -1
  62. package/dist/src/agent/__tests__/agent.tracer.test.node.js +39 -0
  63. package/dist/src/agent/__tests__/agent.tracer.test.node.js.map +1 -1
  64. package/dist/src/agent/__tests__/snapshot.test.js +51 -4
  65. package/dist/src/agent/__tests__/snapshot.test.js.map +1 -1
  66. package/dist/src/agent/agent-as-tool.d.ts.map +1 -1
  67. package/dist/src/agent/agent-as-tool.js +4 -2
  68. package/dist/src/agent/agent-as-tool.js.map +1 -1
  69. package/dist/src/agent/agent.d.ts +109 -4
  70. package/dist/src/agent/agent.d.ts.map +1 -1
  71. package/dist/src/agent/agent.js +790 -224
  72. package/dist/src/agent/agent.js.map +1 -1
  73. package/dist/src/agent/snapshot.d.ts +2 -2
  74. package/dist/src/agent/snapshot.d.ts.map +1 -1
  75. package/dist/src/agent/snapshot.js +20 -2
  76. package/dist/src/agent/snapshot.js.map +1 -1
  77. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +230 -9
  78. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -1
  79. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +19 -6
  80. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -1
  81. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +58 -4
  82. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -1
  83. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js +76 -1
  84. package/dist/src/conversation-manager/__tests__/summarizing-conversation-manager.test.js.map +1 -1
  85. package/dist/src/conversation-manager/conversation-manager.d.ts +67 -22
  86. package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -1
  87. package/dist/src/conversation-manager/conversation-manager.js +65 -13
  88. package/dist/src/conversation-manager/conversation-manager.js.map +1 -1
  89. package/dist/src/conversation-manager/index.d.ts +1 -1
  90. package/dist/src/conversation-manager/index.d.ts.map +1 -1
  91. package/dist/src/conversation-manager/index.js +1 -1
  92. package/dist/src/conversation-manager/index.js.map +1 -1
  93. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +17 -3
  94. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -1
  95. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +10 -4
  96. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -1
  97. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts +23 -1
  98. package/dist/src/conversation-manager/summarizing-conversation-manager.d.ts.map +1 -1
  99. package/dist/src/conversation-manager/summarizing-conversation-manager.js +39 -17
  100. package/dist/src/conversation-manager/summarizing-conversation-manager.js.map +1 -1
  101. package/dist/src/errors.d.ts +11 -0
  102. package/dist/src/errors.d.ts.map +1 -1
  103. package/dist/src/errors.js +12 -0
  104. package/dist/src/errors.js.map +1 -1
  105. package/dist/src/hooks/__tests__/events.test.js +267 -73
  106. package/dist/src/hooks/__tests__/events.test.js.map +1 -1
  107. package/dist/src/hooks/__tests__/registry.test.js +182 -18
  108. package/dist/src/hooks/__tests__/registry.test.js.map +1 -1
  109. package/dist/src/hooks/events.d.ts +193 -51
  110. package/dist/src/hooks/events.d.ts.map +1 -1
  111. package/dist/src/hooks/events.js +182 -26
  112. package/dist/src/hooks/events.js.map +1 -1
  113. package/dist/src/hooks/index.d.ts +3 -2
  114. package/dist/src/hooks/index.d.ts.map +1 -1
  115. package/dist/src/hooks/index.js +1 -0
  116. package/dist/src/hooks/index.js.map +1 -1
  117. package/dist/src/hooks/registry.d.ts +12 -12
  118. package/dist/src/hooks/registry.d.ts.map +1 -1
  119. package/dist/src/hooks/registry.js +55 -15
  120. package/dist/src/hooks/registry.js.map +1 -1
  121. package/dist/src/hooks/types.d.ts +23 -0
  122. package/dist/src/hooks/types.d.ts.map +1 -1
  123. package/dist/src/hooks/types.js +17 -1
  124. package/dist/src/hooks/types.js.map +1 -1
  125. package/dist/src/index.d.ts +12 -7
  126. package/dist/src/index.d.ts.map +1 -1
  127. package/dist/src/index.js +4 -1
  128. package/dist/src/index.js.map +1 -1
  129. package/dist/src/interrupt.d.ts +220 -0
  130. package/dist/src/interrupt.d.ts.map +1 -0
  131. package/dist/src/interrupt.js +274 -0
  132. package/dist/src/interrupt.js.map +1 -0
  133. package/dist/src/logging/__tests__/warn-once.test.d.ts +2 -0
  134. package/dist/src/logging/__tests__/warn-once.test.d.ts.map +1 -0
  135. package/dist/src/logging/__tests__/warn-once.test.js +30 -0
  136. package/dist/src/logging/__tests__/warn-once.test.js.map +1 -0
  137. package/dist/src/logging/warn-once.d.ts +13 -0
  138. package/dist/src/logging/warn-once.d.ts.map +1 -0
  139. package/dist/src/logging/warn-once.js +18 -0
  140. package/dist/src/logging/warn-once.js.map +1 -0
  141. package/dist/src/mcp.d.ts +43 -3
  142. package/dist/src/mcp.d.ts.map +1 -1
  143. package/dist/src/mcp.js +85 -17
  144. package/dist/src/mcp.js.map +1 -1
  145. package/dist/src/mime.d.ts +2 -1
  146. package/dist/src/mime.d.ts.map +1 -1
  147. package/dist/src/mime.js +1 -0
  148. package/dist/src/mime.js.map +1 -1
  149. package/dist/src/models/__tests__/anthropic.test.js +147 -3
  150. package/dist/src/models/__tests__/anthropic.test.js.map +1 -1
  151. package/dist/src/models/__tests__/bedrock.test.js +228 -2
  152. package/dist/src/models/__tests__/bedrock.test.js.map +1 -1
  153. package/dist/src/models/__tests__/defaults.test.d.ts +2 -0
  154. package/dist/src/models/__tests__/defaults.test.d.ts.map +1 -0
  155. package/dist/src/models/__tests__/defaults.test.js +36 -0
  156. package/dist/src/models/__tests__/defaults.test.js.map +1 -0
  157. package/dist/src/models/__tests__/google.test.js +135 -0
  158. package/dist/src/models/__tests__/google.test.js.map +1 -1
  159. package/dist/src/models/__tests__/model.test.js +149 -1
  160. package/dist/src/models/__tests__/model.test.js.map +1 -1
  161. package/dist/src/models/anthropic.d.ts +20 -1
  162. package/dist/src/models/anthropic.d.ts.map +1 -1
  163. package/dist/src/models/anthropic.js +42 -8
  164. package/dist/src/models/anthropic.js.map +1 -1
  165. package/dist/src/models/bedrock.d.ts +27 -1
  166. package/dist/src/models/bedrock.d.ts.map +1 -1
  167. package/dist/src/models/bedrock.js +100 -12
  168. package/dist/src/models/bedrock.js.map +1 -1
  169. package/dist/src/models/defaults.d.ts +47 -0
  170. package/dist/src/models/defaults.d.ts.map +1 -0
  171. package/dist/src/models/defaults.js +170 -0
  172. package/dist/src/models/defaults.js.map +1 -0
  173. package/dist/src/models/google/model.d.ts +14 -1
  174. package/dist/src/models/google/model.d.ts.map +1 -1
  175. package/dist/src/models/google/model.js +54 -8
  176. package/dist/src/models/google/model.js.map +1 -1
  177. package/dist/src/models/google/types.d.ts +8 -0
  178. package/dist/src/models/google/types.d.ts.map +1 -1
  179. package/dist/src/models/model.d.ts +65 -0
  180. package/dist/src/models/model.d.ts.map +1 -1
  181. package/dist/src/models/model.js +138 -0
  182. package/dist/src/models/model.js.map +1 -1
  183. package/dist/src/models/openai/__tests__/chat.test.d.ts +2 -0
  184. package/dist/src/models/openai/__tests__/chat.test.d.ts.map +1 -0
  185. package/dist/src/models/{__tests__/openai.test.js → openai/__tests__/chat.test.js} +117 -7
  186. package/dist/src/models/openai/__tests__/chat.test.js.map +1 -0
  187. package/dist/src/models/openai/__tests__/responses.test.d.ts +2 -0
  188. package/dist/src/models/openai/__tests__/responses.test.d.ts.map +1 -0
  189. package/dist/src/models/openai/__tests__/responses.test.js +668 -0
  190. package/dist/src/models/openai/__tests__/responses.test.js.map +1 -0
  191. package/dist/src/models/openai/chat-adapter.d.ts +33 -0
  192. package/dist/src/models/openai/chat-adapter.d.ts.map +1 -0
  193. package/dist/src/models/openai/chat-adapter.js +383 -0
  194. package/dist/src/models/openai/chat-adapter.js.map +1 -0
  195. package/dist/src/models/openai/errors.d.ts +16 -0
  196. package/dist/src/models/openai/errors.d.ts.map +1 -0
  197. package/dist/src/models/openai/errors.js +40 -0
  198. package/dist/src/models/openai/errors.js.map +1 -0
  199. package/dist/src/models/openai/formatting.d.ts +18 -0
  200. package/dist/src/models/openai/formatting.d.ts.map +1 -0
  201. package/dist/src/models/openai/formatting.js +38 -0
  202. package/dist/src/models/openai/formatting.js.map +1 -0
  203. package/dist/src/models/openai/index.d.ts +19 -0
  204. package/dist/src/models/openai/index.d.ts.map +1 -0
  205. package/dist/src/models/openai/index.js +18 -0
  206. package/dist/src/models/openai/index.js.map +1 -0
  207. package/dist/src/models/openai/model.d.ts +77 -0
  208. package/dist/src/models/openai/model.d.ts.map +1 -0
  209. package/dist/src/models/openai/model.js +211 -0
  210. package/dist/src/models/openai/model.js.map +1 -0
  211. package/dist/src/models/openai/responses-adapter.d.ts +78 -0
  212. package/dist/src/models/openai/responses-adapter.d.ts.map +1 -0
  213. package/dist/src/models/openai/responses-adapter.js +467 -0
  214. package/dist/src/models/openai/responses-adapter.js.map +1 -0
  215. package/dist/src/models/openai/types.d.ts +131 -0
  216. package/dist/src/models/openai/types.d.ts.map +1 -0
  217. package/dist/src/models/openai/types.js +5 -0
  218. package/dist/src/models/openai/types.js.map +1 -0
  219. package/dist/src/multiagent/__tests__/events.test.js +122 -28
  220. package/dist/src/multiagent/__tests__/events.test.js.map +1 -1
  221. package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts +2 -0
  222. package/dist/src/multiagent/__tests__/graph.invocation-state.test.d.ts.map +1 -0
  223. package/dist/src/multiagent/__tests__/graph.invocation-state.test.js +95 -0
  224. package/dist/src/multiagent/__tests__/graph.invocation-state.test.js.map +1 -0
  225. package/dist/src/multiagent/__tests__/graph.test.js +69 -0
  226. package/dist/src/multiagent/__tests__/graph.test.js.map +1 -1
  227. package/dist/src/multiagent/__tests__/nodes.test.js +18 -2
  228. package/dist/src/multiagent/__tests__/nodes.test.js.map +1 -1
  229. package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts +2 -0
  230. package/dist/src/multiagent/__tests__/swarm.invocation-state.test.d.ts.map +1 -0
  231. package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js +56 -0
  232. package/dist/src/multiagent/__tests__/swarm.invocation-state.test.js.map +1 -0
  233. package/dist/src/multiagent/__tests__/swarm.test.js +77 -0
  234. package/dist/src/multiagent/__tests__/swarm.test.js.map +1 -1
  235. package/dist/src/multiagent/events.d.ts +19 -1
  236. package/dist/src/multiagent/events.d.ts.map +1 -1
  237. package/dist/src/multiagent/events.js +18 -0
  238. package/dist/src/multiagent/events.js.map +1 -1
  239. package/dist/src/multiagent/graph.d.ts +27 -5
  240. package/dist/src/multiagent/graph.d.ts.map +1 -1
  241. package/dist/src/multiagent/graph.js +61 -15
  242. package/dist/src/multiagent/graph.js.map +1 -1
  243. package/dist/src/multiagent/index.d.ts +1 -1
  244. package/dist/src/multiagent/index.d.ts.map +1 -1
  245. package/dist/src/multiagent/multiagent.d.ts +21 -6
  246. package/dist/src/multiagent/multiagent.d.ts.map +1 -1
  247. package/dist/src/multiagent/nodes.d.ts +28 -3
  248. package/dist/src/multiagent/nodes.d.ts.map +1 -1
  249. package/dist/src/multiagent/nodes.js +42 -7
  250. package/dist/src/multiagent/nodes.js.map +1 -1
  251. package/dist/src/multiagent/swarm.d.ts +20 -4
  252. package/dist/src/multiagent/swarm.d.ts.map +1 -1
  253. package/dist/src/multiagent/swarm.js +65 -16
  254. package/dist/src/multiagent/swarm.js.map +1 -1
  255. package/dist/src/plugins/__tests__/registry.test.js +1 -1
  256. package/dist/src/plugins/__tests__/registry.test.js.map +1 -1
  257. package/dist/src/plugins/model-plugin.d.ts +20 -0
  258. package/dist/src/plugins/model-plugin.d.ts.map +1 -0
  259. package/dist/src/plugins/model-plugin.js +29 -0
  260. package/dist/src/plugins/model-plugin.js.map +1 -0
  261. package/dist/src/registry/__tests__/tool-registry.test.js +11 -0
  262. package/dist/src/registry/__tests__/tool-registry.test.js.map +1 -1
  263. package/dist/src/registry/tool-registry.d.ts +4 -0
  264. package/dist/src/registry/tool-registry.d.ts.map +1 -1
  265. package/dist/src/registry/tool-registry.js +6 -0
  266. package/dist/src/registry/tool-registry.js.map +1 -1
  267. package/dist/src/retry/__tests__/backoff-strategy.test.d.ts +2 -0
  268. package/dist/src/retry/__tests__/backoff-strategy.test.d.ts.map +1 -0
  269. package/dist/src/retry/__tests__/backoff-strategy.test.js +116 -0
  270. package/dist/src/retry/__tests__/backoff-strategy.test.js.map +1 -0
  271. package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts +2 -0
  272. package/dist/src/retry/__tests__/default-model-retry-strategy.test.d.ts.map +1 -0
  273. package/dist/src/retry/__tests__/default-model-retry-strategy.test.js +225 -0
  274. package/dist/src/retry/__tests__/default-model-retry-strategy.test.js.map +1 -0
  275. package/dist/src/retry/backoff-strategy.d.ts +108 -0
  276. package/dist/src/retry/backoff-strategy.d.ts.map +1 -0
  277. package/dist/src/retry/backoff-strategy.js +86 -0
  278. package/dist/src/retry/backoff-strategy.js.map +1 -0
  279. package/dist/src/retry/default-model-retry-strategy.d.ts +76 -0
  280. package/dist/src/retry/default-model-retry-strategy.d.ts.map +1 -0
  281. package/dist/src/retry/default-model-retry-strategy.js +104 -0
  282. package/dist/src/retry/default-model-retry-strategy.js.map +1 -0
  283. package/dist/src/retry/index.d.ts +8 -0
  284. package/dist/src/retry/index.d.ts.map +1 -0
  285. package/dist/src/retry/index.js +7 -0
  286. package/dist/src/retry/index.js.map +1 -0
  287. package/dist/src/retry/model-retry-strategy.d.ts +80 -0
  288. package/dist/src/retry/model-retry-strategy.d.ts.map +1 -0
  289. package/dist/src/retry/model-retry-strategy.js +85 -0
  290. package/dist/src/retry/model-retry-strategy.js.map +1 -0
  291. package/dist/src/retry/retry-strategy.d.ts +34 -0
  292. package/dist/src/retry/retry-strategy.d.ts.map +1 -0
  293. package/dist/src/retry/retry-strategy.js +25 -0
  294. package/dist/src/retry/retry-strategy.js.map +1 -0
  295. package/dist/src/session/__tests__/session-manager.test.js +52 -11
  296. package/dist/src/session/__tests__/session-manager.test.js.map +1 -1
  297. package/dist/src/session/session-manager.d.ts +6 -0
  298. package/dist/src/session/session-manager.d.ts.map +1 -1
  299. package/dist/src/session/session-manager.js +17 -0
  300. package/dist/src/session/session-manager.js.map +1 -1
  301. package/dist/src/telemetry/__tests__/meter.test.js +23 -0
  302. package/dist/src/telemetry/__tests__/meter.test.js.map +1 -1
  303. package/dist/src/telemetry/meter.d.ts +15 -0
  304. package/dist/src/telemetry/meter.d.ts.map +1 -1
  305. package/dist/src/telemetry/meter.js +14 -0
  306. package/dist/src/telemetry/meter.js.map +1 -1
  307. package/dist/src/tools/__tests__/tool.test.js +24 -1
  308. package/dist/src/tools/__tests__/tool.test.js.map +1 -1
  309. package/dist/src/tools/function-tool.d.ts.map +1 -1
  310. package/dist/src/tools/function-tool.js +6 -1
  311. package/dist/src/tools/function-tool.js.map +1 -1
  312. package/dist/src/tools/mcp-tool.d.ts +24 -3
  313. package/dist/src/tools/mcp-tool.d.ts.map +1 -1
  314. package/dist/src/tools/mcp-tool.js +103 -31
  315. package/dist/src/tools/mcp-tool.js.map +1 -1
  316. package/dist/src/tools/tool.d.ts +21 -2
  317. package/dist/src/tools/tool.d.ts.map +1 -1
  318. package/dist/src/tools/tool.js +12 -0
  319. package/dist/src/tools/tool.js.map +1 -1
  320. package/dist/src/tsconfig.tsbuildinfo +1 -1
  321. package/dist/src/types/__tests__/agent.test.js +48 -0
  322. package/dist/src/types/__tests__/agent.test.js.map +1 -1
  323. package/dist/src/types/agent.d.ts +77 -9
  324. package/dist/src/types/agent.d.ts.map +1 -1
  325. package/dist/src/types/agent.js +30 -6
  326. package/dist/src/types/agent.js.map +1 -1
  327. package/dist/src/types/elicitation.d.ts +15 -0
  328. package/dist/src/types/elicitation.d.ts.map +1 -0
  329. package/dist/src/types/elicitation.js +2 -0
  330. package/dist/src/types/elicitation.js.map +1 -0
  331. package/dist/src/types/interrupt.d.ts +103 -0
  332. package/dist/src/types/interrupt.d.ts.map +1 -0
  333. package/dist/src/types/interrupt.js +63 -0
  334. package/dist/src/types/interrupt.js.map +1 -0
  335. package/dist/src/types/messages.d.ts +2 -1
  336. package/dist/src/types/messages.d.ts.map +1 -1
  337. package/dist/src/types/messages.js.map +1 -1
  338. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts +2 -0
  339. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.d.ts.map +1 -0
  340. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js +292 -0
  341. package/dist/src/vended-plugins/context-offloader/__tests__/plugin.test.js.map +1 -0
  342. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts +2 -0
  343. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.d.ts.map +1 -0
  344. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js +148 -0
  345. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.js.map +1 -0
  346. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts +2 -0
  347. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.d.ts.map +1 -0
  348. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js +78 -0
  349. package/dist/src/vended-plugins/context-offloader/__tests__/storage.test.node.js.map +1 -0
  350. package/dist/src/vended-plugins/context-offloader/index.d.ts +23 -0
  351. package/dist/src/vended-plugins/context-offloader/index.d.ts.map +1 -0
  352. package/dist/src/vended-plugins/context-offloader/index.js +21 -0
  353. package/dist/src/vended-plugins/context-offloader/index.js.map +1 -0
  354. package/dist/src/vended-plugins/context-offloader/plugin.d.ts +48 -0
  355. package/dist/src/vended-plugins/context-offloader/plugin.d.ts.map +1 -0
  356. package/dist/src/vended-plugins/context-offloader/plugin.js +244 -0
  357. package/dist/src/vended-plugins/context-offloader/plugin.js.map +1 -0
  358. package/dist/src/vended-plugins/context-offloader/storage.d.ts +114 -0
  359. package/dist/src/vended-plugins/context-offloader/storage.d.ts.map +1 -0
  360. package/dist/src/vended-plugins/context-offloader/storage.js +204 -0
  361. package/dist/src/vended-plugins/context-offloader/storage.js.map +1 -0
  362. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js +21 -5
  363. package/dist/src/vended-plugins/skills/__tests__/agent-skills.test.node.js.map +1 -1
  364. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js +4 -0
  365. package/dist/src/vended-tools/bash/__tests__/bash.test.node.js.map +1 -1
  366. package/dist/src/vended-tools/bash/bash.d.ts.map +1 -1
  367. package/dist/src/vended-tools/bash/bash.js +0 -3
  368. package/dist/src/vended-tools/bash/bash.js.map +1 -1
  369. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js +4 -0
  370. package/dist/src/vended-tools/file-editor/__tests__/file-editor.test.node.js.map +1 -1
  371. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js +4 -0
  372. package/dist/src/vended-tools/notebook/__tests__/notebook.test.js.map +1 -1
  373. package/package.json +17 -9
  374. package/dist/src/models/__tests__/openai.test.d.ts +0 -2
  375. package/dist/src/models/__tests__/openai.test.d.ts.map +0 -1
  376. package/dist/src/models/__tests__/openai.test.js.map +0 -1
  377. package/dist/src/models/openai.d.ts +0 -312
  378. package/dist/src/models/openai.d.ts.map +0 -1
  379. package/dist/src/models/openai.js +0 -789
  380. package/dist/src/models/openai.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import { BedrockRuntimeClient, ConverseStreamCommand, ValidationException } from '@aws-sdk/client-bedrock-runtime';
2
+ import { BedrockRuntimeClient, ConverseStreamCommand, CountTokensCommand, ValidationException, } from '@aws-sdk/client-bedrock-runtime';
3
3
  import { isNode } from '../../__fixtures__/environment.js';
4
4
  import { BedrockModel } from '../bedrock.js';
5
5
  import { ContextWindowOverflowError, ModelThrottledError } from '../../errors.js';
@@ -9,6 +9,7 @@ import { ImageBlock, VideoBlock, DocumentBlock } from '../../types/media.js';
9
9
  import { CitationsBlock } from '../../types/citations.js';
10
10
  import { collectIterator } from '../../__fixtures__/model-test-helpers.js';
11
11
  import { NOOP_TOOL_SPEC } from '../../tools/noop-tool.js';
12
+ import { warnOnce } from '../../logging/warn-once.js';
12
13
  /**
13
14
  * Helper function to mock BedrockRuntimeClient implementation with customizable config.
14
15
  * @param options - Optional configuration for mock region, useFipsEndpoint, and send functions
@@ -92,6 +93,8 @@ vi.mock('@aws-sdk/client-bedrock-runtime', async (importOriginal) => {
92
93
  }
93
94
  throw new Error('Unhandled command type in mock');
94
95
  });
96
+ // Create a mock CountTokensCommand class
97
+ const CountTokensCommand = vi.fn();
95
98
  // Create a mock ValidationException class
96
99
  class MockValidationException extends Error {
97
100
  constructor(opts) {
@@ -113,9 +116,13 @@ vi.mock('@aws-sdk/client-bedrock-runtime', async (importOriginal) => {
113
116
  }),
114
117
  ConverseStreamCommand,
115
118
  ConverseCommand,
119
+ CountTokensCommand,
116
120
  ValidationException: MockValidationException,
117
121
  };
118
122
  });
123
+ vi.mock('../../logging/warn-once.js', () => ({
124
+ warnOnce: vi.fn(),
125
+ }));
119
126
  describe('BedrockModel', () => {
120
127
  const BEDROCK_NOOP_TOOL_CONFIG = {
121
128
  tools: [{ toolSpec: { ...NOOP_TOOL_SPEC, inputSchema: { json: NOOP_TOOL_SPEC.inputSchema } } }],
@@ -145,11 +152,20 @@ describe('BedrockModel', () => {
145
152
  const config = provider.getConfig();
146
153
  expect(config.modelId).toBeDefined();
147
154
  });
155
+ it('warns when modelId is not explicitly set', () => {
156
+ new BedrockModel();
157
+ expect(warnOnce).toHaveBeenCalledWith(expect.objectContaining({ warn: expect.any(Function) }), expect.stringContaining('using default modelId'));
158
+ });
159
+ it('does not warn when modelId is explicitly set', () => {
160
+ new BedrockModel({ modelId: 'us.anthropic.claude-3-5-sonnet-20241022-v2:0' });
161
+ expect(warnOnce).not.toHaveBeenCalledWith(expect.objectContaining({ warn: expect.any(Function) }), expect.stringContaining('using default modelId'));
162
+ });
148
163
  it('uses provided model ID ', () => {
149
164
  const customModelId = 'us.anthropic.claude-3-5-sonnet-20241022-v2:0';
150
165
  const provider = new BedrockModel({ modelId: customModelId });
151
166
  expect(provider.getConfig()).toStrictEqual({
152
167
  modelId: customModelId,
168
+ contextWindowLimit: 200_000,
153
169
  });
154
170
  });
155
171
  it('uses provided region', () => {
@@ -158,6 +174,7 @@ describe('BedrockModel', () => {
158
174
  expect(BedrockRuntimeClient).toHaveBeenCalledWith({
159
175
  region: customRegion,
160
176
  customUserAgent: 'strands-agents-ts-sdk',
177
+ requestHandler: { requestTimeout: 120_000 },
161
178
  });
162
179
  });
163
180
  it('extends custom user agent if provided', () => {
@@ -166,6 +183,7 @@ describe('BedrockModel', () => {
166
183
  expect(BedrockRuntimeClient).toHaveBeenCalledWith({
167
184
  region: 'us-west-2',
168
185
  customUserAgent: 'my-app/1.0 strands-agents-ts-sdk',
186
+ requestHandler: { requestTimeout: 120_000 },
169
187
  });
170
188
  });
171
189
  it('passes custom endpoint to client', () => {
@@ -176,6 +194,7 @@ describe('BedrockModel', () => {
176
194
  region,
177
195
  endpoint,
178
196
  customUserAgent: 'strands-agents-ts-sdk',
197
+ requestHandler: { requestTimeout: 120_000 },
179
198
  });
180
199
  });
181
200
  it('passes custom credentials to client', () => {
@@ -189,8 +208,26 @@ describe('BedrockModel', () => {
189
208
  region,
190
209
  credentials,
191
210
  customUserAgent: 'strands-agents-ts-sdk',
211
+ requestHandler: { requestTimeout: 120_000 },
192
212
  });
193
213
  });
214
+ it('applies a default 120s request timeout', () => {
215
+ new BedrockModel({ region: 'us-west-2' });
216
+ expect(BedrockRuntimeClient).toHaveBeenCalledWith(expect.objectContaining({ requestHandler: { requestTimeout: 120_000 } }));
217
+ });
218
+ it('lets the caller override requestTimeout', () => {
219
+ new BedrockModel({ region: 'us-west-2', clientConfig: { requestHandler: { requestTimeout: 5_000 } } });
220
+ expect(BedrockRuntimeClient).toHaveBeenCalledWith(expect.objectContaining({ requestHandler: { requestTimeout: 5_000 } }));
221
+ });
222
+ it('merges the default timeout with other requestHandler options', () => {
223
+ new BedrockModel({ region: 'us-west-2', clientConfig: { requestHandler: { connectionTimeout: 1_000 } } });
224
+ expect(BedrockRuntimeClient).toHaveBeenCalledWith(expect.objectContaining({ requestHandler: { requestTimeout: 120_000, connectionTimeout: 1_000 } }));
225
+ });
226
+ it('passes a user-provided handler instance through untouched', () => {
227
+ const handler = { handle: vi.fn(), updateHttpClientConfig: vi.fn(), httpHandlerConfigs: vi.fn() };
228
+ new BedrockModel({ region: 'us-west-2', clientConfig: { requestHandler: handler } });
229
+ expect(BedrockRuntimeClient).toHaveBeenCalledWith(expect.objectContaining({ requestHandler: handler }));
230
+ });
194
231
  it('adds api key middleware when apiKey is provided', () => {
195
232
  const provider = new BedrockModel({ region: 'us-east-1', apiKey: 'br-test-key' });
196
233
  const mockAdd = provider['_client'].middlewareStack.add;
@@ -222,6 +259,7 @@ describe('BedrockModel', () => {
222
259
  expect(config).toStrictEqual({
223
260
  modelId: 'global.anthropic.claude-sonnet-4-6',
224
261
  temperature: 0.5,
262
+ contextWindowLimit: 1_000_000,
225
263
  });
226
264
  });
227
265
  it('includes contextWindowLimit in config when provided', () => {
@@ -234,6 +272,43 @@ describe('BedrockModel', () => {
234
272
  contextWindowLimit: 200_000,
235
273
  });
236
274
  });
275
+ it('auto-populates contextWindowLimit from model ID lookup', () => {
276
+ const provider = new BedrockModel({ modelId: 'anthropic.claude-sonnet-4-20250514-v1:0' });
277
+ expect(provider.getConfig()).toStrictEqual({
278
+ modelId: 'anthropic.claude-sonnet-4-20250514-v1:0',
279
+ contextWindowLimit: 1_000_000,
280
+ });
281
+ });
282
+ it('auto-populates contextWindowLimit for cross-region model IDs', () => {
283
+ const provider = new BedrockModel({ modelId: 'us.anthropic.claude-sonnet-4-6' });
284
+ expect(provider.getConfig()).toStrictEqual({
285
+ modelId: 'us.anthropic.claude-sonnet-4-6',
286
+ contextWindowLimit: 1_000_000,
287
+ });
288
+ });
289
+ it('auto-populates contextWindowLimit for default model ID', () => {
290
+ const provider = new BedrockModel();
291
+ expect(provider.getConfig()).toStrictEqual({
292
+ modelId: 'global.anthropic.claude-sonnet-4-6',
293
+ contextWindowLimit: 1_000_000,
294
+ });
295
+ });
296
+ it('does not override explicit contextWindowLimit', () => {
297
+ const provider = new BedrockModel({
298
+ modelId: 'anthropic.claude-sonnet-4-20250514-v1:0',
299
+ contextWindowLimit: 100_000,
300
+ });
301
+ expect(provider.getConfig()).toStrictEqual({
302
+ modelId: 'anthropic.claude-sonnet-4-20250514-v1:0',
303
+ contextWindowLimit: 100_000,
304
+ });
305
+ });
306
+ it('leaves contextWindowLimit undefined for unknown model IDs', () => {
307
+ const provider = new BedrockModel({ modelId: 'unknown.model-v1:0' });
308
+ expect(provider.getConfig()).toStrictEqual({
309
+ modelId: 'unknown.model-v1:0',
310
+ });
311
+ });
237
312
  });
238
313
  describe('updateConfig', () => {
239
314
  it('merges new config with existing config', () => {
@@ -243,6 +318,7 @@ describe('BedrockModel', () => {
243
318
  modelId: 'global.anthropic.claude-sonnet-4-6',
244
319
  temperature: 0.8,
245
320
  maxTokens: 2048,
321
+ contextWindowLimit: 1_000_000,
246
322
  });
247
323
  });
248
324
  it('preserves fields not included in the update', () => {
@@ -259,6 +335,24 @@ describe('BedrockModel', () => {
259
335
  maxTokens: 1024,
260
336
  });
261
337
  });
338
+ it('re-resolves contextWindowLimit when modelId changes and it was auto-resolved', () => {
339
+ const provider = new BedrockModel({ region: 'us-west-2' });
340
+ expect(provider.getConfig().contextWindowLimit).toBe(1_000_000);
341
+ provider.updateConfig({ modelId: 'anthropic.claude-haiku-4-5-20251001-v1:0' });
342
+ expect(provider.getConfig().contextWindowLimit).toBe(200_000);
343
+ });
344
+ it('clears contextWindowLimit when modelId changes to unknown model', () => {
345
+ const provider = new BedrockModel({ region: 'us-west-2' });
346
+ expect(provider.getConfig().contextWindowLimit).toBe(1_000_000);
347
+ provider.updateConfig({ modelId: 'my-custom-finetuned-model' });
348
+ expect(provider.getConfig().contextWindowLimit).toBeUndefined();
349
+ });
350
+ it('preserves explicit contextWindowLimit when modelId changes', () => {
351
+ const provider = new BedrockModel({ region: 'us-west-2', contextWindowLimit: 50_000 });
352
+ expect(provider.getConfig().contextWindowLimit).toBe(50_000);
353
+ provider.updateConfig({ modelId: 'anthropic.claude-haiku-4-5-20251001-v1:0' });
354
+ expect(provider.getConfig().contextWindowLimit).toBe(50_000);
355
+ });
262
356
  });
263
357
  describe('getConfig', () => {
264
358
  it('returns the current configuration', () => {
@@ -1174,8 +1268,8 @@ describe('BedrockModel', () => {
1174
1268
  });
1175
1269
  });
1176
1270
  it('does not warn when array system prompt is provided without cacheConfig', async () => {
1177
- const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
1178
1271
  const provider = new BedrockModel();
1272
+ const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
1179
1273
  const messages = [new Message({ role: 'user', content: [new TextBlock('Hello')] })];
1180
1274
  const options = {
1181
1275
  systemPrompt: [
@@ -3530,5 +3624,137 @@ describe('BedrockModel', () => {
3530
3624
  }));
3531
3625
  });
3532
3626
  });
3627
+ describe('countTokens', () => {
3628
+ const messages = [new Message({ role: 'user', content: [new TextBlock('hello')] })];
3629
+ const toolSpecs = [
3630
+ { name: 'test_tool', description: 'A test tool', inputSchema: { type: 'object', properties: {} } },
3631
+ ];
3632
+ beforeEach(() => {
3633
+ vi.clearAllMocks();
3634
+ BedrockModel.clearCountTokensCache();
3635
+ });
3636
+ it('should return native token count on success', async () => {
3637
+ const mockSend = vi.fn(async () => ({ inputTokens: 42 }));
3638
+ mockBedrockClientImplementation({ send: mockSend });
3639
+ const model = new BedrockModel();
3640
+ const result = await model.countTokens(messages);
3641
+ expect(result).toBe(42);
3642
+ expect(mockSend).toHaveBeenCalledOnce();
3643
+ });
3644
+ it('should include system prompt in request', async () => {
3645
+ const mockSend = vi.fn(async () => ({ inputTokens: 55 }));
3646
+ mockBedrockClientImplementation({ send: mockSend });
3647
+ const model = new BedrockModel();
3648
+ const result = await model.countTokens(messages, { systemPrompt: 'Be helpful.' });
3649
+ expect(result).toBe(55);
3650
+ const commandInput = vi.mocked(CountTokensCommand).mock.calls[0][0];
3651
+ expect(commandInput).toStrictEqual({
3652
+ modelId: expect.any(String),
3653
+ input: {
3654
+ converse: {
3655
+ messages: [{ role: 'user', content: [{ text: 'hello' }] }],
3656
+ system: [{ text: 'Be helpful.' }],
3657
+ },
3658
+ },
3659
+ });
3660
+ });
3661
+ it('should include tool specs in request', async () => {
3662
+ const mockSend = vi.fn(async () => ({ inputTokens: 100 }));
3663
+ mockBedrockClientImplementation({ send: mockSend });
3664
+ const model = new BedrockModel();
3665
+ const result = await model.countTokens(messages, { toolSpecs });
3666
+ expect(result).toBe(100);
3667
+ const commandInput = vi.mocked(CountTokensCommand).mock.calls[0][0];
3668
+ expect(commandInput).toStrictEqual({
3669
+ modelId: expect.any(String),
3670
+ input: {
3671
+ converse: {
3672
+ messages: [{ role: 'user', content: [{ text: 'hello' }] }],
3673
+ toolConfig: {
3674
+ tools: [
3675
+ {
3676
+ toolSpec: {
3677
+ name: 'test_tool',
3678
+ description: 'A test tool',
3679
+ inputSchema: { json: { type: 'object', properties: {} } },
3680
+ },
3681
+ },
3682
+ ],
3683
+ },
3684
+ },
3685
+ },
3686
+ });
3687
+ });
3688
+ it('should strip inferenceConfig from request', async () => {
3689
+ const mockSend = vi.fn(async () => ({ inputTokens: 10 }));
3690
+ mockBedrockClientImplementation({ send: mockSend });
3691
+ const model = new BedrockModel({ maxTokens: 100 });
3692
+ await model.countTokens(messages);
3693
+ const commandInput = vi.mocked(CountTokensCommand).mock.calls[0][0];
3694
+ expect(commandInput).toStrictEqual({
3695
+ modelId: expect.any(String),
3696
+ input: {
3697
+ converse: {
3698
+ messages: [{ role: 'user', content: [{ text: 'hello' }] }],
3699
+ },
3700
+ },
3701
+ });
3702
+ });
3703
+ it('should fall back to estimation on API error', async () => {
3704
+ const mockSend = vi.fn(async () => {
3705
+ throw new Error('API error');
3706
+ });
3707
+ mockBedrockClientImplementation({ send: mockSend });
3708
+ const model = new BedrockModel();
3709
+ const result = await model.countTokens(messages);
3710
+ expect(typeof result).toBe('number');
3711
+ expect(result).toBeGreaterThanOrEqual(0);
3712
+ });
3713
+ it('should fall back to estimation on generic exception', async () => {
3714
+ const mockSend = vi.fn(async () => {
3715
+ throw new Error('Connection failed');
3716
+ });
3717
+ mockBedrockClientImplementation({ send: mockSend });
3718
+ const model = new BedrockModel();
3719
+ const result = await model.countTokens(messages);
3720
+ expect(typeof result).toBe('number');
3721
+ expect(result).toBeGreaterThanOrEqual(0);
3722
+ });
3723
+ it('should cache model ID and skip API call when model does not support counting tokens', async () => {
3724
+ const unsupportedError = new Error("The provided model doesn't support counting tokens");
3725
+ unsupportedError.name = 'ValidationException';
3726
+ const mockSend = vi.fn(async () => {
3727
+ throw unsupportedError;
3728
+ });
3729
+ mockBedrockClientImplementation({ send: mockSend });
3730
+ const model = new BedrockModel();
3731
+ // First call: hits API, gets error, caches
3732
+ await model.countTokens(messages);
3733
+ expect(mockSend).toHaveBeenCalledOnce();
3734
+ // Second call: skips API entirely
3735
+ await model.countTokens(messages);
3736
+ expect(mockSend).toHaveBeenCalledOnce();
3737
+ });
3738
+ it('should not cache model ID for other errors', async () => {
3739
+ const mockSend = vi.fn(async () => {
3740
+ throw new Error('Transient network error');
3741
+ });
3742
+ mockBedrockClientImplementation({ send: mockSend });
3743
+ const model = new BedrockModel();
3744
+ await model.countTokens(messages);
3745
+ expect(mockSend).toHaveBeenCalledTimes(1);
3746
+ // Second call should still attempt the API
3747
+ await model.countTokens(messages);
3748
+ expect(mockSend).toHaveBeenCalledTimes(2);
3749
+ });
3750
+ it('should skip native API and use heuristic when useNativeTokenCount is false', async () => {
3751
+ const mockSend = vi.fn();
3752
+ mockBedrockClientImplementation({ send: mockSend });
3753
+ const model = new BedrockModel({ useNativeTokenCount: false });
3754
+ const result = await model.countTokens(messages);
3755
+ expect(mockSend).not.toHaveBeenCalled();
3756
+ expect(result).toBe(2); // heuristic: Math.ceil('hello'.length / 4)
3757
+ });
3758
+ });
3533
3759
  });
3534
3760
  //# sourceMappingURL=bedrock.test.js.map