@aryee337/aery-ai 0.1.148 → 0.2.10

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 (592) hide show
  1. package/CHANGELOG.md +2914 -0
  2. package/README.md +614 -813
  3. package/dist/types/api-registry.d.ts +30 -0
  4. package/dist/types/auth-broker/client.d.ts +66 -0
  5. package/dist/types/auth-broker/index.d.ts +5 -0
  6. package/dist/types/auth-broker/refresher.d.ts +25 -0
  7. package/dist/types/auth-broker/remote-store.d.ts +96 -0
  8. package/dist/types/auth-broker/server.d.ts +32 -0
  9. package/dist/types/auth-broker/types.d.ts +105 -0
  10. package/dist/types/auth-broker/wire-schemas.d.ts +412 -0
  11. package/dist/types/auth-gateway/http.d.ts +39 -0
  12. package/dist/types/auth-gateway/index.d.ts +3 -0
  13. package/dist/types/auth-gateway/server.d.ts +36 -0
  14. package/dist/types/auth-gateway/types.d.ts +117 -0
  15. package/dist/types/auth-storage.d.ts +739 -0
  16. package/dist/types/index.d.ts +49 -0
  17. package/dist/types/model-cache.d.ts +17 -0
  18. package/dist/types/model-manager.d.ts +64 -0
  19. package/dist/types/model-thinking.d.ts +100 -0
  20. package/dist/types/models.d.ts +12 -0
  21. package/dist/types/provider-details.d.ts +24 -0
  22. package/dist/types/provider-models/bundled-references.d.ts +4 -0
  23. package/dist/types/provider-models/descriptors.d.ts +50 -0
  24. package/dist/types/provider-models/google.d.ts +24 -0
  25. package/dist/types/provider-models/index.d.ts +5 -0
  26. package/dist/types/provider-models/ollama.d.ts +7 -0
  27. package/dist/types/provider-models/openai-compat.d.ts +296 -0
  28. package/dist/types/provider-models/special.d.ts +16 -0
  29. package/dist/types/providers/aery-native-client.d.ts +13 -0
  30. package/dist/types/providers/aery-native-server.d.ts +68 -0
  31. package/dist/types/providers/amazon-bedrock.d.ts +38 -0
  32. package/dist/types/providers/anthropic-client.d.ts +99 -0
  33. package/dist/types/providers/anthropic-messages-server-schema.d.ts +465 -0
  34. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  35. package/dist/types/providers/anthropic-wire.d.ts +262 -0
  36. package/dist/types/providers/anthropic.d.ts +206 -0
  37. package/dist/types/providers/aws-credentials.d.ts +43 -0
  38. package/dist/types/providers/aws-eventstream.d.ts +38 -0
  39. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  40. package/dist/types/providers/azure-openai-responses.d.ts +15 -0
  41. package/dist/types/providers/cursor/gen/agent_pb.d.ts +13022 -0
  42. package/dist/types/providers/cursor.d.ts +43 -0
  43. package/dist/types/providers/error-message.d.ts +27 -0
  44. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  45. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  46. package/dist/types/providers/google-auth.d.ts +24 -0
  47. package/dist/types/providers/google-gemini-cli.d.ts +81 -0
  48. package/dist/types/providers/google-gemini-headers.d.ts +18 -0
  49. package/dist/types/providers/google-shared.d.ts +171 -0
  50. package/dist/types/providers/google-types.d.ts +138 -0
  51. package/dist/types/providers/google-vertex.d.ts +7 -0
  52. package/dist/types/providers/google.d.ts +4 -0
  53. package/dist/types/providers/grammar.d.ts +1 -0
  54. package/dist/types/providers/kimi.d.ts +27 -0
  55. package/dist/types/providers/mock.d.ts +173 -0
  56. package/dist/types/providers/ollama.d.ts +6 -0
  57. package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
  58. package/dist/types/providers/openai-chat-server-schema.d.ts +817 -0
  59. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  60. package/dist/types/providers/openai-codex/constants.d.ts +26 -0
  61. package/dist/types/providers/openai-codex/request-transformer.d.ts +49 -0
  62. package/dist/types/providers/openai-codex/response-handler.d.ts +17 -0
  63. package/dist/types/providers/openai-codex-responses.d.ts +67 -0
  64. package/dist/types/providers/openai-completions-compat.d.ts +25 -0
  65. package/dist/types/providers/openai-completions.d.ts +54 -0
  66. package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
  67. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  68. package/dist/types/providers/openai-responses-shared.d.ts +100 -0
  69. package/dist/types/providers/openai-responses.d.ts +66 -0
  70. package/dist/types/providers/register-builtins.d.ts +31 -0
  71. package/dist/types/providers/synthetic.d.ts +26 -0
  72. package/dist/{providers → types/providers}/transform-messages.d.ts +6 -2
  73. package/dist/types/providers/vision-guard.d.ts +8 -0
  74. package/dist/types/providers/xai-responses.d.ts +23 -0
  75. package/dist/types/rate-limit-utils.d.ts +19 -0
  76. package/dist/types/stream.d.ts +28 -0
  77. package/dist/types/types.d.ts +801 -0
  78. package/dist/types/usage/claude.d.ts +4 -0
  79. package/dist/types/usage/gemini.d.ts +2 -0
  80. package/dist/types/usage/github-copilot.d.ts +7 -0
  81. package/dist/types/usage/google-antigravity.d.ts +2 -0
  82. package/dist/types/usage/kimi.d.ts +2 -0
  83. package/dist/types/usage/minimax-code.d.ts +2 -0
  84. package/dist/types/usage/openai-codex.d.ts +3 -0
  85. package/dist/types/usage/shared.d.ts +1 -0
  86. package/dist/types/usage/zai.d.ts +2 -0
  87. package/dist/types/usage.d.ts +260 -0
  88. package/dist/types/utils/abort.d.ts +19 -0
  89. package/dist/types/utils/abortable-iterator.d.ts +4 -0
  90. package/dist/types/utils/anthropic-auth.d.ts +35 -0
  91. package/dist/types/utils/discovery/antigravity.d.ts +61 -0
  92. package/dist/types/utils/discovery/codex.d.ts +38 -0
  93. package/dist/types/utils/discovery/cursor.d.ts +23 -0
  94. package/dist/types/utils/discovery/gemini.d.ts +25 -0
  95. package/dist/types/utils/discovery/index.d.ts +4 -0
  96. package/dist/types/utils/discovery/openai-compatible.d.ts +72 -0
  97. package/dist/types/utils/event-stream.d.ts +28 -0
  98. package/dist/types/utils/fireworks-model-id.d.ts +10 -0
  99. package/dist/types/utils/foundry.d.ts +1 -0
  100. package/dist/types/utils/http-inspector.d.ts +31 -0
  101. package/dist/types/utils/idle-iterator.d.ts +78 -0
  102. package/dist/types/utils/json-parse.d.ts +37 -0
  103. package/dist/types/utils/oauth/__tests__/xai-oauth.test.d.ts +1 -0
  104. package/dist/types/utils/oauth/alibaba-coding-plan.d.ts +18 -0
  105. package/dist/types/utils/oauth/anthropic.d.ts +22 -0
  106. package/dist/types/utils/oauth/api-key-login.d.ts +35 -0
  107. package/dist/types/utils/oauth/api-key-validation.d.ts +27 -0
  108. package/dist/types/utils/oauth/callback-server.d.ts +57 -0
  109. package/dist/types/utils/oauth/cerebras.d.ts +1 -0
  110. package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
  111. package/dist/types/utils/oauth/cursor.d.ts +15 -0
  112. package/dist/types/utils/oauth/deepseek.d.ts +10 -0
  113. package/dist/types/utils/oauth/firepass.d.ts +1 -0
  114. package/dist/types/utils/oauth/fireworks.d.ts +1 -0
  115. package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
  116. package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
  117. package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
  118. package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
  119. package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
  120. package/dist/types/utils/oauth/huggingface.d.ts +19 -0
  121. package/dist/types/utils/oauth/index.d.ts +38 -0
  122. package/dist/types/utils/oauth/kagi.d.ts +17 -0
  123. package/dist/types/utils/oauth/kilo.d.ts +5 -0
  124. package/dist/types/utils/oauth/kimi.d.ts +21 -0
  125. package/dist/types/utils/oauth/litellm.d.ts +18 -0
  126. package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
  127. package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
  128. package/dist/types/utils/oauth/moonshot.d.ts +1 -0
  129. package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
  130. package/dist/types/utils/oauth/nvidia.d.ts +18 -0
  131. package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
  132. package/dist/types/utils/oauth/ollama.d.ts +18 -0
  133. package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
  134. package/dist/types/utils/oauth/opencode.d.ts +18 -0
  135. package/dist/types/utils/oauth/openrouter.d.ts +1 -0
  136. package/dist/types/utils/oauth/parallel.d.ts +17 -0
  137. package/dist/types/utils/oauth/perplexity.d.ts +9 -0
  138. package/dist/{utils → types/utils}/oauth/pkce.d.ts +0 -5
  139. package/dist/types/utils/oauth/qianfan.d.ts +17 -0
  140. package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
  141. package/dist/types/utils/oauth/synthetic.d.ts +1 -0
  142. package/dist/types/utils/oauth/tavily.d.ts +17 -0
  143. package/dist/types/utils/oauth/together.d.ts +1 -0
  144. package/dist/types/utils/oauth/types.d.ts +44 -0
  145. package/dist/types/utils/oauth/venice.d.ts +18 -0
  146. package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
  147. package/dist/types/utils/oauth/vllm.d.ts +16 -0
  148. package/dist/types/utils/oauth/wafer.d.ts +2 -0
  149. package/dist/types/utils/oauth/xai-oauth.d.ts +60 -0
  150. package/dist/types/utils/oauth/xiaomi.d.ts +19 -0
  151. package/dist/types/utils/oauth/zai.d.ts +18 -0
  152. package/dist/types/utils/oauth/zenmux.d.ts +1 -0
  153. package/dist/types/utils/oauth/zhipu.d.ts +18 -0
  154. package/dist/{utils → types/utils}/overflow.d.ts +9 -11
  155. package/dist/types/utils/parse-bind.d.ts +23 -0
  156. package/dist/types/utils/provider-response.d.ts +3 -0
  157. package/dist/types/utils/request-debug.d.ts +29 -0
  158. package/dist/types/utils/retry-after.d.ts +3 -0
  159. package/dist/types/utils/retry.d.ts +26 -0
  160. package/dist/types/utils/schema/adapt.d.ts +24 -0
  161. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  162. package/dist/types/utils/schema/dereference.d.ts +11 -0
  163. package/dist/types/utils/schema/draft.d.ts +10 -0
  164. package/dist/types/utils/schema/equality.d.ts +4 -0
  165. package/dist/types/utils/schema/fields.d.ts +49 -0
  166. package/dist/types/utils/schema/index.d.ts +13 -0
  167. package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
  168. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  169. package/dist/types/utils/schema/normalize.d.ts +93 -0
  170. package/dist/types/utils/schema/spill.d.ts +8 -0
  171. package/dist/types/utils/schema/stamps.d.ts +25 -0
  172. package/dist/types/utils/schema/types.d.ts +4 -0
  173. package/dist/types/utils/schema/wire.d.ts +53 -0
  174. package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
  175. package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
  176. package/dist/types/utils/sse-debug.d.ts +10 -0
  177. package/dist/types/utils/stream-markup-healing.d.ts +80 -0
  178. package/dist/types/utils/tool-choice.d.ts +50 -0
  179. package/dist/types/utils/validation.d.ts +17 -0
  180. package/dist/types/utils.d.ts +28 -0
  181. package/package.json +139 -105
  182. package/src/api-registry.ts +96 -0
  183. package/src/auth-broker/client.ts +358 -0
  184. package/src/auth-broker/index.ts +5 -0
  185. package/src/auth-broker/refresher.ts +117 -0
  186. package/src/auth-broker/remote-store.ts +623 -0
  187. package/src/auth-broker/server.ts +644 -0
  188. package/src/auth-broker/types.ts +127 -0
  189. package/src/auth-broker/wire-schemas.ts +200 -0
  190. package/src/auth-gateway/http.ts +194 -0
  191. package/src/auth-gateway/index.ts +3 -0
  192. package/src/auth-gateway/server.ts +818 -0
  193. package/src/auth-gateway/types.ts +143 -0
  194. package/src/auth-storage.ts +4422 -0
  195. package/src/index.ts +54 -0
  196. package/src/model-cache.ts +129 -0
  197. package/src/model-manager.ts +469 -0
  198. package/src/model-thinking.ts +782 -0
  199. package/src/models.json +83530 -0
  200. package/src/models.json.d.ts +9 -0
  201. package/src/models.ts +56 -0
  202. package/src/prompts/turn-aborted-guidance.md +4 -0
  203. package/src/provider-details.ts +90 -0
  204. package/src/provider-models/bundled-references.ts +38 -0
  205. package/src/provider-models/descriptors.ts +355 -0
  206. package/src/provider-models/google.ts +88 -0
  207. package/src/provider-models/index.ts +5 -0
  208. package/src/provider-models/ollama.ts +153 -0
  209. package/src/provider-models/openai-compat.ts +2817 -0
  210. package/src/provider-models/special.ts +67 -0
  211. package/src/providers/aery-native-client.ts +228 -0
  212. package/src/providers/aery-native-server.ts +212 -0
  213. package/src/providers/amazon-bedrock.ts +873 -0
  214. package/src/providers/anthropic-client.ts +318 -0
  215. package/src/providers/anthropic-messages-server-schema.ts +243 -0
  216. package/src/providers/anthropic-messages-server.ts +683 -0
  217. package/src/providers/anthropic-wire.ts +268 -0
  218. package/src/providers/anthropic.ts +3094 -0
  219. package/src/providers/aws-credentials.ts +501 -0
  220. package/src/providers/aws-eventstream.ts +185 -0
  221. package/src/providers/aws-sigv4.ts +218 -0
  222. package/src/providers/azure-openai-responses.ts +361 -0
  223. package/src/providers/cursor/gen/agent_pb.ts +15274 -0
  224. package/src/providers/cursor/proto/agent.proto +3526 -0
  225. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  226. package/src/providers/cursor/proto/buf.yaml +17 -0
  227. package/src/providers/cursor.ts +2621 -0
  228. package/src/providers/error-message.ts +21 -0
  229. package/src/providers/github-copilot-headers.ts +140 -0
  230. package/src/providers/gitlab-duo.ts +372 -0
  231. package/src/providers/google-auth.ts +252 -0
  232. package/src/providers/google-gemini-cli.ts +809 -0
  233. package/src/providers/google-gemini-headers.ts +41 -0
  234. package/src/providers/google-shared.ts +917 -0
  235. package/src/providers/google-types.ts +167 -0
  236. package/src/providers/google-vertex.ts +91 -0
  237. package/src/providers/google.ts +41 -0
  238. package/src/providers/grammar.ts +70 -0
  239. package/src/providers/kimi.ts +52 -0
  240. package/src/providers/mock.ts +496 -0
  241. package/src/providers/ollama.ts +644 -0
  242. package/src/providers/openai-anthropic-shim.ts +138 -0
  243. package/src/providers/openai-chat-server-schema.ts +252 -0
  244. package/src/providers/openai-chat-server.ts +647 -0
  245. package/src/providers/openai-codex/constants.ts +43 -0
  246. package/src/providers/openai-codex/request-transformer.ts +161 -0
  247. package/src/providers/openai-codex/response-handler.ts +81 -0
  248. package/src/providers/openai-codex-responses.ts +3018 -0
  249. package/src/providers/openai-completions-compat.ts +300 -0
  250. package/src/providers/openai-completions.ts +1979 -0
  251. package/src/providers/openai-responses-server-schema.ts +290 -0
  252. package/src/providers/openai-responses-server.ts +1183 -0
  253. package/src/providers/openai-responses-shared.ts +873 -0
  254. package/src/providers/openai-responses.ts +679 -0
  255. package/src/providers/register-builtins.ts +436 -0
  256. package/src/providers/synthetic.ts +50 -0
  257. package/src/providers/transform-messages.ts +382 -0
  258. package/src/providers/vision-guard.ts +31 -0
  259. package/src/providers/xai-responses.ts +82 -0
  260. package/src/rate-limit-utils.ts +84 -0
  261. package/src/stream.ts +1065 -0
  262. package/src/types.ts +944 -0
  263. package/src/usage/claude.ts +482 -0
  264. package/src/usage/gemini.ts +250 -0
  265. package/src/usage/github-copilot.ts +421 -0
  266. package/src/usage/google-antigravity.ts +201 -0
  267. package/src/usage/kimi.ts +271 -0
  268. package/src/usage/minimax-code.ts +31 -0
  269. package/src/usage/openai-codex.ts +503 -0
  270. package/src/usage/shared.ts +10 -0
  271. package/src/usage/zai.ts +247 -0
  272. package/src/usage.ts +185 -0
  273. package/src/utils/abort.ts +51 -0
  274. package/src/utils/abortable-iterator.ts +69 -0
  275. package/src/utils/anthropic-auth.ts +93 -0
  276. package/src/utils/discovery/antigravity.ts +261 -0
  277. package/src/utils/discovery/codex.ts +371 -0
  278. package/src/utils/discovery/cursor.ts +306 -0
  279. package/src/utils/discovery/gemini.ts +248 -0
  280. package/src/utils/discovery/index.ts +4 -0
  281. package/src/utils/discovery/openai-compatible.ts +224 -0
  282. package/src/utils/event-stream.ts +142 -0
  283. package/src/utils/fireworks-model-id.ts +30 -0
  284. package/src/utils/foundry.ts +8 -0
  285. package/src/utils/http-inspector.ts +176 -0
  286. package/src/utils/idle-iterator.ts +267 -0
  287. package/src/utils/json-parse.ts +182 -0
  288. package/src/utils/oauth/__tests__/xai-oauth.test.ts +107 -0
  289. package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
  290. package/src/utils/oauth/anthropic.ts +273 -0
  291. package/src/utils/oauth/api-key-login.ts +87 -0
  292. package/src/utils/oauth/api-key-validation.ts +92 -0
  293. package/src/utils/oauth/callback-server.ts +276 -0
  294. package/src/utils/oauth/cerebras.ts +16 -0
  295. package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
  296. package/src/utils/oauth/cursor.ts +157 -0
  297. package/src/utils/oauth/deepseek.ts +53 -0
  298. package/src/utils/oauth/firepass.ts +24 -0
  299. package/src/utils/oauth/fireworks.ts +15 -0
  300. package/src/utils/oauth/github-copilot.ts +362 -0
  301. package/src/utils/oauth/gitlab-duo.ts +123 -0
  302. package/src/utils/oauth/google-antigravity.ts +200 -0
  303. package/src/utils/oauth/google-gemini-cli.ts +256 -0
  304. package/src/utils/oauth/google-oauth-shared.ts +110 -0
  305. package/src/utils/oauth/huggingface.ts +62 -0
  306. package/src/utils/oauth/index.ts +484 -0
  307. package/src/utils/oauth/kagi.ts +47 -0
  308. package/src/utils/oauth/kilo.ts +87 -0
  309. package/src/utils/oauth/kimi.ts +254 -0
  310. package/src/utils/oauth/litellm.ts +47 -0
  311. package/src/utils/oauth/lm-studio.ts +38 -0
  312. package/src/utils/oauth/minimax-code.ts +78 -0
  313. package/src/utils/oauth/moonshot.ts +23 -0
  314. package/src/utils/oauth/nanogpt.ts +15 -0
  315. package/src/utils/oauth/nvidia.ts +70 -0
  316. package/src/utils/oauth/oauth.html +203 -0
  317. package/src/utils/oauth/ollama-cloud.ts +28 -0
  318. package/src/utils/oauth/ollama.ts +47 -0
  319. package/src/utils/oauth/openai-codex.ts +299 -0
  320. package/src/utils/oauth/opencode.ts +49 -0
  321. package/src/utils/oauth/openrouter.ts +20 -0
  322. package/src/utils/oauth/parallel.ts +46 -0
  323. package/src/utils/oauth/perplexity.ts +206 -0
  324. package/src/utils/oauth/pkce.ts +18 -0
  325. package/src/utils/oauth/qianfan.ts +58 -0
  326. package/src/utils/oauth/qwen-portal.ts +60 -0
  327. package/src/utils/oauth/synthetic.ts +15 -0
  328. package/src/utils/oauth/tavily.ts +46 -0
  329. package/src/utils/oauth/together.ts +16 -0
  330. package/src/utils/oauth/types.ts +99 -0
  331. package/src/utils/oauth/venice.ts +59 -0
  332. package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
  333. package/src/utils/oauth/vllm.ts +40 -0
  334. package/src/utils/oauth/wafer.ts +50 -0
  335. package/src/utils/oauth/xai-oauth.ts +342 -0
  336. package/src/utils/oauth/xiaomi.ts +139 -0
  337. package/src/utils/oauth/zai.ts +60 -0
  338. package/src/utils/oauth/zenmux.ts +15 -0
  339. package/src/utils/oauth/zhipu.ts +60 -0
  340. package/src/utils/overflow.ts +137 -0
  341. package/src/utils/parse-bind.ts +54 -0
  342. package/src/utils/provider-response.ts +30 -0
  343. package/src/utils/request-debug.ts +336 -0
  344. package/src/utils/retry-after.ts +110 -0
  345. package/src/utils/retry.ts +54 -0
  346. package/src/utils/schema/CONSTRAINTS.md +164 -0
  347. package/src/utils/schema/adapt.ts +36 -0
  348. package/src/utils/schema/compatibility.ts +435 -0
  349. package/src/utils/schema/dereference.ts +98 -0
  350. package/src/utils/schema/draft.ts +341 -0
  351. package/src/utils/schema/equality.ts +97 -0
  352. package/src/utils/schema/fields.ts +191 -0
  353. package/src/utils/schema/index.ts +13 -0
  354. package/src/utils/schema/json-schema-validator.ts +577 -0
  355. package/src/utils/schema/meta-validator.ts +167 -0
  356. package/src/utils/schema/normalize.ts +1588 -0
  357. package/src/utils/schema/spill.ts +43 -0
  358. package/src/utils/schema/stamps.ts +97 -0
  359. package/src/utils/schema/types.ts +10 -0
  360. package/src/utils/schema/wire.ts +293 -0
  361. package/src/utils/schema/zod-decontaminate.ts +331 -0
  362. package/src/utils/sdk-stream-timeout.ts +43 -0
  363. package/src/utils/sse-debug.ts +289 -0
  364. package/src/utils/stream-markup-healing.ts +612 -0
  365. package/src/utils/tool-choice.ts +99 -0
  366. package/src/utils/validation.ts +1024 -0
  367. package/src/utils.ts +166 -0
  368. package/dist/api-registry.d.ts +0 -20
  369. package/dist/api-registry.d.ts.map +0 -1
  370. package/dist/api-registry.js +0 -44
  371. package/dist/api-registry.js.map +0 -1
  372. package/dist/bedrock-provider.d.ts +0 -5
  373. package/dist/bedrock-provider.d.ts.map +0 -1
  374. package/dist/bedrock-provider.js +0 -6
  375. package/dist/bedrock-provider.js.map +0 -1
  376. package/dist/cli.d.ts +0 -3
  377. package/dist/cli.d.ts.map +0 -1
  378. package/dist/cli.js +0 -130
  379. package/dist/cli.js.map +0 -1
  380. package/dist/env-api-keys.d.ts +0 -18
  381. package/dist/env-api-keys.d.ts.map +0 -1
  382. package/dist/env-api-keys.js +0 -178
  383. package/dist/env-api-keys.js.map +0 -1
  384. package/dist/image-models.d.ts +0 -10
  385. package/dist/image-models.d.ts.map +0 -1
  386. package/dist/image-models.generated.d.ts +0 -440
  387. package/dist/image-models.generated.d.ts.map +0 -1
  388. package/dist/image-models.generated.js +0 -442
  389. package/dist/image-models.generated.js.map +0 -1
  390. package/dist/image-models.js +0 -23
  391. package/dist/image-models.js.map +0 -1
  392. package/dist/images-api-registry.d.ts +0 -14
  393. package/dist/images-api-registry.d.ts.map +0 -1
  394. package/dist/images-api-registry.js +0 -22
  395. package/dist/images-api-registry.js.map +0 -1
  396. package/dist/images.d.ts +0 -4
  397. package/dist/images.d.ts.map +0 -1
  398. package/dist/images.js +0 -14
  399. package/dist/images.js.map +0 -1
  400. package/dist/index.d.ts +0 -32
  401. package/dist/index.d.ts.map +0 -1
  402. package/dist/index.js +0 -20
  403. package/dist/index.js.map +0 -1
  404. package/dist/models.d.ts +0 -18
  405. package/dist/models.d.ts.map +0 -1
  406. package/dist/models.generated.d.ts +0 -17480
  407. package/dist/models.generated.d.ts.map +0 -1
  408. package/dist/models.generated.js +0 -16339
  409. package/dist/models.generated.js.map +0 -1
  410. package/dist/models.js +0 -71
  411. package/dist/models.js.map +0 -1
  412. package/dist/oauth.d.ts +0 -2
  413. package/dist/oauth.d.ts.map +0 -1
  414. package/dist/oauth.js +0 -2
  415. package/dist/oauth.js.map +0 -1
  416. package/dist/providers/aery-error-formatting.d.ts +0 -13
  417. package/dist/providers/aery-error-formatting.d.ts.map +0 -1
  418. package/dist/providers/aery-error-formatting.js +0 -112
  419. package/dist/providers/aery-error-formatting.js.map +0 -1
  420. package/dist/providers/amazon-bedrock.d.ts +0 -38
  421. package/dist/providers/amazon-bedrock.d.ts.map +0 -1
  422. package/dist/providers/amazon-bedrock.js +0 -763
  423. package/dist/providers/amazon-bedrock.js.map +0 -1
  424. package/dist/providers/anthropic.d.ts +0 -71
  425. package/dist/providers/anthropic.d.ts.map +0 -1
  426. package/dist/providers/anthropic.js +0 -949
  427. package/dist/providers/anthropic.js.map +0 -1
  428. package/dist/providers/azure-openai-responses.d.ts +0 -15
  429. package/dist/providers/azure-openai-responses.d.ts.map +0 -1
  430. package/dist/providers/azure-openai-responses.js +0 -225
  431. package/dist/providers/azure-openai-responses.js.map +0 -1
  432. package/dist/providers/cloudflare.d.ts +0 -13
  433. package/dist/providers/cloudflare.d.ts.map +0 -1
  434. package/dist/providers/cloudflare.js +0 -26
  435. package/dist/providers/cloudflare.js.map +0 -1
  436. package/dist/providers/faux.d.ts +0 -56
  437. package/dist/providers/faux.d.ts.map +0 -1
  438. package/dist/providers/faux.js +0 -368
  439. package/dist/providers/faux.js.map +0 -1
  440. package/dist/providers/github-copilot-headers.d.ts +0 -8
  441. package/dist/providers/github-copilot-headers.d.ts.map +0 -1
  442. package/dist/providers/github-copilot-headers.js +0 -29
  443. package/dist/providers/github-copilot-headers.js.map +0 -1
  444. package/dist/providers/google-gemini-cli.d.ts +0 -74
  445. package/dist/providers/google-gemini-cli.d.ts.map +0 -1
  446. package/dist/providers/google-gemini-cli.js +0 -779
  447. package/dist/providers/google-gemini-cli.js.map +0 -1
  448. package/dist/providers/google-shared.d.ts +0 -70
  449. package/dist/providers/google-shared.d.ts.map +0 -1
  450. package/dist/providers/google-shared.js +0 -329
  451. package/dist/providers/google-shared.js.map +0 -1
  452. package/dist/providers/google-vertex.d.ts +0 -15
  453. package/dist/providers/google-vertex.d.ts.map +0 -1
  454. package/dist/providers/google-vertex.js +0 -442
  455. package/dist/providers/google-vertex.js.map +0 -1
  456. package/dist/providers/google.d.ts +0 -13
  457. package/dist/providers/google.d.ts.map +0 -1
  458. package/dist/providers/google.js +0 -400
  459. package/dist/providers/google.js.map +0 -1
  460. package/dist/providers/images/openrouter.d.ts +0 -3
  461. package/dist/providers/images/openrouter.d.ts.map +0 -1
  462. package/dist/providers/images/openrouter.js +0 -129
  463. package/dist/providers/images/openrouter.js.map +0 -1
  464. package/dist/providers/images/register-builtins.d.ts +0 -4
  465. package/dist/providers/images/register-builtins.d.ts.map +0 -1
  466. package/dist/providers/images/register-builtins.js +0 -34
  467. package/dist/providers/images/register-builtins.js.map +0 -1
  468. package/dist/providers/mistral.d.ts +0 -25
  469. package/dist/providers/mistral.d.ts.map +0 -1
  470. package/dist/providers/mistral.js +0 -535
  471. package/dist/providers/mistral.js.map +0 -1
  472. package/dist/providers/openai-codex-responses.d.ts +0 -30
  473. package/dist/providers/openai-codex-responses.d.ts.map +0 -1
  474. package/dist/providers/openai-codex-responses.js +0 -1090
  475. package/dist/providers/openai-codex-responses.js.map +0 -1
  476. package/dist/providers/openai-completions.d.ts +0 -19
  477. package/dist/providers/openai-completions.d.ts.map +0 -1
  478. package/dist/providers/openai-completions.js +0 -950
  479. package/dist/providers/openai-completions.js.map +0 -1
  480. package/dist/providers/openai-prompt-cache.d.ts +0 -3
  481. package/dist/providers/openai-prompt-cache.d.ts.map +0 -1
  482. package/dist/providers/openai-prompt-cache.js +0 -10
  483. package/dist/providers/openai-prompt-cache.js.map +0 -1
  484. package/dist/providers/openai-responses-shared.d.ts +0 -18
  485. package/dist/providers/openai-responses-shared.d.ts.map +0 -1
  486. package/dist/providers/openai-responses-shared.js +0 -492
  487. package/dist/providers/openai-responses-shared.js.map +0 -1
  488. package/dist/providers/openai-responses.d.ts +0 -13
  489. package/dist/providers/openai-responses.d.ts.map +0 -1
  490. package/dist/providers/openai-responses.js +0 -237
  491. package/dist/providers/openai-responses.js.map +0 -1
  492. package/dist/providers/register-builtins.d.ts +0 -38
  493. package/dist/providers/register-builtins.d.ts.map +0 -1
  494. package/dist/providers/register-builtins.js +0 -278
  495. package/dist/providers/register-builtins.js.map +0 -1
  496. package/dist/providers/simple-options.d.ts +0 -8
  497. package/dist/providers/simple-options.d.ts.map +0 -1
  498. package/dist/providers/simple-options.js +0 -41
  499. package/dist/providers/simple-options.js.map +0 -1
  500. package/dist/providers/transform-messages.d.ts.map +0 -1
  501. package/dist/providers/transform-messages.js +0 -184
  502. package/dist/providers/transform-messages.js.map +0 -1
  503. package/dist/session-resources.d.ts +0 -4
  504. package/dist/session-resources.d.ts.map +0 -1
  505. package/dist/session-resources.js +0 -22
  506. package/dist/session-resources.js.map +0 -1
  507. package/dist/stream.d.ts +0 -8
  508. package/dist/stream.d.ts.map +0 -1
  509. package/dist/stream.js +0 -27
  510. package/dist/stream.js.map +0 -1
  511. package/dist/types.d.ts +0 -498
  512. package/dist/types.d.ts.map +0 -1
  513. package/dist/types.js +0 -2
  514. package/dist/types.js.map +0 -1
  515. package/dist/utils/diagnostics.d.ts +0 -19
  516. package/dist/utils/diagnostics.d.ts.map +0 -1
  517. package/dist/utils/diagnostics.js +0 -25
  518. package/dist/utils/diagnostics.js.map +0 -1
  519. package/dist/utils/event-stream.d.ts +0 -21
  520. package/dist/utils/event-stream.d.ts.map +0 -1
  521. package/dist/utils/event-stream.js +0 -81
  522. package/dist/utils/event-stream.js.map +0 -1
  523. package/dist/utils/hash.d.ts +0 -3
  524. package/dist/utils/hash.d.ts.map +0 -1
  525. package/dist/utils/hash.js +0 -14
  526. package/dist/utils/hash.js.map +0 -1
  527. package/dist/utils/headers.d.ts +0 -2
  528. package/dist/utils/headers.d.ts.map +0 -1
  529. package/dist/utils/headers.js +0 -8
  530. package/dist/utils/headers.js.map +0 -1
  531. package/dist/utils/json-parse.d.ts +0 -16
  532. package/dist/utils/json-parse.d.ts.map +0 -1
  533. package/dist/utils/json-parse.js +0 -113
  534. package/dist/utils/json-parse.js.map +0 -1
  535. package/dist/utils/node-http-proxy.d.ts +0 -10
  536. package/dist/utils/node-http-proxy.d.ts.map +0 -1
  537. package/dist/utils/node-http-proxy.js +0 -97
  538. package/dist/utils/node-http-proxy.js.map +0 -1
  539. package/dist/utils/oauth/anthropic.d.ts +0 -25
  540. package/dist/utils/oauth/anthropic.d.ts.map +0 -1
  541. package/dist/utils/oauth/anthropic.js +0 -335
  542. package/dist/utils/oauth/anthropic.js.map +0 -1
  543. package/dist/utils/oauth/device-code.d.ts +0 -19
  544. package/dist/utils/oauth/device-code.d.ts.map +0 -1
  545. package/dist/utils/oauth/device-code.js +0 -55
  546. package/dist/utils/oauth/device-code.js.map +0 -1
  547. package/dist/utils/oauth/github-copilot.d.ts +0 -30
  548. package/dist/utils/oauth/github-copilot.d.ts.map +0 -1
  549. package/dist/utils/oauth/github-copilot.js +0 -268
  550. package/dist/utils/oauth/github-copilot.js.map +0 -1
  551. package/dist/utils/oauth/google-antigravity.d.ts +0 -26
  552. package/dist/utils/oauth/google-antigravity.d.ts.map +0 -1
  553. package/dist/utils/oauth/google-antigravity.js +0 -377
  554. package/dist/utils/oauth/google-antigravity.js.map +0 -1
  555. package/dist/utils/oauth/google-gemini-cli.d.ts +0 -26
  556. package/dist/utils/oauth/google-gemini-cli.d.ts.map +0 -1
  557. package/dist/utils/oauth/google-gemini-cli.js +0 -482
  558. package/dist/utils/oauth/google-gemini-cli.js.map +0 -1
  559. package/dist/utils/oauth/index.d.ts +0 -63
  560. package/dist/utils/oauth/index.d.ts.map +0 -1
  561. package/dist/utils/oauth/index.js +0 -131
  562. package/dist/utils/oauth/index.js.map +0 -1
  563. package/dist/utils/oauth/oauth-page.d.ts +0 -3
  564. package/dist/utils/oauth/oauth-page.d.ts.map +0 -1
  565. package/dist/utils/oauth/oauth-page.js +0 -105
  566. package/dist/utils/oauth/oauth-page.js.map +0 -1
  567. package/dist/utils/oauth/openai-codex.d.ts +0 -34
  568. package/dist/utils/oauth/openai-codex.d.ts.map +0 -1
  569. package/dist/utils/oauth/openai-codex.js +0 -385
  570. package/dist/utils/oauth/openai-codex.js.map +0 -1
  571. package/dist/utils/oauth/pkce.d.ts.map +0 -1
  572. package/dist/utils/oauth/pkce.js +0 -31
  573. package/dist/utils/oauth/pkce.js.map +0 -1
  574. package/dist/utils/oauth/types.d.ts +0 -64
  575. package/dist/utils/oauth/types.d.ts.map +0 -1
  576. package/dist/utils/oauth/types.js +0 -2
  577. package/dist/utils/oauth/types.js.map +0 -1
  578. package/dist/utils/overflow.d.ts.map +0 -1
  579. package/dist/utils/overflow.js +0 -151
  580. package/dist/utils/overflow.js.map +0 -1
  581. package/dist/utils/sanitize-unicode.d.ts +0 -22
  582. package/dist/utils/sanitize-unicode.d.ts.map +0 -1
  583. package/dist/utils/sanitize-unicode.js +0 -26
  584. package/dist/utils/sanitize-unicode.js.map +0 -1
  585. package/dist/utils/typebox-helpers.d.ts +0 -17
  586. package/dist/utils/typebox-helpers.d.ts.map +0 -1
  587. package/dist/utils/typebox-helpers.js +0 -21
  588. package/dist/utils/typebox-helpers.js.map +0 -1
  589. package/dist/utils/validation.d.ts +0 -18
  590. package/dist/utils/validation.d.ts.map +0 -1
  591. package/dist/utils/validation.js +0 -281
  592. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1,679 @@
