@amir83nasr/10router 0.1.14 → 0.1.16

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 (846) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -5
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +16 -16
  5. package/.next/routes-manifest.json +0 -6
  6. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
  7. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  8. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  10. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  11. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  13. package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  14. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  16. package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  17. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  19. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  20. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +2 -2
  22. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js.nft.json +1 -1
  23. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -1
  25. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js.nft.json +1 -1
  26. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(dashboard)/dashboard/page.js +1 -1
  28. package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  29. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  31. package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  32. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +3 -3
  34. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  35. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  37. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  38. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  40. package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  41. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  43. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  44. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  45. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  46. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  47. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  49. package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  50. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  52. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  53. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  54. package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  55. package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  56. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/_global-error/page.js +2 -2
  58. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  59. package/.next/server/app/_global-error.html +1 -1
  60. package/.next/server/app/_global-error.rsc +1 -1
  61. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  62. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  63. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  64. package/.next/server/app/_not-found/page.js +1 -1
  65. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  66. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/_not-found.html +1 -1
  68. package/.next/server/app/_not-found.rsc +6 -6
  69. package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
  70. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  71. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  72. package/.next/server/app/api/auth/login/route.js +1 -1
  73. package/.next/server/app/api/auth/logout/route.js +1 -1
  74. package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  75. package/.next/server/app/api/auth/oidc/start/route.js +1 -1
  76. package/.next/server/app/api/auth/oidc/test/route.js +1 -1
  77. package/.next/server/app/api/auth/reset-password/route.js +1 -1
  78. package/.next/server/app/api/auth/saml/acs/route.js +1 -1
  79. package/.next/server/app/api/auth/saml/metadata/route.js +2 -2
  80. package/.next/server/app/api/auth/saml/start/route.js +1 -1
  81. package/.next/server/app/api/auth/saml/test/route.js +1 -1
  82. package/.next/server/app/api/auth/status/route.js +2 -2
  83. package/.next/server/app/api/changelog/route.js +1 -1
  84. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
  85. package/.next/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  86. package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  87. package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  88. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  89. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +1 -1
  90. package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  91. package/.next/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  92. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
  93. package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  94. package/.next/server/app/api/combos/[id]/route.js +1 -1
  95. package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  96. package/.next/server/app/api/combos/route.js +1 -1
  97. package/.next/server/app/api/headroom/extras/route.js +1 -1
  98. package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  99. package/.next/server/app/api/headroom/restart/route.js +1 -1
  100. package/.next/server/app/api/headroom/start/route.js +1 -1
  101. package/.next/server/app/api/headroom/status/route.js +1 -1
  102. package/.next/server/app/api/headroom/stop/route.js +1 -1
  103. package/.next/server/app/api/health/route.js +1 -1
  104. package/.next/server/app/api/init/route.js +1 -1
  105. package/.next/server/app/api/keys/[id]/route.js +1 -1
  106. package/.next/server/app/api/keys/route.js +1 -1
  107. package/.next/server/app/api/locale/route.js +1 -1
  108. package/.next/server/app/api/mcp/[plugin]/message/route.js +1 -1
  109. package/.next/server/app/api/mcp/[plugin]/sse/route.js +2 -2
  110. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  111. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  112. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  113. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  114. package/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  115. package/.next/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  116. package/.next/server/app/api/models/alias/route.js +1 -1
  117. package/.next/server/app/api/models/availability/route.js +1 -1
  118. package/.next/server/app/api/models/catalog-sync/route.js +1 -1
  119. package/.next/server/app/api/models/catalog-sync/route.js.nft.json +1 -1
  120. package/.next/server/app/api/models/custom/route.js +1 -1
  121. package/.next/server/app/api/models/custom/route.js.nft.json +1 -1
  122. package/.next/server/app/api/models/disabled/route.js +1 -1
  123. package/.next/server/app/api/models/route.js +1 -1
  124. package/.next/server/app/api/models/route.js.nft.json +1 -1
  125. package/.next/server/app/api/models/test/route.js +1 -1
  126. package/.next/server/app/api/models/test/route.js.nft.json +1 -1
  127. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  128. package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  129. package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  130. package/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  131. package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  132. package/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  133. package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  134. package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  135. package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  136. package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  137. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
  138. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  139. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
  140. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
  141. package/.next/server/app/api/pricing/route.js +1 -1
  142. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  143. package/.next/server/app/api/provider-nodes/route.js +1 -1
  144. package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  145. package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  146. package/.next/server/app/api/providers/[id]/models/route.js +1 -1
  147. package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  148. package/.next/server/app/api/providers/[id]/route.js +1 -1
  149. package/.next/server/app/api/providers/[id]/test/route.js +1 -1
  150. package/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  151. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  152. package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  153. package/.next/server/app/api/providers/client/route.js +1 -1
  154. package/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  155. package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  156. package/.next/server/app/api/providers/route.js +1 -1
  157. package/.next/server/app/api/providers/route.js.nft.json +1 -1
  158. package/.next/server/app/api/providers/suggested-models/route.js +1 -1
  159. package/.next/server/app/api/providers/test-batch/route.js +1 -1
  160. package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  161. package/.next/server/app/api/providers/validate/route.js +1 -1
  162. package/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  163. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  164. package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  165. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +2 -2
  166. package/.next/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  167. package/.next/server/app/api/proxy-pools/route.js +1 -1
  168. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  169. package/.next/server/app/api/pxpipe/health/route.js +2 -2
  170. package/.next/server/app/api/pxpipe/install/route.js +1 -1
  171. package/.next/server/app/api/pxpipe/logs/route.js +1 -1
  172. package/.next/server/app/api/pxpipe/restart/route.js +1 -1
  173. package/.next/server/app/api/pxpipe/start/route.js +2 -2
  174. package/.next/server/app/api/pxpipe/stats/route.js +1 -1
  175. package/.next/server/app/api/pxpipe/status/route.js +1 -1
  176. package/.next/server/app/api/pxpipe/stop/route.js +1 -1
  177. package/.next/server/app/api/settings/database/route.js +1 -1
  178. package/.next/server/app/api/settings/proxy-test/route.js +1 -1
  179. package/.next/server/app/api/settings/require-login/route.js +1 -1
  180. package/.next/server/app/api/settings/route.js +1 -1
  181. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  182. package/.next/server/app/api/shutdown/route.js +1 -1
  183. package/.next/server/app/api/tags/route.js +1 -1
  184. package/.next/server/app/api/translator/console-logs/route.js +1 -1
  185. package/.next/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  186. package/.next/server/app/api/translator/console-logs/stream/route.js +2 -2
  187. package/.next/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  188. package/.next/server/app/api/translator/load/route.js +1 -1
  189. package/.next/server/app/api/translator/save/route.js +1 -1
  190. package/.next/server/app/api/translator/send/route.js +1 -1
  191. package/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  192. package/.next/server/app/api/translator/translate/route.js +1 -1
  193. package/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  194. package/.next/server/app/api/tunnel/disable/route.js +1 -1
  195. package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  196. package/.next/server/app/api/tunnel/enable/route.js +1 -1
  197. package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  198. package/.next/server/app/api/tunnel/status/route.js +1 -1
  199. package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  200. package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  201. package/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  202. package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  203. package/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  204. package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  205. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  206. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  207. package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  208. package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  209. package/.next/server/app/api/usage/chart/route.js +1 -1
  210. package/.next/server/app/api/usage/health/route.js +1 -1
  211. package/.next/server/app/api/usage/history/route.js +1 -1
  212. package/.next/server/app/api/usage/logs/route.js +1 -1
  213. package/.next/server/app/api/usage/providers/route.js +1 -1
  214. package/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
  215. package/.next/server/app/api/usage/request-details/route.js +1 -1
  216. package/.next/server/app/api/usage/request-logs/route.js +1 -1
  217. package/.next/server/app/api/usage/stats/route.js +1 -1
  218. package/.next/server/app/api/usage/stream/route.js +2 -2
  219. package/.next/server/app/api/v1/api/chat/route.js +1 -1
  220. package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  221. package/.next/server/app/api/v1/audio/speech/route.js +1 -1
  222. package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  223. package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  224. package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  225. package/.next/server/app/api/v1/audio/voices/route.js +1 -1
  226. package/.next/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  227. package/.next/server/app/api/v1/chat/completions/route.js +1 -1
  228. package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  229. package/.next/server/app/api/v1/embeddings/route.js +1 -1
  230. package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  231. package/.next/server/app/api/v1/images/generations/route.js +2 -2
  232. package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  233. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  234. package/.next/server/app/api/v1/messages/route.js +1 -1
  235. package/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  236. package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
  237. package/.next/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
  238. package/.next/server/app/api/v1/models/info/route.js +1 -1
  239. package/.next/server/app/api/v1/models/info/route.js.nft.json +1 -1
  240. package/.next/server/app/api/v1/models/route.js +1 -1
  241. package/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  242. package/.next/server/app/api/v1/responses/compact/route.js +1 -1
  243. package/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  244. package/.next/server/app/api/v1/responses/route.js +1 -1
  245. package/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  246. package/.next/server/app/api/v1/route.js +1 -1
  247. package/.next/server/app/api/v1/route.js.nft.json +1 -1
  248. package/.next/server/app/api/v1/search/route.js +1 -1
  249. package/.next/server/app/api/v1/search/route.js.nft.json +1 -1
  250. package/.next/server/app/api/v1/systemone/route.js +1 -1
  251. package/.next/server/app/api/v1/systemone/route.js.nft.json +1 -1
  252. package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
  253. package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  254. package/.next/server/app/api/v1/videos/edits/route.js +1 -1
  255. package/.next/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  256. package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
  257. package/.next/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  258. package/.next/server/app/api/v1/videos/generations/route.js +1 -1
  259. package/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  260. package/.next/server/app/api/v1/web/fetch/route.js +1 -1
  261. package/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  262. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  263. package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  264. package/.next/server/app/api/v1beta/models/route.js +1 -1
  265. package/.next/server/app/api/v1beta/models/route.js.nft.json +1 -1
  266. package/.next/server/app/api/version/route.js +1 -1
  267. package/.next/server/app/api/version/shutdown/route.js +1 -1
  268. package/.next/server/app/api/version/update/route.js +1 -1
  269. package/.next/server/app/callback/page.js +1 -1
  270. package/.next/server/app/callback/page.js.nft.json +1 -1
  271. package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  272. package/.next/server/app/callback.html +1 -1
  273. package/.next/server/app/callback.rsc +6 -6
  274. package/.next/server/app/callback.segments/_full.segment.rsc +6 -6
  275. package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  276. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
  277. package/.next/server/app/dashboard/cli-tools.html +1 -1
  278. package/.next/server/app/dashboard/cli-tools.rsc +9 -9
  279. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  280. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +9 -9
  281. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  282. package/.next/server/app/dashboard/combos.html +1 -1
  283. package/.next/server/app/dashboard/combos.rsc +8 -8
  284. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  285. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  286. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  287. package/.next/server/app/dashboard/endpoint.html +1 -1
  288. package/.next/server/app/dashboard/endpoint.rsc +9 -9
  289. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  290. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +9 -9
  291. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  292. package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
  293. package/.next/server/app/dashboard/media-providers/systemone.rsc +8 -8
  294. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +8 -8
  295. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +8 -8
  296. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +2 -2
  297. package/.next/server/app/dashboard/profile.html +1 -1
  298. package/.next/server/app/dashboard/profile.rsc +8 -8
  299. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  300. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  301. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  302. package/.next/server/app/dashboard/providers/new.html +1 -1
  303. package/.next/server/app/dashboard/providers/new.rsc +8 -8
  304. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  305. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  306. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  307. package/.next/server/app/dashboard/providers.html +1 -1
  308. package/.next/server/app/dashboard/providers.rsc +8 -8
  309. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  310. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  311. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  312. package/.next/server/app/dashboard/proxy-pools.html +1 -1
  313. package/.next/server/app/dashboard/proxy-pools.rsc +8 -8
  314. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  315. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  316. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  317. package/.next/server/app/dashboard/pxpipe.html +1 -1
  318. package/.next/server/app/dashboard/pxpipe.rsc +7 -7
  319. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
  320. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
  321. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  322. package/.next/server/app/dashboard/quota.html +2 -2
  323. package/.next/server/app/dashboard/quota.rsc +9 -9
  324. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  325. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  326. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  327. package/.next/server/app/dashboard/settings/pricing/page.js +1 -1
  328. package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  329. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  330. package/.next/server/app/dashboard/settings/pricing.html +1 -1
  331. package/.next/server/app/dashboard/settings/pricing.rsc +6 -6
  332. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  333. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  334. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
  335. package/.next/server/app/dashboard/token-saver.html +1 -1
  336. package/.next/server/app/dashboard/token-saver.rsc +7 -7
  337. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +7 -7
  338. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
  339. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  340. package/.next/server/app/dashboard/usage.html +2 -2
  341. package/.next/server/app/dashboard/usage.rsc +8 -8
  342. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  343. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  344. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  345. package/.next/server/app/dashboard.html +1 -1
  346. package/.next/server/app/dashboard.rsc +9 -9
  347. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  348. package/.next/server/app/dashboard.segments/_full.segment.rsc +9 -9
  349. package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  350. package/.next/server/app/index.html +1 -1
  351. package/.next/server/app/index.rsc +6 -6
  352. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  353. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  354. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  355. package/.next/server/app/landing/page.js +1 -1
  356. package/.next/server/app/landing/page.js.nft.json +1 -1
  357. package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  358. package/.next/server/app/landing.html +1 -1
  359. package/.next/server/app/landing.rsc +7 -7
  360. package/.next/server/app/landing.segments/_full.segment.rsc +7 -7
  361. package/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  362. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +7 -7
  363. package/.next/server/app/login/page.js +1 -1
  364. package/.next/server/app/login/page.js.nft.json +1 -1
  365. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  366. package/.next/server/app/login.html +1 -1
  367. package/.next/server/app/login.rsc +6 -6
  368. package/.next/server/app/login.segments/_full.segment.rsc +6 -6
  369. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  370. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  371. package/.next/server/app/manifest.webmanifest/route.js +1 -1
  372. package/.next/server/app/page.js +1 -1
  373. package/.next/server/app/page.js.nft.json +1 -1
  374. package/.next/server/app/page_client-reference-manifest.js +1 -1
  375. package/.next/server/app-paths-manifest.json +4 -5
  376. package/.next/server/chunks/1018.js +1 -0
  377. package/.next/server/chunks/1412.js +1 -1
  378. package/.next/server/chunks/1564.js +1 -1
  379. package/.next/server/chunks/1649.js +1 -0
  380. package/.next/server/chunks/1751.js +1 -0
  381. package/.next/server/chunks/1842.js +1 -0
  382. package/.next/server/chunks/2143.js +1 -1
  383. package/.next/server/chunks/2282.js +11 -13
  384. package/.next/server/chunks/{2706.js → 2338.js} +1 -1
  385. package/.next/server/chunks/2339.js +1 -1
  386. package/.next/server/chunks/2355.js +1 -0
  387. package/.next/server/chunks/2531.js +1 -0
  388. package/.next/server/chunks/2801.js +1 -1
  389. package/.next/server/chunks/31.js +1 -0
  390. package/.next/server/chunks/3671.js +1 -0
  391. package/.next/server/chunks/4301.js +1 -1
  392. package/.next/server/chunks/4364.js +1 -1
  393. package/.next/server/chunks/4915.js +1 -1
  394. package/.next/server/chunks/537.js +5 -9
  395. package/.next/server/chunks/6343.js +6 -6
  396. package/.next/server/chunks/6617.js +9 -0
  397. package/.next/server/chunks/6823.js +1 -1
  398. package/.next/server/chunks/6971.js +1 -0
  399. package/.next/server/chunks/7019.js +2 -2
  400. package/.next/server/chunks/7156.js +1 -1
  401. package/.next/server/chunks/7314.js +1 -0
  402. package/.next/server/chunks/7337.js +1 -0
  403. package/.next/server/chunks/7459.js +3 -3
  404. package/.next/server/chunks/7591.js +1 -0
  405. package/.next/server/chunks/7904.js +1 -0
  406. package/.next/server/chunks/8567.js +1 -1
  407. package/.next/server/chunks/8923.js +1 -1
  408. package/.next/server/chunks/9287.js +1 -1
  409. package/.next/server/chunks/9429.js +1 -1
  410. package/.next/server/chunks/9603.js +1 -1
  411. package/.next/server/instrumentation.js +1 -1
  412. package/.next/server/instrumentation.js.nft.json +1 -1
  413. package/.next/server/middleware-build-manifest.js +1 -1
  414. package/.next/server/pages/404.html +1 -1
  415. package/.next/server/pages/500.html +1 -1
  416. package/.next/server/server-reference-manifest.js +1 -1
  417. package/.next/server/server-reference-manifest.json +1 -1
  418. package/.next/static/EsP8l_VAPRRfBiiJPJqQe/_buildManifest.js +1 -0
  419. package/.next/static/chunks/1278-77eb0511471e063a.js +1 -0
  420. package/.next/static/chunks/1660-c4c1cfa3cb7c9b2e.js +1 -0
  421. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-c913b130003c1672.js → page-dd70f2cee9c910a9.js} +3 -3
  422. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-361bb54d1d354b4c.js +1 -0
  423. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-7340dad2b87640cf.js → page-a5e128afd334522f.js} +2 -2
  424. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-a41e2c8e26eb5956.js +21 -0
  425. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-feb4f47de991b067.js +1 -0
  426. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-f718869c90907a6a.js +1 -0
  427. package/.next/static/chunks/app/_global-error/page-f46617319221a4f8.js +1 -0
  428. package/.next/static/chunks/app/api/auth/login/route-f46617319221a4f8.js +1 -0
  429. package/.next/static/chunks/app/api/auth/logout/route-f46617319221a4f8.js +1 -0
  430. package/.next/static/chunks/app/api/auth/oidc/callback/route-f46617319221a4f8.js +1 -0
  431. package/.next/static/chunks/app/api/auth/oidc/start/route-f46617319221a4f8.js +1 -0
  432. package/.next/static/chunks/app/api/auth/oidc/test/route-f46617319221a4f8.js +1 -0
  433. package/.next/static/chunks/app/api/auth/reset-password/route-f46617319221a4f8.js +1 -0
  434. package/.next/static/chunks/app/api/auth/saml/acs/route-f46617319221a4f8.js +1 -0
  435. package/.next/static/chunks/app/api/auth/saml/metadata/route-f46617319221a4f8.js +1 -0
  436. package/.next/static/chunks/app/api/auth/saml/start/route-f46617319221a4f8.js +1 -0
  437. package/.next/static/chunks/app/api/auth/saml/test/route-f46617319221a4f8.js +1 -0
  438. package/.next/static/chunks/app/api/auth/status/route-f46617319221a4f8.js +1 -0
  439. package/.next/static/chunks/app/api/changelog/route-f46617319221a4f8.js +1 -0
  440. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-f46617319221a4f8.js +1 -0
  441. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-f46617319221a4f8.js +1 -0
  442. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-f46617319221a4f8.js +1 -0
  443. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-f46617319221a4f8.js +1 -0
  444. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-f46617319221a4f8.js +1 -0
  445. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-f46617319221a4f8.js +1 -0
  446. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-f46617319221a4f8.js +1 -0
  447. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-f46617319221a4f8.js +1 -0
  448. package/.next/static/chunks/app/api/combos/[id]/route-f46617319221a4f8.js +1 -0
  449. package/.next/static/chunks/app/api/combos/route-f46617319221a4f8.js +1 -0
  450. package/.next/static/chunks/app/api/headroom/extras/route-f46617319221a4f8.js +1 -0
  451. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-f46617319221a4f8.js +1 -0
  452. package/.next/static/chunks/app/api/headroom/restart/route-f46617319221a4f8.js +1 -0
  453. package/.next/static/chunks/app/api/headroom/start/route-f46617319221a4f8.js +1 -0
  454. package/.next/static/chunks/app/api/headroom/status/route-f46617319221a4f8.js +1 -0
  455. package/.next/static/chunks/app/api/headroom/stop/route-f46617319221a4f8.js +1 -0
  456. package/.next/static/chunks/app/api/health/route-f46617319221a4f8.js +1 -0
  457. package/.next/static/chunks/app/api/init/route-f46617319221a4f8.js +1 -0
  458. package/.next/static/chunks/app/api/keys/[id]/route-f46617319221a4f8.js +1 -0
  459. package/.next/static/chunks/app/api/keys/route-f46617319221a4f8.js +1 -0
  460. package/.next/static/chunks/app/api/locale/route-f46617319221a4f8.js +1 -0
  461. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-f46617319221a4f8.js +1 -0
  462. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-f46617319221a4f8.js +1 -0
  463. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-f46617319221a4f8.js +1 -0
  464. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-f46617319221a4f8.js +1 -0
  465. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-f46617319221a4f8.js +1 -0
  466. package/.next/static/chunks/app/api/media-providers/tts/voices/route-f46617319221a4f8.js +1 -0
  467. package/.next/static/chunks/app/api/models/alias/route-f46617319221a4f8.js +1 -0
  468. package/.next/static/chunks/app/api/models/availability/route-f46617319221a4f8.js +1 -0
  469. package/.next/static/chunks/app/api/models/catalog-sync/route-f46617319221a4f8.js +1 -0
  470. package/.next/static/chunks/app/api/models/custom/route-f46617319221a4f8.js +1 -0
  471. package/.next/static/chunks/app/api/models/disabled/route-f46617319221a4f8.js +1 -0
  472. package/.next/static/chunks/app/api/models/route-f46617319221a4f8.js +1 -0
  473. package/.next/static/chunks/app/api/models/test/route-f46617319221a4f8.js +1 -0
  474. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-f46617319221a4f8.js +1 -0
  475. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-f46617319221a4f8.js +1 -0
  476. package/.next/static/chunks/app/api/oauth/codex/import-token/route-f46617319221a4f8.js +1 -0
  477. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-f46617319221a4f8.js +1 -0
  478. package/.next/static/chunks/app/api/oauth/cursor/import/route-f46617319221a4f8.js +1 -0
  479. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-f46617319221a4f8.js +1 -0
  480. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-f46617319221a4f8.js +1 -0
  481. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-f46617319221a4f8.js +1 -0
  482. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-f46617319221a4f8.js +1 -0
  483. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-f46617319221a4f8.js +1 -0
  484. package/.next/static/chunks/app/api/pricing/route-f46617319221a4f8.js +1 -0
  485. package/.next/static/chunks/app/api/provider-nodes/[id]/route-f46617319221a4f8.js +1 -0
  486. package/.next/static/chunks/app/api/provider-nodes/route-f46617319221a4f8.js +1 -0
  487. package/.next/static/chunks/app/api/provider-nodes/validate/route-f46617319221a4f8.js +1 -0
  488. package/.next/static/chunks/app/api/providers/[id]/models/route-f46617319221a4f8.js +1 -0
  489. package/.next/static/chunks/app/api/providers/[id]/route-f46617319221a4f8.js +1 -0
  490. package/.next/static/chunks/app/api/providers/[id]/test/route-f46617319221a4f8.js +1 -0
  491. package/.next/static/chunks/app/api/providers/[id]/test-models/route-f46617319221a4f8.js +1 -0
  492. package/.next/static/chunks/app/api/providers/client/route-f46617319221a4f8.js +1 -0
  493. package/.next/static/chunks/app/api/providers/kilo/free-models/route-f46617319221a4f8.js +1 -0
  494. package/.next/static/chunks/app/api/providers/route-f46617319221a4f8.js +1 -0
  495. package/.next/static/chunks/app/api/providers/suggested-models/route-f46617319221a4f8.js +1 -0
  496. package/.next/static/chunks/app/api/providers/test-batch/route-f46617319221a4f8.js +1 -0
  497. package/.next/static/chunks/app/api/providers/validate/route-f46617319221a4f8.js +1 -0
  498. package/.next/static/chunks/app/api/proxy-pools/[id]/route-f46617319221a4f8.js +1 -0
  499. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-f46617319221a4f8.js +1 -0
  500. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-f46617319221a4f8.js +1 -0
  501. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-f46617319221a4f8.js +1 -0
  502. package/.next/static/chunks/app/api/proxy-pools/route-f46617319221a4f8.js +1 -0
  503. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-f46617319221a4f8.js +1 -0
  504. package/.next/static/chunks/app/api/pxpipe/health/route-f46617319221a4f8.js +1 -0
  505. package/.next/static/chunks/app/api/pxpipe/install/route-f46617319221a4f8.js +1 -0
  506. package/.next/static/chunks/app/api/pxpipe/logs/route-f46617319221a4f8.js +1 -0
  507. package/.next/static/chunks/app/api/pxpipe/restart/route-f46617319221a4f8.js +1 -0
  508. package/.next/static/chunks/app/api/pxpipe/start/route-f46617319221a4f8.js +1 -0
  509. package/.next/static/chunks/app/api/pxpipe/stats/route-f46617319221a4f8.js +1 -0
  510. package/.next/static/chunks/app/api/pxpipe/status/route-f46617319221a4f8.js +1 -0
  511. package/.next/static/chunks/app/api/pxpipe/stop/route-f46617319221a4f8.js +1 -0
  512. package/.next/static/chunks/app/api/settings/database/route-f46617319221a4f8.js +1 -0
  513. package/.next/static/chunks/app/api/settings/proxy-test/route-f46617319221a4f8.js +1 -0
  514. package/.next/static/chunks/app/api/settings/require-login/route-f46617319221a4f8.js +1 -0
  515. package/.next/static/chunks/app/api/settings/route-f46617319221a4f8.js +1 -0
  516. package/.next/static/chunks/app/api/shutdown/route-f46617319221a4f8.js +1 -0
  517. package/.next/static/chunks/app/api/tags/route-f46617319221a4f8.js +1 -0
  518. package/.next/static/chunks/app/api/translator/console-logs/route-f46617319221a4f8.js +1 -0
  519. package/.next/static/chunks/app/api/translator/console-logs/stream/route-f46617319221a4f8.js +1 -0
  520. package/.next/static/chunks/app/api/translator/load/route-f46617319221a4f8.js +1 -0
  521. package/.next/static/chunks/app/api/translator/save/route-f46617319221a4f8.js +1 -0
  522. package/.next/static/chunks/app/api/translator/send/route-f46617319221a4f8.js +1 -0
  523. package/.next/static/chunks/app/api/translator/translate/route-f46617319221a4f8.js +1 -0
  524. package/.next/static/chunks/app/api/tunnel/disable/route-f46617319221a4f8.js +1 -0
  525. package/.next/static/chunks/app/api/tunnel/enable/route-f46617319221a4f8.js +1 -0
  526. package/.next/static/chunks/app/api/tunnel/status/route-f46617319221a4f8.js +1 -0
  527. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-f46617319221a4f8.js +1 -0
  528. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-f46617319221a4f8.js +1 -0
  529. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-f46617319221a4f8.js +1 -0
  530. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-f46617319221a4f8.js +1 -0
  531. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-f46617319221a4f8.js +1 -0
  532. package/.next/static/chunks/app/api/usage/[connectionId]/route-f46617319221a4f8.js +1 -0
  533. package/.next/static/chunks/app/api/usage/chart/route-f46617319221a4f8.js +1 -0
  534. package/.next/static/chunks/app/api/usage/health/route-f46617319221a4f8.js +1 -0
  535. package/.next/static/chunks/app/api/usage/history/route-f46617319221a4f8.js +1 -0
  536. package/.next/static/chunks/app/api/usage/logs/route-f46617319221a4f8.js +1 -0
  537. package/.next/static/chunks/app/api/usage/providers/route-f46617319221a4f8.js +1 -0
  538. package/.next/static/chunks/app/api/usage/request-details/route-f46617319221a4f8.js +1 -0
  539. package/.next/static/chunks/app/api/usage/request-logs/route-f46617319221a4f8.js +1 -0
  540. package/.next/static/chunks/app/api/usage/stats/route-f46617319221a4f8.js +1 -0
  541. package/.next/static/chunks/app/api/usage/stream/route-f46617319221a4f8.js +1 -0
  542. package/.next/static/chunks/app/api/v1/api/chat/route-f46617319221a4f8.js +1 -0
  543. package/.next/static/chunks/app/api/v1/audio/speech/route-f46617319221a4f8.js +1 -0
  544. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-f46617319221a4f8.js +1 -0
  545. package/.next/static/chunks/app/api/v1/audio/voices/route-f46617319221a4f8.js +1 -0
  546. package/.next/static/chunks/app/api/v1/chat/completions/route-f46617319221a4f8.js +1 -0
  547. package/.next/static/chunks/app/api/v1/embeddings/route-f46617319221a4f8.js +1 -0
  548. package/.next/static/chunks/app/api/v1/images/generations/route-f46617319221a4f8.js +1 -0
  549. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-f46617319221a4f8.js +1 -0
  550. package/.next/static/chunks/app/api/v1/messages/route-f46617319221a4f8.js +1 -0
  551. package/.next/static/chunks/app/api/v1/models/[...model]/route-f46617319221a4f8.js +1 -0
  552. package/.next/static/chunks/app/api/v1/models/info/route-f46617319221a4f8.js +1 -0
  553. package/.next/static/chunks/app/api/v1/models/route-f46617319221a4f8.js +1 -0
  554. package/.next/static/chunks/app/api/v1/responses/compact/route-f46617319221a4f8.js +1 -0
  555. package/.next/static/chunks/app/api/v1/responses/route-f46617319221a4f8.js +1 -0
  556. package/.next/static/chunks/app/api/v1/route-f46617319221a4f8.js +1 -0
  557. package/.next/static/chunks/app/api/v1/search/route-f46617319221a4f8.js +1 -0
  558. package/.next/static/chunks/app/api/v1/systemone/route-f46617319221a4f8.js +1 -0
  559. package/.next/static/chunks/app/api/v1/videos/[id]/route-f46617319221a4f8.js +1 -0
  560. package/.next/static/chunks/app/api/v1/videos/edits/route-f46617319221a4f8.js +1 -0
  561. package/.next/static/chunks/app/api/v1/videos/extensions/route-f46617319221a4f8.js +1 -0
  562. package/.next/static/chunks/app/api/v1/videos/generations/route-f46617319221a4f8.js +1 -0
  563. package/.next/static/chunks/app/api/v1/web/fetch/route-f46617319221a4f8.js +1 -0
  564. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-f46617319221a4f8.js +1 -0
  565. package/.next/static/chunks/app/api/v1beta/models/route-f46617319221a4f8.js +1 -0
  566. package/.next/static/chunks/app/api/version/route-f46617319221a4f8.js +1 -0
  567. package/.next/static/chunks/app/api/version/shutdown/route-f46617319221a4f8.js +1 -0
  568. package/.next/static/chunks/app/api/version/update/route-f46617319221a4f8.js +1 -0
  569. package/.next/static/chunks/app/landing/{page-a76ba2642bd02bf5.js → page-1c5aa0e05b21c61a.js} +1 -1
  570. package/.next/static/chunks/app/manifest.webmanifest/route-f46617319221a4f8.js +1 -0
  571. package/.next/static/chunks/app/page-f46617319221a4f8.js +1 -0
  572. package/.next/static/chunks/next/dist/client/components/builtin/app-error-f46617319221a4f8.js +1 -0
  573. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-f46617319221a4f8.js +1 -0
  574. package/.next/static/chunks/next/dist/client/components/builtin/not-found-f46617319221a4f8.js +1 -0
  575. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-f46617319221a4f8.js +1 -0
  576. package/.next/static/css/e5f3812777d2d9e9.css +1 -0
  577. package/CHANGELOG.md +20 -0
  578. package/open-sse/AGENTS.md +1 -1
  579. package/open-sse/config/errorConfig.js +4 -0
  580. package/open-sse/config/opencodeErrors.js +59 -0
  581. package/open-sse/config/opencodeGo.js +34 -0
  582. package/open-sse/config/providerModels.js +13 -0
  583. package/open-sse/config/providers.js +0 -11
  584. package/open-sse/executors/base.js +4 -1
  585. package/open-sse/executors/index.js +0 -3
  586. package/open-sse/executors/opencode-go.js +28 -103
  587. package/open-sse/executors/opencode-zen.js +31 -105
  588. package/open-sse/executors/opencode.js +40 -106
  589. package/open-sse/executors/opencodeShared.js +146 -0
  590. package/open-sse/executors/zed.js +307 -70
  591. package/open-sse/handlers/chatCore/claudeMessageBody.js +357 -0
  592. package/open-sse/handlers/chatCore/nonStreamingHandler.js +36 -110
  593. package/open-sse/handlers/chatCore/sseToJsonHandler.js +147 -4
  594. package/open-sse/handlers/chatCore.js +48 -12
  595. package/open-sse/handlers/embeddingProviders/index.js +0 -1
  596. package/open-sse/handlers/imageProviders/index.js +0 -4
  597. package/open-sse/handlers/imageProviders/openai.js +1 -1
  598. package/open-sse/handlers/search/callers.js +0 -28
  599. package/open-sse/handlers/search/chatSearch.js +1 -57
  600. package/open-sse/handlers/search/normalizers.js +0 -49
  601. package/open-sse/handlers/sttCore.js +0 -17
  602. package/open-sse/handlers/ttsCore.js +1 -1
  603. package/open-sse/handlers/ttsProviders/genericFormats.js +0 -35
  604. package/open-sse/providers/registry/index.js +14 -53
  605. package/open-sse/providers/registry/opencode-go.js +15 -6
  606. package/open-sse/providers/registry/opencode-zen.js +25 -9
  607. package/open-sse/providers/registry/opencode.js +5 -3
  608. package/open-sse/services/accountFallback.js +1 -0
  609. package/open-sse/services/opencodeGoProbe.js +39 -0
  610. package/open-sse/services/usage/glm.js +6 -12
  611. package/open-sse/services/usage/misc.js +1 -92
  612. package/open-sse/services/usage/zed.js +18 -3
  613. package/open-sse/services/usage.js +2 -14
  614. package/open-sse/shared/zedAuth.js +53 -5
  615. package/open-sse/translator/concerns/classifier.js +70 -0
  616. package/open-sse/translator/concerns/thinkingUnified.js +18 -6
  617. package/open-sse/translator/formats/claude.js +47 -19
  618. package/open-sse/translator/request/claude-to-openai.js +20 -0
  619. package/open-sse/translator/request/openai-to-claude.js +11 -0
  620. package/open-sse/utils/error.js +37 -3
  621. package/open-sse/utils/opencodeErrors.js +63 -0
  622. package/open-sse/utils/opencodeFingerprint.js +122 -23
  623. package/open-sse/utils/opencodeFreeUsage.js +57 -12
  624. package/open-sse/utils/usageTracking.js +5 -3
  625. package/package.json +2 -2
  626. package/src/app/(dashboard)/dashboard/cli-tools/components/cards/ClaudeToolCard.tsx +12 -0
  627. package/src/app/(dashboard)/dashboard/console-log/ConsoleLogClient.tsx +10 -0
  628. package/src/app/(dashboard)/dashboard/providers/[id]/ModelRow.tsx +14 -0
  629. package/src/app/(dashboard)/dashboard/providers/[id]/OpenCodeGoConnectionCard.tsx +113 -0
  630. package/src/app/(dashboard)/dashboard/providers/[id]/page.tsx +11 -2
  631. package/src/app/(dashboard)/dashboard/providers/components/ModelsCard.tsx +14 -5
  632. package/src/app/(dashboard)/dashboard/providers/page.tsx +33 -45
  633. package/src/app/(dashboard)/dashboard/usage/components/ProviderLimits/utils.ts +0 -33
  634. package/src/app/api/cli-tools/claude-settings/route.js +10 -0
  635. package/src/app/api/oauth/[provider]/[action]/route.js +2 -0
  636. package/src/app/api/providers/[id]/models/route.js +0 -3
  637. package/src/app/api/providers/[id]/test/testUtils.js +18 -103
  638. package/src/app/api/providers/validate/route.js +9 -37
  639. package/src/app/api/usage/[connectionId]/route.js +1 -1
  640. package/src/components/app-sidebar.tsx +1 -0
  641. package/src/lib/modelCatalog/sync.js +2 -4
  642. package/src/shared/components/EditConnectionModal.tsx +1 -1
  643. package/src/shared/constants/cliTools.js +9 -9
  644. package/src/shared/constants/models.ts +2 -0
  645. package/src/shared/constants/ttsProviders.ts +0 -21
  646. package/src/shared/utils/providerIcon.ts +0 -12
  647. package/src/sse/services/model.ts +2 -12
  648. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +0 -1
  649. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +0 -1
  650. package/.next/server/app/api/media-providers/tts/minimax/voices/route_client-reference-manifest.js +0 -1
  651. package/.next/server/chunks/1011.js +0 -1
  652. package/.next/server/chunks/1194.js +0 -1
  653. package/.next/server/chunks/1289.js +0 -1
  654. package/.next/server/chunks/1633.js +0 -1
  655. package/.next/server/chunks/3425.js +0 -1
  656. package/.next/server/chunks/4129.js +0 -1
  657. package/.next/server/chunks/5496.js +0 -1
  658. package/.next/server/chunks/5761.js +0 -1
  659. package/.next/server/chunks/6056.js +0 -1
  660. package/.next/server/chunks/7816.js +0 -1
  661. package/.next/server/chunks/8940.js +0 -1
  662. package/.next/static/chunks/1278-1bef1ffb32ea7f41.js +0 -1
  663. package/.next/static/chunks/1660-25564899e7912146.js +0 -1
  664. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/page-58a29f3cb409597a.js +0 -1
  665. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-fab6f4b4cccc1a6f.js +0 -21
  666. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-9054f870a5e0f5c6.js +0 -1
  667. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-61780f0a2b494680.js +0 -1
  668. package/.next/static/chunks/app/_global-error/page-9a2a13ac6b89ba91.js +0 -1
  669. package/.next/static/chunks/app/api/auth/login/route-9a2a13ac6b89ba91.js +0 -1
  670. package/.next/static/chunks/app/api/auth/logout/route-9a2a13ac6b89ba91.js +0 -1
  671. package/.next/static/chunks/app/api/auth/oidc/callback/route-9a2a13ac6b89ba91.js +0 -1
  672. package/.next/static/chunks/app/api/auth/oidc/start/route-9a2a13ac6b89ba91.js +0 -1
  673. package/.next/static/chunks/app/api/auth/oidc/test/route-9a2a13ac6b89ba91.js +0 -1
  674. package/.next/static/chunks/app/api/auth/reset-password/route-9a2a13ac6b89ba91.js +0 -1
  675. package/.next/static/chunks/app/api/auth/saml/acs/route-9a2a13ac6b89ba91.js +0 -1
  676. package/.next/static/chunks/app/api/auth/saml/metadata/route-9a2a13ac6b89ba91.js +0 -1
  677. package/.next/static/chunks/app/api/auth/saml/start/route-9a2a13ac6b89ba91.js +0 -1
  678. package/.next/static/chunks/app/api/auth/saml/test/route-9a2a13ac6b89ba91.js +0 -1
  679. package/.next/static/chunks/app/api/auth/status/route-9a2a13ac6b89ba91.js +0 -1
  680. package/.next/static/chunks/app/api/changelog/route-9a2a13ac6b89ba91.js +0 -1
  681. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-9a2a13ac6b89ba91.js +0 -1
  682. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-9a2a13ac6b89ba91.js +0 -1
  683. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-9a2a13ac6b89ba91.js +0 -1
  684. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-9a2a13ac6b89ba91.js +0 -1
  685. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-9a2a13ac6b89ba91.js +0 -1
  686. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-9a2a13ac6b89ba91.js +0 -1
  687. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-9a2a13ac6b89ba91.js +0 -1
  688. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-9a2a13ac6b89ba91.js +0 -1
  689. package/.next/static/chunks/app/api/combos/[id]/route-9a2a13ac6b89ba91.js +0 -1
  690. package/.next/static/chunks/app/api/combos/route-9a2a13ac6b89ba91.js +0 -1
  691. package/.next/static/chunks/app/api/headroom/extras/route-9a2a13ac6b89ba91.js +0 -1
  692. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-9a2a13ac6b89ba91.js +0 -1
  693. package/.next/static/chunks/app/api/headroom/restart/route-9a2a13ac6b89ba91.js +0 -1
  694. package/.next/static/chunks/app/api/headroom/start/route-9a2a13ac6b89ba91.js +0 -1
  695. package/.next/static/chunks/app/api/headroom/status/route-9a2a13ac6b89ba91.js +0 -1
  696. package/.next/static/chunks/app/api/headroom/stop/route-9a2a13ac6b89ba91.js +0 -1
  697. package/.next/static/chunks/app/api/health/route-9a2a13ac6b89ba91.js +0 -1
  698. package/.next/static/chunks/app/api/init/route-9a2a13ac6b89ba91.js +0 -1
  699. package/.next/static/chunks/app/api/keys/[id]/route-9a2a13ac6b89ba91.js +0 -1
  700. package/.next/static/chunks/app/api/keys/route-9a2a13ac6b89ba91.js +0 -1
  701. package/.next/static/chunks/app/api/locale/route-9a2a13ac6b89ba91.js +0 -1
  702. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-9a2a13ac6b89ba91.js +0 -1
  703. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-9a2a13ac6b89ba91.js +0 -1
  704. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-9a2a13ac6b89ba91.js +0 -1
  705. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-9a2a13ac6b89ba91.js +0 -1
  706. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-9a2a13ac6b89ba91.js +0 -1
  707. package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-9a2a13ac6b89ba91.js +0 -1
  708. package/.next/static/chunks/app/api/media-providers/tts/voices/route-9a2a13ac6b89ba91.js +0 -1
  709. package/.next/static/chunks/app/api/models/alias/route-9a2a13ac6b89ba91.js +0 -1
  710. package/.next/static/chunks/app/api/models/availability/route-9a2a13ac6b89ba91.js +0 -1
  711. package/.next/static/chunks/app/api/models/catalog-sync/route-9a2a13ac6b89ba91.js +0 -1
  712. package/.next/static/chunks/app/api/models/custom/route-9a2a13ac6b89ba91.js +0 -1
  713. package/.next/static/chunks/app/api/models/disabled/route-9a2a13ac6b89ba91.js +0 -1
  714. package/.next/static/chunks/app/api/models/route-9a2a13ac6b89ba91.js +0 -1
  715. package/.next/static/chunks/app/api/models/test/route-9a2a13ac6b89ba91.js +0 -1
  716. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-9a2a13ac6b89ba91.js +0 -1
  717. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
  718. package/.next/static/chunks/app/api/oauth/codex/import-token/route-9a2a13ac6b89ba91.js +0 -1
  719. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-9a2a13ac6b89ba91.js +0 -1
  720. package/.next/static/chunks/app/api/oauth/cursor/import/route-9a2a13ac6b89ba91.js +0 -1
  721. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-9a2a13ac6b89ba91.js +0 -1
  722. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-9a2a13ac6b89ba91.js +0 -1
  723. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-9a2a13ac6b89ba91.js +0 -1
  724. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-9a2a13ac6b89ba91.js +0 -1
  725. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-9a2a13ac6b89ba91.js +0 -1
  726. package/.next/static/chunks/app/api/pricing/route-9a2a13ac6b89ba91.js +0 -1
  727. package/.next/static/chunks/app/api/provider-nodes/[id]/route-9a2a13ac6b89ba91.js +0 -1
  728. package/.next/static/chunks/app/api/provider-nodes/route-9a2a13ac6b89ba91.js +0 -1
  729. package/.next/static/chunks/app/api/provider-nodes/validate/route-9a2a13ac6b89ba91.js +0 -1
  730. package/.next/static/chunks/app/api/providers/[id]/models/route-9a2a13ac6b89ba91.js +0 -1
  731. package/.next/static/chunks/app/api/providers/[id]/route-9a2a13ac6b89ba91.js +0 -1
  732. package/.next/static/chunks/app/api/providers/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
  733. package/.next/static/chunks/app/api/providers/[id]/test-models/route-9a2a13ac6b89ba91.js +0 -1
  734. package/.next/static/chunks/app/api/providers/client/route-9a2a13ac6b89ba91.js +0 -1
  735. package/.next/static/chunks/app/api/providers/kilo/free-models/route-9a2a13ac6b89ba91.js +0 -1
  736. package/.next/static/chunks/app/api/providers/route-9a2a13ac6b89ba91.js +0 -1
  737. package/.next/static/chunks/app/api/providers/suggested-models/route-9a2a13ac6b89ba91.js +0 -1
  738. package/.next/static/chunks/app/api/providers/test-batch/route-9a2a13ac6b89ba91.js +0 -1
  739. package/.next/static/chunks/app/api/providers/validate/route-9a2a13ac6b89ba91.js +0 -1
  740. package/.next/static/chunks/app/api/proxy-pools/[id]/route-9a2a13ac6b89ba91.js +0 -1
  741. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-9a2a13ac6b89ba91.js +0 -1
  742. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-9a2a13ac6b89ba91.js +0 -1
  743. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-9a2a13ac6b89ba91.js +0 -1
  744. package/.next/static/chunks/app/api/proxy-pools/route-9a2a13ac6b89ba91.js +0 -1
  745. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-9a2a13ac6b89ba91.js +0 -1
  746. package/.next/static/chunks/app/api/pxpipe/health/route-9a2a13ac6b89ba91.js +0 -1
  747. package/.next/static/chunks/app/api/pxpipe/install/route-9a2a13ac6b89ba91.js +0 -1
  748. package/.next/static/chunks/app/api/pxpipe/logs/route-9a2a13ac6b89ba91.js +0 -1
  749. package/.next/static/chunks/app/api/pxpipe/restart/route-9a2a13ac6b89ba91.js +0 -1
  750. package/.next/static/chunks/app/api/pxpipe/start/route-9a2a13ac6b89ba91.js +0 -1
  751. package/.next/static/chunks/app/api/pxpipe/stats/route-9a2a13ac6b89ba91.js +0 -1
  752. package/.next/static/chunks/app/api/pxpipe/status/route-9a2a13ac6b89ba91.js +0 -1
  753. package/.next/static/chunks/app/api/pxpipe/stop/route-9a2a13ac6b89ba91.js +0 -1
  754. package/.next/static/chunks/app/api/settings/database/route-9a2a13ac6b89ba91.js +0 -1
  755. package/.next/static/chunks/app/api/settings/proxy-test/route-9a2a13ac6b89ba91.js +0 -1
  756. package/.next/static/chunks/app/api/settings/require-login/route-9a2a13ac6b89ba91.js +0 -1
  757. package/.next/static/chunks/app/api/settings/route-9a2a13ac6b89ba91.js +0 -1
  758. package/.next/static/chunks/app/api/shutdown/route-9a2a13ac6b89ba91.js +0 -1
  759. package/.next/static/chunks/app/api/tags/route-9a2a13ac6b89ba91.js +0 -1
  760. package/.next/static/chunks/app/api/translator/console-logs/route-9a2a13ac6b89ba91.js +0 -1
  761. package/.next/static/chunks/app/api/translator/console-logs/stream/route-9a2a13ac6b89ba91.js +0 -1
  762. package/.next/static/chunks/app/api/translator/load/route-9a2a13ac6b89ba91.js +0 -1
  763. package/.next/static/chunks/app/api/translator/save/route-9a2a13ac6b89ba91.js +0 -1
  764. package/.next/static/chunks/app/api/translator/send/route-9a2a13ac6b89ba91.js +0 -1
  765. package/.next/static/chunks/app/api/translator/translate/route-9a2a13ac6b89ba91.js +0 -1
  766. package/.next/static/chunks/app/api/tunnel/disable/route-9a2a13ac6b89ba91.js +0 -1
  767. package/.next/static/chunks/app/api/tunnel/enable/route-9a2a13ac6b89ba91.js +0 -1
  768. package/.next/static/chunks/app/api/tunnel/status/route-9a2a13ac6b89ba91.js +0 -1
  769. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-9a2a13ac6b89ba91.js +0 -1
  770. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-9a2a13ac6b89ba91.js +0 -1
  771. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-9a2a13ac6b89ba91.js +0 -1
  772. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-9a2a13ac6b89ba91.js +0 -1
  773. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-9a2a13ac6b89ba91.js +0 -1
  774. package/.next/static/chunks/app/api/usage/[connectionId]/route-9a2a13ac6b89ba91.js +0 -1
  775. package/.next/static/chunks/app/api/usage/chart/route-9a2a13ac6b89ba91.js +0 -1
  776. package/.next/static/chunks/app/api/usage/health/route-9a2a13ac6b89ba91.js +0 -1
  777. package/.next/static/chunks/app/api/usage/history/route-9a2a13ac6b89ba91.js +0 -1
  778. package/.next/static/chunks/app/api/usage/logs/route-9a2a13ac6b89ba91.js +0 -1
  779. package/.next/static/chunks/app/api/usage/providers/route-9a2a13ac6b89ba91.js +0 -1
  780. package/.next/static/chunks/app/api/usage/request-details/route-9a2a13ac6b89ba91.js +0 -1
  781. package/.next/static/chunks/app/api/usage/request-logs/route-9a2a13ac6b89ba91.js +0 -1
  782. package/.next/static/chunks/app/api/usage/stats/route-9a2a13ac6b89ba91.js +0 -1
  783. package/.next/static/chunks/app/api/usage/stream/route-9a2a13ac6b89ba91.js +0 -1
  784. package/.next/static/chunks/app/api/v1/api/chat/route-9a2a13ac6b89ba91.js +0 -1
  785. package/.next/static/chunks/app/api/v1/audio/speech/route-9a2a13ac6b89ba91.js +0 -1
  786. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-9a2a13ac6b89ba91.js +0 -1
  787. package/.next/static/chunks/app/api/v1/audio/voices/route-9a2a13ac6b89ba91.js +0 -1
  788. package/.next/static/chunks/app/api/v1/chat/completions/route-9a2a13ac6b89ba91.js +0 -1
  789. package/.next/static/chunks/app/api/v1/embeddings/route-9a2a13ac6b89ba91.js +0 -1
  790. package/.next/static/chunks/app/api/v1/images/generations/route-9a2a13ac6b89ba91.js +0 -1
  791. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-9a2a13ac6b89ba91.js +0 -1
  792. package/.next/static/chunks/app/api/v1/messages/route-9a2a13ac6b89ba91.js +0 -1
  793. package/.next/static/chunks/app/api/v1/models/[...model]/route-9a2a13ac6b89ba91.js +0 -1
  794. package/.next/static/chunks/app/api/v1/models/info/route-9a2a13ac6b89ba91.js +0 -1
  795. package/.next/static/chunks/app/api/v1/models/route-9a2a13ac6b89ba91.js +0 -1
  796. package/.next/static/chunks/app/api/v1/responses/compact/route-9a2a13ac6b89ba91.js +0 -1
  797. package/.next/static/chunks/app/api/v1/responses/route-9a2a13ac6b89ba91.js +0 -1
  798. package/.next/static/chunks/app/api/v1/route-9a2a13ac6b89ba91.js +0 -1
  799. package/.next/static/chunks/app/api/v1/search/route-9a2a13ac6b89ba91.js +0 -1
  800. package/.next/static/chunks/app/api/v1/systemone/route-9a2a13ac6b89ba91.js +0 -1
  801. package/.next/static/chunks/app/api/v1/videos/[id]/route-9a2a13ac6b89ba91.js +0 -1
  802. package/.next/static/chunks/app/api/v1/videos/edits/route-9a2a13ac6b89ba91.js +0 -1
  803. package/.next/static/chunks/app/api/v1/videos/extensions/route-9a2a13ac6b89ba91.js +0 -1
  804. package/.next/static/chunks/app/api/v1/videos/generations/route-9a2a13ac6b89ba91.js +0 -1
  805. package/.next/static/chunks/app/api/v1/web/fetch/route-9a2a13ac6b89ba91.js +0 -1
  806. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-9a2a13ac6b89ba91.js +0 -1
  807. package/.next/static/chunks/app/api/v1beta/models/route-9a2a13ac6b89ba91.js +0 -1
  808. package/.next/static/chunks/app/api/version/route-9a2a13ac6b89ba91.js +0 -1
  809. package/.next/static/chunks/app/api/version/shutdown/route-9a2a13ac6b89ba91.js +0 -1
  810. package/.next/static/chunks/app/api/version/update/route-9a2a13ac6b89ba91.js +0 -1
  811. package/.next/static/chunks/app/manifest.webmanifest/route-9a2a13ac6b89ba91.js +0 -1
  812. package/.next/static/chunks/app/page-9a2a13ac6b89ba91.js +0 -1
  813. package/.next/static/chunks/next/dist/client/components/builtin/app-error-9a2a13ac6b89ba91.js +0 -1
  814. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-9a2a13ac6b89ba91.js +0 -1
  815. package/.next/static/chunks/next/dist/client/components/builtin/not-found-9a2a13ac6b89ba91.js +0 -1
  816. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9a2a13ac6b89ba91.js +0 -1
  817. package/.next/static/css/efaf98e3b295f727.css +0 -1
  818. package/.next/static/wBARQPScPhD6SLn7WQvI9/_buildManifest.js +0 -1
  819. package/open-sse/executors/xiaomi-tokenplan.js +0 -20
  820. package/open-sse/handlers/imageProviders/huggingface.js +0 -23
  821. package/open-sse/handlers/ttsProviders/minimax.js +0 -63
  822. package/open-sse/providers/registry/fish-audio.js +0 -31
  823. package/open-sse/providers/registry/glm-cn.js +0 -39
  824. package/open-sse/providers/registry/groq.js +0 -62
  825. package/open-sse/providers/registry/huggingface.js +0 -40
  826. package/open-sse/providers/registry/minimax-cn.js +0 -82
  827. package/open-sse/providers/registry/minimax.js +0 -94
  828. package/open-sse/providers/registry/siliconflow.js +0 -39
  829. package/open-sse/providers/registry/vercel-ai-gateway.js +0 -42
  830. package/open-sse/providers/registry/xiaomi-tokenplan.js +0 -66
  831. package/open-sse/providers/registry/xquik.js +0 -31
  832. package/open-sse/services/usage/groq.js +0 -133
  833. package/open-sse/services/usage/minimax.js +0 -297
  834. package/public/providers/fish-audio.png +0 -0
  835. package/public/providers/glm-cn.png +0 -0
  836. package/public/providers/groq.png +0 -0
  837. package/public/providers/huggingface.png +0 -0
  838. package/public/providers/minimax-cn.png +0 -0
  839. package/public/providers/minimax.png +0 -0
  840. package/public/providers/siliconflow.png +0 -0
  841. package/public/providers/vercel-ai-gateway.png +0 -0
  842. package/public/providers/vercel.png +0 -0
  843. package/public/providers/xiaomi-tokenplan.png +0 -0
  844. package/public/providers/xquik.png +0 -0
  845. package/src/app/api/media-providers/tts/minimax/voices/route.js +0 -126
  846. /package/.next/static/{wBARQPScPhD6SLn7WQvI9 → EsP8l_VAPRRfBiiJPJqQe}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1660],{13794:(e,a,i)=>{i.d(a,{Q2:()=>y,DI:()=>h,fg:()=>d,MA:()=>k,IS:()=>r,nJ:()=>m,rj:()=>c,zN:()=>p,JH:()=>u,wb:()=>F,br:()=>l,wG:()=>v,zt:()=>b,o5:()=>M,gb:()=>f,mq:()=>g});var t=i(38891);let o="⚠️ Risk Notice: This provider uses a subscription/OAuth session not officially licensed for proxy/router use. Account may be restricted or banned. Use at your own risk.";Object.fromEntries(t.A.filter(e=>e.display).map(e=>{let a;return[e.id,"RISK_NOTICE"===(a=e.display).deprecationNotice?{...a,deprecationNotice:o}:a]}));let n=["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","credentialFallback","systemoneConfig","modelsFetcher","mediaPriority","hiddenKinds"],s=e=>Object.fromEntries(t.A.filter(a=>a.category===e).map(e=>[e.id,function(e){let a={};for(let i of(e.media&&Object.assign(a,e.media),n))void 0!==e[i]&&(a[i]=e[i]);let i={...e.display||{}};return"RISK_NOTICE"===i.deprecationNotice&&(i.deprecationNotice=o),{...i,id:e.id,alias:e.uiAlias||e.alias,...e.hidden?{hidden:!0}:{},...a,...void 0!==e.priority?{priority:e.priority}:{},...e.hasFree?{hasFree:!0}:{},...e.thinkingConfig?{thinkingConfig:e.thinkingConfig}:{},...e.regions?{regions:e.regions,defaultRegion:e.defaultRegion}:{},...e.hasProviderSpecificData?{hasProviderSpecificData:!0}:{},...e.noAuth?{noAuth:!0}:{},...e.passthroughModels?{passthroughModels:!0}:{},...e.hasOAuth?{hasOAuth:!0}:{},...e.authModes?{authModes:e.authModes}:{},...e.authType?{authType:e.authType}:{},...e.authHint?{authHint:e.authHint}:{}}}(e)])),r=s("free"),m=s("freeTier"),p=s("oauth"),d=s("apikey"),l=s("webCookie"),c=[{id:"embedding",label:"Embedding",icon:"data_array",endpoint:{method:"POST",path:"/v1/embeddings"}},{id:"image",label:"Text to Image",icon:"brush",endpoint:{method:"POST",path:"/v1/images/generations"}},{id:"imageToText",label:"Image to Text",icon:"image_search",endpoint:{method:"POST",path:"/v1/images/understanding"}},{id:"tts",label:"Text To Speech",icon:"record_voice_over",endpoint:{method:"POST",path:"/v1/audio/speech"}},{id:"stt",label:"Speech To Text",icon:"mic",endpoint:{method:"POST",path:"/v1/audio/transcriptions"}},{id:"webSearch",label:"Web Search",icon:"travel_explore",endpoint:{method:"POST",path:"/v1/search"}},{id:"webFetch",label:"Web Fetch",icon:"language",endpoint:{method:"POST",path:"/v1/web/fetch"}},{id:"video",label:"Video",icon:"movie",endpoint:{method:"POST",path:"/v1/videos/generations"}},{id:"music",label:"Music",icon:"music_note",endpoint:{method:"POST",path:"/v1/audio/music"}},{id:"systemone",label:"System One",icon:"bolt",endpoint:{method:"POST",path:"/v1/systemone"},isNew:!0}],u="openai-compatible-",h="anthropic-compatible-";function g(e){return"string"==typeof e&&e.startsWith(u)}function f(e){return"string"==typeof e&&e.startsWith(h)}let y={...r,...m,...p,...d,...l},k={oauth:{id:"oauth"},apikey:{id:"apikey"},cookie:{id:"cookie"}};function b(e){for(let a of Object.values(y))if(a.alias===e||a.id===e)return a;return null}function v(e){let a=y[e];return a?.alias||e}function M(e){return Object.values(y).filter(a=>!(!(a.serviceKinds??["llm"]).includes(e)||a.hidden||a.hiddenKinds?.includes(e))).sort((e,a)=>(e.priority??e.mediaPriority??999)-(a.priority??a.mediaPriority??999))}Object.values(y).reduce((e,a)=>(e[a.alias]=a.id,e),{}),Object.values(y).reduce((e,a)=>(e[a.id]=a.alias,e),{});let F=t.A.filter(e=>e.features?.usage).map(e=>e.id);t.A.filter(e=>e.features?.usageApikey).map(e=>e.id)},38891:(e,a,i)=>{i.d(a,{A:()=>m});var t=i(11461);let o={"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,interleaved-thinking-2025-05-14"};(function(){switch((0,t.arch)()){case"x64":case"arm64":case"ia32":return;default:return(0,t.arch)()}})(),function(){switch((0,t.platform)()){case"darwin":case"win32":case"linux":case"freebsd":return;default:return(0,t.platform)()}}();let n="https://daily-cloudcode-pa.googleapis.com",s="antigravity/ide/2.11.0 darwin/arm64",r="0.154.0",m=[{id:"antigravity",priority:20,alias:"ag",uiAlias:"ag",display:{name:"Antigravity",icon:"rocket_launch",color:"#F59E0B",website:"https://antigravity.google",notice:{signupUrl:"https://antigravity.google"},deprecated:!0,deprecationNotice:"RISK_NOTICE"},category:"oauth",serviceKinds:["llm","image","webSearch"],transport:{baseUrls:[n],format:"antigravity",headers:{"User-Agent":s},retry:{429:{attempts:3},500:{attempts:3},503:{attempts:3}},usage:{quotaApiUrl:`${n}/v1internal:fetchAvailableModels`,quotaSummaryApiUrl:`${n}/v1internal:retrieveUserQuotaSummary`,loadProjectApiUrl:"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",tokenUrl:"https://oauth2.googleapis.com/token"},clientId:"1071006060591-tmhssin2h21lcre235vtolojh4g403ep.apps.googleusercontent.com",clientSecret:"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"},models:[{id:"gemini-3.8-flash-high",name:"Gemini 3.8 Flash (High)",upstreamModelId:"gemini-3.8-flash-high(high)"},{id:"gemini-3.8-flash-medium",name:"Gemini 3.8 Flash (Medium)",upstreamModelId:"gemini-3.8-flash-medium(medium)"},{id:"gemini-3.8-flash-low",name:"Gemini 3.8 Flash (Low)",upstreamModelId:"gemini-3.8-flash-low(low)"},{id:"gemini-3.8-flash",name:"Gemini 3.8 Flash",upstreamModelId:"gemini-3.8-flash-medium(medium)"},{id:"gemini-3.7-flash-high",name:"Gemini 3.7 Flash (High)",upstreamModelId:"gemini-3.7-flash-tiered(high)"},{id:"gemini-3.7-flash-medium",name:"Gemini 3.7 Flash (Medium)",upstreamModelId:"gemini-3.7-flash-tiered(medium)"},{id:"gemini-3.7-flash-low",name:"Gemini 3.7 Flash (Low)",upstreamModelId:"gemini-3.7-flash-tiered(low)"},{id:"gemini-3.6-flash-high",name:"Gemini 3.6 Flash (High)",upstreamModelId:"gemini-3.6-flash-tiered(high)"},{id:"gemini-3.6-flash-medium",name:"Gemini 3.6 Flash (Medium)",upstreamModelId:"gemini-3.6-flash-tiered(medium)"},{id:"gemini-3.6-flash-low",name:"Gemini 3.6 Flash (Low)",upstreamModelId:"gemini-3.6-flash-tiered(low)"},{id:"gemini-3.5-flash-high",name:"Gemini 3.5 Flash (High)"},{id:"gemini-3-flash-agent",name:"Gemini 3.5 Flash (High)"},{id:"gemini-3.5-flash-low",name:"Gemini 3.5 Flash (Medium)"},{id:"gemini-3.5-flash-extra-low",name:"Gemini 3.5 Flash (Low)"},{id:"gemini-pro-agent",name:"Gemini 3.1 Pro (High)"},{id:"gemini-3.1-pro-low",name:"Gemini 3.1 Pro (Low)"},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6 (Thinking)"},{id:"claude-opus-4-6-thinking",name:"Claude Opus 4.6 (Thinking)"},{id:"gpt-oss-120b-medium",name:"GPT-OSS 120B (Medium)"},{id:"gemini-3-flash",name:"Gemini 3 Flash",thinking:!1},{id:"gemini-3.1-flash-image",name:"Gemini 3.1 Flash (Image)",kind:"image",imageGen:!0,capabilities:["textToImage"]}],oauth:{authorizeUrl:"https://accounts.google.com/o/oauth2/v2/auth",tokenUrl:"https://oauth2.googleapis.com/token",userInfoUrl:"https://www.googleapis.com/oauth2/v1/userinfo",scopes:["https://www.googleapis.com/auth/cloud-platform","https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/userinfo.profile","https://www.googleapis.com/auth/cclog","https://www.googleapis.com/auth/experimentsandconfigs"],apiEndpoint:"https://daily-cloudcode-pa.googleapis.com",apiVersion:"v1internal",loadCodeAssistEndpoint:"https://cloudcode-pa.googleapis.com/v1internal:loadCodeAssist",onboardUserEndpoint:"https://cloudcode-pa.googleapis.com/v1internal:onboardUser",loadCodeAssistUserAgent:s,refreshLeadMs:3e5},searchViaChat:{defaultModel:"gemini-2.5-flash",endpoint:`${n}/v1internal:generateContent`,freeTier:"Free — Google Search grounding through an Antigravity OAuth account."},features:{usage:!0}},{id:"claude",priority:10,alias:"cc",uiAlias:"cc",display:{name:"Claude Code",icon:"smart_toy",color:"#D97757",website:"https://claude.ai",notice:{signupUrl:"https://claude.ai"},deprecated:!0,deprecationNotice:"RISK_NOTICE"},category:"oauth",transport:{baseUrl:"https://api.anthropic.com/v1/messages",format:"claude",urlSuffix:"?beta=true",headers:{"Anthropic-Version":"2023-06-01","Anthropic-Beta":"claude-code-20250219,oauth-2025-04-20,interleaved-thinking-2025-05-14,context-management-2025-06-27,prompt-caching-scope-2026-01-05,advanced-tool-use-2025-11-20,effort-2025-11-24,structured-outputs-2025-12-15,fast-mode-2026-02-01,redact-thinking-2026-02-12,token-efficient-tools-2026-03-28","Anthropic-Dangerous-Direct-Browser-Access":"true","User-Agent":"claude-cli/2.1.258 (external, sdk-cli)","X-App":"cli","X-Stainless-Helper-Method":"stream","X-Stainless-Retry-Count":"0","X-Stainless-Runtime-Version":"v24.14.0","X-Stainless-Package-Version":"0.80.0","X-Stainless-Runtime":"node","X-Stainless-Lang":"js","X-Stainless-Arch":"arm64","X-Stainless-Os":"MacOS","X-Stainless-Timeout":"600"},quirks:{cloakToolsOnOAuth:!0},auth:{apiKey:{header:"x-api-key",scheme:"raw"},oauth:{header:"Authorization",scheme:"bearer"}},usage:{oauthUrl:"https://api.anthropic.com/api/oauth/usage",orgUrl:"https://api.anthropic.com/v1/organizations/{org_id}/usage",settingsUrl:"https://api.anthropic.com/v1/settings"}},models:[{id:"claude-opus-5",name:"Claude Opus 5"},{id:"claude-fable-5-1",name:"Claude Fable 5.1"},{id:"claude-fable-5",name:"Claude Fable 5"},{id:"claude-sonnet-5",name:"Claude Sonnet 5"},{id:"claude-haiku-4-5-20251001",name:"Claude 4.5 Haiku"}],oauth:{clientId:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",authorizeUrl:"https://claude.ai/oauth/authorize",tokenUrl:"https://api.anthropic.com/v1/oauth/token",scopes:["org:create_api_key","user:profile","user:inference"],codeChallengeMethod:"S256",refreshLeadMs:144e5,refresh:{encoding:"json"}},features:{usage:!0}},{id:"codex",priority:30,alias:"cx",uiAlias:"cx",display:{name:"OpenAI Codex",icon:"code",color:"#3B82F6",website:"https://chatgpt.com/codex",notice:{signupUrl:"https://chatgpt.com/codex"},deprecated:!0,deprecationNotice:"RISK_NOTICE",kindNotice:{image:"Requires a ChatGPT Plus (or higher) account. Free accounts are not supported for image generation."}},category:"oauth",thinkingConfig:{options:["auto","none","low","medium","high"],defaultMode:"auto"},transport:{baseUrl:"https://chatgpt.com/backend-api/codex/responses",format:"openai-responses",forceStream:!0,cliVersion:r,headers:{originator:"codex_cli_rs","User-Agent":`codex_cli_rs/${r}`},usage:{url:"https://chatgpt.com/backend-api/wham/usage",resetCreditsUrl:"https://chatgpt.com/backend-api/wham/rate-limit-reset-credits",resetCreditsConsumeUrl:"https://chatgpt.com/backend-api/wham/rate-limit-reset-credits/consume"}},models:[{id:"gpt-6-astra",name:"GPT 6.0 Astra"},{id:"gpt-5.6-sol",name:"GPT 5.6 Sol"},{id:"gpt-5.6-sol-review",name:"GPT 5.6 Sol Review",upstreamModelId:"gpt-5.6-sol",quotaFamily:"review"},{id:"gpt-5.6-terra",name:"GPT 5.6 Terra"},{id:"gpt-5.6-terra-review",name:"GPT 5.6 Terra Review",upstreamModelId:"gpt-5.6-terra",quotaFamily:"review"},{id:"gpt-5.6-luna",name:"GPT 5.6 Luna"},{id:"gpt-5.6-luna-review",name:"GPT 5.6 Luna Review",upstreamModelId:"gpt-5.6-luna",quotaFamily:"review"},{id:"gpt-5.5",name:"GPT 5.5"},{id:"gpt-5.5-review",name:"GPT 5.5 Review",upstreamModelId:"gpt-5.5",quotaFamily:"review"},{id:"gpt-5.4",name:"GPT 5.4"},{id:"gpt-5.4-review",name:"GPT 5.4 Review",upstreamModelId:"gpt-5.4",quotaFamily:"review"},{id:"gpt-5.4-mini",name:"GPT 5.4 Mini"},{id:"gpt-5.4-mini-review",name:"GPT 5.4 Mini Review",upstreamModelId:"gpt-5.4-mini",quotaFamily:"review"},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark"},{id:"gpt-5.3-codex-spark-review",name:"GPT 5.3 Codex Spark Review",upstreamModelId:"gpt-5.3-codex-spark",quotaFamily:"review"},{id:"codex-auto-review",name:"Codex Auto Review",upstreamModelId:"codex-auto-review",quotaFamily:"review"},{id:"gpt-image-2.5",name:"GPT Image 2.5",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-image-2.5-flare",name:"GPT Image 2.5 Flare",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-image-2.5-sunburst",name:"GPT Image 2.5 Sunburst",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-image-2",name:"GPT Image 2",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-image-1.5",name:"GPT Image 1.5",capabilities:["text2img","edit","multiImage"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.6-sol-image",name:"GPT 5.6 Sol Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.6-terra-image",name:"GPT 5.6 Terra Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.6-luna-image",name:"GPT 5.6 Luna Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.5-image",name:"GPT 5.5 Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.4-image",name:"GPT 5.4 Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"},{id:"gpt-5.3-image",name:"GPT 5.3 Image",capabilities:["text2img","edit"],params:["size","quality","background","image_detail","output_format"],kind:"image"}],serviceKinds:["llm","image"],oauth:{clientId:"app_EMoamEEZ73f0CkXaXp7hrann",authorizeUrl:"https://auth.openai.com/oauth/authorize",tokenUrl:"https://auth.openai.com/oauth/token",scope:"openid profile email offline_access",codeChallengeMethod:"S256",fixedPort:1455,callbackPath:"/auth/callback",extraParams:{id_token_add_organizations:"true",codex_cli_simplified_flow:"true",originator:"codex_cli_rs"},refreshLeadMs:432e6,refresh:{encoding:"form",scope:"openid profile email offline_access"},maxRefreshAgeMs:6912e5,trackRefreshAt:!0},features:{usage:!0}},{id:"cursor",priority:50,alias:"cu",uiAlias:"cu",display:{name:"Cursor IDE",icon:"edit_note",color:"#00D4AA",website:"https://cursor.com",notice:{signupUrl:"https://cursor.com"}},category:"oauth",transport:{baseUrl:"https://api2.cursor.sh",chatPath:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",format:"cursor",headers:{"connect-accept-encoding":"gzip","connect-protocol-version":"1","Content-Type":"application/connect+proto","User-Agent":"connect-es/1.6.1"},clientVersion:"3.12.17"},models:[{id:"default",name:"Auto (Server Picks)"},{id:"claude-4.5-opus-high-thinking",name:"Claude 4.5 Opus High Thinking"},{id:"claude-4.5-opus-high",name:"Claude 4.5 Opus High"},{id:"claude-4.5-sonnet-thinking",name:"Claude 4.5 Sonnet Thinking"},{id:"claude-4.5-sonnet",name:"Claude 4.5 Sonnet"},{id:"claude-4.5-haiku",name:"Claude 4.5 Haiku"},{id:"claude-4.5-opus",name:"Claude 4.5 Opus"},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex"},{id:"claude-4.6-opus-max",name:"Claude 4.6 Opus Max"},{id:"claude-4.6-sonnet-medium-thinking",name:"Claude 4.6 Sonnet Medium Thinking"},{id:"kimi-k2.5",name:"Kimi K2.5"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gpt-5.2",name:"GPT 5.2"},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex"}],oauth:{apiEndpoint:"https://api2.cursor.sh",chatEndpoint:"/aiserver.v1.ChatService/StreamUnifiedChatWithTools",modelsEndpoint:"/agent.v1.AgentService/GetUsableModels",api3Endpoint:"https://api3.cursor.sh",agentEndpoint:"https://agent.api5.cursor.sh",agentNonPrivacyEndpoint:"https://agentn.api5.cursor.sh",clientVersion:"3.12.17",clientType:"ide",dbKeys:{accessToken:"cursorAuth/accessToken",machineId:"storage.serviceMachineId"}}},{id:"deepseek",priority:110,alias:"deepseek",aliases:["ds"],uiAlias:"ds",display:{name:"DeepSeek",icon:"bolt",color:"#4D6BFE",textIcon:"DS",website:"https://deepseek.com",notice:{apiKeyUrl:"https://platform.deepseek.com/api_keys"}},category:"apikey",transport:{baseUrl:"https://api.deepseek.com/chat/completions",validateUrl:"https://api.deepseek.com/models",reasoningInject:{scope:"all"},quirks:{claudeSupportedToolTypes:["web_search_20250305","web_search_20260209"]}},transports:[{format:"openai",baseUrl:"https://api.deepseek.com/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",baseUrl:"https://api.deepseek.com/anthropic/v1/messages",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro"},{id:"deepseek-v4-pro-max",name:"DeepSeek V4 Pro Max",upstreamModelId:"deepseek-v4-pro"},{id:"deepseek-v4-pro-none",name:"DeepSeek V4 Pro No Thinking",upstreamModelId:"deepseek-v4-pro"},{id:"deepseek-v4.1-flash",name:"DeepSeek V4.1 Flash"},{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash"},{id:"deepseek-v4-flash-vision-exp",name:"DeepSeek V4 Flash Vision (Exp)"},{id:"deepseek-chat",name:"DeepSeek V3.2 Chat"},{id:"deepseek-reasoner",name:"DeepSeek V3.2 Reasoner"}],features:{usage:!0,usageApikey:!0}},{id:"fish-audio",alias:"fish",display:{name:"Fish Audio",icon:"record_voice_over",color:"#1E9BF0",textIcon:"FA",website:"https://fish.audio",notice:{apiKeyUrl:"https://fish.audio/app/api-keys/"}},category:"apikey",authType:"apikey",serviceKinds:["tts"],ttsConfig:{baseUrl:"https://api.fish.audio/v1/tts",authType:"apikey",authHeader:"bearer",format:"fish-audio",models:[{id:"s2.1-pro-free",name:"S2.1 Pro Free"},{id:"s2.1-pro",name:"S2.1 Pro"},{id:"s2-pro",name:"S2 Pro"},{id:"s1",name:"S1"}]}},{id:"gemini",priority:50,hasFree:!0,alias:"gemini",display:{name:"Gemini",icon:"diamond",color:"#4285F4",textIcon:"GE",website:"https://ai.google.dev",notice:{apiKeyUrl:"https://aistudio.google.com/app/apikey"}},category:"freeTier",authType:"apikey",authModes:["apikey"],mediaPriority:1,transport:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",format:"gemini",clientId:"681255809395-oo8ft2oprdrnp9e3aqf6av3hmdib135j.apps.googleusercontent.com",clientSecret:"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",auth:{apiKey:{header:"x-goog-api-key",scheme:"raw"},oauth:{header:"Authorization",scheme:"bearer"}}},models:[{id:"gemini-3.8-flash",name:"Gemini 3.8 Flash"},{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash"},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash"},{id:"gemini-3.5-flash-lite",name:"Gemini 3.5 Flash Lite"},{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro Preview"},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite Preview"},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash Preview"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite"},{id:"gemma-4-31b-it",name:"Gemma 4 31B IT"},{id:"gemini-embedding-2-preview",name:"Gemini Embedding 2 Preview",kind:"embedding"},{id:"gemini-embedding-001",name:"Gemini Embedding 001",kind:"embedding"},{id:"text-embedding-005",name:"Text Embedding 005",kind:"embedding"},{id:"text-embedding-004",name:"Text Embedding 004 (Legacy)",kind:"embedding"},{id:"gemini-3.1-flash-image-preview",name:"Gemini 3.1 Flash Image (Nano Banana 2)",params:[],kind:"image"},{id:"gemini-3-pro-image-preview",name:"Gemini 3 Pro Image (Nano Banana Pro)",params:[],kind:"image"},{id:"gemini-2.5-flash-image",name:"Gemini 2.5 Flash Image (Nano Banana)",params:[],kind:"image"},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro (Best)",params:["language","prompt"],kind:"stt"},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash",params:["language","prompt"],kind:"stt"},{id:"gemini-2.5-flash-lite",name:"Gemini 2.5 Flash Lite (Cheapest)",params:["language","prompt"],kind:"stt"},{id:"gemini-2.0-flash",name:"Gemini 2.0 Flash",params:["language","prompt"],kind:"stt"},{id:"gemini-3.1-flash-tts-preview",name:"Gemini 3.1 Flash TTS",kind:"tts"},{id:"gemini-2.5-flash-preview-tts",name:"Gemini 2.5 Flash TTS",kind:"tts"},{id:"gemini-2.5-pro-preview-tts",name:"Gemini 2.5 Pro TTS",kind:"tts"},{id:"embedding-001",name:"Embedding 001",dimensions:768,kind:"embedding"}],serviceKinds:["llm","embedding","image","imageToText","webSearch","tts","stt"],ttsConfig:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",authType:"apikey",authHeader:"key",format:"gemini-tts"},sttConfig:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",authType:"apikey",authHeader:"key",format:"gemini-stt"},embeddingConfig:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models",authType:"apikey",authHeader:"key"},imageConfig:{baseUrl:"https://generativelanguage.googleapis.com/v1beta/models"},searchViaChat:{defaultModel:"gemini-2.5-flash",endpoint:"https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent",pricingUrl:"https://ai.google.dev/pricing",freeTier:"Free tier: 15 RPM, 1M tokens/day on gemini-2.5-flash via AI Studio."}},{id:"glm-cn",priority:130,alias:"glm-cn",display:{name:"GLM (China)",icon:"code",color:"#DC2626",textIcon:"GC",website:"https://open.bigmodel.cn",notice:{apiKeyUrl:"https://open.bigmodel.cn/usercenter/apikeys"}},category:"apikey",transport:{baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4/chat/completions",headers:{},usage:{url:"https://open.bigmodel.cn/api/monitor/usage/quota/limit"}},models:[{id:"glm-5.3",name:"GLM 5.3"},{id:"glm-5.3-flash",name:"GLM 5.3 Flash (Vision)"},{id:"glm-5.2",name:"GLM 5.2"},{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5-turbo",name:"GLM 5 Turbo"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM-4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"},{id:"glm-4.6",name:"GLM-4.6"},{id:"glm-4.5-air",name:"GLM-4.5-Air"}],features:{usage:!0,usageApikey:!0}},{id:"glm",priority:140,alias:"glm",display:{name:"GLM Coding",icon:"code",color:"#2563EB",textIcon:"GL",website:"https://open.bigmodel.cn",notice:{apiKeyUrl:"https://open.bigmodel.cn/usercenter/apikeys"}},category:"apikey",transport:{baseUrl:"https://api.z.ai/api/anthropic/v1/messages",format:"claude",urlSuffix:"?beta=true",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"},usage:{url:"https://api.z.ai/api/monitor/usage/quota/limit"}},transports:[{format:"openai",baseUrl:"https://api.z.ai/api/coding/paas/v4/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",baseUrl:"https://api.z.ai/api/anthropic/v1/messages",urlSuffix:"?beta=true",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"glm-5.3",name:"GLM 5.3"},{id:"glm-5.3-flash",name:"GLM 5.3 Flash (Vision)"},{id:"glm-5.2",name:"GLM 5.2"},{id:"glm-5.1",name:"GLM 5.1"},{id:"glm-5-turbo",name:"GLM 5 Turbo"},{id:"glm-5",name:"GLM 5"},{id:"glm-4.7",name:"GLM 4.7"},{id:"glm-4.6v",name:"GLM 4.6V (Vision)"}],serviceKinds:["llm","webSearch"],searchConfig:{baseUrl:"https://api.z.ai/api/mcp/web_search_prime/mcp",method:"POST",authType:"apikey",authHeader:"bearer",costPerQuery:0,searchTypes:["web"],defaultMaxResults:5,maxMaxResults:50,timeoutMs:1e4,cacheTTLMs:3e5},features:{usage:!0,usageApikey:!0}},{id:"groq",priority:60,hasFree:!0,alias:"groq",display:{name:"Groq",icon:"speed",color:"#F55036",textIcon:"GQ",website:"https://groq.com",notice:{apiKeyUrl:"https://console.groq.com/keys"}},category:"apikey",transport:{baseUrl:"https://api.groq.com/openai/v1/chat/completions",validateUrl:"https://api.groq.com/openai/v1/models",usage:{url:"https://api.groq.com/openai/v1/models"}},models:[{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B"},{id:"meta-llama/llama-4-maverick-17b-128e-instruct",name:"Llama 4 Maverick"},{id:"qwen/qwen3-32b",name:"Qwen3 32B"},{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B"},{id:"whisper-large-v3",name:"Whisper Large v3",params:["language","response_format","temperature","prompt"],kind:"stt"},{id:"whisper-large-v3-turbo",name:"Whisper Large v3 Turbo",params:["language","response_format","temperature","prompt"],kind:"stt"},{id:"distil-whisper-large-v3-en",name:"Distil Whisper Large v3 EN",params:["language","response_format","temperature","prompt"],kind:"stt"}],serviceKinds:["llm","imageToText","stt"],sttConfig:{baseUrl:"https://api.groq.com/openai/v1/audio/transcriptions",authType:"apikey",authHeader:"bearer",format:"openai"},features:{usage:!0,usageApikey:!0}},{id:"huggingface",priority:70,hasFree:!0,alias:"huggingface",aliases:["hf"],uiAlias:"hf",display:{name:"HuggingFace",icon:"face",color:"#FFD21E",textIcon:"HF",website:"https://huggingface.co",notice:{apiKeyUrl:"https://huggingface.co/settings/tokens"}},category:"apikey",authType:"apikey",hiddenKinds:["tts"],transport:null,models:[{id:"black-forest-labs/FLUX.1-schnell",name:"FLUX.1 Schnell",params:[],kind:"image"},{id:"stabilityai/stable-diffusion-xl-base-1.0",name:"SDXL Base 1.0",params:[],kind:"image"},{id:"openai/whisper-large-v3",name:"Whisper Large v3 (HF)",params:["language"],kind:"stt"},{id:"openai/whisper-small",name:"Whisper Small (HF)",params:["language"],kind:"stt"}],serviceKinds:["image","stt"],imageConfig:{baseUrl:"https://router.huggingface.co/models"}},{id:"iflow",hidden:!0,priority:110,alias:"if",display:{name:"iFlow AI",icon:"water_drop",color:"#6366F1",website:"https://iflow.cn",notice:{signupUrl:"https://iflow.cn"}},category:"oauth",transport:{baseUrl:"https://apis.iflow.cn/v1/chat/completions",thinkingFormat:"openai",headers:{"User-Agent":"iFlow-Cli"}},models:[{id:"qwen3-coder-plus",name:"Qwen3 Coder Plus"},{id:"qwen3-max",name:"Qwen3 Max"},{id:"qwen3-vl-plus",name:"Qwen3 VL Plus"},{id:"qwen3-max-preview",name:"Qwen3 Max Preview"},{id:"qwen3-235b",name:"Qwen3 235B A22B"},{id:"qwen3-235b-a22b-instruct",name:"Qwen3 235B A22B Instruct"},{id:"qwen3-235b-a22b-thinking-2507",name:"Qwen3 235B A22B Thinking"},{id:"qwen3-32b",name:"Qwen3 32B"},{id:"kimi-k2",name:"Kimi K2"},{id:"deepseek-v3.2",name:"DeepSeek V3.2 Exp"},{id:"deepseek-v3.1",name:"DeepSeek V3.1 Terminus"},{id:"deepseek-v3",name:"DeepSeek V3 671B"},{id:"deepseek-r1",name:"DeepSeek R1"},{id:"glm-4.7",name:"GLM 4.7"},{id:"iflow-rome-30ba3b",name:"iFlow ROME"}],oauth:{clientId:"10009311001",clientSecret:"4Z3YjXycVsQvyGF1etiNlIBB4RsqSDtW",authorizeUrl:"https://iflow.cn/oauth",tokenUrl:"https://iflow.cn/oauth/token",userInfoUrl:"https://iflow.cn/api/oauth/getUserInfo",extraParams:{loginMethod:"phone",type:"phone"},refreshLeadMs:864e5}},{id:"minimax-cn",priority:190,alias:"minimax-cn",display:{name:"Minimax (China)",icon:"memory",color:"#DC2626",textIcon:"MC",website:"https://www.minimaxi.com",notice:{apiKeyUrl:"https://platform.minimaxi.com/user-center/basic-information/interface-key"}},category:"apikey",transport:{baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",format:"claude",urlSuffix:"?beta=true",headers:{...o},quirks:{dropOutputConfig:!0,requireClaudeToolType:!0},reasoningInject:{scope:"all"},auth:{combined:!0,header:"x-api-key",scheme:"raw"},usage:{urls:["https://www.minimaxi.com/v1/api/openplatform/coding_plan/remains","https://api.minimaxi.com/v1/api/openplatform/coding_plan/remains"]}},transports:[{format:"openai",baseUrl:"https://api.minimaxi.com/v1/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",baseUrl:"https://api.minimaxi.com/anthropic/v1/messages",urlSuffix:"?beta=true",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"MiniMax-M3",name:"MiniMax M3",targetFormat:"claude"},{id:"MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"},{id:"speech-2.8-hd",name:"Speech 2.8 HD",kind:"tts"},{id:"speech-2.8-turbo",name:"Speech 2.8 Turbo",kind:"tts"},{id:"speech-2.6-hd",name:"Speech 2.6 HD",kind:"tts"},{id:"speech-2.6-turbo",name:"Speech 2.6 Turbo",kind:"tts"},{id:"speech-02-hd",name:"Speech 02 HD",kind:"tts"},{id:"speech-02-turbo",name:"Speech 02 Turbo",kind:"tts"},{id:"speech-01-hd",name:"Speech 01 HD",kind:"tts"},{id:"speech-01-turbo",name:"Speech 01 Turbo",kind:"tts"}],serviceKinds:["llm","tts"],ttsConfig:{baseUrl:"https://api.minimaxi.com/v1/t2a_v2",authType:"apikey",authHeader:"bearer",format:"minimax-tts"},features:{usage:!0,usageApikey:!0}},{id:"minimax",priority:90,alias:"minimax",display:{name:"Minimax Coding",icon:"memory",color:"#7C3AED",textIcon:"MM",website:"https://www.minimaxi.com",notice:{apiKeyUrl:"https://platform.minimaxi.com/user-center/basic-information/interface-key"}},category:"apikey",transport:{baseUrl:"https://api.minimax.io/anthropic/v1/messages",format:"claude",urlSuffix:"?beta=true",headers:{...o},quirks:{dropOutputConfig:!0,requireClaudeToolType:!0},reasoningInject:{scope:"all"},auth:{combined:!0,header:"x-api-key",scheme:"raw"},usage:{urls:["https://www.minimax.io/v1/token_plan/remains","https://api.minimax.io/v1/api/openplatform/coding_plan/remains"]}},transports:[{format:"openai",baseUrl:"https://api.minimax.io/v1/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",baseUrl:"https://api.minimax.io/anthropic/v1/messages",urlSuffix:"?beta=true",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"MiniMax-M3",name:"MiniMax M3",targetFormat:"claude"},{id:"MiniMax-M2.7",name:"MiniMax M2.7"},{id:"MiniMax-M2.5",name:"MiniMax M2.5"},{id:"MiniMax-M2.1",name:"MiniMax M2.1"},{id:"minimax-image-01",name:"MiniMax Image 01",params:["n","size","response_format"],kind:"image"},{id:"speech-2.8-hd",name:"Speech 2.8 HD",kind:"tts"},{id:"speech-2.8-turbo",name:"Speech 2.8 Turbo",kind:"tts"},{id:"speech-2.6-hd",name:"Speech 2.6 HD",kind:"tts"},{id:"speech-2.6-turbo",name:"Speech 2.6 Turbo",kind:"tts"},{id:"speech-02-hd",name:"Speech 02 HD",kind:"tts"},{id:"speech-02-turbo",name:"Speech 02 Turbo",kind:"tts"},{id:"speech-01-hd",name:"Speech 01 HD",kind:"tts"},{id:"speech-01-turbo",name:"Speech 01 Turbo",kind:"tts"}],serviceKinds:["llm","image","imageToText","webSearch","tts"],ttsConfig:{baseUrl:"https://api.minimax.io/v1/t2a_v2",authType:"apikey",authHeader:"bearer",format:"minimax-tts"},imageConfig:{baseUrl:"https://api.minimaxi.com/v1/images/generations"},searchViaChat:{defaultModel:"MiniMax-M2.7",endpoint:"https://api.minimaxi.com/v1/text/chatcompletion_v2",pricingUrl:"https://www.minimaxi.com/document/price"},features:{usage:!0,usageApikey:!0}},{id:"openai",priority:30,alias:"openai",display:{name:"OpenAI",icon:"auto_awesome",color:"#10A37F",textIcon:"OA",website:"https://platform.openai.com",notice:{apiKeyUrl:"https://platform.openai.com/api-keys"}},category:"apikey",thinkingConfig:{options:["auto","none","low","medium","high"],defaultMode:"auto"},transport:{baseUrl:"https://api.openai.com/v1/chat/completions",forceStream:!0},models:[{id:"gpt-5.4",name:"GPT-5.4"},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini"},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano"},{id:"gpt-5.2",name:"GPT-5.2"},{id:"gpt-5.1",name:"GPT-5.1"},{id:"gpt-5",name:"GPT-5"},{id:"gpt-5-mini",name:"GPT-5 Mini"},{id:"gpt-5-nano",name:"GPT-5 Nano"},{id:"gpt-4o",name:"GPT-4o"},{id:"gpt-4o-mini",name:"GPT-4o Mini"},{id:"gpt-4-turbo",name:"GPT-4 Turbo"},{id:"gpt-4.1",name:"GPT-4.1"},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini"},{id:"gpt-4.1-nano",name:"GPT-4.1 Nano"},{id:"o3",name:"O3"},{id:"o3-mini",name:"O3 Mini"},{id:"o3-pro",name:"O3 Pro"},{id:"o4-mini",name:"O4 Mini"},{id:"o1",name:"O1"},{id:"o1-mini",name:"O1 Mini"},{id:"text-embedding-3-large",name:"Text Embedding 3 Large",kind:"embedding"},{id:"text-embedding-3-small",name:"Text Embedding 3 Small",kind:"embedding"},{id:"text-embedding-ada-002",name:"Text Embedding Ada 002",kind:"embedding"},{id:"tts-1",name:"TTS-1",kind:"tts"},{id:"tts-1-hd",name:"TTS-1 HD",kind:"tts"},{id:"gpt-4o-mini-tts",name:"GPT-4o Mini TTS",kind:"tts"},{id:"whisper-1",name:"Whisper 1",params:["language","response_format","temperature","prompt"],kind:"stt"},{id:"gpt-4o-transcribe",name:"GPT-4o Transcribe",params:["language","response_format","temperature","prompt"],kind:"stt"},{id:"gpt-4o-mini-transcribe",name:"GPT-4o Mini Transcribe",params:["language","response_format","temperature","prompt"],kind:"stt"},{id:"gpt-image-2.5",name:"GPT Image 2.5",params:["n","size","quality","response_format"],kind:"image"},{id:"gpt-image-2.5-flare",name:"GPT Image 2.5 Flare",params:["n","size","quality","response_format"],kind:"image"},{id:"gpt-image-2.5-sunburst",name:"GPT Image 2.5 Sunburst",params:["n","size","quality","response_format"],kind:"image"},{id:"gpt-image-1",name:"GPT Image 1",params:["n","size","quality","response_format"],kind:"image"},{id:"dall-e-3",name:"DALL-E 3",params:["size","quality","style","response_format"],kind:"image"},{id:"dall-e-2",name:"DALL-E 2",params:["n","size","response_format"],kind:"image"}],serviceKinds:["llm","embedding","tts","stt","image","imageToText","webSearch"],ttsConfig:{baseUrl:"https://api.openai.com/v1/audio/speech",authType:"apikey",authHeader:"bearer",format:"openai",defaultModel:"gpt-4o-mini-tts"},sttConfig:{baseUrl:"https://api.openai.com/v1/audio/transcriptions",authType:"apikey",authHeader:"bearer",format:"openai"},embeddingConfig:{baseUrl:"https://api.openai.com/v1/embeddings",authType:"apikey",authHeader:"bearer"},imageConfig:{baseUrl:"https://api.openai.com/v1/images/generations"},searchViaChat:{defaultModel:"gpt-4o-mini",pricingUrl:"https://openai.com/api/pricing"}},{id:"opencode-go",priority:210,alias:"opencode-go",aliases:["ocg"],uiAlias:"ocg",display:{name:"OpenCode Go",icon:"terminal",color:"#E87040",textIcon:"OC",website:"https://opencode.ai/auth",notice:{text:"OpenCode Go: $10/mo, Go Plus $40/mo. Access to Kimi, GLM, Qwen, MiMo, MiniMax models.",apiKeyUrl:"https://opencode.ai/auth"}},category:"apikey",transport:{baseUrl:"https://opencode.ai/inference/go/v1/chat/completions",headers:{},usage:{url:"https://opencode.ai/inference/go/v1/usage"}},transports:[{format:"openai",baseUrl:"https://opencode.ai/inference/go/v1/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"},thinkingFormat:"openai"},{format:"claude",baseUrl:"https://opencode.ai/inference/go/v1/messages",auth:{combined:!0,header:"x-api-key",scheme:"raw",anthropicVersion:!0}},{format:"openai-responses",baseUrl:"https://opencode.ai/inference/go/v1/responses",auth:{combined:!0,header:"Authorization",scheme:"bearer"},thinkingFormat:"openai"}],models:[{id:"deepseek-v4.1-flash",name:"DeepSeek V4.1 Flash",supportedFormats:["openai"]},{id:"glm-5.3-flash",name:"GLM 5.3 Flash (Vision)",supportedFormats:["openai"]},{id:"glm-5.3",name:"GLM 5.3",supportedFormats:["openai"]},{id:"glm-5.2",name:"GLM 5.2",supportedFormats:["openai"]},{id:"glm-5.1",name:"GLM 5.1",supportedFormats:["openai"]},{id:"kimi-k2.7-code",name:"Kimi K2.7 Code",supportedFormats:["openai"]},{id:"kimi-k2.6",name:"Kimi K2.6",supportedFormats:["openai"]},{id:"kimi-k3",name:"Kimi K3",supportedFormats:["openai"]},{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro",supportedFormats:["openai","claude","openai-responses"]},{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash",supportedFormats:["openai","claude","openai-responses"]},{id:"deepseek-v4-flash-vision-exp",name:"DeepSeek V4 Flash Vision (Exp)",supportedFormats:["openai","claude","openai-responses"]},{id:"longcat-2.0",name:"LongCat 2.0",supportedFormats:["openai"]},{id:"mimo-v2.6-flash",name:"MiMo V2.6 Flash",supportedFormats:["openai"]},{id:"mimo-v2.6-pro",name:"MiMo V2.6 Pro",supportedFormats:["openai"]},{id:"mimo-v2.5",name:"MiMo V2.5",supportedFormats:["openai"]},{id:"mimo-v2.5-pro",name:"MiMo V2.5 Pro",supportedFormats:["openai"]},{id:"minimax-m3",name:"MiniMax M3",supportedFormats:["openai","claude"]},{id:"minimax-m2.7",name:"MiniMax M2.7",supportedFormats:["openai","claude"]},{id:"qwen3.8-max",name:"Qwen 3.8 Max",supportedFormats:["openai","claude"]},{id:"qwen3.8-flash",name:"Qwen 3.8 Flash",supportedFormats:["openai","claude"]},{id:"qwen3.7-plus",name:"Qwen 3.7 Plus",supportedFormats:["openai","claude"]},{id:"hy4-preview",name:"Hy4 Preview",supportedFormats:["openai"]},{id:"hy3",name:"Hy3",supportedFormats:["openai"]},{id:"space-bunny-free",name:"Space Bunny Free",supportedFormats:["openai"]},{id:"longcat-2.5-preview-free",name:"LongCat 2.5 Preview Free",supportedFormats:["openai"]},{id:"grok-4.7",name:"Grok 4.7",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"grok-4.6",name:"Grok 4.6",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-6-luna",name:"GPT 6 Luna",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.6-luna",name:"GPT 5.6 Luna",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.2-contributor",name:"Muse Spark 1.2 Contributor",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.3-contributor",name:"Muse Spark 1.3 Contributor",targetFormat:"openai-responses",supportedFormats:["openai-responses"]}],features:{usage:!0,usageApikey:!0}},{id:"opencode",priority:40,hasFree:!0,alias:"oc",uiAlias:"oc",display:{name:"OpenCode Free",icon:"terminal",color:"#E87040",textIcon:"OC"},category:"free",noAuth:!0,transport:{baseUrl:"https://opencode.ai",headers:{"x-opencode-client":"cli"},forceStream:!0,noAuth:!0,thinkingFormat:"openai",quirks:{forceAutoToolChoiceModels:["muse-spark-1.2-contributor-free","muse-spark-1.3-contributor-free"]}},models:[{id:"muse-spark-1.2-contributor-free",name:"Muse Spark 1.2 Contributor Free",targetFormat:"openai-responses"},{id:"muse-spark-1.3-contributor-free",name:"Muse Spark 1.3 Contributor Free",targetFormat:"openai-responses"},{id:"union-alpha",name:"Union Alpha Free",targetFormat:"claude"},{id:"jev-1.13-free",name:"Jev 1.13 Free",kind:"systemone"}],serviceKinds:["llm","systemone"],systemoneConfig:{baseUrl:"https://opencode.ai/inference/v1/systemone",headers:{"x-opencode-client":"cli","User-Agent":"opencode/latest/2.0.26/cli"}},modelsFetcher:{url:"https://opencode.ai/inference/v1/models",type:"opencode-free"},passthroughModels:!0},{id:"openrouter",priority:10,hasFree:!0,alias:"openrouter",display:{name:"OpenRouter",icon:"router",color:"#F97316",textIcon:"OR",website:"https://openrouter.ai",notice:{text:"Free tier: 27+ free models, no credit card needed, 200 req/day. After 0 credit: 1,000 req/day.",apiKeyUrl:"https://openrouter.ai/settings/keys"}},category:"freeTier",authType:"apikey",authModes:["apikey"],transport:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",thinkingFormat:"openai",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},models:[{id:"openai/text-embedding-3-large",name:"OpenAI Text Embedding 3 Large",kind:"embedding"},{id:"openai/text-embedding-3-small",name:"OpenAI Text Embedding 3 Small",kind:"embedding"},{id:"openai/text-embedding-ada-002",name:"OpenAI Text Embedding Ada 002",kind:"embedding"},{id:"qwen/qwen3-embedding-8b",name:"Qwen3 Embedding 8B",kind:"embedding"},{id:"perplexity/pplx-embed-v1-4b",name:"Perplexity Embed V1 4B",kind:"embedding"},{id:"perplexity/pplx-embed-v1-0.6b",name:"Perplexity Embed V1 0.6B",kind:"embedding"},{id:"nvidia/llama-nemotron-embed-vl-1b-v2:free",name:"NVIDIA Nemotron Embed VL 1B V2 (Free)",kind:"embedding"},{id:"openai/gpt-4o-mini-tts",name:"GPT-4o Mini TTS",kind:"tts"},{id:"openai/tts-1-hd",name:"TTS-1 HD",kind:"tts"},{id:"openai/tts-1",name:"TTS-1",kind:"tts"},{id:"openai/dall-e-3",name:"DALL-E 3 (via OpenRouter)",params:["size","quality","style","response_format"],kind:"image"},{id:"openai/gpt-image-1",name:"GPT Image 1 (via OpenRouter)",params:["n","size","quality","response_format"],kind:"image"},{id:"google/imagen-3.0-generate-002",name:"Imagen 3 (via OpenRouter)",params:["n","size"],kind:"image"},{id:"black-forest-labs/FLUX.1-schnell",name:"FLUX.1 Schnell (via OpenRouter)",params:["n","size"],kind:"image"},{id:"google/veo-3.1",name:"Veo 3.1 (via OpenRouter)",params:["duration","aspect_ratio","resolution"],kind:"video"},{id:"openai/sora-2-pro",name:"Sora 2 Pro (via OpenRouter)",params:["duration","aspect_ratio","resolution"],kind:"video"},{id:"bytedance/seedance-2.0",name:"Seedance 2.0 (via OpenRouter)",params:["duration","aspect_ratio","resolution"],kind:"video"},{id:"typesafe/jev-1.13",name:"Jev 1.13",kind:"systemone"}],serviceKinds:["llm","embedding","tts","imageToText","video","systemone"],systemoneConfig:{baseUrl:"https://openrouter.ai/api/v1/systemone",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},ttsConfig:{baseUrl:"https://openrouter.ai/api/v1/chat/completions",defaultModel:"openai/gpt-4o-mini-tts",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},embeddingConfig:{baseUrl:"https://openrouter.ai/api/v1/embeddings",authType:"apikey",authHeader:"bearer",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},imageConfig:{baseUrl:"https://openrouter.ai/api/v1/images/generations",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},videoConfig:{baseUrl:"https://openrouter.ai/api/v1/videos",headers:{"HTTP-Referer":"https://endpoint-proxy.local","X-Title":"Endpoint Proxy"}},modelsFetcher:{url:"https://openrouter.ai/api/v1/models",type:"openrouter-free"},passthroughModels:!0},{id:"siliconflow",priority:250,alias:"siliconflow",display:{name:"SiliconFlow",icon:"cloud_queue",color:"#5B6EF5",textIcon:"SF",website:"https://cloud.siliconflow.com",notice:{apiKeyUrl:"https://cloud.siliconflow.com/account/ak"}},category:"apikey",transport:{baseUrl:"https://api.siliconflow.com/v1/chat/completions",validateUrl:"https://api.siliconflow.com/v1/models",thinkingFormat:"openai"},models:[{id:"deepseek-ai/DeepSeek-V4-Pro",name:"DeepSeek V4 Pro"},{id:"deepseek-ai/DeepSeek-V4-Flash",name:"DeepSeek V4 Flash"},{id:"deepseek-ai/DeepSeek-V3.2",name:"DeepSeek V3.2"},{id:"deepseek-ai/DeepSeek-V3.2-Exp",name:"DeepSeek V3.2 Exp"},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1"},{id:"deepseek-ai/DeepSeek-V3.1-Terminus",name:"DeepSeek V3.1 Terminus"},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1"},{id:"Qwen/Qwen3.5-397B-A17B",name:"Qwen 3.5 397B A17B"},{id:"Qwen/Qwen3.5-122B-A10B",name:"Qwen 3.5 122B A10B"},{id:"zai-org/GLM-5.1",name:"GLM 5.1"},{id:"zai-org/GLM-5",name:"GLM 5"},{id:"moonshotai/Kimi-K2.6",name:"Kimi K2.6"},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5"},{id:"openai/gpt-oss-120b",name:"GPT OSS 120B"},{id:"MiniMaxAI/MiniMax-M2.5",name:"MiniMax M2.5"},{id:"inclusionAI/Ling-flash-2.0",name:"Ling Flash 2.0"}]},{id:"vercel-ai-gateway",priority:160,alias:"vercel-ai-gateway",aliases:["vercel"],uiAlias:"vercel",display:{name:"Vercel AI Gateway",icon:"deployed_code",color:"#111827",textIcon:"VG",website:"https://vercel.com/ai-gateway",notice:{text:"Unified OpenAI-compatible endpoint from Vercel. Use your AI Gateway API key, then pick models with provider/model IDs like anthropic/claude-sonnet-4.6 or openai/gpt-5.4.",apiKeyUrl:"https://vercel.com/dashboard/~/ai-gateway"}},category:"apikey",transport:{baseUrl:"https://ai-gateway.vercel.sh/v1/chat/completions",thinkingFormat:"openai",retry:{429:2},usage:{url:"https://ai-gateway.vercel.sh/v1/credits"}},serviceKinds:["llm","embedding","image","imageToText","webSearch"],embeddingConfig:{baseUrl:"https://ai-gateway.vercel.sh/v1/embeddings"},imageConfig:{baseUrl:"https://ai-gateway.vercel.sh/v1/images/generations"},searchViaChat:{defaultModel:"openai/gpt-4o-mini",pricingUrl:"https://vercel.com/docs/ai-gateway/pricing"},modelsFetcher:{url:"https://ai-gateway.vercel.sh/v1/models",type:"openai"},passthroughModels:!0,features:{usage:!0,usageApikey:!0}},{id:"xai",priority:280,alias:"xai",display:{name:"xAI (Grok)",icon:"auto_awesome",color:"#1DA1F2",textIcon:"XA",website:"https://x.ai",notice:{apiKeyUrl:"https://console.x.ai"}},category:"oauth",authModes:["oauth","apikey"],hasOAuth:!0,transport:{baseUrl:"https://api.x.ai/v1/chat/completions",validateUrl:"https://api.x.ai/v1/models",responsesUrl:"https://api.x.ai/v1/responses",clientId:"b1a00492-073a-47ea-816f-4c329264a828",tokenUrl:"https://auth.x.ai/oauth2/token",refreshUrl:"https://auth.x.ai/oauth2/token"},models:[{id:"grok-4.6",name:"Grok 4.6"},{id:"grok-4.5",name:"Grok 4.5"},{id:"grok-4",name:"Grok 4"},{id:"grok-4-fast-reasoning",name:"Grok 4 Fast Reasoning"},{id:"grok-code-fast-1",name:"Grok Code Fast"},{id:"grok-3",name:"Grok 3"},{id:"grok-2-image-1212",name:"Grok 2 Image",params:["n","response_format"],kind:"image"},{id:"grok-imagine-video",name:"Grok Imagine Video",params:["duration","aspect_ratio","resolution"],kind:"video"}],serviceKinds:["llm","imageToText","webSearch","image","video"],imageConfig:{baseUrl:"https://api.x.ai/v1/images/generations",bodyFields:["model","prompt","n","response_format"]},videoConfig:{baseUrl:"https://api.x.ai/v1/videos"},searchViaChat:{defaultModel:"grok-4.20-reasoning",endpoint:"https://api.x.ai/v1/responses",pricingUrl:"https://x.ai/api#pricing"}},{id:"xquik",alias:"xquik",display:{name:"Xquik",icon:"tag",color:"#5C3327",textIcon:"XQ",website:"https://docs.xquik.com/api-reference/x/search-tweets",notice:{apiKeyUrl:"https://xquik.com",text:"Searches public X posts. Billing uses 1 Xquik credit per returned post."}},category:"apikey",authType:"apikey",serviceKinds:["webSearch"],searchConfig:{baseUrl:"https://xquik.com/api/v1/x/tweets/search",validateUrl:"https://xquik.com/api/v1/credits",method:"GET",authType:"apikey",authHeader:"x-api-key",searchTypes:["x"],defaultMaxResults:5,maxMaxResults:100,timeoutMs:1e4,cacheTTLMs:6e4,creditsPerResult:1}},{id:"xiaomi-mimo",priority:290,alias:"xiaomi-mimo",aliases:["mimo","mimo-desktop","xmd"],uiAlias:"mimo",display:{name:"Xiaomi MiMo",icon:"smart_toy",color:"#FF6900",textIcon:"XM",website:"https://xiaomimimo.com",notice:{apiKeyUrl:"https://platform.xiaomimimo.com/console/api-keys",signupUrl:"https://mimo.xiaomimimo.com/desktop/invite/"}},category:"oauth",authModes:["oauth","apikey"],hasOAuth:!0,serviceKinds:["llm","tts"],transport:{baseUrl:"https://api.xiaomimimo.com/v1/chat/completions",validateUrl:"https://api.xiaomimimo.com/v1/models"},transports:[{format:"openai",baseUrl:"https://api.xiaomimimo.com/v1/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",baseUrl:"https://api.xiaomimimo.com/anthropic/v1/messages",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"mimo-x-pro-preview",name:"MiMo-X-Pro-Preview",upstreamModelId:"xiaomi/mimo-x-pro-preview",supportedFormats:["openai"]},{id:"mimo-x-flash-preview",name:"MiMo-X-Flash-Preview",upstreamModelId:"xiaomi/mimo-x-flash-preview",supportedFormats:["openai"]},{id:"mimo-v2.5-pro",name:"MiMo V2.5 Pro"},{id:"mimo-v2.5",name:"MiMo V2.5"},{id:"mimo-v2-omni",name:"MiMo V2 Omni"},{id:"mimo-v2-flash",name:"MiMo V2 Flash"},{id:"mimo-v2.5-tts",name:"MiMo V2.5 TTS",kind:"tts"}],ttsConfig:{baseUrl:"https://api.xiaomimimo.com/v1/chat/completions",authType:"apikey",authHeader:"bearer",format:"xiaomi-mimo-tts"},features:{usage:!0,usageApikey:!0},oauth:{custom:!0,authorizeUrl:"https://platform.xiaomimimo.com/authorize",callbackParam:"u",kn:"mimocode"}},{id:"xiaomi-tokenplan",priority:300,alias:"xiaomi-tokenplan",aliases:["xmtp"],uiAlias:"xmtp",display:{name:"Xiaomi MiMo (Token Plan)",icon:"smart_toy",color:"#FF6700",textIcon:"XT",website:"https://mimo.xiaomi.com",notice:{text:"Xiaomi MiMo Token Plan subscription (API key starts with tp-). Token Plan keys are cluster-specific — select the region matching your subscription.",apiKeyUrl:"https://mimo.xiaomi.com"}},category:"apikey",hasProviderSpecificData:!0,regions:[{id:"sgp",label:"Singapore (新加坡)"},{id:"cn",label:"China (中国大陆)"},{id:"ams",label:"Amsterdam (阿姆斯特丹)"}],defaultRegion:"sgp",transport:{baseUrl:"https://token-plan-sgp.xiaomimimo.com/v1/chat/completions",regions:{sgp:"https://token-plan-sgp.xiaomimimo.com/v1",cn:"https://token-plan-cn.xiaomimimo.com/v1",ams:"https://token-plan-ams.xiaomimimo.com/v1"},defaultRegion:"sgp"},transports:[{format:"openai",auth:{combined:!0,header:"Authorization",scheme:"bearer"}},{format:"claude",headers:{...o},auth:{combined:!0,header:"x-api-key",scheme:"raw"}}],models:[{id:"mimo-v2.5-pro",name:"MiMo V2.5 Pro"},{id:"mimo-v2.5-pro-claude",name:"MiMo V2.5 Pro (Claude Native)",targetFormat:"claude",upstreamModelId:"mimo-v2.5-pro"},{id:"mimo-v2.5",name:"MiMo V2.5"},{id:"mimo-v2-pro",name:"MiMo V2 Pro"},{id:"mimo-v2-omni",name:"MiMo V2 Omni"},{id:"mimo-v2-tts",name:"MiMo V2 TTS"},{id:"mimo-v2.5-tts",name:"MiMo V2.5 TTS"},{id:"mimo-v2.5-tts-voiceclone",name:"MiMo V2.5 TTS Voice Clone"},{id:"mimo-v2.5-tts-voicedesign",name:"MiMo V2.5 TTS Voice Design"}]},{id:"zed",priority:999,alias:"zd",uiAlias:"zd",display:{name:"Zed",icon:"code",color:"#A855F7",website:"https://zed.dev",notice:{signupUrl:"https://zed.dev/native_app_signin"}},category:"oauth",authType:"oauth",hasOAuth:!0,transport:{baseUrl:"https://cloud.zed.dev/completions",format:"openai",forceStream:!0,headers:{"content-type":"application/json"},auth:{combined:!0,header:"Authorization",scheme:"<user_id> <access_token>"},usage:{url:"https://cloud.zed.dev/client/users/me"},modelsUrl:"https://cloud.zed.dev/models"},models:[],passthroughModels:!0,oauth:{authorizeUrl:"https://zed.dev/native_app_signin",platform:"zed",rsaKeyExchange:!0},features:{usage:!0}},{id:"mimo-free",hidden:!0,priority:50,hasFree:!0,alias:"mmf",uiAlias:"mmf",display:{name:"MiMo Code Free",icon:"smart_toy",color:"#FF6900",textIcon:"MF"},category:"free",noAuth:!0,transport:{baseUrl:"https://api.xiaomimimo.com/api/free-ai/openai/chat",noAuth:!0},models:[{id:"mimo-auto",name:"MiMo Auto"}],modelsFetcher:{url:"https://models.dev/api.json",type:"mimo-free"},passthroughModels:!0},{id:"opencode-zen",priority:205,alias:"ocz",aliases:["opencode-zen"],uiAlias:"ocz",display:{name:"OpenCode Zen",icon:"terminal",color:"#E87040",textIcon:"OZ",website:"https://opencode.ai/auth",notice:{text:"OpenCode Zen PAYG: pay-as-you-go, key from https://opencode.ai/auth. Same models as Zen: paid + free tiers on the fast lane.",apiKeyUrl:"https://opencode.ai/auth"}},category:"apikey",transport:{baseUrl:"https://opencode.ai/inference/openai/v1/chat/completions",headers:{},usage:{url:"https://opencode.ai/zen/v1/usage"}},transports:[{format:"openai",baseUrl:"https://opencode.ai/inference/openai/v1/chat/completions",auth:{combined:!0,header:"Authorization",scheme:"bearer"},thinkingFormat:"openai"},{format:"claude",baseUrl:"https://opencode.ai/inference/anthropic/v1/messages",auth:{combined:!0,header:"x-api-key",scheme:"raw",anthropicVersion:!0}},{format:"openai-responses",baseUrl:"https://opencode.ai/inference/openai/v1/responses",auth:{combined:!0,header:"Authorization",scheme:"bearer"},thinkingFormat:"openai"}],models:[{id:"claude-fable-5",name:"Claude Fable 5",supportedFormats:["claude"]},{id:"claude-fable-5-1",name:"Claude Fable 5.1",supportedFormats:["claude"]},{id:"claude-opus-5",name:"Claude Opus 5",supportedFormats:["claude"]},{id:"claude-opus-4-8",name:"Claude Opus 4.8",supportedFormats:["claude"]},{id:"claude-opus-4-7",name:"Claude Opus 4.7",supportedFormats:["claude"]},{id:"claude-opus-4-6",name:"Claude Opus 4.6",supportedFormats:["claude"]},{id:"claude-opus-4-5",name:"Claude Opus 4.5",supportedFormats:["claude"]},{id:"claude-sonnet-5",name:"Claude Sonnet 5",supportedFormats:["claude"]},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",supportedFormats:["claude"]},{id:"claude-sonnet-4-5",name:"Claude Sonnet 4.5",supportedFormats:["claude"]},{id:"claude-sonnet-4",name:"Claude Sonnet 4",supportedFormats:["claude"]},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",supportedFormats:["claude"]},{id:"gemini-3.6-flash",name:"Gemini 3.6 Flash",supportedFormats:["openai"]},{id:"gemini-3.8-flash",name:"Gemini 3.8 Flash",supportedFormats:["openai"]},{id:"gemini-3.7-flash",name:"Gemini 3.7 Flash",supportedFormats:["openai"]},{id:"gemini-3.5-flash-lite",name:"Gemini 3.5 Flash Lite",supportedFormats:["openai"]},{id:"gemini-3.5-flash",name:"Gemini 3.5 Flash",supportedFormats:["openai"]},{id:"gemini-3.1-pro",name:"Gemini 3.1 Pro",supportedFormats:["openai"]},{id:"gemini-3-flash",name:"Gemini 3 Flash",supportedFormats:["openai"]},{id:"gpt-6-astra",name:"GPT 6 Astra",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.6-sol",name:"GPT 5.6 Sol",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.6-terra",name:"GPT 5.6 Terra",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.6-luna",name:"GPT 5.6 Luna",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.5",name:"GPT 5.5",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.5-pro",name:"GPT 5.5 Pro",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.4",name:"GPT 5.4",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.4-pro",name:"GPT 5.4 Pro",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.4-mini",name:"GPT 5.4 Mini",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.4-nano",name:"GPT 5.4 Nano",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.3-codex-spark",name:"GPT 5.3 Codex Spark",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.3-codex",name:"GPT 5.3 Codex",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.2",name:"GPT 5.2",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.2-codex",name:"GPT 5.2 Codex",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.1",name:"GPT 5.1",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.1-codex-max",name:"GPT 5.1 Codex Max",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.1-codex",name:"GPT 5.1 Codex",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5.1-codex-mini",name:"GPT 5.1 Codex Mini",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5",name:"GPT 5",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5-codex",name:"GPT 5 Codex",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"gpt-5-nano",name:"GPT 5 Nano",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"grok-build-0.1",name:"Grok Build 0.1",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"grok-4.6",name:"Grok 4.6",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"grok-4.5",name:"Grok 4.5",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.3",name:"Muse Spark 1.3",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.2",name:"Muse Spark 1.2",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"qwen3.6-plus",name:"Qwen 3.6 Plus",supportedFormats:["claude"]},{id:"qwen3.5-plus",name:"Qwen 3.5 Plus",supportedFormats:["claude"]},{id:"deepseek-v4-pro",name:"DeepSeek V4 Pro",supportedFormats:["openai"]},{id:"deepseek-v4-flash",name:"DeepSeek V4 Flash",supportedFormats:["openai"]},{id:"deepseek-v4-flash-vision-exp",name:"DeepSeek V4 Flash Vision Exp",supportedFormats:["openai"]},{id:"glm-5.3-flash",name:"GLM 5.3 Flash (Vision)",supportedFormats:["openai"]},{id:"glm-5.3",name:"GLM 5.3",supportedFormats:["openai"]},{id:"glm-5.2",name:"GLM 5.2",supportedFormats:["openai"]},{id:"glm-5.1",name:"GLM 5.1",supportedFormats:["openai"]},{id:"glm-5",name:"GLM 5",supportedFormats:["openai"]},{id:"minimax-m3",name:"MiniMax M3",supportedFormats:["openai"]},{id:"minimax-m2.7",name:"MiniMax M2.7",supportedFormats:["openai"]},{id:"minimax-m2.5",name:"MiniMax M2.5",supportedFormats:["openai"]},{id:"kimi-k3",name:"Kimi K3",supportedFormats:["openai"]},{id:"kimi-k2.7-code",name:"Kimi K2.7 Code",supportedFormats:["openai"]},{id:"kimi-k2.6",name:"Kimi K2.6",supportedFormats:["openai"]},{id:"kimi-k2.5",name:"Kimi K2.5",supportedFormats:["openai"]},{id:"big-pickle",name:"Big Pickle",supportedFormats:["openai"]},{id:"union-alpha",name:"Union Alpha",supportedFormats:["claude"]},{id:"deepseek-v4-flash-free",name:"DeepSeek V4 Flash Free",supportedFormats:["openai"]},{id:"mimo-v2.6-flash-free",name:"MiMo V2.6 Flash Free",supportedFormats:["openai"]},{id:"mimo-v2.5-free",name:"MiMo V2.5 Free",supportedFormats:["openai"]},{id:"ling-3.0-flash-fin-free",name:"Ling 3.0 Flash Fin Free",supportedFormats:["openai"]},{id:"nemotron-3-ultra-free",name:"Nemotron 3 Ultra Free",supportedFormats:["openai"]},{id:"nemotron-3.5-lightning-free",name:"Nemotron 3.5 Lightning Free",supportedFormats:["openai"]},{id:"muse-spark-1.3-contributor-free",name:"Muse Spark 1.3 Contributor Free",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"muse-spark-1.2-contributor-free",name:"Muse Spark 1.2 Contributor Free",targetFormat:"openai-responses",supportedFormats:["openai-responses"]},{id:"jev-1.13",name:"Jev 1.13",kind:"systemone"},{id:"jev-1.13-free",name:"Jev 1.13 Free",kind:"systemone"}],serviceKinds:["llm","systemone"],systemoneConfig:{baseUrl:"https://opencode.ai/inference/v1/systemone",headers:{"x-opencode-client":"cli","User-Agent":"opencode/latest/2.0.26/cli"}},modelsFetcher:{url:"https://opencode.ai/inference/v1/models",type:"opencode-free"},passthroughModels:!0,features:{usage:!0,usageApikey:!0}},{id:"qoder",priority:30,alias:"qd",uiAlias:"qd",display:{name:"Qoder",icon:"water_drop",color:"#EC4899",website:"https://qoder.com",notice:{signupUrl:"https://qoder.com"}},category:"oauth",authModes:["oauth","apikey"],hasOAuth:!0,authHint:"Personal Access Token (pt-...) from https://qoder.com/account/integrations",transport:{baseUrl:"https://api3.qoder.sh/algo/api/v2/service/pro/sse/agent_chat_generation",headers:{},timeoutMs:12e4,stallTimeoutMs:12e4,usage:{url:"https://openapi.qoder.sh/api/v2/quota/usage"}},models:[{id:"ultimate",name:"Ultimate"},{id:"auto",name:"Auto"},{id:"performance",name:"Performance"},{id:"efficient",name:"Efficient"},{id:"lite",name:"Lite"},{id:"qmodel_38max",name:"Qwen3.8-Max"},{id:"qmodel_latest",name:"Qwen3.7-Max"},{id:"qmodel",name:"Qwen3.7-Plus"},{id:"qfmodel",name:"Qwen3.8-Flash"},{id:"kmodel_latest",name:"Kimi-K3"},{id:"kmodel",name:"Kimi-K2.7-Code"},{id:"gmodel",name:"GLM-5.3"},{id:"gfmodel",name:"GLM-5.3-Flash"},{id:"dmodel",name:"DeepSeek-V4-Pro"},{id:"dfmodel",name:"DeepSeek-V4-Flash"},{id:"mmodel",name:"MiniMax-M3"}],oauth:{openApiBaseUrl:"https://openapi.qoder.sh",centerBaseUrl:"https://center.qoder.sh",chatBaseUrl:"https://api3.qoder.sh",deviceTokenUrl:"https://openapi.qoder.sh/api/v1/deviceToken/poll",refreshUrl:"https://center.qoder.sh/algo/api/v3/user/refresh_token",userInfoUrl:"https://openapi.qoder.sh/api/v1/userinfo",quotaUsageUrl:"https://openapi.qoder.sh/api/v2/quota/usage",loginUrl:"https://qoder.com/device/selectAccounts"},features:{usage:!0,usageApikey:!0}}]},51660:(e,a,i)=>{i.d(a,{Q2:()=>t.Q2,fg:()=>t.fg,vQ:()=>o,_$:()=>s,MA:()=>t.MA,UY:()=>m,Nu:()=>n,zN:()=>t.zN,B2:()=>r});var t=i(13794);i(80159);let o={name:"10Router Proxy",description:"AI Infrastructure Management",version:"0.1.14"},n={changelogUrl:"/api/changelog"},s=20128,r={storageKey:"theme",defaultTheme:"light"},m={maxLines:500,pollIntervalMs:1e3}},58014:(e,a,i)=>{i.d(a,{Xg:()=>F,vq:()=>k,KC:()=>x});var t=i(38891),o=i(65746);function n(e,a){let i=o.env[e];if(null==i||""===i)return a;let t=parseInt(i,10);return Number.isFinite(t)&&t>0?t:a}o.env.SEARXNG_URL?.trim(),n("STREAM_STALL_TIMEOUT_MS",36e4),n("STREAM_FIRST_CHUNK_TIMEOUT_MS",2e5),n("FETCH_CONNECT_TIMEOUT_MS",6e4),n("GEMINI_NATIVE_TTS_FETCH_TIMEOUT_MS",45e3);function s(e){return e.split(/[-_\s]+/).filter(Boolean).map(e=>/^\d/.test(e)?e:e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}let r=[[/^kimi-k(\d+(?:\.\d+)?)(-thinking)?$/i,e=>`Kimi K${e[1]}${e[2]?" Thinking":""}`],[/^glm-(\d+(?:\.\d+)?)(v)?$/i,e=>`GLM ${e[1]}${e[2]?"V (Vision)":""}`],[/^minimax-m(\d+(?:\.\d+)?)$/i,e=>`MiniMax M${e[1]}`],[/^gpt-(.+)$/i,e=>`GPT ${s(e[1])}`],[/^gemini-(.+)$/i,e=>`Gemini ${s(e[1])}`],[/^grok-(.+)$/i,e=>`Grok ${s(e[1])}`],[/^deepseek-(.+)$/i,e=>`DeepSeek ${s(e[1])}`],[/^qwen([\d.]+.*)$/i,e=>`Qwen ${s(e[1])}`]];function m(e){let a="string"==typeof e?{id:e}:e;return void 0!==a.name?a:{...a,name:function(e){if("string"!=typeof e)return e;for(let[a,i]of r){let t=e.match(a);if(t)return i(t)}return e}(a.id)}}let p={alloy:{id:"alloy",name:"Alloy"},ash:{id:"ash",name:"Ash"},ballad:{id:"ballad",name:"Ballad"},cedar:{id:"cedar",name:"Cedar"},coral:{id:"coral",name:"Coral"},echo:{id:"echo",name:"Echo"},fable:{id:"fable",name:"Fable"},marin:{id:"marin",name:"Marin"},nova:{id:"nova",name:"Nova"},onyx:{id:"onyx",name:"Onyx"},sage:{id:"sage",name:"Sage"},shimmer:{id:"shimmer",name:"Shimmer"},verse:{id:"verse",name:"Verse"}},d=(...e)=>e.map(e=>({...p[e],type:"tts"})),l=d("alloy","ash","coral","echo","fable","nova","onyx","sage","shimmer"),c=d("alloy","ash","ballad","cedar","coral","echo","fable","marin","nova","onyx","sage","shimmer","verse"),u=["Zephyr","Puck","Charon","Kore","Fenrir","Leda","Orus","Aoede","Callirrhoe","Autonoe","Enceladus","Iapetus","Umbriel","Algieba","Despina","Erinome","Algenib","Rasalgethi","Laomedeia","Achernar","Alnilam","Schedar","Gacrux","Pulcherrima","Achird","Zubenelgenubi","Vindemiatrix","Sadachbia","Sadaltager","Sulafat"].map(e=>({id:e,name:e,type:"tts"})),h={openai:{models:[{id:"gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"},{id:"tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"tts-1",name:"TTS-1",type:"tts"}],voices:{"gpt-4o-mini-tts":c,"tts-1":l,"tts-1-hd":l},allVoices:c},openrouter:{models:[{id:"openai/gpt-4o-mini-tts",name:"GPT-4o Mini TTS",type:"tts"},{id:"openai/tts-1-hd",name:"TTS-1 HD",type:"tts"},{id:"openai/tts-1",name:"TTS-1",type:"tts"}],voices:{"openai/gpt-4o-mini-tts":c,"openai/tts-1":l,"openai/tts-1-hd":l},allVoices:c},elevenlabs:{models:[{id:"eleven_flash_v2_5",name:"Flash v2.5 (Fastest)",type:"tts"},{id:"eleven_turbo_v2_5",name:"Turbo v2.5 (Fast)",type:"tts"},{id:"eleven_multilingual_v2",name:"Multilingual v2 (Quality)",type:"tts"},{id:"eleven_monolingual_v1",name:"Monolingual v1 (English)",type:"tts"}]},"edge-tts":{defaults:[{id:"en-US-AriaNeural",name:"Aria (en-US)",type:"tts"},{id:"en-US-GuyNeural",name:"Guy (en-US)",type:"tts"},{id:"en-GB-SoniaNeural",name:"Sonia (en-GB)",type:"tts"},{id:"vi-VN-HoaiMyNeural",name:"Hoai My (vi-VN)",type:"tts"},{id:"vi-VN-NamMinhNeural",name:"Nam Minh (vi-VN)",type:"tts"},{id:"zh-CN-XiaoxiaoNeural",name:"Xiaoxiao (zh-CN)",type:"tts"},{id:"zh-CN-YunxiNeural",name:"Yunxi (zh-CN)",type:"tts"},{id:"fr-FR-DeniseNeural",name:"Denise (fr-FR)",type:"tts"},{id:"de-DE-KatjaNeural",name:"Katja (de-DE)",type:"tts"},{id:"ja-JP-NanamiNeural",name:"Nanami (ja-JP)",type:"tts"},{id:"ko-KR-SunHiNeural",name:"SunHi (ko-KR)",type:"tts"}]},"local-device":{defaults:[{id:"default",name:"System Default Voice",type:"tts"}]},"google-tts":{defaults:[{id:"af",name:"Afrikaans",type:"tts"},{id:"ar",name:"Arabic",type:"tts"},{id:"bg",name:"Bulgarian",type:"tts"},{id:"bn",name:"Bengali",type:"tts"},{id:"bs",name:"Bosnian",type:"tts"},{id:"ca",name:"Catalan",type:"tts"},{id:"cs",name:"Czech",type:"tts"},{id:"cy",name:"Welsh",type:"tts"},{id:"da",name:"Danish",type:"tts"},{id:"de",name:"German",type:"tts"},{id:"el",name:"Greek",type:"tts"},{id:"en",name:"English",type:"tts"},{id:"eo",name:"Esperanto",type:"tts"},{id:"es",name:"Spanish",type:"tts"},{id:"et",name:"Estonian",type:"tts"},{id:"fi",name:"Finnish",type:"tts"},{id:"fr",name:"French",type:"tts"},{id:"gu",name:"Gujarati",type:"tts"},{id:"hi",name:"Hindi",type:"tts"},{id:"hr",name:"Croatian",type:"tts"},{id:"hu",name:"Hungarian",type:"tts"},{id:"hy",name:"Armenian",type:"tts"},{id:"id",name:"Indonesian",type:"tts"},{id:"is",name:"Icelandic",type:"tts"},{id:"it",name:"Italian",type:"tts"},{id:"ja",name:"Japanese",type:"tts"},{id:"jw",name:"Javanese",type:"tts"},{id:"km",name:"Khmer",type:"tts"},{id:"kn",name:"Kannada",type:"tts"},{id:"ko",name:"Korean",type:"tts"},{id:"la",name:"Latin",type:"tts"},{id:"lv",name:"Latvian",type:"tts"},{id:"mk",name:"Macedonian",type:"tts"},{id:"ml",name:"Malayalam",type:"tts"},{id:"mr",name:"Marathi",type:"tts"},{id:"my",name:"Myanmar (Burmese)",type:"tts"},{id:"ne",name:"Nepali",type:"tts"},{id:"nl",name:"Dutch",type:"tts"},{id:"no",name:"Norwegian",type:"tts"},{id:"pl",name:"Polish",type:"tts"},{id:"pt",name:"Portuguese",type:"tts"},{id:"ro",name:"Romanian",type:"tts"},{id:"ru",name:"Russian",type:"tts"},{id:"si",name:"Sinhala",type:"tts"},{id:"sk",name:"Slovak",type:"tts"},{id:"sq",name:"Albanian",type:"tts"},{id:"sr",name:"Serbian",type:"tts"},{id:"su",name:"Sundanese",type:"tts"},{id:"sv",name:"Swedish",type:"tts"},{id:"sw",name:"Swahili",type:"tts"},{id:"ta",name:"Tamil",type:"tts"},{id:"te",name:"Telugu",type:"tts"},{id:"th",name:"Thai",type:"tts"},{id:"tl",name:"Filipino",type:"tts"},{id:"tr",name:"Turkish",type:"tts"},{id:"uk",name:"Ukrainian",type:"tts"},{id:"ur",name:"Urdu",type:"tts"},{id:"vi",name:"Vietnamese",type:"tts"},{id:"zh-CN",name:"Chinese (Simplified)",type:"tts"},{id:"zh-TW",name:"Chinese (Traditional)",type:"tts"}]},gemini:{models:[{id:"gemini-3.1-flash-tts-preview",name:"Gemini 3.1 Flash TTS",type:"tts"},{id:"gemini-2.5-flash-preview-tts",name:"Gemini 2.5 Flash TTS",type:"tts"},{id:"gemini-2.5-pro-preview-tts",name:"Gemini 2.5 Pro TTS",type:"tts"}],voices:{"gemini-3.1-flash-tts-preview":u,"gemini-2.5-flash-preview-tts":u,"gemini-2.5-pro-preview-tts":u},allVoices:u},"xiaomi-mimo":{models:[{id:"mimo-v2.5-tts",name:"MiMo V2.5 TTS",type:"tts"}],voices:{"mimo-v2.5-tts":[{id:"mimo_default",name:"mimo_default"},{id:"冰糖",name:"冰糖"},{id:"茉莉",name:"茉莉"},{id:"苏打",name:"苏打"},{id:"白桦",name:"白桦"},{id:"Mia",name:"Mia"},{id:"Chloe",name:"Chloe"},{id:"Milo",name:"Milo"},{id:"Dean",name:"Dean"}].map(e=>({type:"tts",...e}))}}},g=["clientId","clientSecret","tokenUrl","refreshUrl"],f=new Set(["serviceKinds","ttsConfig","sttConfig","embeddingConfig","imageConfig","imageToTextConfig","videoConfig","musicConfig","searchViaChat","searchConfig","fetchConfig","systemoneConfig","modelsFetcher","mediaPriority","hiddenKinds"]),y={},k={},b={},v={};for(let e of t.A){e.transport&&(y[e.id]=function(e,a){let i={...e};if(i.format||(i.format="openai"),a)for(let e of g)void 0===i[e]&&void 0!==a[e]&&(i[e]=a[e]);return i}(e.transport,e.oauth),e.transports&&(y[e.id].transports=e.transports)),void 0!==e.models&&(k[e.alias||e.id]=e.models.map(m)),e.oauth&&(b[e.id]=e.oauth);let a={};for(let i of f)void 0!==e[i]&&(a[i]=e[i]);e.media&&Object.assign(a,e.media),Object.keys(a).length&&(v[e.id]=a)}Object.assign(k,function(){let e={};for(let[a,i]of Object.entries(h))i.models&&(e[`${a}-tts-models`]=i.models),i.allVoices&&(e[`${a}-tts-voices`]=i.allVoices),i.defaults&&(e[a]=i.defaults);return e["openai-tts-voices"]=h.openai.allVoices,e["openrouter-tts-voices"]=h.openrouter.allVoices,e}()),y["xiaomi-tokenplan"]?.regions,y["xiaomi-tokenplan"]?.defaultRegion;let M=Object.fromEntries(t.A.filter(e=>e.alias&&e.alias!==e.id).map(e=>[e.id,e.alias])),F=Object.fromEntries(Object.keys(y).map(e=>[e,M[e]||e]));function x(e){return k[F[e]||e]||[]}},80159:(e,a,i)=>{i.d(a,{CP:()=>o,KC:()=>t.KC,Xg:()=>t.Xg,bs:()=>n});var t=i(58014);Object.entries(i(13794).Q2).filter(([,e])=>e.passthroughModels).map(([e])=>e),Object.entries(t.vq).flatMap(([e,a])=>a.map(a=>({provider:e,model:a.id,name:a.name})));let o=(e,a=null)=>e?.kind||e?.type||a,n={vision:{icon:"visibility",label:"Vision",desc:"Supports image input",color:"text-blue-500"},reasoning:{icon:"neurology",label:"Reasoning",desc:"Supports reasoning / thinking",color:"text-amber-500"}}}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[712],{1352:(e,t,r)=>{"use strict";r.d(t,{Bc:()=>i,ZI:()=>l,k$:()=>o,m_:()=>d});var a=r(29798);r(15814);var s=r(5471),n=r(44484);function i({delayDuration:e=0,...t}){return(0,a.jsx)(n.Kq,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function d({...e}){return(0,a.jsx)(n.bL,{"data-slot":"tooltip",...e})}function o({...e}){return(0,a.jsx)(n.l9,{"data-slot":"tooltip-trigger",...e})}function l({className:e,sideOffset:t=0,children:r,...i}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"tooltip-content",sideOffset:t,className:(0,s.cn)("z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pr-1.5 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",e),...i,children:[r,(0,a.jsx)(n.i3,{className:"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground"})]})})}},13189:(e,t,r)=>{"use strict";r.d(t,{default:()=>D});var a=r(29798),s=r(15814),n=r(75669),i=r(18055),d=r(53784),o=r(77345),l=r(1352),c=r(45111),u=r(74719),g=r(66685),p=r(24477),x=r(26339),m=r(75877),f=r(51660);let h={USAGE:"usage",STREAM:"stream","STREAM USAGE":"usage",COMBO:"combo",FUSION:"combo",TOKEN:"token",RTK:"rtk",HEADROOM:"rtk",REQUEST:"request",PROXY:"proxy",AUTH:"auth",AG_QUOTA:"auth",DB:"db",TUNNEL:"tunnel",PROJECTID:"other"},v={debug:"debug",info:"info",log:"info",warn:"warn",error:"error"},b={debug:0,info:1,warn:2,error:3};function y(e,t){return b[t]>b[e]?t:e}function j(e,t){let r=v[e]??"info",a="other";if(/\[DBG:[^\]]+\]/.test(t)||t.includes("\uD83D\uDC1B"))return{level:"debug",category:"debug"};let s=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+(DEBUG|INFO|WARN|ERROR)\b/);if(s){let e=s[2].toLowerCase();b[e]>b[r]&&(r=e)}let n=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[[0-9a-f]{4}\]\s+([A-Z]+)\b/);if(n){let e=n[2];"REQ"===e?a="request":"DONE"===e?a="done":"SAVERS"===e?a="rtk":"REFRESH"===e?a="token":"BLOCKED"===e||"ABORT"===e?a="stream":"ERROR"===e&&(r=y(r,"error"),"other"===a&&(a="request"))}if("other"===a&&/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i.test(t)){let e=t.match(/^\[\d{1,2}:\d{2}(:\d{2})?\]\s+\[(http|stream|usage)\]/i)[2].toLowerCase();a="http"===e?"request":e}let i=t.match(/\[([A-Z][A-Z _-]*)\]/g);if(i)for(let e of i){let t=e.slice(1,-1).trim();if(h[t]){a=h[t];break}if("DBG"===t||t.startsWith("DBG:"))return{level:"debug",category:"debug"}}return t.includes("✗")||t.includes("❌")?(r=y(r,"error"),"other"===a&&(a="request")):t.includes("\uD83D\uDCCA")?t.includes("DONE")?a="done":"other"===a&&(a="usage"):t.includes("⚠️")?r=y(r,"warn"):t.includes("\uD83C\uDF0A")?"other"===a&&(a="stream"):t.includes("\uD83D\uDD11")||t.includes("TOKEN REFRESHED")?"other"===a&&(a="token"):t.includes("ℹ️")||t.includes("\uD83D\uDD0D")?t.includes("\uD83D\uDD0D")&&(r=y(r,"debug")):t.includes("\uD83D\uDCE5")&&"other"===a&&(a="request"),"other"===a&&/\b(POST|GET|PUT|DELETE|PATCH)\b/.test(t)&&(a="request"),/\bERROR \d{3}\b/.test(t)||/\bFAILED\b/.test(t)||/\bBLOCKED\b/.test(t)?r=y(r,"error"):/\b(falling back|fallback|unavailable|skipped|retry)\b/i.test(t)&&(r=y(r,"warn")),"other"===a&&(t.includes("[RTK]")||t.includes("HEADROOM")||t.includes("PXPIPE")?a="rtk":t.includes("[ProjectId]")?a="other":t.includes("[ProxyFetch]")?a="proxy":t.includes("[Tunnel]")?a="tunnel":t.includes("[DB]")?a="db":t.includes("[RequestDetail]")?a="request":t.includes("[STREAM]")?a="stream":t.includes("[TOKEN]")?a="token":t.includes("[COMBO]")||t.includes("[FUSION]")?a="combo":t.includes("[CHAT]")&&(a="request")),{level:r,category:a}}function k(e,t="log"){if("string"==typeof e){let{level:r,category:a}=j(t,e);return{ts:Date.now(),level:r,category:a,text:e}}if(e&&"object"==typeof e&&"string"==typeof e.text){if("number"==typeof e.ts&&e.level&&e.category)return e;let{level:r,category:a}=j(t,e.text);return{ts:"number"==typeof e.ts?e.ts:Date.now(),level:e.level??r,category:e.category??a,text:e.text}}let r=String(e??""),{level:a,category:s}=j(t,r);return{ts:Date.now(),level:a,category:s,text:r}}let w={debug:"secondary",info:"default",warn:"secondary",error:"destructive"},N={debug:"bg-muted text-muted-foreground",info:"bg-sky-500/15 text-sky-700 dark:text-sky-300",warn:"bg-amber-500/15 text-amber-700 dark:text-amber-300",error:""},z={debug:"DEBUG",info:"INFO",warn:"WARN",error:"ERROR"},A=["debug","info","warn","error"],E={all:"All categories",request:"Request",done:"Done",usage:"Usage",combo:"Combo",token:"Token",rtk:"RTK",stream:"Stream",debug:"Debug",auth:"Auth",proxy:"Proxy",db:"DB",tunnel:"Tunnel",other:"Other"},R=["request","done","usage","combo","token","rtk","stream","debug","auth","proxy","db","tunnel","other"],O=/^\[\d{1,2}:\d{2}(:\d{2})?(\s?[AP]M)?\]\s*/,C=/\b(IN|OUT) \d[\d,]*( \(CACHE [^)]*\))?|\b\d[\d,]*ms\b|\b[A-Za-z_][\w.-]*=[^\s·|,]+/g;function T({text:e,isError:t}){let[r,n]=(0,s.useMemo)(()=>{let t;return -1===(t=e.indexOf("\n"))?[e,null]:[e.slice(0,t),e.slice(t+1)]},[e]),i=(0,s.useMemo)(()=>(function(e){let t=[],r=0;for(let a of e.matchAll(C)){let s=a[0],n=a.index??0;if(n>r&&t.push({kind:"plain",text:e.slice(r,n)}),/^(IN|OUT) /.test(s))t.push({kind:"tokens",text:s});else if(/ms$/.test(s))t.push({kind:"duration",text:s});else{let e=s.indexOf("=");t.push({kind:"kv",key:s.slice(0,e+1),value:s.slice(e+1)})}r=n+s.length}return r<e.length&&t.push({kind:"plain",text:e.slice(r)}),0===t.length&&t.push({kind:"plain",text:e}),t})(r.replace(O,"")),[r]);return(0,a.jsxs)("span",{className:"break-words",children:[i.map((e,t)=>"duration"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-amber-700",children:e.text},t):"tokens"===e.kind?(0,a.jsx)("span",{className:"font-semibold text-emerald-700",children:e.text},t):"kv"===e.kind?(0,a.jsxs)("span",{children:[(0,a.jsx)("span",{className:"text-muted-foreground",children:e.key}),(0,a.jsx)("span",{className:"font-medium text-sky-700",children:e.value})]},t):(0,a.jsx)("span",{children:e.text},t)),n&&(0,a.jsxs)("details",{className:"mt-1",children:[(0,a.jsx)("summary",{className:`cursor-pointer text-[11px] font-medium ${t?"text-red-600":"text-muted-foreground"} hover:underline`,children:"Stack trace"}),(0,a.jsx)("pre",{className:"mt-1 max-h-40 overflow-auto rounded bg-muted p-2 text-[11px] whitespace-pre-wrap text-muted-foreground",children:n})]})]})}function _({entry:e}){let t="error"===e.level,r="warn"===e.level,s="done"===e.category;return(0,a.jsxs)("div",{className:`flex items-start gap-2 px-3 py-1.5 leading-relaxed ${t?"border-l-2 border-red-500 bg-red-500/5":r?"border-l-2 border-amber-500 bg-amber-500/5":s?"border-l-2 border-green-500 bg-green-500/5":"border-l-2 border-transparent hover:bg-muted/50"}`,children:[(0,a.jsx)("span",{className:"shrink-0 pt-0.5 text-[11px] text-muted-foreground tabular-nums",children:new Date(e.ts).toLocaleTimeString("en-US",{hour12:!1})}),(0,a.jsx)(d.E,{variant:w[e.level],className:`shrink-0 ${N[e.level]}`,children:z[e.level]}),(0,a.jsx)("span",{className:"shrink-0 rounded bg-muted px-1.5 py-0.5 text-[10px] font-semibold text-muted-foreground uppercase",children:E[e.category]}),(0,a.jsx)("span",{className:"min-w-0 flex-1 text-foreground",children:(0,a.jsx)(T,{text:e.text,isError:t})})]})}function S(e){return e.map(e=>k(e))}function D(){let[e,t]=(0,s.useState)([]),[r,h]=(0,s.useState)(!1),[v,b]=(0,s.useState)(!1),[y,j]=(0,s.useState)(!0),[N,O]=(0,s.useState)(""),[C,T]=(0,s.useState)(new Set(A)),[D,L]=(0,s.useState)("all"),M=(0,s.useRef)(null),U=(0,s.useRef)(v);(0,s.useEffect)(()=>{U.current=v},[v]);let q=async()=>{try{await fetch("/api/translator/console-logs",{method:"DELETE"})}catch(e){console.error("Failed to clear console logs:",e)}};(0,s.useEffect)(()=>{let e=new EventSource("/api/translator/console-logs/stream");return e.onopen=()=>h(!0),e.onmessage=e=>{if(U.current)return;let r=JSON.parse(e.data);if("init"===r.type)t(S(r.logs).slice(-f.UY.maxLines));else if("line"===r.type){let e=k(r.line);t(t=>{let r=[...t,e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else if("lines"===r.type){let e=S(r.lines);t(t=>{let r=[...t,...e];return r.length>f.UY.maxLines?r.slice(-f.UY.maxLines):r})}else"clear"===r.type&&t([])},e.onerror=()=>h(!1),()=>e.close()},[]),(0,s.useEffect)(()=>{y&&M.current&&(M.current.scrollTop=M.current.scrollHeight)},[e,y]);let B=(0,s.useMemo)(()=>{let t=N.trim().toLowerCase();return e.filter(e=>!!C.has(e.level)&&("all"===D||e.category===D)&&(!t||!!e.text.toLowerCase().includes(t)))},[e,C,D,N]),P=(0,s.useMemo)(()=>e.filter(e=>"error"===e.level).length,[e]),I=(0,s.useMemo)(()=>e.filter(e=>"warn"===e.level).length,[e]);return(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)(n.aR,{children:[(0,a.jsx)(n.ZB,{className:"sr-only",children:"Console logs"}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("span",{className:r?"size-2 rounded-full bg-green-500":"size-2 rounded-full bg-red-500"})}),(0,a.jsx)(l.ZI,{children:r?"Connected":"Disconnected"})]}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:[B.length,"/",e.length," lines",P>0&&(0,a.jsxs)("span",{className:"font-semibold text-red-600",children:[" \xb7 ",P," errors"]}),I>0&&(0,a.jsxs)("span",{className:"font-semibold text-yellow-600",children:[" \xb7 ",I," warnings"]})]}),(0,a.jsxs)("div",{className:"ml-auto flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(u.A,{className:"pointer-events-none absolute top-1/2 left-2.5 size-3.5 -translate-y-1/2 text-muted-foreground"}),(0,a.jsx)(o.p,{value:N,onChange:e=>O(e.target.value),placeholder:"Search logs…",className:"h-7 w-44 pl-8 text-xs"})]}),(0,a.jsx)("div",{className:"flex items-center gap-1",children:A.map(e=>(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsx)("button",{type:"button",onClick:()=>{T(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},className:`cursor-pointer transition-opacity ${C.has(e)?"opacity-100":"opacity-30 grayscale"}`,children:(0,a.jsx)(d.E,{variant:w[e],children:z[e]})})}),(0,a.jsx)(l.ZI,{children:`Toggle ${z[e]}`})]},e))}),(0,a.jsxs)(c.l6,{value:D,onValueChange:e=>L(e),children:[(0,a.jsx)(c.bq,{className:"h-7 w-32 text-xs",children:(0,a.jsx)(c.yv,{})}),(0,a.jsxs)(c.gC,{children:[(0,a.jsx)(c.eb,{value:"all",children:E.all}),R.map(e=>(0,a.jsx)(c.eb,{value:e,children:E[e]},e))]})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:()=>b(e=>!e),children:[v?(0,a.jsx)(g.A,{}):(0,a.jsx)(p.A,{}),v?"Resume":"Pause"]}),(0,a.jsxs)(l.m_,{children:[(0,a.jsx)(l.k$,{asChild:!0,children:(0,a.jsxs)(i.$,{size:"sm",variant:y?"secondary":"outline",onClick:()=>j(e=>!e),children:[(0,a.jsx)(x.A,{}),"Follow"]})}),(0,a.jsx)(l.ZI,{children:"Auto-scroll to newest"})]}),(0,a.jsxs)(i.$,{size:"sm",variant:"outline",onClick:q,children:[(0,a.jsx)(m.A,{}),"Clear"]})]})]})]}),(0,a.jsx)(n.Wu,{className:"pt-0",children:(0,a.jsx)("div",{ref:M,className:"h-[calc(100vh-220px)] overflow-y-auto rounded-b-lg border border-border bg-card p-2 font-mono text-xs",children:0===e.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No console logs yet."}):0===B.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No logs match the current filters."}):(0,a.jsx)("div",{className:"divide-y divide-border/50",children:B.map((e,t)=>(0,a.jsx)(_,{entry:e},t))})})})]})}},15298:(e,t,r)=>{Promise.resolve().then(r.bind(r,13189))},18055:(e,t,r)=>{"use strict";r.d(t,{$:()=>o});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let d=(0,s.F)("group/button inline-flex shrink-0 items-center justify-center rounded-md border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/80",outline:"border-border bg-background shadow-xs hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",ghost:"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50",destructive:"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",xs:"h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",lg:"h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",icon:"size-9","icon-xs":"size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function o({className:e,variant:t="default",size:r="default",asChild:s=!1,...l}){let c=s?i.bL:"button";return(0,a.jsx)(c,{"data-slot":"button","data-variant":t,"data-size":r,className:(0,n.cn)(d({variant:t,size:r,className:e})),...l})}},24477:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"pause",size:24,node:[["rect",{x:"14",y:"3",width:"5",height:"18",rx:"1",key:"kaeet6"}],["rect",{x:"5",y:"3",width:"5",height:"18",rx:"1",key:"1wsw3u"}]]};s.node;let n=(0,a.A)(s)},26339:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"arrow-down",size:24,node:[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]};s.node;let n=(0,a.A)(s)},28830:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-up",size:24,node:[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]};s.node;let n=(0,a.A)(s)},45111:(e,t,r)=>{"use strict";r.d(t,{bq:()=>u,eb:()=>p,gC:()=>g,l6:()=>l,yv:()=>c});var a=r(29798);r(15814);var s=r(5471),n=r(95862),i=r(58765),d=r(63587),o=r(28830);function l({...e}){return(0,a.jsx)(n.bL,{"data-slot":"select",...e})}function c({...e}){return(0,a.jsx)(n.WT,{"data-slot":"select-value",...e})}function u({className:e,size:t="default",children:r,...d}){return(0,a.jsxs)(n.l9,{"data-slot":"select-trigger","data-size":t,className:(0,s.cn)("flex w-fit items-center justify-between gap-1.5 rounded-md border border-input bg-background py-2 pr-2 pl-2.5 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...d,children:[r,(0,a.jsx)(n.In,{asChild:!0,children:(0,a.jsx)(i.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function g({className:e,children:t,position:r="popper",align:i="center",...d}){return(0,a.jsx)(n.ZL,{children:(0,a.jsxs)(n.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===r,className:(0,s.cn)("relative z-50 max-h-(--radix-select-content-available-height) min-w-36 origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95","popper"===r&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:r,align:i,...d,children:[(0,a.jsx)(x,{}),(0,a.jsx)(n.LM,{"data-position":r,className:(0,s.cn)("data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)","popper"===r&&""),children:t}),(0,a.jsx)(m,{})]})})}function p({className:e,children:t,...r}){return(0,a.jsxs)(n.q7,{"data-slot":"select-item",className:(0,s.cn)("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",e),...r,children:[(0,a.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,a.jsx)(n.VF,{children:(0,a.jsx)(d.A,{className:"pointer-events-none"})})}),(0,a.jsx)(n.p4,{children:t})]})}function x({className:e,...t}){return(0,a.jsx)(n.PP,{"data-slot":"select-scroll-up-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(o.A,{})})}function m({className:e,...t}){return(0,a.jsx)(n.wn,{"data-slot":"select-scroll-down-button",className:(0,s.cn)("z-10 flex cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",e),...t,children:(0,a.jsx)(i.A,{})})}},53784:(e,t,r)=>{"use strict";r.d(t,{E:()=>o});var a=r(29798);r(15814);var s=r(54366),n=r(5471),i=r(80954);let d=(0,s.F)("group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",{variants:{variant:{default:"bg-primary text-primary-foreground [a]:hover:bg-primary/80",secondary:"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",destructive:"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20",outline:"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",ghost:"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",link:"text-primary underline-offset-4 hover:underline"}},defaultVariants:{variant:"default"}});function o({className:e,variant:t="default",asChild:r=!1,...s}){let l=r?i.bL:"span";return(0,a.jsx)(l,{"data-slot":"badge","data-variant":t,className:(0,n.cn)(d({variant:t}),e),...s})}},58765:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"chevron-down",size:24,node:[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]};s.node;let n=(0,a.A)(s)},63587:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"check",size:24,node:[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]};s.node;let n=(0,a.A)(s)},66685:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"play",size:24,node:[["path",{d:"M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z",key:"10ikf1"}]]};s.node;let n=(0,a.A)(s)},74719:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"search",size:24,node:[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]};s.node;let n=(0,a.A)(s)},75669:(e,t,r)=>{"use strict";r.d(t,{BT:()=>o,Wu:()=>c,X9:()=>l,ZB:()=>d,Zp:()=>n,aR:()=>i});var a=r(29798);r(15814);var s=r(5471);function n({className:e,size:t="default",...r}){return(0,a.jsx)("div",{"data-slot":"card","data-size":t,className:(0,s.cn)("group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground shadow-xs ring-1 ring-foreground/10 [--card-spacing:--spacing(6)] has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(4)] *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",e),...r})}function i({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-header",className:(0,s.cn)("group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-(--card-spacing) has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-(--card-spacing)",e),...t})}function d({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-title",className:(0,s.cn)("font-heading text-base leading-normal font-medium group-data-[size=sm]/card:text-sm",e),...t})}function o({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-description",className:(0,s.cn)("text-sm text-muted-foreground",e),...t})}function l({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-action",className:(0,s.cn)("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...t})}function c({className:e,...t}){return(0,a.jsx)("div",{"data-slot":"card-content",className:(0,s.cn)("flex flex-col gap-3 px-(--card-spacing)",e),...t})}},75877:(e,t,r)=>{"use strict";r.d(t,{A:()=>n});var a=r(50009);let s={name:"trash",size:24,node:[["path",{d:"M10 11v6",key:"nco0om"}],["path",{d:"M14 11v6",key:"outv1u"}],["path",{d:"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6",key:"miytrc"}],["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2",key:"e791ji"}]],aliases:["trash-2"]};s.node;let n=(0,a.A)(s)},77345:(e,t,r)=>{"use strict";r.d(t,{p:()=>n});var a=r(29798);r(15814);var s=r(5471);function n({className:e,type:t,...r}){return(0,a.jsx)("input",{type:t,"data-slot":"input",className:(0,s.cn)("h-9 w-full min-w-0 rounded-md border border-input bg-background px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40",e),...r})}}},e=>{e.O(0,[5166,7552,9980,6428,4484,3577,5862,1660,427,9966,7358],()=>e(e.s=15298)),_N_E=e.O()}]);
@@ -1,21 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2134],{52908:(e,t,s)=>{Promise.resolve().then(s.bind(s,60875))},60875:(e,t,s)=>{"use strict";s.r(t),s.d(t,{default:()=>H});var a=s(29798),l=s(58913),r=s(15814),n=s(70782),i=s(50141),o=s.n(i),d=s(16653),c=s(63729),m=s(15764),p=s(75669),x=s(18055),u=s(13794),h=s(80159),f=s(63523),g=s(90619),y=s(51780);let j=new Map;async function b(e){if(!e?.url||!e?.type)return[];let t=j.get(e.url);if(t&&Date.now()<t.expiresAt)return t.data;try{let t=new URLSearchParams({url:e.url,type:e.type}),s=await fetch(`/api/providers/suggested-models?${t}`);if(!s.ok)return[];let a=(await s.json()).data??[];return j.set(e.url,{data:a,expiresAt:Date.now()+6e5}),a}catch{return[]}}function v({customModels:e=[],modelAliases:t={},providerAlias:s,builtInModels:a=[],type:l="llm",includeLegacyAliases:r=!0}){let n=new Set(a.map(e=>e.id)),i=new Set,o=[];for(let t of e){if(!t?.id||t.providerAlias!==s)continue;let e=t?.kind||t?.type||"llm";if(l&&e!==l||n.has(t.id))continue;let a=`${s}/${t.id}`;i.has(a)||(i.add(a),o.push({id:t.id,name:t.name||t.id,fullModel:a,source:"custom",type:e}))}if(!r)return o;let d=`${s}/`;for(let[e,s]of Object.entries(t||{})){if("string"!=typeof s||!s.startsWith(d))continue;let t=s.slice(d.length);!t||n.has(t)||i.has(s)||(i.add(s),o.push({id:t,alias:e,fullModel:s,source:"legacyAlias",type:l||"llm"}))}return o}var N=s(1352);function w({model:e,fullModel:t,alias:s,copied:r,onCopy:n,testStatus:i,isCustom:o,isFree:d,onDeleteAlias:c,onTest:p,isTesting:x,onDisable:u,caps:h}){let f="ok"===i?"#22c55e":"error"===i?"#ef4444":void 0;return(0,a.jsx)("div",{className:`group min-w-0 max-w-full rounded-lg border px-3 py-2 ${"ok"===i?"border-green-500/40":"error"===i?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:(0,a.jsxs)("div",{className:"flex min-w-0 items-start gap-2 sm:items-center",children:[(0,a.jsx)(l.default,{name:"ok"===i?"check_circle":"error"===i?"cancel":"smart_toy",className:"shrink-0 text-base",style:f?{color:f}:void 0}),(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[(0,a.jsx)("code",{className:"max-w-[72vw] truncate rounded bg-sidebar px-1.5 py-0.5 font-mono text-xs text-muted-foreground sm:max-w-[360px]",children:t}),(0,a.jsxs)("span",{className:"flex min-w-0 items-center text-[9px] gap-1 pl-1",children:[e.name&&(0,a.jsx)("span",{className:"truncate text-[9px] italic text-muted-foreground/70",children:e.name}),(0,a.jsx)(m.nh,{caps:h,colorOverride:"text-muted-foreground/70",size:12})]})]}),p&&(0,a.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,a.jsx)("button",{onClick:p,disabled:x,className:`rounded p-0.5 text-muted-foreground transition-opacity hover:bg-sidebar hover:text-primary ${x?"opacity-100":"opacity-100 sm:opacity-0 sm:group-hover:opacity-100"}`,children:(0,a.jsx)(l.default,{name:x?"progress_activity":"science",className:"text-sm",style:x?{animation:"spin 1s linear infinite"}:void 0})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:x?"Testing...":"Test"})]}),(0,a.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,a.jsx)("button",{onClick:()=>n(t,`model-${e.id}`),className:"rounded p-0.5 text-muted-foreground hover:bg-sidebar hover:text-primary",children:(0,a.jsx)(l.default,{name:r===`model-${e.id}`?"check":"content_copy",className:"text-sm"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:r===`model-${e.id}`?"Copied!":"Copy"})]}),o?(0,a.jsxs)(N.m_,{children:[(0,a.jsx)(N.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:c,className:"ml-auto rounded p-0.5 text-muted-foreground opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",children:(0,a.jsx)(l.default,{name:"close",className:"text-sm"})})}),(0,a.jsx)(N.ZI,{children:"Remove custom model"})]}):u?(0,a.jsxs)(N.m_,{children:[(0,a.jsx)(N.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:u,className:"ml-auto rounded p-0.5 text-muted-foreground opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",children:(0,a.jsx)(l.default,{name:"close",className:"text-sm"})})}),(0,a.jsx)(N.ZI,{children:"Disable this model"})]}):null]})})}var k=s(14231),C=s(7896),S=s(49787),A=s(63357),$=s(69962),T=s(59370);function O({modelId:e,fullModel:t,copied:s,onCopy:r,onDeleteAlias:n,onTest:i,testStatus:o,isTesting:d}){let c="ok"===o?"#22c55e":"error"===o?"#ef4444":void 0;return(0,a.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${"ok"===o?"border-green-500/40":"error"===o?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:[(0,a.jsx)(l.default,{name:"ok"===o?"check_circle":"error"===o?"cancel":"smart_toy",className:"text-base text-muted-foreground",style:c?{color:c}:void 0}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium truncate",children:e}),(0,a.jsxs)("div",{className:"flex items-center gap-1 mt-1",children:[(0,a.jsx)("code",{className:"text-xs text-muted-foreground font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:()=>r(t,`model-${e}`),className:"p-0.5 hover:bg-sidebar rounded text-muted-foreground hover:text-primary",children:(0,a.jsx)(l.default,{name:s===`model-${e}`?"check":"content_copy",className:"text-sm"})}),(0,a.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:s===`model-${e}`?"Copied!":"Copy"})]}),i&&(0,a.jsxs)("div",{className:"relative group/btn",children:[(0,a.jsx)("button",{onClick:i,disabled:d,className:"p-0.5 hover:bg-sidebar rounded text-muted-foreground hover:text-primary transition-colors",children:(0,a.jsx)(l.default,{name:d?"progress_activity":"science",className:"text-sm",style:d?{animation:"spin 1s linear infinite"}:void 0})}),(0,a.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-muted-foreground whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:d?"Testing...":"Test"})]})]})]}),(0,a.jsxs)(N.m_,{children:[(0,a.jsx)(N.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:n,className:"p-1 hover:bg-red-50 rounded text-red-500",children:(0,a.jsx)(l.default,{name:"delete",className:"text-sm"})})}),(0,a.jsx)(N.ZI,{children:"Remove model"})]})]})}function P({providerStorageAlias:e,providerDisplayAlias:t,modelAliases:s,customModels:n,copied:i,onCopy:o,onDeleteAlias:d,onAddCustomModel:c,onDeleteCustomModel:m,connections:p,isAnthropic:u}){let[h,f]=(0,r.useState)(""),[g,y]=(0,r.useState)(!1),[j,b]=(0,r.useState)(!1),[N,w]=(0,r.useState)(null),[k,C]=(0,r.useState)({}),S=async t=>{if(!N){w(t);try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${e}/${t}`})}),a=await s.json();C(e=>({...e,[t]:a.ok?"ok":"error"}))}catch{C(e=>({...e,[t]:"error"}))}finally{w(null)}}},A=v({customModels:n,modelAliases:s,providerAlias:e,type:"llm"}),$=async()=>{if(!h.trim()||g)return;let e=h.trim();if(A.some(t=>t.id===e))return void alert("Model already exists for this provider.");y(!0);try{await c(e),f("")}catch(e){console.log("Error adding model:",e)}finally{y(!1)}},T=async()=>{if(j)return;let e=p.find(e=>!1!==e.isActive);if(e){b(!0);try{let t=await fetch(`/api/providers/${e.id}/models`),s=await t.json();if(!t.ok)return void alert(s.error||"Failed to import models");let a=s.models||[];if(0===a.length)return void alert("No models returned from /models.");let l=0;for(let e of a){let t=e.id||e.name||e.model;t&&(A.some(e=>e.id===t)||(await c(t),l+=1))}0===l&&alert("No new models were added.")}catch(e){console.log("Error importing models:",e)}finally{b(!1)}}},E=p.some(e=>!1!==e.isActive);return(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("p",{className:"text-sm text-muted-foreground",children:["Add ",u?"Anthropic":"OpenAI","-compatible models manually or import them from the /models endpoint."]}),(0,a.jsxs)("div",{className:"flex items-end gap-2 flex-wrap",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-[240px]",children:[(0,a.jsx)("label",{htmlFor:"new-compatible-model-input",className:"text-xs text-muted-foreground mb-1 block",children:"Model ID"}),(0,a.jsx)("input",{id:"new-compatible-model-input",type:"text",value:h,onChange:e=>f(e.target.value),onKeyDown:e=>"Enter"===e.key&&$(),placeholder:u?"claude-3-opus-20240229":"gpt-4o",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary"})]}),(0,a.jsxs)(x.$,{size:"sm",onClick:$,disabled:!h.trim()||g,children:[(0,a.jsx)(l.default,{name:"add"}),g?"Adding...":"Add"]}),(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:T,disabled:!E||j,children:[(0,a.jsx)(l.default,{name:"download"}),j?"Importing...":"Import from /models"]})]}),!E&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Add a connection to enable importing models."}),A.length>0&&(0,a.jsx)("div",{className:"flex flex-col gap-3",children:A.map(({id:s,alias:l,source:r})=>(0,a.jsx)(O,{modelId:s,fullModel:`${t}/${s}`,copied:i,onCopy:o,onDeleteAlias:()=>"custom"===r?m(s):d(l),onTest:p.length>0?()=>S(s):void 0,testStatus:k[s],isTesting:N===s},`${r}-${e}/${s}`))})]})}var E=s(21796),I=s(77345),z=s(45111);function D({label:e,required:t,error:s,hint:l,className:r,children:n}){return(0,a.jsxs)("div",{className:`flex min-w-0 flex-col gap-1.5 ${r||""}`,children:[e&&(0,a.jsxs)("label",{className:"text-sm font-medium text-foreground",children:[e,t&&(0,a.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),n,s&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:s}),l&&!s&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:l})]})}function _({isOpen:e,provider:t,providerName:s,authType:l,authHint:n,website:i,proxyPools:o,error:d,onSave:c,onClose:m}){let p="__none__",h="ollama-local"===t,f="cookie"===l,g="xai"===t&&!f,y=f?"Cookie Value":"qoder"===t?"Personal Access Token (PAT)":"API Key",j="azure"===t,b=u.Q2?.[t]?.regions||null,v=u.Q2?.[t]?.defaultRegion||b?.[0]?.id||"",[N,w]=(0,r.useState)({name:"",apiKey:"",priority:1,proxyPoolId:p,ollamaHostUrl:""}),[k,C]=(0,r.useState)({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[A,$]=(0,r.useState)(v),[T,O]=(0,r.useState)(!1),[P,E]=(0,r.useState)(null),[U,J]=(0,r.useState)(!1),L=()=>h&&N.ollamaHostUrl.trim()?{baseUrl:N.ollamaHostUrl.trim()}:j?{azureEndpoint:k.azureEndpoint,apiVersion:k.apiVersion,deployment:k.deployment,organization:k.organization}:b&&A?{region:A}:void 0,R=async()=>{O(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:N.apiKey,providerSpecificData:L()})}),s=await e.json();E(s.valid?"success":"failed")}catch{E("failed")}finally{O(!1)}},K=async()=>{if(t&&(h||N.apiKey)&&(h||N.name)){J(!0);try{let e=!1;try{O(!0),E(null);let s=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:N.apiKey,providerSpecificData:L()})});e=!!(await s.json()).valid,E(e?"success":"failed")}catch{E("failed")}finally{O(!1)}await c({name:N.name||(h?"Ollama Local":""),apiKey:N.apiKey,priority:N.priority,proxyPoolId:N.proxyPoolId===p?null:N.proxyPoolId,testStatus:e?"active":"unknown",providerSpecificData:L()})}finally{J(!1)}}};return t?(0,a.jsx)(S.lG,{open:e,onOpenChange:e=>!e&&m(),children:(0,a.jsxs)(S.Cf,{className:"max-w-md",children:[(0,a.jsx)(S.c7,{children:(0,a.jsx)(S.L3,{children:`Add ${s||t} ${y}`})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsx)(D,{label:"Name",children:(0,a.jsx)(I.p,{value:N.name,onChange:e=>w({...N,name:e.target.value}),placeholder:h?"Ollama Local":"Production Key"})}),h&&(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(D,{label:"Ollama Host URL",className:"flex-1",children:(0,a.jsx)(I.p,{value:N.ollamaHostUrl,onChange:e=>w({...N,ollamaHostUrl:e.target.value}),placeholder:"http://localhost:11434"})}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(x.$,{onClick:R,disabled:T||U,variant:"secondary",children:T?"Checking...":"Check"})})]}),!h&&(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(D,{label:y,className:"flex-1",children:(0,a.jsx)(I.p,{type:f?"text":"password",value:N.apiKey,onChange:e=>w({...N,apiKey:e.target.value}),placeholder:f?"grok-web"===t?"sso=xxxxx... or just the raw value":"eyJhbGciOi...":g?"xai-...":"qoder"===t?"pt-...":""})}),(0,a.jsx)("div",{className:"pt-6",children:(0,a.jsx)(x.$,{onClick:R,disabled:!N.apiKey||T||U,variant:"secondary",children:T?"Checking...":"Check"})})]}),g&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Use a direct xAI API key from console.x.ai. This is separate from Grok Build OAuth."}),f&&n&&(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:[n,i&&(0,a.jsxs)(a.Fragment,{children:[" ",(0,a.jsxs)("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:["Open ",i.replace(/^https?:\/\//,"")]})]})]}),b&&(0,a.jsx)(D,{label:"Region",children:(0,a.jsxs)(z.l6,{value:A,onValueChange:e=>$(e),children:[(0,a.jsx)(z.bq,{className:"w-full",children:(0,a.jsx)(z.yv,{placeholder:"Select a region"})}),(0,a.jsx)(z.gC,{children:b.map(e=>(0,a.jsx)(z.eb,{value:String(e.id),children:e.label},e.id))})]})}),d&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:d}),j&&(0,a.jsxs)("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[(0,a.jsx)("h3",{className:"font-semibold mb-3 text-sm",children:"Azure OpenAI Configuration"}),(0,a.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,a.jsx)(D,{label:"Azure Endpoint",children:(0,a.jsx)(I.p,{value:k.azureEndpoint,onChange:e=>C({...k,azureEndpoint:e.target.value}),placeholder:"https://your-resource.openai.azure.com"})}),(0,a.jsx)(D,{label:"Deployment Name",children:(0,a.jsx)(I.p,{value:k.deployment,onChange:e=>C({...k,deployment:e.target.value}),placeholder:"gpt-4"})}),(0,a.jsx)(D,{label:"API Version",children:(0,a.jsx)(I.p,{value:k.apiVersion,onChange:e=>C({...k,apiVersion:e.target.value}),placeholder:"2024-10-01-preview"})}),(0,a.jsx)(D,{label:"Organization",children:(0,a.jsx)(I.p,{value:k.organization,onChange:e=>C({...k,organization:e.target.value}),placeholder:"Organization ID"})})]})]}),(0,a.jsx)(D,{label:"Priority",children:(0,a.jsx)(I.p,{type:"number",value:N.priority,onChange:e=>w({...N,priority:Number.parseInt(e.target.value)||1})})}),(0,a.jsx)(D,{label:"Proxy Pool",children:(0,a.jsxs)(z.l6,{value:N.proxyPoolId,onValueChange:e=>w({...N,proxyPoolId:e}),children:[(0,a.jsx)(z.bq,{className:"w-full",children:(0,a.jsx)(z.yv,{placeholder:"None"})}),(0,a.jsxs)(z.gC,{children:[(0,a.jsx)(z.eb,{value:p,children:"None"}),(o||[]).map(e=>(0,a.jsx)(z.eb,{value:String(e.id),children:e.name},e.id))]})]})}),0===(o||[]).length&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"No active proxy pools available. Create one in Proxy Pools page first."}),(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Legacy manual proxy fields are still accepted by API for backward compatibility."}),(0,a.jsx)(x.$,{onClick:K,className:"w-full",disabled:U||!h&&(!N.name||!N.apiKey)||j&&(!k.azureEndpoint||!k.deployment||!k.organization),children:U?"Saving...":"Save"})]})]})}):null}function U({label:e,required:t,error:s,hint:l,className:r,children:n}){return(0,a.jsxs)("div",{className:`flex min-w-0 flex-col gap-1.5 ${r||""}`,children:[e&&(0,a.jsxs)("label",{className:"text-sm font-medium text-foreground",children:[e,t&&(0,a.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),n,s&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:s}),l&&!s&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:l})]})}function J({isOpen:e,node:t,onSave:s,onClose:l,isAnthropic:n}){let[i,o]=(0,r.useState)({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[d,c]=(0,r.useState)(!1);(0,r.useEffect)(()=>{t&&o({name:t.name||"",prefix:t.prefix||"",apiType:t.apiType||"chat",baseUrl:t.baseUrl||(n?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[t,n]);let m=async()=>{if(i.name.trim()&&i.prefix.trim()&&i.baseUrl.trim()){c(!0);try{let e={name:i.name,prefix:i.prefix,baseUrl:i.baseUrl};n||(e.apiType=i.apiType),await s(e)}finally{c(!1)}}};return t?(0,a.jsx)(S.lG,{open:e,onOpenChange:e=>!e&&l(),children:(0,a.jsxs)(S.Cf,{className:"max-w-md",children:[(0,a.jsx)(S.c7,{children:(0,a.jsx)(S.L3,{children:`Edit ${n?"Anthropic":"OpenAI"} Compatible`})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsx)(U,{label:"Name",hint:"Required. A friendly label for this node.",children:(0,a.jsx)(I.p,{value:i.name,onChange:e=>o({...i,name:e.target.value}),placeholder:`${n?"Anthropic":"OpenAI"} Compatible (Prod)`})}),(0,a.jsx)(U,{label:"Prefix",hint:"Required. Used as the provider prefix for model IDs.",children:(0,a.jsx)(I.p,{value:i.prefix,onChange:e=>o({...i,prefix:e.target.value}),placeholder:n?"ac-prod":"oc-prod"})}),!n&&(0,a.jsx)(U,{label:"API Type",children:(0,a.jsxs)(z.l6,{value:i.apiType,onValueChange:e=>o({...i,apiType:e}),children:[(0,a.jsx)(z.bq,{className:"w-full",children:(0,a.jsx)(z.yv,{})}),(0,a.jsx)(z.gC,{children:[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}].map(e=>(0,a.jsx)(z.eb,{value:String(e.value),children:e.label},e.value))})]})}),(0,a.jsx)(U,{label:"Base URL",hint:`Use the base URL (ending in /v1) for your ${n?"Anthropic":"OpenAI"}-compatible API.`,children:(0,a.jsx)(I.p,{value:i.baseUrl,onChange:e=>o({...i,baseUrl:e.target.value}),placeholder:n?"https://api.anthropic.com/v1":"https://api.openai.com/v1"})}),(0,a.jsx)(x.$,{onClick:m,className:"w-full",disabled:!i.name.trim()||!i.prefix.trim()||!i.baseUrl.trim()||d,children:d?"Saving...":"Save"})]})]})}):null}var L=s(69221);let R=()=>Object.fromEntries(Object.keys(h.bs).map(e=>[e,!1]));function K({isOpen:e,providerAlias:t,providerDisplayAlias:s,onSave:n,onClose:i}){let[o,d]=(0,r.useState)(""),[c,m]=(0,r.useState)(R),[p,u]=(0,r.useState)(null),[f,g]=(0,r.useState)(""),[y,j]=(0,r.useState)(!1);(0,r.useEffect)(()=>{e&&(d(""),m(R()),u(null),g(""))},[e]);let b=e=>{let s=`${t}/`;return e.startsWith(s)?e.slice(s.length):e},v=async()=>{let e=b(o.trim());if(e){u("testing"),g("");try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${t}/${e}`})}),a=await s.json();u(a.ok?"ok":"error"),g(a.error||"")}catch(e){u("error"),g(e.message)}}},N=async()=>{let e=b(o.trim());if(e&&!y){j(!0);try{await n(e,c)}finally{j(!1)}}};return(0,a.jsx)(S.lG,{open:e,onOpenChange:e=>!e&&i(),children:(0,a.jsxs)(S.Cf,{className:"max-w-md",children:[(0,a.jsx)(S.c7,{children:(0,a.jsx)(S.L3,{children:"Add Custom Model"})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Model ID"}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)("input",{type:"text",value:o,onChange:e=>{d(e.target.value),u(null),g("")},onKeyDown:e=>{"Enter"===e.key&&v()},placeholder:"e.g. claude-opus-4-5",className:"flex-1 min-w-0 px-3 py-2 text-sm border border-border rounded-lg bg-background focus:outline-none focus:border-primary",autoFocus:!0}),(0,a.jsxs)(x.$,{variant:"secondary",disabled:!o.trim()||"testing"===p,onClick:v,children:["testing"===p&&(0,a.jsx)(L.A,{className:"size-4 animate-spin"}),"testing"!==p&&(0,a.jsx)(l.default,{name:"science"}),"testing"===p?"Testing...":"Test"]})]}),(0,a.jsxs)("p",{className:"text-xs text-muted-foreground mt-1",children:["Sent to provider as:"," ",(0,a.jsx)("code",{className:"font-mono bg-sidebar px-1 rounded",children:b(o.trim())||"model-id"})]})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Capabilities"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-4",children:Object.entries(h.bs).map(([e,t])=>(0,a.jsxs)("label",{className:"flex cursor-pointer items-center gap-2.5",onClick:t=>{t.preventDefault(),m(t=>({...t,[e]:!t[e]}))},children:[(0,a.jsx)(k.d,{checked:!!c[e],onCheckedChange:t=>m(s=>({...s,[e]:t})),size:"sm","aria-label":t.label}),(0,a.jsxs)("span",{children:[(0,a.jsx)("span",{className:"block text-sm font-medium",children:t.label}),(0,a.jsx)("span",{className:"block text-xs text-muted-foreground",children:t.desc})]})]},e))})]}),"ok"===p&&(0,a.jsxs)("div",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,a.jsx)(l.default,{name:"check_circle",className:"text-base"}),"Model is reachable"]}),"error"===p&&(0,a.jsxs)("div",{className:"flex items-start gap-2 text-sm text-red-500",children:[(0,a.jsx)(l.default,{name:"cancel",className:"text-base shrink-0"}),(0,a.jsx)("span",{children:f||"Model not reachable"})]}),(0,a.jsx)(x.$,{onClick:N,className:"w-full",size:"sm",disabled:!o.trim()||y,children:y?"Adding...":"Add Model"})]})]})})}let F=`[
2
- {
3
- "accessToken": "eyJhbGc...",
4
- "refreshToken": "rt_...",
5
- "idToken": "eyJhbGc...",
6
- "email": "user@example.com"
7
- }
8
- ]`;function M({isOpen:e,onClose:t,onSuccess:s}){let[l,n]=(0,r.useState)(""),[i,o]=(0,r.useState)(!1),[d,c]=(0,r.useState)(""),[m,p]=(0,r.useState)(null),u=()=>{i||(n(""),c(""),p(null),t())},h=async()=>{var e;let t;c(""),p(null);let a=l.trim();if(!a)return;try{t=JSON.parse(a)}catch(e){c(`${(0,y.Tl)("Invalid JSON")}: ${e.message}`);return}let r=Array.isArray(e=t)?e:e&&"object"==typeof e?Array.isArray(e.accounts)?e.accounts:[e]:null;if(!r||0===r.length)return void c((0,y.Tl)("No accounts found in input"));o(!0);try{let e=await fetch("/api/oauth/codex/bulk-import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accounts:r})}),t=await e.json();if(!e.ok)return void c(t?.error||`Request failed: ${e.status}`);p(t),t.success>0&&"function"==typeof s&&s()}catch(e){c(e.message||(0,y.Tl)("Request failed"))}finally{o(!1)}},f=m?.results?.filter(e=>!e.ok)||[];return(0,a.jsx)(S.lG,{open:e,onOpenChange:e=>!e&&u(),children:(0,a.jsxs)(S.Cf,{className:"max-w-md",children:[(0,a.jsx)(S.c7,{children:(0,a.jsx)(S.L3,{children:(0,y.Tl)("Bulk Add Codex Accounts")})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:(0,y.Tl)("Paste an array of codex account JSON objects. Each must include accessToken (and ideally refreshToken, idToken).")}),(0,a.jsx)("textarea",{className:"w-full rounded border border-accent/30 bg-sidebar p-2 text-sm font-mono resize-y min-h-[240px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:F,value:l,onChange:e=>n(e.target.value),disabled:i}),d&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:d}),m&&(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsxs)("div",{className:`text-sm font-medium ${m.failed>0?"text-yellow-400":"text-green-400"}`,children:["✓ ",m.success," ",(0,y.Tl)("added"),m.failed>0?`, ✗ ${m.failed} ${(0,y.Tl)("failed")}`:""]}),f.length>0&&(0,a.jsx)("ul",{className:"rounded border border-accent/20 bg-sidebar/50 p-2 text-xs font-mono max-h-40 overflow-y-auto",children:f.map(e=>(0,a.jsxs)("li",{className:"text-red-400",children:["[",e.index,"] ",e.error]},e.index))})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(x.$,{onClick:h,className:"w-full",disabled:i||!l.trim(),children:i?(0,y.Tl)("Importing..."):(0,y.Tl)("Import All")}),(0,a.jsx)(x.$,{onClick:u,variant:"ghost",className:"w-full",disabled:i,children:(0,y.Tl)("Close")})]})]})]})})}let G=`[
9
- {
10
- "access_token": "eyJ0eXAiOiJhdCtqd3Qi...",
11
- "refresh_token": "LZhriF9bf88pPykpXCuZ9...",
12
- "id_token": "eyJ0eXAiOiJKV1QiLCJhbGci...",
13
- "email": "account1@example.com"
14
- },
15
- {
16
- "access_token": "eyJ0eXAiOiJhdCtqd3Qi...",
17
- "refresh_token": "LZhriF9bf88pPykpXCuZ9...",
18
- "id_token": "eyJ0eXAiOiJKV1QiLCJhbGci...",
19
- "email": "account2@example.com"
20
- }
21
- ]`;function q(e){let t,s=e.trim();if(!s)return[];try{t=JSON.parse(s)}catch(e){try{let e=s;e.startsWith("[")||((e=e.replace(/\}\s*,\s*\{/g,"},{").replace(/\}\s*\{/g,"},{")).endsWith(",")&&(e=e.slice(0,-1)),e=`[${e}]`),t=JSON.parse(e)}catch{throw e}}if(Array.isArray(t))return t;if(t&&"object"==typeof t)return Array.isArray(t.accounts)?t.accounts:[t];throw Error("Input must be a JSON object or array of objects")}function Z({isOpen:e,onClose:t,onSuccess:s}){let[n,i]=(0,r.useState)(""),[o,d]=(0,r.useState)(!1),[c,m]=(0,r.useState)(""),[p,u]=(0,r.useState)(null),[h,f]=(0,r.useState)(!1),[g,j]=(0,r.useState)(null),b=(0,r.useRef)(null),v=()=>{o||(i(""),m(""),u(null),j(null),f(!1),t())},N=async e=>{if(!e||0===e.length)return;m("");let t=Array.from(e).filter(e=>e.name.endsWith(".json")||"application/json"===e.type||""===e.type);if(0===t.length)return void m((0,y.Tl)("Please select valid .json files"));try{let e=[];for(let s of t){let t=await s.text(),a=q(t);Array.isArray(a)?e.push(...a):a&&e.push(a)}if(0===e.length)return void m((0,y.Tl)("No accounts found in selected files"));i(JSON.stringify(e,null,2)),j({filesCount:t.length,accountsCount:e.length})}catch(e){m(`${(0,y.Tl)("Error reading files")}: ${e.message}`)}},w=async()=>{let e;m(""),u(null);try{e=q(n)}catch(e){m(`${(0,y.Tl)("Invalid JSON")}: ${e.message}`);return}if(!e||0===e.length)return void m((0,y.Tl)("No accounts found in input"));d(!0);try{let t=await fetch("/api/oauth/grok-cli/bulk-import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accounts:e})}),a=await t.json();if(!t.ok)return void m(a?.error||`Request failed: ${t.status}`);u(a),a.success>0&&"function"==typeof s&&s()}catch(e){m(e.message||(0,y.Tl)("Request failed"))}finally{d(!1)}},k=p?.results?.filter(e=>!e.ok)||[];return(0,a.jsx)(S.lG,{open:e,onOpenChange:e=>!e&&v(),children:(0,a.jsxs)(S.Cf,{className:"max-w-md",children:[(0,a.jsx)(S.c7,{children:(0,a.jsx)(S.L3,{children:(0,y.Tl)("Bulk Add Grok CLI Accounts")})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:(0,y.Tl)("Upload multiple .json files or paste JSON array / object.")}),(0,a.jsx)("input",{ref:b,type:"file",accept:".json,application/json",multiple:!0,className:"hidden",onChange:e=>{N(e.target.files),e.target&&(e.target.value="")}}),(0,a.jsxs)(x.$,{type:"button",size:"sm",variant:"secondary",onClick:()=>b.current?.click(),disabled:o,children:[(0,a.jsx)(l.default,{name:"upload_file"}),(0,y.Tl)("Upload JSON Files")]})]}),(0,a.jsxs)("div",{onDragOver:e=>{e.preventDefault(),f(!0)},onDragLeave:e=>{e.preventDefault(),f(!1)},onDrop:e=>{e.preventDefault(),f(!1),e.dataTransfer?.files?.length>0&&N(e.dataTransfer.files)},className:`relative rounded border transition-colors ${h?"border-primary bg-primary/10 ring-2 ring-primary/30":"border-accent/30 bg-sidebar"}`,children:[(0,a.jsx)("textarea",{className:"w-full rounded bg-transparent p-2.5 text-sm font-mono resize-y min-h-[240px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:G,value:n,onChange:e=>{i(e.target.value),j(null)},disabled:o}),h&&(0,a.jsxs)("div",{className:"absolute inset-0 flex flex-col items-center justify-center bg-sidebar/90 rounded pointer-events-none backdrop-blur-xs",children:[(0,a.jsx)(l.default,{name:"upload_file",className:"text-3xl text-primary mb-1"}),(0,a.jsx)("span",{className:"text-sm font-medium text-primary",children:(0,y.Tl)("Drop .json files here")})]})]}),g&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5 text-xs text-green-400 font-medium bg-green-500/10 border border-green-500/20 px-2.5 py-1.5 rounded",children:[(0,a.jsx)(l.default,{name:"check_circle",className:"text-sm"}),(0,a.jsxs)("span",{children:[(0,y.Tl)("Loaded")," ",g.accountsCount," ",(0,y.Tl)("account(s) from")," ",g.filesCount," ",(0,y.Tl)("file(s)")]})]}),c&&(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:c}),p&&p.failed>0&&(0,a.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,a.jsxs)("div",{className:"text-sm font-medium text-yellow-400",children:["✗ ",p.failed," ",(0,y.Tl)("failed")]}),k.length>0&&(0,a.jsx)("ul",{className:"rounded border border-accent/20 bg-sidebar/50 p-2 text-xs font-mono max-h-40 overflow-y-auto",children:k.map(e=>(0,a.jsxs)("li",{className:"text-red-400",children:["[",e.index,"] ",e.error]},e.index))})]}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(x.$,{onClick:w,className:"w-full",disabled:o||!n.trim(),children:o?(0,y.Tl)("Importing..."):(0,y.Tl)("Import All")}),(0,a.jsx)(x.$,{onClick:v,variant:"ghost",className:"w-full",disabled:o,children:(0,y.Tl)("Close")})]})]})]})})}let B={claude:"claudeAutoPing",codex:"codexAutoPing"};function H(){let e,t,s,i,j,O=(0,n.useParams)(),I=(0,n.useRouter)(),z=O.id,{getCaps:D}=(0,g.y)(),[U,L]=(0,r.useState)([]),[R,F]=(0,r.useState)(!0),[G,q]=(0,r.useState)(null),[H,V]=(0,r.useState)([]),[W,Q]=(0,r.useState)(!1),[X,Y]=(0,r.useState)(!1),[ee,et]=(0,r.useState)(!1),[es,ea]=(0,r.useState)(!1),[el,er]=(0,r.useState)(""),[en,ei]=(0,r.useState)(!1),[eo,ed]=(0,r.useState)(!1),[ec,em]=(0,r.useState)(!1),[ep,ex]=(0,r.useState)(!1),[eu,eh]=(0,r.useState)(!1),[ef,eg]=(0,r.useState)(null),[ey,ej]=(0,r.useState)({}),[eb,ev]=(0,r.useState)([]),[eN,ew]=(0,r.useState)(!1),[ek,eC]=(0,r.useState)({}),[eS,eA]=(0,r.useState)(""),[e$,eT]=(0,r.useState)(()=>new Set),[eO,eP]=(0,r.useState)(!1),[eE,eI]=(0,r.useState)([]),[ez,eD]=(0,r.useState)(!1),[e_,eU]=(0,r.useState)(null),[eJ,eL]=(0,r.useState)(""),[eR,eK]=(0,r.useState)({enabled:!1,connections:{}}),[eF,eM]=(0,r.useState)([]),[eG,eq]=(0,r.useState)([]),[eZ,eB]=(0,r.useState)(null),[eH,eV]=(0,r.useState)([]),[eW,eQ]=(0,r.useState)([]),[eX,eY]=(0,r.useState)(null),[e0,e1]=(0,r.useState)(!1),e5=function(e){let[t,s]=(0,r.useState)(!1),[a,l]=(0,r.useState)(!1),[n,i]=(0,r.useState)(null),[o,d]=(0,r.useState)({}),[c,m]=(0,r.useState)(null),p=(0,r.useRef)(!1),x=async()=>{if(t||0===e.length)return;let a=Object.fromEntries(e.map(e=>[e.id,{state:"queued",error:null}]));p.current=!1,s(!0),l(!1),i(null),d(a),m({total:e.length,completed:0,passed:0,failed:0,stopped:!1});let r=0,n=0;try{for(let t=0;t<e.length;t+=1){if(p.current){m({total:e.length,completed:t,passed:r,failed:n,stopped:!0});break}let s=e[t];i(s.id),d(e=>({...e,[s.id]:{state:"testing",error:null}}));try{let e=await fetch(`/api/providers/${s.id}/test`,{method:"POST"}),t=await e.json(),a=!!t.valid;a?r+=1:n+=1,d(e=>({...e,[s.id]:{state:a?"success":"failed",error:a?null:t.error||null}}))}catch(e){n+=1,d(t=>({...t,[s.id]:{state:"failed",error:e.message||"Test failed"}}))}m({total:e.length,completed:t+1,passed:r,failed:n,stopped:!1}),t<e.length-1&&await new Promise(e=>setTimeout(e,1e3))}}finally{i(null),s(!1),l(!1),p.current=!1}};return{running:t,stopping:a,currentConnectionId:n,results:o,summary:c,run:x,stop:()=>{t&&(p.current=!0,l(!0))}}}(U),e2=e5.running,e4=e5.stopping,e3=e5.currentConnectionId,e6=e5.results,e7=e5.summary,e9=e5.run,e8=e5.stop,[te,tt]=(0,r.useState)(!1),{copied:ts,copy:ta}=(0,f.C)(),tl="ag_risk_confirmed",tr=()=>{Q(!0)},tn=()=>{"antigravity"===z&&"true"!==window.localStorage.getItem(tl)?e1(!0):"xiaomi-mimo"===z?Y(!0):tm?tr():(er(""),ea(!0))},ti=()=>{er(""),ea(!0)},to=()=>{tm?tn():ti()},td=G?{id:G.id,name:G.name||("anthropic-compatible"===G.type?"Anthropic Compatible":"OpenAI Compatible"),color:"anthropic-compatible"===G.type?"#D97757":"#10A37F",textIcon:"anthropic-compatible"===G.type?"AC":"OC",apiType:G.apiType,baseUrl:G.baseUrl,type:G.type}:u.zN[z]||u.fg[z]||u.IS[z]||u.nJ[z]||u.br[z],tc=td?.authModes||[],tm=!!u.zN[z]||!!u.IS[z]||tc.includes("oauth"),tp=!!u.fg[z]||tc.includes("apikey"),tx=!!u.IS[z]?.noAuth,tu=(0,h.KC)(z),th=("cursor"===z||"zed"===z)&&eG.length>0?eG:tu,tf=(0,u.wG)(z),tg=(0,u.mq)(z),ty=(0,u.gb)(z),tj=tg||ty,tb=!tj&&tm&&tp,tv="xai"===z?"Grok Build OAuth":"grok-cli"===z?"Grok CLI Device Login":"OAuth",tN="xai"===z?"xAI API Key":"qoder"===z?"PAT":"API Key",tw=tj?z:tf,tk=tj?G?.prefix||z:tf,tC=(0,r.useCallback)(async()=>{try{let e=await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tw)}`,{cache:"no-store"}),t=await e.json();e.ok&&eQ(t.ids||[])}catch(e){console.log("Error fetching disabled models:",e)}},[tw]),tS=async e=>{try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:tw,ids:[e]})})).ok&&await tC()}catch(e){console.log("Error disabling model:",e)}},tA=async e=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tw)}&id=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await tC()}catch(e){console.log("Error enabling model:",e)}},t$=async e=>{e.length&&eY({title:"Disable All Models",message:`Disable all ${e.length} model(s)?`,onConfirm:async()=>{eY(null);try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:tw,ids:e})})).ok&&await tC()}catch(e){console.log("Error disabling all models:",e)}}})},tT=async()=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(tw)}`,{method:"DELETE"})).ok&&await tC()}catch(e){console.log("Error enabling all models:",e)}},tO=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&ej(t.aliases||{})}catch(e){console.log("Error fetching aliases:",e)}},[]),tP=(0,r.useCallback)(async()=>{try{let e=await fetch("/api/models/custom",{cache:"no-store"}),t=await e.json();e.ok&&ev(t.models||[])}catch(e){console.log("Error fetching custom models:",e)}},[]);(0,r.useEffect)(()=>{"kilocode"===z&&fetch("/api/providers/kilo/free-models").then(e=>e.json()).then(e=>{e.models?.length&&eV(e.models)}).catch(()=>{})},[z]);let tE=(0,r.useCallback)(async()=>{try{let[e,t,s,a]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/provider-nodes",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),l=await e.json(),r=await t.json(),n=await s.json(),i=a.ok?await a.json():{};if(e.ok){let e=(l.connections||[]).filter(e=>e.provider===z);L(e)}s.ok&&V(n.proxyPools||[]);let o=(i.providerStrategies||{})[z]||{};eU(o.fallbackStrategy||null),eL(null!=o.stickyRoundRobinLimit?String(o.stickyRoundRobinLimit):"1");let d=B[z],c=d&&i[d]||{};if(eK({enabled:!0===c.enabled,connections:c.connections||{}}),t.ok){let e=(r.nodes||[]).find(e=>e.id===z)||null;if(!e&&tj)for(let t=0;t<3;t+=1){await new Promise(e=>setTimeout(e,150));let t=await fetch("/api/provider-nodes",{cache:"no-store"});if(t.ok&&(e=((await t.json()).nodes||[]).find(e=>e.id===z)||null))break}q(e)}}catch(e){console.log("Error fetching connections:",e)}finally{F(!1)}},[z,tj]),tI=async e=>{try{let t=await fetch(`/api/provider-nodes/${z}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),s=await t.json();t.ok&&(q(s.node),await tE(),ex(!1))}catch(e){console.log("Error updating provider node:",e)}},tz=async(e,t)=>{try{let s=await fetch("/api/settings",{cache:"no-store"}),a=(s.ok?await s.json():{}).providerStrategies||{},l={};e&&(l.fallbackStrategy=e),"round-robin"===e&&""!==t&&(l.stickyRoundRobinLimit=Number(t)||3);let r={...a};0===Object.keys(l).length?delete r[z]:r[z]=l,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:r})})}catch(e){console.log("Error saving provider strategy:",e)}},tD=async e=>{let t=B[z];if(t){eK(e);try{await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[t]:e})})}catch(e){console.log("Error saving auto-ping config:",e)}}};(0,r.useEffect)(()=>{tE(),tO(),tP(),tC()},[tE,tO,tP,tC]),(0,r.useEffect)(()=>{if("cursor"!==z&&"zed"!==z)return void eq([]);let e=U.find(e=>!1!==e.isActive);if(!e?.id){eq([]),"zed"===z&&eB(null);return}let t=!1;return"zed"===z&&eB(null),fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}).then(async e=>({ok:e.ok,data:await e.json().catch(()=>null)})).then(({ok:e,data:s})=>{if(!t){if(e&&Array.isArray(s?.models)&&s.models.length>0){eq(s.models),"zed"===z&&s?.warning&&eB(s.warning);return}"zed"===z&&(eq([]),eB(s?.warning||s?.error||"Zed returned no live models."))}}).catch(()=>{t||"zed"!==z||(eq([]),eB("Failed to reach the Zed model catalog."))}),()=>{t=!0}},[z,U]),(0,r.useEffect)(()=>{let e=(u.zN[z]||u.fg[z]||u.IS[z]||u.nJ[z])?.modelsFetcher;e&&b(e).then(eM)},[z]);let t_=async(e,t,s=tf)=>{let a=`${s}/${e}`;try{let e=await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:a,alias:t})});if(e.ok)await tO();else{let t=await e.json();alert(t.error||"Failed to set alias")}}catch(e){console.log("Error setting alias:",e)}},tU=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await tO()}catch(e){console.log("Error deleting alias:",e)}},tJ=async(e,t="llm",s=tw,a)=>{try{let l=await fetch("/api/models/custom",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:s,id:e,type:t,...a?{caps:a}:{}})});if(l.ok)await tP(),window.dispatchEvent(new CustomEvent("customModelChanged"));else{let e=await l.json();alert(e.error||"Failed to add custom model")}}catch(e){console.log("Error adding custom model:",e)}},tL=async(e,t="llm",s=tw)=>{try{let a=new URLSearchParams({providerAlias:s,id:e,type:t});(await fetch(`/api/models/custom?${a}`,{method:"DELETE"})).ok&&(await tP(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("Error deleting custom model:",e)}},tR=async()=>{if(te)return;let e=U.find(e=>!1!==e.isActive);if(!e)return void alert((0,y.Tl)("Please add an active Qoder connection first"));tt(!0);try{let t=await fetch(`/api/providers/${e.id}/models`),s=await t.json();if(!t.ok)return void alert(s.error||(0,y.Tl)("Failed to fetch models"));let a=s.models||[];if(0===a.length)return void alert((0,y.Tl)("No models returned"));let l=0;for(let e of a){let t=e.id||e.name;if(!t)continue;let s=t.replace(/^qoder\//,"");eb.some(e=>e.providerAlias===tw&&e.id===s&&"llm"===(e.kind||e.type||"llm"))||Object.values(ey).includes(`${tw}/${s}`)||(await tJ(s,"llm",tw),l+=1)}0===l?alert((0,y.Tl)("All models already exist, no new models added")):alert((0,y.Tl)("Successfully added")+` ${l} `+(0,y.Tl)("models"))}catch(e){console.log("Error importing Qoder models:",e),alert((0,y.Tl)("Error fetching models")+": "+e.message)}finally{tt(!1)}},tK=async e=>{eY({title:"Delete Connection",message:"Delete this connection?",onConfirm:async()=>{eY(null);try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&L(t=>t.filter(t=>t.id!==e))}catch(e){console.log("Error deleting connection:",e)}}})},tF=()=>{tE(),Q(!1)},tM=async e=>{er("");try{let t=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:z,...e})}),s=null;try{s=await t.json()}catch{s=null}if(t.ok){await tE(),ea(!1);return}er(s?.error||"Failed to save connection")}catch(e){console.log("Error saving connection:",e),er("Failed to save connection")}},tG=async e=>{try{(await fetch(`/api/providers/${ef.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await tE(),em(!1))}catch(e){console.log("Error updating connection:",e)}},tq=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&L(s=>s.map(s=>s.id===e?{...s,isActive:t}:s))}catch(e){console.log("Error updating connection status:",e)}},tZ=async(e,t)=>{let s=[...U];[s[e],s[t]]=[s[t],s[e]],L(s);try{await Promise.all([fetch(`/api/providers/${s[e].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:e})}),fetch(`/api/providers/${s[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})})])}catch(e){console.log("Error swapping priority:",e),await tE()}},tB=U.length>0&&eE.length===U.length;(0,r.useEffect)(()=>{eI(e=>e.filter(e=>U.some(t=>t.id===e)))},[U]);let tH=async e=>{eD(!0);try{let t=0;for(let{connectionId:s,proxyPoolId:a}of e)try{(await fetch(`/api/providers/${s}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:a})})).ok||(t+=1)}catch(e){console.log("Error applying proxy for",s,e),t+=1}t>0&&alert(`Updated with ${t} failed request(s).`),await tE(),eh(!1)}finally{eD(!1)}},tV=e=>tH(U.map(t=>({connectionId:t.id,proxyPoolId:e}))),tW=(0,a.jsx)("div",{className:"flex min-w-0 flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03] max-h-[500px] overflow-y-auto pr-1",children:U.map((e,t)=>{let s;return(0,a.jsxs)("div",{className:"flex min-w-0 items-stretch",children:[(0,a.jsx)("div",{className:"flex shrink-0 items-center pl-1 sm:pl-2",children:(0,a.jsx)(C.S,{checked:(s=e.id,eE.includes(s)),onCheckedChange:()=>{var t;return t=e.id,void eI(e=>e.includes(t)?e.filter(e=>e!==t):[...e,t])}})}),(0,a.jsx)("div",{className:"flex-1 min-w-0",children:(0,a.jsx)(E.A,{connection:e,proxyPools:H,isOAuth:tm,isFirst:0===t,isLast:t===U.length-1,onMoveUp:()=>tZ(t,t-1),onMoveDown:()=>tZ(t,t+1),onToggleActive:t=>tq(e.id,t),autoPing:B[z]&&"oauth"===e.authType?{on:!0===eR.connections[e.id],onToggle:t=>{var s;return s=e.id,void tD({...eR,connections:{...eR.connections,[s]:t}})},provider:z}:null,onUpdateProxy:async t=>{try{(await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:t||null})})).ok&&L(s=>s.map(s=>s.id===e.id?{...s,providerSpecificData:{...s.providerSpecificData,proxyPoolId:t||null}}:s))}catch(e){console.log("Error updating proxy:",e)}},onEdit:()=>{eg(e),em(!0)},onDelete:()=>tK(e.id),oneByOneStatus:e6[e.id]||null})})]},e.id)})}),tQ=H.filter(e=>!0===e.isActive),tX=(0,a.jsx)(S.lG,{open:eu,onOpenChange:e=>{!e&&(ez||eh(!1))},children:(0,a.jsxs)(S.Cf,{className:"max-w-md",children:[(0,a.jsx)(S.c7,{children:(0,a.jsxs)(S.L3,{children:["Apply Proxy (",U.length," connections)"]})}),(0,a.jsxs)("div",{className:"flex flex-col gap-2 p-4",children:[(0,a.jsxs)("button",{onClick:()=>{let e=H.filter(e=>!0===e.isActive);return 0===e.length?void alert("No active proxy pools available."):tH(U.map((t,s)=>({connectionId:t.id,proxyPoolId:e[s%e.length].id})))},disabled:ez||0===tQ.length,className:"flex items-center gap-3 rounded-lg border border-border px-3 py-2.5 text-left transition-colors hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)(A.A,{className:"size-4 shrink-0 text-muted-foreground"}),(0,a.jsxs)("span",{className:"flex min-w-0 flex-col",children:[(0,a.jsx)("span",{className:"text-sm font-medium text-foreground",children:"One-to-one (rotate)"}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Distribute connections across ",tQ.length," active pool(s)"]})]})]}),(0,a.jsxs)("button",{onClick:()=>tV(null),disabled:ez,className:"flex items-center gap-3 rounded-lg border border-border px-3 py-2.5 text-left transition-colors hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)($.A,{className:"size-4 shrink-0 text-muted-foreground"}),(0,a.jsxs)("span",{className:"flex min-w-0 flex-col",children:[(0,a.jsx)("span",{className:"text-sm font-medium text-foreground",children:"None (unbind all)"}),(0,a.jsx)("span",{className:"text-xs text-muted-foreground",children:"Remove proxy from all connections"})]})]}),H.map(e=>(0,a.jsxs)("button",{onClick:()=>tV(e.id),disabled:ez||!0!==e.isActive,className:"flex items-center gap-3 rounded-lg border border-border px-3 py-2.5 text-left transition-colors hover:bg-muted disabled:cursor-not-allowed disabled:opacity-50",children:[(0,a.jsx)(T.A,{className:"size-4 shrink-0 text-muted-foreground"}),(0,a.jsx)("span",{className:"truncate text-sm font-medium text-foreground",children:e.name}),!0!==e.isActive&&(0,a.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"(inactive)"})]},e.id)),ez&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:"Applying..."})]})]})}),tY=async(e,t="llm")=>{if(!e$.has(e)){eT(t=>new Set(t).add(e));try{let s=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${tw}/${e}`,kind:t})}),a=await s.json();eC(t=>({...t,[e]:a.ok?"ok":"error"})),eA(a.ok?"":a.error||"Model not reachable")}catch{eC(t=>({...t,[e]:"error"})),eA("Network error")}finally{eT(t=>{let s=new Set(t);return s.delete(e),s})}}};if(R)return(0,a.jsxs)(m.YW,{children:[(0,a.jsx)(m.KX,{}),(0,a.jsx)(m.KX,{})]});if(!td)return(0,a.jsxs)("div",{className:"text-center py-20",children:[(0,a.jsx)("p",{className:"text-muted-foreground",children:"Provider not found"}),(0,a.jsx)(o(),{href:"/dashboard/providers",className:"text-primary mt-4 inline-block",children:"Back to Providers"})]});let t0=()=>{if(tj){let e=(0,c.HY)((0,c.uM)(G?.baseUrl));return e||(ty?"/providers/anthropic.png":"/providers/openai.png")}return(0,c.HY)(td.id)};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(m.YW,{children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)(x.$,{variant:"outline",size:"sm",asChild:!0,className:"mb-4",children:(0,a.jsxs)(o(),{href:"/dashboard/providers",children:[(0,a.jsx)(l.default,{name:"arrow_back",className:"text-lg"}),"Back to Providers"]})}),(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-3 sm:gap-4",children:[(0,a.jsx)("div",{className:"flex size-12 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${td.color}15`},children:eN||!t0()?(0,a.jsx)("span",{className:"text-sm font-bold",style:{color:td.color},children:(0,c.IM)(td.name)||td.textIcon||td.id.slice(0,2).toUpperCase()}):(0,a.jsx)(d.default,{src:t0(),alt:td.name,width:48,height:48,className:"max-h-12 max-w-12 rounded-lg object-contain",sizes:"48px",onError:()=>{(0,c.Kw)(td.id),ew(!0)},loading:"lazy",decoding:"async"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 flex-wrap",children:[(0,a.jsx)("h1",{className:"truncate text-2xl font-semibold tracking-tight sm:text-3xl",children:td.name}),(td.notice?.apiKeyUrl||td.notice?.signupUrl||td.website)&&(0,a.jsxs)("a",{href:td.notice?.apiKeyUrl||td.notice?.signupUrl||td.website,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[(0,a.jsx)(l.default,{name:"open_in_new",className:"text-sm"}),td.notice?.apiKeyUrl?"Get API Key":"Sign up / Learn more"]})]}),(0,a.jsxs)("p",{className:"text-muted-foreground",children:[U.length," connection",1===U.length?"":"s"]})]})]})]}),td.deprecated&&(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-yellow-500/10 border border-yellow-500/30",children:[(0,a.jsx)(l.default,{name:"warning",className:"text-[16px] text-yellow-500 mt-0.5 shrink-0"}),(0,a.jsx)("p",{className:"text-xs text-red-600 dark:text-yellow-400 leading-relaxed",children:td.deprecationNotice})]}),td.notice?.text&&!td.deprecated&&(0,a.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border border-blue-500/30 bg-blue-500/10 px-3 py-2 sm:flex-row sm:items-center",children:[(0,a.jsx)(l.default,{name:"info",className:"text-[16px] text-blue-500 shrink-0"}),(0,a.jsx)("p",{className:"min-w-0 flex-1 text-xs leading-relaxed text-blue-600 dark:text-blue-400",children:td.notice.text}),td.notice.apiKeyUrl&&(0,a.jsx)("a",{href:td.notice.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex justify-center rounded bg-blue-500 px-2 py-1 text-xs font-medium text-white transition-colors hover:bg-blue-600 sm:py-0.5",children:"Get API Key →"})]}),tj&&G&&(0,a.jsx)(p.Zp,{children:(0,a.jsx)(p.Wu,{children:(0,a.jsxs)("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:ty?"Anthropic Compatible Details":"OpenAI Compatible Details"}),(0,a.jsxs)("p",{className:"break-all text-sm text-muted-foreground",children:[ty?"Messages API":"responses"===G.apiType?"Responses API":"Chat Completions"," ","\xb7 ",(G.baseUrl||"").replace(/\/$/,""),"/",ty?"messages":"responses"===G.apiType?"responses":"chat/completions"]})]}),(0,a.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,a.jsxs)(x.$,{size:"sm",onClick:()=>{er(""),ea(!0)},className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add API Key"]}),(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ex(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"edit"}),"Edit"]}),(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:async()=>{eY({title:"Delete Compatible Node",message:`Delete this ${ty?"Anthropic":"OpenAI"} Compatible node?`,onConfirm:async()=>{eY(null);try{(await fetch(`/api/provider-nodes/${z}`,{method:"DELETE"})).ok&&I.push("/dashboard/providers")}catch(e){console.log("Error deleting provider node:",e)}}})},className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"delete"}),"Delete"]})]})]})})}),tx?(0,a.jsx)(m.gw,{providerId:z}):(0,a.jsx)(p.Zp,{children:(0,a.jsxs)(p.Wu,{children:[(0,a.jsxs)("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Connections"}),(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[U.length>0&&H.length>0&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>eh(!0),children:[(0,a.jsx)(l.default,{name:"lan"}),"Apply Proxy"]}),U.length>0&&(0,a.jsxs)(a.Fragment,{children:[eE.length>0&&(0,a.jsxs)(x.$,{size:"sm",variant:"destructive",onClick:()=>{let e=eE.length;0!==e&&eY({title:`Delete ${e} Connection${e>1?"s":""}`,message:`Delete ${e} connection${e>1?"s":""}? This cannot be undone.`,onConfirm:async()=>{eY(null);let e=0,t=[...eE];for(let s of t)try{(await fetch(`/api/providers/${s}`,{method:"DELETE"})).ok||(e+=1)}catch(t){console.log("Error deleting connection:",t),e+=1}L(e=>e.filter(e=>!t.includes(e.id))),eI([]),e>0&&alert(`Deleted ${t.length-e} connection(s), ${e} failed.`)}})},children:[(0,a.jsx)(l.default,{name:"delete"}),"Delete Selected (",eE.length,")"]}),(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:e9,disabled:e2,children:[(0,a.jsx)(l.default,{name:"sync"}),e2?"Testing Connection One-by-One...":"Test Connection One-by-One"]}),e2&&(0,a.jsxs)(x.$,{size:"sm",variant:"ghost",onClick:e8,disabled:e4,children:[(0,a.jsx)(l.default,{name:"stop"}),e4?"Stopping...":"Stop"]})]}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground font-medium",children:"Round Robin"}),(0,a.jsx)(k.d,{checked:"round-robin"===e_,onCheckedChange:e=>{let t=e?"round-robin":null,s=e?eJ||"1":eJ;e&&!eJ&&eL("1"),eU(t),tz(t,s)}}),"round-robin"===e_&&(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("span",{className:"text-xs text-muted-foreground",children:"Sticky:"}),(0,a.jsx)("input",{type:"number",min:1,value:eJ,onChange:e=>{var t;eL(t=e.target.value),tz("round-robin",t)},placeholder:"1",className:"w-14 px-2 py-1 text-xs border border-border rounded-md bg-background focus:outline-none focus:border-primary"})]})]})]})]}),0===U.length?(0,a.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"inline-flex items-center justify-center w-9 h-9 rounded-full bg-primary/10 text-primary shrink-0",children:(0,a.jsx)(l.default,{name:tm?"lock":"key",className:"text-[18px]"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"No connections yet"}),tb&&(0,a.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Choose ",tv," or ",tN,"."]})]})]}),(0,a.jsx)("div",{className:"flex gap-2",children:tb?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:tn,children:[(0,a.jsx)(l.default,{name:"lock"}),tv]}),(0,a.jsxs)(x.$,{size:"sm",onClick:ti,children:[(0,a.jsx)(l.default,{name:"key"}),tN]})]}):(0,a.jsxs)(a.Fragment,{children:[!tj&&"iflow"===z&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>et(!0),children:[(0,a.jsx)(l.default,{name:"cookie"}),"Cookie"]}),"codex"===z&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ei(!0),children:[(0,a.jsx)(l.default,{name:"playlist_add"}),(0,y.Tl)("Bulk Add")]}),"grok-cli"===z&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ed(!0),children:[(0,a.jsx)(l.default,{name:"playlist_add"}),(0,y.Tl)("Bulk Add")]}),(0,a.jsxs)(x.$,{size:"sm",onClick:to,children:[(0,a.jsx)(l.default,{name:"add"}),tj?"Add API Key":"iflow"===z?"OAuth":"Add Connection"]})]})})]}):(0,a.jsxs)(a.Fragment,{children:[e7&&(0,a.jsx)("div",{className:"mb-4 rounded-lg border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-muted-foreground dark:border-white/10 dark:bg-white/[0.03]",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,a.jsxs)("span",{children:["Total: ",e7.total]}),(0,a.jsxs)("span",{children:["Completed: ",e7.completed]}),(0,a.jsxs)("span",{children:["Passed: ",e7.passed]}),(0,a.jsxs)("span",{children:["Failed: ",e7.failed]}),e7.stopped&&(0,a.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:"Stopped"}),e2&&e3&&(0,a.jsxs)("span",{children:["Running:"," ",U.find(e=>e.id===e3)?.name||e3]})]})}),U.length>0&&(0,a.jsx)("div",{className:"mb-3 flex items-center gap-2 border-b border-black/[0.03] pb-2 dark:border-white/[0.03]",children:(0,a.jsxs)("label",{className:"flex cursor-pointer items-center gap-1.5 text-xs text-muted-foreground hover:text-primary",children:[(0,a.jsx)(C.S,{checked:tB,onCheckedChange:()=>{tB?eI([]):eI(U.map(e=>e.id))},className:"size-3.5 [&_svg]:size-2.5"}),"Select All"]})}),tW,!tj&&(0,a.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-2 sm:flex",children:["iflow"===z&&(0,a.jsxs)(N.m_,{children:[(0,a.jsx)(N.k$,{asChild:!0,children:(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>et(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"cookie"}),"Cookie"]})}),(0,a.jsx)(N.ZI,{children:"Add connection using browser cookie"})]}),"codex"===z&&(0,a.jsxs)(N.m_,{children:[(0,a.jsx)(N.k$,{asChild:!0,children:(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ei(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"playlist_add"}),(0,y.Tl)("Bulk Add")]})}),(0,a.jsx)(N.ZI,{children:(0,y.Tl)("Bulk import codex accounts from JSON")})]}),"grok-cli"===z&&(0,a.jsxs)(N.m_,{children:[(0,a.jsx)(N.k$,{asChild:!0,children:(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>ed(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"playlist_add"}),(0,y.Tl)("Bulk Add")]})}),(0,a.jsx)(N.ZI,{children:(0,y.Tl)("Bulk import Grok CLI accounts from JSON")})]}),tb?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:tn,className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"lock"}),tv]}),(0,a.jsxs)(x.$,{size:"sm",onClick:ti,className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"key"}),tN]})]}):(0,a.jsxs)(x.$,{size:"sm",onClick:to,className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add"]})]})]})]})}),(0,a.jsx)(p.Zp,{children:(0,a.jsxs)(p.Wu,{children:[(0,a.jsxs)("div",{className:"mb-4 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,a.jsx)("div",{className:"flex items-center gap-3",children:(0,a.jsx)("h2",{className:"text-lg font-semibold",children:"Available Models"})}),!tj&&(e=[...th,...eH.filter(e=>!th.some(t=>t.id===e.id))].filter(e=>{let t=(0,h.CP)(e);return!t||"llm"===t}).map(e=>e.id).filter(e=>!eW.includes(e)),(0,a.jsxs)("div",{className:"flex gap-2",children:[eW.length>0&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:tT,children:[(0,a.jsx)(l.default,{name:"restart_alt"}),"Active All"]}),e.length>0&&(0,a.jsxs)(x.$,{size:"sm",variant:"secondary",onClick:()=>t$(e),children:[(0,a.jsx)(l.default,{name:"block"}),"Disable All"]})]}))]}),!!eS&&(0,a.jsxs)("div",{className:"mb-3",children:[(0,a.jsx)("p",{className:"text-xs text-red-500 break-words",children:eS}),/RegionError|hosted in China|regionNotAllowed/i.test(eS)&&(s=(t="string"==typeof eS?eS:JSON.stringify(eS)).match(/https:\/\/opencode\.ai\/workspace\/[^\s"')]+/),i=t.match(/wrk_[0-9A-Za-z]+/),j=s?s[0].endsWith("/go")?s[0]:`${s[0]}/go`:i?`https://opencode.ai/workspace/${i[0]}/go`:"https://opencode.ai",(0,a.jsx)("div",{className:"mt-1.5",children:(0,a.jsxs)("a",{href:j,target:"_blank",rel:"noreferrer",className:"inline-flex items-center gap-1 rounded-md bg-amber-500/10 px-2 py-0.5 text-xs font-medium text-amber-600 hover:bg-amber-500/20 dark:text-amber-400 transition-colors",children:[(0,a.jsx)("span",{children:"Allow China-hosted models"}),(0,a.jsx)(l.default,{name:"open_in_new",className:"text-[13px]"})]})}))]}),"zed"===z&&!!eZ&&(0,a.jsx)("p",{className:"text-xs text-red-500 mb-3 break-words",children:eZ}),(()=>{let e,t,s;if(tj)return(0,a.jsx)(P,{providerStorageAlias:tw,providerDisplayAlias:tk,modelAliases:ey,customModels:eb,copied:ts,onCopy:ta,onSetAlias:t_,onDeleteAlias:tU,onAddCustomModel:e=>tJ(e,"llm",tw),onDeleteCustomModel:e=>tL(e,"llm",tw),connections:U,isAnthropic:ty});let r=[...th,...eH.filter(e=>!th.some(t=>t.id===e.id))].filter(e=>{let t=(0,h.CP)(e);return!t||"llm"===t}),n=new Set(eW),i=r.filter(e=>!n.has(e.id)),o=r.filter(e=>n.has(e.id)),d=v({customModels:eb,modelAliases:ey,providerAlias:tw,builtInModels:th,type:"llm"});return(0,a.jsxs)("div",{className:"flex flex-wrap gap-3",children:[d.map(e=>(0,a.jsx)(w,{model:{id:e.id,name:e.name},fullModel:`${tk}/${e.id}`,alias:e.alias,copied:ts,onCopy:ta,onSetAlias:()=>{},onDeleteAlias:()=>{"custom"===e.source?tL(e.id,"llm",tw):tU(e.alias)},testStatus:ek[e.id],onTest:U.length>0||tx?()=>tY(e.id,(0,h.CP)(e,"llm")):void 0,isTesting:e$.has(e.id),isCustom:!0,isFree:!1,caps:D(`${z}/${e.id}`)},`${e.source}-${e.fullModel}`)),i.map(e=>{let t=`${tw}/${e.id}`,s=`${z}/${e.id}`,l=Object.entries(ey).find(([,e])=>e===t||e===s)?.[0];return(0,a.jsx)(w,{model:e,fullModel:`${tk}/${e.id}`,alias:l,copied:ts,onCopy:ta,onSetAlias:t=>t_(e.id,t,tw),onDeleteAlias:()=>tU(l),testStatus:ek[e.id],onTest:U.length>0||tx?()=>tY(e.id,(0,h.CP)(e,"llm")):void 0,isTesting:e$.has(e.id),isFree:e.isFree,onDisable:()=>tS(e.id),caps:D(`${z}/${e.id}`)},e.id)}),(0,a.jsxs)("button",{onClick:()=>eP(!0),className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-primary/40 px-3 py-2 text-xs text-primary transition-colors hover:border-primary hover:bg-primary/5 sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add",className:"text-sm"}),"Add Model"]}),"qoder"===z&&U.some(e=>!1!==e.isActive)&&(0,a.jsxs)("button",{onClick:tR,disabled:te,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-blue-500/40 px-3 py-2 text-xs text-blue-600 dark:text-blue-400 transition-colors hover:border-blue-500 hover:bg-blue-500/5 sm:w-auto disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,a.jsx)(l.default,{name:te?"progress_activity":"download",className:"text-sm",style:te?{animation:"spin 1s linear infinite"}:void 0}),te?(0,y.Tl)("Fetching..."):(0,y.Tl)("Fetch Qoder Models")]}),eF.length>0&&(e=new Set([...Object.values(ey),...d.map(e=>e.fullModel)]),t=new Set(th.map(e=>e.id)),0===(s=eF.filter(s=>!e.has(`${tw}/${s.id}`)&&!t.has(s.id))).length?null:(0,a.jsxs)("div",{className:"w-full mt-2",children:[(0,a.jsx)("p",{className:"text-xs text-muted-foreground mb-2",children:"Suggested free models (≥200k context):"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:s.map(e=>(0,a.jsxs)(N.m_,{children:[(0,a.jsx)(N.k$,{asChild:!0,children:(0,a.jsxs)("button",{onClick:async()=>{await tJ(e.id,"llm",tw)},className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-black/10 dark:border-white/10 text-xs text-muted-foreground hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",children:[(0,a.jsx)(l.default,{name:"add",className:"text-[13px]"}),e.id.split("/").pop()]})}),(0,a.jsx)(N.ZI,{children:`${e.name} \xb7 ${(e.contextLength/1e3).toFixed(0)}k ctx`})]},e.id))})]})),o.length>0&&(0,a.jsxs)("div",{className:"w-full mt-2",children:[(0,a.jsxs)("p",{className:"text-xs text-muted-foreground mb-2",children:["Disabled models (",o.length,"):"]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-2",children:o.map(e=>(0,a.jsxs)(N.m_,{children:[(0,a.jsx)(N.k$,{asChild:!0,children:(0,a.jsxs)("button",{onClick:()=>tA(e.id),className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-dashed border-black/10 dark:border-white/10 text-xs text-muted-foreground hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",children:[(0,a.jsx)(l.default,{name:"add",className:"text-[13px]"}),e.id]})}),(0,a.jsx)(N.ZI,{children:"Restore model"})]},e.id))})]})]})})()]})}),tX,"cursor"===z?(0,a.jsx)(m.G9,{isOpen:W,onSuccess:tF,onClose:()=>Q(!1)}):"gitlab"===z?(0,a.jsx)(m.vj,{isOpen:W,providerInfo:td,onSuccess:tF,onClose:()=>Q(!1)}):(0,a.jsx)(m.LF,{isOpen:W,provider:z,providerInfo:td,onSuccess:tF,onClose:()=>Q(!1)}),(0,a.jsx)(m.LH,{isOpen:X,onSuccess:tF,onClose:()=>Y(!1)}),"iflow"===z&&(0,a.jsx)(m.vE,{isOpen:ee,onSuccess:()=>{tE(),et(!1)},onClose:()=>et(!1)})]}),(0,a.jsx)(_,{isOpen:es,provider:z,providerName:td.name,authType:td?.authType,authHint:td?.authHint,website:td?.website,proxyPools:H,error:el,onSave:tM,onClose:()=>{er(""),ea(!1)}}),(0,a.jsx)(m.wI,{isOpen:ec,connection:ef,proxyPools:H,onSave:tG,onClose:()=>em(!1)}),tj&&(0,a.jsx)(J,{isOpen:ep,node:G,onSave:tI,onClose:()=>ex(!1),isAnthropic:ty}),!tj&&(0,a.jsx)(K,{isOpen:eO,providerAlias:tw,providerDisplayAlias:tk,onSave:async(e,t)=>{await tJ(e,"llm",tw,t),eP(!1)},onClose:()=>eP(!1)}),"codex"===z&&(0,a.jsx)(M,{isOpen:en,onClose:()=>ei(!1),onSuccess:tE}),"grok-cli"===z&&(0,a.jsx)(Z,{isOpen:eo,onClose:()=>ed(!1),onSuccess:tE}),(0,a.jsx)(m.uo,{isOpen:e0,onClose:()=>e1(!1),onConfirm:()=>{(window.localStorage.setItem(tl,"true"),e1(!1),tm)?tr():ti()},title:"Risk Notice",message:td?.deprecationNotice,confirmText:"I Understand, Continue",cancelText:"Cancel",variant:"danger"}),(0,a.jsx)(m.uo,{isOpen:!!eX,onClose:()=>eY(null),onConfirm:eX?.onConfirm,title:eX?.title||"Confirm",message:eX?.message,variant:"danger"})]})}}},e=>{e.O(0,[6766,5166,7552,9980,6428,4484,9150,3577,5862,5148,1699,1722,1660,4489,1278,1830,6770,9369,427,9966,7358],()=>e(e.s=52908)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8460],{15764:(e,t,r)=>{"use strict";r.d(t,{CK:()=>o.default,G9:()=>u.default,Iz:()=>v.default,KX:()=>b.PanelSkeleton,LF:()=>n.default,LH:()=>p.default,Mu:()=>b.StatCardSkeleton,Nf:()=>d.default,Qv:()=>l.CardSkeleton,YW:()=>g.YW,gw:()=>f.default,jK:()=>c.default,nh:()=>j.default,pV:()=>g.pV,rq:()=>i.default,uR:()=>s.default,uo:()=>a.ConfirmModal,vE:()=>h.default,vj:()=>m.default,wI:()=>x.default,wn:()=>g.wn,zY:()=>g.zY}),r(58913);var a=r(3537),l=r(58350);r(30872),r(33526),r(42535),r(1279);var n=r(92802),i=r(25908),s=r(58729),o=r(24873),d=r(5258),c=r(80599);r(949),r(56776),r(53599),r(88336),r(69561);var u=r(37753),p=r(23444),h=r(93624),m=r(86920),x=r(65461);r(14580);var f=r(14670),v=r(70296);r(57779),r(22205);var b=r(43276),j=r(75862),g=r(92412)},57938:(e,t,r)=>{Promise.resolve().then(r.bind(r,93728))},92412:(e,t,r)=>{"use strict";r.d(t,{YW:()=>a.Page,pV:()=>a.CardGrid,wn:()=>a.Section,zY:()=>a.PageHeader}),r(16675),r(72778);var a=r(29575)},93728:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>T});var a=r(29798),l=r(58913),n=r(15814),i=r(15764),s=r(738),o=r(63729),d=r(51660),c=r(13794),u=r(22205),p=r(53784),h=r(18055),m=r(45111),x=r(1352),f=r(41671);let v={available:{icon:"check_circle",color:"#22c55e",label:"Available"},cooldown:{icon:"schedule",color:"#f59e0b",label:"Cooldown"},unavailable:{icon:"error",color:"#ef4444",label:"Unavailable"},unknown:{icon:"help",color:"#6b7280",label:"Unknown"}};function b(){let[e,t]=(0,n.useState)(null),[r,i]=(0,n.useState)(!0),[s,o]=(0,n.useState)(!1),[d,c]=(0,n.useState)(null),u=(0,n.useRef)(null),p=(0,f.i)(),m=(0,n.useCallback)(async()=>{try{let e=await fetch("/api/models/availability");if(e.ok){let r=await e.json();t(r)}}catch{}finally{i(!1)}},[]);(0,n.useEffect)(()=>{m();let e=setInterval(m,3e4);return()=>clearInterval(e)},[m]),(0,n.useEffect)(()=>{let e=e=>{u.current&&!u.current.contains(e.target)&&o(!1)};return s&&document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[s]);let b=async(e,t)=>{c(`${e}:${t}`);try{(await fetch("/api/models/availability",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"clearCooldown",provider:e,model:t})})).ok?(p.success(`Cooldown cleared for ${t}`),await m()):p.error("Failed to clear cooldown")}catch{p.error("Failed to clear cooldown")}finally{c(null)}};if(r)return null;let j=e?.models||[],g=0===(e?.unavailableCount||j.filter(e=>"available"!==e.status).length),y={};return j.forEach(e=>{if("available"===e.status)return;let t=e.provider||"unknown";y[t]||(y[t]=[]),y[t].push(e)}),(0,a.jsx)("div",{className:"relative",ref:u,children:s&&(0,a.jsxs)("div",{className:"absolute top-full right-0 mt-2 w-80 bg-card border border-border rounded-xl shadow-2xl z-50 overflow-hidden",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border bg-background",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(l.default,{name:g?"verified":"warning",className:"text-[16px]",style:{color:g?"#22c55e":"#f59e0b"}}),(0,a.jsx)("span",{className:"text-sm font-semibold text-foreground",children:"Model Status"})]}),(0,a.jsxs)(x.m_,{children:[(0,a.jsx)(x.k$,{asChild:!0,children:(0,a.jsx)("button",{onClick:m,className:"p-1 rounded-lg hover:bg-card text-muted-foreground hover:text-foreground transition-colors",children:(0,a.jsx)(l.default,{name:"refresh",className:"text-[14px]"})})}),(0,a.jsx)(x.ZI,{children:"Refresh"})]})]}),(0,a.jsx)("div",{className:"px-4 py-3 max-h-60 overflow-y-auto",children:g?(0,a.jsx)("p",{className:"text-sm text-muted-foreground text-center py-2",children:"All models are responding normally."}):(0,a.jsx)("div",{className:"flex flex-col gap-2.5",children:Object.entries(y).map(([e,t])=>(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"text-xs font-semibold text-foreground mb-1.5 capitalize",children:e}),(0,a.jsx)("div",{className:"flex flex-col gap-1",children:t.map(e=>{let t=v[e.status]||v.unknown,r=d===`${e.provider}:${e.model}`;return(0,a.jsxs)("div",{className:"flex items-center justify-between px-2.5 py-1.5 rounded-lg bg-card/30",children:[(0,a.jsxs)("div",{className:"flex items-center gap-1.5 min-w-0",children:[(0,a.jsx)(l.default,{name:t.icon,className:"text-[14px] shrink-0",style:{color:t.color}}),(0,a.jsx)("span",{className:"font-mono text-xs text-foreground truncate",children:e.model})]}),"cooldown"===e.status&&(0,a.jsx)(h.$,{size:"sm",variant:"ghost",onClick:()=>b(e.provider,e.model),disabled:r,className:"text-[10px] px-1.5! py-0.5! ml-2",children:r?"...":"Clear"})]},`${e.provider}-${e.model}`)})})]},e))})})]})})}var j=r(77345),g=r(49787);let y={openai:{title:"Add OpenAI Compatible",type:"openai-compatible",defaultBaseUrl:"https://api.openai.com/v1",namePlaceholder:"OpenAI Compatible (Prod)",prefixPlaceholder:"oc-prod",baseUrlHint:"Use the base URL (ending in /v1) for your OpenAI-compatible API.",errorLabel:"OpenAI Compatible",hasApiType:!0},anthropic:{title:"Add Anthropic Compatible",type:"anthropic-compatible",defaultBaseUrl:"https://api.anthropic.com/v1",namePlaceholder:"Anthropic Compatible (Prod)",prefixPlaceholder:"ac-prod",baseUrlHint:"Use the base URL (ending in /v1) for your Anthropic-compatible API. The system will append /messages.",errorLabel:"Anthropic Compatible",hasApiType:!1}},A=[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}];function C({label:e,required:t,error:r,hint:l,className:n,children:i}){return(0,a.jsxs)("div",{className:`flex min-w-0 flex-col gap-1.5 ${n||""}`,children:[e&&(0,a.jsxs)("label",{className:"text-sm font-medium text-foreground",children:[e,t&&(0,a.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),i,r&&(0,a.jsx)("p",{className:"text-xs text-red-500",children:r}),l&&!r&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground",children:l})]})}let w=function({variant:e,isOpen:t,onClose:r,onCreated:l}){let i=y[e],s=()=>({name:"",prefix:"",...i.hasApiType?{apiType:"chat"}:{},baseUrl:i.defaultBaseUrl}),[o,d]=(0,n.useState)(s),[c,u]=(0,n.useState)(!1);(0,n.useEffect)(()=>{i.hasApiType&&d(e=>({...e,baseUrl:i.defaultBaseUrl}))},[i.hasApiType?o.apiType:t]);let p=async()=>{if(o.name.trim()&&o.prefix.trim()&&o.baseUrl.trim()){u(!0);try{let e=await fetch("/api/provider-nodes",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:o.name,prefix:o.prefix,...i.hasApiType?{apiType:o.apiType}:{},baseUrl:o.baseUrl,type:i.type})}),t=await e.json();e.ok&&(l(t.node),d(s()))}catch(e){console.log(`Error creating ${i.errorLabel} node:`,e)}finally{u(!1)}}};return(0,a.jsx)(g.lG,{open:t,onOpenChange:e=>!e&&r(),children:(0,a.jsxs)(g.Cf,{className:"max-w-md",children:[(0,a.jsx)(g.c7,{children:(0,a.jsx)(g.L3,{children:i.title})}),(0,a.jsxs)("div",{className:"flex max-h-[calc(85vh-120px)] flex-col gap-4 overflow-y-auto p-4",children:[(0,a.jsx)(C,{label:"Name",hint:"Required. A friendly label for this node.",children:(0,a.jsx)(j.p,{value:o.name,onChange:e=>d({...o,name:e.target.value}),placeholder:i.namePlaceholder})}),(0,a.jsx)(C,{label:"Prefix",hint:"Required. Used as the provider prefix for model IDs.",children:(0,a.jsx)(j.p,{value:o.prefix,onChange:e=>d({...o,prefix:e.target.value}),placeholder:i.prefixPlaceholder})}),i.hasApiType&&(0,a.jsx)(C,{label:"API Type",children:(0,a.jsxs)(m.l6,{value:o.apiType,onValueChange:e=>d({...o,apiType:e}),children:[(0,a.jsx)(m.bq,{className:"w-full",children:(0,a.jsx)(m.yv,{})}),(0,a.jsx)(m.gC,{children:A.map(e=>(0,a.jsx)(m.eb,{value:String(e.value),children:e.label},e.value))})]})}),(0,a.jsx)(C,{label:"Base URL",hint:i.baseUrlHint,children:(0,a.jsx)(j.p,{value:o.baseUrl,onChange:e=>d({...o,baseUrl:e.target.value}),placeholder:i.defaultBaseUrl})}),(0,a.jsx)(h.$,{onClick:p,className:"w-full",disabled:!o.name.trim()||!o.prefix.trim()||!o.baseUrl.trim()||c,children:c?"Creating...":"Create"})]})]})})},N=[{value:"all",label:"All"},{value:"active",label:"Active"},{value:"inactive",label:"Inactive"},{value:"none",label:"No connection"}];function k(e,t,r){let l=[];if(e>0&&l.push((0,a.jsxs)(p.E,{variant:"default",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-green-500"}),e," Connected"]},"connected")),t>0){let e=r?`${t} Error (${r})`:`${t} Error`;l.push((0,a.jsxs)(p.E,{variant:"destructive",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-red-500"}),e]},"error"))}return 0===l.length?(0,a.jsx)("span",{className:"text-muted-foreground",children:"No connections"}):l}function T(){let e,t,[r,s]=(0,n.useState)([]),[u,p]=(0,n.useState)([]),[x,f]=(0,n.useState)(!0),[v,j]=(0,n.useState)(!1),[g,y]=(0,n.useState)(!1),[A,C]=(0,n.useState)("all");(0,n.useEffect)(()=>{(async()=>{try{let[e,t]=await Promise.all([fetch("/api/providers"),fetch("/api/provider-nodes")]),r=await e.json(),a=await t.json();e.ok&&s(r.connections||[]),t.ok&&p(a.nodes||[])}catch(e){console.log("Error fetching data:",e)}finally{f(!1)}})()},[]);let k=(e,t)=>{let a=Array.isArray(t)?t:[t],l=r.filter(t=>t.provider===e&&a.includes(t.authType)),n=e=>{let t=Object.entries(e).some(([e,t])=>e.startsWith("modelLock_")&&t&&new Date(t).getTime()>Date.now());return"unavailable"!==e.testStatus||t?e.testStatus:"active"},i=l.filter(e=>{let t=n(e);return"active"===t||"success"===t}).length,s=l.filter(e=>{let t=n(e);return"error"===t||"expired"===t||"unavailable"===t}),o=s.length,d=l.length,c=d>0&&l.every(e=>!1===e.isActive),u=s.sort((e,t)=>new Date(t.lastErrorAt||0)-new Date(e.lastErrorAt||0))[0];return{connected:i,error:o,total:d,errorCode:u?function(e){if(!e)return null;let t=e.lastErrorType;if("runtime_error"===t)return"RUNTIME";if("upstream_auth_error"===t||"auth_missing"===t||"token_refresh_failed"===t||"token_expired"===t)return"AUTH";if("upstream_rate_limited"===t)return"429";if("upstream_unavailable"===t)return"5XX";if("network_error"===t)return"NET";let r=Number(e.errorCode);if(Number.isFinite(r)&&r>=400)return String(r);let a=function(e){if(!e)return null;let t=e.match(/\b([45]\d{2})\b/);return t?t[1]:"ERR"}(e.lastError);if("401"===a||"403"===a)return"AUTH";if(a&&"ERR"!==a)return a;let l=(e.lastError||"").toLowerCase();return l.includes("runtime")||l.includes("not runnable")||l.includes("not installed")?"RUNTIME":l.includes("invalid api key")||l.includes("token invalid")||l.includes("revoked")||l.includes("unauthorized")?"AUTH":"ERR"}(u):null,errorTime:u?.lastErrorAt?function(e){if(!e)return"";let t=Math.floor((Date.now()-new Date(e).getTime())/6e4);if(t<1)return"just now";if(t<60)return`${t}m ago`;let r=Math.floor(t/60);if(r<24)return`${r}h ago`;let a=Math.floor(r/24);return`${a}d ago`}(u.lastErrorAt):null,allDisabled:c}},T=(e,t=!1)=>(function(e,t,r=!1){return"all"===e||function(e,t=!1){return t?"active":e&&0!==e.total?e.allDisabled?"inactive":"active":"none"}(t,r)===e})(A,e,t),E=async(e,t,a)=>{let l=Array.isArray(t)?t:[t],n=t=>t.provider===e&&l.includes(t.authType),i=r.filter(n);s(e=>e.map(e=>n(e)?{...e,isActive:a}:e)),await Promise.allSettled(i.map(e=>fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:a})})))},I=u.filter(e=>"openai-compatible"===e.type).map(e=>({id:e.id,name:e.name||"OpenAI Compatible",color:"#10A37F",textIcon:"OC",apiType:e.apiType,iconId:(0,o.uM)(e.baseUrl)})).filter(e=>T(k(e.id,"apikey"))),O=u.filter(e=>"anthropic-compatible"===e.type).map(e=>({id:e.id,name:e.name||"Anthropic Compatible",color:"#D97757",textIcon:"AC",iconId:(0,o.uM)(e.baseUrl)})).filter(e=>T(k(e.id,"apikey"))),P=(e,t)=>{let r=e?.authModes;return Array.isArray(r)?r.includes("apikey")?["oauth","apikey","api_key"]:"oauth":t in c.nJ||t in d.fg?["oauth","apikey","api_key"]:"oauth"},$=(e=Object.entries(d.zN).filter(([e,t])=>!t.hidden&&T(k(e,P(t,e)),t.noAuth)),t="oauth",[...e].sort(([e,r],[a,l])=>{let n=r.priority??999,i=l.priority??999;if(n!==i)return n-i;let s=k(e,t),o=k(a,t),d=+(s.connected>0),c=+(o.connected>0);return d!==c?c-d:(r.name||"").localeCompare(l.name||"")})),_=Object.entries(c.IS).filter(([e,t])=>!t.hidden&&T(k(e,P(t,e)),t.noAuth)).sort(([,e],[,t])=>!!t.noAuth-!!e.noAuth),R=Object.entries(c.nJ).filter(([e,t])=>!t.hidden&&(t.serviceKinds??["llm"]).includes("llm")&&T(k(e,P(t,e)),t.noAuth)).sort(([e,t],[r,a])=>{let l=t.priority??999,n=a.priority??999;if(l!==n)return l-n;let i=!!a.noAuth-!!t.noAuth;if(0!==i)return i;let s=k(e,P(t,e)).connected>0?0:1,o=k(r,P(a,r)).connected>0?0:1;return s!==o?s-o:(t.name||"").localeCompare(a.name||"")});if(x)return(0,a.jsx)(i.YW,{children:(0,a.jsxs)(i.pV,{children:[(0,a.jsx)(i.Qv,{}),(0,a.jsx)(i.Qv,{}),(0,a.jsx)(i.Qv,{}),(0,a.jsx)(i.Qv,{}),(0,a.jsx)(i.Qv,{}),(0,a.jsx)(i.Qv,{}),(0,a.jsx)(i.Qv,{}),(0,a.jsx)(i.Qv,{})]})});let z=$.length>0||_.length>0||R.length>0||I.length>0||O.length>0;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(i.YW,{children:[(0,a.jsx)("div",{className:"flex items-center justify-end",children:(0,a.jsxs)(m.l6,{value:A,onValueChange:e=>C(e),children:[(0,a.jsx)(m.bq,{size:"sm",className:"w-45","aria-label":"Filter providers by connection status",children:(0,a.jsx)(m.yv,{})}),(0,a.jsx)(m.gC,{children:N.map(e=>(0,a.jsx)(m.eb,{value:e.value,children:e.label},e.value))})]})}),!z&&(0,a.jsxs)("div",{className:"text-center py-8 border border-dashed border-border rounded-xl",children:[(0,a.jsx)(l.default,{name:"search_off",className:"text-[32px] text-muted-foreground mb-2"}),(0,a.jsx)("p",{className:"text-muted-foreground text-sm",children:"No providers match your filters"})]}),(0,a.jsx)(i.wn,{title:"Custom Providers (OpenAI/Anthropic Compatible)",actions:(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(h.$,{size:"sm",onClick:()=>y(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add Anthropic Compatible"]}),(0,a.jsxs)(h.$,{size:"sm",onClick:()=>j(!0),className:"w-full sm:w-auto",children:[(0,a.jsx)(l.default,{name:"add"}),"Add OpenAI Compatible"]})]}),children:0===I.length&&0===O.length?(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 py-2 border border-dashed border-border rounded-xl text-muted-foreground text-sm",children:[(0,a.jsx)(l.default,{name:"extension",className:"text-[18px]"}),(0,a.jsx)("span",{children:"No custom providers — use buttons above to add OpenAI/Anthropic compatible endpoints"})]}):(0,a.jsx)(i.pV,{children:[...I,...O].map(e=>(0,a.jsx)(S,{providerId:e.id,provider:e,stats:k(e.id,"apikey"),authType:"compatible",onToggle:t=>E(e.id,"apikey",t)},e.id))})}),$.length>0&&(0,a.jsx)(i.wn,{title:"OAuth Providers",actions:(0,a.jsx)(b,{}),children:(0,a.jsx)(i.pV,{children:$.map(([e,t])=>{let r=P(t,e);return(0,a.jsx)(U,{providerId:e,provider:t,stats:k(e,r),authType:"oauth",onToggle:t=>E(e,r,t)},e)})})}),(_.length>0||R.length>0)&&(0,a.jsx)(i.wn,{title:"Free Tier Providers",children:(0,a.jsxs)(i.pV,{children:[_.map(([e,t])=>{let r=P(t,e);return(0,a.jsx)(U,{providerId:e,provider:t,stats:k(e,r),authType:"free",onToggle:t=>E(e,r,t)},e)}),R.map(([e,t])=>{let r=P(t,e);return(0,a.jsx)(S,{providerId:e,provider:t,stats:k(e,r),authType:Array.isArray(r)?r[0]??"apikey":r,onToggle:t=>E(e,r,t)},e)})]})})]}),(0,a.jsx)(w,{variant:"openai",isOpen:v,onClose:()=>j(!1),onCreated:e=>{p(t=>[...t,e]),j(!1)}}),(0,a.jsx)(w,{variant:"anthropic",isOpen:g,onClose:()=>y(!1),onCreated:e=>{p(t=>[...t,e]),y(!1)}})]})}function E(e){if(e)return e.length>7?e:`${e}15`}function I(){return(0,a.jsx)(p.E,{variant:"default",children:(0,a.jsxs)("span",{className:"flex items-center gap-1",children:[(0,a.jsx)(l.default,{name:"pause_circle",className:"text-[12px]"}),"Disabled"]})})}function U({providerId:e,provider:t,stats:r,authType:l,onToggle:n}){let{connected:i,error:o,errorCode:d,errorTime:c,allDisabled:h}=r,m=!!t.noAuth;return(0,a.jsx)(u.default,{href:`/dashboard/providers/${e}`,title:t.name,iconBg:E(t.color),dimmed:h,icon:(0,a.jsx)(s.A,{src:`/providers/${t.id}.png`,alt:t.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:t.textIcon||t.id.slice(0,2).toUpperCase(),fallbackColor:t.color}),meta:!c||h||m?void 0:c,toggle:r.total>0?{checked:!h,enabledLabel:"Enable provider",disabledLabel:"Disable provider",onToggle:e=>n(e)}:void 0,children:h?(0,a.jsx)(I,{}):m?(0,a.jsxs)(p.E,{variant:"default",children:[(0,a.jsx)("span",{className:"size-1.5 rounded-full bg-green-500"}),"Ready"]}):k(i,o,d)})}function S({providerId:e,provider:t,stats:r,authType:l,onToggle:n}){let{connected:i,error:d,errorCode:h,errorTime:m,allDisabled:x}=r,f=e.startsWith(c.JH),v=e.startsWith(c.DI),b=f?(0,a.jsx)(p.E,{variant:"default",children:"responses"===t.apiType?"Responses":"Chat"}):v?(0,a.jsx)(p.E,{variant:"default",children:"Messages"}):null;return(0,a.jsx)(u.default,{href:`/dashboard/providers/${e}`,title:t.name,iconBg:E(t.color),dimmed:x,icon:(0,a.jsx)(s.A,{src:(()=>{if(t.iconId){let e=(0,o.HY)(t.iconId);if(e)return e}return f?"/providers/openai.png":v?"/providers/anthropic.png":(0,o.HY)(t.id)})(),alt:t.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:(0,o.IM)(t.name)||t.textIcon||t.id.slice(0,2).toUpperCase(),fallbackColor:t.color}),meta:m&&!x?m:void 0,toggle:r.total>0?{checked:!x,enabledLabel:"Enable provider",disabledLabel:"Disable provider",onToggle:e=>n(e)}:void 0,children:x?(0,a.jsx)(I,{}):(0,a.jsxs)(a.Fragment,{children:[k(i,d,h),b]})})}}},e=>{e.O(0,[6766,5166,7552,9980,6428,4484,9150,3577,5862,5148,1699,1722,1660,4489,1278,1830,6770,427,9966,7358],()=>e(e.s=57938)),_N_E=e.O()}]);