@fractaal/pi-ai 0.85.4 → 0.86.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (712) hide show
  1. package/README.md +322 -46
  2. package/dist/api/anthropic-messages.d.ts.map +1 -1
  3. package/dist/api/anthropic-messages.js +403 -140
  4. package/dist/api/anthropic-messages.js.map +1 -1
  5. package/dist/api/anthropic-messages.lazy.d.ts.map +1 -1
  6. package/dist/api/azure-openai-config.d.ts +15 -0
  7. package/dist/api/azure-openai-config.d.ts.map +1 -0
  8. package/dist/api/azure-openai-config.js +76 -0
  9. package/dist/api/azure-openai-config.js.map +1 -0
  10. package/dist/api/azure-openai-responses.d.ts +5 -6
  11. package/dist/api/azure-openai-responses.d.ts.map +1 -1
  12. package/dist/api/azure-openai-responses.js +42 -86
  13. package/dist/api/azure-openai-responses.js.map +1 -1
  14. package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -1
  15. package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  16. package/dist/api/bedrock-converse-stream.js +233 -24
  17. package/dist/api/bedrock-converse-stream.js.map +1 -1
  18. package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -1
  19. package/dist/api/bedrock-converse-stream.lazy.js.map +1 -1
  20. package/dist/api/cloudflare-ai-binding.d.ts +77 -0
  21. package/dist/api/cloudflare-ai-binding.d.ts.map +1 -0
  22. package/dist/api/cloudflare-ai-binding.js +72 -0
  23. package/dist/api/cloudflare-ai-binding.js.map +1 -0
  24. package/dist/api/cloudflare-workers-ai-system-one.d.ts +4 -0
  25. package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -0
  26. package/dist/api/cloudflare-workers-ai-system-one.js +48 -0
  27. package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -0
  28. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts +3 -0
  29. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts.map +1 -0
  30. package/dist/api/cloudflare-workers-ai-system-one.lazy.js +4 -0
  31. package/dist/api/cloudflare-workers-ai-system-one.lazy.js.map +1 -0
  32. package/dist/api/cloudflare.d.ts +2 -0
  33. package/dist/api/cloudflare.d.ts.map +1 -1
  34. package/dist/api/cloudflare.js +2 -0
  35. package/dist/api/cloudflare.js.map +1 -1
  36. package/dist/api/constrained-sampling.d.ts +10 -1
  37. package/dist/api/constrained-sampling.d.ts.map +1 -1
  38. package/dist/api/constrained-sampling.js +137 -4
  39. package/dist/api/constrained-sampling.js.map +1 -1
  40. package/dist/api/github-copilot-headers.d.ts.map +1 -1
  41. package/dist/api/github-copilot-headers.js.map +1 -1
  42. package/dist/api/google-generative-ai.d.ts +2 -2
  43. package/dist/api/google-generative-ai.d.ts.map +1 -1
  44. package/dist/api/google-generative-ai.js +39 -82
  45. package/dist/api/google-generative-ai.js.map +1 -1
  46. package/dist/api/google-generative-ai.lazy.d.ts.map +1 -1
  47. package/dist/api/google-shared.d.ts +27 -5
  48. package/dist/api/google-shared.d.ts.map +1 -1
  49. package/dist/api/google-shared.js +126 -18
  50. package/dist/api/google-shared.js.map +1 -1
  51. package/dist/api/google-vertex.d.ts +2 -2
  52. package/dist/api/google-vertex.d.ts.map +1 -1
  53. package/dist/api/google-vertex.js +42 -73
  54. package/dist/api/google-vertex.js.map +1 -1
  55. package/dist/api/google-vertex.lazy.d.ts.map +1 -1
  56. package/dist/api/lazy.d.ts +5 -1
  57. package/dist/api/lazy.d.ts.map +1 -1
  58. package/dist/api/lazy.js +19 -7
  59. package/dist/api/lazy.js.map +1 -1
  60. package/dist/api/llama-cpp-classify.d.ts +33 -0
  61. package/dist/api/llama-cpp-classify.d.ts.map +1 -0
  62. package/dist/api/llama-cpp-classify.js +365 -0
  63. package/dist/api/llama-cpp-classify.js.map +1 -0
  64. package/dist/api/llama-cpp-classify.lazy.d.ts +3 -0
  65. package/dist/api/llama-cpp-classify.lazy.d.ts.map +1 -0
  66. package/dist/api/llama-cpp-classify.lazy.js +4 -0
  67. package/dist/api/llama-cpp-classify.lazy.js.map +1 -0
  68. package/dist/api/mistral-conversations.d.ts +2 -2
  69. package/dist/api/mistral-conversations.d.ts.map +1 -1
  70. package/dist/api/mistral-conversations.js +250 -69
  71. package/dist/api/mistral-conversations.js.map +1 -1
  72. package/dist/api/mistral-conversations.lazy.d.ts.map +1 -1
  73. package/dist/api/openai-codex-compaction-history.d.ts +2 -2
  74. package/dist/api/openai-codex-compaction-history.d.ts.map +1 -1
  75. package/dist/api/openai-codex-compaction-history.js +1 -2
  76. package/dist/api/openai-codex-compaction-history.js.map +1 -1
  77. package/dist/api/openai-codex-responses.d.ts +1 -1
  78. package/dist/api/openai-codex-responses.d.ts.map +1 -1
  79. package/dist/api/openai-codex-responses.js +107 -60
  80. package/dist/api/openai-codex-responses.js.map +1 -1
  81. package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -1
  82. package/dist/api/openai-codex-responses.lazy.js.map +1 -1
  83. package/dist/api/openai-completions.d.ts +11 -4
  84. package/dist/api/openai-completions.d.ts.map +1 -1
  85. package/dist/api/openai-completions.js +250 -134
  86. package/dist/api/openai-completions.js.map +1 -1
  87. package/dist/api/openai-completions.lazy.d.ts.map +1 -1
  88. package/dist/api/openai-prompt-cache.d.ts.map +1 -1
  89. package/dist/api/openai-prompt-cache.js.map +1 -1
  90. package/dist/api/openai-responses-shared.d.ts +8 -4
  91. package/dist/api/openai-responses-shared.d.ts.map +1 -1
  92. package/dist/api/openai-responses-shared.js +114 -62
  93. package/dist/api/openai-responses-shared.js.map +1 -1
  94. package/dist/api/openai-responses.d.ts.map +1 -1
  95. package/dist/api/openai-responses.js +55 -23
  96. package/dist/api/openai-responses.js.map +1 -1
  97. package/dist/api/openai-responses.lazy.d.ts.map +1 -1
  98. package/dist/api/openrouter-images.d.ts +2 -1
  99. package/dist/api/openrouter-images.d.ts.map +1 -1
  100. package/dist/api/openrouter-images.js +1 -0
  101. package/dist/api/openrouter-images.js.map +1 -1
  102. package/dist/api/openrouter-images.lazy.d.ts.map +1 -1
  103. package/dist/api/openrouter-images.lazy.js.map +1 -1
  104. package/dist/api/pi-messages.d.ts +5 -3
  105. package/dist/api/pi-messages.d.ts.map +1 -1
  106. package/dist/api/pi-messages.js +10 -3
  107. package/dist/api/pi-messages.js.map +1 -1
  108. package/dist/api/pi-messages.lazy.d.ts.map +1 -1
  109. package/dist/api/simple-options.d.ts +10 -3
  110. package/dist/api/simple-options.d.ts.map +1 -1
  111. package/dist/api/simple-options.js +31 -11
  112. package/dist/api/simple-options.js.map +1 -1
  113. package/dist/api/system-one-shared.d.ts +23 -0
  114. package/dist/api/system-one-shared.d.ts.map +1 -0
  115. package/dist/api/system-one-shared.js +183 -0
  116. package/dist/api/system-one-shared.js.map +1 -0
  117. package/dist/api/transform-messages.d.ts.map +1 -1
  118. package/dist/api/transform-messages.js +21 -7
  119. package/dist/api/transform-messages.js.map +1 -1
  120. package/dist/api/typesafe-system-one.d.ts +4 -0
  121. package/dist/api/typesafe-system-one.d.ts.map +1 -0
  122. package/dist/api/typesafe-system-one.js +19 -0
  123. package/dist/api/typesafe-system-one.js.map +1 -0
  124. package/dist/api/typesafe-system-one.lazy.d.ts +3 -0
  125. package/dist/api/typesafe-system-one.lazy.d.ts.map +1 -0
  126. package/dist/api/typesafe-system-one.lazy.js +4 -0
  127. package/dist/api/typesafe-system-one.lazy.js.map +1 -0
  128. package/dist/auth/context.d.ts.map +1 -1
  129. package/dist/auth/context.js.map +1 -1
  130. package/dist/auth/credential-store.d.ts +6 -6
  131. package/dist/auth/credential-store.d.ts.map +1 -1
  132. package/dist/auth/credential-store.js +22 -11
  133. package/dist/auth/credential-store.js.map +1 -1
  134. package/dist/auth/helpers.d.ts +1 -0
  135. package/dist/auth/helpers.d.ts.map +1 -1
  136. package/dist/auth/helpers.js +8 -3
  137. package/dist/auth/helpers.js.map +1 -1
  138. package/dist/auth/oauth/anthropic.d.ts.map +1 -1
  139. package/dist/auth/oauth/anthropic.js +78 -131
  140. package/dist/auth/oauth/anthropic.js.map +1 -1
  141. package/dist/auth/oauth/callback-server.d.ts +55 -0
  142. package/dist/auth/oauth/callback-server.d.ts.map +1 -0
  143. package/dist/auth/oauth/callback-server.js +146 -0
  144. package/dist/auth/oauth/callback-server.js.map +1 -0
  145. package/dist/auth/oauth/device-code.d.ts +2 -1
  146. package/dist/auth/oauth/device-code.d.ts.map +1 -1
  147. package/dist/auth/oauth/device-code.js +5 -5
  148. package/dist/auth/oauth/device-code.js.map +1 -1
  149. package/dist/auth/oauth/github-copilot.d.ts.map +1 -1
  150. package/dist/auth/oauth/github-copilot.js +121 -41
  151. package/dist/auth/oauth/github-copilot.js.map +1 -1
  152. package/dist/auth/oauth/kimi-coding.d.ts.map +1 -1
  153. package/dist/auth/oauth/kimi-coding.js +5 -6
  154. package/dist/auth/oauth/kimi-coding.js.map +1 -1
  155. package/dist/auth/oauth/load.d.ts +4 -0
  156. package/dist/auth/oauth/load.d.ts.map +1 -1
  157. package/dist/auth/oauth/load.js +10 -0
  158. package/dist/auth/oauth/load.js.map +1 -1
  159. package/dist/auth/oauth/meta.d.ts +17 -0
  160. package/dist/auth/oauth/meta.d.ts.map +1 -0
  161. package/dist/auth/oauth/meta.js +190 -0
  162. package/dist/auth/oauth/meta.js.map +1 -0
  163. package/dist/auth/oauth/openai-chatgpt.d.ts +9 -0
  164. package/dist/auth/oauth/openai-chatgpt.d.ts.map +1 -0
  165. package/dist/auth/oauth/openai-chatgpt.js +263 -0
  166. package/dist/auth/oauth/openai-chatgpt.js.map +1 -0
  167. package/dist/auth/oauth/openai-codex-errors.d.ts.map +1 -1
  168. package/dist/auth/oauth/openai-codex-errors.js.map +1 -1
  169. package/dist/auth/oauth/openai-codex.d.ts +1 -1
  170. package/dist/auth/oauth/openai-codex.d.ts.map +1 -1
  171. package/dist/auth/oauth/openai-codex.js +23 -152
  172. package/dist/auth/oauth/openai-codex.js.map +1 -1
  173. package/dist/auth/oauth/openrouter.d.ts +1 -1
  174. package/dist/auth/oauth/openrouter.d.ts.map +1 -1
  175. package/dist/auth/oauth/openrouter.js +25 -144
  176. package/dist/auth/oauth/openrouter.js.map +1 -1
  177. package/dist/auth/oauth/pkce.d.ts.map +1 -1
  178. package/dist/auth/oauth/pkce.js.map +1 -1
  179. package/dist/auth/oauth/radius.d.ts +1 -1
  180. package/dist/auth/oauth/radius.d.ts.map +1 -1
  181. package/dist/auth/oauth/radius.js +26 -93
  182. package/dist/auth/oauth/radius.js.map +1 -1
  183. package/dist/auth/oauth/xai.d.ts.map +1 -1
  184. package/dist/auth/oauth/xai.js +3 -2
  185. package/dist/auth/oauth/xai.js.map +1 -1
  186. package/dist/auth/resolve.d.ts +19 -9
  187. package/dist/auth/resolve.d.ts.map +1 -1
  188. package/dist/auth/resolve.js +72 -53
  189. package/dist/auth/resolve.js.map +1 -1
  190. package/dist/auth/types.d.ts +29 -8
  191. package/dist/auth/types.d.ts.map +1 -1
  192. package/dist/auth/types.js.map +1 -1
  193. package/dist/bedrock-provider.d.ts.map +1 -1
  194. package/dist/bun-oauth.d.ts.map +1 -1
  195. package/dist/bun-oauth.js +4 -0
  196. package/dist/bun-oauth.js.map +1 -1
  197. package/dist/cli.d.ts.map +1 -1
  198. package/dist/cli.js +4 -1
  199. package/dist/cli.js.map +1 -1
  200. package/dist/compat/extension-oauth-types.d.ts.map +1 -1
  201. package/dist/compat.d.ts +3 -3
  202. package/dist/compat.d.ts.map +1 -1
  203. package/dist/compat.js +9 -6
  204. package/dist/compat.js.map +1 -1
  205. package/dist/env-api-keys.d.ts +5 -0
  206. package/dist/env-api-keys.d.ts.map +1 -1
  207. package/dist/env-api-keys.js +10 -1
  208. package/dist/env-api-keys.js.map +1 -1
  209. package/dist/image-models.d.ts +19 -8
  210. package/dist/image-models.d.ts.map +1 -1
  211. package/dist/image-models.js +14 -13
  212. package/dist/image-models.js.map +1 -1
  213. package/dist/images-api-registry.d.ts +7 -7
  214. package/dist/images-api-registry.d.ts.map +1 -1
  215. package/dist/images-api-registry.js.map +1 -1
  216. package/dist/images.d.ts +7 -2
  217. package/dist/images.d.ts.map +1 -1
  218. package/dist/images.js +5 -0
  219. package/dist/images.js.map +1 -1
  220. package/dist/index.d.ts +4 -3
  221. package/dist/index.d.ts.map +1 -1
  222. package/dist/index.js +3 -2
  223. package/dist/index.js.map +1 -1
  224. package/dist/legacy-api-aliases.d.ts.map +1 -1
  225. package/dist/model-catalog.d.ts +25 -9
  226. package/dist/model-catalog.d.ts.map +1 -1
  227. package/dist/model-catalog.js +14 -2
  228. package/dist/model-catalog.js.map +1 -1
  229. package/dist/models-store.d.ts +12 -14
  230. package/dist/models-store.d.ts.map +1 -1
  231. package/dist/models-store.js +6 -3
  232. package/dist/models-store.js.map +1 -1
  233. package/dist/models.d.ts +138 -47
  234. package/dist/models.d.ts.map +1 -1
  235. package/dist/models.generated.d.ts +136 -38
  236. package/dist/models.generated.d.ts.map +1 -1
  237. package/dist/models.generated.js +136 -38
  238. package/dist/models.generated.js.map +1 -1
  239. package/dist/models.js +390 -104
  240. package/dist/models.js.map +1 -1
  241. package/dist/oauth.d.ts.map +1 -1
  242. package/dist/providers/all.d.ts +19 -13
  243. package/dist/providers/all.d.ts.map +1 -1
  244. package/dist/providers/all.js +33 -23
  245. package/dist/providers/all.js.map +1 -1
  246. package/dist/providers/amazon-bedrock.d.ts.map +1 -1
  247. package/dist/providers/amazon-bedrock.js +15 -7
  248. package/dist/providers/amazon-bedrock.js.map +1 -1
  249. package/dist/providers/amazon-bedrock.models.d.ts +4 -2
  250. package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
  251. package/dist/providers/amazon-bedrock.models.js +4 -2
  252. package/dist/providers/amazon-bedrock.models.js.map +1 -1
  253. package/dist/providers/ant-ling.d.ts.map +1 -1
  254. package/dist/providers/ant-ling.js.map +1 -1
  255. package/dist/providers/ant-ling.models.d.ts +4 -2
  256. package/dist/providers/ant-ling.models.d.ts.map +1 -1
  257. package/dist/providers/ant-ling.models.js +4 -2
  258. package/dist/providers/ant-ling.models.js.map +1 -1
  259. package/dist/providers/anthropic.d.ts.map +1 -1
  260. package/dist/providers/anthropic.js +39 -8
  261. package/dist/providers/anthropic.js.map +1 -1
  262. package/dist/providers/anthropic.models.d.ts +4 -2
  263. package/dist/providers/anthropic.models.d.ts.map +1 -1
  264. package/dist/providers/anthropic.models.js +4 -2
  265. package/dist/providers/anthropic.models.js.map +1 -1
  266. package/dist/providers/azure.d.ts +3 -0
  267. package/dist/providers/azure.d.ts.map +1 -0
  268. package/dist/providers/azure.js +46 -0
  269. package/dist/providers/azure.js.map +1 -0
  270. package/dist/providers/azure.models.d.ts +6 -0
  271. package/dist/providers/azure.models.d.ts.map +1 -0
  272. package/dist/providers/azure.models.js +8 -0
  273. package/dist/providers/azure.models.js.map +1 -0
  274. package/dist/providers/baseten.d.ts +3 -0
  275. package/dist/providers/baseten.d.ts.map +1 -0
  276. package/dist/providers/baseten.js +15 -0
  277. package/dist/providers/baseten.js.map +1 -0
  278. package/dist/providers/baseten.models.d.ts +6 -0
  279. package/dist/providers/baseten.models.d.ts.map +1 -0
  280. package/dist/providers/baseten.models.js +8 -0
  281. package/dist/providers/baseten.models.js.map +1 -0
  282. package/dist/providers/cerebras.d.ts.map +1 -1
  283. package/dist/providers/cerebras.js.map +1 -1
  284. package/dist/providers/cerebras.models.d.ts +4 -2
  285. package/dist/providers/cerebras.models.d.ts.map +1 -1
  286. package/dist/providers/cerebras.models.js +4 -2
  287. package/dist/providers/cerebras.models.js.map +1 -1
  288. package/dist/providers/cloudflare-ai-gateway.d.ts +3 -1
  289. package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
  290. package/dist/providers/cloudflare-ai-gateway.js +4 -0
  291. package/dist/providers/cloudflare-ai-gateway.js.map +1 -1
  292. package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -2
  293. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
  294. package/dist/providers/cloudflare-ai-gateway.models.js +4 -2
  295. package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
  296. package/dist/providers/cloudflare-auth.d.ts.map +1 -1
  297. package/dist/providers/cloudflare-auth.js +15 -10
  298. package/dist/providers/cloudflare-auth.js.map +1 -1
  299. package/dist/providers/cloudflare-stream.d.ts +6 -2
  300. package/dist/providers/cloudflare-stream.d.ts.map +1 -1
  301. package/dist/providers/cloudflare-stream.js +6 -0
  302. package/dist/providers/cloudflare-stream.js.map +1 -1
  303. package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -1
  304. package/dist/providers/cloudflare-workers-ai.js +10 -3
  305. package/dist/providers/cloudflare-workers-ai.js.map +1 -1
  306. package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -2
  307. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
  308. package/dist/providers/cloudflare-workers-ai.models.js +4 -2
  309. package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
  310. package/dist/providers/data/.manifest.json +1 -1
  311. package/dist/providers/data/amazon-bedrock.json +1 -1
  312. package/dist/providers/data/ant-ling.json +1 -1
  313. package/dist/providers/data/anthropic.json +1 -1
  314. package/dist/providers/data/azure.json +1 -0
  315. package/dist/providers/data/baseten.json +1 -0
  316. package/dist/providers/data/cerebras.json +1 -1
  317. package/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  318. package/dist/providers/data/cloudflare-workers-ai.json +1 -1
  319. package/dist/providers/data/deepseek.json +1 -1
  320. package/dist/providers/data/fireworks.json +1 -1
  321. package/dist/providers/data/github-copilot.json +1 -1
  322. package/dist/providers/data/google-vertex.json +1 -1
  323. package/dist/providers/data/google.json +1 -1
  324. package/dist/providers/data/groq.json +1 -1
  325. package/dist/providers/data/huggingface.json +1 -1
  326. package/dist/providers/data/kimi-coding.json +1 -1
  327. package/dist/providers/data/meta.json +1 -0
  328. package/dist/providers/data/minimax-cn.json +1 -1
  329. package/dist/providers/data/minimax.json +1 -1
  330. package/dist/providers/data/mistral.json +1 -1
  331. package/dist/providers/data/moonshotai-cn.json +1 -1
  332. package/dist/providers/data/moonshotai.json +1 -1
  333. package/dist/providers/data/nvidia.json +1 -1
  334. package/dist/providers/data/openai-codex.json +1 -1
  335. package/dist/providers/data/openai.json +1 -1
  336. package/dist/providers/data/opencode-go.json +1 -1
  337. package/dist/providers/data/opencode.json +1 -1
  338. package/dist/providers/data/openrouter.json +1 -1
  339. package/dist/providers/data/qwen-token-plan-cn.json +1 -1
  340. package/dist/providers/data/qwen-token-plan-individual.json +1 -0
  341. package/dist/providers/data/qwen-token-plan.json +1 -1
  342. package/dist/providers/data/radius.json +1 -0
  343. package/dist/providers/data/together.json +1 -1
  344. package/dist/providers/data/typesafe.json +1 -0
  345. package/dist/providers/data/vercel-ai-gateway.json +1 -1
  346. package/dist/providers/data/xai.json +1 -1
  347. package/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
  348. package/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
  349. package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
  350. package/dist/providers/data/xiaomi.json +1 -1
  351. package/dist/providers/data/zai-coding-cn.json +1 -1
  352. package/dist/providers/data/zai.json +1 -1
  353. package/dist/providers/deepseek.d.ts.map +1 -1
  354. package/dist/providers/deepseek.js.map +1 -1
  355. package/dist/providers/deepseek.models.d.ts +4 -2
  356. package/dist/providers/deepseek.models.d.ts.map +1 -1
  357. package/dist/providers/deepseek.models.js +4 -2
  358. package/dist/providers/deepseek.models.js.map +1 -1
  359. package/dist/providers/faux.d.ts +19 -13
  360. package/dist/providers/faux.d.ts.map +1 -1
  361. package/dist/providers/faux.js +109 -18
  362. package/dist/providers/faux.js.map +1 -1
  363. package/dist/providers/fireworks.d.ts.map +1 -1
  364. package/dist/providers/fireworks.js.map +1 -1
  365. package/dist/providers/fireworks.models.d.ts +4 -2
  366. package/dist/providers/fireworks.models.d.ts.map +1 -1
  367. package/dist/providers/fireworks.models.js +4 -2
  368. package/dist/providers/fireworks.models.js.map +1 -1
  369. package/dist/providers/github-copilot.d.ts.map +1 -1
  370. package/dist/providers/github-copilot.js +1 -1
  371. package/dist/providers/github-copilot.js.map +1 -1
  372. package/dist/providers/github-copilot.models.d.ts +4 -2
  373. package/dist/providers/github-copilot.models.d.ts.map +1 -1
  374. package/dist/providers/github-copilot.models.js +4 -2
  375. package/dist/providers/github-copilot.models.js.map +1 -1
  376. package/dist/providers/google-vertex.d.ts.map +1 -1
  377. package/dist/providers/google-vertex.js +15 -7
  378. package/dist/providers/google-vertex.js.map +1 -1
  379. package/dist/providers/google-vertex.models.d.ts +4 -2
  380. package/dist/providers/google-vertex.models.d.ts.map +1 -1
  381. package/dist/providers/google-vertex.models.js +4 -2
  382. package/dist/providers/google-vertex.models.js.map +1 -1
  383. package/dist/providers/google.d.ts.map +1 -1
  384. package/dist/providers/google.js.map +1 -1
  385. package/dist/providers/google.models.d.ts +4 -2
  386. package/dist/providers/google.models.d.ts.map +1 -1
  387. package/dist/providers/google.models.js +4 -2
  388. package/dist/providers/google.models.js.map +1 -1
  389. package/dist/providers/groq.d.ts.map +1 -1
  390. package/dist/providers/groq.js.map +1 -1
  391. package/dist/providers/groq.models.d.ts +4 -2
  392. package/dist/providers/groq.models.d.ts.map +1 -1
  393. package/dist/providers/groq.models.js +4 -2
  394. package/dist/providers/groq.models.js.map +1 -1
  395. package/dist/providers/huggingface.d.ts.map +1 -1
  396. package/dist/providers/huggingface.js.map +1 -1
  397. package/dist/providers/huggingface.models.d.ts +4 -2
  398. package/dist/providers/huggingface.models.d.ts.map +1 -1
  399. package/dist/providers/huggingface.models.js +4 -2
  400. package/dist/providers/huggingface.models.js.map +1 -1
  401. package/dist/providers/images/register-builtins.d.ts +1 -1
  402. package/dist/providers/images/register-builtins.d.ts.map +1 -1
  403. package/dist/providers/images/register-builtins.js.map +1 -1
  404. package/dist/providers/kimi-coding.d.ts.map +1 -1
  405. package/dist/providers/kimi-coding.js +1 -0
  406. package/dist/providers/kimi-coding.js.map +1 -1
  407. package/dist/providers/kimi-coding.models.d.ts +4 -2
  408. package/dist/providers/kimi-coding.models.d.ts.map +1 -1
  409. package/dist/providers/kimi-coding.models.js +4 -2
  410. package/dist/providers/kimi-coding.models.js.map +1 -1
  411. package/dist/providers/meta.d.ts +3 -0
  412. package/dist/providers/meta.d.ts.map +1 -0
  413. package/dist/providers/meta.js +24 -0
  414. package/dist/providers/meta.js.map +1 -0
  415. package/dist/providers/meta.models.d.ts +6 -0
  416. package/dist/providers/meta.models.d.ts.map +1 -0
  417. package/dist/providers/meta.models.js +8 -0
  418. package/dist/providers/meta.models.js.map +1 -0
  419. package/dist/providers/minimax-cn.d.ts.map +1 -1
  420. package/dist/providers/minimax-cn.js.map +1 -1
  421. package/dist/providers/minimax-cn.models.d.ts +4 -2
  422. package/dist/providers/minimax-cn.models.d.ts.map +1 -1
  423. package/dist/providers/minimax-cn.models.js +4 -2
  424. package/dist/providers/minimax-cn.models.js.map +1 -1
  425. package/dist/providers/minimax.d.ts.map +1 -1
  426. package/dist/providers/minimax.js.map +1 -1
  427. package/dist/providers/minimax.models.d.ts +4 -2
  428. package/dist/providers/minimax.models.d.ts.map +1 -1
  429. package/dist/providers/minimax.models.js +4 -2
  430. package/dist/providers/minimax.models.js.map +1 -1
  431. package/dist/providers/mistral.d.ts.map +1 -1
  432. package/dist/providers/mistral.js.map +1 -1
  433. package/dist/providers/mistral.models.d.ts +4 -2
  434. package/dist/providers/mistral.models.d.ts.map +1 -1
  435. package/dist/providers/mistral.models.js +4 -2
  436. package/dist/providers/mistral.models.js.map +1 -1
  437. package/dist/providers/moonshotai-cn.d.ts.map +1 -1
  438. package/dist/providers/moonshotai-cn.js.map +1 -1
  439. package/dist/providers/moonshotai-cn.models.d.ts +4 -2
  440. package/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
  441. package/dist/providers/moonshotai-cn.models.js +4 -2
  442. package/dist/providers/moonshotai-cn.models.js.map +1 -1
  443. package/dist/providers/moonshotai.d.ts.map +1 -1
  444. package/dist/providers/moonshotai.js.map +1 -1
  445. package/dist/providers/moonshotai.models.d.ts +4 -2
  446. package/dist/providers/moonshotai.models.d.ts.map +1 -1
  447. package/dist/providers/moonshotai.models.js +4 -2
  448. package/dist/providers/moonshotai.models.js.map +1 -1
  449. package/dist/providers/nvidia.d.ts.map +1 -1
  450. package/dist/providers/nvidia.js.map +1 -1
  451. package/dist/providers/nvidia.models.d.ts +4 -2
  452. package/dist/providers/nvidia.models.d.ts.map +1 -1
  453. package/dist/providers/nvidia.models.js +4 -2
  454. package/dist/providers/nvidia.models.js.map +1 -1
  455. package/dist/providers/openai-codex-catalog.d.ts +1 -0
  456. package/dist/providers/openai-codex-catalog.d.ts.map +1 -1
  457. package/dist/providers/openai-codex-catalog.js +19 -10
  458. package/dist/providers/openai-codex-catalog.js.map +1 -1
  459. package/dist/providers/openai-codex.d.ts.map +1 -1
  460. package/dist/providers/openai-codex.js +5 -1
  461. package/dist/providers/openai-codex.js.map +1 -1
  462. package/dist/providers/openai-codex.models.d.ts +4 -2
  463. package/dist/providers/openai-codex.models.d.ts.map +1 -1
  464. package/dist/providers/openai-codex.models.js +4 -2
  465. package/dist/providers/openai-codex.models.js.map +1 -1
  466. package/dist/providers/openai.d.ts.map +1 -1
  467. package/dist/providers/openai.js +11 -2
  468. package/dist/providers/openai.js.map +1 -1
  469. package/dist/providers/openai.models.d.ts +4 -2
  470. package/dist/providers/openai.models.d.ts.map +1 -1
  471. package/dist/providers/openai.models.js +4 -2
  472. package/dist/providers/openai.models.js.map +1 -1
  473. package/dist/providers/opencode-go.d.ts.map +1 -1
  474. package/dist/providers/opencode-go.js +5 -4
  475. package/dist/providers/opencode-go.js.map +1 -1
  476. package/dist/providers/opencode-go.models.d.ts +4 -2
  477. package/dist/providers/opencode-go.models.d.ts.map +1 -1
  478. package/dist/providers/opencode-go.models.js +4 -2
  479. package/dist/providers/opencode-go.models.js.map +1 -1
  480. package/dist/providers/opencode-headers.d.ts +4 -0
  481. package/dist/providers/opencode-headers.d.ts.map +1 -0
  482. package/dist/providers/opencode-headers.js +22 -0
  483. package/dist/providers/opencode-headers.js.map +1 -0
  484. package/dist/providers/opencode.d.ts +3 -1
  485. package/dist/providers/opencode.d.ts.map +1 -1
  486. package/dist/providers/opencode.js +10 -6
  487. package/dist/providers/opencode.js.map +1 -1
  488. package/dist/providers/opencode.models.d.ts +4 -2
  489. package/dist/providers/opencode.models.d.ts.map +1 -1
  490. package/dist/providers/opencode.models.js +4 -2
  491. package/dist/providers/opencode.models.js.map +1 -1
  492. package/dist/providers/openrouter.d.ts +1 -1
  493. package/dist/providers/openrouter.d.ts.map +1 -1
  494. package/dist/providers/openrouter.js +16 -3
  495. package/dist/providers/openrouter.js.map +1 -1
  496. package/dist/providers/openrouter.models.d.ts +4 -2
  497. package/dist/providers/openrouter.models.d.ts.map +1 -1
  498. package/dist/providers/openrouter.models.js +4 -2
  499. package/dist/providers/openrouter.models.js.map +1 -1
  500. package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -1
  501. package/dist/providers/qwen-token-plan-cn.js.map +1 -1
  502. package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -2
  503. package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -1
  504. package/dist/providers/qwen-token-plan-cn.models.js +4 -2
  505. package/dist/providers/qwen-token-plan-cn.models.js.map +1 -1
  506. package/dist/providers/qwen-token-plan-individual.d.ts +3 -0
  507. package/dist/providers/qwen-token-plan-individual.d.ts.map +1 -0
  508. package/dist/providers/qwen-token-plan-individual.js +15 -0
  509. package/dist/providers/qwen-token-plan-individual.js.map +1 -0
  510. package/dist/providers/qwen-token-plan-individual.models.d.ts +6 -0
  511. package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -0
  512. package/dist/providers/qwen-token-plan-individual.models.js +8 -0
  513. package/dist/providers/qwen-token-plan-individual.models.js.map +1 -0
  514. package/dist/providers/qwen-token-plan.d.ts.map +1 -1
  515. package/dist/providers/qwen-token-plan.js.map +1 -1
  516. package/dist/providers/qwen-token-plan.models.d.ts +4 -2
  517. package/dist/providers/qwen-token-plan.models.d.ts.map +1 -1
  518. package/dist/providers/qwen-token-plan.models.js +4 -2
  519. package/dist/providers/qwen-token-plan.models.js.map +1 -1
  520. package/dist/providers/radius-config.d.ts.map +1 -1
  521. package/dist/providers/radius-config.js.map +1 -1
  522. package/dist/providers/radius.d.ts.map +1 -1
  523. package/dist/providers/radius.js +53 -29
  524. package/dist/providers/radius.js.map +1 -1
  525. package/dist/providers/radius.models.d.ts +6 -0
  526. package/dist/providers/radius.models.d.ts.map +1 -0
  527. package/dist/providers/radius.models.js +8 -0
  528. package/dist/providers/radius.models.js.map +1 -0
  529. package/dist/providers/together.d.ts.map +1 -1
  530. package/dist/providers/together.js.map +1 -1
  531. package/dist/providers/together.models.d.ts +4 -2
  532. package/dist/providers/together.models.d.ts.map +1 -1
  533. package/dist/providers/together.models.js +4 -2
  534. package/dist/providers/together.models.js.map +1 -1
  535. package/dist/providers/typesafe.d.ts +3 -0
  536. package/dist/providers/typesafe.d.ts.map +1 -0
  537. package/dist/providers/typesafe.js +18 -0
  538. package/dist/providers/typesafe.js.map +1 -0
  539. package/dist/providers/typesafe.models.d.ts +6 -0
  540. package/dist/providers/typesafe.models.d.ts.map +1 -0
  541. package/dist/providers/typesafe.models.js +8 -0
  542. package/dist/providers/typesafe.models.js.map +1 -0
  543. package/dist/providers/vercel-ai-gateway.d.ts.map +1 -1
  544. package/dist/providers/vercel-ai-gateway.js +5 -2
  545. package/dist/providers/vercel-ai-gateway.js.map +1 -1
  546. package/dist/providers/vercel-ai-gateway.models.d.ts +4 -2
  547. package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
  548. package/dist/providers/vercel-ai-gateway.models.js +4 -2
  549. package/dist/providers/vercel-ai-gateway.models.js.map +1 -1
  550. package/dist/providers/xai.d.ts +1 -1
  551. package/dist/providers/xai.d.ts.map +1 -1
  552. package/dist/providers/xai.js +2 -5
  553. package/dist/providers/xai.js.map +1 -1
  554. package/dist/providers/xai.models.d.ts +4 -2
  555. package/dist/providers/xai.models.d.ts.map +1 -1
  556. package/dist/providers/xai.models.js +4 -2
  557. package/dist/providers/xai.models.js.map +1 -1
  558. package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -1
  559. package/dist/providers/xiaomi-token-plan-ams.js.map +1 -1
  560. package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -2
  561. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
  562. package/dist/providers/xiaomi-token-plan-ams.models.js +4 -2
  563. package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  564. package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -1
  565. package/dist/providers/xiaomi-token-plan-cn.js.map +1 -1
  566. package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -2
  567. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
  568. package/dist/providers/xiaomi-token-plan-cn.models.js +4 -2
  569. package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  570. package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -1
  571. package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -1
  572. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -2
  573. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
  574. package/dist/providers/xiaomi-token-plan-sgp.models.js +4 -2
  575. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  576. package/dist/providers/xiaomi.d.ts.map +1 -1
  577. package/dist/providers/xiaomi.js.map +1 -1
  578. package/dist/providers/xiaomi.models.d.ts +4 -2
  579. package/dist/providers/xiaomi.models.d.ts.map +1 -1
  580. package/dist/providers/xiaomi.models.js +4 -2
  581. package/dist/providers/xiaomi.models.js.map +1 -1
  582. package/dist/providers/zai-coding-cn.d.ts.map +1 -1
  583. package/dist/providers/zai-coding-cn.js.map +1 -1
  584. package/dist/providers/zai-coding-cn.models.d.ts +4 -2
  585. package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
  586. package/dist/providers/zai-coding-cn.models.js +4 -2
  587. package/dist/providers/zai-coding-cn.models.js.map +1 -1
  588. package/dist/providers/zai.d.ts.map +1 -1
  589. package/dist/providers/zai.js.map +1 -1
  590. package/dist/providers/zai.models.d.ts +4 -2
  591. package/dist/providers/zai.models.d.ts.map +1 -1
  592. package/dist/providers/zai.models.js +4 -2
  593. package/dist/providers/zai.models.js.map +1 -1
  594. package/dist/session-resources.d.ts.map +1 -1
  595. package/dist/session-resources.js.map +1 -1
  596. package/dist/types.d.ts +414 -126
  597. package/dist/types.d.ts.map +1 -1
  598. package/dist/types.js.map +1 -1
  599. package/dist/utils/abort-signals.d.ts.map +1 -1
  600. package/dist/utils/abort-signals.js.map +1 -1
  601. package/dist/utils/abort.d.ts +8 -0
  602. package/dist/utils/abort.d.ts.map +1 -0
  603. package/dist/utils/abort.js +49 -0
  604. package/dist/utils/abort.js.map +1 -0
  605. package/dist/utils/assistant-message-frame.d.ts +77 -0
  606. package/dist/utils/assistant-message-frame.d.ts.map +1 -0
  607. package/dist/utils/assistant-message-frame.js +425 -0
  608. package/dist/utils/assistant-message-frame.js.map +1 -0
  609. package/dist/utils/diagnostics.d.ts +3 -2
  610. package/dist/utils/diagnostics.d.ts.map +1 -1
  611. package/dist/utils/diagnostics.js.map +1 -1
  612. package/dist/utils/error-body.d.ts.map +1 -1
  613. package/dist/utils/error-body.js +23 -4
  614. package/dist/utils/error-body.js.map +1 -1
  615. package/dist/utils/estimate.d.ts +2 -2
  616. package/dist/utils/estimate.d.ts.map +1 -1
  617. package/dist/utils/estimate.js +8 -29
  618. package/dist/utils/estimate.js.map +1 -1
  619. package/dist/utils/event-stream.d.ts.map +1 -1
  620. package/dist/utils/event-stream.js +25 -7
  621. package/dist/utils/event-stream.js.map +1 -1
  622. package/dist/utils/hash.d.ts.map +1 -1
  623. package/dist/utils/hash.js.map +1 -1
  624. package/dist/utils/headers.d.ts +1 -1
  625. package/dist/utils/headers.d.ts.map +1 -1
  626. package/dist/utils/headers.js +10 -8
  627. package/dist/utils/headers.js.map +1 -1
  628. package/dist/utils/json-parse.d.ts.map +1 -1
  629. package/dist/utils/json-parse.js.map +1 -1
  630. package/dist/utils/model-operations.d.ts +11 -0
  631. package/dist/utils/model-operations.d.ts.map +1 -0
  632. package/dist/utils/model-operations.js +47 -0
  633. package/dist/utils/model-operations.js.map +1 -0
  634. package/dist/utils/models-error.d.ts +8 -0
  635. package/dist/utils/models-error.d.ts.map +1 -0
  636. package/dist/utils/models-error.js +19 -0
  637. package/dist/utils/models-error.js.map +1 -0
  638. package/dist/utils/node-http-proxy.d.ts.map +1 -1
  639. package/dist/utils/node-http-proxy.js +53 -12
  640. package/dist/utils/node-http-proxy.js.map +1 -1
  641. package/dist/utils/oauth-page.d.ts.map +1 -0
  642. package/dist/{auth/oauth → utils}/oauth-page.js +1 -1
  643. package/dist/utils/oauth-page.js.map +1 -0
  644. package/dist/utils/overflow.d.ts +11 -1
  645. package/dist/utils/overflow.d.ts.map +1 -1
  646. package/dist/utils/overflow.js +24 -6
  647. package/dist/utils/overflow.js.map +1 -1
  648. package/dist/utils/pi-user-agent.d.ts +2 -0
  649. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  650. package/dist/utils/pi-user-agent.js +12 -0
  651. package/dist/utils/pi-user-agent.js.map +1 -0
  652. package/dist/utils/provider-env.d.ts.map +1 -1
  653. package/dist/utils/provider-env.js.map +1 -1
  654. package/dist/utils/provider-retry.d.ts.map +1 -1
  655. package/dist/utils/provider-retry.js +3 -2
  656. package/dist/utils/provider-retry.js.map +1 -1
  657. package/dist/utils/retry.d.ts +6 -1
  658. package/dist/utils/retry.d.ts.map +1 -1
  659. package/dist/utils/retry.js +23 -2
  660. package/dist/utils/retry.js.map +1 -1
  661. package/dist/utils/sanitize-unicode.d.ts.map +1 -1
  662. package/dist/utils/sanitize-unicode.js.map +1 -1
  663. package/dist/utils/sleep.d.ts +2 -0
  664. package/dist/utils/sleep.d.ts.map +1 -0
  665. package/dist/utils/sleep.js +15 -0
  666. package/dist/utils/sleep.js.map +1 -0
  667. package/dist/utils/text.d.ts +9 -1
  668. package/dist/utils/text.d.ts.map +1 -1
  669. package/dist/utils/text.js +26 -0
  670. package/dist/utils/text.js.map +1 -1
  671. package/dist/utils/transcript.d.ts +87 -0
  672. package/dist/utils/transcript.d.ts.map +1 -0
  673. package/dist/utils/transcript.js +207 -0
  674. package/dist/utils/transcript.js.map +1 -0
  675. package/dist/utils/typebox-helpers.d.ts.map +1 -1
  676. package/dist/utils/typebox-helpers.js.map +1 -1
  677. package/dist/utils/uuid.d.ts +2 -2
  678. package/dist/utils/uuid.d.ts.map +1 -1
  679. package/dist/utils/uuid.js +35 -39
  680. package/dist/utils/uuid.js.map +1 -1
  681. package/dist/utils/validation.d.ts.map +1 -1
  682. package/dist/utils/validation.js +40 -0
  683. package/dist/utils/validation.js.map +1 -1
  684. package/package.json +21 -15
  685. package/dist/auth/oauth/oauth-page.d.ts.map +0 -1
  686. package/dist/auth/oauth/oauth-page.js.map +0 -1
  687. package/dist/image-models.generated.d.ts +0 -605
  688. package/dist/image-models.generated.d.ts.map +0 -1
  689. package/dist/image-models.generated.js +0 -607
  690. package/dist/image-models.generated.js.map +0 -1
  691. package/dist/images-models.d.ts +0 -95
  692. package/dist/images-models.d.ts.map +0 -1
  693. package/dist/images-models.js +0 -142
  694. package/dist/images-models.js.map +0 -1
  695. package/dist/providers/azure-openai-responses.d.ts +0 -3
  696. package/dist/providers/azure-openai-responses.d.ts.map +0 -1
  697. package/dist/providers/azure-openai-responses.js +0 -14
  698. package/dist/providers/azure-openai-responses.js.map +0 -1
  699. package/dist/providers/azure-openai-responses.models.d.ts +0 -4
  700. package/dist/providers/azure-openai-responses.models.d.ts.map +0 -1
  701. package/dist/providers/azure-openai-responses.models.js +0 -6
  702. package/dist/providers/azure-openai-responses.models.js.map +0 -1
  703. package/dist/providers/data/azure-openai-responses.json +0 -1
  704. package/dist/providers/openrouter-images.d.ts +0 -3
  705. package/dist/providers/openrouter-images.d.ts.map +0 -1
  706. package/dist/providers/openrouter-images.js +0 -22
  707. package/dist/providers/openrouter-images.js.map +0 -1
  708. package/dist/utils/deferred-tools.d.ts +0 -9
  709. package/dist/utils/deferred-tools.d.ts.map +0 -1
  710. package/dist/utils/deferred-tools.js +0 -36
  711. package/dist/utils/deferred-tools.js.map +0 -1
  712. /package/dist/{auth/oauth → utils}/oauth-page.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"nvidia.models.d.ts","sourceRoot":"","sources":["../../src/providers/nvidia.models.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,oBAAoB,CAAuB;AAC9D,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE7E,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,OAAO,MAAM,EAAE,QAAQ,CAC1B,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/nvidia.json\" with { type: \"json\" };\nimport { flattenModelCatalog, type ModelCatalog } from \"../model-catalog.ts\";\n\nexport const NVIDIA_MODELS: ModelCatalog<typeof values, \"nvidia\"> =\n\tflattenModelCatalog(\"nvidia\", values);\n"]}
