@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,804 @@
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, ConverseCommand, ConverseStreamCommand, DocumentFormat, ImageFormat, } from '@aws-sdk/client-bedrock-runtime';
10
+ import { Model } from '../models/model.js';
11
+ import { ContextWindowOverflowError } from '../errors.js';
12
+ import { ensureDefined } from '../types/validation.js';
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
+ let errorMessage;
227
+ if (error instanceof Error) {
228
+ errorMessage = error.message;
229
+ }
230
+ else if (typeof error === 'string') {
231
+ errorMessage = error;
232
+ }
233
+ else {
234
+ errorMessage = '';
235
+ }
236
+ // Check for context window overflow
237
+ if (BEDROCK_CONTEXT_WINDOW_OVERFLOW_MESSAGES.some((msg) => errorMessage.includes(msg))) {
238
+ throw new ContextWindowOverflowError(errorMessage);
239
+ }
240
+ // Re-throw other errors as-is
241
+ throw error;
242
+ }
243
+ }
244
+ /**
245
+ * Formats a request for the Bedrock Converse Stream API.
246
+ *
247
+ * @param messages - Conversation messages
248
+ * @param options - Stream options
249
+ * @returns Formatted Bedrock request
250
+ */
251
+ _formatRequest(messages, options) {
252
+ const request = {
253
+ modelId: this._config.modelId,
254
+ messages: this._formatMessages(messages),
255
+ };
256
+ // Add system prompt with optional caching
257
+ if (options?.systemPrompt !== undefined) {
258
+ if (typeof options.systemPrompt === 'string') {
259
+ // String path: apply cachePrompt config if set
260
+ const system = [{ text: options.systemPrompt }];
261
+ if (this._config.cachePrompt) {
262
+ system.push({ cachePoint: { type: this._config.cachePrompt } });
263
+ }
264
+ request.system = system;
265
+ }
266
+ else if (options.systemPrompt.length > 0) {
267
+ // Array path: use as-is, but warn if cachePrompt config is also set
268
+ if (this._config.cachePrompt) {
269
+ console.warn('cachePrompt config is ignored when systemPrompt is an array. Use explicit cache points in the array instead.');
270
+ }
271
+ request.system = options.systemPrompt.map((block) => this._formatContentBlock(block));
272
+ }
273
+ }
274
+ // Add tool configuration
275
+ if (options?.toolSpecs && options.toolSpecs.length > 0) {
276
+ const tools = options.toolSpecs.map((spec) => ({
277
+ toolSpec: {
278
+ name: spec.name,
279
+ description: spec.description,
280
+ inputSchema: { json: spec.inputSchema },
281
+ },
282
+ }));
283
+ if (this._config.cacheTools) {
284
+ tools.push({
285
+ cachePoint: { type: this._config.cacheTools },
286
+ });
287
+ }
288
+ const toolConfig = {
289
+ tools: tools,
290
+ };
291
+ if (options.toolChoice) {
292
+ toolConfig.toolChoice = options.toolChoice;
293
+ }
294
+ request.toolConfig = toolConfig;
295
+ }
296
+ // Add inference configuration
297
+ const inferenceConfig = {};
298
+ if (this._config.maxTokens !== undefined)
299
+ inferenceConfig.maxTokens = this._config.maxTokens;
300
+ if (this._config.temperature !== undefined)
301
+ inferenceConfig.temperature = this._config.temperature;
302
+ if (this._config.topP !== undefined)
303
+ inferenceConfig.topP = this._config.topP;
304
+ if (this._config.stopSequences !== undefined)
305
+ inferenceConfig.stopSequences = this._config.stopSequences;
306
+ if (Object.keys(inferenceConfig).length > 0) {
307
+ request.inferenceConfig = inferenceConfig;
308
+ }
309
+ // Add additional request fields
310
+ if (this._config.additionalRequestFields) {
311
+ request.additionalModelRequestFields = this._config.additionalRequestFields;
312
+ }
313
+ // Add additional response field paths
314
+ if (this._config.additionalResponseFieldPaths) {
315
+ request.additionalModelResponseFieldPaths = this._config.additionalResponseFieldPaths;
316
+ }
317
+ // Add additional args (spread them into the request for forward compatibility)
318
+ if (this._config.additionalArgs) {
319
+ Object.assign(request, this._config.additionalArgs);
320
+ }
321
+ return request;
322
+ }
323
+ /**
324
+ * Formats messages for Bedrock API.
325
+ *
326
+ * @param messages - SDK messages
327
+ * @returns Bedrock-formatted messages
328
+ */
329
+ _formatMessages(messages) {
330
+ return messages.reduce((acc, message) => {
331
+ const content = message.content
332
+ .map((block) => this._formatContentBlock(block))
333
+ .filter((block) => block !== undefined);
334
+ if (content.length > 0) {
335
+ acc.push({ role: message.role, content });
336
+ }
337
+ return acc;
338
+ }, []);
339
+ }
340
+ /**
341
+ * Determines whether to include the status field in tool results.
342
+ *
343
+ * Uses the includeToolResultStatus config option:
344
+ * - If explicitly true, always include status
345
+ * - If explicitly false, never include status
346
+ * - If 'auto' (default), check if model ID matches known patterns
347
+ *
348
+ * @returns True if status field should be included, false otherwise
349
+ */
350
+ _shouldIncludeToolResultStatus() {
351
+ const includeStatus = this._config.includeToolResultStatus ?? 'auto';
352
+ if (includeStatus === true)
353
+ return true;
354
+ if (includeStatus === false)
355
+ return false;
356
+ // Auto-detection mode: check if modelId contains any pattern
357
+ const shouldInclude = MODELS_INCLUDE_STATUS.some((pattern) => this._config.modelId?.includes(pattern));
358
+ // Log debug message for auto-detection
359
+ console.debug(`Auto-detected includeToolResultStatus=${shouldInclude} for model: ${this._config.modelId}`);
360
+ return shouldInclude;
361
+ }
362
+ /**
363
+ * Formats a content block for Bedrock API.
364
+ *
365
+ * @param block - SDK content block
366
+ * @returns Bedrock-formatted content block
367
+ */
368
+ _formatContentBlock(block) {
369
+ switch (block.type) {
370
+ case 'textBlock':
371
+ return { text: block.text };
372
+ case 'toolUseBlock':
373
+ return {
374
+ toolUse: {
375
+ toolUseId: block.toolUseId,
376
+ name: block.name,
377
+ input: block.input,
378
+ },
379
+ };
380
+ case 'toolResultBlock': {
381
+ const content = block.content.map((content) => {
382
+ switch (content.type) {
383
+ case 'textBlock':
384
+ return { text: content.text };
385
+ case 'jsonBlock':
386
+ return { json: content.json };
387
+ }
388
+ });
389
+ return {
390
+ toolResult: {
391
+ toolUseId: block.toolUseId,
392
+ content,
393
+ ...(this._shouldIncludeToolResultStatus() && { status: block.status }),
394
+ },
395
+ };
396
+ }
397
+ case 'reasoningBlock': {
398
+ if (block.text) {
399
+ return {
400
+ reasoningContent: {
401
+ reasoningText: {
402
+ text: block.text,
403
+ signature: block.signature,
404
+ },
405
+ },
406
+ };
407
+ }
408
+ else if (block.redactedContent) {
409
+ return {
410
+ reasoningContent: {
411
+ redactedContent: block.redactedContent,
412
+ },
413
+ };
414
+ }
415
+ else {
416
+ throw Error("reasoning content format incorrect. Either 'text' or 'redactedContent' must be set.");
417
+ }
418
+ }
419
+ case 'cachePointBlock':
420
+ return { cachePoint: { type: block.cacheType } };
421
+ case 'imageBlock':
422
+ return {
423
+ image: {
424
+ format: block.format,
425
+ source: this._formatMediaSource(block.source),
426
+ },
427
+ };
428
+ case 'videoBlock':
429
+ return {
430
+ video: {
431
+ format: block.format === '3gp' ? 'three_gp' : block.format,
432
+ source: this._formatMediaSource(block.source),
433
+ },
434
+ };
435
+ case 'documentBlock':
436
+ return {
437
+ document: {
438
+ name: block.name,
439
+ format: block.format,
440
+ source: this._formatDocumentSource(block.source),
441
+ ...(block.citations && { citations: block.citations }),
442
+ ...(block.context && { context: block.context }),
443
+ },
444
+ };
445
+ case 'guardContentBlock': {
446
+ if (block.text) {
447
+ return {
448
+ guardContent: {
449
+ text: {
450
+ text: block.text.text,
451
+ qualifiers: block.text.qualifiers,
452
+ },
453
+ },
454
+ };
455
+ }
456
+ else if (block.image) {
457
+ return {
458
+ guardContent: {
459
+ image: {
460
+ format: block.image.format,
461
+ source: { bytes: block.image.source.bytes },
462
+ },
463
+ },
464
+ };
465
+ }
466
+ else {
467
+ throw new Error('guardContent must have either text or image');
468
+ }
469
+ }
470
+ }
471
+ }
472
+ /**
473
+ * Format media source (image/video) for Bedrock API.
474
+ * Handles bytes, S3 locations, and s3:// URLs.
475
+ *
476
+ * @param source - Media source
477
+ * @returns Formatted source for Bedrock API
478
+ */
479
+ _formatMediaSource(source) {
480
+ switch (source.type) {
481
+ case 'imageSourceBytes':
482
+ case 'videoSourceBytes':
483
+ return { bytes: source.bytes };
484
+ case 'imageSourceUrl':
485
+ // Check if URL is actually an S3 URI
486
+ if (source.url.startsWith('s3://')) {
487
+ return {
488
+ s3Location: {
489
+ uri: source.url,
490
+ },
491
+ };
492
+ }
493
+ console.warn('Ignoring imageSourceUrl content block as its not supported by bedrock');
494
+ return;
495
+ case 'imageSourceS3Location':
496
+ case 'videoSourceS3Location':
497
+ return {
498
+ s3Location: {
499
+ uri: source.s3Location.uri,
500
+ ...(source.s3Location.bucketOwner && { bucketOwner: source.s3Location.bucketOwner }),
501
+ },
502
+ };
503
+ default:
504
+ throw new Error('Invalid media source');
505
+ }
506
+ }
507
+ /**
508
+ * Format document source for Bedrock API.
509
+ * Handles bytes, text, content, and S3 locations.
510
+ * Note: Bedrock API only accepts bytes, content, or s3Location - text is converted to bytes.
511
+ *
512
+ * @param source - Document source
513
+ * @returns Formatted source for Bedrock API
514
+ */
515
+ _formatDocumentSource(source) {
516
+ switch (source.type) {
517
+ case 'documentSourceBytes':
518
+ return {
519
+ bytes: source.bytes,
520
+ };
521
+ case 'documentSourceText': {
522
+ // Convert text to bytes - Bedrock API doesn't accept text directly
523
+ const encoder = new TextEncoder();
524
+ return { bytes: encoder.encode(source.text) };
525
+ }
526
+ case 'documentSourceContentBlock':
527
+ return {
528
+ content: source.content.map((block) => ({
529
+ text: block.text,
530
+ })),
531
+ };
532
+ case 'documentSourceS3Location':
533
+ return {
534
+ s3Location: {
535
+ uri: source.s3Location.uri,
536
+ ...(source.s3Location.bucketOwner && { bucketOwner: source.s3Location.bucketOwner }),
537
+ },
538
+ };
539
+ default:
540
+ throw new Error('Invalid document source');
541
+ }
542
+ }
543
+ _mapBedrockEventToSDKEvent(event) {
544
+ const events = [];
545
+ // Message start
546
+ const output = ensureDefined(event.output, 'event.output');
547
+ const message = ensureDefined(output.message, 'output.message');
548
+ const role = ensureDefined(message.role, 'message.role');
549
+ events.push({
550
+ type: 'modelMessageStartEvent',
551
+ role,
552
+ });
553
+ // Match on content blocks
554
+ const blockHandlers = {
555
+ text: (textBlock) => {
556
+ events.push({ type: 'modelContentBlockStartEvent' });
557
+ events.push({
558
+ type: 'modelContentBlockDeltaEvent',
559
+ delta: { type: 'textDelta', text: textBlock },
560
+ });
561
+ events.push({ type: 'modelContentBlockStopEvent' });
562
+ },
563
+ toolUse: (block) => {
564
+ events.push({
565
+ type: 'modelContentBlockStartEvent',
566
+ start: {
567
+ type: 'toolUseStart',
568
+ name: ensureDefined(block.name, 'toolUse.name'),
569
+ toolUseId: ensureDefined(block.toolUseId, 'toolUse.toolUseId'),
570
+ },
571
+ });
572
+ events.push({
573
+ type: 'modelContentBlockDeltaEvent',
574
+ delta: { type: 'toolUseInputDelta', input: JSON.stringify(ensureDefined(block.input, 'toolUse.input')) },
575
+ });
576
+ events.push({ type: 'modelContentBlockStopEvent' });
577
+ },
578
+ reasoningContent: (block) => {
579
+ if (!block)
580
+ return;
581
+ events.push({ type: 'modelContentBlockStartEvent' });
582
+ const delta = { type: 'reasoningContentDelta' };
583
+ if (block.reasoningText) {
584
+ delta.text = ensureDefined(block.reasoningText.text, 'reasoningText.text');
585
+ if (block.reasoningText.signature)
586
+ delta.signature = block.reasoningText.signature;
587
+ }
588
+ else if (block.redactedContent) {
589
+ delta.redactedContent = block.redactedContent;
590
+ }
591
+ if (Object.keys(delta).length > 1) {
592
+ events.push({ type: 'modelContentBlockDeltaEvent', delta });
593
+ }
594
+ events.push({ type: 'modelContentBlockStopEvent' });
595
+ },
596
+ };
597
+ const content = ensureDefined(message.content, 'message.content');
598
+ content.forEach((block) => {
599
+ for (const key in block) {
600
+ if (key in blockHandlers) {
601
+ const handlerKey = key;
602
+ // @ts-expect-error - We know the value type corresponds to the handler key.
603
+ blockHandlers[handlerKey](block[handlerKey]);
604
+ }
605
+ else {
606
+ console.warn(`Skipping unsupported block key: ${key}`);
607
+ }
608
+ }
609
+ });
610
+ const stopReasonRaw = ensureDefined(event.stopReason, 'event.stopReason');
611
+ events.push({
612
+ type: 'modelMessageStopEvent',
613
+ stopReason: this._transformStopReason(stopReasonRaw, event),
614
+ });
615
+ const usage = ensureDefined(event.usage, 'output.usage');
616
+ const metadataEvent = {
617
+ type: 'modelMetadataEvent',
618
+ usage: {
619
+ inputTokens: ensureDefined(usage.inputTokens, 'usage.inputTokens'),
620
+ outputTokens: ensureDefined(usage.outputTokens, 'usage.outputTokens'),
621
+ totalTokens: ensureDefined(usage.totalTokens, 'usage.totalTokens'),
622
+ },
623
+ };
624
+ if (event.metrics) {
625
+ metadataEvent.metrics = {
626
+ latencyMs: ensureDefined(event.metrics.latencyMs, 'metrics.latencyMs'),
627
+ };
628
+ }
629
+ events.push(metadataEvent);
630
+ return events;
631
+ }
632
+ /**
633
+ * Maps a Bedrock event to SDK streaming events.
634
+ *
635
+ * @param chunk - Bedrock event chunk
636
+ * @returns Array of SDK streaming events
637
+ */
638
+ _mapStreamedBedrockEventToSDKEvent(chunk) {
639
+ const events = [];
640
+ // Extract the event type key
641
+ const eventType = ensureDefined(Object.keys(chunk)[0], 'eventType');
642
+ const eventData = chunk[eventType];
643
+ switch (eventType) {
644
+ case 'messageStart': {
645
+ const data = eventData;
646
+ events.push({
647
+ type: 'modelMessageStartEvent',
648
+ role: ensureDefined(data.role, 'messageStart.role'),
649
+ });
650
+ break;
651
+ }
652
+ case 'contentBlockStart': {
653
+ const data = eventData;
654
+ const event = {
655
+ type: 'modelContentBlockStartEvent',
656
+ };
657
+ if (data.start?.toolUse) {
658
+ const toolUse = data.start.toolUse;
659
+ event.start = {
660
+ type: 'toolUseStart',
661
+ name: ensureDefined(toolUse.name, 'toolUse.name'),
662
+ toolUseId: ensureDefined(toolUse.toolUseId, 'toolUse.toolUseId'),
663
+ };
664
+ }
665
+ events.push(event);
666
+ break;
667
+ }
668
+ case 'contentBlockDelta': {
669
+ const data = eventData;
670
+ const delta = ensureDefined(data.delta, 'contentBlockDelta.delta');
671
+ const deltaHandlers = {
672
+ text: (textValue) => {
673
+ events.push({
674
+ type: 'modelContentBlockDeltaEvent',
675
+ delta: { type: 'textDelta', text: textValue },
676
+ });
677
+ },
678
+ toolUse: (toolUse) => {
679
+ if (!toolUse?.input)
680
+ return;
681
+ events.push({
682
+ type: 'modelContentBlockDeltaEvent',
683
+ delta: { type: 'toolUseInputDelta', input: toolUse.input },
684
+ });
685
+ },
686
+ reasoningContent: (reasoning) => {
687
+ if (!reasoning)
688
+ return;
689
+ const reasoningDelta = { type: 'reasoningContentDelta' };
690
+ if (reasoning.text)
691
+ reasoningDelta.text = reasoning.text;
692
+ if (reasoning.signature)
693
+ reasoningDelta.signature = reasoning.signature;
694
+ if (reasoning.redactedContent)
695
+ reasoningDelta.redactedContent = reasoning.redactedContent;
696
+ if (Object.keys(reasoningDelta).length > 1) {
697
+ events.push({ type: 'modelContentBlockDeltaEvent', delta: reasoningDelta });
698
+ }
699
+ },
700
+ };
701
+ for (const key in delta) {
702
+ if (key in deltaHandlers) {
703
+ const handlerKey = key;
704
+ // @ts-expect-error - We know the value type corresponds to the handler key.
705
+ deltaHandlers[handlerKey](delta[handlerKey]);
706
+ }
707
+ else {
708
+ console.warn(`Skipping unsupported delta key: ${key}`);
709
+ }
710
+ }
711
+ break;
712
+ }
713
+ case 'contentBlockStop': {
714
+ events.push({
715
+ type: 'modelContentBlockStopEvent',
716
+ });
717
+ break;
718
+ }
719
+ case 'messageStop': {
720
+ const data = eventData;
721
+ const stopReasonRaw = ensureDefined(data.stopReason, 'messageStop.stopReason');
722
+ const event = {
723
+ type: 'modelMessageStopEvent',
724
+ stopReason: this._transformStopReason(stopReasonRaw, data),
725
+ };
726
+ if (data.additionalModelResponseFields) {
727
+ event.additionalModelResponseFields = data.additionalModelResponseFields;
728
+ }
729
+ events.push(event);
730
+ break;
731
+ }
732
+ case 'metadata': {
733
+ const data = eventData;
734
+ const event = {
735
+ type: 'modelMetadataEvent',
736
+ };
737
+ if (data.usage) {
738
+ const usage = data.usage;
739
+ const usageInfo = {
740
+ inputTokens: ensureDefined(usage.inputTokens, 'usage.inputTokens'),
741
+ outputTokens: ensureDefined(usage.outputTokens, 'usage.outputTokens'),
742
+ totalTokens: ensureDefined(usage.totalTokens, 'usage.totalTokens'),
743
+ };
744
+ if (usage.cacheReadInputTokens !== undefined) {
745
+ usageInfo.cacheReadInputTokens = usage.cacheReadInputTokens;
746
+ }
747
+ if (usage.cacheWriteInputTokens !== undefined) {
748
+ usageInfo.cacheWriteInputTokens = usage.cacheWriteInputTokens;
749
+ }
750
+ event.usage = usageInfo;
751
+ }
752
+ if (data.metrics) {
753
+ event.metrics = {
754
+ latencyMs: ensureDefined(data.metrics.latencyMs, 'metrics.latencyMs'),
755
+ };
756
+ }
757
+ if (data.trace) {
758
+ event.trace = data.trace;
759
+ }
760
+ events.push(event);
761
+ break;
762
+ }
763
+ case 'internalServerException':
764
+ case 'modelStreamErrorException':
765
+ case 'serviceUnavailableException':
766
+ case 'validationException':
767
+ case 'throttlingException': {
768
+ throw eventData;
769
+ }
770
+ default:
771
+ // Log warning for unsupported event types (for forward compatibility)
772
+ console.warn(`Unsupported Bedrock event type: ${eventType}`);
773
+ break;
774
+ }
775
+ return events;
776
+ }
777
+ /**
778
+ * Transforms a Bedrock stop reason into the SDK's format.
779
+ *
780
+ * @param stopReasonRaw - The raw stop reason string from Bedrock.
781
+ * @param event - The full event output, used to check for tool_use adjustments.
782
+ * @returns The transformed stop reason string.
783
+ */
784
+ _transformStopReason(stopReasonRaw, event) {
785
+ let mappedStopReason;
786
+ if (stopReasonRaw in STOP_REASON_MAP) {
787
+ mappedStopReason = STOP_REASON_MAP[stopReasonRaw];
788
+ }
789
+ else {
790
+ console.warn(`Unknown stop reason: "${stopReasonRaw}". Converting to camelCase: "${snakeToCamel(stopReasonRaw)}"`);
791
+ mappedStopReason = snakeToCamel(stopReasonRaw);
792
+ }
793
+ // Adjust for tool_use, which is sometimes incorrectly reported as end_turn
794
+ if (mappedStopReason === 'endTurn' &&
795
+ event &&
796
+ 'output' in event &&
797
+ event.output?.message?.content?.some((block) => 'toolUse' in block)) {
798
+ mappedStopReason = 'toolUse';
799
+ console.warn(`Adjusting stop reason from 'end_turn' to 'tool_use' due to tool use in content blocks.`);
800
+ }
801
+ return mappedStopReason;
802
+ }
803
+ }
804
+ //# sourceMappingURL=bedrock.js.map