@strands-agents/sdk 0.0.1

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 (423) hide show
  1. package/LICENSE +175 -0
  2. package/README.md +185 -0
  3. package/dist/__fixtures__/model-test-helpers.d.ts +56 -0
  4. package/dist/__fixtures__/model-test-helpers.d.ts.map +1 -0
  5. package/dist/__fixtures__/model-test-helpers.js +85 -0
  6. package/dist/__fixtures__/model-test-helpers.js.map +1 -0
  7. package/dist/__fixtures__/tool-helpers.d.ts +15 -0
  8. package/dist/__fixtures__/tool-helpers.d.ts.map +1 -0
  9. package/dist/__fixtures__/tool-helpers.js +22 -0
  10. package/dist/__fixtures__/tool-helpers.js.map +1 -0
  11. package/dist/__tests__/errors.test.d.ts +2 -0
  12. package/dist/__tests__/errors.test.d.ts.map +1 -0
  13. package/dist/__tests__/errors.test.js +20 -0
  14. package/dist/__tests__/errors.test.js.map +1 -0
  15. package/dist/__tests__/index.test.d.ts +2 -0
  16. package/dist/__tests__/index.test.d.ts.map +1 -0
  17. package/dist/__tests__/index.test.js +27 -0
  18. package/dist/__tests__/index.test.js.map +1 -0
  19. package/dist/errors.d.ts +22 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +25 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/index.d.ts +19 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +17 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/models/__tests__/bedrock.test.d.ts +2 -0
  28. package/dist/models/__tests__/bedrock.test.d.ts.map +1 -0
  29. package/dist/models/__tests__/bedrock.test.js +1161 -0
  30. package/dist/models/__tests__/bedrock.test.js.map +1 -0
  31. package/dist/models/__tests__/model.test.d.ts +2 -0
  32. package/dist/models/__tests__/model.test.d.ts.map +1 -0
  33. package/dist/models/__tests__/model.test.js +297 -0
  34. package/dist/models/__tests__/model.test.js.map +1 -0
  35. package/dist/models/__tests__/openai.test.d.ts +2 -0
  36. package/dist/models/__tests__/openai.test.d.ts.map +1 -0
  37. package/dist/models/__tests__/openai.test.js +1016 -0
  38. package/dist/models/__tests__/openai.test.js.map +1 -0
  39. package/dist/models/__tests__/test-utils.d.ts +10 -0
  40. package/dist/models/__tests__/test-utils.d.ts.map +1 -0
  41. package/dist/models/__tests__/test-utils.js +17 -0
  42. package/dist/models/__tests__/test-utils.js.map +1 -0
  43. package/dist/models/bedrock.d.ts +272 -0
  44. package/dist/models/bedrock.d.ts.map +1 -0
  45. package/dist/models/bedrock.js +679 -0
  46. package/dist/models/bedrock.js.map +1 -0
  47. package/dist/models/model.d.ts +89 -0
  48. package/dist/models/model.d.ts.map +1 -0
  49. package/dist/models/model.js +122 -0
  50. package/dist/models/model.js.map +1 -0
  51. package/dist/models/openai.d.ts +262 -0
  52. package/dist/models/openai.d.ts.map +1 -0
  53. package/dist/models/openai.js +625 -0
  54. package/dist/models/openai.js.map +1 -0
  55. package/dist/models/streaming.d.ts +226 -0
  56. package/dist/models/streaming.d.ts.map +1 -0
  57. package/dist/models/streaming.js +2 -0
  58. package/dist/models/streaming.js.map +1 -0
  59. package/dist/src/__fixtures__/agent-helpers.d.ts +29 -0
  60. package/dist/src/__fixtures__/agent-helpers.d.ts.map +1 -0
  61. package/dist/src/__fixtures__/agent-helpers.js +19 -0
  62. package/dist/src/__fixtures__/agent-helpers.js.map +1 -0
  63. package/dist/src/__fixtures__/environment.d.ts +12 -0
  64. package/dist/src/__fixtures__/environment.d.ts.map +1 -0
  65. package/dist/src/__fixtures__/environment.js +12 -0
  66. package/dist/src/__fixtures__/environment.js.map +1 -0
  67. package/dist/src/__fixtures__/mock-hook-provider.d.ts +14 -0
  68. package/dist/src/__fixtures__/mock-hook-provider.d.ts.map +1 -0
  69. package/dist/src/__fixtures__/mock-hook-provider.js +33 -0
  70. package/dist/src/__fixtures__/mock-hook-provider.js.map +1 -0
  71. package/dist/src/__fixtures__/mock-message-model.d.ts +93 -0
  72. package/dist/src/__fixtures__/mock-message-model.d.ts.map +1 -0
  73. package/dist/src/__fixtures__/mock-message-model.js +226 -0
  74. package/dist/src/__fixtures__/mock-message-model.js.map +1 -0
  75. package/dist/src/__fixtures__/model-test-helpers.d.ts +56 -0
  76. package/dist/src/__fixtures__/model-test-helpers.d.ts.map +1 -0
  77. package/dist/src/__fixtures__/model-test-helpers.js +85 -0
  78. package/dist/src/__fixtures__/model-test-helpers.js.map +1 -0
  79. package/dist/src/__fixtures__/tool-helpers.d.ts +37 -0
  80. package/dist/src/__fixtures__/tool-helpers.d.ts.map +1 -0
  81. package/dist/src/__fixtures__/tool-helpers.js +78 -0
  82. package/dist/src/__fixtures__/tool-helpers.js.map +1 -0
  83. package/dist/src/__tests__/errors.test.d.ts +2 -0
  84. package/dist/src/__tests__/errors.test.d.ts.map +1 -0
  85. package/dist/src/__tests__/errors.test.js +64 -0
  86. package/dist/src/__tests__/errors.test.js.map +1 -0
  87. package/dist/src/__tests__/index.test.d.ts +2 -0
  88. package/dist/src/__tests__/index.test.d.ts.map +1 -0
  89. package/dist/src/__tests__/index.test.js +27 -0
  90. package/dist/src/__tests__/index.test.js.map +1 -0
  91. package/dist/src/__tests__/mcp.test.d.ts +2 -0
  92. package/dist/src/__tests__/mcp.test.d.ts.map +1 -0
  93. package/dist/src/__tests__/mcp.test.js +166 -0
  94. package/dist/src/__tests__/mcp.test.js.map +1 -0
  95. package/dist/src/agent/__tests__/agent.hook.test.d.ts +2 -0
  96. package/dist/src/agent/__tests__/agent.hook.test.d.ts.map +1 -0
  97. package/dist/src/agent/__tests__/agent.hook.test.js +250 -0
  98. package/dist/src/agent/__tests__/agent.hook.test.js.map +1 -0
  99. package/dist/src/agent/__tests__/agent.test.d.ts +2 -0
  100. package/dist/src/agent/__tests__/agent.test.d.ts.map +1 -0
  101. package/dist/src/agent/__tests__/agent.test.js +414 -0
  102. package/dist/src/agent/__tests__/agent.test.js.map +1 -0
  103. package/dist/src/agent/__tests__/printer.test.d.ts +2 -0
  104. package/dist/src/agent/__tests__/printer.test.d.ts.map +1 -0
  105. package/dist/src/agent/__tests__/printer.test.js +152 -0
  106. package/dist/src/agent/__tests__/printer.test.js.map +1 -0
  107. package/dist/src/agent/__tests__/state.test.d.ts +2 -0
  108. package/dist/src/agent/__tests__/state.test.d.ts.map +1 -0
  109. package/dist/src/agent/__tests__/state.test.js +231 -0
  110. package/dist/src/agent/__tests__/state.test.js.map +1 -0
  111. package/dist/src/agent/agent.d.ts +207 -0
  112. package/dist/src/agent/agent.d.ts.map +1 -0
  113. package/dist/src/agent/agent.js +481 -0
  114. package/dist/src/agent/agent.js.map +1 -0
  115. package/dist/src/agent/printer.d.ts +73 -0
  116. package/dist/src/agent/printer.d.ts.map +1 -0
  117. package/dist/src/agent/printer.js +145 -0
  118. package/dist/src/agent/printer.js.map +1 -0
  119. package/dist/src/agent/state.d.ts +102 -0
  120. package/dist/src/agent/state.d.ts.map +1 -0
  121. package/dist/src/agent/state.js +73 -0
  122. package/dist/src/agent/state.js.map +1 -0
  123. package/dist/src/agent/streaming.d.ts +91 -0
  124. package/dist/src/agent/streaming.d.ts.map +1 -0
  125. package/dist/src/agent/streaming.js +2 -0
  126. package/dist/src/agent/streaming.js.map +1 -0
  127. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts +2 -0
  128. package/dist/src/conversation-manager/__tests__/conversation-manager.test.d.ts.map +1 -0
  129. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js +10 -0
  130. package/dist/src/conversation-manager/__tests__/conversation-manager.test.js.map +1 -0
  131. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts +2 -0
  132. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.d.ts.map +1 -0
  133. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js +35 -0
  134. package/dist/src/conversation-manager/__tests__/null-conversation-manager.test.js.map +1 -0
  135. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts +2 -0
  136. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.d.ts.map +1 -0
  137. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js +553 -0
  138. package/dist/src/conversation-manager/__tests__/sliding-window-conversation-manager.test.js.map +1 -0
  139. package/dist/src/conversation-manager/conversation-manager.d.ts +73 -0
  140. package/dist/src/conversation-manager/conversation-manager.d.ts.map +1 -0
  141. package/dist/src/conversation-manager/conversation-manager.js +24 -0
  142. package/dist/src/conversation-manager/conversation-manager.js.map +1 -0
  143. package/dist/src/conversation-manager/index.d.ts +8 -0
  144. package/dist/src/conversation-manager/index.d.ts.map +1 -0
  145. package/dist/src/conversation-manager/index.js +8 -0
  146. package/dist/src/conversation-manager/index.js.map +1 -0
  147. package/dist/src/conversation-manager/null-conversation-manager.d.ts +23 -0
  148. package/dist/src/conversation-manager/null-conversation-manager.d.ts.map +1 -0
  149. package/dist/src/conversation-manager/null-conversation-manager.js +23 -0
  150. package/dist/src/conversation-manager/null-conversation-manager.js.map +1 -0
  151. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts +105 -0
  152. package/dist/src/conversation-manager/sliding-window-conversation-manager.d.ts.map +1 -0
  153. package/dist/src/conversation-manager/sliding-window-conversation-manager.js +212 -0
  154. package/dist/src/conversation-manager/sliding-window-conversation-manager.js.map +1 -0
  155. package/dist/src/errors.d.ts +83 -0
  156. package/dist/src/errors.d.ts.map +1 -0
  157. package/dist/src/errors.js +97 -0
  158. package/dist/src/errors.js.map +1 -0
  159. package/dist/src/hooks/__tests__/events.test.d.ts +2 -0
  160. package/dist/src/hooks/__tests__/events.test.d.ts.map +1 -0
  161. package/dist/src/hooks/__tests__/events.test.js +347 -0
  162. package/dist/src/hooks/__tests__/events.test.js.map +1 -0
  163. package/dist/src/hooks/__tests__/registry.test.d.ts +2 -0
  164. package/dist/src/hooks/__tests__/registry.test.d.ts.map +1 -0
  165. package/dist/src/hooks/__tests__/registry.test.js +154 -0
  166. package/dist/src/hooks/__tests__/registry.test.js.map +1 -0
  167. package/dist/src/hooks/events.d.ts +199 -0
  168. package/dist/src/hooks/events.d.ts.map +1 -0
  169. package/dist/src/hooks/events.js +191 -0
  170. package/dist/src/hooks/events.js.map +1 -0
  171. package/dist/src/hooks/index.d.ts +11 -0
  172. package/dist/src/hooks/index.d.ts.map +1 -0
  173. package/dist/src/hooks/index.js +11 -0
  174. package/dist/src/hooks/index.js.map +1 -0
  175. package/dist/src/hooks/registry.d.ts +65 -0
  176. package/dist/src/hooks/registry.d.ts.map +1 -0
  177. package/dist/src/hooks/registry.js +65 -0
  178. package/dist/src/hooks/registry.js.map +1 -0
  179. package/dist/src/hooks/types.d.ts +49 -0
  180. package/dist/src/hooks/types.d.ts.map +1 -0
  181. package/dist/src/hooks/types.js +2 -0
  182. package/dist/src/hooks/types.js.map +1 -0
  183. package/dist/src/index.d.ts +32 -0
  184. package/dist/src/index.d.ts.map +1 -0
  185. package/dist/src/index.js +29 -0
  186. package/dist/src/index.js.map +1 -0
  187. package/dist/src/mcp.d.ts +51 -0
  188. package/dist/src/mcp.d.ts.map +1 -0
  189. package/dist/src/mcp.js +91 -0
  190. package/dist/src/mcp.js.map +1 -0
  191. package/dist/src/models/__tests__/bedrock.test.d.ts +2 -0
  192. package/dist/src/models/__tests__/bedrock.test.d.ts.map +1 -0
  193. package/dist/src/models/__tests__/bedrock.test.js +1388 -0
  194. package/dist/src/models/__tests__/bedrock.test.js.map +1 -0
  195. package/dist/src/models/__tests__/model.test.d.ts +2 -0
  196. package/dist/src/models/__tests__/model.test.d.ts.map +1 -0
  197. package/dist/src/models/__tests__/model.test.js +342 -0
  198. package/dist/src/models/__tests__/model.test.js.map +1 -0
  199. package/dist/src/models/__tests__/openai.test.d.ts +2 -0
  200. package/dist/src/models/__tests__/openai.test.d.ts.map +1 -0
  201. package/dist/src/models/__tests__/openai.test.js +1189 -0
  202. package/dist/src/models/__tests__/openai.test.js.map +1 -0
  203. package/dist/src/models/__tests__/test-utils.d.ts +10 -0
  204. package/dist/src/models/__tests__/test-utils.d.ts.map +1 -0
  205. package/dist/src/models/__tests__/test-utils.js +17 -0
  206. package/dist/src/models/__tests__/test-utils.js.map +1 -0
  207. package/dist/src/models/bedrock.d.ts +289 -0
  208. package/dist/src/models/bedrock.d.ts.map +1 -0
  209. package/dist/src/models/bedrock.js +804 -0
  210. package/dist/src/models/bedrock.js.map +1 -0
  211. package/dist/src/models/model.d.ts +99 -0
  212. package/dist/src/models/model.d.ts.map +1 -0
  213. package/dist/src/models/model.js +169 -0
  214. package/dist/src/models/model.js.map +1 -0
  215. package/dist/src/models/openai.d.ts +262 -0
  216. package/dist/src/models/openai.d.ts.map +1 -0
  217. package/dist/src/models/openai.js +752 -0
  218. package/dist/src/models/openai.js.map +1 -0
  219. package/dist/src/models/streaming.d.ts +318 -0
  220. package/dist/src/models/streaming.d.ts.map +1 -0
  221. package/dist/src/models/streaming.js +122 -0
  222. package/dist/src/models/streaming.js.map +1 -0
  223. package/dist/src/registry/registry.d.ts +117 -0
  224. package/dist/src/registry/registry.d.ts.map +1 -0
  225. package/dist/src/registry/registry.js +298 -0
  226. package/dist/src/registry/registry.js.map +1 -0
  227. package/dist/src/registry/tool-registry.d.ts +34 -0
  228. package/dist/src/registry/tool-registry.d.ts.map +1 -0
  229. package/dist/src/registry/tool-registry.js +178 -0
  230. package/dist/src/registry/tool-registry.js.map +1 -0
  231. package/dist/src/tools/__tests__/tool.test.d.ts +2 -0
  232. package/dist/src/tools/__tests__/tool.test.d.ts.map +1 -0
  233. package/dist/src/tools/__tests__/tool.test.js +877 -0
  234. package/dist/src/tools/__tests__/tool.test.js.map +1 -0
  235. package/dist/src/tools/__tests__/zod-tool.test-d.d.ts +2 -0
  236. package/dist/src/tools/__tests__/zod-tool.test-d.d.ts.map +1 -0
  237. package/dist/src/tools/__tests__/zod-tool.test-d.js +227 -0
  238. package/dist/src/tools/__tests__/zod-tool.test-d.js.map +1 -0
  239. package/dist/src/tools/__tests__/zod-tool.test.d.ts +2 -0
  240. package/dist/src/tools/__tests__/zod-tool.test.d.ts.map +1 -0
  241. package/dist/src/tools/__tests__/zod-tool.test.js +372 -0
  242. package/dist/src/tools/__tests__/zod-tool.test.js.map +1 -0
  243. package/dist/src/tools/function-tool.d.ts +146 -0
  244. package/dist/src/tools/function-tool.d.ts.map +1 -0
  245. package/dist/src/tools/function-tool.js +188 -0
  246. package/dist/src/tools/function-tool.js.map +1 -0
  247. package/dist/src/tools/mcp-tool.d.ts +36 -0
  248. package/dist/src/tools/mcp-tool.d.ts.map +1 -0
  249. package/dist/src/tools/mcp-tool.js +78 -0
  250. package/dist/src/tools/mcp-tool.js.map +1 -0
  251. package/dist/src/tools/tool.d.ts +167 -0
  252. package/dist/src/tools/tool.d.ts.map +1 -0
  253. package/dist/src/tools/tool.js +68 -0
  254. package/dist/src/tools/tool.js.map +1 -0
  255. package/dist/src/tools/types.d.ts +62 -0
  256. package/dist/src/tools/types.d.ts.map +1 -0
  257. package/dist/src/tools/types.js +2 -0
  258. package/dist/src/tools/types.js.map +1 -0
  259. package/dist/src/tools/zod-tool.d.ts +70 -0
  260. package/dist/src/tools/zod-tool.d.ts.map +1 -0
  261. package/dist/src/tools/zod-tool.js +149 -0
  262. package/dist/src/tools/zod-tool.js.map +1 -0
  263. package/dist/src/types/__tests__/agent.test.d.ts +2 -0
  264. package/dist/src/types/__tests__/agent.test.d.ts.map +1 -0
  265. package/dist/src/types/__tests__/agent.test.js +155 -0
  266. package/dist/src/types/__tests__/agent.test.js.map +1 -0
  267. package/dist/src/types/__tests__/json.test.d.ts +2 -0
  268. package/dist/src/types/__tests__/json.test.d.ts.map +1 -0
  269. package/dist/src/types/__tests__/json.test.js +298 -0
  270. package/dist/src/types/__tests__/json.test.js.map +1 -0
  271. package/dist/src/types/__tests__/media.test.d.ts +2 -0
  272. package/dist/src/types/__tests__/media.test.d.ts.map +1 -0
  273. package/dist/src/types/__tests__/media.test.js +257 -0
  274. package/dist/src/types/__tests__/media.test.js.map +1 -0
  275. package/dist/src/types/__tests__/messages.test.d.ts +2 -0
  276. package/dist/src/types/__tests__/messages.test.d.ts.map +1 -0
  277. package/dist/src/types/__tests__/messages.test.js +364 -0
  278. package/dist/src/types/__tests__/messages.test.js.map +1 -0
  279. package/dist/src/types/__tests__/validation.test.d.ts +2 -0
  280. package/dist/src/types/__tests__/validation.test.d.ts.map +1 -0
  281. package/dist/src/types/__tests__/validation.test.js +30 -0
  282. package/dist/src/types/__tests__/validation.test.js.map +1 -0
  283. package/dist/src/types/agent.d.ts +57 -0
  284. package/dist/src/types/agent.d.ts.map +1 -0
  285. package/dist/src/types/agent.js +47 -0
  286. package/dist/src/types/agent.js.map +1 -0
  287. package/dist/src/types/json.d.ts +55 -0
  288. package/dist/src/types/json.d.ts.map +1 -0
  289. package/dist/src/types/json.js +72 -0
  290. package/dist/src/types/json.js.map +1 -0
  291. package/dist/src/types/media.d.ts +249 -0
  292. package/dist/src/types/media.d.ts.map +1 -0
  293. package/dist/src/types/media.js +173 -0
  294. package/dist/src/types/media.js.map +1 -0
  295. package/dist/src/types/messages.d.ts +438 -0
  296. package/dist/src/types/messages.d.ts.map +1 -0
  297. package/dist/src/types/messages.js +286 -0
  298. package/dist/src/types/messages.js.map +1 -0
  299. package/dist/src/types/validation.d.ts +10 -0
  300. package/dist/src/types/validation.d.ts.map +1 -0
  301. package/dist/src/types/validation.js +15 -0
  302. package/dist/src/types/validation.js.map +1 -0
  303. package/dist/tools/__tests__/registry.test.d.ts +2 -0
  304. package/dist/tools/__tests__/registry.test.d.ts.map +1 -0
  305. package/dist/tools/__tests__/registry.test.js +253 -0
  306. package/dist/tools/__tests__/registry.test.js.map +1 -0
  307. package/dist/tools/__tests__/tool.test.d.ts +2 -0
  308. package/dist/tools/__tests__/tool.test.d.ts.map +1 -0
  309. package/dist/tools/__tests__/tool.test.js +761 -0
  310. package/dist/tools/__tests__/tool.test.js.map +1 -0
  311. package/dist/tools/__tests__/zod-tool.test-d.d.ts +2 -0
  312. package/dist/tools/__tests__/zod-tool.test-d.d.ts.map +1 -0
  313. package/dist/tools/__tests__/zod-tool.test-d.js +227 -0
  314. package/dist/tools/__tests__/zod-tool.test-d.js.map +1 -0
  315. package/dist/tools/__tests__/zod-tool.test.d.ts +2 -0
  316. package/dist/tools/__tests__/zod-tool.test.d.ts.map +1 -0
  317. package/dist/tools/__tests__/zod-tool.test.js +342 -0
  318. package/dist/tools/__tests__/zod-tool.test.js.map +1 -0
  319. package/dist/tools/function-tool.d.ts +156 -0
  320. package/dist/tools/function-tool.d.ts.map +1 -0
  321. package/dist/tools/function-tool.js +237 -0
  322. package/dist/tools/function-tool.js.map +1 -0
  323. package/dist/tools/registry.d.ts +43 -0
  324. package/dist/tools/registry.d.ts.map +1 -0
  325. package/dist/tools/registry.js +82 -0
  326. package/dist/tools/registry.js.map +1 -0
  327. package/dist/tools/tool.d.ts +157 -0
  328. package/dist/tools/tool.d.ts.map +1 -0
  329. package/dist/tools/tool.js +2 -0
  330. package/dist/tools/tool.js.map +1 -0
  331. package/dist/tools/types.d.ts +119 -0
  332. package/dist/tools/types.d.ts.map +1 -0
  333. package/dist/tools/types.js +2 -0
  334. package/dist/tools/types.js.map +1 -0
  335. package/dist/tools/zod-tool.d.ts +70 -0
  336. package/dist/tools/zod-tool.d.ts.map +1 -0
  337. package/dist/tools/zod-tool.js +96 -0
  338. package/dist/tools/zod-tool.js.map +1 -0
  339. package/dist/types/__tests__/json.test.d.ts +2 -0
  340. package/dist/types/__tests__/json.test.d.ts.map +1 -0
  341. package/dist/types/__tests__/json.test.js +129 -0
  342. package/dist/types/__tests__/json.test.js.map +1 -0
  343. package/dist/types/__tests__/validation.test.d.ts +2 -0
  344. package/dist/types/__tests__/validation.test.d.ts.map +1 -0
  345. package/dist/types/__tests__/validation.test.js +30 -0
  346. package/dist/types/__tests__/validation.test.js.map +1 -0
  347. package/dist/types/json.d.ts +45 -0
  348. package/dist/types/json.d.ts.map +1 -0
  349. package/dist/types/json.js +17 -0
  350. package/dist/types/json.js.map +1 -0
  351. package/dist/types/messages.d.ts +160 -0
  352. package/dist/types/messages.d.ts.map +1 -0
  353. package/dist/types/messages.js +2 -0
  354. package/dist/types/messages.js.map +1 -0
  355. package/dist/types/validation.d.ts +10 -0
  356. package/dist/types/validation.d.ts.map +1 -0
  357. package/dist/types/validation.js +15 -0
  358. package/dist/types/validation.js.map +1 -0
  359. package/dist/vended_tools/bash/__tests__/bash.test.d.ts +2 -0
  360. package/dist/vended_tools/bash/__tests__/bash.test.d.ts.map +1 -0
  361. package/dist/vended_tools/bash/__tests__/bash.test.js +333 -0
  362. package/dist/vended_tools/bash/__tests__/bash.test.js.map +1 -0
  363. package/dist/vended_tools/bash/bash.d.ts +33 -0
  364. package/dist/vended_tools/bash/bash.d.ts.map +1 -0
  365. package/dist/vended_tools/bash/bash.js +264 -0
  366. package/dist/vended_tools/bash/bash.js.map +1 -0
  367. package/dist/vended_tools/bash/index.d.ts +7 -0
  368. package/dist/vended_tools/bash/index.d.ts.map +1 -0
  369. package/dist/vended_tools/bash/index.js +6 -0
  370. package/dist/vended_tools/bash/index.js.map +1 -0
  371. package/dist/vended_tools/bash/types.d.ts +65 -0
  372. package/dist/vended_tools/bash/types.d.ts.map +1 -0
  373. package/dist/vended_tools/bash/types.js +22 -0
  374. package/dist/vended_tools/bash/types.js.map +1 -0
  375. package/dist/vended_tools/file_editor/__tests__/file-editor.test.d.ts +2 -0
  376. package/dist/vended_tools/file_editor/__tests__/file-editor.test.d.ts.map +1 -0
  377. package/dist/vended_tools/file_editor/__tests__/file-editor.test.js +359 -0
  378. package/dist/vended_tools/file_editor/__tests__/file-editor.test.js.map +1 -0
  379. package/dist/vended_tools/file_editor/file-editor.d.ts +31 -0
  380. package/dist/vended_tools/file_editor/file-editor.d.ts.map +1 -0
  381. package/dist/vended_tools/file_editor/file-editor.js +353 -0
  382. package/dist/vended_tools/file_editor/file-editor.js.map +1 -0
  383. package/dist/vended_tools/file_editor/index.d.ts +6 -0
  384. package/dist/vended_tools/file_editor/index.d.ts.map +1 -0
  385. package/dist/vended_tools/file_editor/index.js +5 -0
  386. package/dist/vended_tools/file_editor/index.js.map +1 -0
  387. package/dist/vended_tools/file_editor/types.d.ts +61 -0
  388. package/dist/vended_tools/file_editor/types.d.ts.map +1 -0
  389. package/dist/vended_tools/file_editor/types.js +2 -0
  390. package/dist/vended_tools/file_editor/types.js.map +1 -0
  391. package/dist/vended_tools/http_request/__tests__/http-request.test.d.ts +2 -0
  392. package/dist/vended_tools/http_request/__tests__/http-request.test.d.ts.map +1 -0
  393. package/dist/vended_tools/http_request/__tests__/http-request.test.js +189 -0
  394. package/dist/vended_tools/http_request/__tests__/http-request.test.js.map +1 -0
  395. package/dist/vended_tools/http_request/http-request.d.ts +35 -0
  396. package/dist/vended_tools/http_request/http-request.d.ts.map +1 -0
  397. package/dist/vended_tools/http_request/http-request.js +95 -0
  398. package/dist/vended_tools/http_request/http-request.js.map +1 -0
  399. package/dist/vended_tools/http_request/index.d.ts +6 -0
  400. package/dist/vended_tools/http_request/index.d.ts.map +1 -0
  401. package/dist/vended_tools/http_request/index.js +5 -0
  402. package/dist/vended_tools/http_request/index.js.map +1 -0
  403. package/dist/vended_tools/http_request/types.d.ts +47 -0
  404. package/dist/vended_tools/http_request/types.d.ts.map +1 -0
  405. package/dist/vended_tools/http_request/types.js +2 -0
  406. package/dist/vended_tools/http_request/types.js.map +1 -0
  407. package/dist/vended_tools/notebook/__tests__/notebook.test.d.ts +2 -0
  408. package/dist/vended_tools/notebook/__tests__/notebook.test.d.ts.map +1 -0
  409. package/dist/vended_tools/notebook/__tests__/notebook.test.js +371 -0
  410. package/dist/vended_tools/notebook/__tests__/notebook.test.js.map +1 -0
  411. package/dist/vended_tools/notebook/index.d.ts +6 -0
  412. package/dist/vended_tools/notebook/index.d.ts.map +1 -0
  413. package/dist/vended_tools/notebook/index.js +5 -0
  414. package/dist/vended_tools/notebook/index.js.map +1 -0
  415. package/dist/vended_tools/notebook/notebook.d.ts +29 -0
  416. package/dist/vended_tools/notebook/notebook.d.ts.map +1 -0
  417. package/dist/vended_tools/notebook/notebook.js +215 -0
  418. package/dist/vended_tools/notebook/notebook.js.map +1 -0
  419. package/dist/vended_tools/notebook/types.d.ts +79 -0
  420. package/dist/vended_tools/notebook/types.d.ts.map +1 -0
  421. package/dist/vended_tools/notebook/types.js +2 -0
  422. package/dist/vended_tools/notebook/types.js.map +1 -0
  423. package/package.json +112 -0