1
+ {"version":3,"file":"nvidia.models.d.ts","sourceRoot":"","sources":["../../src/providers/nvidia.models.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,oBAAoB,CAAuB;AAC9D,OAAO,EAAoF,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEnM,eAAO,MAAM,aAAa,EAAE,gBAAgB,CAAC,OAAO,MAAM,EAAE,QAAQ,CAC1B,CAAC;AAE3C,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,CAAC,OAAO,MAAM,EAAE,QAAQ,CAChC,CAAC;AAE5C,eAAO,MAAM,wBAAwB,EAAE,sBAAsB,CAAC,OAAO,MAAM,EAAE,QAAQ,CACrC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  // This file is auto-generated by scripts/generate-models.ts
2
2
  // Do not edit manually - run 'npm run generate-models' to update
3
3
  import values from "./data/nvidia.json" with { type: "json" };
4
- import { flattenModelCatalog } from "../model-catalog.js";
5
- export const NVIDIA_MODELS = flattenModelCatalog("nvidia", values);
4
+ import { flattenChatModelCatalog, flattenClassifierModelCatalog, flattenImageModelCatalog } from "../model-catalog.js";
5
+ export const NVIDIA_MODELS = flattenChatModelCatalog("nvidia", values);
6
+ export const NVIDIA_IMAGE_MODELS = flattenImageModelCatalog("nvidia", values);
7
+ export const NVIDIA_CLASSIFIER_MODELS = flattenClassifierModelCatalog("nvidia", values);
6
8
  //# sourceMappingURL=nvidia.models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nvidia.models.js","sourceRoot":"","sources":["../../src/providers/nvidia.models.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iEAAiE;AAEjE,OAAO,MAAM,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAE7E,MAAM,CAAC,MAAM,aAAa,GACzB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/nvidia.json\" with { type: \"json\" };\nimport { flattenModelCatalog, type ModelCatalog } from \"../model-catalog.ts\";\n\nexport const NVIDIA_MODELS: ModelCatalog<typeof values, \"nvidia\"> =\n\tflattenModelCatalog(\"nvidia\", values);\n"]}
1
+ {"version":3,"file":"nvidia.models.js","sourceRoot":"","sources":["../../src/providers/nvidia.models.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iEAAiE;AAEjE,OAAO,MAAM,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,wBAAwB,EAA8E,MAAM,qBAAqB,CAAC;AAEnM,MAAM,CAAC,MAAM,aAAa,GACzB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,mBAAmB,GAC/B,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,wBAAwB,GACpC,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/nvidia.json\" with { type: \"json\" };\nimport { flattenChatModelCatalog, flattenClassifierModelCatalog, flattenImageModelCatalog, type ChatModelCatalog, type ClassifierModelCatalog, type ImageModelCatalog } from \"../model-catalog.ts\";\n\nexport const NVIDIA_MODELS: ChatModelCatalog<typeof values, \"nvidia\"> =\n\tflattenChatModelCatalog(\"nvidia\", values);\n\nexport const NVIDIA_IMAGE_MODELS: ImageModelCatalog<typeof values, \"nvidia\"> =\n\tflattenImageModelCatalog(\"nvidia\", values);\n\nexport const NVIDIA_CLASSIFIER_MODELS: ClassifierModelCatalog<typeof values, \"nvidia\"> =\n\tflattenClassifierModelCatalog(\"nvidia\", values);\n"]}
@@ -12,6 +12,7 @@ export interface OpenAICodexCatalogOptions {
12
12
  /** Provider-owned, additive discovery over Pi's existing provider-scoped ModelsStore. */
13
13
  export declare function createOpenAICodexCatalog(baseline: readonly CodexModel[], options?: OpenAICodexCatalogOptions): {
14
14
  getModels: () => readonly CodexModel[];
15
+ getAllModels: () => readonly CodexModel[];
15
16
  refreshModels(context: RefreshModelsContext): Promise<void>;
16
17
  };
17
18
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"openai-codex-catalog.d.ts","sourceRoot":"","sources":["../../src/providers/openai-codex-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAsB,MAAM,aAAa,CAAC;AA8D7D,KAAK,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACzC,wGAAwG;IACxG,YAAY,CAAC,EAAE,OAAO,KAAK,CAAC;IAC5B,kFAAkF;IAClF,eAAe,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACxC,0FAA0F;IAC1F,aAAa,CAAC,EAAE,OAAO,KAAK,CAAC;CAC7B;AAoED,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,EAAE,OAAO,GAAE,yBAA8B;;;EAiHhH","sourcesContent":["import { type Static, Type } from \"typebox\";\nimport { Compile } from \"typebox/compile\";\nimport type { RefreshModelsContext } from \"../models.ts\";\nimport type { Model, ModelThinkingLevel } from \"../types.ts\";\nimport modelDataManifest from \"./data/.manifest.json\" with { type: \"json\" };\n\nconst PROVIDER = \"openai-codex\";\nconst BASE_URL = \"https://chatgpt.com/backend-api\";\nconst REFRESH_INTERVAL_MS = 4 * 60 * 60_000;\nconst THINKING_LEVELS: ModelThinkingLevel[] = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\nconst WIRE_EFFORTS = new Set([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"]);\nconst CATALOG_SOURCE = `${BASE_URL}/codex/models`;\nconst validateTokenClaims = Compile(\n\tType.Object({\n\t\t\"https://api.openai.com/auth\": Type.Object({ chatgpt_account_id: Type.String({ minLength: 1 }) }),\n\t}),\n);\nconst catalogVersionSchema = Type.Object({ version: Type.String({ pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\" }) });\nconst validateVersion = Compile(catalogVersionSchema);\nconst nativeCatalogSchema = Type.Object({\n\tmodels: Type.Array(\n\t\tType.Object({\n\t\t\tslug: Type.String({ minLength: 1, maxLength: 256 }),\n\t\t\tdisplay_name: Type.String({ minLength: 1, maxLength: 256 }),\n\t\t\tvisibility: Type.String(),\n\t\t\tcontext_window: Type.Optional(Type.Union([Type.Integer({ minimum: 1 }), Type.Null()])),\n\t\t\tmax_context_window: Type.Optional(Type.Union([Type.Integer({ minimum: 1 }), Type.Null()])),\n\t\t\tsupported_reasoning_levels: Type.Array(Type.Object({ effort: Type.String() })),\n\t\t\tinput_modalities: Type.Optional(Type.Array(Type.String())),\n\t\t}),\n\t),\n});\nconst validateNativeCatalog = Compile(nativeCatalogSchema);\nconst costRates = {\n\tinput: Type.Number({ minimum: 0 }),\n\toutput: Type.Number({ minimum: 0 }),\n\tcacheRead: Type.Number({ minimum: 0 }),\n\tcacheWrite: Type.Number({ minimum: 0 }),\n};\nconst metadataSchema = Type.Object({\n\tid: Type.String({ minLength: 1, maxLength: 256 }),\n\tname: Type.String({ minLength: 1 }),\n\treasoning: Type.Boolean(),\n\tinput: Type.Array(Type.Union([Type.Literal(\"text\"), Type.Literal(\"image\")])),\n\tcontextWindow: Type.Integer({ minimum: 1 }),\n\tmaxTokens: Type.Integer({ minimum: 1 }),\n\tmaxContextWindow: Type.Optional(Type.Integer({ minimum: 1 })),\n\tcost: Type.Object({\n\t\t...costRates,\n\t\ttiers: Type.Optional(Type.Array(Type.Object({ inputTokensAbove: Type.Number({ minimum: 0 }), ...costRates }))),\n\t}),\n\tthinkingLevelMap: Type.Optional(Type.Record(Type.String(), Type.Union([Type.String(), Type.Null()]))),\n\tcompat: Type.Optional(\n\t\tType.Object({\n\t\t\tsupportsDeveloperRole: Type.Optional(Type.Boolean()),\n\t\t\tsupportsLongCacheRetention: Type.Optional(Type.Boolean()),\n\t\t\tsupportsStrictMode: Type.Optional(Type.Boolean()),\n\t\t\tsupportsOpenAIGrammarTools: Type.Optional(Type.Boolean()),\n\t\t\tsupportsToolSearch: Type.Optional(Type.Boolean()),\n\t\t\tsupportsExplicitPromptCacheMode: Type.Optional(Type.Boolean()),\n\t\t}),\n\t),\n});\nconst validateMetadata = Compile(metadataSchema);\ntype NativeModel = Static<typeof nativeCatalogSchema>[\"models\"][number];\ntype CodexModel = Model<\"openai-codex-responses\">;\n\nexport interface OpenAICodexCatalogOptions {\n\t/** Native catalog transport only. Public version/pricing lookups never receive provider credentials. */\n\tcatalogFetch?: typeof fetch;\n\t/** A host relay authenticates catalog requests instead of a local OAuth token. */\n\tcatalogAuthMode?: \"oauth\" | \"transport\";\n\t/** Public metadata transport; useful for hosts with an explicit outbound HTTP adapter. */\n\tmetadataFetch?: typeof fetch;\n}\n\nfunction parseMetadata(value: unknown): CodexModel[] {\n\tconst rows: unknown[] = Array.isArray(value)\n\t\t? value\n\t\t: typeof value === \"object\" && value !== null\n\t\t\t? Object.values(value)\n\t\t\t: [];\n\treturn rows.flatMap((row) => {\n\t\tif (!validateMetadata.Check(row)) return [];\n\t\t// Catalogs describe model data, never where OAuth credentials are sent.\n\t\tconst { id, name, reasoning, input, contextWindow, maxTokens, maxContextWindow, cost, compat } = row;\n\t\tlet thinkingLevelMap: CodexModel[\"thinkingLevelMap\"];\n\t\tif (row.thinkingLevelMap) {\n\t\t\tthinkingLevelMap = {};\n\t\t\tfor (const level of THINKING_LEVELS) {\n\t\t\t\tconst mapped = row.thinkingLevelMap[level];\n\t\t\t\tif (mapped !== undefined)\n\t\t\t\t\tthinkingLevelMap[level] = mapped === null || WIRE_EFFORTS.has(mapped) ? mapped : null;\n\t\t\t}\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\treasoning,\n\t\t\t\tinput,\n\t\t\t\tcontextWindow,\n\t\t\t\tmaxTokens,\n\t\t\t\tmaxContextWindow,\n\t\t\t\tcost,\n\t\t\t\tthinkingLevelMap,\n\t\t\t\tcompat,\n\t\t\t\tprovider: PROVIDER,\n\t\t\t\tapi: \"openai-codex-responses\" as const,\n\t\t\t\tbaseUrl: BASE_URL,\n\t\t\t},\n\t\t];\n\t});\n}\n\nfunction applyNativeMetadata(native: NativeModel, known: CodexModel): CodexModel {\n\tconst thinkingLevelMap = { ...known.thinkingLevelMap };\n\tfor (const { effort } of native.supported_reasoning_levels) {\n\t\tif (WIRE_EFFORTS.has(effort)) {\n\t\t\tthinkingLevelMap[(effort === \"none\" ? \"off\" : effort) as ModelThinkingLevel] = effort;\n\t\t}\n\t}\n\tconst modalities = native.input_modalities?.filter(\n\t\t(value): value is \"text\" | \"image\" => value === \"text\" || value === \"image\",\n\t);\n\tconst contextWindow = native.context_window ?? known.contextWindow;\n\tconst maxContextWindow = native.max_context_window ?? known.maxContextWindow;\n\tif (maxContextWindow !== undefined && maxContextWindow < contextWindow) {\n\t\tthrow new Error(`Codex catalog has inconsistent context limits for ${native.slug}.`);\n\t}\n\treturn {\n\t\t...known,\n\t\tid: native.slug,\n\t\tname: native.display_name,\n\t\tcontextWindow,\n\t\tmaxContextWindow,\n\t\treasoning: known.reasoning || native.supported_reasoning_levels.length > 0,\n\t\tthinkingLevelMap,\n\t\tinput: modalities?.length ? modalities : known.input,\n\t};\n}\n\n/** Provider-owned, additive discovery over Pi's existing provider-scoped ModelsStore. */\nexport function createOpenAICodexCatalog(baseline: readonly CodexModel[], options: OpenAICodexCatalogOptions = {}) {\n\tlet models = [...baseline];\n\tlet pending: Promise<void> | undefined;\n\tconst metadataFetch: typeof fetch = options.metadataFetch ?? ((url, init) => globalThis.fetch(url, init));\n\tconst nativeFetch: typeof fetch = options.catalogFetch ?? ((url, init) => globalThis.fetch(url, init));\n\n\treturn {\n\t\tgetModels: (): readonly CodexModel[] => models,\n\t\trefreshModels(context: RefreshModelsContext): Promise<void> {\n\t\t\tpending ??= (async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst stored = await context.store.read();\n\t\t\t\t\tconst generatedAt = Date.parse(modelDataManifest.generatedAt);\n\t\t\t\t\tconst staleLegacyOverlay =\n\t\t\t\t\t\tstored?.source !== CATALOG_SOURCE &&\n\t\t\t\t\t\t(stored?.lastModified === undefined || stored.lastModified <= generatedAt);\n\t\t\t\t\tconst baselineIds = new Set(baseline.map((model) => model.id));\n\t\t\t\t\t// Preserve the bundled fixes that previously superseded old pi.dev\n\t\t\t\t\t// overlays. Unknown IDs remain additive; native metadata owns its\n\t\t\t\t\t// own freshness rather than borrowing the public feed's timestamp.\n\t\t\t\t\tconst cached = parseMetadata(stored?.models ?? []).filter(\n\t\t\t\t\t\t(model) => !staleLegacyOverlay || !baselineIds.has(model.id),\n\t\t\t\t\t);\n\t\t\t\t\tmodels = [...new Map([...baseline, ...cached].map((model) => [model.id, model])).values()];\n\t\t\t\t\tif (!context.allowNetwork || context.signal?.aborted) return;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!context.force &&\n\t\t\t\t\t\tstored?.source === CATALOG_SOURCE &&\n\t\t\t\t\t\tstored.checkedAt &&\n\t\t\t\t\t\tDate.now() - stored.checkedAt < REFRESH_INTERVAL_MS\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tconst signal = AbortSignal.any([\n\t\t\t\t\t\tAbortSignal.timeout(20_000),\n\t\t\t\t\t\t...(context.signal ? [context.signal] : []),\n\t\t\t\t\t]);\n\t\t\t\t\t// This is a catalog-query version, not an executable download or a\n\t\t\t\t\t// claim that Pi implements every feature of that Codex CLI release.\n\t\t\t\t\tconst versionResponse = await metadataFetch(\"https://registry.npmjs.org/@openai/codex/latest\", {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t});\n\t\t\t\t\tif (!versionResponse.ok)\n\t\t\t\t\t\tthrow new Error(`Codex catalog version lookup failed (${versionResponse.status}).`);\n\t\t\t\t\tconst version: unknown = await versionResponse.json();\n\t\t\t\t\tif (!validateVersion.Check(version)) throw new Error(\"Codex catalog version metadata is invalid.\");\n\t\t\t\t\tconst headers = new Headers({ accept: \"application/json\", originator: \"pi\" });\n\t\t\t\t\tif (options.catalogAuthMode !== \"transport\") {\n\t\t\t\t\t\tconst credential = context.credential;\n\t\t\t\t\t\tif (credential?.type !== \"oauth\")\n\t\t\t\t\t\t\tthrow new Error(\"Codex catalog discovery requires OAuth or an authenticated host transport.\");\n\t\t\t\t\t\tlet accountId = credential.accountId;\n\t\t\t\t\t\tif (typeof accountId !== \"string\" || !accountId) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst payload: unknown = JSON.parse(atob(credential.access.split(\".\")[1] ?? \"\"));\n\t\t\t\t\t\t\t\tif (!validateTokenClaims.Check(payload)) throw new Error(\"Missing account ID\");\n\t\t\t\t\t\t\t\taccountId = payload[\"https://api.openai.com/auth\"].chatgpt_account_id;\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tthrow new Error(\"Codex catalog credential has no account ID.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof accountId !== \"string\" || !accountId)\n\t\t\t\t\t\t\tthrow new Error(\"Codex catalog credential has no account ID.\");\n\t\t\t\t\t\theaders.set(\"Authorization\", `Bearer ${credential.access}`);\n\t\t\t\t\t\theaders.set(\"chatgpt-account-id\", accountId);\n\t\t\t\t\t}\n\t\t\t\t\tconst response = await nativeFetch(\n\t\t\t\t\t\t`${CATALOG_SOURCE}?client_version=${encodeURIComponent(version.version)}`,\n\t\t\t\t\t\t{ headers, signal },\n\t\t\t\t\t);\n\t\t\t\t\tif (!response.ok) throw new Error(`Codex model discovery failed (${response.status}).`);\n\t\t\t\t\tconst catalog: unknown = await response.json();\n\t\t\t\t\tif (!validateNativeCatalog.Check(catalog))\n\t\t\t\t\t\tthrow new Error(\"Codex model discovery returned an invalid catalog.\");\n\t\t\t\t\tlet metadata: CodexModel[] = [];\n\t\t\t\t\tlet metadataError: Error | undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst enrichment = await metadataFetch(\"https://pi.dev/api/models/providers/openai-codex\", {\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\theaders: { accept: \"application/json\" },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!enrichment.ok) throw new Error(`Codex model metadata request failed (${enrichment.status}).`);\n\t\t\t\t\t\tmetadata = parseMetadata(await enrichment.json());\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmetadataError = error instanceof Error ? error : new Error(\"Codex model metadata is unavailable.\");\n\t\t\t\t\t}\n\t\t\t\t\tsignal.throwIfAborted();\n\t\t\t\t\tconst known = new Map([...models, ...metadata].map((model) => [model.id, model]));\n\t\t\t\t\tconst merged = new Map(models.map((model) => [model.id, model]));\n\t\t\t\t\tconst missing: string[] = [];\n\t\t\t\t\tfor (const model of catalog.models) {\n\t\t\t\t\t\tif (model.visibility !== \"list\" && !merged.has(model.slug)) continue;\n\t\t\t\t\t\tconst details = known.get(model.slug);\n\t\t\t\t\t\tif (!details) {\n\t\t\t\t\t\t\tmissing.push(model.slug);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmerged.set(model.slug, applyNativeMetadata(model, details));\n\t\t\t\t\t}\n\t\t\t\t\tconst refreshed = [...merged.values()];\n\t\t\t\t\tawait context.store.write({ models: refreshed, source: CATALOG_SOURCE, checkedAt: Date.now() });\n\t\t\t\t\tmodels = refreshed;\n\t\t\t\t\tif (missing.length)\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Codex catalog refreshed; these models await output/pricing metadata: ${missing.join(\", \")}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (metadataError) throw metadataError;\n\t\t\t\t} finally {\n\t\t\t\t\tpending = undefined;\n\t\t\t\t}\n\t\t\t})();\n\t\t\treturn pending;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"openai-codex-catalog.d.ts","sourceRoot":"","sources":["../../src/providers/openai-codex-catalog.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAsB,MAAM,aAAa,CAAC;AA8D7D,KAAK,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACzC,wGAAwG;IACxG,YAAY,CAAC,EAAE,OAAO,KAAK,CAAC;IAC5B,kFAAkF;IAClF,eAAe,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IACxC,0FAA0F;IAC1F,aAAa,CAAC,EAAE,OAAO,KAAK,CAAC;CAC7B;AAoED,yFAAyF;AACzF,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,SAAS,UAAU,EAAE,EAAE,OAAO,GAAE,yBAA8B;IAO/G,SAAS,QAAM,SAAS,UAAU,EAAE;IACpC,YAAY,QAAM,SAAS,UAAU,EAAE;IACvC,aAAa,UAAU,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;EA+G5D"}
@@ -124,10 +124,13 @@ export function createOpenAICodexCatalog(baseline, options = {}) {
124
124
  const nativeFetch = options.catalogFetch ?? ((url, init) => globalThis.fetch(url, init));
125
125
  return {
126
126
  getModels: () => models,
127
+ getAllModels: () => models,
127
128
  refreshModels(context) {
128
- pending ??= (async () => {
129
+ if (pending)
130
+ return pending;
131
+ const current = (async () => {
129
132
  try {
130
- const stored = await context.store.read();
133
+ const stored = context.stored;
131
134
  const generatedAt = Date.parse(modelDataManifest.generatedAt);
132
135
  const staleLegacyOverlay = stored?.source !== CATALOG_SOURCE &&
133
136
  (stored?.lastModified === undefined || stored.lastModified <= generatedAt);
@@ -144,10 +147,7 @@ export function createOpenAICodexCatalog(baseline, options = {}) {
144
147
  stored.checkedAt &&
145
148
  Date.now() - stored.checkedAt < REFRESH_INTERVAL_MS)
146
149
  return;
147
- const signal = AbortSignal.any([
148
- AbortSignal.timeout(20_000),
149
- ...(context.signal ? [context.signal] : []),
150
- ]);
150
+ const signal = AbortSignal.any([AbortSignal.timeout(20_000), context.signal]);
151
151
  // This is a catalog-query version, not an executable download or a
152
152
  // claim that Pi implements every feature of that Codex CLI release.
153
153
  const versionResponse = await metadataFetch("https://registry.npmjs.org/@openai/codex/latest", {
@@ -215,18 +215,27 @@ export function createOpenAICodexCatalog(baseline, options = {}) {
215
215
  merged.set(model.slug, applyNativeMetadata(model, details));
216
216
  }
217
217
  const refreshed = [...merged.values()];
218
- await context.store.write({ models: refreshed, source: CATALOG_SOURCE, checkedAt: Date.now() });
219
- models = refreshed;
218
+ await context.publish({
219
+ persist: { models: refreshed, source: CATALOG_SOURCE, checkedAt: Date.now() },
220
+ update: () => {
221
+ models = refreshed;
222
+ },
223
+ });
220
224
  if (missing.length)
221
225
  throw new Error(`Codex catalog refreshed; these models await output/pricing metadata: ${missing.join(", ")}.`);
222
226
  if (metadataError)
223
227
  throw metadataError;
224
228
  }
225
229
  finally {
226
- pending = undefined;
230
+ // Settled only after assignment below, even when the body finishes synchronously.
231
+ queueMicrotask(() => {
232
+ if (pending === current)
233
+ pending = undefined;
234
+ });
227
235
  }
228
236
  })();
229
- return pending;
237
+ pending = current;
238
+ return current;
230
239
  },
231
240
  };
232
241
  }
@@ -1 +1 @@
1
- {"version":3,"file":"openai-codex-catalog.js","sourceRoot":"","sources":["../../src/providers/openai-codex-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Static, Type } from \"typebox\";\nimport { Compile } from \"typebox/compile\";\nimport type { RefreshModelsContext } from \"../models.ts\";\nimport type { Model, ModelThinkingLevel } from \"../types.ts\";\nimport modelDataManifest from \"./data/.manifest.json\" with { type: \"json\" };\n\nconst PROVIDER = \"openai-codex\";\nconst BASE_URL = \"https://chatgpt.com/backend-api\";\nconst REFRESH_INTERVAL_MS = 4 * 60 * 60_000;\nconst THINKING_LEVELS: ModelThinkingLevel[] = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\nconst WIRE_EFFORTS = new Set([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"]);\nconst CATALOG_SOURCE = `${BASE_URL}/codex/models`;\nconst validateTokenClaims = Compile(\n\tType.Object({\n\t\t\"https://api.openai.com/auth\": Type.Object({ chatgpt_account_id: Type.String({ minLength: 1 }) }),\n\t}),\n);\nconst catalogVersionSchema = Type.Object({ version: Type.String({ pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\" }) });\nconst validateVersion = Compile(catalogVersionSchema);\nconst nativeCatalogSchema = Type.Object({\n\tmodels: Type.Array(\n\t\tType.Object({\n\t\t\tslug: Type.String({ minLength: 1, maxLength: 256 }),\n\t\t\tdisplay_name: Type.String({ minLength: 1, maxLength: 256 }),\n\t\t\tvisibility: Type.String(),\n\t\t\tcontext_window: Type.Optional(Type.Union([Type.Integer({ minimum: 1 }), Type.Null()])),\n\t\t\tmax_context_window: Type.Optional(Type.Union([Type.Integer({ minimum: 1 }), Type.Null()])),\n\t\t\tsupported_reasoning_levels: Type.Array(Type.Object({ effort: Type.String() })),\n\t\t\tinput_modalities: Type.Optional(Type.Array(Type.String())),\n\t\t}),\n\t),\n});\nconst validateNativeCatalog = Compile(nativeCatalogSchema);\nconst costRates = {\n\tinput: Type.Number({ minimum: 0 }),\n\toutput: Type.Number({ minimum: 0 }),\n\tcacheRead: Type.Number({ minimum: 0 }),\n\tcacheWrite: Type.Number({ minimum: 0 }),\n};\nconst metadataSchema = Type.Object({\n\tid: Type.String({ minLength: 1, maxLength: 256 }),\n\tname: Type.String({ minLength: 1 }),\n\treasoning: Type.Boolean(),\n\tinput: Type.Array(Type.Union([Type.Literal(\"text\"), Type.Literal(\"image\")])),\n\tcontextWindow: Type.Integer({ minimum: 1 }),\n\tmaxTokens: Type.Integer({ minimum: 1 }),\n\tmaxContextWindow: Type.Optional(Type.Integer({ minimum: 1 })),\n\tcost: Type.Object({\n\t\t...costRates,\n\t\ttiers: Type.Optional(Type.Array(Type.Object({ inputTokensAbove: Type.Number({ minimum: 0 }), ...costRates }))),\n\t}),\n\tthinkingLevelMap: Type.Optional(Type.Record(Type.String(), Type.Union([Type.String(), Type.Null()]))),\n\tcompat: Type.Optional(\n\t\tType.Object({\n\t\t\tsupportsDeveloperRole: Type.Optional(Type.Boolean()),\n\t\t\tsupportsLongCacheRetention: Type.Optional(Type.Boolean()),\n\t\t\tsupportsStrictMode: Type.Optional(Type.Boolean()),\n\t\t\tsupportsOpenAIGrammarTools: Type.Optional(Type.Boolean()),\n\t\t\tsupportsToolSearch: Type.Optional(Type.Boolean()),\n\t\t\tsupportsExplicitPromptCacheMode: Type.Optional(Type.Boolean()),\n\t\t}),\n\t),\n});\nconst validateMetadata = Compile(metadataSchema);\ntype NativeModel = Static<typeof nativeCatalogSchema>[\"models\"][number];\ntype CodexModel = Model<\"openai-codex-responses\">;\n\nexport interface OpenAICodexCatalogOptions {\n\t/** Native catalog transport only. Public version/pricing lookups never receive provider credentials. */\n\tcatalogFetch?: typeof fetch;\n\t/** A host relay authenticates catalog requests instead of a local OAuth token. */\n\tcatalogAuthMode?: \"oauth\" | \"transport\";\n\t/** Public metadata transport; useful for hosts with an explicit outbound HTTP adapter. */\n\tmetadataFetch?: typeof fetch;\n}\n\nfunction parseMetadata(value: unknown): CodexModel[] {\n\tconst rows: unknown[] = Array.isArray(value)\n\t\t? value\n\t\t: typeof value === \"object\" && value !== null\n\t\t\t? Object.values(value)\n\t\t\t: [];\n\treturn rows.flatMap((row) => {\n\t\tif (!validateMetadata.Check(row)) return [];\n\t\t// Catalogs describe model data, never where OAuth credentials are sent.\n\t\tconst { id, name, reasoning, input, contextWindow, maxTokens, maxContextWindow, cost, compat } = row;\n\t\tlet thinkingLevelMap: CodexModel[\"thinkingLevelMap\"];\n\t\tif (row.thinkingLevelMap) {\n\t\t\tthinkingLevelMap = {};\n\t\t\tfor (const level of THINKING_LEVELS) {\n\t\t\t\tconst mapped = row.thinkingLevelMap[level];\n\t\t\t\tif (mapped !== undefined)\n\t\t\t\t\tthinkingLevelMap[level] = mapped === null || WIRE_EFFORTS.has(mapped) ? mapped : null;\n\t\t\t}\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\treasoning,\n\t\t\t\tinput,\n\t\t\t\tcontextWindow,\n\t\t\t\tmaxTokens,\n\t\t\t\tmaxContextWindow,\n\t\t\t\tcost,\n\t\t\t\tthinkingLevelMap,\n\t\t\t\tcompat,\n\t\t\t\tprovider: PROVIDER,\n\t\t\t\tapi: \"openai-codex-responses\" as const,\n\t\t\t\tbaseUrl: BASE_URL,\n\t\t\t},\n\t\t];\n\t});\n}\n\nfunction applyNativeMetadata(native: NativeModel, known: CodexModel): CodexModel {\n\tconst thinkingLevelMap = { ...known.thinkingLevelMap };\n\tfor (const { effort } of native.supported_reasoning_levels) {\n\t\tif (WIRE_EFFORTS.has(effort)) {\n\t\t\tthinkingLevelMap[(effort === \"none\" ? \"off\" : effort) as ModelThinkingLevel] = effort;\n\t\t}\n\t}\n\tconst modalities = native.input_modalities?.filter(\n\t\t(value): value is \"text\" | \"image\" => value === \"text\" || value === \"image\",\n\t);\n\tconst contextWindow = native.context_window ?? known.contextWindow;\n\tconst maxContextWindow = native.max_context_window ?? known.maxContextWindow;\n\tif (maxContextWindow !== undefined && maxContextWindow < contextWindow) {\n\t\tthrow new Error(`Codex catalog has inconsistent context limits for ${native.slug}.`);\n\t}\n\treturn {\n\t\t...known,\n\t\tid: native.slug,\n\t\tname: native.display_name,\n\t\tcontextWindow,\n\t\tmaxContextWindow,\n\t\treasoning: known.reasoning || native.supported_reasoning_levels.length > 0,\n\t\tthinkingLevelMap,\n\t\tinput: modalities?.length ? modalities : known.input,\n\t};\n}\n\n/** Provider-owned, additive discovery over Pi's existing provider-scoped ModelsStore. */\nexport function createOpenAICodexCatalog(baseline: readonly CodexModel[], options: OpenAICodexCatalogOptions = {}) {\n\tlet models = [...baseline];\n\tlet pending: Promise<void> | undefined;\n\tconst metadataFetch: typeof fetch = options.metadataFetch ?? ((url, init) => globalThis.fetch(url, init));\n\tconst nativeFetch: typeof fetch = options.catalogFetch ?? ((url, init) => globalThis.fetch(url, init));\n\n\treturn {\n\t\tgetModels: (): readonly CodexModel[] => models,\n\t\trefreshModels(context: RefreshModelsContext): Promise<void> {\n\t\t\tpending ??= (async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst stored = await context.store.read();\n\t\t\t\t\tconst generatedAt = Date.parse(modelDataManifest.generatedAt);\n\t\t\t\t\tconst staleLegacyOverlay =\n\t\t\t\t\t\tstored?.source !== CATALOG_SOURCE &&\n\t\t\t\t\t\t(stored?.lastModified === undefined || stored.lastModified <= generatedAt);\n\t\t\t\t\tconst baselineIds = new Set(baseline.map((model) => model.id));\n\t\t\t\t\t// Preserve the bundled fixes that previously superseded old pi.dev\n\t\t\t\t\t// overlays. Unknown IDs remain additive; native metadata owns its\n\t\t\t\t\t// own freshness rather than borrowing the public feed's timestamp.\n\t\t\t\t\tconst cached = parseMetadata(stored?.models ?? []).filter(\n\t\t\t\t\t\t(model) => !staleLegacyOverlay || !baselineIds.has(model.id),\n\t\t\t\t\t);\n\t\t\t\t\tmodels = [...new Map([...baseline, ...cached].map((model) => [model.id, model])).values()];\n\t\t\t\t\tif (!context.allowNetwork || context.signal?.aborted) return;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!context.force &&\n\t\t\t\t\t\tstored?.source === CATALOG_SOURCE &&\n\t\t\t\t\t\tstored.checkedAt &&\n\t\t\t\t\t\tDate.now() - stored.checkedAt < REFRESH_INTERVAL_MS\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tconst signal = AbortSignal.any([\n\t\t\t\t\t\tAbortSignal.timeout(20_000),\n\t\t\t\t\t\t...(context.signal ? [context.signal] : []),\n\t\t\t\t\t]);\n\t\t\t\t\t// This is a catalog-query version, not an executable download or a\n\t\t\t\t\t// claim that Pi implements every feature of that Codex CLI release.\n\t\t\t\t\tconst versionResponse = await metadataFetch(\"https://registry.npmjs.org/@openai/codex/latest\", {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t});\n\t\t\t\t\tif (!versionResponse.ok)\n\t\t\t\t\t\tthrow new Error(`Codex catalog version lookup failed (${versionResponse.status}).`);\n\t\t\t\t\tconst version: unknown = await versionResponse.json();\n\t\t\t\t\tif (!validateVersion.Check(version)) throw new Error(\"Codex catalog version metadata is invalid.\");\n\t\t\t\t\tconst headers = new Headers({ accept: \"application/json\", originator: \"pi\" });\n\t\t\t\t\tif (options.catalogAuthMode !== \"transport\") {\n\t\t\t\t\t\tconst credential = context.credential;\n\t\t\t\t\t\tif (credential?.type !== \"oauth\")\n\t\t\t\t\t\t\tthrow new Error(\"Codex catalog discovery requires OAuth or an authenticated host transport.\");\n\t\t\t\t\t\tlet accountId = credential.accountId;\n\t\t\t\t\t\tif (typeof accountId !== \"string\" || !accountId) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst payload: unknown = JSON.parse(atob(credential.access.split(\".\")[1] ?? \"\"));\n\t\t\t\t\t\t\t\tif (!validateTokenClaims.Check(payload)) throw new Error(\"Missing account ID\");\n\t\t\t\t\t\t\t\taccountId = payload[\"https://api.openai.com/auth\"].chatgpt_account_id;\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tthrow new Error(\"Codex catalog credential has no account ID.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof accountId !== \"string\" || !accountId)\n\t\t\t\t\t\t\tthrow new Error(\"Codex catalog credential has no account ID.\");\n\t\t\t\t\t\theaders.set(\"Authorization\", `Bearer ${credential.access}`);\n\t\t\t\t\t\theaders.set(\"chatgpt-account-id\", accountId);\n\t\t\t\t\t}\n\t\t\t\t\tconst response = await nativeFetch(\n\t\t\t\t\t\t`${CATALOG_SOURCE}?client_version=${encodeURIComponent(version.version)}`,\n\t\t\t\t\t\t{ headers, signal },\n\t\t\t\t\t);\n\t\t\t\t\tif (!response.ok) throw new Error(`Codex model discovery failed (${response.status}).`);\n\t\t\t\t\tconst catalog: unknown = await response.json();\n\t\t\t\t\tif (!validateNativeCatalog.Check(catalog))\n\t\t\t\t\t\tthrow new Error(\"Codex model discovery returned an invalid catalog.\");\n\t\t\t\t\tlet metadata: CodexModel[] = [];\n\t\t\t\t\tlet metadataError: Error | undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst enrichment = await metadataFetch(\"https://pi.dev/api/models/providers/openai-codex\", {\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\theaders: { accept: \"application/json\" },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!enrichment.ok) throw new Error(`Codex model metadata request failed (${enrichment.status}).`);\n\t\t\t\t\t\tmetadata = parseMetadata(await enrichment.json());\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmetadataError = error instanceof Error ? error : new Error(\"Codex model metadata is unavailable.\");\n\t\t\t\t\t}\n\t\t\t\t\tsignal.throwIfAborted();\n\t\t\t\t\tconst known = new Map([...models, ...metadata].map((model) => [model.id, model]));\n\t\t\t\t\tconst merged = new Map(models.map((model) => [model.id, model]));\n\t\t\t\t\tconst missing: string[] = [];\n\t\t\t\t\tfor (const model of catalog.models) {\n\t\t\t\t\t\tif (model.visibility !== \"list\" && !merged.has(model.slug)) continue;\n\t\t\t\t\t\tconst details = known.get(model.slug);\n\t\t\t\t\t\tif (!details) {\n\t\t\t\t\t\t\tmissing.push(model.slug);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmerged.set(model.slug, applyNativeMetadata(model, details));\n\t\t\t\t\t}\n\t\t\t\t\tconst refreshed = [...merged.values()];\n\t\t\t\t\tawait context.store.write({ models: refreshed, source: CATALOG_SOURCE, checkedAt: Date.now() });\n\t\t\t\t\tmodels = refreshed;\n\t\t\t\t\tif (missing.length)\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Codex catalog refreshed; these models await output/pricing metadata: ${missing.join(\", \")}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (metadataError) throw metadataError;\n\t\t\t\t} finally {\n\t\t\t\t\tpending = undefined;\n\t\t\t\t}\n\t\t\t})();\n\t\t\treturn pending;\n\t\t},\n\t};\n}\n"]}
1
+ {"version":3,"file":"openai-codex-catalog.js","sourceRoot":"","sources":["../../src/providers/openai-codex-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Static, Type } from \"typebox\";\nimport { Compile } from \"typebox/compile\";\nimport type { RefreshModelsContext } from \"../models.ts\";\nimport type { Model, ModelThinkingLevel } from \"../types.ts\";\nimport modelDataManifest from \"./data/.manifest.json\" with { type: \"json\" };\n\nconst PROVIDER = \"openai-codex\";\nconst BASE_URL = \"https://chatgpt.com/backend-api\";\nconst REFRESH_INTERVAL_MS = 4 * 60 * 60_000;\nconst THINKING_LEVELS: ModelThinkingLevel[] = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\nconst WIRE_EFFORTS = new Set([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"]);\nconst CATALOG_SOURCE = `${BASE_URL}/codex/models`;\nconst validateTokenClaims = Compile(\n\tType.Object({\n\t\t\"https://api.openai.com/auth\": Type.Object({ chatgpt_account_id: Type.String({ minLength: 1 }) }),\n\t}),\n);\nconst catalogVersionSchema = Type.Object({ version: Type.String({ pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\" }) });\nconst validateVersion = Compile(catalogVersionSchema);\nconst nativeCatalogSchema = Type.Object({\n\tmodels: Type.Array(\n\t\tType.Object({\n\t\t\tslug: Type.String({ minLength: 1, maxLength: 256 }),\n\t\t\tdisplay_name: Type.String({ minLength: 1, maxLength: 256 }),\n\t\t\tvisibility: Type.String(),\n\t\t\tcontext_window: Type.Optional(Type.Union([Type.Integer({ minimum: 1 }), Type.Null()])),\n\t\t\tmax_context_window: Type.Optional(Type.Union([Type.Integer({ minimum: 1 }), Type.Null()])),\n\t\t\tsupported_reasoning_levels: Type.Array(Type.Object({ effort: Type.String() })),\n\t\t\tinput_modalities: Type.Optional(Type.Array(Type.String())),\n\t\t}),\n\t),\n});\nconst validateNativeCatalog = Compile(nativeCatalogSchema);\nconst costRates = {\n\tinput: Type.Number({ minimum: 0 }),\n\toutput: Type.Number({ minimum: 0 }),\n\tcacheRead: Type.Number({ minimum: 0 }),\n\tcacheWrite: Type.Number({ minimum: 0 }),\n};\nconst metadataSchema = Type.Object({\n\tid: Type.String({ minLength: 1, maxLength: 256 }),\n\tname: Type.String({ minLength: 1 }),\n\treasoning: Type.Boolean(),\n\tinput: Type.Array(Type.Union([Type.Literal(\"text\"), Type.Literal(\"image\")])),\n\tcontextWindow: Type.Integer({ minimum: 1 }),\n\tmaxTokens: Type.Integer({ minimum: 1 }),\n\tmaxContextWindow: Type.Optional(Type.Integer({ minimum: 1 })),\n\tcost: Type.Object({\n\t\t...costRates,\n\t\ttiers: Type.Optional(Type.Array(Type.Object({ inputTokensAbove: Type.Number({ minimum: 0 }), ...costRates }))),\n\t}),\n\tthinkingLevelMap: Type.Optional(Type.Record(Type.String(), Type.Union([Type.String(), Type.Null()]))),\n\tcompat: Type.Optional(\n\t\tType.Object({\n\t\t\tsupportsDeveloperRole: Type.Optional(Type.Boolean()),\n\t\t\tsupportsLongCacheRetention: Type.Optional(Type.Boolean()),\n\t\t\tsupportsStrictMode: Type.Optional(Type.Boolean()),\n\t\t\tsupportsOpenAIGrammarTools: Type.Optional(Type.Boolean()),\n\t\t\tsupportsToolSearch: Type.Optional(Type.Boolean()),\n\t\t\tsupportsExplicitPromptCacheMode: Type.Optional(Type.Boolean()),\n\t\t}),\n\t),\n});\nconst validateMetadata = Compile(metadataSchema);\ntype NativeModel = Static<typeof nativeCatalogSchema>[\"models\"][number];\ntype CodexModel = Model<\"openai-codex-responses\">;\n\nexport interface OpenAICodexCatalogOptions {\n\t/** Native catalog transport only. Public version/pricing lookups never receive provider credentials. */\n\tcatalogFetch?: typeof fetch;\n\t/** A host relay authenticates catalog requests instead of a local OAuth token. */\n\tcatalogAuthMode?: \"oauth\" | \"transport\";\n\t/** Public metadata transport; useful for hosts with an explicit outbound HTTP adapter. */\n\tmetadataFetch?: typeof fetch;\n}\n\nfunction parseMetadata(value: unknown): CodexModel[] {\n\tconst rows: unknown[] = Array.isArray(value)\n\t\t? value\n\t\t: typeof value === \"object\" && value !== null\n\t\t\t? Object.values(value)\n\t\t\t: [];\n\treturn rows.flatMap((row) => {\n\t\tif (!validateMetadata.Check(row)) return [];\n\t\t// Catalogs describe model data, never where OAuth credentials are sent.\n\t\tconst { id, name, reasoning, input, contextWindow, maxTokens, maxContextWindow, cost, compat } = row;\n\t\tlet thinkingLevelMap: CodexModel[\"thinkingLevelMap\"];\n\t\tif (row.thinkingLevelMap) {\n\t\t\tthinkingLevelMap = {};\n\t\t\tfor (const level of THINKING_LEVELS) {\n\t\t\t\tconst mapped = row.thinkingLevelMap[level];\n\t\t\t\tif (mapped !== undefined)\n\t\t\t\t\tthinkingLevelMap[level] = mapped === null || WIRE_EFFORTS.has(mapped) ? mapped : null;\n\t\t\t}\n\t\t}\n\t\treturn [\n\t\t\t{\n\t\t\t\tid,\n\t\t\t\tname,\n\t\t\t\treasoning,\n\t\t\t\tinput,\n\t\t\t\tcontextWindow,\n\t\t\t\tmaxTokens,\n\t\t\t\tmaxContextWindow,\n\t\t\t\tcost,\n\t\t\t\tthinkingLevelMap,\n\t\t\t\tcompat,\n\t\t\t\tprovider: PROVIDER,\n\t\t\t\tapi: \"openai-codex-responses\" as const,\n\t\t\t\tbaseUrl: BASE_URL,\n\t\t\t},\n\t\t];\n\t});\n}\n\nfunction applyNativeMetadata(native: NativeModel, known: CodexModel): CodexModel {\n\tconst thinkingLevelMap = { ...known.thinkingLevelMap };\n\tfor (const { effort } of native.supported_reasoning_levels) {\n\t\tif (WIRE_EFFORTS.has(effort)) {\n\t\t\tthinkingLevelMap[(effort === \"none\" ? \"off\" : effort) as ModelThinkingLevel] = effort;\n\t\t}\n\t}\n\tconst modalities = native.input_modalities?.filter(\n\t\t(value): value is \"text\" | \"image\" => value === \"text\" || value === \"image\",\n\t);\n\tconst contextWindow = native.context_window ?? known.contextWindow;\n\tconst maxContextWindow = native.max_context_window ?? known.maxContextWindow;\n\tif (maxContextWindow !== undefined && maxContextWindow < contextWindow) {\n\t\tthrow new Error(`Codex catalog has inconsistent context limits for ${native.slug}.`);\n\t}\n\treturn {\n\t\t...known,\n\t\tid: native.slug,\n\t\tname: native.display_name,\n\t\tcontextWindow,\n\t\tmaxContextWindow,\n\t\treasoning: known.reasoning || native.supported_reasoning_levels.length > 0,\n\t\tthinkingLevelMap,\n\t\tinput: modalities?.length ? modalities : known.input,\n\t};\n}\n\n/** Provider-owned, additive discovery over Pi's existing provider-scoped ModelsStore. */\nexport function createOpenAICodexCatalog(baseline: readonly CodexModel[], options: OpenAICodexCatalogOptions = {}) {\n\tlet models = [...baseline];\n\tlet pending: Promise<void> | undefined;\n\tconst metadataFetch: typeof fetch = options.metadataFetch ?? ((url, init) => globalThis.fetch(url, init));\n\tconst nativeFetch: typeof fetch = options.catalogFetch ?? ((url, init) => globalThis.fetch(url, init));\n\n\treturn {\n\t\tgetModels: (): readonly CodexModel[] => models,\n\t\tgetAllModels: (): readonly CodexModel[] => models,\n\t\trefreshModels(context: RefreshModelsContext): Promise<void> {\n\t\t\tif (pending) return pending;\n\t\t\tconst current = (async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst stored = context.stored;\n\t\t\t\t\tconst generatedAt = Date.parse(modelDataManifest.generatedAt);\n\t\t\t\t\tconst staleLegacyOverlay =\n\t\t\t\t\t\tstored?.source !== CATALOG_SOURCE &&\n\t\t\t\t\t\t(stored?.lastModified === undefined || stored.lastModified <= generatedAt);\n\t\t\t\t\tconst baselineIds = new Set(baseline.map((model) => model.id));\n\t\t\t\t\t// Preserve the bundled fixes that previously superseded old pi.dev\n\t\t\t\t\t// overlays. Unknown IDs remain additive; native metadata owns its\n\t\t\t\t\t// own freshness rather than borrowing the public feed's timestamp.\n\t\t\t\t\tconst cached = parseMetadata(stored?.models ?? []).filter(\n\t\t\t\t\t\t(model) => !staleLegacyOverlay || !baselineIds.has(model.id),\n\t\t\t\t\t);\n\t\t\t\t\tmodels = [...new Map([...baseline, ...cached].map((model) => [model.id, model])).values()];\n\t\t\t\t\tif (!context.allowNetwork || context.signal?.aborted) return;\n\t\t\t\t\tif (\n\t\t\t\t\t\t!context.force &&\n\t\t\t\t\t\tstored?.source === CATALOG_SOURCE &&\n\t\t\t\t\t\tstored.checkedAt &&\n\t\t\t\t\t\tDate.now() - stored.checkedAt < REFRESH_INTERVAL_MS\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tconst signal = AbortSignal.any([AbortSignal.timeout(20_000), context.signal]);\n\t\t\t\t\t// This is a catalog-query version, not an executable download or a\n\t\t\t\t\t// claim that Pi implements every feature of that Codex CLI release.\n\t\t\t\t\tconst versionResponse = await metadataFetch(\"https://registry.npmjs.org/@openai/codex/latest\", {\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t});\n\t\t\t\t\tif (!versionResponse.ok)\n\t\t\t\t\t\tthrow new Error(`Codex catalog version lookup failed (${versionResponse.status}).`);\n\t\t\t\t\tconst version: unknown = await versionResponse.json();\n\t\t\t\t\tif (!validateVersion.Check(version)) throw new Error(\"Codex catalog version metadata is invalid.\");\n\t\t\t\t\tconst headers = new Headers({ accept: \"application/json\", originator: \"pi\" });\n\t\t\t\t\tif (options.catalogAuthMode !== \"transport\") {\n\t\t\t\t\t\tconst credential = context.credential;\n\t\t\t\t\t\tif (credential?.type !== \"oauth\")\n\t\t\t\t\t\t\tthrow new Error(\"Codex catalog discovery requires OAuth or an authenticated host transport.\");\n\t\t\t\t\t\tlet accountId = credential.accountId;\n\t\t\t\t\t\tif (typeof accountId !== \"string\" || !accountId) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tconst payload: unknown = JSON.parse(atob(credential.access.split(\".\")[1] ?? \"\"));\n\t\t\t\t\t\t\t\tif (!validateTokenClaims.Check(payload)) throw new Error(\"Missing account ID\");\n\t\t\t\t\t\t\t\taccountId = payload[\"https://api.openai.com/auth\"].chatgpt_account_id;\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\tthrow new Error(\"Codex catalog credential has no account ID.\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (typeof accountId !== \"string\" || !accountId)\n\t\t\t\t\t\t\tthrow new Error(\"Codex catalog credential has no account ID.\");\n\t\t\t\t\t\theaders.set(\"Authorization\", `Bearer ${credential.access}`);\n\t\t\t\t\t\theaders.set(\"chatgpt-account-id\", accountId);\n\t\t\t\t\t}\n\t\t\t\t\tconst response = await nativeFetch(\n\t\t\t\t\t\t`${CATALOG_SOURCE}?client_version=${encodeURIComponent(version.version)}`,\n\t\t\t\t\t\t{ headers, signal },\n\t\t\t\t\t);\n\t\t\t\t\tif (!response.ok) throw new Error(`Codex model discovery failed (${response.status}).`);\n\t\t\t\t\tconst catalog: unknown = await response.json();\n\t\t\t\t\tif (!validateNativeCatalog.Check(catalog))\n\t\t\t\t\t\tthrow new Error(\"Codex model discovery returned an invalid catalog.\");\n\t\t\t\t\tlet metadata: CodexModel[] = [];\n\t\t\t\t\tlet metadataError: Error | undefined;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst enrichment = await metadataFetch(\"https://pi.dev/api/models/providers/openai-codex\", {\n\t\t\t\t\t\t\tsignal,\n\t\t\t\t\t\t\theaders: { accept: \"application/json\" },\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!enrichment.ok) throw new Error(`Codex model metadata request failed (${enrichment.status}).`);\n\t\t\t\t\t\tmetadata = parseMetadata(await enrichment.json());\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tmetadataError = error instanceof Error ? error : new Error(\"Codex model metadata is unavailable.\");\n\t\t\t\t\t}\n\t\t\t\t\tsignal.throwIfAborted();\n\t\t\t\t\tconst known = new Map([...models, ...metadata].map((model) => [model.id, model]));\n\t\t\t\t\tconst merged = new Map(models.map((model) => [model.id, model]));\n\t\t\t\t\tconst missing: string[] = [];\n\t\t\t\t\tfor (const model of catalog.models) {\n\t\t\t\t\t\tif (model.visibility !== \"list\" && !merged.has(model.slug)) continue;\n\t\t\t\t\t\tconst details = known.get(model.slug);\n\t\t\t\t\t\tif (!details) {\n\t\t\t\t\t\t\tmissing.push(model.slug);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmerged.set(model.slug, applyNativeMetadata(model, details));\n\t\t\t\t\t}\n\t\t\t\t\tconst refreshed = [...merged.values()];\n\t\t\t\t\tawait context.publish({\n\t\t\t\t\t\tpersist: { models: refreshed, source: CATALOG_SOURCE, checkedAt: Date.now() },\n\t\t\t\t\t\tupdate: () => {\n\t\t\t\t\t\t\tmodels = refreshed;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tif (missing.length)\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Codex catalog refreshed; these models await output/pricing metadata: ${missing.join(\", \")}.`,\n\t\t\t\t\t\t);\n\t\t\t\t\tif (metadataError) throw metadataError;\n\t\t\t\t} finally {\n\t\t\t\t\t// Settled only after assignment below, even when the body finishes synchronously.\n\t\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t\tif (pending === current) pending = undefined;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})();\n\t\t\tpending = current;\n\t\t\treturn current;\n\t\t},\n\t};\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"openai-codex.d.ts","sourceRoot":"","sources":["../../src/providers/openai-codex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAK5E,OAAO,EAA4B,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAErG,YAAY,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EACN,qCAAqC,EACrC,4BAA4B,EAC5B,KAAK,gCAAgC,GACrC,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,yBAA8B,GAAG,mBAAmB,CAgBhG","sourcesContent":["import { compactOpenAICodexResponsesLazy, openAICodexResponsesApi } from \"../api/openai-codex-responses.lazy.ts\";\nimport type { OpenAICodexProvider } from \"../api/openai-codex-responses.ts\";\nimport { lazyOAuth } from \"../auth/helpers.ts\";\nimport { loadOpenAICodexOAuth } from \"../auth/oauth/load.ts\";\nimport { createProvider } from \"../models.ts\";\nimport { OPENAI_CODEX_MODELS } from \"./openai-codex.models.ts\";\nimport { createOpenAICodexCatalog, type OpenAICodexCatalogOptions } from \"./openai-codex-catalog.ts\";\n\nexport type { OpenAICodexProvider } from \"../api/openai-codex-responses.ts\";\nexport {\n\tisOpenAICodexReauthenticationRequired,\n\tOpenAICodexOAuthRefreshError,\n\ttype OpenAICodexOAuthRefreshErrorCode,\n} from \"../auth/oauth/openai-codex-errors.ts\";\nexport type { OpenAICodexCatalogOptions } from \"./openai-codex-catalog.ts\";\n\nexport function openaiCodexProvider(options: OpenAICodexCatalogOptions = {}): OpenAICodexProvider {\n\tconst models = Object.values(OPENAI_CODEX_MODELS);\n\treturn {\n\t\t...createProvider({\n\t\t\tid: \"openai-codex\",\n\t\t\tname: \"OpenAI Codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\tauth: {\n\t\t\t\toauth: lazyOAuth({ name: \"OpenAI (ChatGPT Plus/Pro)\", load: loadOpenAICodexOAuth }),\n\t\t\t},\n\t\t\tmodels,\n\t\t\tapi: openAICodexResponsesApi(),\n\t\t}),\n\t\t...createOpenAICodexCatalog(models, options),\n\t\tcompactOpenAICodexResponses: compactOpenAICodexResponsesLazy,\n\t};\n}\n"]}
1
+ {"version":3,"file":"openai-codex.d.ts","sourceRoot":"","sources":["../../src/providers/openai-codex.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAK5E,OAAO,EAA4B,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAErG,YAAY,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EACN,qCAAqC,EACrC,4BAA4B,EAC5B,KAAK,gCAAgC,GACrC,MAAM,sCAAsC,CAAC;AAC9C,YAAY,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE3E,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,yBAA8B,GAAG,mBAAmB,CAoBhG"}
@@ -13,7 +13,11 @@ export function openaiCodexProvider(options = {}) {
13
13
  name: "OpenAI Codex",
14
14
  baseUrl: "https://chatgpt.com/backend-api",
15
15
  auth: {
16
- oauth: lazyOAuth({ name: "OpenAI (ChatGPT Plus/Pro)", load: loadOpenAICodexOAuth }),
16
+ oauth: lazyOAuth({
17
+ name: "OpenAI (ChatGPT Plus/Pro)",
18
+ isSubscription: true,
19
+ load: loadOpenAICodexOAuth,
20
+ }),
17
21
  },
18
22
  models,
19
23
  api: openAICodexResponsesApi(),
@@ -1 +1 @@
1
- {"version":3,"file":"openai-codex.js","sourceRoot":"","sources":["../../src/providers/openai-codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEjH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAkC,MAAM,2BAA2B,CAAC;AAGrG,OAAO,EACN,qCAAqC,EACrC,4BAA4B,GAE5B,MAAM,sCAAsC,CAAC;AAG9C,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAA8B,EAAE,EAAuB;IACjG,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAClD,OAAO;QACN,GAAG,cAAc,CAAC;YACjB,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,iCAAiC;YAC1C,IAAI,EAAE;gBACL,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC;aACnF;YACD,MAAM;YACN,GAAG,EAAE,uBAAuB,EAAE;SAC9B,CAAC;QACF,GAAG,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC;QAC5C,2BAA2B,EAAE,+BAA+B;KAC5D,CAAC;AAAA,CACF","sourcesContent":["import { compactOpenAICodexResponsesLazy, openAICodexResponsesApi } from \"../api/openai-codex-responses.lazy.ts\";\nimport type { OpenAICodexProvider } from \"../api/openai-codex-responses.ts\";\nimport { lazyOAuth } from \"../auth/helpers.ts\";\nimport { loadOpenAICodexOAuth } from \"../auth/oauth/load.ts\";\nimport { createProvider } from \"../models.ts\";\nimport { OPENAI_CODEX_MODELS } from \"./openai-codex.models.ts\";\nimport { createOpenAICodexCatalog, type OpenAICodexCatalogOptions } from \"./openai-codex-catalog.ts\";\n\nexport type { OpenAICodexProvider } from \"../api/openai-codex-responses.ts\";\nexport {\n\tisOpenAICodexReauthenticationRequired,\n\tOpenAICodexOAuthRefreshError,\n\ttype OpenAICodexOAuthRefreshErrorCode,\n} from \"../auth/oauth/openai-codex-errors.ts\";\nexport type { OpenAICodexCatalogOptions } from \"./openai-codex-catalog.ts\";\n\nexport function openaiCodexProvider(options: OpenAICodexCatalogOptions = {}): OpenAICodexProvider {\n\tconst models = Object.values(OPENAI_CODEX_MODELS);\n\treturn {\n\t\t...createProvider({\n\t\t\tid: \"openai-codex\",\n\t\t\tname: \"OpenAI Codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\tauth: {\n\t\t\t\toauth: lazyOAuth({ name: \"OpenAI (ChatGPT Plus/Pro)\", load: loadOpenAICodexOAuth }),\n\t\t\t},\n\t\t\tmodels,\n\t\t\tapi: openAICodexResponsesApi(),\n\t\t}),\n\t\t...createOpenAICodexCatalog(models, options),\n\t\tcompactOpenAICodexResponses: compactOpenAICodexResponsesLazy,\n\t};\n}\n"]}
1
+ {"version":3,"file":"openai-codex.js","sourceRoot":"","sources":["../../src/providers/openai-codex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEjH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAkC,MAAM,2BAA2B,CAAC;AAGrG,OAAO,EACN,qCAAqC,EACrC,4BAA4B,GAE5B,MAAM,sCAAsC,CAAC;AAG9C,MAAM,UAAU,mBAAmB,CAAC,OAAO,GAA8B,EAAE;IAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAClD,OAAO;QACN,GAAG,cAAc,CAAC;YACjB,EAAE,EAAE,cAAc;YAClB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,iCAAiC;YAC1C,IAAI,EAAE;gBACL,KAAK,EAAE,SAAS,CAAC;oBAChB,IAAI,EAAE,2BAA2B;oBACjC,cAAc,EAAE,IAAI;oBACpB,IAAI,EAAE,oBAAoB;iBAC1B,CAAC;aACF;YACD,MAAM;YACN,GAAG,EAAE,uBAAuB,EAAE;SAC9B,CAAC;QACF,GAAG,wBAAwB,CAAC,MAAM,EAAE,OAAO,CAAC;QAC5C,2BAA2B,EAAE,+BAA+B;KAC5D,CAAC;AACH,CAAC","sourcesContent":["import { compactOpenAICodexResponsesLazy, openAICodexResponsesApi } from \"../api/openai-codex-responses.lazy.ts\";\nimport type { OpenAICodexProvider } from \"../api/openai-codex-responses.ts\";\nimport { lazyOAuth } from \"../auth/helpers.ts\";\nimport { loadOpenAICodexOAuth } from \"../auth/oauth/load.ts\";\nimport { createProvider } from \"../models.ts\";\nimport { OPENAI_CODEX_MODELS } from \"./openai-codex.models.ts\";\nimport { createOpenAICodexCatalog, type OpenAICodexCatalogOptions } from \"./openai-codex-catalog.ts\";\n\nexport type { OpenAICodexProvider } from \"../api/openai-codex-responses.ts\";\nexport {\n\tisOpenAICodexReauthenticationRequired,\n\tOpenAICodexOAuthRefreshError,\n\ttype OpenAICodexOAuthRefreshErrorCode,\n} from \"../auth/oauth/openai-codex-errors.ts\";\nexport type { OpenAICodexCatalogOptions } from \"./openai-codex-catalog.ts\";\n\nexport function openaiCodexProvider(options: OpenAICodexCatalogOptions = {}): OpenAICodexProvider {\n\tconst models = Object.values(OPENAI_CODEX_MODELS);\n\treturn {\n\t\t...createProvider({\n\t\t\tid: \"openai-codex\",\n\t\t\tname: \"OpenAI Codex\",\n\t\t\tbaseUrl: \"https://chatgpt.com/backend-api\",\n\t\t\tauth: {\n\t\t\t\toauth: lazyOAuth({\n\t\t\t\t\tname: \"OpenAI (ChatGPT Plus/Pro)\",\n\t\t\t\t\tisSubscription: true,\n\t\t\t\t\tload: loadOpenAICodexOAuth,\n\t\t\t\t}),\n\t\t\t},\n\t\t\tmodels,\n\t\t\tapi: openAICodexResponsesApi(),\n\t\t}),\n\t\t...createOpenAICodexCatalog(models, options),\n\t\tcompactOpenAICodexResponses: compactOpenAICodexResponsesLazy,\n\t};\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import values from "./data/openai-codex.json";
2
- import { type ModelCatalog } from "../model-catalog.ts";
3
- export declare const OPENAI_CODEX_MODELS: ModelCatalog<typeof values, "openai-codex">;
2
+ import { type ChatModelCatalog, type ClassifierModelCatalog, type ImageModelCatalog } from "../model-catalog.ts";
3
+ export declare const OPENAI_CODEX_MODELS: ChatModelCatalog<typeof values, "openai-codex">;
4
+ export declare const OPENAI_CODEX_IMAGE_MODELS: ImageModelCatalog<typeof values, "openai-codex">;
5
+ export declare const OPENAI_CODEX_CLASSIFIER_MODELS: ClassifierModelCatalog<typeof values, "openai-codex">;
4
6
  //# sourceMappingURL=openai-codex.models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-codex.models.d.ts","sourceRoot":"","sources":["../../src/providers/openai-codex.models.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,0BAA0B,CAAuB;AACpE,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE7E,eAAO,MAAM,mBAAmB,EAAE,YAAY,CAAC,OAAO,MAAM,EAAE,cAAc,CAChC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/openai-codex.json\" with { type: \"json\" };\nimport { flattenModelCatalog, type ModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENAI_CODEX_MODELS: ModelCatalog<typeof values, \"openai-codex\"> =\n\tflattenModelCatalog(\"openai-codex\", values);\n"]}
1
+ {"version":3,"file":"openai-codex.models.d.ts","sourceRoot":"","sources":["../../src/providers/openai-codex.models.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,0BAA0B,CAAuB;AACpE,OAAO,EAAoF,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEnM,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,CAAC,OAAO,MAAM,EAAE,cAAc,CAChC,CAAC;AAEjD,eAAO,MAAM,yBAAyB,EAAE,iBAAiB,CAAC,OAAO,MAAM,EAAE,cAAc,CACtC,CAAC;AAElD,eAAO,MAAM,8BAA8B,EAAE,sBAAsB,CAAC,OAAO,MAAM,EAAE,cAAc,CAC3C,CAAC"}
@@ -1,6 +1,8 @@
1
1
  // This file is auto-generated by scripts/generate-models.ts
2
2
  // Do not edit manually - run 'npm run generate-models' to update
3
3
  import values from "./data/openai-codex.json" with { type: "json" };
4
- import { flattenModelCatalog } from "../model-catalog.js";
5
- export const OPENAI_CODEX_MODELS = flattenModelCatalog("openai-codex", values);
4
+ import { flattenChatModelCatalog, flattenClassifierModelCatalog, flattenImageModelCatalog } from "../model-catalog.js";
5
+ export const OPENAI_CODEX_MODELS = flattenChatModelCatalog("openai-codex", values);
6
+ export const OPENAI_CODEX_IMAGE_MODELS = flattenImageModelCatalog("openai-codex", values);
7
+ export const OPENAI_CODEX_CLASSIFIER_MODELS = flattenClassifierModelCatalog("openai-codex", values);
6
8
  //# sourceMappingURL=openai-codex.models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai-codex.models.js","sourceRoot":"","sources":["../../src/providers/openai-codex.models.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iEAAiE;AAEjE,OAAO,MAAM,MAAM,0BAA0B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAE7E,MAAM,CAAC,MAAM,mBAAmB,GAC/B,mBAAmB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/openai-codex.json\" with { type: \"json\" };\nimport { flattenModelCatalog, type ModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENAI_CODEX_MODELS: ModelCatalog<typeof values, \"openai-codex\"> =\n\tflattenModelCatalog(\"openai-codex\", values);\n"]}
1
+ {"version":3,"file":"openai-codex.models.js","sourceRoot":"","sources":["../../src/providers/openai-codex.models.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iEAAiE;AAEjE,OAAO,MAAM,MAAM,0BAA0B,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,wBAAwB,EAA8E,MAAM,qBAAqB,CAAC;AAEnM,MAAM,CAAC,MAAM,mBAAmB,GAC/B,uBAAuB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,yBAAyB,GACrC,wBAAwB,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,8BAA8B,GAC1C,6BAA6B,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/openai-codex.json\" with { type: \"json\" };\nimport { flattenChatModelCatalog, flattenClassifierModelCatalog, flattenImageModelCatalog, type ChatModelCatalog, type ClassifierModelCatalog, type ImageModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENAI_CODEX_MODELS: ChatModelCatalog<typeof values, \"openai-codex\"> =\n\tflattenChatModelCatalog(\"openai-codex\", values);\n\nexport const OPENAI_CODEX_IMAGE_MODELS: ImageModelCatalog<typeof values, \"openai-codex\"> =\n\tflattenImageModelCatalog(\"openai-codex\", values);\n\nexport const OPENAI_CODEX_CLASSIFIER_MODELS: ClassifierModelCatalog<typeof values, \"openai-codex\"> =\n\tflattenClassifierModelCatalog(\"openai-codex\", values);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7D,wBAAgB,cAAc,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAS7D","sourcesContent":["import { openAIResponsesApi } from \"../api/openai-responses.lazy.ts\";\nimport { envApiKeyAuth } from \"../auth/helpers.ts\";\nimport { createProvider, type Provider } from \"../models.ts\";\nimport { OPENAI_MODELS } from \"./openai.models.ts\";\n\nexport function openaiProvider(): Provider<\"openai-responses\"> {\n\treturn createProvider({\n\t\tid: \"openai\",\n\t\tname: \"OpenAI\",\n\t\tbaseUrl: \"https://api.openai.com/v1\",\n\t\tauth: { apiKey: envApiKeyAuth(\"OpenAI API key\", [\"OPENAI_API_KEY\"]) },\n\t\tmodels: Object.values(OPENAI_MODELS),\n\t\tapi: openAIResponsesApi(),\n\t});\n}\n"]}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7D,wBAAgB,cAAc,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAiB7D"}
@@ -1,5 +1,6 @@
1
1
  import { openAIResponsesApi } from "../api/openai-responses.lazy.js";
2
- import { envApiKeyAuth } from "../auth/helpers.js";
2
+ import { envApiKeyAuth, lazyOAuth } from "../auth/helpers.js";
3
+ import { loadOpenAIChatGPTOAuth } from "../auth/oauth/load.js";
3
4
  import { createProvider } from "../models.js";
4
5
  import { OPENAI_MODELS } from "./openai.models.js";
5
6
  export function openaiProvider() {
@@ -7,7 +8,15 @@ export function openaiProvider() {
7
8
  id: "openai",
8
9
  name: "OpenAI",
9
10
  baseUrl: "https://api.openai.com/v1",
10
- auth: { apiKey: envApiKeyAuth("OpenAI API key", ["OPENAI_API_KEY"]) },
11
+ auth: {
12
+ apiKey: envApiKeyAuth("OpenAI API key", ["OPENAI_API_KEY"]),
13
+ oauth: lazyOAuth({
14
+ name: "OpenAI (ChatGPT subscription)",
15
+ isSubscription: true,
16
+ loginLabel: "Sign in with ChatGPT",
17
+ load: loadOpenAIChatGPTOAuth,
18
+ }),
19
+ },
11
20
  models: Object.values(OPENAI_MODELS),
12
21
  api: openAIResponsesApi(),
13
22
  });
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,UAAU,cAAc,GAAiC;IAC9D,OAAO,cAAc,CAAC;QACrB,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,2BAA2B;QACpC,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE;QACrE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QACpC,GAAG,EAAE,kBAAkB,EAAE;KACzB,CAAC,CAAC;AAAA,CACH","sourcesContent":["import { openAIResponsesApi } from \"../api/openai-responses.lazy.ts\";\nimport { envApiKeyAuth } from \"../auth/helpers.ts\";\nimport { createProvider, type Provider } from \"../models.ts\";\nimport { OPENAI_MODELS } from \"./openai.models.ts\";\n\nexport function openaiProvider(): Provider<\"openai-responses\"> {\n\treturn createProvider({\n\t\tid: \"openai\",\n\t\tname: \"OpenAI\",\n\t\tbaseUrl: \"https://api.openai.com/v1\",\n\t\tauth: { apiKey: envApiKeyAuth(\"OpenAI API key\", [\"OPENAI_API_KEY\"]) },\n\t\tmodels: Object.values(OPENAI_MODELS),\n\t\tapi: openAIResponsesApi(),\n\t});\n}\n"]}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,UAAU,cAAc;IAC7B,OAAO,cAAc,CAAC;QACrB,EAAE,EAAE,QAAQ;QACZ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,2BAA2B;QACpC,IAAI,EAAE;YACL,MAAM,EAAE,aAAa,CAAC,gBAAgB,EAAE,CAAC,gBAAgB,CAAC,CAAC;YAC3D,KAAK,EAAE,SAAS,CAAC;gBAChB,IAAI,EAAE,+BAA+B;gBACrC,cAAc,EAAE,IAAI;gBACpB,UAAU,EAAE,sBAAsB;gBAClC,IAAI,EAAE,sBAAsB;aAC5B,CAAC;SACF;QACD,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QACpC,GAAG,EAAE,kBAAkB,EAAE;KACzB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { openAIResponsesApi } from \"../api/openai-responses.lazy.ts\";\nimport { envApiKeyAuth, lazyOAuth } from \"../auth/helpers.ts\";\nimport { loadOpenAIChatGPTOAuth } from \"../auth/oauth/load.ts\";\nimport { createProvider, type Provider } from \"../models.ts\";\nimport { OPENAI_MODELS } from \"./openai.models.ts\";\n\nexport function openaiProvider(): Provider<\"openai-responses\"> {\n\treturn createProvider({\n\t\tid: \"openai\",\n\t\tname: \"OpenAI\",\n\t\tbaseUrl: \"https://api.openai.com/v1\",\n\t\tauth: {\n\t\t\tapiKey: envApiKeyAuth(\"OpenAI API key\", [\"OPENAI_API_KEY\"]),\n\t\t\toauth: lazyOAuth({\n\t\t\t\tname: \"OpenAI (ChatGPT subscription)\",\n\t\t\t\tisSubscription: true,\n\t\t\t\tloginLabel: \"Sign in with ChatGPT\",\n\t\t\t\tload: loadOpenAIChatGPTOAuth,\n\t\t\t}),\n\t\t},\n\t\tmodels: Object.values(OPENAI_MODELS),\n\t\tapi: openAIResponsesApi(),\n\t});\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import values from "./data/openai.json";
2
- import { type ModelCatalog } from "../model-catalog.ts";
3
- export declare const OPENAI_MODELS: ModelCatalog<typeof values, "openai">;
2
+ import { type ChatModelCatalog, type ClassifierModelCatalog, type ImageModelCatalog } from "../model-catalog.ts";
3
+ export declare const OPENAI_MODELS: ChatModelCatalog<typeof values, "openai">;
4
+ export declare const OPENAI_IMAGE_MODELS: ImageModelCatalog<typeof values, "openai">;
5
+ export declare const OPENAI_CLASSIFIER_MODELS: ClassifierModelCatalog<typeof values, "openai">;
4
6
  //# sourceMappingURL=openai.models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.models.d.ts","sourceRoot":"","sources":["../../src/providers/openai.models.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,oBAAoB,CAAuB;AAC9D,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE7E,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,OAAO,MAAM,EAAE,QAAQ,CAC1B,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/openai.json\" with { type: \"json\" };\nimport { flattenModelCatalog, type ModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENAI_MODELS: ModelCatalog<typeof values, \"openai\"> =\n\tflattenModelCatalog(\"openai\", values);\n"]}
1
+ {"version":3,"file":"openai.models.d.ts","sourceRoot":"","sources":["../../src/providers/openai.models.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,oBAAoB,CAAuB;AAC9D,OAAO,EAAoF,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEnM,eAAO,MAAM,aAAa,EAAE,gBAAgB,CAAC,OAAO,MAAM,EAAE,QAAQ,CAC1B,CAAC;AAE3C,eAAO,MAAM,mBAAmB,EAAE,iBAAiB,CAAC,OAAO,MAAM,EAAE,QAAQ,CAChC,CAAC;AAE5C,eAAO,MAAM,wBAAwB,EAAE,sBAAsB,CAAC,OAAO,MAAM,EAAE,QAAQ,CACrC,CAAC"}
@@ -1,6 +1,8 @@
1
1
  // This file is auto-generated by scripts/generate-models.ts
2
2
  // Do not edit manually - run 'npm run generate-models' to update
3
3
  import values from "./data/openai.json" with { type: "json" };
4
- import { flattenModelCatalog } from "../model-catalog.js";
5
- export const OPENAI_MODELS = flattenModelCatalog("openai", values);
4
+ import { flattenChatModelCatalog, flattenClassifierModelCatalog, flattenImageModelCatalog } from "../model-catalog.js";
5
+ export const OPENAI_MODELS = flattenChatModelCatalog("openai", values);
6
+ export const OPENAI_IMAGE_MODELS = flattenImageModelCatalog("openai", values);
7
+ export const OPENAI_CLASSIFIER_MODELS = flattenClassifierModelCatalog("openai", values);
6
8
  //# sourceMappingURL=openai.models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"openai.models.js","sourceRoot":"","sources":["../../src/providers/openai.models.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iEAAiE;AAEjE,OAAO,MAAM,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAE7E,MAAM,CAAC,MAAM,aAAa,GACzB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/openai.json\" with { type: \"json\" };\nimport { flattenModelCatalog, type ModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENAI_MODELS: ModelCatalog<typeof values, \"openai\"> =\n\tflattenModelCatalog(\"openai\", values);\n"]}
1
+ {"version":3,"file":"openai.models.js","sourceRoot":"","sources":["../../src/providers/openai.models.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iEAAiE;AAEjE,OAAO,MAAM,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,wBAAwB,EAA8E,MAAM,qBAAqB,CAAC;AAEnM,MAAM,CAAC,MAAM,aAAa,GACzB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE3C,MAAM,CAAC,MAAM,mBAAmB,GAC/B,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE5C,MAAM,CAAC,MAAM,wBAAwB,GACpC,6BAA6B,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/openai.json\" with { type: \"json\" };\nimport { flattenChatModelCatalog, flattenClassifierModelCatalog, flattenImageModelCatalog, type ChatModelCatalog, type ClassifierModelCatalog, type ImageModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENAI_MODELS: ChatModelCatalog<typeof values, \"openai\"> =\n\tflattenChatModelCatalog(\"openai\", values);\n\nexport const OPENAI_IMAGE_MODELS: ImageModelCatalog<typeof values, \"openai\"> =\n\tflattenImageModelCatalog(\"openai\", values);\n\nexport const OPENAI_CLASSIFIER_MODELS: ClassifierModelCatalog<typeof values, \"openai\"> =\n\tflattenClassifierModelCatalog(\"openai\", values);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-go.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7D,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC,CAY/G","sourcesContent":["import { anthropicMessagesApi } from \"../api/anthropic-messages.lazy.ts\";\nimport { openAICompletionsApi } from \"../api/openai-completions.lazy.ts\";\nimport { openAIResponsesApi } from \"../api/openai-responses.lazy.ts\";\nimport { envApiKeyAuth } from \"../auth/helpers.ts\";\nimport { createProvider, type Provider } from \"../models.ts\";\nimport { OPENCODE_GO_MODELS } from \"./opencode-go.models.ts\";\n\nexport function opencodeGoProvider(): Provider<\"anthropic-messages\" | \"openai-completions\" | \"openai-responses\"> {\n\treturn createProvider<\"anthropic-messages\" | \"openai-completions\" | \"openai-responses\">({\n\t\tid: \"opencode-go\",\n\t\tname: \"OpenCode Zen Go\",\n\t\tauth: { apiKey: envApiKeyAuth(\"OpenCode API key\", [\"OPENCODE_API_KEY\"]) },\n\t\tmodels: Object.values(OPENCODE_GO_MODELS),\n\t\tapi: {\n\t\t\t\"anthropic-messages\": anthropicMessagesApi(),\n\t\t\t\"openai-completions\": openAICompletionsApi(),\n\t\t\t\"openai-responses\": openAIResponsesApi(),\n\t\t},\n\t});\n}\n"]}
1
+ {"version":3,"file":"opencode-go.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7D,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,oBAAoB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC,CAY/G"}
@@ -4,16 +4,17 @@ import { openAIResponsesApi } from "../api/openai-responses.lazy.js";
4
4
  import { envApiKeyAuth } from "../auth/helpers.js";
5
5
  import { createProvider } from "../models.js";
6
6
  import { OPENCODE_GO_MODELS } from "./opencode-go.models.js";
7
+ import { withOpenCodeSessionHeader } from "./opencode-headers.js";
7
8
  export function opencodeGoProvider() {
8
9
  return createProvider({
9
10
  id: "opencode-go",
10
- name: "OpenCode Zen Go",
11
+ name: "OpenCode Go",
11
12
  auth: { apiKey: envApiKeyAuth("OpenCode API key", ["OPENCODE_API_KEY"]) },
12
13
  models: Object.values(OPENCODE_GO_MODELS),
13
14
  api: {
14
- "anthropic-messages": anthropicMessagesApi(),
15
- "openai-completions": openAICompletionsApi(),
16
- "openai-responses": openAIResponsesApi(),
15
+ "anthropic-messages": withOpenCodeSessionHeader(anthropicMessagesApi()),
16
+ "openai-completions": withOpenCodeSessionHeader(openAICompletionsApi()),
17
+ "openai-responses": withOpenCodeSessionHeader(openAIResponsesApi()),
17
18
  },
18
19
  });
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-go.js","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,UAAU,kBAAkB,GAA+E;IAChH,OAAO,cAAc,CAAmE;QACvF,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,kBAAkB,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE;QACzE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACzC,GAAG,EAAE;YACJ,oBAAoB,EAAE,oBAAoB,EAAE;YAC5C,oBAAoB,EAAE,oBAAoB,EAAE;YAC5C,kBAAkB,EAAE,kBAAkB,EAAE;SACxC;KACD,CAAC,CAAC;AAAA,CACH","sourcesContent":["import { anthropicMessagesApi } from \"../api/anthropic-messages.lazy.ts\";\nimport { openAICompletionsApi } from \"../api/openai-completions.lazy.ts\";\nimport { openAIResponsesApi } from \"../api/openai-responses.lazy.ts\";\nimport { envApiKeyAuth } from \"../auth/helpers.ts\";\nimport { createProvider, type Provider } from \"../models.ts\";\nimport { OPENCODE_GO_MODELS } from \"./opencode-go.models.ts\";\n\nexport function opencodeGoProvider(): Provider<\"anthropic-messages\" | \"openai-completions\" | \"openai-responses\"> {\n\treturn createProvider<\"anthropic-messages\" | \"openai-completions\" | \"openai-responses\">({\n\t\tid: \"opencode-go\",\n\t\tname: \"OpenCode Zen Go\",\n\t\tauth: { apiKey: envApiKeyAuth(\"OpenCode API key\", [\"OPENCODE_API_KEY\"]) },\n\t\tmodels: Object.values(OPENCODE_GO_MODELS),\n\t\tapi: {\n\t\t\t\"anthropic-messages\": anthropicMessagesApi(),\n\t\t\t\"openai-completions\": openAICompletionsApi(),\n\t\t\t\"openai-responses\": openAIResponsesApi(),\n\t\t},\n\t});\n}\n"]}
1
+ {"version":3,"file":"opencode-go.js","sourceRoot":"","sources":["../../src/providers/opencode-go.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,UAAU,kBAAkB;IACjC,OAAO,cAAc,CAAmE;QACvF,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,CAAC,kBAAkB,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE;QACzE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC;QACzC,GAAG,EAAE;YACJ,oBAAoB,EAAE,yBAAyB,CAAC,oBAAoB,EAAE,CAAC;YACvE,oBAAoB,EAAE,yBAAyB,CAAC,oBAAoB,EAAE,CAAC;YACvE,kBAAkB,EAAE,yBAAyB,CAAC,kBAAkB,EAAE,CAAC;SACnE;KACD,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { anthropicMessagesApi } from \"../api/anthropic-messages.lazy.ts\";\nimport { openAICompletionsApi } from \"../api/openai-completions.lazy.ts\";\nimport { openAIResponsesApi } from \"../api/openai-responses.lazy.ts\";\nimport { envApiKeyAuth } from \"../auth/helpers.ts\";\nimport { createProvider, type Provider } from \"../models.ts\";\nimport { OPENCODE_GO_MODELS } from \"./opencode-go.models.ts\";\nimport { withOpenCodeSessionHeader } from \"./opencode-headers.ts\";\n\nexport function opencodeGoProvider(): Provider<\"anthropic-messages\" | \"openai-completions\" | \"openai-responses\"> {\n\treturn createProvider<\"anthropic-messages\" | \"openai-completions\" | \"openai-responses\">({\n\t\tid: \"opencode-go\",\n\t\tname: \"OpenCode Go\",\n\t\tauth: { apiKey: envApiKeyAuth(\"OpenCode API key\", [\"OPENCODE_API_KEY\"]) },\n\t\tmodels: Object.values(OPENCODE_GO_MODELS),\n\t\tapi: {\n\t\t\t\"anthropic-messages\": withOpenCodeSessionHeader(anthropicMessagesApi()),\n\t\t\t\"openai-completions\": withOpenCodeSessionHeader(openAICompletionsApi()),\n\t\t\t\"openai-responses\": withOpenCodeSessionHeader(openAIResponsesApi()),\n\t\t},\n\t});\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import values from "./data/opencode-go.json";
2
- import { type ModelCatalog } from "../model-catalog.ts";
3
- export declare const OPENCODE_GO_MODELS: ModelCatalog<typeof values, "opencode-go">;
2
+ import { type ChatModelCatalog, type ClassifierModelCatalog, type ImageModelCatalog } from "../model-catalog.ts";
3
+ export declare const OPENCODE_GO_MODELS: ChatModelCatalog<typeof values, "opencode-go">;
4
+ export declare const OPENCODE_GO_IMAGE_MODELS: ImageModelCatalog<typeof values, "opencode-go">;
5
+ export declare const OPENCODE_GO_CLASSIFIER_MODELS: ClassifierModelCatalog<typeof values, "opencode-go">;
4
6
  //# sourceMappingURL=opencode-go.models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-go.models.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-go.models.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,yBAAyB,CAAuB;AACnE,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE7E,eAAO,MAAM,kBAAkB,EAAE,YAAY,CAAC,OAAO,MAAM,EAAE,aAAa,CAC/B,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/opencode-go.json\" with { type: \"json\" };\nimport { flattenModelCatalog, type ModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENCODE_GO_MODELS: ModelCatalog<typeof values, \"opencode-go\"> =\n\tflattenModelCatalog(\"opencode-go\", values);\n"]}
1
+ {"version":3,"file":"opencode-go.models.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-go.models.ts"],"names":[],"mappings":"AAGA,OAAO,MAAM,MAAM,yBAAyB,CAAuB;AACnE,OAAO,EAAoF,KAAK,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEnM,eAAO,MAAM,kBAAkB,EAAE,gBAAgB,CAAC,OAAO,MAAM,EAAE,aAAa,CAC/B,CAAC;AAEhD,eAAO,MAAM,wBAAwB,EAAE,iBAAiB,CAAC,OAAO,MAAM,EAAE,aAAa,CACrC,CAAC;AAEjD,eAAO,MAAM,6BAA6B,EAAE,sBAAsB,CAAC,OAAO,MAAM,EAAE,aAAa,CAC1C,CAAC"}
@@ -1,6 +1,8 @@
1
1
  // This file is auto-generated by scripts/generate-models.ts
2
2
  // Do not edit manually - run 'npm run generate-models' to update
3
3
  import values from "./data/opencode-go.json" with { type: "json" };
4
- import { flattenModelCatalog } from "../model-catalog.js";
5
- export const OPENCODE_GO_MODELS = flattenModelCatalog("opencode-go", values);
4
+ import { flattenChatModelCatalog, flattenClassifierModelCatalog, flattenImageModelCatalog } from "../model-catalog.js";
5
+ export const OPENCODE_GO_MODELS = flattenChatModelCatalog("opencode-go", values);
6
+ export const OPENCODE_GO_IMAGE_MODELS = flattenImageModelCatalog("opencode-go", values);
7
+ export const OPENCODE_GO_CLASSIFIER_MODELS = flattenClassifierModelCatalog("opencode-go", values);
6
8
  //# sourceMappingURL=opencode-go.models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode-go.models.js","sourceRoot":"","sources":["../../src/providers/opencode-go.models.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iEAAiE;AAEjE,OAAO,MAAM,MAAM,yBAAyB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAqB,MAAM,qBAAqB,CAAC;AAE7E,MAAM,CAAC,MAAM,kBAAkB,GAC9B,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/opencode-go.json\" with { type: \"json\" };\nimport { flattenModelCatalog, type ModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENCODE_GO_MODELS: ModelCatalog<typeof values, \"opencode-go\"> =\n\tflattenModelCatalog(\"opencode-go\", values);\n"]}
1
+ {"version":3,"file":"opencode-go.models.js","sourceRoot":"","sources":["../../src/providers/opencode-go.models.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iEAAiE;AAEjE,OAAO,MAAM,MAAM,yBAAyB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,EAAE,wBAAwB,EAA8E,MAAM,qBAAqB,CAAC;AAEnM,MAAM,CAAC,MAAM,kBAAkB,GAC9B,uBAAuB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,wBAAwB,GACpC,wBAAwB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAEjD,MAAM,CAAC,MAAM,6BAA6B,GACzC,6BAA6B,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC","sourcesContent":["// This file is auto-generated by scripts/generate-models.ts\n// Do not edit manually - run 'npm run generate-models' to update\n\nimport values from \"./data/opencode-go.json\" with { type: \"json\" };\nimport { flattenChatModelCatalog, flattenClassifierModelCatalog, flattenImageModelCatalog, type ChatModelCatalog, type ClassifierModelCatalog, type ImageModelCatalog } from \"../model-catalog.ts\";\n\nexport const OPENCODE_GO_MODELS: ChatModelCatalog<typeof values, \"opencode-go\"> =\n\tflattenChatModelCatalog(\"opencode-go\", values);\n\nexport const OPENCODE_GO_IMAGE_MODELS: ImageModelCatalog<typeof values, \"opencode-go\"> =\n\tflattenImageModelCatalog(\"opencode-go\", values);\n\nexport const OPENCODE_GO_CLASSIFIER_MODELS: ClassifierModelCatalog<typeof values, \"opencode-go\"> =\n\tflattenClassifierModelCatalog(\"opencode-go\", values);\n"]}
@@ -0,0 +1,4 @@
1
+ import type { ProviderStreams } from "../types.ts";
2
+ /** Adds OpenCode's required per-conversation routing header before API dispatch. */
3
+ export declare function withOpenCodeSessionHeader(streams: ProviderStreams): ProviderStreams;
4
+ //# sourceMappingURL=opencode-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-headers.d.ts","sourceRoot":"","sources":["../../src/providers/opencode-headers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,eAAe,EAAiB,MAAM,aAAa,CAAC;AAiBnF,oFAAoF;AACpF,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAMnF"}
@@ -0,0 +1,22 @@
1
+ const OPENCODE_SESSION_HEADER = "x-opencode-session";
2
+ function hasHeader(headers, name) {
3
+ const expected = name.toLowerCase();
4
+ return Object.keys(headers ?? {}).some((key) => key.toLowerCase() === expected);
5
+ }
6
+ function withSessionHeader(options) {
7
+ if (!options?.sessionId || hasHeader(options.headers, OPENCODE_SESSION_HEADER))
8
+ return options;
9
+ return {
10
+ ...options,
11
+ headers: { ...options.headers, [OPENCODE_SESSION_HEADER]: options.sessionId },
12
+ };
13
+ }
14
+ /** Adds OpenCode's required per-conversation routing header before API dispatch. */
15
+ export function withOpenCodeSessionHeader(streams) {
16
+ return {
17
+ ...streams,
18
+ stream: (model, context, options) => streams.stream(model, context, withSessionHeader(options)),
19
+ streamSimple: (model, context, options) => streams.streamSimple(model, context, withSessionHeader(options)),
20
+ };
21
+ }
22
+ //# sourceMappingURL=opencode-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opencode-headers.js","sourceRoot":"","sources":["../../src/providers/opencode-headers.ts"],"names":[],"mappings":"AAEA,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAErD,SAAS,SAAS,CAAC,OAAoC,EAAE,IAAY;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB,CAAiC,OAA6B;IACvF,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,uBAAuB,CAAC;QAAE,OAAO,OAAO,CAAC;IAC/F,OAAO;QACN,GAAG,OAAO;QACV,OAAO,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,uBAAuB,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE;KAC7E,CAAC;AACH,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,yBAAyB,CAAC,OAAwB;IACjE,OAAO;QACN,GAAG,OAAO;QACV,MAAM,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC/F,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC;KAC3G,CAAC;AACH,CAAC","sourcesContent":["import type { ProviderHeaders, ProviderStreams, StreamOptions } from \"../types.ts\";\n\nconst OPENCODE_SESSION_HEADER = \"x-opencode-session\";\n\nfunction hasHeader(headers: ProviderHeaders | undefined, name: string): boolean {\n\tconst expected = name.toLowerCase();\n\treturn Object.keys(headers ?? {}).some((key) => key.toLowerCase() === expected);\n}\n\nfunction withSessionHeader<TOptions extends StreamOptions>(options: TOptions | undefined): TOptions | undefined {\n\tif (!options?.sessionId || hasHeader(options.headers, OPENCODE_SESSION_HEADER)) return options;\n\treturn {\n\t\t...options,\n\t\theaders: { ...options.headers, [OPENCODE_SESSION_HEADER]: options.sessionId },\n\t};\n}\n\n/** Adds OpenCode's required per-conversation routing header before API dispatch. */\nexport function withOpenCodeSessionHeader(streams: ProviderStreams): ProviderStreams {\n\treturn {\n\t\t...streams,\n\t\tstream: (model, context, options) => streams.stream(model, context, withSessionHeader(options)),\n\t\tstreamSimple: (model, context, options) => streams.streamSimple(model, context, withSessionHeader(options)),\n\t};\n}\n"]}
@@ -1,3 +1,5 @@
1
1
  import { type Provider } from "../models.ts";
2
- export declare function opencodeProvider(): Provider<"anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses">;
2
+ type OpenCodeApi = "anthropic-messages" | "google-generative-ai" | "openai-completions" | "openai-responses";
3
+ export declare function opencodeProvider(): Provider<OpenCodeApi>;
4
+ export {};
3
5
  //# sourceMappingURL=opencode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG7D,wBAAgB,gBAAgB,IAAI,QAAQ,CAC3C,oBAAoB,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,kBAAkB,CACzF,CAaA","sourcesContent":["import { anthropicMessagesApi } from \"../api/anthropic-messages.lazy.ts\";\nimport { googleGenerativeAIApi } from \"../api/google-generative-ai.lazy.ts\";\nimport { openAICompletionsApi } from \"../api/openai-completions.lazy.ts\";\nimport { openAIResponsesApi } from \"../api/openai-responses.lazy.ts\";\nimport { envApiKeyAuth } from \"../auth/helpers.ts\";\nimport { createProvider, type Provider } from \"../models.ts\";\nimport { OPENCODE_MODELS } from \"./opencode.models.ts\";\n\nexport function opencodeProvider(): Provider<\n\t\"anthropic-messages\" | \"google-generative-ai\" | \"openai-completions\" | \"openai-responses\"\n> {\n\treturn createProvider({\n\t\tid: \"opencode\",\n\t\tname: \"OpenCode Zen\",\n\t\tauth: { apiKey: envApiKeyAuth(\"OpenCode API key\", [\"OPENCODE_API_KEY\"]) },\n\t\tmodels: Object.values(OPENCODE_MODELS),\n\t\tapi: {\n\t\t\t\"anthropic-messages\": anthropicMessagesApi(),\n\t\t\t\"google-generative-ai\": googleGenerativeAIApi(),\n\t\t\t\"openai-completions\": openAICompletionsApi(),\n\t\t\t\"openai-responses\": openAIResponsesApi(),\n\t\t},\n\t});\n}\n"]}
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../src/providers/opencode.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAI7D,KAAK,WAAW,GAAG,oBAAoB,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAE7G,wBAAgB,gBAAgB,IAAI,QAAQ,CAAC,WAAW,CAAC,CAexD"}