openai 7.25.0 → 7.26.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 (308) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/client.d.mts +5 -6
  3. package/client.d.mts.map +1 -1
  4. package/client.d.ts +5 -6
  5. package/client.d.ts.map +1 -1
  6. package/client.js +38 -10
  7. package/client.js.map +1 -1
  8. package/client.mjs +39 -11
  9. package/client.mjs.map +1 -1
  10. package/core/streaming.d.mts +4 -0
  11. package/core/streaming.d.mts.map +1 -1
  12. package/core/streaming.d.ts +4 -0
  13. package/core/streaming.d.ts.map +1 -1
  14. package/core/streaming.js +6 -0
  15. package/core/streaming.js.map +1 -1
  16. package/core/streaming.mjs +6 -0
  17. package/core/streaming.mjs.map +1 -1
  18. package/helpers/beta/agents/standard-schema.d.mts +7 -0
  19. package/helpers/beta/agents/standard-schema.d.mts.map +1 -0
  20. package/helpers/beta/agents/standard-schema.d.ts +7 -0
  21. package/helpers/beta/agents/standard-schema.d.ts.map +1 -0
  22. package/helpers/beta/agents/standard-schema.js +12 -0
  23. package/helpers/beta/agents/standard-schema.js.map +1 -0
  24. package/helpers/beta/agents/standard-schema.mjs +9 -0
  25. package/helpers/beta/agents/standard-schema.mjs.map +1 -0
  26. package/helpers/beta/agents/zod.d.mts +10 -0
  27. package/helpers/beta/agents/zod.d.mts.map +1 -0
  28. package/helpers/beta/agents/zod.d.ts +10 -0
  29. package/helpers/beta/agents/zod.d.ts.map +1 -0
  30. package/helpers/beta/agents/zod.js +12 -0
  31. package/helpers/beta/agents/zod.js.map +1 -0
  32. package/helpers/beta/agents/zod.mjs +9 -0
  33. package/helpers/beta/agents/zod.mjs.map +1 -0
  34. package/internal/realtime-credentials.d.mts +22 -1
  35. package/internal/realtime-credentials.d.mts.map +1 -1
  36. package/internal/realtime-credentials.d.ts +22 -1
  37. package/internal/realtime-credentials.d.ts.map +1 -1
  38. package/internal/realtime-credentials.js +48 -4
  39. package/internal/realtime-credentials.js.map +1 -1
  40. package/internal/realtime-credentials.mjs +45 -4
  41. package/internal/realtime-credentials.mjs.map +1 -1
  42. package/internal/responses-ws-credentials.d.mts +23 -0
  43. package/internal/responses-ws-credentials.d.mts.map +1 -0
  44. package/internal/responses-ws-credentials.d.ts +23 -0
  45. package/internal/responses-ws-credentials.d.ts.map +1 -0
  46. package/internal/responses-ws-credentials.js +108 -0
  47. package/internal/responses-ws-credentials.js.map +1 -0
  48. package/internal/responses-ws-credentials.mjs +104 -0
  49. package/internal/responses-ws-credentials.mjs.map +1 -0
  50. package/internal/ws-adapter-node.d.mts +4 -0
  51. package/internal/ws-adapter-node.d.mts.map +1 -1
  52. package/internal/ws-adapter-node.d.ts +4 -0
  53. package/internal/ws-adapter-node.d.ts.map +1 -1
  54. package/internal/ws-adapter-node.js +56 -0
  55. package/internal/ws-adapter-node.js.map +1 -1
  56. package/internal/ws-adapter-node.mjs +55 -0
  57. package/internal/ws-adapter-node.mjs.map +1 -1
  58. package/internal/ws.d.mts +27 -4
  59. package/internal/ws.d.mts.map +1 -1
  60. package/internal/ws.d.ts +27 -4
  61. package/internal/ws.d.ts.map +1 -1
  62. package/internal/ws.js +105 -5
  63. package/internal/ws.js.map +1 -1
  64. package/internal/ws.mjs +102 -4
  65. package/internal/ws.mjs.map +1 -1
  66. package/lib/agents/agent-session-stream.d.mts +13 -4
  67. package/lib/agents/agent-session-stream.d.mts.map +1 -1
  68. package/lib/agents/agent-session-stream.d.ts +13 -4
  69. package/lib/agents/agent-session-stream.d.ts.map +1 -1
  70. package/lib/agents/agent-session-stream.js +24 -21
  71. package/lib/agents/agent-session-stream.js.map +1 -1
  72. package/lib/agents/agent-session-stream.mjs +24 -21
  73. package/lib/agents/agent-session-stream.mjs.map +1 -1
  74. package/lib/beta/agents/agent-session-create-stream.d.mts +15 -0
  75. package/lib/beta/agents/agent-session-create-stream.d.mts.map +1 -0
  76. package/lib/beta/agents/agent-session-create-stream.d.ts +15 -0
  77. package/lib/beta/agents/agent-session-create-stream.d.ts.map +1 -0
  78. package/lib/beta/agents/agent-session-create-stream.js +25 -0
  79. package/lib/beta/agents/agent-session-create-stream.js.map +1 -0
  80. package/lib/beta/agents/agent-session-create-stream.mjs +22 -0
  81. package/lib/beta/agents/agent-session-create-stream.mjs.map +1 -0
  82. package/lib/beta/agents/agent-turn-result-collector.d.mts +17 -0
  83. package/lib/beta/agents/agent-turn-result-collector.d.mts.map +1 -0
  84. package/lib/beta/agents/agent-turn-result-collector.d.ts +17 -0
  85. package/lib/beta/agents/agent-turn-result-collector.d.ts.map +1 -0
  86. package/lib/beta/agents/agent-turn-result-collector.js +99 -0
  87. package/lib/beta/agents/agent-turn-result-collector.js.map +1 -0
  88. package/lib/beta/agents/agent-turn-result-collector.mjs +95 -0
  89. package/lib/beta/agents/agent-turn-result-collector.mjs.map +1 -0
  90. package/lib/beta/agents/agent-turn-result-error.d.mts +16 -0
  91. package/lib/beta/agents/agent-turn-result-error.d.mts.map +1 -0
  92. package/lib/beta/agents/agent-turn-result-error.d.ts +16 -0
  93. package/lib/beta/agents/agent-turn-result-error.d.ts.map +1 -0
  94. package/lib/beta/agents/agent-turn-result-error.js +22 -0
  95. package/lib/beta/agents/agent-turn-result-error.js.map +1 -0
  96. package/lib/beta/agents/agent-turn-result-error.mjs +18 -0
  97. package/lib/beta/agents/agent-turn-result-error.mjs.map +1 -0
  98. package/lib/beta/agents/agent-turn-result.d.mts +12 -0
  99. package/lib/beta/agents/agent-turn-result.d.mts.map +1 -0
  100. package/lib/beta/agents/agent-turn-result.d.ts +12 -0
  101. package/lib/beta/agents/agent-turn-result.d.ts.map +1 -0
  102. package/lib/beta/agents/agent-turn-result.js +22 -0
  103. package/lib/beta/agents/agent-turn-result.js.map +1 -0
  104. package/lib/beta/agents/agent-turn-result.mjs +18 -0
  105. package/lib/beta/agents/agent-turn-result.mjs.map +1 -0
  106. package/lib/beta/agents/function-tool.d.mts +27 -0
  107. package/lib/beta/agents/function-tool.d.mts.map +1 -0
  108. package/lib/beta/agents/function-tool.d.ts +27 -0
  109. package/lib/beta/agents/function-tool.d.ts.map +1 -0
  110. package/lib/beta/agents/function-tool.js +48 -0
  111. package/lib/beta/agents/function-tool.js.map +1 -0
  112. package/lib/beta/agents/function-tool.mjs +45 -0
  113. package/lib/beta/agents/function-tool.mjs.map +1 -0
  114. package/lib/beta/agents/output-format-types.d.mts +11 -0
  115. package/lib/beta/agents/output-format-types.d.mts.map +1 -0
  116. package/lib/beta/agents/output-format-types.d.ts +11 -0
  117. package/lib/beta/agents/output-format-types.d.ts.map +1 -0
  118. package/lib/beta/agents/output-format-types.js +3 -0
  119. package/lib/beta/agents/output-format-types.js.map +1 -0
  120. package/lib/beta/agents/output-format-types.mjs +2 -0
  121. package/lib/beta/agents/output-format-types.mjs.map +1 -0
  122. package/lib/beta/agents/output-format.d.mts +8 -0
  123. package/lib/beta/agents/output-format.d.mts.map +1 -0
  124. package/lib/beta/agents/output-format.d.ts +8 -0
  125. package/lib/beta/agents/output-format.d.ts.map +1 -0
  126. package/lib/beta/agents/output-format.js +20 -0
  127. package/lib/beta/agents/output-format.js.map +1 -0
  128. package/lib/beta/agents/output-format.mjs +14 -0
  129. package/lib/beta/agents/output-format.mjs.map +1 -0
  130. package/lib/beta/agents/output-parse-error.d.mts +11 -0
  131. package/lib/beta/agents/output-parse-error.d.mts.map +1 -0
  132. package/lib/beta/agents/output-parse-error.d.ts +11 -0
  133. package/lib/beta/agents/output-parse-error.d.ts.map +1 -0
  134. package/lib/beta/agents/output-parse-error.js +22 -0
  135. package/lib/beta/agents/output-parse-error.js.map +1 -0
  136. package/lib/beta/agents/output-parse-error.mjs +18 -0
  137. package/lib/beta/agents/output-parse-error.mjs.map +1 -0
  138. package/lib/beta/agents/parse-result.d.mts +95 -0
  139. package/lib/beta/agents/parse-result.d.mts.map +1 -0
  140. package/lib/beta/agents/parse-result.d.ts +95 -0
  141. package/lib/beta/agents/parse-result.d.ts.map +1 -0
  142. package/lib/beta/agents/parse-result.js +116 -0
  143. package/lib/beta/agents/parse-result.js.map +1 -0
  144. package/lib/beta/agents/parse-result.mjs +110 -0
  145. package/lib/beta/agents/parse-result.mjs.map +1 -0
  146. package/lib/beta/agents/parsed-agent-turn-result.d.mts +8 -0
  147. package/lib/beta/agents/parsed-agent-turn-result.d.mts.map +1 -0
  148. package/lib/beta/agents/parsed-agent-turn-result.d.ts +8 -0
  149. package/lib/beta/agents/parsed-agent-turn-result.d.ts.map +1 -0
  150. package/lib/beta/agents/parsed-agent-turn-result.js +14 -0
  151. package/lib/beta/agents/parsed-agent-turn-result.js.map +1 -0
  152. package/lib/beta/agents/parsed-agent-turn-result.mjs +10 -0
  153. package/lib/beta/agents/parsed-agent-turn-result.mjs.map +1 -0
  154. package/lib/beta/agents/result-collection.d.mts +15 -0
  155. package/lib/beta/agents/result-collection.d.mts.map +1 -0
  156. package/lib/beta/agents/result-collection.d.ts +15 -0
  157. package/lib/beta/agents/result-collection.d.ts.map +1 -0
  158. package/lib/beta/agents/result-collection.js +110 -0
  159. package/lib/beta/agents/result-collection.js.map +1 -0
  160. package/lib/beta/agents/result-collection.mjs +106 -0
  161. package/lib/beta/agents/result-collection.mjs.map +1 -0
  162. package/lib/beta/agents/tool-output.d.mts +7 -0
  163. package/lib/beta/agents/tool-output.d.mts.map +1 -0
  164. package/lib/beta/agents/tool-output.d.ts +7 -0
  165. package/lib/beta/agents/tool-output.d.ts.map +1 -0
  166. package/lib/beta/agents/tool-output.js +26 -0
  167. package/lib/beta/agents/tool-output.js.map +1 -0
  168. package/lib/beta/agents/tool-output.mjs +23 -0
  169. package/lib/beta/agents/tool-output.mjs.map +1 -0
  170. package/lib/responses/responses-websocket-session.d.mts +1 -1
  171. package/lib/responses/responses-websocket-session.d.mts.map +1 -1
  172. package/lib/responses/responses-websocket-session.d.ts +1 -1
  173. package/lib/responses/responses-websocket-session.d.ts.map +1 -1
  174. package/lib/responses/responses-websocket-session.js +12 -2
  175. package/lib/responses/responses-websocket-session.js.map +1 -1
  176. package/lib/responses/responses-websocket-session.mjs +12 -2
  177. package/lib/responses/responses-websocket-session.mjs.map +1 -1
  178. package/package.json +1 -1
  179. package/resources/beta/agents/agents.d.mts +9 -0
  180. package/resources/beta/agents/agents.d.mts.map +1 -1
  181. package/resources/beta/agents/agents.d.ts +9 -0
  182. package/resources/beta/agents/agents.d.ts.map +1 -1
  183. package/resources/beta/agents/agents.js.map +1 -1
  184. package/resources/beta/agents/agents.mjs.map +1 -1
  185. package/resources/beta/agents/sessions/events.d.mts +6 -5
  186. package/resources/beta/agents/sessions/events.d.mts.map +1 -1
  187. package/resources/beta/agents/sessions/events.d.ts +6 -5
  188. package/resources/beta/agents/sessions/events.d.ts.map +1 -1
  189. package/resources/beta/agents/sessions/events.js +6 -5
  190. package/resources/beta/agents/sessions/events.js.map +1 -1
  191. package/resources/beta/agents/sessions/events.mjs +6 -5
  192. package/resources/beta/agents/sessions/events.mjs.map +1 -1
  193. package/resources/beta/agents/sessions/index.d.mts +1 -0
  194. package/resources/beta/agents/sessions/index.d.mts.map +1 -1
  195. package/resources/beta/agents/sessions/index.d.ts +1 -0
  196. package/resources/beta/agents/sessions/index.d.ts.map +1 -1
  197. package/resources/beta/agents/sessions/index.js +3 -1
  198. package/resources/beta/agents/sessions/index.js.map +1 -1
  199. package/resources/beta/agents/sessions/index.mjs +1 -0
  200. package/resources/beta/agents/sessions/index.mjs.map +1 -1
  201. package/resources/beta/agents/sessions/sessions.d.mts +16 -4
  202. package/resources/beta/agents/sessions/sessions.d.mts.map +1 -1
  203. package/resources/beta/agents/sessions/sessions.d.ts +16 -4
  204. package/resources/beta/agents/sessions/sessions.d.ts.map +1 -1
  205. package/resources/beta/agents/sessions/sessions.js +17 -4
  206. package/resources/beta/agents/sessions/sessions.js.map +1 -1
  207. package/resources/beta/agents/sessions/sessions.mjs +17 -4
  208. package/resources/beta/agents/sessions/sessions.mjs.map +1 -1
  209. package/resources/beta/agents/sessions/traces.d.mts +68 -0
  210. package/resources/beta/agents/sessions/traces.d.mts.map +1 -0
  211. package/resources/beta/agents/sessions/traces.d.ts +68 -0
  212. package/resources/beta/agents/sessions/traces.d.ts.map +1 -0
  213. package/resources/beta/agents/sessions/traces.js +81 -0
  214. package/resources/beta/agents/sessions/traces.js.map +1 -0
  215. package/resources/beta/agents/sessions/traces.mjs +77 -0
  216. package/resources/beta/agents/sessions/traces.mjs.map +1 -0
  217. package/resources/beta/responses/ws-base.d.mts +3 -1
  218. package/resources/beta/responses/ws-base.d.mts.map +1 -1
  219. package/resources/beta/responses/ws-base.d.ts +3 -1
  220. package/resources/beta/responses/ws-base.d.ts.map +1 -1
  221. package/resources/beta/responses/ws-base.js +35 -6
  222. package/resources/beta/responses/ws-base.js.map +1 -1
  223. package/resources/beta/responses/ws-base.mjs +35 -6
  224. package/resources/beta/responses/ws-base.mjs.map +1 -1
  225. package/resources/beta/responses/ws.d.mts +10 -0
  226. package/resources/beta/responses/ws.d.mts.map +1 -1
  227. package/resources/beta/responses/ws.d.ts +10 -0
  228. package/resources/beta/responses/ws.d.ts.map +1 -1
  229. package/resources/beta/responses/ws.js +23 -22
  230. package/resources/beta/responses/ws.js.map +1 -1
  231. package/resources/beta/responses/ws.mjs +24 -23
  232. package/resources/beta/responses/ws.mjs.map +1 -1
  233. package/resources/chat/completions/completions.d.mts +1 -1
  234. package/resources/chat/completions/completions.d.mts.map +1 -1
  235. package/resources/chat/completions/completions.d.ts +1 -1
  236. package/resources/chat/completions/completions.d.ts.map +1 -1
  237. package/resources/evals/runs/runs.js +1 -1
  238. package/resources/evals/runs/runs.js.map +1 -1
  239. package/resources/evals/runs/runs.mjs +1 -1
  240. package/resources/evals/runs/runs.mjs.map +1 -1
  241. package/resources/live/forks/forks.d.mts +5 -1
  242. package/resources/live/forks/forks.d.mts.map +1 -1
  243. package/resources/live/forks/forks.d.ts +5 -1
  244. package/resources/live/forks/forks.d.ts.map +1 -1
  245. package/resources/live/live.d.mts +5 -1
  246. package/resources/live/live.d.mts.map +1 -1
  247. package/resources/live/live.d.ts +5 -1
  248. package/resources/live/live.d.ts.map +1 -1
  249. package/resources/live/live.js.map +1 -1
  250. package/resources/live/live.mjs.map +1 -1
  251. package/resources/responses/ws-base.d.mts +3 -1
  252. package/resources/responses/ws-base.d.mts.map +1 -1
  253. package/resources/responses/ws-base.d.ts +3 -1
  254. package/resources/responses/ws-base.d.ts.map +1 -1
  255. package/resources/responses/ws-base.js +35 -6
  256. package/resources/responses/ws-base.js.map +1 -1
  257. package/resources/responses/ws-base.mjs +35 -6
  258. package/resources/responses/ws-base.mjs.map +1 -1
  259. package/resources/responses/ws.d.mts +10 -0
  260. package/resources/responses/ws.d.mts.map +1 -1
  261. package/resources/responses/ws.d.ts +10 -0
  262. package/resources/responses/ws.d.ts.map +1 -1
  263. package/resources/responses/ws.js +23 -22
  264. package/resources/responses/ws.js.map +1 -1
  265. package/resources/responses/ws.mjs +24 -23
  266. package/resources/responses/ws.mjs.map +1 -1
  267. package/src/client.ts +55 -19
  268. package/src/core/streaming.ts +9 -0
  269. package/src/helpers/beta/agents/standard-schema.ts +13 -0
  270. package/src/helpers/beta/agents/zod.ts +10 -0
  271. package/src/internal/realtime-credentials.ts +70 -4
  272. package/src/internal/responses-ws-credentials.ts +160 -0
  273. package/src/internal/ws-adapter-node.ts +66 -0
  274. package/src/internal/ws.ts +139 -11
  275. package/src/lib/agents/agent-session-stream.ts +36 -24
  276. package/src/lib/beta/agents/agent-session-create-stream.ts +36 -0
  277. package/src/lib/beta/agents/agent-turn-result-collector.ts +122 -0
  278. package/src/lib/beta/agents/agent-turn-result-error.ts +33 -0
  279. package/src/lib/beta/agents/agent-turn-result.ts +22 -0
  280. package/src/lib/beta/agents/function-tool.ts +60 -0
  281. package/src/lib/beta/agents/output-format-types.ts +12 -0
  282. package/src/lib/beta/agents/output-format.ts +20 -0
  283. package/src/lib/beta/agents/output-parse-error.ts +16 -0
  284. package/src/lib/beta/agents/parse-result.ts +133 -0
  285. package/src/lib/beta/agents/parsed-agent-turn-result.ts +12 -0
  286. package/src/lib/beta/agents/result-collection.ts +115 -0
  287. package/src/lib/beta/agents/tool-output.ts +22 -0
  288. package/src/lib/responses/responses-websocket-session.ts +14 -3
  289. package/src/resources/beta/agents/agents.ts +11 -0
  290. package/src/resources/beta/agents/sessions/events.ts +6 -5
  291. package/src/resources/beta/agents/sessions/index.ts +1 -0
  292. package/src/resources/beta/agents/sessions/sessions.ts +48 -18
  293. package/src/resources/beta/agents/sessions/traces.ts +298 -0
  294. package/src/resources/beta/responses/ws-base.ts +40 -6
  295. package/src/resources/beta/responses/ws.ts +37 -27
  296. package/src/resources/chat/completions/completions.ts +1 -1
  297. package/src/resources/evals/runs/runs.ts +1 -1
  298. package/src/resources/live/forks/forks.ts +6 -1
  299. package/src/resources/live/live.ts +6 -1
  300. package/src/resources/responses/ws-base.ts +40 -6
  301. package/src/resources/responses/ws.ts +37 -27
  302. package/src/tsconfig.dist-src-node.d.ts +7 -0
  303. package/src/tsconfig.dist-src.d.ts +3 -1
  304. package/src/version.ts +1 -1
  305. package/version.d.mts +1 -1
  306. package/version.d.ts +1 -1
  307. package/version.js +1 -1
  308. package/version.mjs +1 -1