@@ -0,0 +1,679 @@
1
+ /**
2
+ * AWS Bedrock model provider implementation.
3
+ *
4
+ * This module provides integration with AWS Bedrock's Converse API,
5
+ * supporting streaming responses, tool use, and prompt caching.
6
+ *
7
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ConverseStream.html
8
+ */
9
+ import { BedrockRuntimeClient, ConverseStreamCommand, ContentBlock as BedrockContentBlock, ConverseCommand, ReasoningContentBlockDelta, ReasoningContentBlock, } from '@aws-sdk/client-bedrock-runtime';
10
+ import { Model } from '../models/model';
11
+ import { ContextWindowOverflowError } from '../errors';
12
+ import { ensureDefined } from '../types/validation';
13
+ /**
14
+ * Default Bedrock model ID.
15
+ * Uses Claude Sonnet 4.5 with global inference profile for cross-region availability.
16
+ */
17
+ const DEFAULT_BEDROCK_MODEL_ID = 'global.anthropic.claude-sonnet-4-5-20250929-v1:0';
18
+ /**
19
+ * Models that require the status field in tool results.
20
+ * According to AWS Bedrock API documentation, the status field is only supported by Anthropic Claude models.
21
+ * @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ToolResultBlock.html
22
+ */
23
+ const MODELS_INCLUDE_STATUS = ['anthropic.claude'];
24
+ /**
25
+ * Error messages that indicate context window overflow.
26
+ * Used to detect when input exceeds the model's context window.
27
+ */
28
+ const BEDROCK_CONTEXT_WINDOW_OVERFLOW_MESSAGES = [
29
+ 'Input is too long for requested model',
30
+ 'input length and `max_tokens` exceed context limit',
31
+ 'too many total text bytes',
32
+ ];
33
+ /**
34
+ * Mapping of Bedrock stop reasons to SDK stop reasons.
35
+ */
36
+ const STOP_REASON_MAP = {
37
+ end_turn: 'endTurn',
38
+ tool_use: 'toolUse',
39
+ max_tokens: 'maxTokens',
40
+ stop_sequence: 'stopSequence',
41
+ content_filtered: 'contentFiltered',
42
+ guardrail_intervened: 'guardrailIntervened',
43
+ };
44
+ /**
45
+ * Converts a snake_case string to camelCase.
46
+ * Used for mapping unknown stop reasons from Bedrock to SDK format.
47
+ *
48
+ * @param str - Snake case string
49
+ * @returns Camel case string
50
+ */
51
+ function snakeToCamel(str) {
52
+ return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
53
+ }
54
+ /**
55
+ * AWS Bedrock model provider implementation.
56
+ *
57
+ * Implements the Model interface for AWS Bedrock using the Converse Stream API.
58
+ * Supports streaming responses, tool use, prompt caching, and comprehensive error handling.
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * const provider = new BedrockModel({
63
+ * modelConfig: {
64
+ * modelId: 'global.anthropic.claude-sonnet-4-5-20250929-v1:0',
65
+ * maxTokens: 1024,
66
+ * temperature: 0.7
67
+ * },
68
+ * clientConfig: {
69
+ * region: 'us-west-2'
70
+ * }
71
+ * })
72
+ *
73
+ * const messages: Message[] = [
74
+ * { type: 'message', role: 'user', content: [{ type: 'textBlock', text: 'Hello!' }] }
75
+ * ]
76
+ *
77
+ * for await (const event of provider.stream(messages)) {
78
+ * if (event.type === 'modelContentBlockDeltaEvent' && event.delta.type === 'textDelta') {
79
+ * process.stdout.write(event.delta.text)
80
+ * }
81
+ * }
82
+ * ```
83
+ */
84
+ export class BedrockModel extends Model {
85
+ _config;
86
+ _client;
87
+ /**
88
+ * Creates a new BedrockModel instance.
89
+ *
90
+ * @param options - Optional configuration for model and client
91
+ *
92
+ * @example
93
+ * ```typescript
94
+ * // Minimal configuration with defaults
95
+ * const provider = new BedrockModel({
96
+ * region: 'us-west-2'
97
+ * })
98
+ *
99
+ * // With model configuration
100
+ * const provider = new BedrockModel({
101
+ * region: 'us-west-2',
102
+ * modelId: 'global.anthropic.claude-sonnet-4-5-20250929-v1:0',
103
+ * maxTokens: 2048,
104
+ * temperature: 0.8,
105
+ * cachePrompt: 'ephemeral'
106
+ * })
107
+ *
108
+ * // With client configuration
109
+ * const provider = new BedrockModel({
110
+ * region: 'us-east-1',
111
+ * clientConfig: {
112
+ * credentials: myCredentials
113
+ * }
114
+ * })
115
+ * ```
116
+ */
117
+ constructor(options) {
118
+ super();
119
+ const { region, clientConfig, ...modelConfig } = options ?? {};
120
+ // Initialize model config with default model ID if not provided
121
+ this._config = {
122
+ modelId: DEFAULT_BEDROCK_MODEL_ID,
123
+ ...modelConfig,
124
+ };
125
+ // Build user agent string (extend if provided, otherwise use SDK identifier)
126
+ const customUserAgent = clientConfig?.customUserAgent
127
+ ? `${clientConfig.customUserAgent} strands-agents-ts-sdk`
128
+ : 'strands-agents-ts-sdk';
129
+ // Initialize Bedrock Runtime client with custom user agent
130
+ this._client = new BedrockRuntimeClient({
131
+ ...(clientConfig ?? {}),
132
+ // region takes precedence over clientConfig
133
+ ...(region ? { region: region } : {}),
134
+ customUserAgent,
135
+ });
136
+ }
137
+ /**
138
+ * Updates the model configuration.
139
+ * Merges the provided configuration with existing settings.
140
+ *
141
+ * @param modelConfig - Configuration object with model-specific settings to update
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * // Update temperature and maxTokens
146
+ * provider.updateConfig({
147
+ * temperature: 0.9,
148
+ * maxTokens: 2048
149
+ * })
150
+ * ```
151
+ */
152
+ updateConfig(modelConfig) {
153
+ this._config = { ...this._config, ...modelConfig };
154
+ }
155
+ /**
156
+ * Retrieves the current model configuration.
157
+ *
158
+ * @returns The current configuration object
159
+ *
160
+ * @example
161
+ * ```typescript
162
+ * const config = provider.getConfig()
163
+ * console.log(config.modelId)
164
+ * ```
165
+ */
166
+ getConfig() {
167
+ return this._config;
168
+ }
169
+ /**
170
+ * Streams a conversation with the Bedrock model.
171
+ * Returns an async iterable that yields streaming events as they occur.
172
+ *
173
+ * @param messages - Array of conversation messages
174
+ * @param options - Optional streaming configuration
175
+ * @returns Async iterable of streaming events
176
+ *
177
+ * @throws \{ContextWindowOverflowError\} When input exceeds the model's context window
178
+ * @throws \{ModelThrottledError\} When Bedrock service throttles requests
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * const messages: Message[] = [
183
+ * { type: 'message', role: $1, content: [{ type: 'textBlock', text: 'What is 2+2?' }] }
184
+ * ]
185
+ *
186
+ * const options: StreamOptions = {
187
+ * systemPrompt: 'You are a helpful math assistant.',
188
+ * toolSpecs: [calculatorTool]
189
+ * }
190
+ *
191
+ * for await (const event of provider.stream(messages, options)) {
192
+ * if (event.type === 'modelContentBlockDeltaEvent') {
193
+ * console.log(event.delta)
194
+ * }
195
+ * }
196
+ * ```
197
+ */
198
+ async *stream(messages, options) {
199
+ try {
200
+ // Format the request for Bedrock
201
+ const request = this._formatRequest(messages, options);
202
+ if (this._config.stream !== false) {
203
+ // Create and send the command
204
+ const command = new ConverseStreamCommand(request);
205
+ const response = await this._client.send(command);
206
+ // Stream the response
207
+ if (response.stream) {
208
+ for await (const chunk of response.stream) {
209
+ // Map Bedrock events to SDK events
210
+ const events = this._mapStreamedBedrockEventToSDKEvent(chunk);
211
+ for (const event of events) {
212
+ yield event;
213
+ }
214
+ }
215
+ }
216
+ }
217
+ else {
218
+ const command = new ConverseCommand(request);
219
+ const response = await this._client.send(command);
220
+ for (const event of this._mapBedrockEventToSDKEvent(response)) {
221
+ yield event;
222
+ }
223
+ }
224
+ }
225
+ catch (error) {
226
+ const err = error;
227
+ // Check for context window overflow
228
+ if (BEDROCK_CONTEXT_WINDOW_OVERFLOW_MESSAGES.some((msg) => err.message.includes(msg))) {
229
+ throw new ContextWindowOverflowError(err.message);
230
+ }
231
+ // Re-throw other errors as-is
232
+ throw err;
233
+ }
234
+ }
235
+ /**
236
+ * Formats a request for the Bedrock Converse Stream API.
237
+ *
238
+ * @param messages - Conversation messages
239
+ * @param options - Stream options
240
+ * @returns Formatted Bedrock request
241
+ */
242
+ _formatRequest(messages, options) {
243
+ const request = {
244
+ modelId: this._config.modelId,
245
+ messages: this._formatMessages(messages),
246
+ };
247
+ // Add system prompt with optional caching
248
+ if (options?.systemPrompt !== undefined) {
249
+ if (typeof options.systemPrompt === 'string') {
250
+ // String path: apply cachePrompt config if set
251
+ const system = [{ text: options.systemPrompt }];
252
+ if (this._config.cachePrompt) {
253
+ system.push({ cachePoint: { type: this._config.cachePrompt } });
254
+ }
255
+ request.system = system;
256
+ }
257
+ else if (options.systemPrompt.length > 0) {
258
+ // Array path: use as-is, but warn if cachePrompt config is also set
259
+ if (this._config.cachePrompt) {
260
+ console.warn('cachePrompt config is ignored when systemPrompt is an array. Use explicit cache points in the array instead.');
261
+ }
262
+ request.system = options.systemPrompt.map((block) => this._formatContentBlock(block));
263
+ }
264
+ }
265
+ // Add tool configuration
266
+ if (options?.toolSpecs && options.toolSpecs.length > 0) {
267
+ const tools = options.toolSpecs.map((spec) => ({
268
+ toolSpec: {
269
+ name: spec.name,
270
+ description: spec.description,
271
+ inputSchema: { json: spec.inputSchema },
272
+ },
273
+ }));
274
+ if (this._config.cacheTools) {
275
+ tools.push({
276
+ cachePoint: { type: this._config.cacheTools },
277
+ });
278
+ }
279
+ const toolConfig = {
280
+ tools: tools,
281
+ };
282
+ if (options.toolChoice) {
283
+ toolConfig.toolChoice = options.toolChoice;
284
+ }
285
+ request.toolConfig = toolConfig;
286
+ }
287
+ // Add inference configuration
288
+ const inferenceConfig = {};
289
+ if (this._config.maxTokens !== undefined)
290
+ inferenceConfig.maxTokens = this._config.maxTokens;
291
+ if (this._config.temperature !== undefined)
292
+ inferenceConfig.temperature = this._config.temperature;
293
+ if (this._config.topP !== undefined)
294
+ inferenceConfig.topP = this._config.topP;
295
+ if (this._config.stopSequences !== undefined)
296
+ inferenceConfig.stopSequences = this._config.stopSequences;
297
+ if (Object.keys(inferenceConfig).length > 0) {
298
+ request.inferenceConfig = inferenceConfig;
299
+ }
300
+ // Add additional request fields
301
+ if (this._config.additionalRequestFields) {
302
+ request.additionalModelRequestFields = this._config.additionalRequestFields;
303
+ }
304
+ // Add additional response field paths
305
+ if (this._config.additionalResponseFieldPaths) {
306
+ request.additionalModelResponseFieldPaths = this._config.additionalResponseFieldPaths;
307
+ }
308
+ // Add additional args (spread them into the request for forward compatibility)
309
+ if (this._config.additionalArgs) {
310
+ Object.assign(request, this._config.additionalArgs);
311
+ }
312
+ return request;
313
+ }
314
+ /**
315
+ * Formats messages for Bedrock API.
316
+ *
317
+ * @param messages - SDK messages
318
+ * @returns Bedrock-formatted messages
319
+ */
320
+ _formatMessages(messages) {
321
+ return messages.map((message) => ({
322
+ role: message.role,
323
+ content: message.content.map((block) => this._formatContentBlock(block)),
324
+ }));
325
+ }
326
+ /**
327
+ * Determines whether to include the status field in tool results.
328
+ *
329
+ * Uses the includeToolResultStatus config option:
330
+ * - If explicitly true, always include status
331
+ * - If explicitly false, never include status
332
+ * - If 'auto' (default), check if model ID matches known patterns
333
+ *
334
+ * @returns True if status field should be included, false otherwise
335
+ */
336
+ _shouldIncludeToolResultStatus() {
337
+ const includeStatus = this._config.includeToolResultStatus ?? 'auto';
338
+ if (includeStatus === true)
339
+ return true;
340
+ if (includeStatus === false)
341
+ return false;
342
+ // Auto-detection mode: check if modelId contains any pattern
343
+ const shouldInclude = MODELS_INCLUDE_STATUS.some((pattern) => this._config.modelId?.includes(pattern));
344
+ // Log debug message for auto-detection
345
+ console.debug(`Auto-detected includeToolResultStatus=${shouldInclude} for model: ${this._config.modelId}`);
346
+ return shouldInclude;
347
+ }
348
+ /**
349
+ * Formats a content block for Bedrock API.
350
+ *
351
+ * @param block - SDK content block
352
+ * @returns Bedrock-formatted content block
353
+ */
354
+ _formatContentBlock(block) {
355
+ switch (block.type) {
356
+ case 'textBlock':
357
+ return { text: block.text };
358
+ case 'toolUseBlock':
359
+ return {
360
+ toolUse: {
361
+ toolUseId: block.toolUseId,
362
+ name: block.name,
363
+ input: block.input,
364
+ },
365
+ };
366
+ case 'toolResultBlock': {
367
+ const content = block.content.map((content) => {
368
+ switch (content.type) {
369
+ case 'toolResultTextContent':
370
+ return { text: content.text };
371
+ case 'toolResultJsonContent':
372
+ return { json: content.json };
373
+ }
374
+ });
375
+ return {
376
+ toolResult: {
377
+ toolUseId: block.toolUseId,
378
+ content,
379
+ ...(this._shouldIncludeToolResultStatus() && { status: block.status }),
380
+ },
381
+ };
382
+ }
383
+ case 'reasoningBlock': {
384
+ if (block.text) {
385
+ return {
386
+ reasoningContent: {
387
+ reasoningText: {
388
+ text: block.text,
389
+ signature: block.signature,
390
+ },
391
+ },
392
+ };
393
+ }
394
+ else if (block.redactedContent) {
395
+ return {
396
+ reasoningContent: {
397
+ redactedContent: block.redactedContent,
398
+ },
399
+ };
400
+ }
401
+ else {
402
+ throw Error("reasoning content format incorrect. Either 'text' or 'redactedContent' must be set.");
403
+ }
404
+ }
405
+ case 'cachePointBlock':
406
+ return { cachePoint: { type: block.cacheType } };
407
+ }
408
+ }
409
+ _mapBedrockEventToSDKEvent(event) {
410
+ const events = [];
411
+ // Message start
412
+ const output = ensureDefined(event.output, 'event.output');
413
+ const message = ensureDefined(output.message, 'output.message');
414
+ const role = ensureDefined(message.role, 'message.role');
415
+ events.push({
416
+ type: 'modelMessageStartEvent',
417
+ role,
418
+ });
419
+ // Match on content blocks
420
+ const blockHandlers = {
421
+ text: (textBlock, index) => {
422
+ events.push({ type: 'modelContentBlockStartEvent', contentBlockIndex: index });
423
+ events.push({
424
+ type: 'modelContentBlockDeltaEvent',
425
+ contentBlockIndex: index,
426
+ delta: { type: 'textDelta', text: textBlock },
427
+ });
428
+ events.push({ type: 'modelContentBlockStopEvent', contentBlockIndex: index });
429
+ },
430
+ toolUse: (block, index) => {
431
+ events.push({
432
+ type: 'modelContentBlockStartEvent',
433
+ contentBlockIndex: index,
434
+ start: {
435
+ type: 'toolUseStart',
436
+ name: ensureDefined(block.name, 'toolUse.name'),
437
+ toolUseId: ensureDefined(block.toolUseId, 'toolUse.toolUseId'),
438
+ },
439
+ });
440
+ events.push({
441
+ type: 'modelContentBlockDeltaEvent',
442
+ contentBlockIndex: index,
443
+ delta: { type: 'toolUseInputDelta', input: JSON.stringify(ensureDefined(block.input, 'toolUse.input')) },
444
+ });
445
+ events.push({ type: 'modelContentBlockStopEvent', contentBlockIndex: index });
446
+ },
447
+ reasoningContent: (block, index) => {
448
+ if (!block)
449
+ return;
450
+ events.push({ type: 'modelContentBlockStartEvent', contentBlockIndex: index });
451
+ const delta = { type: 'reasoningContentDelta' };
452
+ if (block.reasoningText) {
453
+ delta.text = ensureDefined(block.reasoningText.text, 'reasoningText.text');
454
+ if (block.reasoningText.signature)
455
+ delta.signature = block.reasoningText.signature;
456
+ }
457
+ else if (block.redactedContent) {
458
+ delta.redactedContent = block.redactedContent;
459
+ }
460
+ if (Object.keys(delta).length > 1) {
461
+ events.push({ type: 'modelContentBlockDeltaEvent', contentBlockIndex: index, delta });
462
+ }
463
+ events.push({ type: 'modelContentBlockStopEvent', contentBlockIndex: index });
464
+ },
465
+ };
466
+ const content = ensureDefined(message.content, 'message.content');
467
+ content.forEach((block, index) => {
468
+ for (const key in block) {
469
+ if (key in blockHandlers) {
470
+ const handlerKey = key;
471
+ // @ts-expect-error - We know the value type corresponds to the handler key.
472
+ blockHandlers[handlerKey](block[handlerKey], index);
473
+ }
474
+ else {
475
+ console.warn(`Skipping unsupported block key: ${key}`);
476
+ }
477
+ }
478
+ });
479
+ const stopReasonRaw = ensureDefined(event.stopReason, 'event.stopReason');
480
+ events.push({
481
+ type: 'modelMessageStopEvent',
482
+ stopReason: this._transformStopReason(stopReasonRaw, event),
483
+ });
484
+ const usage = ensureDefined(event.usage, 'output.usage');
485
+ const metadataEvent = {
486
+ type: 'modelMetadataEvent',
487
+ usage: {
488
+ inputTokens: ensureDefined(usage.inputTokens, 'usage.inputTokens'),
489
+ outputTokens: ensureDefined(usage.outputTokens, 'usage.outputTokens'),
490
+ totalTokens: ensureDefined(usage.totalTokens, 'usage.totalTokens'),
491
+ },
492
+ };
493
+ if (event.metrics) {
494
+ metadataEvent.metrics = {
495
+ latencyMs: ensureDefined(event.metrics.latencyMs, 'metrics.latencyMs'),
496
+ };
497
+ }
498
+ events.push(metadataEvent);
499
+ return events;
500
+ }
501
+ /**
502
+ * Maps a Bedrock event to SDK streaming events.
503
+ *
504
+ * @param chunk - Bedrock event chunk
505
+ * @returns Array of SDK streaming events
506
+ */
507
+ _mapStreamedBedrockEventToSDKEvent(chunk) {
508
+ const events = [];
509
+ // Extract the event type key
510
+ const eventType = ensureDefined(Object.keys(chunk)[0], 'eventType');
511
+ const eventData = chunk[eventType];
512
+ switch (eventType) {
513
+ case 'messageStart': {
514
+ const data = eventData;
515
+ events.push({
516
+ type: 'modelMessageStartEvent',
517
+ role: ensureDefined(data.role, 'messageStart.role'),
518
+ });
519
+ break;
520
+ }
521
+ case 'contentBlockStart': {
522
+ const data = eventData;
523
+ const event = {
524
+ type: 'modelContentBlockStartEvent',
525
+ contentBlockIndex: ensureDefined(data.contentBlockIndex, 'contentBlockStart.contentBlockIndex'),
526
+ };
527
+ if (data.start?.toolUse) {
528
+ const toolUse = data.start.toolUse;
529
+ event.start = {
530
+ type: 'toolUseStart',
531
+ name: ensureDefined(toolUse.name, 'toolUse.name'),
532
+ toolUseId: ensureDefined(toolUse.toolUseId, 'toolUse.toolUseId'),
533
+ };
534
+ }
535
+ events.push(event);
536
+ break;
537
+ }
538
+ case 'contentBlockDelta': {
539
+ const data = eventData;
540
+ const contentBlockIndex = ensureDefined(data.contentBlockIndex, 'contentBlockDelta.contentBlockIndex');
541
+ const delta = ensureDefined(data.delta, 'contentBlockDelta.delta');
542
+ const deltaHandlers = {
543
+ text: (textValue) => {
544
+ events.push({
545
+ type: 'modelContentBlockDeltaEvent',
546
+ contentBlockIndex,
547
+ delta: { type: 'textDelta', text: textValue },
548
+ });
549
+ },
550
+ toolUse: (toolUse) => {
551
+ if (!toolUse?.input)
552
+ return;
553
+ events.push({
554
+ type: 'modelContentBlockDeltaEvent',
555
+ contentBlockIndex,
556
+ delta: { type: 'toolUseInputDelta', input: toolUse.input },
557
+ });
558
+ },
559
+ reasoningContent: (reasoning) => {
560
+ if (!reasoning)
561
+ return;
562
+ const reasoningDelta = { type: 'reasoningContentDelta' };
563
+ if (reasoning.text)
564
+ reasoningDelta.text = reasoning.text;
565
+ if (reasoning.signature)
566
+ reasoningDelta.signature = reasoning.signature;
567
+ if (reasoning.redactedContent)
568
+ reasoningDelta.redactedContent = reasoning.redactedContent;
569
+ if (Object.keys(reasoningDelta).length > 1) {
570
+ events.push({ type: 'modelContentBlockDeltaEvent', contentBlockIndex, delta: reasoningDelta });
571
+ }
572
+ },
573
+ };
574
+ for (const key in delta) {
575
+ if (key in deltaHandlers) {
576
+ const handlerKey = key;
577
+ // @ts-expect-error - We know the value type corresponds to the handler key.
578
+ deltaHandlers[handlerKey](delta[handlerKey]);
579
+ }
580
+ else {
581
+ console.warn(`Skipping unsupported delta key: ${key}`);
582
+ }
583
+ }
584
+ break;
585
+ }
586
+ case 'contentBlockStop': {
587
+ const data = eventData;
588
+ events.push({
589
+ type: 'modelContentBlockStopEvent',
590
+ contentBlockIndex: ensureDefined(data.contentBlockIndex, 'contentBlockStop.contentBlockIndex'),
591
+ });
592
+ break;
593
+ }
594
+ case 'messageStop': {
595
+ const data = eventData;
596
+ const event = {
597
+ type: 'modelMessageStopEvent',
598
+ };
599
+ const stopReasonRaw = ensureDefined(data.stopReason, 'messageStop.stopReason');
600
+ event.stopReason = this._transformStopReason(stopReasonRaw, data);
601
+ if (data.additionalModelResponseFields) {
602
+ event.additionalModelResponseFields = data.additionalModelResponseFields;
603
+ }
604
+ events.push(event);
605
+ break;
606
+ }
607
+ case 'metadata': {
608
+ const data = eventData;
609
+ const event = {
610
+ type: 'modelMetadataEvent',
611
+ };
612
+ if (data.usage) {
613
+ const usage = data.usage;
614
+ const usageInfo = {
615
+ inputTokens: ensureDefined(usage.inputTokens, 'usage.inputTokens'),
616
+ outputTokens: ensureDefined(usage.outputTokens, 'usage.outputTokens'),
617
+ totalTokens: ensureDefined(usage.totalTokens, 'usage.totalTokens'),
618
+ };
619
+ if (usage.cacheReadInputTokens !== undefined) {
620
+ usageInfo.cacheReadInputTokens = usage.cacheReadInputTokens;
621
+ }
622
+ if (usage.cacheWriteInputTokens !== undefined) {
623
+ usageInfo.cacheWriteInputTokens = usage.cacheWriteInputTokens;
624
+ }
625
+ event.usage = usageInfo;
626
+ }
627
+ if (data.metrics) {
628
+ event.metrics = {
629
+ latencyMs: ensureDefined(data.metrics.latencyMs, 'metrics.latencyMs'),
630
+ };
631
+ }
632
+ if (data.trace) {
633
+ event.trace = data.trace;
634
+ }
635
+ events.push(event);
636
+ break;
637
+ }
638
+ case 'internalServerException':
639
+ case 'modelStreamErrorException':
640
+ case 'serviceUnavailableException':
641
+ case 'validationException':
642
+ case 'throttlingException': {
643
+ throw eventData;
644
+ }
645
+ default:
646
+ // Log warning for unsupported event types (for forward compatibility)
647
+ console.warn(`Unsupported Bedrock event type: ${eventType}`);
648
+ break;
649
+ }
650
+ return events;
651
+ }
652
+ /**
653
+ * Transforms a Bedrock stop reason into the SDK's format.
654
+ *
655
+ * @param stopReasonRaw - The raw stop reason string from Bedrock.
656
+ * @param event - The full event output, used to check for tool_use adjustments.
657
+ * @returns The transformed stop reason string.
658
+ */
659
+ _transformStopReason(stopReasonRaw, event) {
660
+ let mappedStopReason;
661
+ if (stopReasonRaw in STOP_REASON_MAP) {
662
+ mappedStopReason = STOP_REASON_MAP[stopReasonRaw];
663
+ }
664
+ else {
665
+ console.warn(`Unknown stop reason: "${stopReasonRaw}". Converting to camelCase: "${snakeToCamel(stopReasonRaw)}"`);
666
+ mappedStopReason = snakeToCamel(stopReasonRaw);
667
+ }
668
+ // Adjust for tool_use, which is sometimes incorrectly reported as end_turn
669
+ if (mappedStopReason === 'endTurn' &&
670
+ event &&
671
+ 'output' in event &&
672
+ event.output?.message?.content?.some((block) => 'toolUse' in block)) {
673
+ mappedStopReason = 'toolUse';
674
+ console.warn(`Adjusting stop reason from 'end_turn' to 'tool_use' due to tool use in content blocks.`);
675
+ }
676
+ return mappedStopReason;
677
+ }
678
+ }
679
+ //# sourceMappingURL=bedrock.js.map