@aryee337/aery-ai 0.1.148 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/CHANGELOG.md +2914 -0
  2. package/README.md +614 -813
  3. package/dist/types/api-registry.d.ts +30 -0
  4. package/dist/types/auth-broker/client.d.ts +66 -0
  5. package/dist/types/auth-broker/index.d.ts +5 -0
  6. package/dist/types/auth-broker/refresher.d.ts +25 -0
  7. package/dist/types/auth-broker/remote-store.d.ts +96 -0
  8. package/dist/types/auth-broker/server.d.ts +32 -0
  9. package/dist/types/auth-broker/types.d.ts +105 -0
  10. package/dist/types/auth-broker/wire-schemas.d.ts +412 -0
  11. package/dist/types/auth-gateway/http.d.ts +39 -0
  12. package/dist/types/auth-gateway/index.d.ts +3 -0
  13. package/dist/types/auth-gateway/server.d.ts +36 -0
  14. package/dist/types/auth-gateway/types.d.ts +117 -0
  15. package/dist/types/auth-storage.d.ts +739 -0
  16. package/dist/types/index.d.ts +49 -0
  17. package/dist/types/model-cache.d.ts +17 -0
  18. package/dist/types/model-manager.d.ts +64 -0
  19. package/dist/types/model-thinking.d.ts +100 -0
  20. package/dist/types/models.d.ts +12 -0
  21. package/dist/types/provider-details.d.ts +24 -0
  22. package/dist/types/provider-models/bundled-references.d.ts +4 -0
  23. package/dist/types/provider-models/descriptors.d.ts +50 -0
  24. package/dist/types/provider-models/google.d.ts +24 -0
  25. package/dist/types/provider-models/index.d.ts +5 -0
  26. package/dist/types/provider-models/ollama.d.ts +7 -0
  27. package/dist/types/provider-models/openai-compat.d.ts +296 -0
  28. package/dist/types/provider-models/special.d.ts +16 -0
  29. package/dist/types/providers/aery-native-client.d.ts +13 -0
  30. package/dist/types/providers/aery-native-server.d.ts +68 -0
  31. package/dist/types/providers/amazon-bedrock.d.ts +38 -0
  32. package/dist/types/providers/anthropic-client.d.ts +99 -0
  33. package/dist/types/providers/anthropic-messages-server-schema.d.ts +465 -0
  34. package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
  35. package/dist/types/providers/anthropic-wire.d.ts +262 -0
  36. package/dist/types/providers/anthropic.d.ts +206 -0
  37. package/dist/types/providers/aws-credentials.d.ts +43 -0
  38. package/dist/types/providers/aws-eventstream.d.ts +38 -0
  39. package/dist/types/providers/aws-sigv4.d.ts +55 -0
  40. package/dist/types/providers/azure-openai-responses.d.ts +15 -0
  41. package/dist/types/providers/cursor/gen/agent_pb.d.ts +13022 -0
  42. package/dist/types/providers/cursor.d.ts +43 -0
  43. package/dist/types/providers/error-message.d.ts +27 -0
  44. package/dist/types/providers/github-copilot-headers.d.ts +40 -0
  45. package/dist/types/providers/gitlab-duo.d.ts +27 -0
  46. package/dist/types/providers/google-auth.d.ts +24 -0
  47. package/dist/types/providers/google-gemini-cli.d.ts +81 -0
  48. package/dist/types/providers/google-gemini-headers.d.ts +18 -0
  49. package/dist/types/providers/google-shared.d.ts +171 -0
  50. package/dist/types/providers/google-types.d.ts +138 -0
  51. package/dist/types/providers/google-vertex.d.ts +7 -0
  52. package/dist/types/providers/google.d.ts +4 -0
  53. package/dist/types/providers/grammar.d.ts +1 -0
  54. package/dist/types/providers/kimi.d.ts +27 -0
  55. package/dist/types/providers/mock.d.ts +173 -0
  56. package/dist/types/providers/ollama.d.ts +6 -0
  57. package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
  58. package/dist/types/providers/openai-chat-server-schema.d.ts +817 -0
  59. package/dist/types/providers/openai-chat-server.d.ts +16 -0
  60. package/dist/types/providers/openai-codex/constants.d.ts +26 -0
  61. package/dist/types/providers/openai-codex/request-transformer.d.ts +49 -0
  62. package/dist/types/providers/openai-codex/response-handler.d.ts +17 -0
  63. package/dist/types/providers/openai-codex-responses.d.ts +67 -0
  64. package/dist/types/providers/openai-completions-compat.d.ts +25 -0
  65. package/dist/types/providers/openai-completions.d.ts +54 -0
  66. package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
  67. package/dist/types/providers/openai-responses-server.d.ts +17 -0
  68. package/dist/types/providers/openai-responses-shared.d.ts +100 -0
  69. package/dist/types/providers/openai-responses.d.ts +66 -0
  70. package/dist/types/providers/register-builtins.d.ts +31 -0
  71. package/dist/types/providers/synthetic.d.ts +26 -0
  72. package/dist/{providers → types/providers}/transform-messages.d.ts +6 -2
  73. package/dist/types/providers/vision-guard.d.ts +8 -0
  74. package/dist/types/providers/xai-responses.d.ts +23 -0
  75. package/dist/types/rate-limit-utils.d.ts +19 -0
  76. package/dist/types/stream.d.ts +28 -0
  77. package/dist/types/types.d.ts +801 -0
  78. package/dist/types/usage/claude.d.ts +4 -0
  79. package/dist/types/usage/gemini.d.ts +2 -0
  80. package/dist/types/usage/github-copilot.d.ts +7 -0
  81. package/dist/types/usage/google-antigravity.d.ts +2 -0
  82. package/dist/types/usage/kimi.d.ts +2 -0
  83. package/dist/types/usage/minimax-code.d.ts +2 -0
  84. package/dist/types/usage/openai-codex.d.ts +3 -0
  85. package/dist/types/usage/shared.d.ts +1 -0
  86. package/dist/types/usage/zai.d.ts +2 -0
  87. package/dist/types/usage.d.ts +260 -0
  88. package/dist/types/utils/abort.d.ts +19 -0
  89. package/dist/types/utils/abortable-iterator.d.ts +4 -0
  90. package/dist/types/utils/anthropic-auth.d.ts +35 -0
  91. package/dist/types/utils/discovery/antigravity.d.ts +61 -0
  92. package/dist/types/utils/discovery/codex.d.ts +38 -0
  93. package/dist/types/utils/discovery/cursor.d.ts +23 -0
  94. package/dist/types/utils/discovery/gemini.d.ts +25 -0
  95. package/dist/types/utils/discovery/index.d.ts +4 -0
  96. package/dist/types/utils/discovery/openai-compatible.d.ts +72 -0
  97. package/dist/types/utils/event-stream.d.ts +28 -0
  98. package/dist/types/utils/fireworks-model-id.d.ts +10 -0
  99. package/dist/types/utils/foundry.d.ts +1 -0
  100. package/dist/types/utils/http-inspector.d.ts +31 -0
  101. package/dist/types/utils/idle-iterator.d.ts +78 -0
  102. package/dist/types/utils/json-parse.d.ts +37 -0
  103. package/dist/types/utils/oauth/__tests__/xai-oauth.test.d.ts +1 -0
  104. package/dist/types/utils/oauth/alibaba-coding-plan.d.ts +18 -0
  105. package/dist/types/utils/oauth/anthropic.d.ts +22 -0
  106. package/dist/types/utils/oauth/api-key-login.d.ts +35 -0
  107. package/dist/types/utils/oauth/api-key-validation.d.ts +27 -0
  108. package/dist/types/utils/oauth/callback-server.d.ts +57 -0
  109. package/dist/types/utils/oauth/cerebras.d.ts +1 -0
  110. package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
  111. package/dist/types/utils/oauth/cursor.d.ts +15 -0
  112. package/dist/types/utils/oauth/deepseek.d.ts +10 -0
  113. package/dist/types/utils/oauth/firepass.d.ts +1 -0
  114. package/dist/types/utils/oauth/fireworks.d.ts +1 -0
  115. package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
  116. package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
  117. package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
  118. package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
  119. package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
  120. package/dist/types/utils/oauth/huggingface.d.ts +19 -0
  121. package/dist/types/utils/oauth/index.d.ts +38 -0
  122. package/dist/types/utils/oauth/kagi.d.ts +17 -0
  123. package/dist/types/utils/oauth/kilo.d.ts +5 -0
  124. package/dist/types/utils/oauth/kimi.d.ts +21 -0
  125. package/dist/types/utils/oauth/litellm.d.ts +18 -0
  126. package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
  127. package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
  128. package/dist/types/utils/oauth/moonshot.d.ts +1 -0
  129. package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
  130. package/dist/types/utils/oauth/nvidia.d.ts +18 -0
  131. package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
  132. package/dist/types/utils/oauth/ollama.d.ts +18 -0
  133. package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
  134. package/dist/types/utils/oauth/opencode.d.ts +18 -0
  135. package/dist/types/utils/oauth/openrouter.d.ts +1 -0
  136. package/dist/types/utils/oauth/parallel.d.ts +17 -0
  137. package/dist/types/utils/oauth/perplexity.d.ts +9 -0
  138. package/dist/{utils → types/utils}/oauth/pkce.d.ts +0 -5
  139. package/dist/types/utils/oauth/qianfan.d.ts +17 -0
  140. package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
  141. package/dist/types/utils/oauth/synthetic.d.ts +1 -0
  142. package/dist/types/utils/oauth/tavily.d.ts +17 -0
  143. package/dist/types/utils/oauth/together.d.ts +1 -0
  144. package/dist/types/utils/oauth/types.d.ts +44 -0
  145. package/dist/types/utils/oauth/venice.d.ts +18 -0
  146. package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
  147. package/dist/types/utils/oauth/vllm.d.ts +16 -0
  148. package/dist/types/utils/oauth/wafer.d.ts +2 -0
  149. package/dist/types/utils/oauth/xai-oauth.d.ts +60 -0
  150. package/dist/types/utils/oauth/xiaomi.d.ts +19 -0
  151. package/dist/types/utils/oauth/zai.d.ts +18 -0
  152. package/dist/types/utils/oauth/zenmux.d.ts +1 -0
  153. package/dist/types/utils/oauth/zhipu.d.ts +18 -0
  154. package/dist/{utils → types/utils}/overflow.d.ts +9 -11
  155. package/dist/types/utils/parse-bind.d.ts +23 -0
  156. package/dist/types/utils/provider-response.d.ts +3 -0
  157. package/dist/types/utils/request-debug.d.ts +29 -0
  158. package/dist/types/utils/retry-after.d.ts +3 -0
  159. package/dist/types/utils/retry.d.ts +26 -0
  160. package/dist/types/utils/schema/adapt.d.ts +24 -0
  161. package/dist/types/utils/schema/compatibility.d.ts +30 -0
  162. package/dist/types/utils/schema/dereference.d.ts +11 -0
  163. package/dist/types/utils/schema/draft.d.ts +10 -0
  164. package/dist/types/utils/schema/equality.d.ts +4 -0
  165. package/dist/types/utils/schema/fields.d.ts +49 -0
  166. package/dist/types/utils/schema/index.d.ts +13 -0
  167. package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
  168. package/dist/types/utils/schema/meta-validator.d.ts +2 -0
  169. package/dist/types/utils/schema/normalize.d.ts +93 -0
  170. package/dist/types/utils/schema/spill.d.ts +8 -0
  171. package/dist/types/utils/schema/stamps.d.ts +25 -0
  172. package/dist/types/utils/schema/types.d.ts +4 -0
  173. package/dist/types/utils/schema/wire.d.ts +53 -0
  174. package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
  175. package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
  176. package/dist/types/utils/sse-debug.d.ts +10 -0
  177. package/dist/types/utils/stream-markup-healing.d.ts +80 -0
  178. package/dist/types/utils/tool-choice.d.ts +50 -0
  179. package/dist/types/utils/validation.d.ts +17 -0
  180. package/dist/types/utils.d.ts +28 -0
  181. package/package.json +139 -105
  182. package/src/api-registry.ts +96 -0
  183. package/src/auth-broker/client.ts +358 -0
  184. package/src/auth-broker/index.ts +5 -0
  185. package/src/auth-broker/refresher.ts +117 -0
  186. package/src/auth-broker/remote-store.ts +623 -0
  187. package/src/auth-broker/server.ts +644 -0
  188. package/src/auth-broker/types.ts +127 -0
  189. package/src/auth-broker/wire-schemas.ts +200 -0
  190. package/src/auth-gateway/http.ts +194 -0
  191. package/src/auth-gateway/index.ts +3 -0
  192. package/src/auth-gateway/server.ts +818 -0
  193. package/src/auth-gateway/types.ts +143 -0
  194. package/src/auth-storage.ts +4422 -0
  195. package/src/index.ts +54 -0
  196. package/src/model-cache.ts +129 -0
  197. package/src/model-manager.ts +469 -0
  198. package/src/model-thinking.ts +782 -0
  199. package/src/models.json +83530 -0
  200. package/src/models.json.d.ts +9 -0
  201. package/src/models.ts +56 -0
  202. package/src/prompts/turn-aborted-guidance.md +4 -0
  203. package/src/provider-details.ts +90 -0
  204. package/src/provider-models/bundled-references.ts +38 -0
  205. package/src/provider-models/descriptors.ts +355 -0
  206. package/src/provider-models/google.ts +88 -0
  207. package/src/provider-models/index.ts +5 -0
  208. package/src/provider-models/ollama.ts +153 -0
  209. package/src/provider-models/openai-compat.ts +2817 -0
  210. package/src/provider-models/special.ts +67 -0
  211. package/src/providers/aery-native-client.ts +228 -0
  212. package/src/providers/aery-native-server.ts +212 -0
  213. package/src/providers/amazon-bedrock.ts +873 -0
  214. package/src/providers/anthropic-client.ts +318 -0
  215. package/src/providers/anthropic-messages-server-schema.ts +243 -0
  216. package/src/providers/anthropic-messages-server.ts +683 -0
  217. package/src/providers/anthropic-wire.ts +268 -0
  218. package/src/providers/anthropic.ts +3094 -0
  219. package/src/providers/aws-credentials.ts +501 -0
  220. package/src/providers/aws-eventstream.ts +185 -0
  221. package/src/providers/aws-sigv4.ts +218 -0
  222. package/src/providers/azure-openai-responses.ts +361 -0
  223. package/src/providers/cursor/gen/agent_pb.ts +15274 -0
  224. package/src/providers/cursor/proto/agent.proto +3526 -0
  225. package/src/providers/cursor/proto/buf.gen.yaml +6 -0
  226. package/src/providers/cursor/proto/buf.yaml +17 -0
  227. package/src/providers/cursor.ts +2621 -0
  228. package/src/providers/error-message.ts +21 -0
  229. package/src/providers/github-copilot-headers.ts +140 -0
  230. package/src/providers/gitlab-duo.ts +372 -0
  231. package/src/providers/google-auth.ts +252 -0
  232. package/src/providers/google-gemini-cli.ts +809 -0
  233. package/src/providers/google-gemini-headers.ts +41 -0
  234. package/src/providers/google-shared.ts +917 -0
  235. package/src/providers/google-types.ts +167 -0
  236. package/src/providers/google-vertex.ts +91 -0
  237. package/src/providers/google.ts +41 -0
  238. package/src/providers/grammar.ts +70 -0
  239. package/src/providers/kimi.ts +52 -0
  240. package/src/providers/mock.ts +496 -0
  241. package/src/providers/ollama.ts +644 -0
  242. package/src/providers/openai-anthropic-shim.ts +138 -0
  243. package/src/providers/openai-chat-server-schema.ts +252 -0
  244. package/src/providers/openai-chat-server.ts +647 -0
  245. package/src/providers/openai-codex/constants.ts +43 -0
  246. package/src/providers/openai-codex/request-transformer.ts +161 -0
  247. package/src/providers/openai-codex/response-handler.ts +81 -0
  248. package/src/providers/openai-codex-responses.ts +3018 -0
  249. package/src/providers/openai-completions-compat.ts +300 -0
  250. package/src/providers/openai-completions.ts +1979 -0
  251. package/src/providers/openai-responses-server-schema.ts +290 -0
  252. package/src/providers/openai-responses-server.ts +1183 -0
  253. package/src/providers/openai-responses-shared.ts +873 -0
  254. package/src/providers/openai-responses.ts +679 -0
  255. package/src/providers/register-builtins.ts +436 -0
  256. package/src/providers/synthetic.ts +50 -0
  257. package/src/providers/transform-messages.ts +382 -0
  258. package/src/providers/vision-guard.ts +31 -0
  259. package/src/providers/xai-responses.ts +82 -0
  260. package/src/rate-limit-utils.ts +84 -0
  261. package/src/stream.ts +1065 -0
  262. package/src/types.ts +944 -0
  263. package/src/usage/claude.ts +482 -0
  264. package/src/usage/gemini.ts +250 -0
  265. package/src/usage/github-copilot.ts +421 -0
  266. package/src/usage/google-antigravity.ts +201 -0
  267. package/src/usage/kimi.ts +271 -0
  268. package/src/usage/minimax-code.ts +31 -0
  269. package/src/usage/openai-codex.ts +503 -0
  270. package/src/usage/shared.ts +10 -0
  271. package/src/usage/zai.ts +247 -0
  272. package/src/usage.ts +185 -0
  273. package/src/utils/abort.ts +51 -0
  274. package/src/utils/abortable-iterator.ts +69 -0
  275. package/src/utils/anthropic-auth.ts +93 -0
  276. package/src/utils/discovery/antigravity.ts +261 -0
  277. package/src/utils/discovery/codex.ts +371 -0
  278. package/src/utils/discovery/cursor.ts +306 -0
  279. package/src/utils/discovery/gemini.ts +248 -0
  280. package/src/utils/discovery/index.ts +4 -0
  281. package/src/utils/discovery/openai-compatible.ts +224 -0
  282. package/src/utils/event-stream.ts +142 -0
  283. package/src/utils/fireworks-model-id.ts +30 -0
  284. package/src/utils/foundry.ts +8 -0
  285. package/src/utils/http-inspector.ts +176 -0
  286. package/src/utils/idle-iterator.ts +267 -0
  287. package/src/utils/json-parse.ts +182 -0
  288. package/src/utils/oauth/__tests__/xai-oauth.test.ts +107 -0
  289. package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
  290. package/src/utils/oauth/anthropic.ts +273 -0
  291. package/src/utils/oauth/api-key-login.ts +87 -0
  292. package/src/utils/oauth/api-key-validation.ts +92 -0
  293. package/src/utils/oauth/callback-server.ts +276 -0
  294. package/src/utils/oauth/cerebras.ts +16 -0
  295. package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
  296. package/src/utils/oauth/cursor.ts +157 -0
  297. package/src/utils/oauth/deepseek.ts +53 -0
  298. package/src/utils/oauth/firepass.ts +24 -0
  299. package/src/utils/oauth/fireworks.ts +15 -0
  300. package/src/utils/oauth/github-copilot.ts +362 -0
  301. package/src/utils/oauth/gitlab-duo.ts +123 -0
  302. package/src/utils/oauth/google-antigravity.ts +200 -0
  303. package/src/utils/oauth/google-gemini-cli.ts +256 -0
  304. package/src/utils/oauth/google-oauth-shared.ts +110 -0
  305. package/src/utils/oauth/huggingface.ts +62 -0
  306. package/src/utils/oauth/index.ts +484 -0
  307. package/src/utils/oauth/kagi.ts +47 -0
  308. package/src/utils/oauth/kilo.ts +87 -0
  309. package/src/utils/oauth/kimi.ts +254 -0
  310. package/src/utils/oauth/litellm.ts +47 -0
  311. package/src/utils/oauth/lm-studio.ts +38 -0
  312. package/src/utils/oauth/minimax-code.ts +78 -0
  313. package/src/utils/oauth/moonshot.ts +23 -0
  314. package/src/utils/oauth/nanogpt.ts +15 -0
  315. package/src/utils/oauth/nvidia.ts +70 -0
  316. package/src/utils/oauth/oauth.html +203 -0
  317. package/src/utils/oauth/ollama-cloud.ts +28 -0
  318. package/src/utils/oauth/ollama.ts +47 -0
  319. package/src/utils/oauth/openai-codex.ts +299 -0
  320. package/src/utils/oauth/opencode.ts +49 -0
  321. package/src/utils/oauth/openrouter.ts +20 -0
  322. package/src/utils/oauth/parallel.ts +46 -0
  323. package/src/utils/oauth/perplexity.ts +206 -0
  324. package/src/utils/oauth/pkce.ts +18 -0
  325. package/src/utils/oauth/qianfan.ts +58 -0
  326. package/src/utils/oauth/qwen-portal.ts +60 -0
  327. package/src/utils/oauth/synthetic.ts +15 -0
  328. package/src/utils/oauth/tavily.ts +46 -0
  329. package/src/utils/oauth/together.ts +16 -0
  330. package/src/utils/oauth/types.ts +99 -0
  331. package/src/utils/oauth/venice.ts +59 -0
  332. package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
  333. package/src/utils/oauth/vllm.ts +40 -0
  334. package/src/utils/oauth/wafer.ts +50 -0
  335. package/src/utils/oauth/xai-oauth.ts +342 -0
  336. package/src/utils/oauth/xiaomi.ts +139 -0
  337. package/src/utils/oauth/zai.ts +60 -0
  338. package/src/utils/oauth/zenmux.ts +15 -0
  339. package/src/utils/oauth/zhipu.ts +60 -0
  340. package/src/utils/overflow.ts +137 -0
  341. package/src/utils/parse-bind.ts +54 -0
  342. package/src/utils/provider-response.ts +30 -0
  343. package/src/utils/request-debug.ts +336 -0
  344. package/src/utils/retry-after.ts +110 -0
  345. package/src/utils/retry.ts +54 -0
  346. package/src/utils/schema/CONSTRAINTS.md +164 -0
  347. package/src/utils/schema/adapt.ts +36 -0
  348. package/src/utils/schema/compatibility.ts +435 -0
  349. package/src/utils/schema/dereference.ts +98 -0
  350. package/src/utils/schema/draft.ts +341 -0
  351. package/src/utils/schema/equality.ts +97 -0
  352. package/src/utils/schema/fields.ts +191 -0
  353. package/src/utils/schema/index.ts +13 -0
  354. package/src/utils/schema/json-schema-validator.ts +577 -0
  355. package/src/utils/schema/meta-validator.ts +167 -0
  356. package/src/utils/schema/normalize.ts +1588 -0
  357. package/src/utils/schema/spill.ts +43 -0
  358. package/src/utils/schema/stamps.ts +97 -0
  359. package/src/utils/schema/types.ts +10 -0
  360. package/src/utils/schema/wire.ts +293 -0
  361. package/src/utils/schema/zod-decontaminate.ts +331 -0
  362. package/src/utils/sdk-stream-timeout.ts +43 -0
  363. package/src/utils/sse-debug.ts +289 -0
  364. package/src/utils/stream-markup-healing.ts +612 -0
  365. package/src/utils/tool-choice.ts +99 -0
  366. package/src/utils/validation.ts +1024 -0
  367. package/src/utils.ts +166 -0
  368. package/dist/api-registry.d.ts +0 -20
  369. package/dist/api-registry.d.ts.map +0 -1
  370. package/dist/api-registry.js +0 -44
  371. package/dist/api-registry.js.map +0 -1
  372. package/dist/bedrock-provider.d.ts +0 -5
  373. package/dist/bedrock-provider.d.ts.map +0 -1
  374. package/dist/bedrock-provider.js +0 -6
  375. package/dist/bedrock-provider.js.map +0 -1
  376. package/dist/cli.d.ts +0 -3
  377. package/dist/cli.d.ts.map +0 -1
  378. package/dist/cli.js +0 -130
  379. package/dist/cli.js.map +0 -1
  380. package/dist/env-api-keys.d.ts +0 -18
  381. package/dist/env-api-keys.d.ts.map +0 -1
  382. package/dist/env-api-keys.js +0 -178
  383. package/dist/env-api-keys.js.map +0 -1
  384. package/dist/image-models.d.ts +0 -10
  385. package/dist/image-models.d.ts.map +0 -1
  386. package/dist/image-models.generated.d.ts +0 -440
  387. package/dist/image-models.generated.d.ts.map +0 -1
  388. package/dist/image-models.generated.js +0 -442
  389. package/dist/image-models.generated.js.map +0 -1
  390. package/dist/image-models.js +0 -23
  391. package/dist/image-models.js.map +0 -1
  392. package/dist/images-api-registry.d.ts +0 -14
  393. package/dist/images-api-registry.d.ts.map +0 -1
  394. package/dist/images-api-registry.js +0 -22
  395. package/dist/images-api-registry.js.map +0 -1
  396. package/dist/images.d.ts +0 -4
  397. package/dist/images.d.ts.map +0 -1
  398. package/dist/images.js +0 -14
  399. package/dist/images.js.map +0 -1
  400. package/dist/index.d.ts +0 -32
  401. package/dist/index.d.ts.map +0 -1
  402. package/dist/index.js +0 -20
  403. package/dist/index.js.map +0 -1
  404. package/dist/models.d.ts +0 -18
  405. package/dist/models.d.ts.map +0 -1
  406. package/dist/models.generated.d.ts +0 -17480
  407. package/dist/models.generated.d.ts.map +0 -1
  408. package/dist/models.generated.js +0 -16339
  409. package/dist/models.generated.js.map +0 -1
  410. package/dist/models.js +0 -71
  411. package/dist/models.js.map +0 -1
  412. package/dist/oauth.d.ts +0 -2
  413. package/dist/oauth.d.ts.map +0 -1
  414. package/dist/oauth.js +0 -2
  415. package/dist/oauth.js.map +0 -1
  416. package/dist/providers/aery-error-formatting.d.ts +0 -13
  417. package/dist/providers/aery-error-formatting.d.ts.map +0 -1
  418. package/dist/providers/aery-error-formatting.js +0 -112
  419. package/dist/providers/aery-error-formatting.js.map +0 -1
  420. package/dist/providers/amazon-bedrock.d.ts +0 -38
  421. package/dist/providers/amazon-bedrock.d.ts.map +0 -1
  422. package/dist/providers/amazon-bedrock.js +0 -763
  423. package/dist/providers/amazon-bedrock.js.map +0 -1
  424. package/dist/providers/anthropic.d.ts +0 -71
  425. package/dist/providers/anthropic.d.ts.map +0 -1
  426. package/dist/providers/anthropic.js +0 -949
  427. package/dist/providers/anthropic.js.map +0 -1
  428. package/dist/providers/azure-openai-responses.d.ts +0 -15
  429. package/dist/providers/azure-openai-responses.d.ts.map +0 -1
  430. package/dist/providers/azure-openai-responses.js +0 -225
  431. package/dist/providers/azure-openai-responses.js.map +0 -1
  432. package/dist/providers/cloudflare.d.ts +0 -13
  433. package/dist/providers/cloudflare.d.ts.map +0 -1
  434. package/dist/providers/cloudflare.js +0 -26
  435. package/dist/providers/cloudflare.js.map +0 -1
  436. package/dist/providers/faux.d.ts +0 -56
  437. package/dist/providers/faux.d.ts.map +0 -1
  438. package/dist/providers/faux.js +0 -368
  439. package/dist/providers/faux.js.map +0 -1
  440. package/dist/providers/github-copilot-headers.d.ts +0 -8
  441. package/dist/providers/github-copilot-headers.d.ts.map +0 -1
  442. package/dist/providers/github-copilot-headers.js +0 -29
  443. package/dist/providers/github-copilot-headers.js.map +0 -1
  444. package/dist/providers/google-gemini-cli.d.ts +0 -74
  445. package/dist/providers/google-gemini-cli.d.ts.map +0 -1
  446. package/dist/providers/google-gemini-cli.js +0 -779
  447. package/dist/providers/google-gemini-cli.js.map +0 -1
  448. package/dist/providers/google-shared.d.ts +0 -70
  449. package/dist/providers/google-shared.d.ts.map +0 -1
  450. package/dist/providers/google-shared.js +0 -329
  451. package/dist/providers/google-shared.js.map +0 -1
  452. package/dist/providers/google-vertex.d.ts +0 -15
  453. package/dist/providers/google-vertex.d.ts.map +0 -1
  454. package/dist/providers/google-vertex.js +0 -442
  455. package/dist/providers/google-vertex.js.map +0 -1
  456. package/dist/providers/google.d.ts +0 -13
  457. package/dist/providers/google.d.ts.map +0 -1
  458. package/dist/providers/google.js +0 -400
  459. package/dist/providers/google.js.map +0 -1
  460. package/dist/providers/images/openrouter.d.ts +0 -3
  461. package/dist/providers/images/openrouter.d.ts.map +0 -1
  462. package/dist/providers/images/openrouter.js +0 -129
  463. package/dist/providers/images/openrouter.js.map +0 -1
  464. package/dist/providers/images/register-builtins.d.ts +0 -4
  465. package/dist/providers/images/register-builtins.d.ts.map +0 -1
  466. package/dist/providers/images/register-builtins.js +0 -34
  467. package/dist/providers/images/register-builtins.js.map +0 -1
  468. package/dist/providers/mistral.d.ts +0 -25
  469. package/dist/providers/mistral.d.ts.map +0 -1
  470. package/dist/providers/mistral.js +0 -535
  471. package/dist/providers/mistral.js.map +0 -1
  472. package/dist/providers/openai-codex-responses.d.ts +0 -30
  473. package/dist/providers/openai-codex-responses.d.ts.map +0 -1
  474. package/dist/providers/openai-codex-responses.js +0 -1090
  475. package/dist/providers/openai-codex-responses.js.map +0 -1
  476. package/dist/providers/openai-completions.d.ts +0 -19
  477. package/dist/providers/openai-completions.d.ts.map +0 -1
  478. package/dist/providers/openai-completions.js +0 -950
  479. package/dist/providers/openai-completions.js.map +0 -1
  480. package/dist/providers/openai-prompt-cache.d.ts +0 -3
  481. package/dist/providers/openai-prompt-cache.d.ts.map +0 -1
  482. package/dist/providers/openai-prompt-cache.js +0 -10
  483. package/dist/providers/openai-prompt-cache.js.map +0 -1
  484. package/dist/providers/openai-responses-shared.d.ts +0 -18
  485. package/dist/providers/openai-responses-shared.d.ts.map +0 -1
  486. package/dist/providers/openai-responses-shared.js +0 -492
  487. package/dist/providers/openai-responses-shared.js.map +0 -1
  488. package/dist/providers/openai-responses.d.ts +0 -13
  489. package/dist/providers/openai-responses.d.ts.map +0 -1
  490. package/dist/providers/openai-responses.js +0 -237
  491. package/dist/providers/openai-responses.js.map +0 -1
  492. package/dist/providers/register-builtins.d.ts +0 -38
  493. package/dist/providers/register-builtins.d.ts.map +0 -1
  494. package/dist/providers/register-builtins.js +0 -278
  495. package/dist/providers/register-builtins.js.map +0 -1
  496. package/dist/providers/simple-options.d.ts +0 -8
  497. package/dist/providers/simple-options.d.ts.map +0 -1
  498. package/dist/providers/simple-options.js +0 -41
  499. package/dist/providers/simple-options.js.map +0 -1
  500. package/dist/providers/transform-messages.d.ts.map +0 -1
  501. package/dist/providers/transform-messages.js +0 -184
  502. package/dist/providers/transform-messages.js.map +0 -1
  503. package/dist/session-resources.d.ts +0 -4
  504. package/dist/session-resources.d.ts.map +0 -1
  505. package/dist/session-resources.js +0 -22
  506. package/dist/session-resources.js.map +0 -1
  507. package/dist/stream.d.ts +0 -8
  508. package/dist/stream.d.ts.map +0 -1
  509. package/dist/stream.js +0 -27
  510. package/dist/stream.js.map +0 -1
  511. package/dist/types.d.ts +0 -498
  512. package/dist/types.d.ts.map +0 -1
  513. package/dist/types.js +0 -2
  514. package/dist/types.js.map +0 -1
  515. package/dist/utils/diagnostics.d.ts +0 -19
  516. package/dist/utils/diagnostics.d.ts.map +0 -1
  517. package/dist/utils/diagnostics.js +0 -25
  518. package/dist/utils/diagnostics.js.map +0 -1
  519. package/dist/utils/event-stream.d.ts +0 -21
  520. package/dist/utils/event-stream.d.ts.map +0 -1
  521. package/dist/utils/event-stream.js +0 -81
  522. package/dist/utils/event-stream.js.map +0 -1
  523. package/dist/utils/hash.d.ts +0 -3
  524. package/dist/utils/hash.d.ts.map +0 -1
  525. package/dist/utils/hash.js +0 -14
  526. package/dist/utils/hash.js.map +0 -1
  527. package/dist/utils/headers.d.ts +0 -2
  528. package/dist/utils/headers.d.ts.map +0 -1
  529. package/dist/utils/headers.js +0 -8
  530. package/dist/utils/headers.js.map +0 -1
  531. package/dist/utils/json-parse.d.ts +0 -16
  532. package/dist/utils/json-parse.d.ts.map +0 -1
  533. package/dist/utils/json-parse.js +0 -113
  534. package/dist/utils/json-parse.js.map +0 -1
  535. package/dist/utils/node-http-proxy.d.ts +0 -10
  536. package/dist/utils/node-http-proxy.d.ts.map +0 -1
  537. package/dist/utils/node-http-proxy.js +0 -97
  538. package/dist/utils/node-http-proxy.js.map +0 -1
  539. package/dist/utils/oauth/anthropic.d.ts +0 -25
  540. package/dist/utils/oauth/anthropic.d.ts.map +0 -1
  541. package/dist/utils/oauth/anthropic.js +0 -335
  542. package/dist/utils/oauth/anthropic.js.map +0 -1
  543. package/dist/utils/oauth/device-code.d.ts +0 -19
  544. package/dist/utils/oauth/device-code.d.ts.map +0 -1
  545. package/dist/utils/oauth/device-code.js +0 -55
  546. package/dist/utils/oauth/device-code.js.map +0 -1
  547. package/dist/utils/oauth/github-copilot.d.ts +0 -30
  548. package/dist/utils/oauth/github-copilot.d.ts.map +0 -1
  549. package/dist/utils/oauth/github-copilot.js +0 -268
  550. package/dist/utils/oauth/github-copilot.js.map +0 -1
  551. package/dist/utils/oauth/google-antigravity.d.ts +0 -26
  552. package/dist/utils/oauth/google-antigravity.d.ts.map +0 -1
  553. package/dist/utils/oauth/google-antigravity.js +0 -377
  554. package/dist/utils/oauth/google-antigravity.js.map +0 -1
  555. package/dist/utils/oauth/google-gemini-cli.d.ts +0 -26
  556. package/dist/utils/oauth/google-gemini-cli.d.ts.map +0 -1
  557. package/dist/utils/oauth/google-gemini-cli.js +0 -482
  558. package/dist/utils/oauth/google-gemini-cli.js.map +0 -1
  559. package/dist/utils/oauth/index.d.ts +0 -63
  560. package/dist/utils/oauth/index.d.ts.map +0 -1
  561. package/dist/utils/oauth/index.js +0 -131
  562. package/dist/utils/oauth/index.js.map +0 -1
  563. package/dist/utils/oauth/oauth-page.d.ts +0 -3
  564. package/dist/utils/oauth/oauth-page.d.ts.map +0 -1
  565. package/dist/utils/oauth/oauth-page.js +0 -105
  566. package/dist/utils/oauth/oauth-page.js.map +0 -1
  567. package/dist/utils/oauth/openai-codex.d.ts +0 -34
  568. package/dist/utils/oauth/openai-codex.d.ts.map +0 -1
  569. package/dist/utils/oauth/openai-codex.js +0 -385
  570. package/dist/utils/oauth/openai-codex.js.map +0 -1
  571. package/dist/utils/oauth/pkce.d.ts.map +0 -1
  572. package/dist/utils/oauth/pkce.js +0 -31
  573. package/dist/utils/oauth/pkce.js.map +0 -1
  574. package/dist/utils/oauth/types.d.ts +0 -64
  575. package/dist/utils/oauth/types.d.ts.map +0 -1
  576. package/dist/utils/oauth/types.js +0 -2
  577. package/dist/utils/oauth/types.js.map +0 -1
  578. package/dist/utils/overflow.d.ts.map +0 -1
  579. package/dist/utils/overflow.js +0 -151
  580. package/dist/utils/overflow.js.map +0 -1
  581. package/dist/utils/sanitize-unicode.d.ts +0 -22
  582. package/dist/utils/sanitize-unicode.d.ts.map +0 -1
  583. package/dist/utils/sanitize-unicode.js +0 -26
  584. package/dist/utils/sanitize-unicode.js.map +0 -1
  585. package/dist/utils/typebox-helpers.d.ts +0 -17
  586. package/dist/utils/typebox-helpers.d.ts.map +0 -1
  587. package/dist/utils/typebox-helpers.js +0 -21
  588. package/dist/utils/typebox-helpers.js.map +0 -1
  589. package/dist/utils/validation.d.ts +0 -18
  590. package/dist/utils/validation.d.ts.map +0 -1
  591. package/dist/utils/validation.js +0 -281
  592. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1,484 @@
