openai 7.14.0 → 7.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (456) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +6 -0
  3. package/bedrock.d.mts.map +1 -1
  4. package/bedrock.d.ts.map +1 -1
  5. package/bedrock.js +9 -6
  6. package/bedrock.js.map +1 -1
  7. package/bedrock.mjs +9 -6
  8. package/bedrock.mjs.map +1 -1
  9. package/client.d.mts +16 -4
  10. package/client.d.mts.map +1 -1
  11. package/client.d.ts +16 -4
  12. package/client.d.ts.map +1 -1
  13. package/client.js +37 -20
  14. package/client.js.map +1 -1
  15. package/client.mjs +37 -20
  16. package/client.mjs.map +1 -1
  17. package/core/pagination.d.mts +19 -1
  18. package/core/pagination.d.mts.map +1 -1
  19. package/core/pagination.d.ts +19 -1
  20. package/core/pagination.d.ts.map +1 -1
  21. package/core/pagination.js +32 -1
  22. package/core/pagination.js.map +1 -1
  23. package/core/pagination.mjs +30 -0
  24. package/core/pagination.mjs.map +1 -1
  25. package/internal/realtime-credentials.d.mts +1 -1
  26. package/internal/realtime-credentials.d.ts +1 -1
  27. package/internal/realtime-credentials.js +1 -1
  28. package/internal/realtime-credentials.mjs +1 -1
  29. package/internal/utils/abort.d.mts +11 -0
  30. package/internal/utils/abort.d.mts.map +1 -0
  31. package/internal/utils/abort.d.ts +11 -0
  32. package/internal/utils/abort.d.ts.map +1 -0
  33. package/internal/utils/abort.js +87 -0
  34. package/internal/utils/abort.js.map +1 -0
  35. package/internal/utils/abort.mjs +83 -0
  36. package/internal/utils/abort.mjs.map +1 -0
  37. package/internal/ws.d.mts +13 -0
  38. package/internal/ws.d.mts.map +1 -1
  39. package/internal/ws.d.ts +13 -0
  40. package/internal/ws.d.ts.map +1 -1
  41. package/internal/ws.js +10 -0
  42. package/internal/ws.js.map +1 -1
  43. package/internal/ws.mjs +9 -0
  44. package/internal/ws.mjs.map +1 -1
  45. package/lib/agents/agent-session-stream.d.mts +41 -0
  46. package/lib/agents/agent-session-stream.d.mts.map +1 -0
  47. package/lib/agents/agent-session-stream.d.ts +41 -0
  48. package/lib/agents/agent-session-stream.d.ts.map +1 -0
  49. package/lib/agents/agent-session-stream.js +271 -0
  50. package/lib/agents/agent-session-stream.js.map +1 -0
  51. package/lib/agents/agent-session-stream.mjs +267 -0
  52. package/lib/agents/agent-session-stream.mjs.map +1 -0
  53. package/lib/agents/output-text.d.mts +4 -0
  54. package/lib/agents/output-text.d.mts.map +1 -0
  55. package/lib/agents/output-text.d.ts +4 -0
  56. package/lib/agents/output-text.d.ts.map +1 -0
  57. package/lib/agents/output-text.js +8 -0
  58. package/lib/agents/output-text.js.map +1 -0
  59. package/lib/agents/output-text.mjs +5 -0
  60. package/lib/agents/output-text.mjs.map +1 -0
  61. package/lib/agents/turn-state.d.mts +14 -0
  62. package/lib/agents/turn-state.d.mts.map +1 -0
  63. package/lib/agents/turn-state.d.ts +14 -0
  64. package/lib/agents/turn-state.d.ts.map +1 -0
  65. package/lib/agents/turn-state.js +62 -0
  66. package/lib/agents/turn-state.js.map +1 -0
  67. package/lib/agents/turn-state.mjs +58 -0
  68. package/lib/agents/turn-state.mjs.map +1 -0
  69. package/lib/live/transcript-grouping.d.mts +2 -2
  70. package/lib/live/transcript-grouping.d.mts.map +1 -1
  71. package/lib/live/transcript-grouping.d.ts +2 -2
  72. package/lib/live/transcript-grouping.d.ts.map +1 -1
  73. package/lib/live/transcript-grouping.js +44 -22
  74. package/lib/live/transcript-grouping.js.map +1 -1
  75. package/lib/live/transcript-grouping.mjs +44 -22
  76. package/lib/live/transcript-grouping.mjs.map +1 -1
  77. package/package.json +1 -1
  78. package/resources/beta/agents/agents.d.mts +3678 -0
  79. package/resources/beta/agents/agents.d.mts.map +1 -0
  80. package/resources/beta/agents/agents.d.ts +3678 -0
  81. package/resources/beta/agents/agents.d.ts.map +1 -0
  82. package/resources/beta/agents/agents.js +118 -0
  83. package/resources/beta/agents/agents.js.map +1 -0
  84. package/resources/beta/agents/agents.mjs +113 -0
  85. package/resources/beta/agents/agents.mjs.map +1 -0
  86. package/resources/beta/agents/environments/environments.d.mts +65 -0
  87. package/resources/beta/agents/environments/environments.d.mts.map +1 -0
  88. package/resources/beta/agents/environments/environments.d.ts +65 -0
  89. package/resources/beta/agents/environments/environments.d.ts.map +1 -0
  90. package/resources/beta/agents/environments/environments.js +43 -0
  91. package/resources/beta/agents/environments/environments.js.map +1 -0
  92. package/resources/beta/agents/environments/environments.mjs +38 -0
  93. package/resources/beta/agents/environments/environments.mjs.map +1 -0
  94. package/resources/beta/agents/environments/files.d.mts +111 -0
  95. package/resources/beta/agents/environments/files.d.mts.map +1 -0
  96. package/resources/beta/agents/environments/files.d.ts +111 -0
  97. package/resources/beta/agents/environments/files.d.ts.map +1 -0
  98. package/resources/beta/agents/environments/files.js +61 -0
  99. package/resources/beta/agents/environments/files.js.map +1 -0
  100. package/resources/beta/agents/environments/files.mjs +57 -0
  101. package/resources/beta/agents/environments/files.mjs.map +1 -0
  102. package/resources/beta/agents/environments/index.d.mts +4 -0
  103. package/resources/beta/agents/environments/index.d.mts.map +1 -0
  104. package/resources/beta/agents/environments/index.d.ts +4 -0
  105. package/resources/beta/agents/environments/index.d.ts.map +1 -0
  106. package/resources/beta/agents/environments/index.js +11 -0
  107. package/resources/beta/agents/environments/index.js.map +1 -0
  108. package/resources/beta/agents/environments/index.mjs +5 -0
  109. package/resources/beta/agents/environments/index.mjs.map +1 -0
  110. package/resources/beta/agents/environments/templates.d.mts +415 -0
  111. package/resources/beta/agents/environments/templates.d.mts.map +1 -0
  112. package/resources/beta/agents/environments/templates.d.ts +415 -0
  113. package/resources/beta/agents/environments/templates.d.ts.map +1 -0
  114. package/resources/beta/agents/environments/templates.js +112 -0
  115. package/resources/beta/agents/environments/templates.js.map +1 -0
  116. package/resources/beta/agents/environments/templates.mjs +108 -0
  117. package/resources/beta/agents/environments/templates.mjs.map +1 -0
  118. package/resources/beta/agents/environments.d.mts +2 -0
  119. package/resources/beta/agents/environments.d.mts.map +1 -0
  120. package/resources/beta/agents/environments.d.ts +2 -0
  121. package/resources/beta/agents/environments.d.ts.map +1 -0
  122. package/resources/beta/agents/environments.js +6 -0
  123. package/resources/beta/agents/environments.js.map +1 -0
  124. package/resources/beta/agents/environments.mjs +3 -0
  125. package/resources/beta/agents/environments.mjs.map +1 -0
  126. package/resources/beta/agents/index.d.mts +5 -0
  127. package/resources/beta/agents/index.d.mts.map +1 -0
  128. package/resources/beta/agents/index.d.ts +5 -0
  129. package/resources/beta/agents/index.d.ts.map +1 -0
  130. package/resources/beta/agents/index.js +13 -0
  131. package/resources/beta/agents/index.js.map +1 -0
  132. package/resources/beta/agents/index.mjs +6 -0
  133. package/resources/beta/agents/index.mjs.map +1 -0
  134. package/resources/beta/agents/sessions/artifacts.d.mts +158 -0
  135. package/resources/beta/agents/sessions/artifacts.d.mts.map +1 -0
  136. package/resources/beta/agents/sessions/artifacts.d.ts +158 -0
  137. package/resources/beta/agents/sessions/artifacts.d.ts.map +1 -0
  138. package/resources/beta/agents/sessions/artifacts.js +106 -0
  139. package/resources/beta/agents/sessions/artifacts.js.map +1 -0
  140. package/resources/beta/agents/sessions/artifacts.mjs +102 -0
  141. package/resources/beta/agents/sessions/artifacts.mjs.map +1 -0
  142. package/resources/beta/agents/sessions/events.d.mts +61 -0
  143. package/resources/beta/agents/sessions/events.d.mts.map +1 -0
  144. package/resources/beta/agents/sessions/events.d.ts +61 -0
  145. package/resources/beta/agents/sessions/events.d.ts.map +1 -0
  146. package/resources/beta/agents/sessions/events.js +72 -0
  147. package/resources/beta/agents/sessions/events.js.map +1 -0
  148. package/resources/beta/agents/sessions/events.mjs +68 -0
  149. package/resources/beta/agents/sessions/events.mjs.map +1 -0
  150. package/resources/beta/agents/sessions/index.d.mts +7 -0
  151. package/resources/beta/agents/sessions/index.d.mts.map +1 -0
  152. package/resources/beta/agents/sessions/index.d.ts +7 -0
  153. package/resources/beta/agents/sessions/index.d.ts.map +1 -0
  154. package/resources/beta/agents/sessions/index.js +17 -0
  155. package/resources/beta/agents/sessions/index.js.map +1 -0
  156. package/resources/beta/agents/sessions/index.mjs +8 -0
  157. package/resources/beta/agents/sessions/index.mjs.map +1 -0
  158. package/resources/beta/agents/sessions/items.d.mts +37 -0
  159. package/resources/beta/agents/sessions/items.d.mts.map +1 -0
  160. package/resources/beta/agents/sessions/items.d.ts +37 -0
  161. package/resources/beta/agents/sessions/items.d.ts.map +1 -0
  162. package/resources/beta/agents/sessions/items.js +35 -0
  163. package/resources/beta/agents/sessions/items.js.map +1 -0
  164. package/resources/beta/agents/sessions/items.mjs +31 -0
  165. package/resources/beta/agents/sessions/items.mjs.map +1 -0
  166. package/resources/beta/agents/sessions/sessions.d.mts +220 -0
  167. package/resources/beta/agents/sessions/sessions.d.mts.map +1 -0
  168. package/resources/beta/agents/sessions/sessions.d.ts +220 -0
  169. package/resources/beta/agents/sessions/sessions.d.ts.map +1 -0
  170. package/resources/beta/agents/sessions/sessions.js +124 -0
  171. package/resources/beta/agents/sessions/sessions.js.map +1 -0
  172. package/resources/beta/agents/sessions/sessions.mjs +119 -0
  173. package/resources/beta/agents/sessions/sessions.mjs.map +1 -0
  174. package/resources/beta/agents/sessions/subagents/index.d.mts +4 -0
  175. package/resources/beta/agents/sessions/subagents/index.d.mts.map +1 -0
  176. package/resources/beta/agents/sessions/subagents/index.d.ts +4 -0
  177. package/resources/beta/agents/sessions/subagents/index.d.ts.map +1 -0
  178. package/resources/beta/agents/sessions/subagents/index.js +11 -0
  179. package/resources/beta/agents/sessions/subagents/index.js.map +1 -0
  180. package/resources/beta/agents/sessions/subagents/index.mjs +5 -0
  181. package/resources/beta/agents/sessions/subagents/index.mjs.map +1 -0
  182. package/resources/beta/agents/sessions/subagents/items.d.mts +41 -0
  183. package/resources/beta/agents/sessions/subagents/items.d.mts.map +1 -0
  184. package/resources/beta/agents/sessions/subagents/items.d.ts +41 -0
  185. package/resources/beta/agents/sessions/subagents/items.d.ts.map +1 -0
  186. package/resources/beta/agents/sessions/subagents/items.js +36 -0
  187. package/resources/beta/agents/sessions/subagents/items.js.map +1 -0
  188. package/resources/beta/agents/sessions/subagents/items.mjs +32 -0
  189. package/resources/beta/agents/sessions/subagents/items.mjs.map +1 -0
  190. package/resources/beta/agents/sessions/subagents/subagents.d.mts +65 -0
  191. package/resources/beta/agents/sessions/subagents/subagents.d.mts.map +1 -0
  192. package/resources/beta/agents/sessions/subagents/subagents.d.ts +65 -0
  193. package/resources/beta/agents/sessions/subagents/subagents.d.ts.map +1 -0
  194. package/resources/beta/agents/sessions/subagents/subagents.js +67 -0
  195. package/resources/beta/agents/sessions/subagents/subagents.js.map +1 -0
  196. package/resources/beta/agents/sessions/subagents/subagents.mjs +62 -0
  197. package/resources/beta/agents/sessions/subagents/subagents.mjs.map +1 -0
  198. package/resources/beta/agents/sessions/subagents/turns/index.d.mts +3 -0
  199. package/resources/beta/agents/sessions/subagents/turns/index.d.mts.map +1 -0
  200. package/resources/beta/agents/sessions/subagents/turns/index.d.ts +3 -0
  201. package/resources/beta/agents/sessions/subagents/turns/index.d.ts.map +1 -0
  202. package/resources/beta/agents/sessions/subagents/turns/index.js +9 -0
  203. package/resources/beta/agents/sessions/subagents/turns/index.js.map +1 -0
  204. package/resources/beta/agents/sessions/subagents/turns/index.mjs +4 -0
  205. package/resources/beta/agents/sessions/subagents/turns/index.mjs.map +1 -0
  206. package/resources/beta/agents/sessions/subagents/turns/items.d.mts +45 -0
  207. package/resources/beta/agents/sessions/subagents/turns/items.d.mts.map +1 -0
  208. package/resources/beta/agents/sessions/subagents/turns/items.d.ts +45 -0
  209. package/resources/beta/agents/sessions/subagents/turns/items.d.ts.map +1 -0
  210. package/resources/beta/agents/sessions/subagents/turns/items.js +36 -0
  211. package/resources/beta/agents/sessions/subagents/turns/items.js.map +1 -0
  212. package/resources/beta/agents/sessions/subagents/turns/items.mjs +32 -0
  213. package/resources/beta/agents/sessions/subagents/turns/items.mjs.map +1 -0
  214. package/resources/beta/agents/sessions/subagents/turns/turns.d.mts +73 -0
  215. package/resources/beta/agents/sessions/subagents/turns/turns.d.mts.map +1 -0
  216. package/resources/beta/agents/sessions/subagents/turns/turns.d.ts +73 -0
  217. package/resources/beta/agents/sessions/subagents/turns/turns.d.ts.map +1 -0
  218. package/resources/beta/agents/sessions/subagents/turns/turns.js +68 -0
  219. package/resources/beta/agents/sessions/subagents/turns/turns.js.map +1 -0
  220. package/resources/beta/agents/sessions/subagents/turns/turns.mjs +63 -0
  221. package/resources/beta/agents/sessions/subagents/turns/turns.mjs.map +1 -0
  222. package/resources/beta/agents/sessions/subagents/turns.d.mts +2 -0
  223. package/resources/beta/agents/sessions/subagents/turns.d.mts.map +1 -0
  224. package/resources/beta/agents/sessions/subagents/turns.d.ts +2 -0
  225. package/resources/beta/agents/sessions/subagents/turns.d.ts.map +1 -0
  226. package/resources/beta/agents/sessions/subagents/turns.js +6 -0
  227. package/resources/beta/agents/sessions/subagents/turns.js.map +1 -0
  228. package/resources/beta/agents/sessions/subagents/turns.mjs +3 -0
  229. package/resources/beta/agents/sessions/subagents/turns.mjs.map +1 -0
  230. package/resources/beta/agents/sessions/subagents.d.mts +2 -0
  231. package/resources/beta/agents/sessions/subagents.d.mts.map +1 -0
  232. package/resources/beta/agents/sessions/subagents.d.ts +2 -0
  233. package/resources/beta/agents/sessions/subagents.d.ts.map +1 -0
  234. package/resources/beta/agents/sessions/subagents.js +6 -0
  235. package/resources/beta/agents/sessions/subagents.js.map +1 -0
  236. package/resources/beta/agents/sessions/subagents.mjs +3 -0
  237. package/resources/beta/agents/sessions/subagents.mjs.map +1 -0
  238. package/resources/beta/agents/sessions/turns.d.mts +116 -0
  239. package/resources/beta/agents/sessions/turns.d.mts.map +1 -0
  240. package/resources/beta/agents/sessions/turns.d.ts +116 -0
  241. package/resources/beta/agents/sessions/turns.d.ts.map +1 -0
  242. package/resources/beta/agents/sessions/turns.js +57 -0
  243. package/resources/beta/agents/sessions/turns.js.map +1 -0
  244. package/resources/beta/agents/sessions/turns.mjs +53 -0
  245. package/resources/beta/agents/sessions/turns.mjs.map +1 -0
  246. package/resources/beta/agents/sessions.d.mts +2 -0
  247. package/resources/beta/agents/sessions.d.mts.map +1 -0
  248. package/resources/beta/agents/sessions.d.ts +2 -0
  249. package/resources/beta/agents/sessions.d.ts.map +1 -0
  250. package/resources/beta/agents/sessions.js +6 -0
  251. package/resources/beta/agents/sessions.js.map +1 -0
  252. package/resources/beta/agents/sessions.mjs +3 -0
  253. package/resources/beta/agents/sessions.mjs.map +1 -0
  254. package/resources/beta/agents/vaults/credentials.d.mts +526 -0
  255. package/resources/beta/agents/vaults/credentials.d.mts.map +1 -0
  256. package/resources/beta/agents/vaults/credentials.d.ts +526 -0
  257. package/resources/beta/agents/vaults/credentials.d.ts.map +1 -0
  258. package/resources/beta/agents/vaults/credentials.js +132 -0
  259. package/resources/beta/agents/vaults/credentials.js.map +1 -0
  260. package/resources/beta/agents/vaults/credentials.mjs +128 -0
  261. package/resources/beta/agents/vaults/credentials.mjs.map +1 -0
  262. package/resources/beta/agents/vaults/index.d.mts +3 -0
  263. package/resources/beta/agents/vaults/index.d.mts.map +1 -0
  264. package/resources/beta/agents/vaults/index.d.ts +3 -0
  265. package/resources/beta/agents/vaults/index.d.ts.map +1 -0
  266. package/resources/beta/agents/vaults/index.js +9 -0
  267. package/resources/beta/agents/vaults/index.js.map +1 -0
  268. package/resources/beta/agents/vaults/index.mjs +4 -0
  269. package/resources/beta/agents/vaults/index.mjs.map +1 -0
  270. package/resources/beta/agents/vaults/vaults.d.mts +145 -0
  271. package/resources/beta/agents/vaults/vaults.d.mts.map +1 -0
  272. package/resources/beta/agents/vaults/vaults.d.ts +145 -0
  273. package/resources/beta/agents/vaults/vaults.d.ts.map +1 -0
  274. package/resources/beta/agents/vaults/vaults.js +93 -0
  275. package/resources/beta/agents/vaults/vaults.js.map +1 -0
  276. package/resources/beta/agents/vaults/vaults.mjs +88 -0
  277. package/resources/beta/agents/vaults/vaults.mjs.map +1 -0
  278. package/resources/beta/agents/vaults.d.mts +2 -0
  279. package/resources/beta/agents/vaults.d.mts.map +1 -0
  280. package/resources/beta/agents/vaults.d.ts +2 -0
  281. package/resources/beta/agents/vaults.d.ts.map +1 -0
  282. package/resources/beta/agents/vaults.js +6 -0
  283. package/resources/beta/agents/vaults.js.map +1 -0
  284. package/resources/beta/agents/vaults.mjs +3 -0
  285. package/resources/beta/agents/vaults.mjs.map +1 -0
  286. package/resources/beta/agents.d.mts +2 -0
  287. package/resources/beta/agents.d.mts.map +1 -0
  288. package/resources/beta/agents.d.ts +2 -0
  289. package/resources/beta/agents.d.ts.map +1 -0
  290. package/resources/beta/agents.js +6 -0
  291. package/resources/beta/agents.js.map +1 -0
  292. package/resources/beta/agents.mjs +3 -0
  293. package/resources/beta/agents.mjs.map +1 -0
  294. package/resources/beta/beta.d.mts +4 -1
  295. package/resources/beta/beta.d.mts.map +1 -1
  296. package/resources/beta/beta.d.ts +4 -1
  297. package/resources/beta/beta.d.ts.map +1 -1
  298. package/resources/beta/beta.js +4 -0
  299. package/resources/beta/beta.js.map +1 -1
  300. package/resources/beta/beta.mjs +4 -0
  301. package/resources/beta/beta.mjs.map +1 -1
  302. package/resources/beta/index.d.mts +1 -0
  303. package/resources/beta/index.d.mts.map +1 -1
  304. package/resources/beta/index.d.ts +1 -0
  305. package/resources/beta/index.d.ts.map +1 -1
  306. package/resources/beta/index.js +11 -9
  307. package/resources/beta/index.js.map +1 -1
  308. package/resources/beta/index.mjs +1 -0
  309. package/resources/beta/index.mjs.map +1 -1
  310. package/resources/beta/responses/internal-base.d.mts.map +1 -1
  311. package/resources/beta/responses/internal-base.d.ts.map +1 -1
  312. package/resources/beta/responses/internal-base.js +6 -0
  313. package/resources/beta/responses/internal-base.js.map +1 -1
  314. package/resources/beta/responses/internal-base.mjs +6 -0
  315. package/resources/beta/responses/internal-base.mjs.map +1 -1
  316. package/resources/beta/responses/ws-base.d.mts +13 -8
  317. package/resources/beta/responses/ws-base.d.mts.map +1 -1
  318. package/resources/beta/responses/ws-base.d.ts +13 -8
  319. package/resources/beta/responses/ws-base.d.ts.map +1 -1
  320. package/resources/beta/responses/ws-base.js +85 -14
  321. package/resources/beta/responses/ws-base.js.map +1 -1
  322. package/resources/beta/responses/ws-base.mjs +87 -16
  323. package/resources/beta/responses/ws-base.mjs.map +1 -1
  324. package/resources/beta/responses/ws.d.mts +1 -0
  325. package/resources/beta/responses/ws.d.mts.map +1 -1
  326. package/resources/beta/responses/ws.d.ts +1 -0
  327. package/resources/beta/responses/ws.d.ts.map +1 -1
  328. package/resources/beta/responses/ws.js.map +1 -1
  329. package/resources/beta/responses/ws.mjs.map +1 -1
  330. package/resources/live/forks/ws-base.d.mts +13 -8
  331. package/resources/live/forks/ws-base.d.mts.map +1 -1
  332. package/resources/live/forks/ws-base.d.ts +13 -8
  333. package/resources/live/forks/ws-base.d.ts.map +1 -1
  334. package/resources/live/forks/ws-base.js +85 -14
  335. package/resources/live/forks/ws-base.js.map +1 -1
  336. package/resources/live/forks/ws-base.mjs +87 -16
  337. package/resources/live/forks/ws-base.mjs.map +1 -1
  338. package/resources/live/forks/ws.d.mts +1 -0
  339. package/resources/live/forks/ws.d.mts.map +1 -1
  340. package/resources/live/forks/ws.d.ts +1 -0
  341. package/resources/live/forks/ws.d.ts.map +1 -1
  342. package/resources/live/forks/ws.js.map +1 -1
  343. package/resources/live/forks/ws.mjs.map +1 -1
  344. package/resources/live/sessions.d.mts +10 -4
  345. package/resources/live/sessions.d.mts.map +1 -1
  346. package/resources/live/sessions.d.ts +10 -4
  347. package/resources/live/sessions.d.ts.map +1 -1
  348. package/resources/live/sessions.js +10 -4
  349. package/resources/live/sessions.js.map +1 -1
  350. package/resources/live/sessions.mjs +10 -4
  351. package/resources/live/sessions.mjs.map +1 -1
  352. package/resources/live/sideband/ws-base.d.mts +13 -8
  353. package/resources/live/sideband/ws-base.d.mts.map +1 -1
  354. package/resources/live/sideband/ws-base.d.ts +13 -8
  355. package/resources/live/sideband/ws-base.d.ts.map +1 -1
  356. package/resources/live/sideband/ws-base.js +85 -14
  357. package/resources/live/sideband/ws-base.js.map +1 -1
  358. package/resources/live/sideband/ws-base.mjs +87 -16
  359. package/resources/live/sideband/ws-base.mjs.map +1 -1
  360. package/resources/live/sideband/ws.d.mts +1 -0
  361. package/resources/live/sideband/ws.d.mts.map +1 -1
  362. package/resources/live/sideband/ws.d.ts +1 -0
  363. package/resources/live/sideband/ws.d.ts.map +1 -1
  364. package/resources/live/sideband/ws.js.map +1 -1
  365. package/resources/live/sideband/ws.mjs.map +1 -1
  366. package/resources/live/ws-base.d.mts +13 -8
  367. package/resources/live/ws-base.d.mts.map +1 -1
  368. package/resources/live/ws-base.d.ts +13 -8
  369. package/resources/live/ws-base.d.ts.map +1 -1
  370. package/resources/live/ws-base.js +85 -14
  371. package/resources/live/ws-base.js.map +1 -1
  372. package/resources/live/ws-base.mjs +87 -16
  373. package/resources/live/ws-base.mjs.map +1 -1
  374. package/resources/live/ws.d.mts +1 -0
  375. package/resources/live/ws.d.mts.map +1 -1
  376. package/resources/live/ws.d.ts +1 -0
  377. package/resources/live/ws.d.ts.map +1 -1
  378. package/resources/live/ws.js.map +1 -1
  379. package/resources/live/ws.mjs.map +1 -1
  380. package/resources/responses/internal-base.d.mts.map +1 -1
  381. package/resources/responses/internal-base.d.ts.map +1 -1
  382. package/resources/responses/internal-base.js +6 -0
  383. package/resources/responses/internal-base.js.map +1 -1
  384. package/resources/responses/internal-base.mjs +6 -0
  385. package/resources/responses/internal-base.mjs.map +1 -1
  386. package/resources/responses/ws-base.d.mts +13 -8
  387. package/resources/responses/ws-base.d.mts.map +1 -1
  388. package/resources/responses/ws-base.d.ts +13 -8
  389. package/resources/responses/ws-base.d.ts.map +1 -1
  390. package/resources/responses/ws-base.js +85 -14
  391. package/resources/responses/ws-base.js.map +1 -1
  392. package/resources/responses/ws-base.mjs +87 -16
  393. package/resources/responses/ws-base.mjs.map +1 -1
  394. package/resources/responses/ws.d.mts +1 -0
  395. package/resources/responses/ws.d.mts.map +1 -1
  396. package/resources/responses/ws.d.ts +1 -0
  397. package/resources/responses/ws.d.ts.map +1 -1
  398. package/resources/responses/ws.js.map +1 -1
  399. package/resources/responses/ws.mjs.map +1 -1
  400. package/src/bedrock.ts +18 -7
  401. package/src/client.ts +48 -19
  402. package/src/core/pagination.ts +63 -1
  403. package/src/internal/realtime-credentials.ts +1 -1
  404. package/src/internal/utils/abort.ts +111 -0
  405. package/src/internal/ws.ts +22 -0
  406. package/src/lib/agents/agent-session-stream.ts +326 -0
  407. package/src/lib/agents/output-text.ts +6 -0
  408. package/src/lib/agents/turn-state.ts +61 -0
  409. package/src/lib/live/transcript-grouping.ts +59 -27
  410. package/src/resources/beta/agents/agents.ts +4621 -0
  411. package/src/resources/beta/agents/environments/environments.ts +111 -0
  412. package/src/resources/beta/agents/environments/files.ts +164 -0
  413. package/src/resources/beta/agents/environments/index.ts +19 -0
  414. package/src/resources/beta/agents/environments/templates.ts +537 -0
  415. package/src/resources/beta/agents/environments.ts +3 -0
  416. package/src/resources/beta/agents/index.ts +127 -0
  417. package/src/resources/beta/agents/sessions/artifacts.ts +239 -0
  418. package/src/resources/beta/agents/sessions/events.ts +91 -0
  419. package/src/resources/beta/agents/sessions/index.ts +24 -0
  420. package/src/resources/beta/agents/sessions/items.ts +59 -0
  421. package/src/resources/beta/agents/sessions/sessions.ts +350 -0
  422. package/src/resources/beta/agents/sessions/subagents/index.ts +5 -0
  423. package/src/resources/beta/agents/sessions/subagents/items.ts +65 -0
  424. package/src/resources/beta/agents/sessions/subagents/subagents.ts +113 -0
  425. package/src/resources/beta/agents/sessions/subagents/turns/index.ts +4 -0
  426. package/src/resources/beta/agents/sessions/subagents/turns/items.ts +70 -0
  427. package/src/resources/beta/agents/sessions/subagents/turns/turns.ts +111 -0
  428. package/src/resources/beta/agents/sessions/subagents/turns.ts +3 -0
  429. package/src/resources/beta/agents/sessions/subagents.ts +3 -0
  430. package/src/resources/beta/agents/sessions/turns.ts +159 -0
  431. package/src/resources/beta/agents/sessions.ts +3 -0
  432. package/src/resources/beta/agents/vaults/credentials.ts +687 -0
  433. package/src/resources/beta/agents/vaults/index.ts +29 -0
  434. package/src/resources/beta/agents/vaults/vaults.ts +237 -0
  435. package/src/resources/beta/agents/vaults.ts +3 -0
  436. package/src/resources/beta/agents.ts +3 -0
  437. package/src/resources/beta/beta.ts +207 -0
  438. package/src/resources/beta/index.ts +106 -0
  439. package/src/resources/beta/responses/internal-base.ts +5 -0
  440. package/src/resources/beta/responses/ws-base.ts +110 -21
  441. package/src/resources/beta/responses/ws.ts +2 -0
  442. package/src/resources/live/forks/ws-base.ts +110 -21
  443. package/src/resources/live/forks/ws.ts +2 -0
  444. package/src/resources/live/sessions.ts +10 -4
  445. package/src/resources/live/sideband/ws-base.ts +110 -21
  446. package/src/resources/live/sideband/ws.ts +2 -0
  447. package/src/resources/live/ws-base.ts +110 -21
  448. package/src/resources/live/ws.ts +2 -0
  449. package/src/resources/responses/internal-base.ts +5 -0
  450. package/src/resources/responses/ws-base.ts +110 -21
  451. package/src/resources/responses/ws.ts +2 -0
  452. package/src/version.ts +1 -1
  453. package/version.d.mts +1 -1
  454. package/version.d.ts +1 -1
  455. package/version.js +1 -1
  456. package/version.mjs +1 -1
