@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,625 @@
1
+ /**
2
+ * OpenAI model provider implementation.
3
+ *
4
+ * This module provides integration with OpenAI's Chat Completions API,
5
+ * supporting streaming responses, tool use, and configurable model parameters.
6
+ *
7
+ * @see https://platform.openai.com/docs/api-reference/chat/create
8
+ */
9
+ import OpenAI, {} from 'openai';
10
+ import { Model } from '../models/model';
11
+ import { ContextWindowOverflowError } from '../errors';
12
+ /**
13
+ * Error message patterns that indicate context window overflow.
14
+ * Used to detect when input exceeds the model's context window.
15
+ *
16
+ * @see https://platform.openai.com/docs/guides/error-codes
17
+ */
18
+ const OPENAI_CONTEXT_WINDOW_OVERFLOW_PATTERNS = [
19
+ 'maximum context length',
20
+ 'context_length_exceeded',
21
+ 'too many tokens',
22
+ 'context length',
23
+ ];
24
+ /**
25
+ * OpenAI model provider implementation.
26
+ *
27
+ * Implements the Model interface for OpenAI using the Chat Completions API.
28
+ * Supports streaming responses, tool use, and comprehensive configuration.
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * const provider = new OpenAIModel({
33
+ * apiKey: 'sk-...',
34
+ * modelId: 'gpt-4o',
35
+ * temperature: 0.7,
36
+ * maxTokens: 1024
37
+ * })
38
+ *
39
+ * const messages: Message[] = [
40
+ * { role: 'user', content: [{ type: 'textBlock', text: 'Hello!' }] }
41
+ * ]
42
+ *
43
+ * for await (const event of provider.stream(messages)) {
44
+ * if (event.type === 'modelContentBlockDeltaEvent' && event.delta.type === 'textDelta') {
45
+ * process.stdout.write(event.delta.text)
46
+ * }
47
+ * }
48
+ * ```
49
+ */
50
+ export class OpenAIModel extends Model {
51
+ _config;
52
+ _client;
53
+ /**
54
+ * Creates a new OpenAIModel instance.
55
+ *
56
+ * @param options - Configuration for model and client (modelId is required)
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * // Minimal configuration with API key and model ID
61
+ * const provider = new OpenAIModel({
62
+ * modelId: 'gpt-4o',
63
+ * apiKey: 'sk-...'
64
+ * })
65
+ *
66
+ * // With additional model configuration
67
+ * const provider = new OpenAIModel({
68
+ * modelId: 'gpt-4o',
69
+ * apiKey: 'sk-...',
70
+ * temperature: 0.8,
71
+ * maxTokens: 2048
72
+ * })
73
+ *
74
+ * // Using environment variable for API key
75
+ * const provider = new OpenAIModel({
76
+ * modelId: 'gpt-3.5-turbo'
77
+ * })
78
+ *
79
+ * // Using a pre-configured client instance
80
+ * const client = new OpenAI({ apiKey: 'sk-...', timeout: 60000 })
81
+ * const provider = new OpenAIModel({
82
+ * modelId: 'gpt-4o',
83
+ * client
84
+ * })
85
+ * ```
86
+ */
87
+ constructor(options) {
88
+ super();
89
+ const { apiKey, client, clientConfig, ...modelConfig } = options;
90
+ // Initialize model config
91
+ this._config = modelConfig;
92
+ // Use provided client or create a new one
93
+ if (client) {
94
+ this._client = client;
95
+ }
96
+ else {
97
+ // Check if API key is available when creating a new client
98
+ // In browsers, apiKey must be provided directly
99
+ // In Node.js, can use OPENAI_API_KEY environment variable as fallback
100
+ const hasEnvKey = typeof process !== 'undefined' && typeof process.env !== 'undefined' && process.env.OPENAI_API_KEY;
101
+ if (!apiKey && !hasEnvKey) {
102
+ throw new Error("OpenAI API key is required. Provide it via the 'apiKey' option or set the OPENAI_API_KEY environment variable.");
103
+ }
104
+ // Initialize OpenAI client
105
+ // Only include apiKey if explicitly provided, otherwise let client use env var
106
+ this._client = new OpenAI({
107
+ ...(apiKey ? { apiKey } : {}),
108
+ ...clientConfig,
109
+ });
110
+ }
111
+ }
112
+ /**
113
+ * Updates the model configuration.
114
+ * Merges the provided configuration with existing settings.
115
+ *
116
+ * @param modelConfig - Configuration object with model-specific settings to update
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * // Update temperature and maxTokens
121
+ * provider.updateConfig({
122
+ * temperature: 0.9,
123
+ * maxTokens: 2048
124
+ * })
125
+ * ```
126
+ */
127
+ updateConfig(modelConfig) {
128
+ this._config = { ...this._config, ...modelConfig };
129
+ }
130
+ /**
131
+ * Retrieves the current model configuration.
132
+ *
133
+ * @returns The current configuration object
134
+ *
135
+ * @example
136
+ * ```typescript
137
+ * const config = provider.getConfig()
138
+ * console.log(config.modelId)
139
+ * ```
140
+ */
141
+ getConfig() {
142
+ return this._config;
143
+ }
144
+ /**
145
+ * Streams a conversation with the OpenAI model.
146
+ * Returns an async iterable that yields streaming events as they occur.
147
+ *
148
+ * @param messages - Array of conversation messages
149
+ * @param options - Optional streaming configuration
150
+ * @returns Async iterable of streaming events
151
+ *
152
+ * @throws \{ContextWindowOverflowError\} When input exceeds the model's context window
153
+ *
154
+ * @example
155
+ * ```typescript
156
+ * const provider = new OpenAIModel({ modelId: 'gpt-4o', apiKey: 'sk-...' })
157
+ * const messages: Message[] = [
158
+ * { role: 'user', content: [{ type: 'textBlock', text: 'What is 2+2?' }] }
159
+ * ]
160
+ *
161
+ * for await (const event of provider.stream(messages)) {
162
+ * if (event.type === 'modelContentBlockDeltaEvent' && event.delta.type === 'textDelta') {
163
+ * process.stdout.write(event.delta.text)
164
+ * }
165
+ * }
166
+ * ```
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * // With tool use
171
+ * const options: StreamOptions = {
172
+ * systemPrompt: 'You are a helpful assistant',
173
+ * toolSpecs: [calculatorTool]
174
+ * }
175
+ *
176
+ * for await (const event of provider.stream(messages, options)) {
177
+ * if (event.type === 'modelMessageStopEvent' && event.stopReason === 'toolUse') {
178
+ * console.log('Model wants to use a tool')
179
+ * }
180
+ * }
181
+ * ```
182
+ */
183
+ async *stream(messages, options) {
184
+ // Validate messages array is not empty
185
+ if (!messages || messages.length === 0) {
186
+ throw new Error('At least one message is required');
187
+ }
188
+ try {
189
+ // Format the request
190
+ const request = this._formatRequest(messages, options);
191
+ // Create streaming request with usage tracking
192
+ const stream = await this._client.chat.completions.create(request);
193
+ // Track streaming state (Use mutable object for proper state tracking)
194
+ const streamState = {
195
+ messageStarted: false,
196
+ textContentBlockStarted: false,
197
+ };
198
+ // Track active tool calls for stop events
199
+ const activeToolCalls = new Map();
200
+ // Buffer usage to emit before message stop
201
+ let bufferedUsage = null;
202
+ // Process streaming response
203
+ for await (const chunk of stream) {
204
+ if (!chunk.choices || chunk.choices.length === 0) {
205
+ // Handle usage chunk (no choices)
206
+ // Buffer usage to emit before message stop
207
+ if (chunk.usage) {
208
+ bufferedUsage = {
209
+ type: 'modelMetadataEvent',
210
+ usage: {
211
+ inputTokens: chunk.usage.prompt_tokens ?? 0,
212
+ outputTokens: chunk.usage.completion_tokens ?? 0,
213
+ totalTokens: chunk.usage.total_tokens ?? 0,
214
+ },
215
+ };
216
+ }
217
+ continue;
218
+ }
219
+ // Map chunk to SDK events
220
+ const events = this._mapOpenAIChunkToSDKEvents(chunk, streamState, activeToolCalls);
221
+ for (const event of events) {
222
+ // Emit buffered usage before message stop
223
+ if (event.type === 'modelMessageStopEvent' && bufferedUsage) {
224
+ yield bufferedUsage;
225
+ bufferedUsage = null;
226
+ }
227
+ yield event;
228
+ }
229
+ }
230
+ // Emit any remaining buffered usage
231
+ if (bufferedUsage) {
232
+ yield bufferedUsage;
233
+ }
234
+ }
235
+ catch (error) {
236
+ const err = error;
237
+ // Check for context window overflow using simple pattern matching
238
+ if (OPENAI_CONTEXT_WINDOW_OVERFLOW_PATTERNS.some((pattern) => err.message?.toLowerCase().includes(pattern))) {
239
+ throw new ContextWindowOverflowError(err.message);
240
+ }
241
+ // Re-throw other errors unchanged
242
+ throw err;
243
+ }
244
+ }
245
+ /**
246
+ * Formats a request for the OpenAI Chat Completions API.
247
+ *
248
+ * @param messages - Conversation messages
249
+ * @param options - Stream options
250
+ * @returns Formatted OpenAI request
251
+ */
252
+ _formatRequest(messages, options) {
253
+ // Start with required fields
254
+ const request = {
255
+ model: this._config.modelId,
256
+ messages: [],
257
+ stream: true,
258
+ stream_options: { include_usage: true },
259
+ };
260
+ // Handle system prompt (string or array format)
261
+ if (options?.systemPrompt !== undefined) {
262
+ if (typeof options.systemPrompt === 'string') {
263
+ // String path: validate and add as-is
264
+ if (options.systemPrompt.trim().length > 0) {
265
+ request.messages.push({
266
+ role: 'system',
267
+ content: options.systemPrompt,
268
+ });
269
+ }
270
+ }
271
+ else if (Array.isArray(options.systemPrompt) && options.systemPrompt.length > 0) {
272
+ // Array path: extract text blocks and warn about cache points
273
+ const textBlocks = [];
274
+ let hasCachePoints = false;
275
+ for (const block of options.systemPrompt) {
276
+ if (block.type === 'textBlock') {
277
+ textBlocks.push(block.text);
278
+ }
279
+ else if (block.type === 'cachePointBlock') {
280
+ hasCachePoints = true;
281
+ }
282
+ }
283
+ if (hasCachePoints) {
284
+ console.warn('Cache points are not supported in OpenAI system prompts and will be ignored.');
285
+ }
286
+ if (textBlocks.length > 0) {
287
+ request.messages.push({
288
+ role: 'system',
289
+ content: textBlocks.join(''),
290
+ });
291
+ }
292
+ }
293
+ }
294
+ // Add formatted messages
295
+ const formattedMessages = this._formatMessages(messages);
296
+ request.messages.push(...formattedMessages);
297
+ // Add model configuration parameters
298
+ if (this._config.temperature !== undefined) {
299
+ request.temperature = this._config.temperature;
300
+ }
301
+ if (this._config.maxTokens !== undefined) {
302
+ request.max_tokens = this._config.maxTokens;
303
+ }
304
+ if (this._config.topP !== undefined) {
305
+ request.top_p = this._config.topP;
306
+ }
307
+ if (this._config.frequencyPenalty !== undefined) {
308
+ request.frequency_penalty = this._config.frequencyPenalty;
309
+ }
310
+ if (this._config.presencePenalty !== undefined) {
311
+ request.presence_penalty = this._config.presencePenalty;
312
+ }
313
+ // Add tool specifications with validation
314
+ if (options?.toolSpecs && options.toolSpecs.length > 0) {
315
+ request.tools = options.toolSpecs.map((spec) => {
316
+ if (!spec.name || !spec.description) {
317
+ throw new Error('Tool specification must have both name and description');
318
+ }
319
+ return {
320
+ type: 'function',
321
+ function: {
322
+ name: spec.name,
323
+ description: spec.description,
324
+ parameters: spec.inputSchema,
325
+ },
326
+ };
327
+ });
328
+ // Add tool choice if specified
329
+ if (options.toolChoice) {
330
+ if ('auto' in options.toolChoice) {
331
+ request.tool_choice = 'auto';
332
+ }
333
+ else if ('any' in options.toolChoice) {
334
+ request.tool_choice = 'required';
335
+ }
336
+ else if ('tool' in options.toolChoice) {
337
+ request.tool_choice = {
338
+ type: 'function',
339
+ function: { name: options.toolChoice.tool.name },
340
+ };
341
+ }
342
+ }
343
+ }
344
+ // Spread params object last for forward compatibility
345
+ if (this._config.params) {
346
+ Object.assign(request, this._config.params);
347
+ }
348
+ // Validate n parameter (number of completions) - only n=1 supported for streaming
349
+ if ('n' in request && request.n !== undefined && request.n !== null && request.n > 1) {
350
+ throw new Error('Streaming with n > 1 is not supported');
351
+ }
352
+ return request;
353
+ }
354
+ /**
355
+ * Formats messages for OpenAI API.
356
+ * Handles splitting tool results into separate messages.
357
+ *
358
+ * @param messages - SDK messages
359
+ * @returns OpenAI-formatted messages
360
+ */
361
+ _formatMessages(messages) {
362
+ const openAIMessages = [];
363
+ for (const message of messages) {
364
+ if (message.role === 'user') {
365
+ // Separate tool results from other content
366
+ const toolResults = message.content.filter((b) => b.type === 'toolResultBlock');
367
+ const otherContent = message.content.filter((b) => b.type !== 'toolResultBlock');
368
+ // Add non-tool-result content as user message
369
+ if (otherContent.length > 0) {
370
+ const contentText = otherContent
371
+ .map((block) => {
372
+ if (block.type === 'textBlock') {
373
+ return block.text;
374
+ }
375
+ else if (block.type === 'reasoningBlock') {
376
+ throw new Error('Reasoning blocks are not supported by OpenAI. ' + 'This feature is specific to AWS Bedrock models.');
377
+ }
378
+ return '';
379
+ })
380
+ .join('');
381
+ // Validate content is not empty before adding
382
+ if (contentText.trim().length > 0) {
383
+ openAIMessages.push({
384
+ role: 'user',
385
+ content: contentText,
386
+ });
387
+ }
388
+ }
389
+ // Add each tool result as separate tool message
390
+ // OpenAI only supports text content in tool result messages, not JSON
391
+ for (const toolResult of toolResults) {
392
+ if (toolResult.type === 'toolResultBlock') {
393
+ // Format tool result content - convert all to text string
394
+ // Note: OpenAI tool messages only accept string content (not structured JSON)
395
+ const contentText = toolResult.content
396
+ .map((c) => {
397
+ if (c.type === 'toolResultTextContent') {
398
+ return c.text;
399
+ }
400
+ else if (c.type === 'toolResultJsonContent') {
401
+ try {
402
+ return JSON.stringify(c.json);
403
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
404
+ }
405
+ catch (error) {
406
+ const dataPreview = typeof c.json === 'object' && c.json !== null
407
+ ? `object with keys: ${Object.keys(c.json).slice(0, 5).join(', ')}`
408
+ : typeof c.json;
409
+ return `[JSON Serialization Error: ${error.message}. Data type: ${dataPreview}]`;
410
+ }
411
+ }
412
+ return '';
413
+ })
414
+ .join('');
415
+ // Validate content is not empty
416
+ if (!contentText || contentText.trim().length === 0) {
417
+ throw new Error(`Tool result for toolUseId "${toolResult.toolUseId}" has empty content. ` +
418
+ 'OpenAI requires tool messages to have non-empty content.');
419
+ }
420
+ // Prepend error indicator if status is error
421
+ const finalContent = toolResult.status === 'error' ? `[ERROR] ${contentText}` : contentText;
422
+ openAIMessages.push({
423
+ role: 'tool',
424
+ tool_call_id: toolResult.toolUseId,
425
+ content: finalContent,
426
+ });
427
+ }
428
+ }
429
+ }
430
+ else {
431
+ // Handle assistant messages
432
+ const toolUseCalls = [];
433
+ // Use array + join pattern for efficient string concatenation
434
+ const textParts = [];
435
+ for (const block of message.content) {
436
+ if (block.type === 'textBlock') {
437
+ textParts.push(block.text);
438
+ }
439
+ else if (block.type === 'toolUseBlock') {
440
+ try {
441
+ toolUseCalls.push({
442
+ id: block.toolUseId,
443
+ type: 'function',
444
+ function: {
445
+ name: block.name,
446
+ arguments: JSON.stringify(block.input),
447
+ },
448
+ });
449
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
450
+ }
451
+ catch (error) {
452
+ throw new Error(`Failed to serialize tool input for "${block.name}": ${error.message}`);
453
+ }
454
+ }
455
+ else if (block.type === 'reasoningBlock') {
456
+ throw new Error('Reasoning blocks are not supported by OpenAI. ' + 'This feature is specific to AWS Bedrock models.');
457
+ }
458
+ }
459
+ // Trim text content to avoid whitespace-only messages
460
+ const textContent = textParts.join('').trim();
461
+ const assistantMessage = {
462
+ role: 'assistant',
463
+ content: textContent,
464
+ };
465
+ if (toolUseCalls.length > 0) {
466
+ assistantMessage.tool_calls = toolUseCalls;
467
+ }
468
+ // Only add if message has content or tool calls
469
+ if (textContent.length > 0 || toolUseCalls.length > 0) {
470
+ openAIMessages.push(assistantMessage);
471
+ }
472
+ }
473
+ }
474
+ return openAIMessages;
475
+ }
476
+ /**
477
+ * Converts a snake_case string to camelCase.
478
+ * Used for mapping OpenAI stop reasons to SDK format.
479
+ *
480
+ * @param str - Snake case string (e.g., 'content_filter')
481
+ * @returns Camel case string (e.g., 'contentFilter')
482
+ *
483
+ * @example
484
+ * ```typescript
485
+ * _snakeToCamel('context_length_exceeded') // => 'contextLengthExceeded'
486
+ * _snakeToCamel('tool_calls') // => 'toolCalls'
487
+ * ```
488
+ */
489
+ _snakeToCamel(str) {
490
+ return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
491
+ }
492
+ /**
493
+ * Maps an OpenAI chunk to SDK streaming events.
494
+ *
495
+ * @param chunk - OpenAI chunk
496
+ * @param streamState - Mutable state object tracking message and content block state
497
+ * @param activeToolCalls - Map tracking active tool calls by index
498
+ * @returns Array of SDK streaming events
499
+ */
500
+ _mapOpenAIChunkToSDKEvents(chunk, streamState, activeToolCalls) {
501
+ const events = [];
502
+ // Use named constant for text content block index
503
+ const TEXT_CONTENT_BLOCK_INDEX = 0;
504
+ // Validate choices array has at least one element
505
+ if (!chunk.choices || chunk.choices.length === 0) {
506
+ return events;
507
+ }
508
+ const choice = chunk.choices[0];
509
+ // Validate choice is an object
510
+ if (!choice || typeof choice !== 'object') {
511
+ console.warn('Invalid choice format in OpenAI chunk:', choice);
512
+ return events;
513
+ }
514
+ // Process first choice (OpenAI typically returns one choice in streaming)
515
+ const typedChoice = choice;
516
+ if (!typedChoice.delta && !typedChoice.finish_reason) {
517
+ return events;
518
+ }
519
+ const delta = typedChoice.delta;
520
+ // Handle message start (role appears) - update mutable state
521
+ if (delta?.role && !streamState.messageStarted) {
522
+ streamState.messageStarted = true;
523
+ events.push({
524
+ type: 'modelMessageStartEvent',
525
+ role: delta.role,
526
+ });
527
+ }
528
+ // Handle text content delta with contentBlockIndex and start event
529
+ if (delta?.content && delta.content.length > 0) {
530
+ // Emit start event on first text delta
531
+ if (!streamState.textContentBlockStarted) {
532
+ streamState.textContentBlockStarted = true;
533
+ events.push({
534
+ type: 'modelContentBlockStartEvent',
535
+ contentBlockIndex: TEXT_CONTENT_BLOCK_INDEX,
536
+ });
537
+ }
538
+ // Include contentBlockIndex for text deltas
539
+ events.push({
540
+ type: 'modelContentBlockDeltaEvent',
541
+ contentBlockIndex: TEXT_CONTENT_BLOCK_INDEX,
542
+ delta: {
543
+ type: 'textDelta',
544
+ text: delta.content,
545
+ },
546
+ });
547
+ }
548
+ // Handle tool calls
549
+ if (delta?.tool_calls && delta.tool_calls.length > 0) {
550
+ for (const toolCall of delta.tool_calls) {
551
+ // Validate tool call index
552
+ if (toolCall.index === undefined || typeof toolCall.index !== 'number') {
553
+ console.warn('Received tool call with invalid index:', toolCall);
554
+ continue;
555
+ }
556
+ // If tool call has id and name, it's the start of a new tool call
557
+ if (toolCall.id && toolCall.function?.name) {
558
+ events.push({
559
+ type: 'modelContentBlockStartEvent',
560
+ contentBlockIndex: toolCall.index,
561
+ start: {
562
+ type: 'toolUseStart',
563
+ name: toolCall.function.name,
564
+ toolUseId: toolCall.id,
565
+ },
566
+ });
567
+ // Track active tool calls
568
+ activeToolCalls.set(toolCall.index, true);
569
+ }
570
+ // If tool call has arguments, it's a delta
571
+ if (toolCall.function?.arguments) {
572
+ events.push({
573
+ type: 'modelContentBlockDeltaEvent',
574
+ contentBlockIndex: toolCall.index,
575
+ delta: {
576
+ type: 'toolUseInputDelta',
577
+ input: toolCall.function.arguments,
578
+ },
579
+ });
580
+ }
581
+ }
582
+ }
583
+ // Handle finish reason (message stop)
584
+ if (typedChoice.finish_reason) {
585
+ // Emit stop event for text content if it was started
586
+ if (streamState.textContentBlockStarted) {
587
+ events.push({
588
+ type: 'modelContentBlockStopEvent',
589
+ contentBlockIndex: TEXT_CONTENT_BLOCK_INDEX,
590
+ });
591
+ streamState.textContentBlockStarted = false;
592
+ }
593
+ // Emit stop events for all active tool calls and delete during iteration
594
+ for (const [index] of activeToolCalls) {
595
+ events.push({
596
+ type: 'modelContentBlockStopEvent',
597
+ contentBlockIndex: index,
598
+ });
599
+ activeToolCalls.delete(index);
600
+ }
601
+ // Map OpenAI stop reason to SDK stop reason
602
+ const stopReasonMap = {
603
+ stop: 'endTurn',
604
+ tool_calls: 'toolUse',
605
+ length: 'maxTokens',
606
+ content_filter: 'contentFiltered',
607
+ };
608
+ // Log unknown stop reasons
609
+ let stopReason = stopReasonMap[typedChoice.finish_reason];
610
+ if (!stopReason) {
611
+ const fallbackReason = this._snakeToCamel(typedChoice.finish_reason);
612
+ console.warn(`Unknown OpenAI stop reason: "${typedChoice.finish_reason}". ` +
613
+ `Using camelCase conversion as fallback: "${fallbackReason}". ` +
614
+ 'Please report this to update the stop reason mapping.');
615
+ stopReason = fallbackReason;
616
+ }
617
+ events.push({
618
+ type: 'modelMessageStopEvent',
619
+ stopReason,
620
+ });
621
+ }
622
+ return events;
623
+ }
624
+ }
625
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/models/openai.ts"],"names":[],"mappings":"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"}