1
+ // ============================================================================
2
+ // High-level API
3
+ // ============================================================================
4
+ import type {
5
+ OAuthCredentials,
6
+ OAuthProvider,
7
+ OAuthProviderId,
8
+ OAuthProviderInfo,
9
+ OAuthProviderInterface,
10
+ } from "./types";
11
+
12
+ const builtInOAuthProviders: OAuthProviderInfo[] = [
13
+ // Most popular coding subscriptions / gateways.
14
+ {
15
+ id: "openai-codex",
16
+ name: "ChatGPT Plus/Pro (Codex Subscription)",
17
+ available: true,
18
+ },
19
+ {
20
+ id: "anthropic",
21
+ name: "Anthropic (Claude Pro/Max)",
22
+ available: true,
23
+ },
24
+ {
25
+ id: "zai",
26
+ name: "Z.AI (GLM Coding Plan)",
27
+ available: true,
28
+ },
29
+ {
30
+ id: "kimi-code",
31
+ name: "Kimi Code",
32
+ available: true,
33
+ },
34
+ {
35
+ id: "openrouter",
36
+ name: "OpenRouter",
37
+ available: true,
38
+ },
39
+ // Other coding subscriptions & first-party assistants.
40
+ {
41
+ id: "github-copilot",
42
+ name: "GitHub Copilot",
43
+ available: true,
44
+ },
45
+ {
46
+ id: "cursor",
47
+ name: "Cursor (Claude, GPT, etc.)",
48
+ available: true,
49
+ },
50
+ {
51
+ id: "google-antigravity",
52
+ name: "Antigravity (Gemini 3, Claude, GPT-OSS)",
53
+ available: true,
54
+ },
55
+ {
56
+ id: "google-gemini-cli",
57
+ name: "Google Cloud Code Assist (Gemini CLI)",
58
+ available: true,
59
+ },
60
+ {
61
+ id: "openai-codex-device",
62
+ name: "ChatGPT Plus/Pro (Codex, headless/device)",
63
+ available: true,
64
+ },
65
+ {
66
+ id: "xai-oauth",
67
+ name: "xAI Grok OAuth (SuperGrok Subscription)",
68
+ available: true,
69
+ },
70
+ {
71
+ id: "gitlab-duo",
72
+ name: "GitLab Duo",
73
+ available: true,
74
+ },
75
+ {
76
+ id: "alibaba-coding-plan",
77
+ name: "Alibaba Coding Plan",
78
+ available: true,
79
+ },
80
+ {
81
+ id: "zhipu-coding-plan",
82
+ name: "Zhipu Coding Plan (智谱)",
83
+ available: true,
84
+ },
85
+ {
86
+ id: "qwen-portal",
87
+ name: "Qwen Portal",
88
+ available: true,
89
+ },
90
+ {
91
+ id: "minimax-code",
92
+ name: "MiniMax Coding Plan (International)",
93
+ available: true,
94
+ },
95
+ {
96
+ id: "minimax-code-cn",
97
+ name: "MiniMax Coding Plan (China)",
98
+ available: true,
99
+ },
100
+ {
101
+ id: "xiaomi",
102
+ name: "Xiaomi MiMo",
103
+ available: true,
104
+ },
105
+ {
106
+ id: "firepass",
107
+ name: "Fire Pass (Fireworks Kimi K2.6 Turbo subscription)",
108
+ available: true,
109
+ },
110
+ {
111
+ id: "wafer-pass",
112
+ name: "Wafer Pass (flat-rate subscription)",
113
+ available: true,
114
+ },
115
+ // Direct model-provider APIs (pay-as-you-go inference).
116
+ {
117
+ id: "deepseek",
118
+ name: "DeepSeek",
119
+ available: true,
120
+ },
121
+ {
122
+ id: "moonshot",
123
+ name: "Moonshot (Kimi API)",
124
+ available: true,
125
+ },
126
+ {
127
+ id: "cerebras",
128
+ name: "Cerebras",
129
+ available: true,
130
+ },
131
+ {
132
+ id: "fireworks",
133
+ name: "Fireworks",
134
+ available: true,
135
+ },
136
+ {
137
+ id: "together",
138
+ name: "Together",
139
+ available: true,
140
+ },
141
+ {
142
+ id: "nvidia",
143
+ name: "NVIDIA",
144
+ available: true,
145
+ },
146
+ {
147
+ id: "huggingface",
148
+ name: "Hugging Face Inference",
149
+ available: true,
150
+ },
151
+ {
152
+ id: "perplexity",
153
+ name: "Perplexity (Pro/Max)",
154
+ available: true,
155
+ },
156
+ {
157
+ id: "qianfan",
158
+ name: "Qianfan",
159
+ available: true,
160
+ },
161
+ {
162
+ id: "venice",
163
+ name: "Venice",
164
+ available: true,
165
+ },
166
+ {
167
+ id: "synthetic",
168
+ name: "Synthetic",
169
+ available: true,
170
+ },
171
+ {
172
+ id: "nanogpt",
173
+ name: "NanoGPT",
174
+ available: true,
175
+ },
176
+ {
177
+ id: "wafer-serverless",
178
+ name: "Wafer Serverless (pay-as-you-go)",
179
+ available: true,
180
+ },
181
+ // Aggregator gateways / routers.
182
+ {
183
+ id: "vercel-ai-gateway",
184
+ name: "Vercel AI Gateway",
185
+ available: true,
186
+ },
187
+ {
188
+ id: "cloudflare-ai-gateway",
189
+ name: "Cloudflare AI Gateway",
190
+ available: true,
191
+ },
192
+ {
193
+ id: "litellm",
194
+ name: "LiteLLM",
195
+ available: true,
196
+ },
197
+ {
198
+ id: "kilo",
199
+ name: "Kilo Gateway",
200
+ available: true,
201
+ },
202
+ {
203
+ id: "zenmux",
204
+ name: "ZenMux",
205
+ available: true,
206
+ },
207
+ {
208
+ id: "opencode-zen",
209
+ name: "OpenCode Zen",
210
+ available: true,
211
+ },
212
+ {
213
+ id: "opencode-go",
214
+ name: "OpenCode Go",
215
+ available: true,
216
+ },
217
+ // Search & tool providers.
218
+ {
219
+ id: "tavily",
220
+ name: "Tavily",
221
+ available: true,
222
+ },
223
+ {
224
+ id: "kagi",
225
+ name: "Kagi",
226
+ available: true,
227
+ },
228
+ {
229
+ id: "parallel",
230
+ name: "Parallel",
231
+ available: true,
232
+ },
233
+ // Local runtimes.
234
+ {
235
+ id: "ollama",
236
+ name: "Ollama (Local OpenAI-compatible)",
237
+ available: true,
238
+ },
239
+ {
240
+ id: "ollama-cloud",
241
+ name: "Ollama Cloud",
242
+ available: true,
243
+ },
244
+ {
245
+ id: "lm-studio",
246
+ name: "LM Studio (Local OpenAI-compatible)",
247
+ available: true,
248
+ },
249
+ {
250
+ id: "vllm",
251
+ name: "vLLM (Local OpenAI-compatible)",
252
+ available: true,
253
+ },
254
+ ];
255
+
256
+ const customOAuthProviders = new Map<string, OAuthProviderInterface>();
257
+
258
+ /**
259
+ * Register a custom OAuth provider.
260
+ */
261
+ export function registerOAuthProvider(provider: OAuthProviderInterface): void {
262
+ customOAuthProviders.set(provider.id, provider);
263
+ }
264
+
265
+ /**
266
+ * Get a custom OAuth provider by ID.
267
+ */
268
+ export function getOAuthProvider(id: OAuthProviderId): OAuthProviderInterface | undefined {
269
+ return customOAuthProviders.get(id);
270
+ }
271
+
272
+ /**
273
+ * Remove all custom OAuth providers registered by a source.
274
+ */
275
+ export function unregisterOAuthProviders(sourceId: string): void {
276
+ for (const [id, provider] of customOAuthProviders.entries()) {
277
+ if (provider.sourceId === sourceId) {
278
+ customOAuthProviders.delete(id);
279
+ }
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Refresh token for any OAuth provider.
285
+ * Saves the new credentials and returns the new access token.
286
+ */
287
+ export async function refreshOAuthToken(
288
+ provider: OAuthProvider,
289
+ credentials: OAuthCredentials,
290
+ ): Promise<OAuthCredentials> {
291
+ if (!credentials) {
292
+ throw new Error(`No OAuth credentials found for ${provider}`);
293
+ }
294
+
295
+ let newCredentials: OAuthCredentials;
296
+ switch (provider) {
297
+ case "anthropic": {
298
+ const { refreshAnthropicToken } = await import("./anthropic");
299
+ newCredentials = await refreshAnthropicToken(credentials.refresh);
300
+ break;
301
+ }
302
+ case "github-copilot": {
303
+ const { refreshGitHubCopilotToken } = await import("./github-copilot");
304
+ newCredentials = await refreshGitHubCopilotToken(credentials.refresh, credentials.enterpriseUrl);
305
+ break;
306
+ }
307
+ case "google-gemini-cli": {
308
+ const { refreshGoogleCloudToken } = await import("./google-gemini-cli");
309
+ if (!credentials.projectId) {
310
+ throw new Error("Google Cloud credentials missing projectId");
311
+ }
312
+ newCredentials = await refreshGoogleCloudToken(credentials.refresh, credentials.projectId);
313
+ break;
314
+ }
315
+ case "google-antigravity": {
316
+ const { refreshAntigravityToken } = await import("./google-antigravity");
317
+ if (!credentials.projectId) {
318
+ throw new Error("Antigravity credentials missing projectId");
319
+ }
320
+ newCredentials = await refreshAntigravityToken(credentials.refresh, credentials.projectId);
321
+ break;
322
+ }
323
+ case "openai-codex":
324
+ case "openai-codex-device": {
325
+ const { refreshOpenAICodexToken } = await import("./openai-codex");
326
+ newCredentials = await refreshOpenAICodexToken(credentials.refresh);
327
+ break;
328
+ }
329
+ case "kimi-code": {
330
+ const { refreshKimiToken } = await import("./kimi");
331
+ newCredentials = await refreshKimiToken(credentials.refresh);
332
+ break;
333
+ }
334
+ case "gitlab-duo": {
335
+ const { refreshGitLabDuoToken } = await import("./gitlab-duo");
336
+ newCredentials = await refreshGitLabDuoToken(credentials);
337
+ break;
338
+ }
339
+ case "cursor": {
340
+ const { refreshCursorToken } = await import("./cursor");
341
+ newCredentials = await refreshCursorToken(credentials.refresh);
342
+ break;
343
+ }
344
+ case "xai-oauth": {
345
+ const { refreshXAIOAuthToken } = await import("./xai-oauth");
346
+ newCredentials = await refreshXAIOAuthToken(credentials.refresh);
347
+ break;
348
+ }
349
+ case "kilo":
350
+ case "perplexity":
351
+ case "huggingface":
352
+ case "opencode-zen":
353
+ case "opencode-go":
354
+ case "openrouter":
355
+ case "cerebras":
356
+ case "fireworks":
357
+ case "firepass":
358
+ case "nvidia":
359
+ case "nanogpt":
360
+ case "synthetic":
361
+ case "together":
362
+ case "litellm":
363
+ case "lm-studio":
364
+ case "ollama":
365
+ case "ollama-cloud":
366
+ case "xiaomi":
367
+ case "zai":
368
+ case "zhipu-coding-plan":
369
+ case "qianfan":
370
+ case "venice":
371
+ case "minimax-code":
372
+ case "minimax-code-cn":
373
+ case "moonshot":
374
+ case "kagi":
375
+ case "cloudflare-ai-gateway":
376
+ case "vercel-ai-gateway":
377
+ case "qwen-portal":
378
+ case "wafer-pass":
379
+ case "wafer-serverless":
380
+ case "zenmux":
381
+ case "vllm":
382
+ // API keys / static bearer tokens don't expire, return as-is
383
+ newCredentials = credentials;
384
+ break;
385
+ default:
386
+ throw new Error(`Unknown OAuth provider: ${provider}`);
387
+ }
388
+ return newCredentials;
389
+ }
390
+ function getPerplexityJwtExpiryMs(token: string): number | undefined {
391
+ const parts = token.split(".");
392
+ if (parts.length !== 3) return undefined;
393
+ const payload = parts[1];
394
+ if (!payload) return undefined;
395
+ try {
396
+ const decoded = JSON.parse(Buffer.from(payload, "base64url").toString("utf8")) as { exp?: unknown };
397
+ if (typeof decoded.exp !== "number" || !Number.isFinite(decoded.exp)) return undefined;
398
+ return decoded.exp * 1000 - 5 * 60_000;
399
+ } catch {
400
+ return undefined;
401
+ }
402
+ }
403
+
404
+ /**
405
+ * Build API-key bytes for a provider from an already-fresh OAuth credential.
406
+ *
407
+ * Refresh is owned by AuthStorage. This helper deliberately refuses expired
408
+ * credentials so it cannot POST broker redaction sentinels to upstream token
409
+ * endpoints as a side channel.
410
+ *
411
+ * For providers that need credential metadata at request time, returns
412
+ * JSON-encoded credentials plus expiry metadata for diagnostics/edge guards.
413
+ * @returns API key string, or null if no credentials
414
+ * @throws Error if the credential is expired and must be refreshed upstream
415
+ */
416
+ export async function getOAuthApiKey(
417
+ provider: OAuthProvider,
418
+ credentials: Record<string, OAuthCredentials>,
419
+ ): Promise<{ newCredentials: OAuthCredentials; apiKey: string } | null> {
420
+ let creds = credentials[provider];
421
+ if (!creds) {
422
+ return null;
423
+ }
424
+
425
+ if (provider === "perplexity") {
426
+ // Perplexity JWTs usually omit `exp` (server-side sessions). Trust the JWT
427
+ // claim when present; otherwise treat the credential as non-expiring rather
428
+ // than honoring a stale stored `expires` (older logins wrote loginTime+1h).
429
+ const NEVER_EXPIRES = 8.64e15;
430
+ const normalizedExpires =
431
+ creds.expires > 0 && creds.expires < 10_000_000_000 ? creds.expires * 1000 : creds.expires;
432
+ const jwtExpiry = getPerplexityJwtExpiryMs(creds.access);
433
+ const expires = jwtExpiry ?? Math.max(normalizedExpires, NEVER_EXPIRES);
434
+ if (expires !== creds.expires) {
435
+ creds = { ...creds, expires };
436
+ }
437
+ }
438
+ // Refresh is the sole responsibility of `AuthStorage` (which calls
439
+ // `refreshOAuthToken` directly with broker-aware single-flighting). If we
440
+ // reach here with an expired credential, the outer pipeline failed to
441
+ // refresh before this call OR the refresh slot is the broker sentinel —
442
+ // either way, posting the credential to a provider endpoint would only
443
+ // trigger a `__remote__`-against-real-provider failure that gets classified
444
+ // as `invalid_grant` and disables the row. Refuse loudly instead.
445
+ if (Date.now() >= creds.expires) {
446
+ if (provider === "perplexity") {
447
+ const jwtExpiry = getPerplexityJwtExpiryMs(creds.access);
448
+ if (jwtExpiry && Date.now() < jwtExpiry) {
449
+ const fallbackCredentials = { ...creds, expires: jwtExpiry };
450
+ return { newCredentials: fallbackCredentials, apiKey: fallbackCredentials.access };
451
+ }
452
+ }
453
+ throw new Error(
454
+ `OAuth credential for ${provider} is expired and must be refreshed via AuthStorage before getOAuthApiKey is called`,
455
+ );
456
+ }
457
+ // For providers that need request-time credential metadata, return JSON.
458
+ const needsStructuredApiKey =
459
+ provider === "github-copilot" || provider === "google-gemini-cli" || provider === "google-antigravity";
460
+ const apiKey = needsStructuredApiKey
461
+ ? JSON.stringify({
462
+ token: creds.access,
463
+ enterpriseUrl: creds.enterpriseUrl,
464
+ projectId: creds.projectId,
465
+ refreshToken: creds.refresh,
466
+ expiresAt: creds.expires,
467
+ email: creds.email,
468
+ accountId: creds.accountId,
469
+ })
470
+ : creds.access;
471
+ return { newCredentials: creds, apiKey };
472
+ }
473
+
474
+ /**
475
+ * Get list of OAuth providers.
476
+ */
477
+ export function getOAuthProviders(): OAuthProviderInfo[] {
478
+ const customProviders = Array.from(customOAuthProviders.values(), provider => ({
479
+ id: provider.id,
480
+ name: provider.name,
481
+ available: true,
482
+ }));
483
+ return [...builtInOAuthProviders, ...customProviders];
484
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Kagi login flow.
3
+ *
4
+ * Kagi web search uses an API key from the account settings page.
5
+ * This is an API key flow:
6
+ * 1. Open browser to Kagi API settings
7
+ * 2. User copies API key
8
+ * 3. User pastes key into CLI
9
+ */
10
+
11
+ import type { OAuthController } from "./types";
12
+
13
+ const AUTH_URL = "https://kagi.com/settings/api";
14
+
15
+ /**
16
+ * Login to Kagi.
17
+ *
18
+ * Opens browser to API settings and prompts user to paste their API key.
19
+ * Returns the API key directly (not OAuthCredentials - this isn't OAuth).
20
+ */
21
+ export async function loginKagi(options: OAuthController): Promise<string> {
22
+ if (!options.onPrompt) {
23
+ throw new Error("Kagi login requires onPrompt callback");
24
+ }
25
+
26
+ options.onAuth?.({
27
+ url: AUTH_URL,
28
+ instructions:
29
+ "Copy your Kagi Search API key from Kagi API settings. Search API access is beta-only; if unavailable, email support@kagi.com.",
30
+ });
31
+
32
+ const apiKey = await options.onPrompt({
33
+ message: "Paste your Kagi API key",
34
+ placeholder: "KG_...",
35
+ });
36
+
37
+ if (options.signal?.aborted) {
38
+ throw new Error("Login cancelled");
39
+ }
40
+
41
+ const trimmed = apiKey.trim();
42
+ if (!trimmed) {
43
+ throw new Error("API key is required");
44
+ }
45
+
46
+ return trimmed;
47
+ }
@@ -0,0 +1,87 @@
1
+ import type { OAuthController, OAuthCredentials } from "./types";
2
+
3
+ const KILO_DEVICE_AUTH_BASE_URL = "https://api.kilo.ai/api/device-auth";
4
+ const POLL_INTERVAL_MS = 5000;
5
+ const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
6
+
7
+ interface KiloDeviceAuthCodeResponse {
8
+ code?: string;
9
+ verificationUrl?: string;
10
+ expiresIn?: number;
11
+ }
12
+
13
+ interface KiloDeviceAuthPollResponse {
14
+ status?: string;
15
+ token?: string;
16
+ }
17
+
18
+ /**
19
+ * Login with Kilo Gateway OAuth (device code flow).
20
+ */
21
+ export async function loginKilo(callbacks: OAuthController): Promise<OAuthCredentials> {
22
+ const initiateResponse = await fetch(`${KILO_DEVICE_AUTH_BASE_URL}/codes`, {
23
+ method: "POST",
24
+ headers: { "Content-Type": "application/json" },
25
+ });
26
+
27
+ if (!initiateResponse.ok) {
28
+ if (initiateResponse.status === 429) {
29
+ throw new Error("Too many pending authorization requests. Please try again later.");
30
+ }
31
+ throw new Error(`Failed to initiate device authorization: ${initiateResponse.status}`);
32
+ }
33
+
34
+ const initiateData = (await initiateResponse.json()) as KiloDeviceAuthCodeResponse;
35
+ const userCode = initiateData.code;
36
+ const verificationUrl = initiateData.verificationUrl;
37
+ const expiresInSeconds = initiateData.expiresIn;
38
+ if (!userCode || !verificationUrl || typeof expiresInSeconds !== "number" || expiresInSeconds <= 0) {
39
+ throw new Error("Kilo device authorization response missing required fields");
40
+ }
41
+
42
+ callbacks.onAuth?.({
43
+ url: verificationUrl,
44
+ instructions: `Enter code: ${userCode}`,
45
+ });
46
+
47
+ const deadline = Date.now() + expiresInSeconds * 1000;
48
+ while (Date.now() < deadline) {
49
+ if (callbacks.signal?.aborted) {
50
+ throw new Error("Login cancelled");
51
+ }
52
+
53
+ const pollResponse = await fetch(`${KILO_DEVICE_AUTH_BASE_URL}/codes/${encodeURIComponent(userCode)}`);
54
+ if (pollResponse.status === 202) {
55
+ await Bun.sleep(POLL_INTERVAL_MS);
56
+ continue;
57
+ }
58
+ if (pollResponse.status === 403) {
59
+ throw new Error("Authorization was denied");
60
+ }
61
+ if (pollResponse.status === 410) {
62
+ throw new Error("Authorization code expired. Please try again.");
63
+ }
64
+ if (!pollResponse.ok) {
65
+ throw new Error(`Failed to poll device authorization: ${pollResponse.status}`);
66
+ }
67
+
68
+ const pollData = (await pollResponse.json()) as KiloDeviceAuthPollResponse;
69
+ if (pollData.status === "approved" && pollData.token) {
70
+ return {
71
+ refresh: "",
72
+ access: pollData.token,
73
+ expires: Date.now() + ONE_YEAR_MS,
74
+ };
75
+ }
76
+ if (pollData.status === "denied") {
77
+ throw new Error("Authorization was denied");
78
+ }
79
+ if (pollData.status === "expired") {
80
+ throw new Error("Authorization code expired. Please try again.");
81
+ }
82
+
83
+ await Bun.sleep(POLL_INTERVAL_MS);
84
+ }
85
+
86
+ throw new Error("Authentication timed out. Please try again.");
87
+ }