@@ -6,6 +6,8 @@ import { sleep } from '../../../internal/utils/sleep';
6
6
  import { type WebSocketLike, ReadyState } from '../../../internal/ws-adapter';
7
7
  import {
8
8
  SendQueue,
9
+ getMaxBufferedEvents,
10
+ type WebSocketStreamOptions,
9
11
  flattenRawData,
10
12
  isRecoverableClose,
11
13
  type RawWebSocketData,
@@ -61,11 +63,11 @@ export interface SidebandWSBaseOptions {
61
63
  reconnect?: SidebandWSReconnectOptions | null | undefined;
62
64
 
63
65
  /**
64
- * Maximum size of the outgoing message queue in bytes.
65
- * Messages queued while the socket is connecting or reconnecting are held
66
- * in memory up to this limit. Once the limit is reached, new messages are
67
- * discarded and an `error` event is emitted.
68
- * Default: 1 MB
66
+ * Byte budget for outgoing messages queued while the socket is connecting
67
+ * or reconnecting. An empty queue accepts one message even if it exceeds
68
+ * this budget. Further messages are discarded and an `error` event is emitted
69
+ * if the total queued size would exceed the budget.
70
+ * Default: 1 MiB (1,048,576 bytes).
69
71
  */
70
72
  maxQueueSize?: number | undefined;
71
73
  }
@@ -175,6 +177,11 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
175
177
  * The iterator will exit if the socket closes but exiting the iterator
176
178
  * does not close the socket.
177
179
  *
180
+ * Pass `maxBufferedEvents` to limit queued records for this iterator, including
181
+ * lifecycle events. Overflow discards its backlog and rejects `next()` with a
182
+ * WebSocketError; the shared socket and other iterators remain active.
183
+ * Omitted means unlimited. This is an event-count limit, not a byte limit.
184
+ *
178
185
  * @example
179
186
  * ```ts
180
187
  * for await (const event of client.stream()) {
@@ -192,26 +199,59 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
192
199
  * }
193
200
  * ```
194
201
  */
195
- stream(): AsyncIterableIterator<SidebandStreamMessage> {
196
- return this[Symbol.asyncIterator]();
202
+ stream(options?: WebSocketStreamOptions): AsyncIterableIterator<SidebandStreamMessage> {
203
+ return options === undefined ? this[Symbol.asyncIterator]() : this[Symbol.asyncIterator](options);
197
204
  }
198
205
 
199
- [Symbol.asyncIterator](): AsyncIterableIterator<SidebandStreamMessage> {
206
+ [Symbol.asyncIterator](options?: WebSocketStreamOptions): AsyncIterableIterator<SidebandStreamMessage> {
200
207
  if (!this.socket) {
201
208
  throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
202
209
  }
203
210
 
211
+ const maxBufferedEvents = getMaxBufferedEvents(options);
212
+
204
213
  // Two-queue async iterator: `queue` buffers incoming messages,
205
214
  // `resolvers` buffers waiting next() calls. A push wakes the
206
215
  // oldest next(); a next() drains the oldest message.
207
- const queue: SidebandStreamMessage[] = [];
208
- const resolvers: (() => void)[] = [];
216
+ const queue: (SidebandStreamMessage | undefined)[] = [];
217
+ const resolvers: ((() => void) | undefined)[] = [];
218
+ let queueHead = 0;
219
+ let resolverHead = 0;
209
220
  let done = false;
221
+ let failure: WebSocketError | undefined;
210
222
  let currentSocket = this.socket;
211
223
 
224
+ const wakeResolver = () => {
225
+ if (resolverHead >= resolvers.length) return;
226
+
227
+ const resolver = resolvers[resolverHead];
228
+ resolvers[resolverHead] = undefined;
229
+ resolverHead += 1;
230
+ if (resolverHead >= 64 && resolverHead * 2 >= resolvers.length) {
231
+ resolvers.splice(0, resolverHead);
232
+ resolverHead = 0;
233
+ }
234
+ resolver?.();
235
+ };
236
+
212
237
  const push = (msg: SidebandStreamMessage) => {
238
+ if (done) return;
239
+
240
+ if (maxBufferedEvents !== undefined && queue.length - queueHead >= maxBufferedEvents) {
241
+ failure = new WebSocketError(
242
+ `WebSocket stream exceeded maxBufferedEvents (${maxBufferedEvents})`,
243
+ null,
244
+ );
245
+ done = true;
246
+ queue.length = 0;
247
+ queueHead = 0;
248
+ cleanup();
249
+ flushResolvers();
250
+ return;
251
+ }
252
+
213
253
  queue.push(msg);
214
- resolvers.shift()?.();
254
+ wakeResolver();
215
255
  };
216
256
 
217
257
  const onEvent = (event: SidebandAPI.ConnectServerEvent) => {
@@ -241,9 +281,14 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
241
281
  };
242
282
 
243
283
  const flushResolvers = () => {
244
- for (let resolver = resolvers.shift(); resolver; resolver = resolvers.shift()) {
245
- resolver();
284
+ while (resolverHead < resolvers.length) {
285
+ const resolver = resolvers[resolverHead];
286
+ resolvers[resolverHead] = undefined;
287
+ resolverHead += 1;
288
+ resolver?.();
246
289
  }
290
+ resolvers.length = 0;
291
+ resolverHead = 0;
247
292
  };
248
293
 
249
294
  const onClose = (
@@ -257,8 +302,9 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
257
302
  cleanup();
258
303
  };
259
304
 
260
- const onSocketSwap = (oldSocket: TSocket, newSocket: TSocket) => {
261
- oldSocket.off('open', onOpen);
305
+ const onSocketSwap = (_oldSocket: TSocket, newSocket: TSocket) => {
306
+ if (currentSocket === newSocket) return;
307
+ currentSocket.off('open', onOpen);
262
308
  newSocket.on('open', onOpen);
263
309
  currentSocket = newSocket;
264
310
  };
@@ -315,9 +361,21 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
315
361
  }
316
362
  }
317
363
 
318
- const resolve = (res: (value: IteratorResult<SidebandStreamMessage>) => void) => {
319
- if (queue.length > 0) {
320
- res({ value: queue.shift()!, done: false });
364
+ const resolve = (
365
+ res: (value: IteratorResult<SidebandStreamMessage>) => void,
366
+ reject: (error: WebSocketError) => void,
367
+ ) => {
368
+ if (failure) {
369
+ reject(failure);
370
+ } else if (queueHead < queue.length) {
371
+ const queued = queue[queueHead]!;
372
+ queue[queueHead] = undefined;
373
+ queueHead += 1;
374
+ if (queueHead >= 64 && queueHead * 2 >= queue.length) {
375
+ queue.splice(0, queueHead);
376
+ queueHead = 0;
377
+ }
378
+ res({ value: queued, done: false });
321
379
  } else if (done) {
322
380
  res({ value: undefined, done: true });
323
381
  } else {
@@ -327,10 +385,10 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
327
385
  };
328
386
 
329
387
  const next = (): Promise<IteratorResult<SidebandStreamMessage>> =>
330
- new Promise((res) => {
331
- if (resolve(res)) return;
388
+ new Promise((res, reject) => {
389
+ if (resolve(res, reject)) return;
332
390
  resolvers.push(() => {
333
- resolve(res);
391
+ resolve(res, reject);
334
392
  });
335
393
  });
336
394
 
@@ -338,6 +396,8 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
338
396
  next,
339
397
  return: (): Promise<IteratorReturnResult<undefined>> => {
340
398
  done = true;
399
+ queue.length = 0;
400
+ queueHead = 0;
341
401
  cleanup();
342
402
  flushResolvers();
343
403
  return Promise.resolve({ value: undefined, done: true });
@@ -370,6 +430,35 @@ export abstract class SidebandWSBase<TSocket extends WebSocketLike> extends Side
370
430
  return;
371
431
  }
372
432
 
433
+ if (
434
+ event === null ||
435
+ typeof event !== 'object' ||
436
+ Array.isArray(event) ||
437
+ !Object.prototype.hasOwnProperty.call(event, 'type') ||
438
+ typeof event.type !== 'string'
439
+ ) {
440
+ this._onError(
441
+ null,
442
+ 'received invalid WebSocket event: expected an object with an own string type',
443
+ undefined,
444
+ );
445
+ return;
446
+ }
447
+
448
+ const eventType: string = event.type;
449
+ const reservedEventType =
450
+ eventType === 'raw' ||
451
+ eventType === 'close' ||
452
+ eventType === 'event' ||
453
+ eventType === 'reconnecting' ||
454
+ eventType === 'reconnected' ||
455
+ eventType === 'open' ||
456
+ eventType === 'error';
457
+ if (reservedEventType && eventType !== 'error') {
458
+ this._onError(null, 'received reserved WebSocket event type', undefined);
459
+ return;
460
+ }
461
+
373
462
  this._emit('event', event);
374
463
 
375
464
  if (event.type === 'error') {
@@ -6,6 +6,8 @@ import { SidebandWSBase, type SidebandWSBaseOptions, type SidebandWSParameters }
6
6
  import { OpenAI } from '../../../client';
7
7
  import { VERSION } from '../../../version';
8
8
 
9
+ export type { WebSocketStreamOptions } from '../../../internal/ws';
10
+
9
11
  export type { SidebandWSParameters, SidebandWSReconnectOptions } from './ws-base';
10
12
 
11
13
  export interface SidebandWSClientOptions extends WS.ClientOptions, SidebandWSBaseOptions {}
@@ -6,6 +6,8 @@ import { sleep } from '../../internal/utils/sleep';
6
6
  import { type WebSocketLike, ReadyState } from '../../internal/ws-adapter';
7
7
  import {
8
8
  SendQueue,
9
+ getMaxBufferedEvents,
10
+ type WebSocketStreamOptions,
9
11
  flattenRawData,
10
12
  isRecoverableClose,
11
13
  type RawWebSocketData,
@@ -51,11 +53,11 @@ export interface LiveWSBaseOptions {
51
53
  reconnect?: LiveWSReconnectOptions | null | undefined;
52
54
 
53
55
  /**
54
- * Maximum size of the outgoing message queue in bytes.
55
- * Messages queued while the socket is connecting or reconnecting are held
56
- * in memory up to this limit. Once the limit is reached, new messages are
57
- * discarded and an `error` event is emitted.
58
- * Default: 1 MB
56
+ * Byte budget for outgoing messages queued while the socket is connecting
57
+ * or reconnecting. An empty queue accepts one message even if it exceeds
58
+ * this budget. Further messages are discarded and an `error` event is emitted
59
+ * if the total queued size would exceed the budget.
60
+ * Default: 1 MiB (1,048,576 bytes).
59
61
  */
60
62
  maxQueueSize?: number | undefined;
61
63
  }
@@ -165,6 +167,11 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
165
167
  * The iterator will exit if the socket closes but exiting the iterator
166
168
  * does not close the socket.
167
169
  *
170
+ * Pass `maxBufferedEvents` to limit queued records for this iterator, including
171
+ * lifecycle events. Overflow discards its backlog and rejects `next()` with a
172
+ * WebSocketError; the shared socket and other iterators remain active.
173
+ * Omitted means unlimited. This is an event-count limit, not a byte limit.
174
+ *
168
175
  * @example
169
176
  * ```ts
170
177
  * for await (const event of client.stream()) {
@@ -182,26 +189,59 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
182
189
  * }
183
190
  * ```
184
191
  */
185
- stream(): AsyncIterableIterator<LiveStreamMessage> {
186
- return this[Symbol.asyncIterator]();
192
+ stream(options?: WebSocketStreamOptions): AsyncIterableIterator<LiveStreamMessage> {
193
+ return options === undefined ? this[Symbol.asyncIterator]() : this[Symbol.asyncIterator](options);
187
194
  }
188
195
 
189
- [Symbol.asyncIterator](): AsyncIterableIterator<LiveStreamMessage> {
196
+ [Symbol.asyncIterator](options?: WebSocketStreamOptions): AsyncIterableIterator<LiveStreamMessage> {
190
197
  if (!this.socket) {
191
198
  throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
192
199
  }
193
200
 
201
+ const maxBufferedEvents = getMaxBufferedEvents(options);
202
+
194
203
  // Two-queue async iterator: `queue` buffers incoming messages,
195
204
  // `resolvers` buffers waiting next() calls. A push wakes the
196
205
  // oldest next(); a next() drains the oldest message.
197
- const queue: LiveStreamMessage[] = [];
198
- const resolvers: (() => void)[] = [];
206
+ const queue: (LiveStreamMessage | undefined)[] = [];
207
+ const resolvers: ((() => void) | undefined)[] = [];
208
+ let queueHead = 0;
209
+ let resolverHead = 0;
199
210
  let done = false;
211
+ let failure: WebSocketError | undefined;
200
212
  let currentSocket = this.socket;
201
213
 
214
+ const wakeResolver = () => {
215
+ if (resolverHead >= resolvers.length) return;
216
+
217
+ const resolver = resolvers[resolverHead];
218
+ resolvers[resolverHead] = undefined;
219
+ resolverHead += 1;
220
+ if (resolverHead >= 64 && resolverHead * 2 >= resolvers.length) {
221
+ resolvers.splice(0, resolverHead);
222
+ resolverHead = 0;
223
+ }
224
+ resolver?.();
225
+ };
226
+
202
227
  const push = (msg: LiveStreamMessage) => {
228
+ if (done) return;
229
+
230
+ if (maxBufferedEvents !== undefined && queue.length - queueHead >= maxBufferedEvents) {
231
+ failure = new WebSocketError(
232
+ `WebSocket stream exceeded maxBufferedEvents (${maxBufferedEvents})`,
233
+ null,
234
+ );
235
+ done = true;
236
+ queue.length = 0;
237
+ queueHead = 0;
238
+ cleanup();
239
+ flushResolvers();
240
+ return;
241
+ }
242
+
203
243
  queue.push(msg);
204
- resolvers.shift()?.();
244
+ wakeResolver();
205
245
  };
206
246
 
207
247
  const onEvent = (event: LiveAPI.ServerEvent) => {
@@ -231,9 +271,14 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
231
271
  };
232
272
 
233
273
  const flushResolvers = () => {
234
- for (let resolver = resolvers.shift(); resolver; resolver = resolvers.shift()) {
235
- resolver();
274
+ while (resolverHead < resolvers.length) {
275
+ const resolver = resolvers[resolverHead];
276
+ resolvers[resolverHead] = undefined;
277
+ resolverHead += 1;
278
+ resolver?.();
236
279
  }
280
+ resolvers.length = 0;
281
+ resolverHead = 0;
237
282
  };
238
283
 
239
284
  const onClose = (code: number, reason: string, unsent: UnsentMessage<LiveAPI.ClientEvent>[]) => {
@@ -243,8 +288,9 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
243
288
  cleanup();
244
289
  };
245
290
 
246
- const onSocketSwap = (oldSocket: TSocket, newSocket: TSocket) => {
247
- oldSocket.off('open', onOpen);
291
+ const onSocketSwap = (_oldSocket: TSocket, newSocket: TSocket) => {
292
+ if (currentSocket === newSocket) return;
293
+ currentSocket.off('open', onOpen);
248
294
  newSocket.on('open', onOpen);
249
295
  currentSocket = newSocket;
250
296
  };
@@ -301,9 +347,21 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
301
347
  }
302
348
  }
303
349
 
304
- const resolve = (res: (value: IteratorResult<LiveStreamMessage>) => void) => {
305
- if (queue.length > 0) {
306
- res({ value: queue.shift()!, done: false });
350
+ const resolve = (
351
+ res: (value: IteratorResult<LiveStreamMessage>) => void,
352
+ reject: (error: WebSocketError) => void,
353
+ ) => {
354
+ if (failure) {
355
+ reject(failure);
356
+ } else if (queueHead < queue.length) {
357
+ const queued = queue[queueHead]!;
358
+ queue[queueHead] = undefined;
359
+ queueHead += 1;
360
+ if (queueHead >= 64 && queueHead * 2 >= queue.length) {
361
+ queue.splice(0, queueHead);
362
+ queueHead = 0;
363
+ }
364
+ res({ value: queued, done: false });
307
365
  } else if (done) {
308
366
  res({ value: undefined, done: true });
309
367
  } else {
@@ -313,10 +371,10 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
313
371
  };
314
372
 
315
373
  const next = (): Promise<IteratorResult<LiveStreamMessage>> =>
316
- new Promise((res) => {
317
- if (resolve(res)) return;
374
+ new Promise((res, reject) => {
375
+ if (resolve(res, reject)) return;
318
376
  resolvers.push(() => {
319
- resolve(res);
377
+ resolve(res, reject);
320
378
  });
321
379
  });
322
380
 
@@ -324,6 +382,8 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
324
382
  next,
325
383
  return: (): Promise<IteratorReturnResult<undefined>> => {
326
384
  done = true;
385
+ queue.length = 0;
386
+ queueHead = 0;
327
387
  cleanup();
328
388
  flushResolvers();
329
389
  return Promise.resolve({ value: undefined, done: true });
@@ -356,6 +416,35 @@ export abstract class LiveWSBase<TSocket extends WebSocketLike> extends LiveEmit
356
416
  return;
357
417
  }
358
418
 
419
+ if (
420
+ event === null ||
421
+ typeof event !== 'object' ||
422
+ Array.isArray(event) ||
423
+ !Object.prototype.hasOwnProperty.call(event, 'type') ||
424
+ typeof event.type !== 'string'
425
+ ) {
426
+ this._onError(
427
+ null,
428
+ 'received invalid WebSocket event: expected an object with an own string type',
429
+ undefined,
430
+ );
431
+ return;
432
+ }
433
+
434
+ const eventType: string = event.type;
435
+ const reservedEventType =
436
+ eventType === 'raw' ||
437
+ eventType === 'close' ||
438
+ eventType === 'event' ||
439
+ eventType === 'reconnecting' ||
440
+ eventType === 'reconnected' ||
441
+ eventType === 'open' ||
442
+ eventType === 'error';
443
+ if (reservedEventType && eventType !== 'error') {
444
+ this._onError(null, 'received reserved WebSocket event type', undefined);
445
+ return;
446
+ }
447
+
359
448
  this._emit('event', event);
360
449
 
361
450
  if (event.type === 'error') {
@@ -6,6 +6,8 @@ import { LiveWSBase, type LiveWSBaseOptions } from './ws-base';
6
6
  import { OpenAI } from '../../client';
7
7
  import { VERSION } from '../../version';
8
8
 
9
+ export type { WebSocketStreamOptions } from '../../internal/ws';
10
+
9
11
  export type { LiveWSReconnectOptions } from './ws-base';
10
12
 
11
13
  export interface LiveWSClientOptions extends WS.ClientOptions, LiveWSBaseOptions {}
@@ -75,6 +75,11 @@ export abstract class ResponsesEmitter extends EventEmitter<WebSocketEvents> {
75
75
  protected _onError(event: WebSocketErrorEvent | null, message?: string | undefined, cause?: any): void {
76
76
  const eventMessage = event && ('error' in event ? event.error?.message : event.message);
77
77
  message = message ?? eventMessage ?? safeJSONStringify(event) ?? 'unknown error';
78
+ try {
79
+ message = String(message);
80
+ } catch {
81
+ message = '[unserializable error value]';
82
+ }
78
83
 
79
84
  if (!this._hasListener('error')) {
80
85
  const error = new WebSocketError(
@@ -6,6 +6,8 @@ import { sleep } from '../../internal/utils/sleep';
6
6
  import { type WebSocketLike, ReadyState } from '../../internal/ws-adapter';
7
7
  import {
8
8
  SendQueue,
9
+ getMaxBufferedEvents,
10
+ type WebSocketStreamOptions,
9
11
  flattenRawData,
10
12
  isRecoverableClose,
11
13
  type RawWebSocketData,
@@ -51,11 +53,11 @@ export interface ResponsesWSBaseOptions {
51
53
  reconnect?: ResponsesWSReconnectOptions | null | undefined;
52
54
 
53
55
  /**
54
- * Maximum size of the outgoing message queue in bytes.
55
- * Messages queued while the socket is connecting or reconnecting are held
56
- * in memory up to this limit. Once the limit is reached, new messages are
57
- * discarded and an `error` event is emitted.
58
- * Default: 1 MB
56
+ * Byte budget for outgoing messages queued while the socket is connecting
57
+ * or reconnecting. An empty queue accepts one message even if it exceeds
58
+ * this budget. Further messages are discarded and an `error` event is emitted
59
+ * if the total queued size would exceed the budget.
60
+ * Default: 1 MiB (1,048,576 bytes).
59
61
  */
60
62
  maxQueueSize?: number | undefined;
61
63
  }
@@ -165,6 +167,11 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
165
167
  * The iterator will exit if the socket closes but exiting the iterator
166
168
  * does not close the socket.
167
169
  *
170
+ * Pass `maxBufferedEvents` to limit queued records for this iterator, including
171
+ * lifecycle events. Overflow discards its backlog and rejects `next()` with a
172
+ * WebSocketError; the shared socket and other iterators remain active.
173
+ * Omitted means unlimited. This is an event-count limit, not a byte limit.
174
+ *
168
175
  * @example
169
176
  * ```ts
170
177
  * for await (const event of client.stream()) {
@@ -182,26 +189,59 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
182
189
  * }
183
190
  * ```
184
191
  */
185
- stream(): AsyncIterableIterator<ResponsesStreamMessage> {
186
- return this[Symbol.asyncIterator]();
192
+ stream(options?: WebSocketStreamOptions): AsyncIterableIterator<ResponsesStreamMessage> {
193
+ return options === undefined ? this[Symbol.asyncIterator]() : this[Symbol.asyncIterator](options);
187
194
  }
188
195
 
189
- [Symbol.asyncIterator](): AsyncIterableIterator<ResponsesStreamMessage> {
196
+ [Symbol.asyncIterator](options?: WebSocketStreamOptions): AsyncIterableIterator<ResponsesStreamMessage> {
190
197
  if (!this.socket) {
191
198
  throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
192
199
  }
193
200
 
201
+ const maxBufferedEvents = getMaxBufferedEvents(options);
202
+
194
203
  // Two-queue async iterator: `queue` buffers incoming messages,
195
204
  // `resolvers` buffers waiting next() calls. A push wakes the
196
205
  // oldest next(); a next() drains the oldest message.
197
- const queue: ResponsesStreamMessage[] = [];
198
- const resolvers: (() => void)[] = [];
206
+ const queue: (ResponsesStreamMessage | undefined)[] = [];
207
+ const resolvers: ((() => void) | undefined)[] = [];
208
+ let queueHead = 0;
209
+ let resolverHead = 0;
199
210
  let done = false;
211
+ let failure: WebSocketError | undefined;
200
212
  let currentSocket = this.socket;
201
213
 
214
+ const wakeResolver = () => {
215
+ if (resolverHead >= resolvers.length) return;
216
+
217
+ const resolver = resolvers[resolverHead];
218
+ resolvers[resolverHead] = undefined;
219
+ resolverHead += 1;
220
+ if (resolverHead >= 64 && resolverHead * 2 >= resolvers.length) {
221
+ resolvers.splice(0, resolverHead);
222
+ resolverHead = 0;
223
+ }
224
+ resolver?.();
225
+ };
226
+
202
227
  const push = (msg: ResponsesStreamMessage) => {
228
+ if (done) return;
229
+
230
+ if (maxBufferedEvents !== undefined && queue.length - queueHead >= maxBufferedEvents) {
231
+ failure = new WebSocketError(
232
+ `WebSocket stream exceeded maxBufferedEvents (${maxBufferedEvents})`,
233
+ null,
234
+ );
235
+ done = true;
236
+ queue.length = 0;
237
+ queueHead = 0;
238
+ cleanup();
239
+ flushResolvers();
240
+ return;
241
+ }
242
+
203
243
  queue.push(msg);
204
- resolvers.shift()?.();
244
+ wakeResolver();
205
245
  };
206
246
 
207
247
  const onEvent = (event: ResponsesAPI.ResponsesServerEvent) => {
@@ -231,9 +271,14 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
231
271
  };
232
272
 
233
273
  const flushResolvers = () => {
234
- for (let resolver = resolvers.shift(); resolver; resolver = resolvers.shift()) {
235
- resolver();
274
+ while (resolverHead < resolvers.length) {
275
+ const resolver = resolvers[resolverHead];
276
+ resolvers[resolverHead] = undefined;
277
+ resolverHead += 1;
278
+ resolver?.();
236
279
  }
280
+ resolvers.length = 0;
281
+ resolverHead = 0;
237
282
  };
238
283
 
239
284
  const onClose = (
@@ -247,8 +292,9 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
247
292
  cleanup();
248
293
  };
249
294
 
250
- const onSocketSwap = (oldSocket: TSocket, newSocket: TSocket) => {
251
- oldSocket.off('open', onOpen);
295
+ const onSocketSwap = (_oldSocket: TSocket, newSocket: TSocket) => {
296
+ if (currentSocket === newSocket) return;
297
+ currentSocket.off('open', onOpen);
252
298
  newSocket.on('open', onOpen);
253
299
  currentSocket = newSocket;
254
300
  };
@@ -305,9 +351,21 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
305
351
  }
306
352
  }
307
353
 
308
- const resolve = (res: (value: IteratorResult<ResponsesStreamMessage>) => void) => {
309
- if (queue.length > 0) {
310
- res({ value: queue.shift()!, done: false });
354
+ const resolve = (
355
+ res: (value: IteratorResult<ResponsesStreamMessage>) => void,
356
+ reject: (error: WebSocketError) => void,
357
+ ) => {
358
+ if (failure) {
359
+ reject(failure);
360
+ } else if (queueHead < queue.length) {
361
+ const queued = queue[queueHead]!;
362
+ queue[queueHead] = undefined;
363
+ queueHead += 1;
364
+ if (queueHead >= 64 && queueHead * 2 >= queue.length) {
365
+ queue.splice(0, queueHead);
366
+ queueHead = 0;
367
+ }
368
+ res({ value: queued, done: false });
311
369
  } else if (done) {
312
370
  res({ value: undefined, done: true });
313
371
  } else {
@@ -317,10 +375,10 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
317
375
  };
318
376
 
319
377
  const next = (): Promise<IteratorResult<ResponsesStreamMessage>> =>
320
- new Promise((res) => {
321
- if (resolve(res)) return;
378
+ new Promise((res, reject) => {
379
+ if (resolve(res, reject)) return;
322
380
  resolvers.push(() => {
323
- resolve(res);
381
+ resolve(res, reject);
324
382
  });
325
383
  });
326
384
 
@@ -328,6 +386,8 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
328
386
  next,
329
387
  return: (): Promise<IteratorReturnResult<undefined>> => {
330
388
  done = true;
389
+ queue.length = 0;
390
+ queueHead = 0;
331
391
  cleanup();
332
392
  flushResolvers();
333
393
  return Promise.resolve({ value: undefined, done: true });
@@ -360,6 +420,35 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
360
420
  return;
361
421
  }
362
422
 
423
+ if (
424
+ event === null ||
425
+ typeof event !== 'object' ||
426
+ Array.isArray(event) ||
427
+ !Object.prototype.hasOwnProperty.call(event, 'type') ||
428
+ typeof event.type !== 'string'
429
+ ) {
430
+ this._onError(
431
+ null,
432
+ 'received invalid WebSocket event: expected an object with an own string type',
433
+ undefined,
434
+ );
435
+ return;
436
+ }
437
+
438
+ const eventType: string = event.type;
439
+ const reservedEventType =
440
+ eventType === 'raw' ||
441
+ eventType === 'close' ||
442
+ eventType === 'event' ||
443
+ eventType === 'reconnecting' ||
444
+ eventType === 'reconnected' ||
445
+ eventType === 'open' ||
446
+ eventType === 'error';
447
+ if (reservedEventType && eventType !== 'error') {
448
+ this._onError(null, 'received reserved WebSocket event type', undefined);
449
+ return;
450
+ }
451
+
363
452
  this._emit('event', event);
364
453
 
365
454
  if (event.type === 'error') {