@@ -0,0 +1,298 @@
1
+ // File generated from our OpenAPI spec by Castiron. See CONTRIBUTING.md for details.
2
+
3
+ import { APIResource } from '../../../../core/resource';
4
+ import { CursorPage, type CursorPageParams, PagePromise } from '../../../../core/pagination';
5
+ import { buildHeaders } from '../../../../internal/headers';
6
+ import { RequestOptions } from '../../../../internal/request-options';
7
+ import { path } from '../../../../internal/utils/path';
8
+
9
+ function resolveResourceRequestOptions(
10
+ options: RequestOptions | undefined,
11
+ buildOptions: (options: RequestOptions | undefined) => RequestOptions | Promise<RequestOptions>,
12
+ ): Promise<RequestOptions> {
13
+ return Promise.resolve(options).then(buildOptions);
14
+ }
15
+
16
+ // Recognizable options across SDK runtime versions. Keep this independent of
17
+ // private RequestOptions fields so older handwritten runtimes still compile.
18
+ const normalizeRequestOptionsForQueryKeys = new Set([
19
+ 'method',
20
+ 'path',
21
+ 'query',
22
+ 'body',
23
+ 'headers',
24
+ 'maxRetries',
25
+ 'stream',
26
+ 'timeout',
27
+ 'httpAgent',
28
+ 'fetchOptions',
29
+ 'signal',
30
+ 'idempotencyKey',
31
+ 'defaultBaseURL',
32
+ '__metadata',
33
+ '__binaryRequest',
34
+ '__binaryResponse',
35
+ '__streamClass',
36
+ '__security',
37
+ '__synthesizeEventData',
38
+ ]);
39
+
40
+ function normalizeRequestOptionsForQuery(
41
+ value: unknown,
42
+ queryKeys: ReadonlyArray<string>,
43
+ options: RequestOptions | undefined,
44
+ ):
45
+ | ({
46
+ [K in 'headers' | 'maxRetries' | 'timeout' | 'signal' | 'idempotencyKey' | 'query']?: RequestOptions[K];
47
+ } & {
48
+ [
49
+ K in
50
+ | 'method'
51
+ | 'path'
52
+ | 'body'
53
+ | 'stream'
54
+ | 'httpAgent'
55
+ | 'fetchOptions'
56
+ | 'defaultBaseURL'
57
+ | '__metadata'
58
+ | '__binaryRequest'
59
+ | '__binaryResponse'
60
+ | '__streamClass'
61
+ | '__security'
62
+ | '__synthesizeEventData'
63
+ ]?: never;
64
+ })
65
+ | undefined {
66
+ if (typeof value !== 'object' || value === null) return undefined;
67
+ // Optional never fields can still be explicitly undefined unless consumers
68
+ // enable exactOptionalPropertyTypes. Snapshot data without invoking getters.
69
+ const entries = Object.entries(Object.getOwnPropertyDescriptors(value)).filter(
70
+ ([, descriptor]) => descriptor.enumerable && (!('value' in descriptor) || descriptor.value !== undefined),
71
+ );
72
+ const keys = entries.map(([key]) => key);
73
+ const requestOnly = keys.some(
74
+ (key) => normalizeRequestOptionsForQueryKeys.has(key) && !queryKeys.includes(key),
75
+ );
76
+ if (!requestOnly) return undefined;
77
+ // Declared query fields, including stream, must use the query argument.
78
+ // Mixing them with request-only options is ambiguous and could change the return type.
79
+ if (
80
+ options !== undefined ||
81
+ keys.some((key) => !normalizeRequestOptionsForQueryKeys.has(key) || queryKeys.includes(key))
82
+ ) {
83
+ throw new TypeError('Query parameters and request options must be passed as separate arguments.');
84
+ }
85
+ // The query position must not gain authority to change the request destination
86
+ // or transport. Those overrides require the explicit request options argument.
87
+ if (
88
+ keys.some(
89
+ (key) => !['headers', 'maxRetries', 'timeout', 'signal', 'idempotencyKey', 'query'].includes(key),
90
+ )
91
+ ) {
92
+ throw new TypeError('Pass transport overrides in the explicit request options argument.');
93
+ }
94
+ // Copy only the validated fields. Spreading value would reintroduce undefined
95
+ // transport overrides, and deleting them would mutate the caller's object.
96
+ return Object.fromEntries(
97
+ entries.map(([key, descriptor]) => {
98
+ if ('value' in descriptor) return [key, descriptor.value];
99
+ return [key, descriptor.get ? Reflect.apply(descriptor.get, value, []) : undefined];
100
+ }),
101
+ ) as {
102
+ [K in 'headers' | 'maxRetries' | 'timeout' | 'signal' | 'idempotencyKey' | 'query']?: RequestOptions[K];
103
+ } & {
104
+ [
105
+ K in
106
+ | 'method'
107
+ | 'path'
108
+ | 'body'
109
+ | 'stream'
110
+ | 'httpAgent'
111
+ | 'fetchOptions'
112
+ | 'defaultBaseURL'
113
+ | '__metadata'
114
+ | '__binaryRequest'
115
+ | '__binaryResponse'
116
+ | '__streamClass'
117
+ | '__security'
118
+ | '__synthesizeEventData'
119
+ ]?: never;
120
+ };
121
+ }
122
+
123
+ export class Traces extends APIResource {
124
+ /**
125
+ * Lists published root-turn traces as OTLP JSON, ordered by turn creation time and
126
+ * ID. Unpublished traces are skipped. Each page returns data available when read;
127
+ * it does not wait for late traces. Trace reads and the JSON response are limited
128
+ * to 16 MiB per request. If the limit is exceeded, request fewer traces.
129
+ *
130
+ * @example
131
+ * ```ts
132
+ * // Automatically fetches more pages as needed.
133
+ * for await (const sessionTrace of client.beta.agents.sessions.traces.list(
134
+ * 'session_id',
135
+ * )) {
136
+ * // ...
137
+ * }
138
+ * ```
139
+ */
140
+ list(
141
+ sessionID: string,
142
+ query?:
143
+ | (TraceListParams &
144
+ (
145
+ | {
146
+ [
147
+ K in
148
+ | 'method'
149
+ | 'path'
150
+ | 'query'
151
+ | 'body'
152
+ | 'headers'
153
+ | 'maxRetries'
154
+ | 'stream'
155
+ | 'timeout'
156
+ | 'httpAgent'
157
+ | 'fetchOptions'
158
+ | 'signal'
159
+ | 'idempotencyKey'
160
+ | 'defaultBaseURL'
161
+ | '__metadata'
162
+ | '__binaryRequest'
163
+ | '__binaryResponse'
164
+ | '__streamClass'
165
+ | '__security'
166
+ | '__synthesizeEventData'
167
+ ]?: never;
168
+ }
169
+ | null
170
+ | undefined
171
+ ))
172
+ | null
173
+ | undefined,
174
+ options?: RequestOptions,
175
+ ): PagePromise<SessionTracesPage, SessionTrace>;
176
+ list(
177
+ sessionID: string,
178
+ options?: {
179
+ [K in 'headers' | 'maxRetries' | 'timeout' | 'signal' | 'idempotencyKey' | 'query']?: RequestOptions[K];
180
+ } & {
181
+ [
182
+ K in
183
+ | 'method'
184
+ | 'path'
185
+ | 'body'
186
+ | 'stream'
187
+ | 'httpAgent'
188
+ | 'fetchOptions'
189
+ | 'defaultBaseURL'
190
+ | '__metadata'
191
+ | '__binaryRequest'
192
+ | '__binaryResponse'
193
+ | '__streamClass'
194
+ | '__security'
195
+ | '__synthesizeEventData'
196
+ ]?: never;
197
+ },
198
+ ): PagePromise<SessionTracesPage, SessionTrace>;
199
+ list(
200
+ sessionID: string,
201
+ query:
202
+ | TraceListParams
203
+ | ({
204
+ [
205
+ K in 'headers' | 'maxRetries' | 'timeout' | 'signal' | 'idempotencyKey' | 'query'
206
+ ]?: RequestOptions[K];
207
+ } & {
208
+ [
209
+ K in
210
+ | 'method'
211
+ | 'path'
212
+ | 'body'
213
+ | 'stream'
214
+ | 'httpAgent'
215
+ | 'fetchOptions'
216
+ | 'defaultBaseURL'
217
+ | '__metadata'
218
+ | '__binaryRequest'
219
+ | '__binaryResponse'
220
+ | '__streamClass'
221
+ | '__security'
222
+ | '__synthesizeEventData'
223
+ ]?: never;
224
+ })
225
+ | null
226
+ | undefined = {},
227
+ options?: RequestOptions,
228
+ ): PagePromise<SessionTracesPage, SessionTrace> {
229
+ const normalizeRequestOptionsForQueryOptions = normalizeRequestOptionsForQuery(
230
+ query,
231
+ ['after', 'limit', 'order'],
232
+ options,
233
+ );
234
+ if (normalizeRequestOptionsForQueryOptions !== undefined) {
235
+ options = normalizeRequestOptionsForQueryOptions;
236
+ query = {};
237
+ }
238
+ query = query as TraceListParams | null | undefined;
239
+ return this._client.getAPIList(
240
+ path`/agents/sessions/${sessionID}/traces`,
241
+ CursorPage<SessionTrace>,
242
+ resolveResourceRequestOptions(options, (options) => ({
243
+ query,
244
+ ...options,
245
+ headers: buildHeaders([{ 'OpenAI-Beta': 'agents=v1' }, options?.headers]),
246
+ __security: { bearerAuth: true },
247
+ })),
248
+ );
249
+ }
250
+ }
251
+
252
+ export type SessionTracesPage = CursorPage<SessionTrace>;
253
+
254
+ export interface SessionTrace {
255
+ /**
256
+ * The root turn ID. Use this ID as the pagination anchor.
257
+ */
258
+ id: string;
259
+
260
+ /**
261
+ * The Unix timestamp in seconds when the root turn was created.
262
+ */
263
+ created_at: number;
264
+
265
+ /**
266
+ * The object type, which is always `agent.session.trace`.
267
+ */
268
+ object: 'agent.session.trace';
269
+
270
+ /**
271
+ * An OTLP JSON ExportTraceServiceRequest containing resourceSpans. Only currently
272
+ * published data is returned; later trace updates are not awaited.
273
+ */
274
+ otlp: { [key: string]: unknown };
275
+
276
+ /**
277
+ * The session that owns this trace.
278
+ */
279
+ session_id: string;
280
+ }
281
+
282
+ export interface TraceListParams extends CursorPageParams {
283
+ /**
284
+ * The order in which resources are returned. Defaults to `desc`.
285
+ *
286
+ * - `asc` - Returns resources in ascending order.
287
+ * - `desc` - Returns resources in descending order.
288
+ */
289
+ order?: 'asc' | 'desc';
290
+ }
291
+
292
+ export declare namespace Traces {
293
+ export {
294
+ type SessionTrace as SessionTrace,
295
+ type SessionTracesPage as SessionTracesPage,
296
+ type TraceListParams as TraceListParams,
297
+ };
298
+ }
@@ -125,6 +125,8 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
125
125
  */
