@vib-rato/ai 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (525) hide show
  1. package/CHANGELOG.md +3354 -0
  2. package/README.md +1194 -0
  3. package/dist/types/adapter-internals/provider-safety-stop.d.ts +45 -0
  4. package/dist/types/api-registry.d.ts +30 -0
  5. package/dist/types/auth-broker/client.d.ts +80 -0
  6. package/dist/types/auth-broker/index.d.ts +5 -0
  7. package/dist/types/auth-broker/redact.d.ts +7 -0
  8. package/dist/types/auth-broker/refresher.d.ts +25 -0
  9. package/dist/types/auth-broker/remote-store.d.ts +153 -0
  10. package/dist/types/auth-broker/server.d.ts +32 -0
  11. package/dist/types/auth-broker/types.d.ts +132 -0
  12. package/dist/types/auth-broker/wire-schemas.d.ts +555 -0
  13. package/dist/types/auth-gateway/http.d.ts +40 -0
  14. package/dist/types/auth-gateway/index.d.ts +3 -0
  15. package/dist/types/auth-gateway/server.d.ts +70 -0
  16. package/dist/types/auth-gateway/types.d.ts +129 -0
  17. package/dist/types/auth-storage.d.ts +1074 -0
  18. package/dist/types/cli.d.ts +2 -0
  19. package/dist/types/codex-tools.d.ts +4 -0
  20. package/dist/types/context-cap-policy.d.ts +68 -0
  21. package/dist/types/core.d.ts +35 -0
  22. package/dist/types/index.d.ts +55 -0
  23. package/dist/types/model-cache.d.ts +24 -0
  24. package/dist/types/model-manager.d.ts +77 -0
  25. package/dist/types/model-pricing.d.ts +3 -0
  26. package/dist/types/model-retirements.d.ts +6 -0
  27. package/dist/types/model-thinking.d.ts +100 -0
  28. package/dist/types/models.d.ts +21 -0
  29. package/dist/types/openai-completions-compat.d.ts +34 -0
  30. package/dist/types/provider-details.d.ts +24 -0
  31. package/dist/types/provider-models/bundled-references.d.ts +4 -0
  32. package/dist/types/provider-models/descriptors.d.ts +48 -0
  33. package/dist/types/provider-models/google.d.ts +20 -0
  34. package/dist/types/provider-models/index.d.ts +5 -0
  35. package/dist/types/provider-models/ollama.d.ts +7 -0
  36. package/dist/types/provider-models/openai-compat.d.ts +293 -0
  37. package/dist/types/provider-models/special.d.ts +29 -0
  38. package/dist/types/providers/amazon-bedrock.d.ts +60 -0
  39. package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
  40. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  41. package/dist/types/providers/anthropic.d.ts +280 -0
  42. package/dist/types/providers/aws-credential-config.d.ts +19 -0
  43. package/dist/types/providers/aws-credentials.d.ts +43 -0
  44. package/dist/types/providers/aws-eventstream.d.ts +38 -0
  45. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  46. package/dist/types/providers/azure-openai-responses.d.ts +22 -0
  47. package/dist/types/providers/composer-discipline.d.ts +32 -0
  48. package/dist/types/providers/cursor/client-version.d.ts +10 -0
  49. package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
  50. package/dist/types/providers/cursor/gen/agent_pb.d.ts +16769 -0
  51. package/dist/types/providers/cursor-pi-args.d.ts +119 -0
  52. package/dist/types/providers/cursor.d.ts +72 -0
  53. package/dist/types/providers/dashscope-token-plan-headers.d.ts +57 -0
  54. package/dist/types/providers/error-message.d.ts +27 -0
  55. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  56. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  57. package/dist/types/providers/google-auth.d.ts +26 -0
  58. package/dist/types/providers/google-gemini-cli.d.ts +75 -0
  59. package/dist/types/providers/google-gemini-headers.d.ts +43 -0
  60. package/dist/types/providers/google-shared.d.ts +183 -0
  61. package/dist/types/providers/google-types.d.ts +138 -0
  62. package/dist/types/providers/google-vertex.d.ts +11 -0
  63. package/dist/types/providers/google.d.ts +4 -0
  64. package/dist/types/providers/grammar.d.ts +1 -0
  65. package/dist/types/providers/kimi.d.ts +27 -0
  66. package/dist/types/providers/kiro-api-key.d.ts +50 -0
  67. package/dist/types/providers/kiro-codewhisperer.d.ts +11 -0
  68. package/dist/types/providers/mock.d.ts +189 -0
  69. package/dist/types/providers/ollama.d.ts +41 -0
  70. package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
  71. package/dist/types/providers/openai-bounded-rate-limits.d.ts +3 -0
  72. package/dist/types/providers/openai-chat-server-schema.d.ts +1733 -0
  73. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  74. package/dist/types/providers/openai-codex/constants.d.ts +26 -0
  75. package/dist/types/providers/openai-codex/request-transformer.d.ts +50 -0
  76. package/dist/types/providers/openai-codex/response-handler.d.ts +18 -0
  77. package/dist/types/providers/openai-codex-responses.d.ts +71 -0
  78. package/dist/types/providers/openai-completions-compat.d.ts +6 -0
  79. package/dist/types/providers/openai-completions.d.ts +35 -0
  80. package/dist/types/providers/openai-opencodex-responses.d.ts +10 -0
  81. package/dist/types/providers/openai-request-transform.d.ts +4 -0
  82. package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
  83. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  84. package/dist/types/providers/openai-responses-shared.d.ts +106 -0
  85. package/dist/types/providers/openai-responses.d.ts +37 -0
  86. package/dist/types/providers/pi-native-client.d.ts +29 -0
  87. package/dist/types/providers/pi-native-server.d.ts +60 -0
  88. package/dist/types/providers/register-builtins.d.ts +59 -0
  89. package/dist/types/providers/synthetic.d.ts +26 -0
  90. package/dist/types/providers/transform-messages.d.ts +33 -0
  91. package/dist/types/providers/vision-guard.d.ts +8 -0
  92. package/dist/types/rate-limit-utils.d.ts +19 -0
  93. package/dist/types/stream.d.ts +45 -0
  94. package/dist/types/types.d.ts +1073 -0
  95. package/dist/types/usage/claude.d.ts +3 -0
  96. package/dist/types/usage/gemini.d.ts +2 -0
  97. package/dist/types/usage/github-copilot.d.ts +7 -0
  98. package/dist/types/usage/google-antigravity.d.ts +2 -0
  99. package/dist/types/usage/grok-cli.d.ts +17 -0
  100. package/dist/types/usage/kimi.d.ts +4 -0
  101. package/dist/types/usage/minimax-code.d.ts +2 -0
  102. package/dist/types/usage/openai-codex.d.ts +3 -0
  103. package/dist/types/usage/shared.d.ts +1 -0
  104. package/dist/types/usage/zai.d.ts +2 -0
  105. package/dist/types/usage.d.ts +264 -0
  106. package/dist/types/utils/abort.d.ts +19 -0
  107. package/dist/types/utils/anthropic-auth.d.ts +39 -0
  108. package/dist/types/utils/block-symbols.d.ts +6 -0
  109. package/dist/types/utils/discovery/antigravity.d.ts +67 -0
  110. package/dist/types/utils/discovery/codex.d.ts +38 -0
  111. package/dist/types/utils/discovery/cursor.d.ts +49 -0
  112. package/dist/types/utils/discovery/gemini.d.ts +25 -0
  113. package/dist/types/utils/discovery/index.d.ts +4 -0
  114. package/dist/types/utils/discovery/openai-compatible.d.ts +81 -0
  115. package/dist/types/utils/event-stream.d.ts +41 -0
  116. package/dist/types/utils/fallback-transport.d.ts +110 -0
  117. package/dist/types/utils/fireworks-model-id.d.ts +10 -0
  118. package/dist/types/utils/foundry.d.ts +11 -0
  119. package/dist/types/utils/h2-fetch.d.ts +22 -0
  120. package/dist/types/utils/http-inspector.d.ts +59 -0
  121. package/dist/types/utils/idle-iterator.d.ts +122 -0
  122. package/dist/types/utils/json-parse.d.ts +98 -0
  123. package/dist/types/utils/oauth/alibaba-token-plan.d.ts +19 -0
  124. package/dist/types/utils/oauth/anthropic.d.ts +41 -0
  125. package/dist/types/utils/oauth/api-key-login.d.ts +38 -0
  126. package/dist/types/utils/oauth/api-key-validation.d.ts +39 -0
  127. package/dist/types/utils/oauth/bizrouter.d.ts +1 -0
  128. package/dist/types/utils/oauth/callback-server.d.ts +80 -0
  129. package/dist/types/utils/oauth/cerebras.d.ts +1 -0
  130. package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
  131. package/dist/types/utils/oauth/commandcode.d.ts +1 -0
  132. package/dist/types/utils/oauth/cursor.d.ts +15 -0
  133. package/dist/types/utils/oauth/deepinfra.d.ts +1 -0
  134. package/dist/types/utils/oauth/deepseek.d.ts +10 -0
  135. package/dist/types/utils/oauth/firepass.d.ts +1 -0
  136. package/dist/types/utils/oauth/fireworks.d.ts +1 -0
  137. package/dist/types/utils/oauth/fugu.d.ts +1 -0
  138. package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
  139. package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
  140. package/dist/types/utils/oauth/glm-zcode.d.ts +71 -0
  141. package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
  142. package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
  143. package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
  144. package/dist/types/utils/oauth/huggingface.d.ts +19 -0
  145. package/dist/types/utils/oauth/index.d.ts +39 -0
  146. package/dist/types/utils/oauth/kagi.d.ts +17 -0
  147. package/dist/types/utils/oauth/kilo.d.ts +5 -0
  148. package/dist/types/utils/oauth/kimi.d.ts +17 -0
  149. package/dist/types/utils/oauth/kiro.d.ts +71 -0
  150. package/dist/types/utils/oauth/litellm.d.ts +18 -0
  151. package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
  152. package/dist/types/utils/oauth/mara.d.ts +1 -0
  153. package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
  154. package/dist/types/utils/oauth/moonshot.d.ts +1 -0
  155. package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
  156. package/dist/types/utils/oauth/nvidia.d.ts +18 -0
  157. package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
  158. package/dist/types/utils/oauth/ollama.d.ts +18 -0
  159. package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
  160. package/dist/types/utils/oauth/opencode.d.ts +18 -0
  161. package/dist/types/utils/oauth/opengateway.d.ts +1 -0
  162. package/dist/types/utils/oauth/openrouter.d.ts +1 -0
  163. package/dist/types/utils/oauth/parallel.d.ts +17 -0
  164. package/dist/types/utils/oauth/perplexity.d.ts +4 -0
  165. package/dist/types/utils/oauth/pkce.d.ts +8 -0
  166. package/dist/types/utils/oauth/qianfan.d.ts +17 -0
  167. package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
  168. package/dist/types/utils/oauth/sglang.d.ts +16 -0
  169. package/dist/types/utils/oauth/synthetic.d.ts +1 -0
  170. package/dist/types/utils/oauth/tavily.d.ts +17 -0
  171. package/dist/types/utils/oauth/together.d.ts +1 -0
  172. package/dist/types/utils/oauth/types.d.ts +56 -0
  173. package/dist/types/utils/oauth/venice.d.ts +18 -0
  174. package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
  175. package/dist/types/utils/oauth/vllm.d.ts +16 -0
  176. package/dist/types/utils/oauth/xai.d.ts +30 -0
  177. package/dist/types/utils/oauth/xiaomi.d.ts +25 -0
  178. package/dist/types/utils/oauth/zai.d.ts +18 -0
  179. package/dist/types/utils/oauth/zenmux.d.ts +1 -0
  180. package/dist/types/utils/overflow.d.ts +14 -0
  181. package/dist/types/utils/parse-bind.d.ts +26 -0
  182. package/dist/types/utils/provider-response.d.ts +6 -0
  183. package/dist/types/utils/provider-safety-stop.d.ts +8 -0
  184. package/dist/types/utils/proxy.d.ts +7 -0
  185. package/dist/types/utils/retry-after.d.ts +3 -0
  186. package/dist/types/utils/retry-budget.d.ts +1 -0
  187. package/dist/types/utils/retry.d.ts +29 -0
  188. package/dist/types/utils/schema/adapt.d.ts +24 -0
  189. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  190. package/dist/types/utils/schema/dereference.d.ts +11 -0
  191. package/dist/types/utils/schema/draft.d.ts +10 -0
  192. package/dist/types/utils/schema/equality.d.ts +4 -0
  193. package/dist/types/utils/schema/fields.d.ts +49 -0
  194. package/dist/types/utils/schema/index.d.ts +14 -0
  195. package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
  196. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  197. package/dist/types/utils/schema/normalize.d.ts +93 -0
  198. package/dist/types/utils/schema/root-combinator.d.ts +12 -0
  199. package/dist/types/utils/schema/spill.d.ts +8 -0
  200. package/dist/types/utils/schema/stamps.d.ts +25 -0
  201. package/dist/types/utils/schema/types.d.ts +4 -0
  202. package/dist/types/utils/schema/wire.d.ts +54 -0
  203. package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
  204. package/dist/types/utils/sse-debug.d.ts +10 -0
  205. package/dist/types/utils/tool-call-healing.d.ts +80 -0
  206. package/dist/types/utils/tool-choice-capability.d.ts +57 -0
  207. package/dist/types/utils/tool-choice.d.ts +50 -0
  208. package/dist/types/utils/validation.d.ts +17 -0
  209. package/dist/types/utils.d.ts +117 -0
  210. package/package.json +152 -0
  211. package/src/adapter-internals/provider-safety-stop.d.ts +45 -0
  212. package/src/adapter-internals/provider-safety-stop.ts +156 -0
  213. package/src/api-registry.d.ts +30 -0
  214. package/src/api-registry.ts +96 -0
  215. package/src/auth-broker/client.ts +444 -0
  216. package/src/auth-broker/index.ts +5 -0
  217. package/src/auth-broker/redact.ts +39 -0
  218. package/src/auth-broker/refresher.ts +130 -0
  219. package/src/auth-broker/remote-store.ts +1576 -0
  220. package/src/auth-broker/server.ts +764 -0
  221. package/src/auth-broker/types.ts +164 -0
  222. package/src/auth-broker/wire-schemas.ts +261 -0
  223. package/src/auth-gateway/http.ts +198 -0
  224. package/src/auth-gateway/index.ts +3 -0
  225. package/src/auth-gateway/server.ts +1315 -0
  226. package/src/auth-gateway/types.ts +160 -0
  227. package/src/auth-storage.ts +7312 -0
  228. package/src/cli.ts +269 -0
  229. package/src/codex-tools.d.ts +4 -0
  230. package/src/codex-tools.ts +24 -0
  231. package/src/context-cap-policy.d.ts +68 -0
  232. package/src/context-cap-policy.ts +123 -0
  233. package/src/core.ts +44 -0
  234. package/src/index.ts +61 -0
  235. package/src/model-cache.ts +236 -0
  236. package/src/model-manager.ts +744 -0
  237. package/src/model-pricing.d.ts +3 -0
  238. package/src/model-pricing.ts +68 -0
  239. package/src/model-retirements.d.ts +6 -0
  240. package/src/model-retirements.ts +19 -0
  241. package/src/model-thinking.d.ts +100 -0
  242. package/src/model-thinking.ts +1054 -0
  243. package/src/models.d.ts +21 -0
  244. package/src/models.json +94672 -0
  245. package/src/models.json.d.ts +9 -0
  246. package/src/models.ts +126 -0
  247. package/src/openai-completions-compat.d.ts +34 -0
  248. package/src/openai-completions-compat.ts +383 -0
  249. package/src/prompts/composer-bash-policy-recovery.md +1 -0
  250. package/src/prompts/cursor-composer-bash-policy-recovery.md +1 -0
  251. package/src/prompts/cursor-composer-edit-discipline.md +7 -0
  252. package/src/prompts/turn-aborted-guidance.md +4 -0
  253. package/src/provider-details.ts +90 -0
  254. package/src/provider-models/bundled-references.ts +38 -0
  255. package/src/provider-models/descriptors.ts +392 -0
  256. package/src/provider-models/google.ts +92 -0
  257. package/src/provider-models/index.ts +5 -0
  258. package/src/provider-models/ollama.ts +159 -0
  259. package/src/provider-models/openai-compat.ts +2920 -0
  260. package/src/provider-models/special.ts +185 -0
  261. package/src/providers/amazon-bedrock.d.ts +60 -0
  262. package/src/providers/amazon-bedrock.ts +939 -0
  263. package/src/providers/anthropic-messages-server-schema.ts +229 -0
  264. package/src/providers/anthropic-messages-server.ts +839 -0
  265. package/src/providers/anthropic.d.ts +280 -0
  266. package/src/providers/anthropic.ts +4421 -0
  267. package/src/providers/aws-credential-config.d.ts +19 -0
  268. package/src/providers/aws-credential-config.ts +179 -0
  269. package/src/providers/aws-credentials.d.ts +43 -0
  270. package/src/providers/aws-credentials.ts +457 -0
  271. package/src/providers/aws-eventstream.d.ts +38 -0
  272. package/src/providers/aws-eventstream.ts +185 -0
  273. package/src/providers/aws-sigv4.d.ts +55 -0
  274. package/src/providers/aws-sigv4.ts +218 -0
  275. package/src/providers/azure-openai-responses.d.ts +22 -0
  276. package/src/providers/azure-openai-responses.ts +447 -0
  277. package/src/providers/composer-discipline.d.ts +32 -0
  278. package/src/providers/composer-discipline.ts +95 -0
  279. package/src/providers/cursor/client-version.d.ts +10 -0
  280. package/src/providers/cursor/client-version.ts +10 -0
  281. package/src/providers/cursor/exec-modern.d.ts +98 -0
  282. package/src/providers/cursor/exec-modern.ts +497 -0
  283. package/src/providers/cursor/gen/agent_pb.d.ts +16769 -0
  284. package/src/providers/cursor/gen/agent_pb.ts +19780 -0
  285. package/src/providers/cursor/proto/agent.proto +4533 -0
  286. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  287. package/src/providers/cursor/proto/buf.yaml +17 -0
  288. package/src/providers/cursor-pi-args.d.ts +119 -0
  289. package/src/providers/cursor-pi-args.ts +187 -0
  290. package/src/providers/cursor.d.ts +72 -0
  291. package/src/providers/cursor.ts +3396 -0
  292. package/src/providers/dashscope-token-plan-headers.d.ts +57 -0
  293. package/src/providers/dashscope-token-plan-headers.ts +84 -0
  294. package/src/providers/error-message.d.ts +27 -0
  295. package/src/providers/error-message.ts +21 -0
  296. package/src/providers/github-copilot-headers.d.ts +40 -0
  297. package/src/providers/github-copilot-headers.ts +140 -0
  298. package/src/providers/gitlab-duo.d.ts +27 -0
  299. package/src/providers/gitlab-duo.ts +393 -0
  300. package/src/providers/google-auth.d.ts +26 -0
  301. package/src/providers/google-auth.ts +262 -0
  302. package/src/providers/google-gemini-cli.d.ts +75 -0
  303. package/src/providers/google-gemini-cli.ts +969 -0
  304. package/src/providers/google-gemini-headers.d.ts +43 -0
  305. package/src/providers/google-gemini-headers.ts +100 -0
  306. package/src/providers/google-shared.d.ts +183 -0
  307. package/src/providers/google-shared.ts +1105 -0
  308. package/src/providers/google-types.d.ts +138 -0
  309. package/src/providers/google-types.ts +167 -0
  310. package/src/providers/google-vertex.d.ts +11 -0
  311. package/src/providers/google-vertex.ts +124 -0
  312. package/src/providers/google.d.ts +4 -0
  313. package/src/providers/google.ts +41 -0
  314. package/src/providers/grammar.d.ts +1 -0
  315. package/src/providers/grammar.ts +70 -0
  316. package/src/providers/kimi.d.ts +27 -0
  317. package/src/providers/kimi.ts +52 -0
  318. package/src/providers/kiro-api-key.d.ts +50 -0
  319. package/src/providers/kiro-api-key.ts +786 -0
  320. package/src/providers/kiro-codewhisperer.d.ts +11 -0
  321. package/src/providers/kiro-codewhisperer.ts +600 -0
  322. package/src/providers/mock.ts +526 -0
  323. package/src/providers/ollama.d.ts +41 -0
  324. package/src/providers/ollama.ts +645 -0
  325. package/src/providers/openai-anthropic-shim.d.ts +31 -0
  326. package/src/providers/openai-anthropic-shim.ts +156 -0
  327. package/src/providers/openai-bounded-rate-limits.d.ts +3 -0
  328. package/src/providers/openai-bounded-rate-limits.ts +57 -0
  329. package/src/providers/openai-chat-server-schema.ts +254 -0
  330. package/src/providers/openai-chat-server.ts +724 -0
  331. package/src/providers/openai-codex/constants.d.ts +26 -0
  332. package/src/providers/openai-codex/constants.ts +43 -0
  333. package/src/providers/openai-codex/request-transformer.d.ts +50 -0
  334. package/src/providers/openai-codex/request-transformer.ts +219 -0
  335. package/src/providers/openai-codex/response-handler.d.ts +18 -0
  336. package/src/providers/openai-codex/response-handler.ts +111 -0
  337. package/src/providers/openai-codex-responses.d.ts +71 -0
  338. package/src/providers/openai-codex-responses.ts +3288 -0
  339. package/src/providers/openai-completions-compat.d.ts +6 -0
  340. package/src/providers/openai-completions-compat.ts +6 -0
  341. package/src/providers/openai-completions.d.ts +35 -0
  342. package/src/providers/openai-completions.ts +2294 -0
  343. package/src/providers/openai-opencodex-responses.ts +174 -0
  344. package/src/providers/openai-request-transform.d.ts +4 -0
  345. package/src/providers/openai-request-transform.ts +136 -0
  346. package/src/providers/openai-responses-server-schema.ts +290 -0
  347. package/src/providers/openai-responses-server.ts +1268 -0
  348. package/src/providers/openai-responses-shared.d.ts +106 -0
  349. package/src/providers/openai-responses-shared.ts +1253 -0
  350. package/src/providers/openai-responses.d.ts +37 -0
  351. package/src/providers/openai-responses.ts +989 -0
  352. package/src/providers/pi-native-client.d.ts +29 -0
  353. package/src/providers/pi-native-client.ts +243 -0
  354. package/src/providers/pi-native-server.ts +488 -0
  355. package/src/providers/register-builtins.d.ts +59 -0
  356. package/src/providers/register-builtins.ts +544 -0
  357. package/src/providers/synthetic.d.ts +26 -0
  358. package/src/providers/synthetic.ts +50 -0
  359. package/src/providers/transform-messages.d.ts +33 -0
  360. package/src/providers/transform-messages.ts +408 -0
  361. package/src/providers/vision-guard.d.ts +8 -0
  362. package/src/providers/vision-guard.ts +31 -0
  363. package/src/rate-limit-utils.d.ts +19 -0
  364. package/src/rate-limit-utils.ts +102 -0
  365. package/src/stream.d.ts +45 -0
  366. package/src/stream.ts +1306 -0
  367. package/src/types.d.ts +1073 -0
  368. package/src/types.ts +1305 -0
  369. package/src/usage/claude.ts +449 -0
  370. package/src/usage/gemini.ts +250 -0
  371. package/src/usage/github-copilot.ts +421 -0
  372. package/src/usage/google-antigravity.ts +201 -0
  373. package/src/usage/grok-cli.ts +259 -0
  374. package/src/usage/kimi.ts +285 -0
  375. package/src/usage/minimax-code.ts +31 -0
  376. package/src/usage/openai-codex.ts +503 -0
  377. package/src/usage/shared.ts +10 -0
  378. package/src/usage/zai.ts +247 -0
  379. package/src/usage.ts +190 -0
  380. package/src/utils/abort.d.ts +19 -0
  381. package/src/utils/abort.ts +51 -0
  382. package/src/utils/anthropic-auth.ts +95 -0
  383. package/src/utils/block-symbols.d.ts +6 -0
  384. package/src/utils/block-symbols.ts +11 -0
  385. package/src/utils/discovery/antigravity.ts +275 -0
  386. package/src/utils/discovery/codex.ts +362 -0
  387. package/src/utils/discovery/cursor.ts +388 -0
  388. package/src/utils/discovery/gemini.ts +248 -0
  389. package/src/utils/discovery/index.ts +4 -0
  390. package/src/utils/discovery/openai-compatible.ts +379 -0
  391. package/src/utils/event-stream.d.ts +41 -0
  392. package/src/utils/event-stream.ts +269 -0
  393. package/src/utils/fallback-transport.d.ts +110 -0
  394. package/src/utils/fallback-transport.ts +411 -0
  395. package/src/utils/fireworks-model-id.d.ts +10 -0
  396. package/src/utils/fireworks-model-id.ts +30 -0
  397. package/src/utils/foundry.d.ts +11 -0
  398. package/src/utils/foundry.ts +18 -0
  399. package/src/utils/h2-fetch.ts +60 -0
  400. package/src/utils/http-inspector.d.ts +59 -0
  401. package/src/utils/http-inspector.ts +380 -0
  402. package/src/utils/idle-iterator.d.ts +122 -0
  403. package/src/utils/idle-iterator.ts +410 -0
  404. package/src/utils/json-parse.d.ts +98 -0
  405. package/src/utils/json-parse.ts +607 -0
  406. package/src/utils/oauth/alibaba-token-plan.ts +60 -0
  407. package/src/utils/oauth/anthropic.ts +233 -0
  408. package/src/utils/oauth/api-key-login.ts +98 -0
  409. package/src/utils/oauth/api-key-validation.ts +344 -0
  410. package/src/utils/oauth/bizrouter.ts +15 -0
  411. package/src/utils/oauth/callback-server.d.ts +80 -0
  412. package/src/utils/oauth/callback-server.ts +359 -0
  413. package/src/utils/oauth/cerebras.ts +16 -0
  414. package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
  415. package/src/utils/oauth/commandcode.ts +17 -0
  416. package/src/utils/oauth/cursor.ts +157 -0
  417. package/src/utils/oauth/deepinfra.ts +15 -0
  418. package/src/utils/oauth/deepseek.ts +53 -0
  419. package/src/utils/oauth/firepass.ts +24 -0
  420. package/src/utils/oauth/fireworks.ts +15 -0
  421. package/src/utils/oauth/fugu.ts +15 -0
  422. package/src/utils/oauth/github-copilot.d.ts +38 -0
  423. package/src/utils/oauth/github-copilot.ts +362 -0
  424. package/src/utils/oauth/gitlab-duo.ts +123 -0
  425. package/src/utils/oauth/glm-zcode.d.ts +71 -0
  426. package/src/utils/oauth/glm-zcode.ts +433 -0
  427. package/src/utils/oauth/google-antigravity.ts +200 -0
  428. package/src/utils/oauth/google-gemini-cli.ts +256 -0
  429. package/src/utils/oauth/google-oauth-shared.ts +110 -0
  430. package/src/utils/oauth/huggingface.ts +62 -0
  431. package/src/utils/oauth/index.ts +558 -0
  432. package/src/utils/oauth/kagi.ts +47 -0
  433. package/src/utils/oauth/kilo.ts +87 -0
  434. package/src/utils/oauth/kimi.d.ts +17 -0
  435. package/src/utils/oauth/kimi.ts +275 -0
  436. package/src/utils/oauth/kiro.ts +448 -0
  437. package/src/utils/oauth/litellm.ts +47 -0
  438. package/src/utils/oauth/lm-studio.ts +38 -0
  439. package/src/utils/oauth/mara.ts +16 -0
  440. package/src/utils/oauth/minimax-code.ts +78 -0
  441. package/src/utils/oauth/moonshot.ts +16 -0
  442. package/src/utils/oauth/nanogpt.ts +15 -0
  443. package/src/utils/oauth/nvidia.ts +70 -0
  444. package/src/utils/oauth/oauth.html +199 -0
  445. package/src/utils/oauth/ollama-cloud.ts +28 -0
  446. package/src/utils/oauth/ollama.ts +47 -0
  447. package/src/utils/oauth/openai-codex.ts +299 -0
  448. package/src/utils/oauth/opencode.ts +49 -0
  449. package/src/utils/oauth/opengateway.ts +15 -0
  450. package/src/utils/oauth/openrouter.ts +16 -0
  451. package/src/utils/oauth/parallel.ts +46 -0
  452. package/src/utils/oauth/perplexity.ts +225 -0
  453. package/src/utils/oauth/pkce.ts +18 -0
  454. package/src/utils/oauth/qianfan.ts +58 -0
  455. package/src/utils/oauth/qwen-portal.ts +60 -0
  456. package/src/utils/oauth/sglang.ts +42 -0
  457. package/src/utils/oauth/synthetic.ts +15 -0
  458. package/src/utils/oauth/tavily.ts +46 -0
  459. package/src/utils/oauth/together.ts +16 -0
  460. package/src/utils/oauth/types.d.ts +56 -0
  461. package/src/utils/oauth/types.ts +122 -0
  462. package/src/utils/oauth/venice.ts +59 -0
  463. package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
  464. package/src/utils/oauth/vllm.ts +42 -0
  465. package/src/utils/oauth/xai.ts +246 -0
  466. package/src/utils/oauth/xiaomi.ts +199 -0
  467. package/src/utils/oauth/zai.ts +60 -0
  468. package/src/utils/oauth/zenmux.ts +15 -0
  469. package/src/utils/overflow.ts +275 -0
  470. package/src/utils/parse-bind.ts +81 -0
  471. package/src/utils/provider-response.d.ts +6 -0
  472. package/src/utils/provider-response.ts +30 -0
  473. package/src/utils/provider-safety-stop.ts +8 -0
  474. package/src/utils/proxy.d.ts +7 -0
  475. package/src/utils/proxy.ts +652 -0
  476. package/src/utils/retry-after.d.ts +3 -0
  477. package/src/utils/retry-after.ts +110 -0
  478. package/src/utils/retry-budget.d.ts +1 -0
  479. package/src/utils/retry-budget.ts +4 -0
  480. package/src/utils/retry.d.ts +29 -0
  481. package/src/utils/retry.ts +67 -0
  482. package/src/utils/schema/CONSTRAINTS.md +164 -0
  483. package/src/utils/schema/adapt.d.ts +24 -0
  484. package/src/utils/schema/adapt.ts +36 -0
  485. package/src/utils/schema/compatibility.d.ts +30 -0
  486. package/src/utils/schema/compatibility.ts +435 -0
  487. package/src/utils/schema/dereference.d.ts +11 -0
  488. package/src/utils/schema/dereference.ts +98 -0
  489. package/src/utils/schema/draft.d.ts +10 -0
  490. package/src/utils/schema/draft.ts +341 -0
  491. package/src/utils/schema/equality.d.ts +4 -0
  492. package/src/utils/schema/equality.ts +97 -0
  493. package/src/utils/schema/fields.d.ts +49 -0
  494. package/src/utils/schema/fields.ts +190 -0
  495. package/src/utils/schema/index.d.ts +14 -0
  496. package/src/utils/schema/index.ts +14 -0
  497. package/src/utils/schema/json-schema-validator.d.ts +12 -0
  498. package/src/utils/schema/json-schema-validator.ts +577 -0
  499. package/src/utils/schema/meta-validator.d.ts +2 -0
  500. package/src/utils/schema/meta-validator.ts +167 -0
  501. package/src/utils/schema/normalize.d.ts +93 -0
  502. package/src/utils/schema/normalize.ts +1588 -0
  503. package/src/utils/schema/root-combinator.d.ts +12 -0
  504. package/src/utils/schema/root-combinator.ts +143 -0
  505. package/src/utils/schema/spill.d.ts +8 -0
  506. package/src/utils/schema/spill.ts +43 -0
  507. package/src/utils/schema/stamps.d.ts +25 -0
  508. package/src/utils/schema/stamps.ts +97 -0
  509. package/src/utils/schema/types.d.ts +4 -0
  510. package/src/utils/schema/types.ts +11 -0
  511. package/src/utils/schema/wire.d.ts +54 -0
  512. package/src/utils/schema/wire.ts +213 -0
  513. package/src/utils/schema/zod-decontaminate.d.ts +31 -0
  514. package/src/utils/schema/zod-decontaminate.ts +331 -0
  515. package/src/utils/sse-debug.d.ts +10 -0
  516. package/src/utils/sse-debug.ts +289 -0
  517. package/src/utils/tool-call-healing.d.ts +80 -0
  518. package/src/utils/tool-call-healing.ts +298 -0
  519. package/src/utils/tool-choice-capability.d.ts +57 -0
  520. package/src/utils/tool-choice-capability.ts +633 -0
  521. package/src/utils/tool-choice.d.ts +50 -0
  522. package/src/utils/tool-choice.ts +99 -0
  523. package/src/utils/validation.ts +1080 -0
  524. package/src/utils.d.ts +117 -0
  525. package/src/utils.ts +523 -0
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Constants for OpenAI code provider (ChatGPT OAuth) backend
3
+ */
4
+ export declare const CODEX_BASE_URL = "https://chatgpt.com/backend-api";
5
+ export declare const OPENAI_HEADERS: {
6
+ readonly BETA: "OpenAI-Beta";
7
+ readonly ACCOUNT_ID: "chatgpt-account-id";
8
+ readonly ORIGINATOR: "originator";
9
+ readonly SESSION_ID: "session_id";
10
+ readonly CONVERSATION_ID: "conversation_id";
11
+ };
12
+ export declare const OPENAI_HEADER_VALUES: {
13
+ readonly BETA_RESPONSES: "responses=experimental";
14
+ readonly BETA_RESPONSES_WEBSOCKETS_V2: "responses_websockets=2026-02-06";
15
+ readonly ORIGINATOR_CODEX: "pi";
16
+ };
17
+ export declare const URL_PATHS: {
18
+ readonly RESPONSES: "/responses";
19
+ readonly CODEX_RESPONSES: "/codex/responses";
20
+ };
21
+ export declare const JWT_CLAIM_PATH: "https://api.openai.com/auth";
22
+ /**
23
+ * Extract account ID from a OpenAI code backend JWT access token.
24
+ * Returns undefined if the token is not a valid OpenAI code backend JWT.
25
+ */
26
+ export declare function getCodexAccountId(accessToken: string): string | undefined;
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Constants for OpenAI code provider (ChatGPT OAuth) backend
3
+ */
4
+
5
+ export const CODEX_BASE_URL = "https://chatgpt.com/backend-api";
6
+
7
+ export const OPENAI_HEADERS = {
8
+ BETA: "OpenAI-Beta",
9
+ ACCOUNT_ID: "chatgpt-account-id",
10
+ ORIGINATOR: "originator",
11
+ SESSION_ID: "session_id",
12
+ CONVERSATION_ID: "conversation_id",
13
+ } as const;
14
+
15
+ export const OPENAI_HEADER_VALUES = {
16
+ BETA_RESPONSES: "responses=experimental",
17
+ BETA_RESPONSES_WEBSOCKETS_V2: "responses_websockets=2026-02-06",
18
+ ORIGINATOR_CODEX: "pi",
19
+ } as const;
20
+
21
+ export const URL_PATHS = {
22
+ RESPONSES: "/responses",
23
+ CODEX_RESPONSES: "/codex/responses",
24
+ } as const;
25
+
26
+ export const JWT_CLAIM_PATH = "https://api.openai.com/auth" as const;
27
+
28
+ /**
29
+ * Extract account ID from a OpenAI code backend JWT access token.
30
+ * Returns undefined if the token is not a valid OpenAI code backend JWT.
31
+ */
32
+ export function getCodexAccountId(accessToken: string): string | undefined {
33
+ try {
34
+ const parts = accessToken.split(".");
35
+ if (parts.length !== 3) return undefined;
36
+ const decoded = Buffer.from(parts[1] ?? "", "base64").toString("utf-8");
37
+ const payload = JSON.parse(decoded) as Record<string, unknown>;
38
+ const auth = payload[JWT_CLAIM_PATH] as { chatgpt_account_id?: string } | undefined;
39
+ return auth?.chatgpt_account_id ?? undefined;
40
+ } catch {
41
+ return undefined;
42
+ }
43
+ }
@@ -0,0 +1,50 @@
1
+ import type { Api, Model } from "../../types";
2
+ export interface ReasoningConfig {
3
+ effort: "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
4
+ summary?: "auto" | "concise" | "detailed";
5
+ }
6
+ export interface CodexRequestOptions {
7
+ reasoningEffort?: ReasoningConfig["effort"];
8
+ reasoningSummary?: ReasoningConfig["summary"] | null;
9
+ textVerbosity?: "low" | "medium" | "high";
10
+ include?: string[];
11
+ }
12
+ export interface InputItem {
13
+ id?: string | null;
14
+ type?: string | null;
15
+ role?: string;
16
+ content?: unknown;
17
+ call_id?: string | null;
18
+ name?: string;
19
+ output?: unknown;
20
+ arguments?: unknown;
21
+ encrypted_content?: unknown;
22
+ }
23
+ export interface RequestBody {
24
+ model: string;
25
+ store?: boolean;
26
+ stream?: boolean;
27
+ instructions?: string;
28
+ input?: InputItem[];
29
+ tools?: unknown;
30
+ tool_choice?: unknown;
31
+ temperature?: number;
32
+ top_p?: number;
33
+ top_k?: number;
34
+ min_p?: number;
35
+ presence_penalty?: number;
36
+ repetition_penalty?: number;
37
+ reasoning?: Partial<ReasoningConfig>;
38
+ text?: {
39
+ verbosity?: "low" | "medium" | "high";
40
+ };
41
+ include?: string[];
42
+ prompt_cache_key?: string;
43
+ prompt_cache_retention?: "in_memory" | "24h";
44
+ max_output_tokens?: number;
45
+ max_completion_tokens?: number;
46
+ [key: string]: unknown;
47
+ }
48
+ export declare function transformRequestBody(body: RequestBody, model: Model<Api>, options?: CodexRequestOptions, prompt?: {
49
+ developerMessages: string[];
50
+ }): Promise<RequestBody>;
@@ -0,0 +1,219 @@
1
+ import type { Effort } from "../../model-thinking";
2
+ import { requireSupportedEffort } from "../../model-thinking";
3
+ import type { Api, Model } from "../../types";
4
+ import { sanitizeJsonStrings } from "../../utils";
5
+
6
+ export interface ReasoningConfig {
7
+ effort: "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
8
+ summary?: "auto" | "concise" | "detailed";
9
+ }
10
+
11
+ export interface CodexRequestOptions {
12
+ reasoningEffort?: ReasoningConfig["effort"];
13
+ reasoningSummary?: ReasoningConfig["summary"] | null;
14
+ textVerbosity?: "low" | "medium" | "high";
15
+ include?: string[];
16
+ }
17
+
18
+ export interface InputItem {
19
+ id?: string | null;
20
+ type?: string | null;
21
+ role?: string;
22
+ content?: unknown;
23
+ call_id?: string | null;
24
+ name?: string;
25
+ output?: unknown;
26
+ arguments?: unknown;
27
+ encrypted_content?: unknown;
28
+ }
29
+
30
+ export interface RequestBody {
31
+ model: string;
32
+ store?: boolean;
33
+ stream?: boolean;
34
+ instructions?: string;
35
+ input?: InputItem[];
36
+ tools?: unknown;
37
+ tool_choice?: unknown;
38
+ temperature?: number;
39
+ top_p?: number;
40
+ top_k?: number;
41
+ min_p?: number;
42
+ presence_penalty?: number;
43
+ repetition_penalty?: number;
44
+ reasoning?: Partial<ReasoningConfig>;
45
+ text?: {
46
+ verbosity?: "low" | "medium" | "high";
47
+ };
48
+ include?: string[];
49
+ prompt_cache_key?: string;
50
+ prompt_cache_retention?: "in_memory" | "24h";
51
+ max_output_tokens?: number;
52
+ max_completion_tokens?: number;
53
+ [key: string]: unknown;
54
+ }
55
+
56
+ function getReasoningConfig(model: Model<Api>, options: CodexRequestOptions): ReasoningConfig {
57
+ const config: ReasoningConfig = {
58
+ effort:
59
+ options.reasoningEffort === "none" ? "none" : requireSupportedEffort(model, options.reasoningEffort as Effort),
60
+ };
61
+ if (options.reasoningSummary !== null) {
62
+ config.summary = options.reasoningSummary ?? "detailed";
63
+ }
64
+ return config;
65
+ }
66
+
67
+ function describeTextPartValue(value: unknown): string {
68
+ if (value === null) return "null";
69
+ if (Array.isArray(value)) return "array";
70
+ return typeof value;
71
+ }
72
+
73
+ function normalizeTextPartValue(value: unknown, path: string): string {
74
+ if (typeof value === "string") return value.toWellFormed();
75
+ try {
76
+ const encoded = JSON.stringify(value);
77
+ if (typeof encoded === "string") return encoded.toWellFormed();
78
+ } catch {
79
+ // Fall through to the actionable local error below.
80
+ }
81
+ throw new Error(
82
+ `Invalid Codex request text part at ${path}: expected a string or JSON-serializable value, received ${describeTextPartValue(value)}. Normalize compacted continuation content before sending to Codex.`,
83
+ );
84
+ }
85
+
86
+ function normalizeTextPartFields(content: unknown, path: string): unknown {
87
+ if (typeof content === "string") return content.toWellFormed();
88
+ if (!Array.isArray(content)) return content;
89
+ return content.map((part, index) => {
90
+ if (!part || typeof part !== "object") return part;
91
+ const normalizedPart = { ...(part as Record<string, unknown>) };
92
+ if ("text" in normalizedPart) {
93
+ normalizedPart.text = normalizeTextPartValue(normalizedPart.text, `${path}[${index}].text`);
94
+ }
95
+ return normalizedPart;
96
+ });
97
+ }
98
+
99
+ function normalizeInputTextPartFields(input: InputItem[] | undefined): InputItem[] | undefined {
100
+ if (!Array.isArray(input)) return input;
101
+ return input.map((item, itemIndex) => {
102
+ const normalizedItem = { ...item };
103
+ const itemRecord = normalizedItem as Record<string, unknown>;
104
+ if ("encrypted_content" in itemRecord) {
105
+ if (typeof itemRecord.encrypted_content === "string") {
106
+ itemRecord.encrypted_content = itemRecord.encrypted_content.toWellFormed();
107
+ } else {
108
+ delete itemRecord.encrypted_content;
109
+ }
110
+ }
111
+ if (normalizedItem.type === "message") {
112
+ normalizedItem.content = normalizeTextPartFields(normalizedItem.content, `input[${itemIndex}].content`);
113
+ } else if (normalizedItem.type === "function_call" && "arguments" in itemRecord) {
114
+ itemRecord.arguments = sanitizeJsonStrings(itemRecord.arguments);
115
+ } else if (normalizedItem.type === "custom_tool_call" && typeof itemRecord.input === "string") {
116
+ itemRecord.input = itemRecord.input.toWellFormed();
117
+ }
118
+ return normalizedItem;
119
+ });
120
+ }
121
+
122
+ function filterInput(input: InputItem[] | undefined): InputItem[] | undefined {
123
+ if (!Array.isArray(input)) return input;
124
+
125
+ return input
126
+ .filter(item => item.type !== "item_reference")
127
+ .map(item => {
128
+ if (item.id != null) {
129
+ const { id: _id, ...rest } = item;
130
+ return rest as InputItem;
131
+ }
132
+ return item;
133
+ });
134
+ }
135
+
136
+ export async function transformRequestBody(
137
+ body: RequestBody,
138
+ model: Model<Api>,
139
+ options: CodexRequestOptions = {},
140
+ prompt?: { developerMessages: string[] },
141
+ ): Promise<RequestBody> {
142
+ body.store = false;
143
+ body.stream = true;
144
+
145
+ if (body.input && Array.isArray(body.input)) {
146
+ body.input = filterInput(body.input);
147
+
148
+ if (body.input) {
149
+ const functionCallIds = new Set(
150
+ body.input
151
+ .filter(item => item.type === "function_call" && typeof item.call_id === "string")
152
+ .map(item => item.call_id as string),
153
+ );
154
+
155
+ body.input = body.input.map(item => {
156
+ if (item.type === "function_call_output" && typeof item.call_id === "string") {
157
+ const callId = item.call_id as string;
158
+ if (!functionCallIds.has(callId)) {
159
+ const itemRecord = item as unknown as Record<string, unknown>;
160
+ const toolName = typeof itemRecord.name === "string" ? itemRecord.name : "tool";
161
+ let text = "";
162
+ try {
163
+ const output = itemRecord.output;
164
+ text = typeof output === "string" ? output : JSON.stringify(output);
165
+ } catch {
166
+ text = String(itemRecord.output ?? "");
167
+ }
168
+ if (text.length > 16000) {
169
+ text = `${text.slice(0, 16000)}\n...[truncated]`;
170
+ }
171
+ return {
172
+ type: "message",
173
+ role: "assistant",
174
+ content: `[Previous ${toolName} result; call_id=${callId}]: ${text}`,
175
+ } as InputItem;
176
+ }
177
+ }
178
+ return item;
179
+ });
180
+ }
181
+ body.input = normalizeInputTextPartFields(body.input);
182
+ }
183
+
184
+ if (prompt?.developerMessages && prompt.developerMessages.length > 0 && Array.isArray(body.input)) {
185
+ const developerMessages = prompt.developerMessages.map(
186
+ text =>
187
+ ({
188
+ type: "message",
189
+ role: "developer",
190
+ content: [{ type: "input_text", text }],
191
+ }) as InputItem,
192
+ );
193
+ body.input = [...developerMessages, ...body.input];
194
+ }
195
+
196
+ if (options.reasoningEffort !== undefined) {
197
+ const reasoningConfig = getReasoningConfig(model, options);
198
+ body.reasoning = {
199
+ ...body.reasoning,
200
+ ...reasoningConfig,
201
+ };
202
+ } else {
203
+ delete body.reasoning;
204
+ }
205
+
206
+ body.text = {
207
+ ...body.text,
208
+ verbosity: options.textVerbosity || "low",
209
+ };
210
+
211
+ const include = Array.isArray(options.include) ? [...options.include] : [];
212
+ include.push("reasoning.encrypted_content");
213
+ body.include = Array.from(new Set(include));
214
+
215
+ delete body.max_output_tokens;
216
+ delete body.max_completion_tokens;
217
+
218
+ return body;
219
+ }
@@ -0,0 +1,18 @@
1
+ export type CodexRateLimit = {
2
+ used_percent?: number;
3
+ window_minutes?: number;
4
+ resets_at?: number;
5
+ };
6
+ export type CodexRateLimits = {
7
+ primary?: CodexRateLimit;
8
+ secondary?: CodexRateLimit;
9
+ };
10
+ export type CodexErrorInfo = {
11
+ message: string;
12
+ status: number;
13
+ code?: string;
14
+ friendlyMessage?: string;
15
+ rateLimits?: CodexRateLimits;
16
+ raw?: string;
17
+ };
18
+ export declare function parseCodexError(response: Response): Promise<CodexErrorInfo>;
@@ -0,0 +1,111 @@
1
+ import { toNumber } from "../../utils";
2
+
3
+ export type CodexRateLimit = {
4
+ used_percent?: number;
5
+ window_minutes?: number;
6
+ resets_at?: number;
7
+ };
8
+
9
+ export type CodexRateLimits = {
10
+ primary?: CodexRateLimit;
11
+ secondary?: CodexRateLimit;
12
+ };
13
+
14
+ export type CodexErrorInfo = {
15
+ message: string;
16
+ status: number;
17
+ code?: string;
18
+ friendlyMessage?: string;
19
+ rateLimits?: CodexRateLimits;
20
+ raw?: string;
21
+ };
22
+ // Matches the gate's bare rejection body ("Request blocked." / "Request
23
+ // blocked (…)") but never messages that merely mention blocking mid-text.
24
+ const REQUEST_BLOCKED_MESSAGE_RE = /^\s*request blocked\b/i;
25
+
26
+ export async function parseCodexError(response: Response): Promise<CodexErrorInfo> {
27
+ const raw = await response.text();
28
+ let message = raw || response.statusText || "Request failed";
29
+ let friendlyMessage: string | undefined;
30
+ let rateLimits: CodexRateLimits | undefined;
31
+ let code: string | undefined;
32
+
33
+ try {
34
+ const parsed = JSON.parse(raw) as { error?: Record<string, unknown>; detail?: unknown };
35
+ const err = parsed?.error ?? {};
36
+
37
+ const headers = response.headers;
38
+ const primary = {
39
+ used_percent: toNumber(headers.get("x-codex-primary-used-percent")),
40
+ window_minutes: toInt(headers.get("x-codex-primary-window-minutes")),
41
+ resets_at: toInt(headers.get("x-codex-primary-reset-at")),
42
+ };
43
+ const secondary = {
44
+ used_percent: toNumber(headers.get("x-codex-secondary-used-percent")),
45
+ window_minutes: toInt(headers.get("x-codex-secondary-window-minutes")),
46
+ resets_at: toInt(headers.get("x-codex-secondary-reset-at")),
47
+ };
48
+ rateLimits =
49
+ primary.used_percent !== undefined || secondary.used_percent !== undefined
50
+ ? { primary, secondary }
51
+ : undefined;
52
+
53
+ code =
54
+ typeof (err as { code?: unknown }).code === "string"
55
+ ? (err as { code: string }).code
56
+ : typeof (err as { type?: unknown }).type === "string"
57
+ ? (err as { type: string }).type
58
+ : undefined;
59
+ const resetsAt = (err as { resets_at?: number }).resets_at ?? primary.resets_at ?? secondary.resets_at;
60
+ const mins = resetsAt ? Math.max(0, Math.round((resetsAt * 1000 - Date.now()) / 60000)) : undefined;
61
+
62
+ if (/usage_limit_reached|usage_not_included/i.test(code ?? "")) {
63
+ const planType = (err as { plan_type?: string }).plan_type;
64
+ const plan = planType ? ` (${String(planType).toLowerCase()} plan)` : "";
65
+ const when = mins !== undefined ? ` Try again in ~${mins} min.` : "";
66
+ friendlyMessage = `You have hit your ChatGPT usage limit${plan}.${when}`.trim();
67
+ } else if (/rate_limit_exceeded/i.test(code ?? "") || response.status === 429) {
68
+ const when = mins !== undefined ? ` Try again in ~${mins} min.` : "";
69
+ friendlyMessage = `ChatGPT rate limit exceeded.${when}`.trim();
70
+ }
71
+
72
+ const errMessage = (err as { message?: string }).message;
73
+ // The chatgpt.com/backend-api gate rejects with a bare-`detail` body
74
+ // (`{"detail": "Request blocked."}`) that carries no `error.*` envelope.
75
+ const detail =
76
+ typeof parsed?.detail === "string"
77
+ ? parsed.detail
78
+ : typeof (parsed?.detail as { message?: unknown } | undefined)?.message === "string"
79
+ ? (parsed.detail as { message: string }).message
80
+ : undefined;
81
+ message = errMessage || detail || friendlyMessage || message;
82
+ } catch {
83
+ // raw body not JSON
84
+ }
85
+
86
+ // A bare "Request blocked" body (detail-shaped JSON or plain text) is the
87
+ // pre-model gate's form of the deterministic `invalid_prompt` content
88
+ // rejection. It never carries a structured code, so classify it explicitly
89
+ // here; otherwise `isInvalidPromptError`, the codex non-retryable event set,
90
+ // and the session-level circuit breaker all miss it and the failure surfaces
91
+ // as an unexplained, unrepairable "Request Blocked".
92
+ if (!code && REQUEST_BLOCKED_MESSAGE_RE.test(message)) {
93
+ code = "invalid_prompt";
94
+ friendlyMessage = `${message.trim().replace(/\.+$/, "")} (code=invalid_prompt)`;
95
+ }
96
+
97
+ return {
98
+ message,
99
+ status: response.status,
100
+ friendlyMessage,
101
+ code,
102
+ rateLimits,
103
+ raw: raw,
104
+ };
105
+ }
106
+
107
+ function toInt(v: string | null): number | undefined {
108
+ if (v == null) return undefined;
109
+ const n = parseInt(v, 10);
110
+ return Number.isFinite(n) ? n : undefined;
111
+ }
@@ -0,0 +1,71 @@
1
+ import type { ResponseInput } from "openai/resources/responses/responses";
2
+ import { type Context, type Model, type ProviderSessionState, type ServiceTier, type StreamFunction, type StreamOptions, type Tool, type ToolChoice } from "../types";
3
+ export { codexToolCanonicalName, codexToolWireName } from "../codex-tools";
4
+ export interface OpenAICodexResponsesOptions extends StreamOptions {
5
+ reasoning?: "none" | "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
6
+ reasoningSummary?: "auto" | "concise" | "detailed" | null;
7
+ textVerbosity?: "low" | "medium" | "high";
8
+ include?: string[];
9
+ codexMode?: boolean;
10
+ toolChoice?: ToolChoice;
11
+ preferWebsockets?: boolean;
12
+ serviceTier?: ServiceTier;
13
+ }
14
+ type CodexTransport = "sse" | "websocket";
15
+ export interface OpenAICodexWebSocketDebugStats {
16
+ fullContextRequests: number;
17
+ deltaRequests: number;
18
+ lastInputItems: number;
19
+ lastDeltaInputItems?: number;
20
+ lastPreviousResponseId?: string;
21
+ }
22
+ /** @internal Exported for tests. */
23
+ export declare function normalizeCodexToolChoice(choice: ToolChoice | undefined, tools?: Tool[], model?: Model<"openai-codex-responses">): string | Record<string, unknown> | undefined;
24
+ /** @internal Exported for tests. */
25
+ export declare function formatCodexUserAgent(platform: string, release: string, arch: string): string;
26
+ export declare const streamOpenAICodexResponses: StreamFunction<"openai-codex-responses">;
27
+ export declare function prewarmOpenAICodexResponses(model: Model<"openai-codex-responses">, options?: Pick<OpenAICodexResponsesOptions, "apiKey" | "headers" | "sessionId" | "signal" | "preferWebsockets" | "providerSessionState">): Promise<void>;
28
+ export interface OpenAICodexTransportDetails {
29
+ websocketPreferred: boolean;
30
+ lastTransport?: CodexTransport;
31
+ websocketDisabled: boolean;
32
+ websocketConnected: boolean;
33
+ fallbackCount: number;
34
+ canAppend: boolean;
35
+ prewarmed: boolean;
36
+ hasSessionState: boolean;
37
+ lastFallbackAt?: number;
38
+ }
39
+ export declare function getOpenAICodexWebSocketDebugStats(model: Model<"openai-codex-responses">, options?: {
40
+ sessionId?: string;
41
+ baseUrl?: string;
42
+ providerSessionState?: Map<string, ProviderSessionState>;
43
+ }): OpenAICodexWebSocketDebugStats | undefined;
44
+ export declare function getOpenAICodexTransportDetails(model: Model<"openai-codex-responses">, options?: {
45
+ sessionId?: string;
46
+ baseUrl?: string;
47
+ preferWebsockets?: boolean;
48
+ providerSessionState?: Map<string, ProviderSessionState>;
49
+ }): OpenAICodexTransportDetails;
50
+ declare function convertMessages(model: Model<"openai-codex-responses">, context: Context): ResponseInput;
51
+ /** @internal Exported for tests. `classifyCodexFailureEventRetryable` is the retry classification of a Codex failure event. */
52
+ export { convertMessages as convertCodexResponsesMessages, isRetryableCodexFailureEvent as classifyCodexFailureEventRetryable, };
53
+ type CodexToolPayload = {
54
+ type: "function";
55
+ name: string;
56
+ description: string;
57
+ parameters: Record<string, unknown>;
58
+ strict?: boolean;
59
+ } | {
60
+ type: "custom";
61
+ name: string;
62
+ description: string;
63
+ format: {
64
+ type: "grammar";
65
+ syntax: "lark" | "regex";
66
+ definition: string;
67
+ };
68
+ };
69
+ /** @internal Exported for tests. */
70
+ export declare function convertOpenAICodexResponsesTools(tools: Tool[], model: Model<"openai-codex-responses">): CodexToolPayload[];
71
+ declare function isRetryableCodexFailureEvent(rawEvent: Record<string, unknown>): boolean;