1
+ import { $env, extractHttpStatusFromError, structuredCloneJSON } from "@aryee337/aery-utils";
2
+ import OpenAI, { APIConnectionTimeoutError as OpenAIConnectionTimeoutError } from "openai";
3
+ import type {
4
+ Tool as OpenAITool,
5
+ ResponseCreateParamsStreaming,
6
+ ResponseInput,
7
+ } from "openai/resources/responses/responses";
8
+ import { getEnvApiKey } from "../stream";
9
+ import type {
10
+ AssistantMessage,
11
+ CacheRetention,
12
+ Context,
13
+ FetchImpl,
14
+ MessageAttribution,
15
+ Model,
16
+ OpenAICompat,
17
+ ProviderSessionState,
18
+ ServiceTier,
19
+ StreamFunction,
20
+ StreamOptions,
21
+ Tool,
22
+ ToolChoice,
23
+ } from "../types";
24
+ import {
25
+ createOpenAIResponsesHistoryPayload,
26
+ getOpenAIResponsesHistoryItems,
27
+ getOpenAIResponsesHistoryPayload,
28
+ normalizeSystemPrompts,
29
+ resolveCacheRetention,
30
+ sanitizeOpenAIResponsesHistoryItemsForReplay,
31
+ } from "../utils";
32
+ import { createAbortSourceTracker } from "../utils/abort";
33
+ import { AssistantMessageEventStream } from "../utils/event-stream";
34
+ import { finalizeErrorMessage, type RawHttpRequestDump, rewriteCopilotError } from "../utils/http-inspector";
35
+ import {
36
+ getOpenAIStreamFirstEventTimeoutMs,
37
+ getOpenAIStreamIdleTimeoutMs,
38
+ iterateWithIdleTimeout,
39
+ } from "../utils/idle-iterator";
40
+ import { parseGitHubCopilotApiKey } from "../utils/oauth/github-copilot";
41
+ import { notifyProviderResponse } from "../utils/provider-response";
42
+ import { callWithCopilotModelRetry } from "../utils/retry";
43
+ import { adaptSchemaForStrict, NO_STRICT, sanitizeSchemaForOpenAIResponses, toolWireSchema } from "../utils/schema";
44
+ import { createSdkStreamRequestOptions } from "../utils/sdk-stream-timeout";
45
+ import { wrapFetchForSseDebug } from "../utils/sse-debug";
46
+ import { mapToOpenAIResponsesToolChoice, type OpenAIResponsesToolChoice } from "../utils/tool-choice";
47
+ import {
48
+ buildCopilotDynamicHeaders,
49
+ hasCopilotVisionInput,
50
+ resolveGitHubCopilotBaseUrl,
51
+ } from "./github-copilot-headers";
52
+ import { compactGrammarDefinition } from "./grammar";
53
+ import {
54
+ appendResponsesToolResultMessages,
55
+ applyCommonResponsesSamplingParams,
56
+ applyResponsesReasoningParams,
57
+ collectCustomCallIds,
58
+ collectKnownCallIds,
59
+ convertResponsesAssistantMessage,
60
+ convertResponsesInputContent,
61
+ createInitialResponsesAssistantMessage,
62
+ isOpenAIResponsesProgressEvent,
63
+ normalizeResponsesToolCallIdForTransform,
64
+ processResponsesStream,
65
+ repairOrphanResponsesToolOutputs,
66
+ } from "./openai-responses-shared";
67
+ import { transformMessages } from "./transform-messages";
68
+
69
+ /**
70
+ * Get prompt cache retention based on cacheRetention and base URL.
71
+ * Only applies to direct OpenAI API calls (api.openai.com).
72
+ */
73
+ function getPromptCacheRetention(baseUrl: string, cacheRetention: CacheRetention): "24h" | undefined {
74
+ if (cacheRetention !== "long") {
75
+ return undefined;
76
+ }
77
+ if (baseUrl.includes("api.openai.com")) {
78
+ return "24h";
79
+ }
80
+ return undefined;
81
+ }
82
+
83
+ export function normalizeOpenAIResponsesPromptCacheKey(sessionId: string | undefined): string | undefined {
84
+ if (!sessionId || sessionId.length === 0) return undefined;
85
+ const wellFormed = sessionId.toWellFormed();
86
+ if (wellFormed.length <= 64) return wellFormed;
87
+ return `pc_${Bun.hash(wellFormed).toString(36)}`;
88
+ }
89
+
90
+ // OpenAI Responses-specific options
91
+ export interface OpenAIResponsesOptions extends StreamOptions {
92
+ reasoning?: "minimal" | "low" | "medium" | "high" | "xhigh";
93
+ reasoningSummary?: "auto" | "detailed" | "concise" | null;
94
+ serviceTier?: ServiceTier;
95
+ toolChoice?: ToolChoice;
96
+ /**
97
+ * Enforce strict tool call/result pairing when building Responses API inputs.
98
+ * Azure OpenAI and GitHub Copilot Responses paths require tool results to match prior tool calls.
99
+ */
100
+ strictResponsesPairing?: boolean;
101
+ /**
102
+ * Pass `include: ["reasoning.encrypted_content"]` on requests when the
103
+ * model supports reasoning. Default: true (preserves current behavior).
104
+ * Set to false when the upstream Responses endpoint rejects replayed
105
+ * encrypted reasoning (e.g., xAI Grok under SuperGrok OAuth).
106
+ */
107
+ includeEncryptedReasoning?: boolean;
108
+ /**
109
+ * Strip `type: "reasoning"` items from replayed conversation history
110
+ * before they hit the wire. Default: false (preserves current behavior).
111
+ * Set to true when the upstream rejects replayed reasoning wrappers.
112
+ */
113
+ filterReasoningHistory?: boolean;
114
+ /**
115
+ * Suppress the `reasoning.effort` wire param when set, even if
116
+ * `options.reasoning` is requested. Default: false. xAI Grok models
117
+ * outside the effort-capable allowlist 400 with "Model X does not
118
+ * support parameter reasoningEffort" — the xAI Responses adapter sets
119
+ * this when the target model is not in GROK_EFFORT_CAPABLE_PREFIXES.
120
+ */
121
+ omitReasoningEffort?: boolean;
122
+ /**
123
+ * Extra request headers merged onto the underlying client's
124
+ * defaultHeaders. Used by adapter wrappers to inject provider-specific
125
+ * routing or cache hints.
126
+ */
127
+ headers?: Record<string, string>;
128
+ /**
129
+ * Extra body fields merged into the Responses request payload. Used by
130
+ * adapter wrappers to inject provider-specific body keys (e.g.,
131
+ * prompt_cache_key for prompt-cache routing).
132
+ */
133
+ extraBody?: Record<string, unknown>;
134
+ }
135
+
136
+ const OPENAI_RESPONSES_PROVIDER_SESSION_STATE_PREFIX = "openai-responses:";
137
+ const OPENAI_RESPONSES_FIRST_EVENT_TIMEOUT_MESSAGE =
138
+ "OpenAI responses stream timed out while waiting for the first event";
139
+
140
+ interface OpenAIResponsesProviderSessionState extends ProviderSessionState {
141
+ nativeHistoryReplayWarmed: boolean;
142
+ }
143
+
144
+ function createOpenAIResponsesProviderSessionState(): OpenAIResponsesProviderSessionState {
145
+ const state: OpenAIResponsesProviderSessionState = {
146
+ nativeHistoryReplayWarmed: false,
147
+ close: () => {
148
+ state.nativeHistoryReplayWarmed = false;
149
+ },
150
+ };
151
+ return state;
152
+ }
153
+
154
+ function getOpenAIResponsesProviderSessionStateKey(model: Model<"openai-responses">): string {
155
+ return `${OPENAI_RESPONSES_PROVIDER_SESSION_STATE_PREFIX}${model.provider}`;
156
+ }
157
+
158
+ function getOpenAIResponsesProviderSessionState(
159
+ model: Model<"openai-responses">,
160
+ providerSessionState: Map<string, ProviderSessionState> | undefined,
161
+ ): OpenAIResponsesProviderSessionState | undefined {
162
+ if (!providerSessionState) return undefined;
163
+ const key = getOpenAIResponsesProviderSessionStateKey(model);
164
+ const existing = providerSessionState.get(key) as OpenAIResponsesProviderSessionState | undefined;
165
+ if (existing) return existing;
166
+ const created = createOpenAIResponsesProviderSessionState();
167
+ providerSessionState.set(key, created);
168
+ return created;
169
+ }
170
+
171
+ function canReplayOpenAIResponsesNativeHistory(
172
+ providerSessionState: OpenAIResponsesProviderSessionState | undefined,
173
+ ): boolean {
174
+ return providerSessionState?.nativeHistoryReplayWarmed ?? true;
175
+ }
176
+
177
+ type OpenAIResponsesSamplingParams = ResponseCreateParamsStreaming & {
178
+ top_p?: number;
179
+ top_k?: number;
180
+ min_p?: number;
181
+ presence_penalty?: number;
182
+ repetition_penalty?: number;
183
+ stream_options?: { include_obfuscation?: boolean };
184
+ };
185
+
186
+ /**
187
+ * Generate function for OpenAI Responses API
188
+ */
189
+ export const streamOpenAIResponses: StreamFunction<"openai-responses"> = (
190
+ model: Model<"openai-responses">,
191
+ context: Context,
192
+ options?: OpenAIResponsesOptions,
193
+ ): AssistantMessageEventStream => {
194
+ const stream = new AssistantMessageEventStream();
195
+
196
+ // Start async processing
197
+ (async () => {
198
+ const startTime = Date.now();
199
+ let firstTokenTime: number | undefined;
200
+
201
+ const output: AssistantMessage = createInitialResponsesAssistantMessage(
202
+ "openai-responses",
203
+ model.provider,
204
+ model.id,
205
+ );
206
+ let rawRequestDump: RawHttpRequestDump | undefined;
207
+ const abortTracker = createAbortSourceTracker(options?.signal);
208
+ const firstEventTimeoutAbortError = new Error(OPENAI_RESPONSES_FIRST_EVENT_TIMEOUT_MESSAGE);
209
+ const { requestAbortController, requestSignal } = abortTracker;
210
+
211
+ try {
212
+ // Keep request routing on `sessionId` while allowing callers to pin a
213
+ // stable prompt-cache key independently. Side-channel calls use this to
214
+ // avoid perturbing provider conversation state without cold-starting the cache.
215
+ const routingSessionId = getOpenAIResponsesRoutingSessionId(options);
216
+ const apiKey = options?.apiKey || getEnvApiKey(model.provider) || "";
217
+ const { client, copilotPremiumRequests, baseUrl } = createClient(
218
+ model,
219
+ context,
220
+ apiKey,
221
+ options?.headers,
222
+ options?.initiatorOverride,
223
+ routingSessionId,
224
+ options?.onSseEvent,
225
+ options?.fetch,
226
+ );
227
+ const premiumRequestsTotal = copilotPremiumRequests;
228
+ const providerSessionState = getOpenAIResponsesProviderSessionState(model, options?.providerSessionState);
229
+ const { params } = buildParams(model, context, options, providerSessionState, baseUrl);
230
+ const idleTimeoutMs = options?.streamIdleTimeoutMs ?? getOpenAIStreamIdleTimeoutMs();
231
+ const firstEventTimeoutMs =
232
+ options?.streamFirstEventTimeoutMs ?? getOpenAIStreamFirstEventTimeoutMs(idleTimeoutMs);
233
+ const requestTimeoutMs =
234
+ firstEventTimeoutMs !== undefined && firstEventTimeoutMs > 0 ? firstEventTimeoutMs : undefined;
235
+ options?.onPayload?.(params);
236
+ rawRequestDump = {
237
+ provider: model.provider,
238
+ api: output.api,
239
+ model: model.id,
240
+ method: "POST",
241
+ url: `${baseUrl ?? "https://api.openai.com/v1"}/responses`,
242
+ body: params,
243
+ };
244
+ const openaiStream = await callWithCopilotModelRetry(
245
+ async () => {
246
+ const requestOptions = createSdkStreamRequestOptions(requestSignal, requestTimeoutMs);
247
+ let requestTimeout: NodeJS.Timeout | undefined;
248
+ if (requestTimeoutMs !== undefined) {
249
+ requestTimeout = setTimeout(
250
+ () => abortTracker.abortLocally(firstEventTimeoutAbortError),
251
+ requestTimeoutMs,
252
+ );
253
+ }
254
+ try {
255
+ const { data, response, request_id } = await client.responses
256
+ .create(params, requestOptions)
257
+ .withResponse();
258
+ await notifyProviderResponse(options, response, model, request_id);
259
+ return data;
260
+ } catch (error) {
261
+ if (error instanceof OpenAIConnectionTimeoutError && !abortTracker.wasCallerAbort()) {
262
+ throw firstEventTimeoutAbortError;
263
+ }
264
+ throw error;
265
+ } finally {
266
+ if (requestTimeout !== undefined) clearTimeout(requestTimeout);
267
+ }
268
+ },
269
+ { provider: model.provider, signal: requestSignal },
270
+ );
271
+ if (premiumRequestsTotal !== undefined) output.usage.premiumRequests = premiumRequestsTotal;
272
+ stream.push({ type: "start", partial: output });
273
+
274
+ const nativeOutputItems: Array<Record<string, unknown>> = [];
275
+ await processResponsesStream(
276
+ iterateWithIdleTimeout(openaiStream, {
277
+ idleTimeoutMs,
278
+ firstItemTimeoutMs: firstEventTimeoutMs,
279
+ firstItemErrorMessage: OPENAI_RESPONSES_FIRST_EVENT_TIMEOUT_MESSAGE,
280
+ errorMessage: "OpenAI responses stream stalled while waiting for the next event",
281
+ onFirstItemTimeout: () => abortTracker.abortLocally(firstEventTimeoutAbortError),
282
+ onIdle: () => requestAbortController.abort(),
283
+ abortSignal: options?.signal,
284
+ isProgressItem: isOpenAIResponsesProgressEvent,
285
+ }),
286
+ output,
287
+ stream,
288
+ model,
289
+ {
290
+ onFirstToken: () => {
291
+ if (!firstTokenTime) firstTokenTime = Date.now();
292
+ },
293
+ onOutputItemDone: item => {
294
+ nativeOutputItems.push(structuredCloneJSON<unknown>(item) as unknown as Record<string, unknown>);
295
+ },
296
+ },
297
+ );
298
+ if (premiumRequestsTotal !== undefined) output.usage.premiumRequests = premiumRequestsTotal;
299
+
300
+ const firstEventTimeoutError = abortTracker.getLocalAbortReason();
301
+ if (firstEventTimeoutError) {
302
+ throw firstEventTimeoutError;
303
+ }
304
+ if (abortTracker.wasCallerAbort()) {
305
+ throw new Error("Request was aborted");
306
+ }
307
+
308
+ if (output.stopReason === "aborted" || output.stopReason === "error") {
309
+ throw new Error(output.errorMessage ?? "An unknown error occurred");
310
+ }
311
+
312
+ output.providerPayload = createOpenAIResponsesHistoryPayload(model.provider, nativeOutputItems);
313
+ if (providerSessionState) providerSessionState.nativeHistoryReplayWarmed = true;
314
+
315
+ output.duration = Date.now() - startTime;
316
+ if (firstTokenTime) output.ttft = firstTokenTime - startTime;
317
+ stream.push({ type: "done", reason: output.stopReason, message: output });
318
+ stream.end();
319
+ } catch (error) {
320
+ for (const block of output.content) delete (block as { index?: number }).index;
321
+ const firstEventTimeoutError = abortTracker.getLocalAbortReason();
322
+ output.stopReason = abortTracker.wasCallerAbort() ? "aborted" : "error";
323
+ output.errorStatus = extractHttpStatusFromError(error);
324
+ output.errorMessage = firstEventTimeoutError?.message ?? (await finalizeErrorMessage(error, rawRequestDump));
325
+ output.errorMessage = rewriteCopilotError(output.errorMessage, error, model.provider);
326
+ output.duration = Date.now() - startTime;
327
+ if (firstTokenTime) output.ttft = firstTokenTime - startTime;
328
+ stream.push({ type: "error", reason: output.stopReason, error: output });
329
+ stream.end();
330
+ }
331
+ })();
332
+
333
+ return stream;
334
+ };
335
+
336
+ function createClient(
337
+ model: Model<"openai-responses">,
338
+ context: Context,
339
+ apiKey?: string,
340
+ extraHeaders?: Record<string, string>,
341
+ initiatorOverride?: MessageAttribution,
342
+ sessionId?: string,
343
+ onSseEvent?: OpenAIResponsesOptions["onSseEvent"],
344
+ fetchOverride?: FetchImpl,
345
+ ): {
346
+ client: OpenAI;
347
+ copilotPremiumRequests: number | undefined;
348
+ baseUrl: string | undefined;
349
+ } {
350
+ if (!apiKey) {
351
+ if (!$env.OPENAI_API_KEY) {
352
+ throw new Error(
353
+ "OpenAI API key is required. Set OPENAI_API_KEY environment variable or pass it as an argument.",
354
+ );
355
+ }
356
+ apiKey = $env.OPENAI_API_KEY;
357
+ }
358
+ const rawApiKey = apiKey;
359
+
360
+ const headers = { ...(model.headers ?? {}), ...(extraHeaders ?? {}) };
361
+ let copilotPremiumRequests: number | undefined;
362
+
363
+ let baseUrl = model.baseUrl;
364
+ if (model.provider === "github-copilot") {
365
+ apiKey = parseGitHubCopilotApiKey(rawApiKey).accessToken;
366
+ const hasImages = hasCopilotVisionInput(context.messages);
367
+ const copilot = buildCopilotDynamicHeaders({
368
+ messages: context.messages,
369
+ hasImages,
370
+ premiumMultiplier: model.premiumMultiplier,
371
+ headers,
372
+ initiatorOverride,
373
+ });
374
+ Object.assign(headers, copilot.headers);
375
+ copilotPremiumRequests = copilot.premiumRequests;
376
+ baseUrl = resolveGitHubCopilotBaseUrl(model.baseUrl, rawApiKey) ?? model.baseUrl;
377
+ }
378
+ if (sessionId && model.provider === "openai" && (baseUrl ?? "").toLowerCase().includes("api.openai.com")) {
379
+ headers.session_id ??= sessionId;
380
+ headers["x-client-request-id"] ??= sessionId;
381
+ }
382
+ const baseFetch = fetchOverride ?? fetch;
383
+ return {
384
+ client: new OpenAI({
385
+ apiKey,
386
+ baseURL: baseUrl,
387
+ dangerouslyAllowBrowser: true,
388
+ maxRetries: 5,
389
+ defaultHeaders: headers,
390
+ fetch: onSseEvent ? wrapFetchForSseDebug(baseFetch, event => onSseEvent(event, model)) : baseFetch,
391
+ }),
392
+ copilotPremiumRequests,
393
+ baseUrl,
394
+ };
395
+ }
396
+
397
+ function getOpenAIResponsesPromptCacheKey(
398
+ options: Pick<OpenAIResponsesOptions, "cacheRetention" | "promptCacheKey" | "sessionId"> | undefined,
399
+ ): string | undefined {
400
+ if (resolveCacheRetention(options?.cacheRetention) === "none") return undefined;
401
+ return normalizeOpenAIResponsesPromptCacheKey(options?.promptCacheKey ?? options?.sessionId);
402
+ }
403
+
404
+ export function getOpenAIResponsesCacheSessionId(
405
+ options: Pick<OpenAIResponsesOptions, "cacheRetention" | "sessionId" | "promptCacheKey"> | undefined,
406
+ ): string | undefined {
407
+ return getOpenAIResponsesPromptCacheKey(options);
408
+ }
409
+ function getOpenAIResponsesRoutingSessionId(
410
+ options: Pick<OpenAIResponsesOptions, "cacheRetention" | "sessionId"> | undefined,
411
+ ): string | undefined {
412
+ if (resolveCacheRetention(options?.cacheRetention) === "none") return undefined;
413
+ return normalizeOpenAIResponsesPromptCacheKey(options?.sessionId);
414
+ }
415
+
416
+ function buildParams(
417
+ model: Model<"openai-responses">,
418
+ context: Context,
419
+ options: OpenAIResponsesOptions | undefined,
420
+ providerSessionState: OpenAIResponsesProviderSessionState | undefined,
421
+ resolvedBaseUrl?: string,
422
+ ): { conversationMessages: ResponseInput; params: OpenAIResponsesSamplingParams } {
423
+ const strictResponsesPairing =
424
+ options?.strictResponsesPairing ??
425
+ (isAzureOpenAIBaseUrl(model.baseUrl ?? "") || model.provider === "github-copilot");
426
+ const conversationMessages = convertConversationMessages(
427
+ model,
428
+ context,
429
+ strictResponsesPairing,
430
+ providerSessionState,
431
+ options,
432
+ );
433
+ const messages: ResponseInput = [...conversationMessages];
434
+
435
+ const systemPrompts = normalizeSystemPrompts(context.systemPrompt);
436
+ let systemInstructions: string | undefined;
437
+ if (systemPrompts.length > 0) {
438
+ const needsDeveloperRole = model.reasoning && supportsDeveloperRole(resolvedBaseUrl ?? model);
439
+ if (needsDeveloperRole) {
440
+ // Reasoning models on known OpenAI-compatible endpoints require the
441
+ // `developer` role. Send all system prompts inline in `input`.
442
+ messages.unshift(
443
+ ...systemPrompts.map(systemPrompt => ({ role: "developer" as const, content: systemPrompt })),
444
+ );
445
+ } else {
446
+ // All other endpoints (including third-party /v1/responses proxies) use
447
+ // the canonical top-level `instructions` field so that proxies that
448
+ // reject `input[{role:"system"}]` work out of the box.
449
+ systemInstructions = systemPrompts.join("\n\n");
450
+ }
451
+ }
452
+
453
+ const cacheRetention = resolveCacheRetention(options?.cacheRetention);
454
+ const promptCacheKey = getOpenAIResponsesPromptCacheKey(options);
455
+ const params: OpenAIResponsesSamplingParams = {
456
+ model: model.id,
457
+ input: messages,
458
+ instructions: systemInstructions,
459
+ stream: true,
460
+ prompt_cache_key: promptCacheKey,
461
+ prompt_cache_retention: promptCacheKey ? getPromptCacheRetention(model.baseUrl, cacheRetention) : undefined,
462
+ store: false,
463
+ stream_options: model.provider === "openai" ? { include_obfuscation: false } : undefined,
464
+ };
465
+
466
+ applyCommonResponsesSamplingParams(params, options, model.provider);
467
+ // TODO: openai responses has no top-level `stop`/`stop_sequences`; surface via reasoning.stop?
468
+ // `StreamOptions.stopSequences` is intentionally dropped for this provider.
469
+ // TODO: openai responses has no top-level `frequency_penalty` field as of the current SDK;
470
+ // `StreamOptions.frequencyPenalty` is intentionally dropped for this provider.
471
+
472
+ if (context.tools) {
473
+ params.tools = convertTools(context.tools, supportsStrictMode(model), model);
474
+ if (options?.toolChoice) {
475
+ params.tool_choice = mapOpenAIResponsesToolChoiceForTools(options.toolChoice, context.tools, model);
476
+ }
477
+ // The apply_patch spec §1 marks only `apply_patch` itself as
478
+ // `supports_parallel_tool_calls = false`. OpenAI's Responses API
479
+ // exposes `parallel_tool_calls` as a request-scoped flag, not a
480
+ // per-tool one, so when a custom grammar tool is in the list we
481
+ // disable parallelism for the whole turn. Slightly coarser than
482
+ // the spec requires — but the platform API offers no finer knob.
483
+ if (params.tools.some(t => (t as { type?: string }).type === "custom")) {
484
+ params.parallel_tool_calls = false;
485
+ }
486
+ }
487
+
488
+ applyResponsesReasoningParams(
489
+ params,
490
+ model,
491
+ options,
492
+ messages,
493
+ effort =>
494
+ mapReasoningEffort(
495
+ effort as NonNullable<OpenAIResponsesOptions["reasoning"]>,
496
+ model.compat?.reasoningEffortMap,
497
+ ),
498
+ options?.includeEncryptedReasoning ?? true,
499
+ options?.omitReasoningEffort ?? false,
500
+ );
501
+
502
+ if (options?.extraBody) {
503
+ Object.assign(params, options.extraBody);
504
+ }
505
+
506
+ return { conversationMessages, params };
507
+ }
508
+
509
+ function mapReasoningEffort(
510
+ effort: NonNullable<OpenAIResponsesOptions["reasoning"]>,
511
+ reasoningEffortMap: OpenAICompat["reasoningEffortMap"] | undefined,
512
+ ): string {
513
+ return reasoningEffortMap?.[effort] ?? effort;
514
+ }
515
+
516
+ function isAzureOpenAIBaseUrl(baseUrl: string): boolean {
517
+ return baseUrl.includes(".openai.azure.com") || baseUrl.includes("azure.com/openai");
518
+ }
519
+
520
+ function supportsStrictMode(model: Model<"openai-responses">): boolean {
521
+ if (model.provider === "openai" || model.provider === "azure" || model.provider === "github-copilot") return true;
522
+
523
+ const baseUrl = model.baseUrl.toLowerCase();
524
+ return (
525
+ baseUrl.includes("api.openai.com") ||
526
+ baseUrl.includes(".openai.azure.com") ||
527
+ baseUrl.includes("models.inference.ai.azure.com")
528
+ );
529
+ }
530
+
531
+ export function supportsDeveloperRole(modelOrBaseUrl: Pick<Model, "provider" | "baseUrl"> | string): boolean {
532
+ const baseUrl =
533
+ typeof modelOrBaseUrl === "string" ? modelOrBaseUrl.toLowerCase() : (modelOrBaseUrl.baseUrl ?? "").toLowerCase();
534
+ return (
535
+ baseUrl.includes("api.openai.com") ||
536
+ baseUrl.includes(".openai.azure.com") ||
537
+ baseUrl.includes("azure.com/openai") ||
538
+ baseUrl.includes("models.inference.ai.azure.com") ||
539
+ baseUrl.includes("githubcopilot.com") ||
540
+ baseUrl.includes("copilot-api.")
541
+ );
542
+ }
543
+
544
+ function convertConversationMessages(
545
+ model: Model<"openai-responses">,
546
+ context: Context,
547
+ strictResponsesPairing: boolean,
548
+ providerSessionState: OpenAIResponsesProviderSessionState | undefined,
549
+ options?: OpenAIResponsesOptions,
550
+ ): ResponseInput {
551
+ const filterReasoning = <T extends { type?: string }>(items: T[]): T[] =>
552
+ options?.filterReasoningHistory ? items.filter(i => i?.type !== "reasoning") : items;
553
+ const messages: ResponseInput = [];
554
+ let knownCallIds = new Set<string>();
555
+ const customCallIds = new Set<string>();
556
+ const shouldReplayNativeHistory = canReplayOpenAIResponsesNativeHistory(providerSessionState);
557
+ const transformedMessages = transformMessages(context.messages, model, normalizeResponsesToolCallIdForTransform);
558
+
559
+ let msgIndex = 0;
560
+ for (const msg of transformedMessages) {
561
+ if (msg.role === "user" || msg.role === "developer") {
562
+ const providerPayload = (msg as { providerPayload?: AssistantMessage["providerPayload"] }).providerPayload;
563
+ const historyItems = getOpenAIResponsesHistoryItems(providerPayload, model.provider);
564
+ const shouldReplayPayloadItems =
565
+ shouldReplayNativeHistory ||
566
+ (historyItems?.some(item => {
567
+ if (!item || typeof item !== "object") return false;
568
+ const candidate = item as { type?: unknown };
569
+ return candidate.type === "compaction" || candidate.type === "compaction_summary";
570
+ }) ??
571
+ false);
572
+ if (historyItems && shouldReplayPayloadItems) {
573
+ messages.push(...sanitizeOpenAIResponsesHistoryItemsForReplay(filterReasoning(historyItems)));
574
+ knownCallIds = collectKnownCallIds(messages);
575
+ for (const id of collectCustomCallIds(messages)) customCallIds.add(id);
576
+ msgIndex++;
577
+ continue;
578
+ }
579
+ const content = convertResponsesInputContent(msg.content, model.input.includes("image"));
580
+ if (!content) continue;
581
+ messages.push({ role: "user", content });
582
+ } else if (msg.role === "assistant") {
583
+ const assistantMsg = msg as AssistantMessage;
584
+ const providerPayload = shouldReplayNativeHistory
585
+ ? getOpenAIResponsesHistoryPayload(assistantMsg.providerPayload, model.provider, assistantMsg.provider)
586
+ : undefined;
587
+ const historyItems = providerPayload?.items;
588
+ if (historyItems) {
589
+ const sanitizedHistoryItems = sanitizeOpenAIResponsesHistoryItemsForReplay(filterReasoning(historyItems));
590
+ if (providerPayload?.dt) {
591
+ messages.push(...sanitizedHistoryItems);
592
+ } else {
593
+ messages.splice(0, messages.length, ...sanitizedHistoryItems);
594
+ }
595
+ knownCallIds = collectKnownCallIds(messages);
596
+ for (const id of collectCustomCallIds(messages)) customCallIds.add(id);
597
+ msgIndex++;
598
+ continue;
599
+ }
600
+
601
+ const outputItems = convertResponsesAssistantMessage(
602
+ assistantMsg,
603
+ model,
604
+ msgIndex,
605
+ knownCallIds,
606
+ shouldReplayNativeHistory,
607
+ customCallIds,
608
+ );
609
+ if (outputItems.length === 0) continue;
610
+ messages.push(...outputItems);
611
+ } else if (msg.role === "toolResult") {
612
+ appendResponsesToolResultMessages(messages, msg, model, strictResponsesPairing, knownCallIds, customCallIds);
613
+ }
614
+ msgIndex++;
615
+ }
616
+
617
+ return repairOrphanResponsesToolOutputs(messages);
618
+ }
619
+
620
+ /**
621
+ * Whether this model should get the OpenAI custom-tool grammar variant
622
+ * for `apply_patch`. The generated model catalog sets
623
+ * `model.applyPatchToolType` for first-party GPT-5 Responses models; this
624
+ * runtime path only consumes that metadata.
625
+ * @internal Exported for tests.
626
+ */
627
+ export function supportsFreeformApplyPatch(model: Model<"openai-responses">): boolean {
628
+ return model.applyPatchToolType === "freeform";
629
+ }
630
+
631
+ /** @internal Exported for tests. */
632
+ export function mapOpenAIResponsesToolChoiceForTools(
633
+ choice: ToolChoice | undefined,
634
+ tools: Tool[],
635
+ model: Model<"openai-responses">,
636
+ ): OpenAIResponsesToolChoice {
637
+ const mapped = mapToOpenAIResponsesToolChoice(choice);
638
+ if (!mapped || typeof mapped === "string" || mapped.type !== "function" || !supportsFreeformApplyPatch(model)) {
639
+ return mapped;
640
+ }
641
+
642
+ const customTool = tools.find(
643
+ tool => tool.customFormat && (tool.name === mapped.name || tool.customWireName === mapped.name),
644
+ );
645
+ return customTool ? { type: "custom", name: customTool.customWireName ?? customTool.name } : mapped;
646
+ }
647
+
648
+ /** @internal Exported for tests. */
649
+ export function convertTools(tools: Tool[], strictMode: boolean, model: Model<"openai-responses">): OpenAITool[] {
650
+ const allowFreeform = supportsFreeformApplyPatch(model);
651
+ return tools.map(tool => {
652
+ if (allowFreeform && tool.customFormat) {
653
+ return {
654
+ type: "custom",
655
+ // Tool advertises its wire-level name (e.g. `apply_patch`) — the
656
+ // agent-loop dispatcher will match incoming calls by either the
657
+ // internal `name` or `customWireName`.
658
+ name: tool.customWireName ?? tool.name,
659
+ description: tool.description || "",
660
+ format: {
661
+ type: "grammar",
662
+ syntax: tool.customFormat.syntax,
663
+ definition: compactGrammarDefinition(tool.customFormat.syntax, tool.customFormat.definition),
664
+ },
665
+ } as unknown as OpenAITool;
666
+ }
667
+ const strict = !NO_STRICT && strictMode && tool.strict !== false;
668
+ const baseParameters = toolWireSchema(tool);
669
+ const responseParameters = sanitizeSchemaForOpenAIResponses(baseParameters);
670
+ const { schema: parameters, strict: effectiveStrict } = adaptSchemaForStrict(responseParameters, strict);
671
+ return {
672
+ type: "function",
673
+ name: tool.name,
674
+ description: tool.description || "",
675
+ parameters,
676
+ ...(effectiveStrict && { strict: true }),
677
+ } as OpenAITool;
678
+ });
679
+ }