126
126
  protected abstract _createSocket(url: URL, authHeaders: Record<string, string>): TSocket;
127
127
 
128
+ private _cancelRefresh: (() => void) | undefined;
129
+
128
130
  send(event: ResponsesAPI.BetaResponsesClientEvent) {
129
131
  if (!this.socket) {
130
132
  throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
@@ -177,6 +179,7 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
177
179
  this._intentionallyClosed = true;
178
180
  this._closeCode = props?.code ?? 1000;
179
181
  this._closeReason = props?.reason ?? 'OK';
182
+ this._cancelRefresh?.();
180
183
  try {
181
184
  this.socket.close(this._closeCode, this._closeReason);
182
185
  } catch (err) {
@@ -421,10 +424,13 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
421
424
  };
422
425
  }
423
426
 
424
- private _connect(): TSocket {
425
- this.url = buildURL(this._client, this._parameters ?? {});
427
+ private _connect(
428
+ createSocket: (url: URL) => TSocket = (url) => this._createSocket(url, this._authHeaders()),
429
+ url: URL = buildURL(this._client, this._parameters ?? {}),
430
+ ): TSocket {
431
+ this.url = url;
426
432
 
427
- const socket = this._createSocket(this.url, this._authHeaders());
433
+ const socket = createSocket(this.url);
428
434
 
429
435
  socket.on('message', (data: string | ArrayBuffer | ArrayBufferView, isBinary: boolean) => {
430
436
  if (isBinary) {
@@ -632,7 +638,22 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
632
638
  let closeCodePromise: Promise<number> | undefined;
633
639
  try {
634
640
  const oldSocket = this.socket;
635
- this.socket = this._connect();
641
+ const url = buildURL(this._client, this._parameters ?? {});
642
+ const canceled = new Promise<undefined>((resolve) => {
643
+ this._cancelRefresh = () => resolve(undefined);
644
+ });
645
+ let createSocket: ((url: URL) => TSocket) | undefined;
646
+ try {
647
+ createSocket = await Promise.race([this._prepareReconnectSocket(), canceled]);
648
+ } finally {
649
+ this._cancelRefresh = undefined;
650
+ }
651
+ if (!this._canReconnect(closeCode)) {
652
+ this._isReconnecting = false;
653
+ this._emitPermanentClose(this._closeCode, this._closeReason);
654
+ return;
655
+ }
656
+ this.socket = this._connect(createSocket, url);
636
657
  // Registered synchronously after _connect() and before any
637
658
  // await so the code is captured even when ws emits 'close'
638
659
  // in the same tick as 'error' (e.g. abortHandshake).
@@ -649,6 +670,15 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
649
670
  this._internalEvents._emit('reconnected');
650
671
  return;
651
672
  } catch {
673
+ if (this._intentionallyClosed) {
674
+ // A public close observer may have thrown after lifecycle cleanup.
675
+ // Only emit here if the reconnect itself had not already closed.
676
+ if (this._isReconnecting) {
677
+ this._isReconnecting = false;
678
+ this._emitPermanentClose(this._closeCode, this._closeReason);
679
+ }
680
+ return;
681
+ }
652
682
  if (closeCodePromise) {
653
683
  // ws may emit 'error' before 'close', so await the code
654
684
  // rather than reading it synchronously.
@@ -722,8 +752,12 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
722
752
  this._emit('close', code, reason, unsent);
723
753
  }
724
754
 
725
- protected _authHeaders(): Record<string, string> {
726
- const apiKey = this._client.apiKey;
755
+ protected _prepareReconnectSocket(): Promise<(url: URL) => TSocket> {
756
+ const authHeaders = this._authHeaders();
757
+ return Promise.resolve((url) => this._createSocket(url, authHeaders));
758
+ }
759
+
760
+ protected _authHeaders(apiKey = this._client.apiKey): Record<string, string> {
727
761
  return typeof apiKey === 'string' && apiKey ? { Authorization: `Bearer ${apiKey}` } : {};
728
762
  }
729
763
  }
@@ -1,11 +1,10 @@
1
1
  // File generated from our OpenAPI spec by Castiron. See CONTRIBUTING.md for details.
2
2
 
3
3
  import * as WS from 'ws';
4
- import { NodeWebSocket } from '../../../internal/ws-adapter-node';
4
+ import { NodeWebSocket, snapshotNodeWebSocketOptions } from '../../../internal/ws-adapter-node';
5
5
  import { ResponsesWSBase, type ResponsesWSBaseOptions } from './ws-base';
6
6
  import { OpenAI } from '../../../client';
7
- import { OpenAIError } from '../../../core/error';
8
- import { snapshotWebSocketCredentials } from '../../../internal/ws';
7
+ import { ResponsesWebSocketCredentials } from '../../../internal/responses-ws-credentials';
9
8
 
10
9
  export type { WebSocketStreamOptions } from '../../../internal/ws';
11
10
 
@@ -18,6 +17,7 @@ export interface ResponsesWSClientOptions extends WS.ClientOptions, ResponsesWSB
18
17
 
19
18
  export class ResponsesWS extends ResponsesWSBase<NodeWebSocket> {
20
19
  private _wsOptions: WS.ClientOptions | null | undefined;
20
+ private _credentials = new ResponsesWebSocketCredentials();
21
21
 
22
22
  constructor(client: OpenAI, options?: ResponsesWSClientOptions | null | undefined) {
23
23
  if (!WS?.WebSocket) {
@@ -31,32 +31,42 @@ export class ResponsesWS extends ResponsesWSBase<NodeWebSocket> {
31
31
  this._connectInitial();
32
32
  }
33
33
 
34
+ protected override _authHeaders(apiKey?: string | null): Record<string, string> {
35
+ const headers = super._authHeaders(apiKey === undefined ? this._credentials.preparedAPIKey : apiKey);
36
+ this._credentials.trackInitialHeaders(this._client, headers, () => !!this.socket);
37
+ return headers;
38
+ }
39
+
40
+ /**
41
+ * Whether credentials passed to the Node transport use the SDK key.
42
+ * The SDK recognizes its key, including copies and additions in credential headers.
43
+ * Override and return true if your socket hook signs or otherwise irreversibly transforms it.
44
+ * Explicit caller options and header removals still take precedence on reconnect.
45
+ */
46
+ protected _usesSDKAPIKey(authHeaders: Record<string, string>): boolean {
47
+ return this._credentials.usesAPIKey(this._client, authHeaders);
48
+ }
49
+
34
50
  protected _createSocket(url: URL, authHeaders: Record<string, string>): NodeWebSocket {
35
51
  const capturedAuthHeaders = { ...authHeaders };
36
- const headers = new Map(Object.entries(this._client._buildWebSocketHeaders(capturedAuthHeaders)));
37
- for (const [name, value] of Object.entries(this._wsOptions?.headers ?? {})) {
38
- if (value === null) {
39
- headers.delete(name.toLowerCase());
40
- } else if (value !== undefined) {
41
- headers.set(name.toLowerCase(), value);
42
- }
43
- }
44
- const socketOptions: ResponsesWSClientOptions = {
45
- ...this._wsOptions,
46
- headers: Object.fromEntries(headers),
47
- followRedirects: false,
48
- };
49
- if (
50
- this._client._hasApiKeyProvider() &&
51
- !capturedAuthHeaders['Authorization'] &&
52
- !snapshotWebSocketCredentials(socketOptions)
53
- ) {
54
- throw new OpenAIError(
55
- 'Cannot open a Responses WebSocket with an unresolved function-based apiKey. Resolve it before constructing the WebSocket or provide explicit WebSocket credentials.',
56
- );
57
- }
52
+ const socketOptions = this._credentials.build(
53
+ this._client,
54
+ capturedAuthHeaders,
55
+ this._wsOptions,
56
+ !this.socket ? this._usesSDKAPIKey(capturedAuthHeaders) : undefined,
57
+ );
58
+ return new NodeWebSocket(new WS.WebSocket(url, socketOptions));
59
+ }
58
60
 
59
- const ws = new WS.WebSocket(url, socketOptions);
60
- return new NodeWebSocket(ws);
61
+ protected override async _prepareReconnectSocket(): Promise<(url: URL) => NodeWebSocket> {
62
+ if (!this._client._hasApiKeyProvider()) {
63
+ return super._prepareReconnectSocket();
64
+ }
65
+ return this._credentials.prepare(
66
+ this._client,
67
+ snapshotNodeWebSocketOptions(this._wsOptions),
68
+ (...args) => this._authHeaders(...args),
69
+ (url, headers) => this._createSocket(url, headers),
70
+ );
61
71
  }
62
72
  }
@@ -1524,7 +1524,7 @@ export namespace ChatCompletionContentPartImage {
1524
1524
  * Specifies the detail level of the image. Learn more in the
1525
1525
  * [Vision guide](https://developers.openai.com/api/docs/guides/images-vision#choose-an-image-detail-level).
1526
1526
  */
1527
- detail?: 'auto' | 'low' | 'high';
1527
+ detail?: 'auto' | 'low' | 'high' | 'original';
1528
1528
  }
1529
1529
 
1530
1530
  /**
@@ -300,7 +300,7 @@ export class Runs extends APIResource {
300
300
  cancel(runID: string, params: RunCancelParams, options?: RequestOptions): APIPromise<RunCancelResponse> {
301
301
  const { eval_id } = params;
302
302
  return this._client.post(
303
- path`/evals/${eval_id}/runs/${runID}`,
303
+ path`/evals/${eval_id}/runs/${runID}/cancel`,
304
304
  resolveResourceRequestOptions(options, (options) => ({ ...options, __security: { bearerAuth: true } })),
305
305
  );
306
306
  }
@@ -87,7 +87,7 @@ export namespace ForkServerEvent {
87
87
  }
88
88
 
89
89
  /**
90
- * A SIP DTMF keypress successfully sent by the hosted tool. Delivered only to
90
+ * A SIP DTMF keypress successfully sent to the SIP trunk. Delivered only to
91
91
  * sideband observers; this is not a client command.
92
92
  */
93
93
  export interface TransportDtmfSend {
@@ -96,6 +96,11 @@ export namespace ForkServerEvent {
96
96
  event_id: string;
97
97
 
98
98
  type: 'transport.dtmf.send';
99
+
100
+ /**
101
+ * The event_id of the client command, when supplied.
102
+ */
103
+ client_event_id?: string;
99
104
  }
100
105
 
101
106
  /**
@@ -1520,7 +1520,7 @@ export namespace ServerEvent {
1520
1520
  }
1521
1521
 
1522
1522
  /**
1523
- * A SIP DTMF keypress successfully sent by the hosted tool. Delivered only to
1523
+ * A SIP DTMF keypress successfully sent to the SIP trunk. Delivered only to
1524
1524
  * sideband observers; this is not a client command.
1525
1525
  */
1526
1526
  export interface TransportDtmfSend {
@@ -1529,6 +1529,11 @@ export namespace ServerEvent {
1529
1529
  event_id: string;
1530
1530
 
1531
1531
  type: 'transport.dtmf.send';
1532
+
1533
+ /**
1534
+ * The event_id of the client command, when supplied.
1535
+ */
1536
+ client_event_id?: string;
1532
1537
  }
1533
1538
 
1534
1539
  /**
@@ -123,6 +123,8 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
123
123
  */
124
124
  protected abstract _createSocket(url: URL, authHeaders: Record<string, string>): TSocket;
125
125
 
126
+ private _cancelRefresh: (() => void) | undefined;
127
+
126
128
  send(event: ResponsesAPI.ResponsesClientEvent) {
127
129
  if (!this.socket) {
128
130
  throw new OpenAIError('Internal error: failed to initialize socket. Please report this issue.');
@@ -175,6 +177,7 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
175
177
  this._intentionallyClosed = true;
176
178
  this._closeCode = props?.code ?? 1000;
177
179
  this._closeReason = props?.reason ?? 'OK';
180
+ this._cancelRefresh?.();
178
181
  try {
179
182
  this.socket.close(this._closeCode, this._closeReason);
180
183
  } catch (err) {
@@ -419,10 +422,13 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
419
422
  };
420
423
  }
421
424
 
422
- private _connect(): TSocket {
423
- this.url = buildURL(this._client, this._parameters ?? {});
425
+ private _connect(
426
+ createSocket: (url: URL) => TSocket = (url) => this._createSocket(url, this._authHeaders()),
427
+ url: URL = buildURL(this._client, this._parameters ?? {}),
428
+ ): TSocket {
429
+ this.url = url;
424
430
 
425
- const socket = this._createSocket(this.url, this._authHeaders());
431
+ const socket = createSocket(this.url);
426
432
 
427
433
  socket.on('message', (data: string | ArrayBuffer | ArrayBufferView, isBinary: boolean) => {
428
434
  if (isBinary) {
@@ -630,7 +636,22 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
630
636
  let closeCodePromise: Promise<number> | undefined;
631
637
  try {
632
638
  const oldSocket = this.socket;
633
- this.socket = this._connect();
639
+ const url = buildURL(this._client, this._parameters ?? {});
640
+ const canceled = new Promise<undefined>((resolve) => {
641
+ this._cancelRefresh = () => resolve(undefined);
642
+ });
643
+ let createSocket: ((url: URL) => TSocket) | undefined;
644
+ try {
645
+ createSocket = await Promise.race([this._prepareReconnectSocket(), canceled]);
646
+ } finally {
647
+ this._cancelRefresh = undefined;
648
+ }
649
+ if (!this._canReconnect(closeCode)) {
650
+ this._isReconnecting = false;
651
+ this._emitPermanentClose(this._closeCode, this._closeReason);
652
+ return;
653
+ }
654
+ this.socket = this._connect(createSocket, url);
634
655
  // Registered synchronously after _connect() and before any
635
656
  // await so the code is captured even when ws emits 'close'
636
657
  // in the same tick as 'error' (e.g. abortHandshake).
@@ -647,6 +668,15 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
647
668
  this._internalEvents._emit('reconnected');
648
669
  return;
649
670
  } catch {
671
+ if (this._intentionallyClosed) {
672
+ // A public close observer may have thrown after lifecycle cleanup.
673
+ // Only emit here if the reconnect itself had not already closed.
674
+ if (this._isReconnecting) {
675
+ this._isReconnecting = false;
676
+ this._emitPermanentClose(this._closeCode, this._closeReason);
677
+ }
678
+ return;
679
+ }
650
680
  if (closeCodePromise) {
651
681
  // ws may emit 'error' before 'close', so await the code
652
682
  // rather than reading it synchronously.
@@ -720,8 +750,12 @@ export abstract class ResponsesWSBase<TSocket extends WebSocketLike> extends Res
720
750
  this._emit('close', code, reason, unsent);
721
751
  }
722
752
 
723
- protected _authHeaders(): Record<string, string> {
724
- const apiKey = this._client.apiKey;
753
+ protected _prepareReconnectSocket(): Promise<(url: URL) => TSocket> {
754
+ const authHeaders = this._authHeaders();
755
+ return Promise.resolve((url) => this._createSocket(url, authHeaders));
756
+ }
757
+
758
+ protected _authHeaders(apiKey = this._client.apiKey): Record<string, string> {
725
759
  return typeof apiKey === 'string' && apiKey ? { Authorization: `Bearer ${apiKey}` } : {};
726
760
  }
727
761
  }