@amir83nasr/10router 0.1.7 → 0.1.8

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 (790) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +12 -11
  3. package/.next/build-manifest.json +2 -2
  4. package/.next/prerender-manifest.json +23 -23
  5. package/.next/routes-manifest.json +6 -0
  6. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  7. package/.next/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  8. package/.next/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +2 -2
  10. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  11. package/.next/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  12. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  13. package/.next/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  14. package/.next/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  15. package/.next/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  16. package/.next/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  17. package/.next/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  19. package/.next/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  20. package/.next/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  21. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  22. package/.next/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  23. package/.next/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  24. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js +2 -2
  25. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page.js.nft.json +1 -1
  26. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/[id]/page_client-reference-manifest.js +1 -1
  27. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js +1 -1
  28. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page.js.nft.json +1 -1
  29. package/.next/server/app/(dashboard)/dashboard/media-providers/systemone/page_client-reference-manifest.js +1 -1
  30. package/.next/server/app/(dashboard)/dashboard/page.js +1 -1
  31. package/.next/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  32. package/.next/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  33. package/.next/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  34. package/.next/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  35. package/.next/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  36. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  37. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  38. package/.next/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  39. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  40. package/.next/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  41. package/.next/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  42. package/.next/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  43. package/.next/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  44. package/.next/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  45. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js +2 -2
  46. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  47. package/.next/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  48. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  49. package/.next/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  50. package/.next/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  52. package/.next/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  53. package/.next/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  54. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  55. package/.next/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  56. package/.next/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  57. package/.next/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  58. package/.next/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  59. package/.next/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  60. package/.next/server/app/_global-error/page.js +2 -2
  61. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  62. package/.next/server/app/_global-error.html +1 -1
  63. package/.next/server/app/_global-error.rsc +1 -1
  64. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  65. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  66. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  67. package/.next/server/app/_not-found/page.js +1 -1
  68. package/.next/server/app/_not-found/page.js.nft.json +1 -1
  69. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  70. package/.next/server/app/_not-found.html +1 -1
  71. package/.next/server/app/_not-found.rsc +6 -6
  72. package/.next/server/app/_not-found.segments/_full.segment.rsc +6 -6
  73. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  74. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  75. package/.next/server/app/api/auth/login/route.js +1 -1
  76. package/.next/server/app/api/auth/login/route.js.nft.json +1 -1
  77. package/.next/server/app/api/auth/logout/route.js +1 -1
  78. package/.next/server/app/api/auth/logout/route.js.nft.json +1 -1
  79. package/.next/server/app/api/auth/oidc/callback/route.js +1 -1
  80. package/.next/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  81. package/.next/server/app/api/auth/oidc/start/route.js +1 -1
  82. package/.next/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  83. package/.next/server/app/api/auth/oidc/test/route.js +1 -1
  84. package/.next/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  85. package/.next/server/app/api/auth/reset-password/route.js +1 -1
  86. package/.next/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  87. package/.next/server/app/api/auth/saml/acs/route.js +1 -1
  88. package/.next/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  89. package/.next/server/app/api/auth/saml/metadata/route.js +2 -2
  90. package/.next/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  91. package/.next/server/app/api/auth/saml/start/route.js +2 -2
  92. package/.next/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  93. package/.next/server/app/api/auth/saml/test/route.js +1 -1
  94. package/.next/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  95. package/.next/server/app/api/auth/status/route.js +1 -1
  96. package/.next/server/app/api/auth/status/route.js.nft.json +1 -1
  97. package/.next/server/app/api/changelog/route.js +1 -1
  98. package/.next/server/app/api/cli-tools/all-statuses/route.js +1 -1
  99. package/.next/server/app/api/cli-tools/claude-settings/route.js +1 -1
  100. package/.next/server/app/api/cli-tools/codex-settings/route.js +1 -1
  101. package/.next/server/app/api/cli-tools/cowork-mcp-registry/route.js +1 -1
  102. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  103. package/.next/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  104. package/.next/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  105. package/.next/server/app/api/cli-tools/dsh-settings/route.js +1 -1
  106. package/.next/server/app/api/cli-tools/opencode-settings/route.js +1 -1
  107. package/.next/server/app/api/combos/[id]/route.js +1 -1
  108. package/.next/server/app/api/combos/[id]/route.js.nft.json +1 -1
  109. package/.next/server/app/api/combos/route.js +1 -1
  110. package/.next/server/app/api/combos/route.js.nft.json +1 -1
  111. package/.next/server/app/api/headroom/extras/route.js +1 -1
  112. package/.next/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  113. package/.next/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  114. package/.next/server/app/api/headroom/restart/route.js +1 -1
  115. package/.next/server/app/api/headroom/restart/route.js.nft.json +1 -1
  116. package/.next/server/app/api/headroom/start/route.js +1 -1
  117. package/.next/server/app/api/headroom/start/route.js.nft.json +1 -1
  118. package/.next/server/app/api/headroom/status/route.js +1 -1
  119. package/.next/server/app/api/headroom/status/route.js.nft.json +1 -1
  120. package/.next/server/app/api/headroom/stop/route.js +1 -1
  121. package/.next/server/app/api/health/route.js +1 -1
  122. package/.next/server/app/api/init/route.js +1 -1
  123. package/.next/server/app/api/keys/[id]/route.js +1 -1
  124. package/.next/server/app/api/keys/[id]/route.js.nft.json +1 -1
  125. package/.next/server/app/api/keys/route.js +1 -1
  126. package/.next/server/app/api/keys/route.js.nft.json +1 -1
  127. package/.next/server/app/api/locale/route.js +1 -1
  128. package/.next/server/app/api/mcp/[plugin]/message/route.js +2 -2
  129. package/.next/server/app/api/mcp/[plugin]/sse/route.js +1 -1
  130. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  131. package/.next/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  132. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  133. package/.next/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  134. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  135. package/.next/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  136. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  137. package/.next/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  138. package/.next/server/app/api/media-providers/tts/voices/route.js +1 -1
  139. package/.next/server/app/api/models/alias/route.js +1 -1
  140. package/.next/server/app/api/models/alias/route.js.nft.json +1 -1
  141. package/.next/server/app/api/models/availability/route.js +1 -1
  142. package/.next/server/app/api/models/availability/route.js.nft.json +1 -1
  143. package/.next/server/app/api/models/catalog-sync/route.js +1 -1
  144. package/.next/server/app/api/models/custom/route.js +1 -1
  145. package/.next/server/app/api/models/custom/route.js.nft.json +1 -1
  146. package/.next/server/app/api/models/disabled/route.js +1 -1
  147. package/.next/server/app/api/models/disabled/route.js.nft.json +1 -1
  148. package/.next/server/app/api/models/route.js +1 -1
  149. package/.next/server/app/api/models/route.js.nft.json +1 -1
  150. package/.next/server/app/api/models/test/route.js +1 -1
  151. package/.next/server/app/api/models/test/route.js.nft.json +1 -1
  152. package/.next/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  153. package/.next/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  154. package/.next/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  155. package/.next/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  156. package/.next/server/app/api/oauth/codex/import-token/route.js +1 -1
  157. package/.next/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  158. package/.next/server/app/api/oauth/cursor/auto-import/route.js +2 -2
  159. package/.next/server/app/api/oauth/cursor/import/route.js +1 -1
  160. package/.next/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  161. package/.next/server/app/api/oauth/gitlab/pat/route.js +1 -1
  162. package/.next/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  163. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js +1 -1
  164. package/.next/server/app/api/oauth/grok-cli/bulk-import/route.js.nft.json +1 -1
  165. package/.next/server/app/api/oauth/iflow/cookie/route.js +1 -1
  166. package/.next/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  167. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
  168. package/.next/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
  169. package/.next/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +2 -2
  170. package/.next/server/app/api/pricing/route.js +1 -1
  171. package/.next/server/app/api/pricing/route.js.nft.json +1 -1
  172. package/.next/server/app/api/provider-nodes/[id]/route.js +1 -1
  173. package/.next/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  174. package/.next/server/app/api/provider-nodes/route.js +1 -1
  175. package/.next/server/app/api/provider-nodes/route.js.nft.json +1 -1
  176. package/.next/server/app/api/provider-nodes/validate/route.js +1 -1
  177. package/.next/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  178. package/.next/server/app/api/providers/[id]/models/route.js +1 -1
  179. package/.next/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  180. package/.next/server/app/api/providers/[id]/route.js +1 -1
  181. package/.next/server/app/api/providers/[id]/route.js.nft.json +1 -1
  182. package/.next/server/app/api/providers/[id]/test/route.js +1 -1
  183. package/.next/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  184. package/.next/server/app/api/providers/[id]/test-models/route.js +1 -1
  185. package/.next/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  186. package/.next/server/app/api/providers/client/route.js +1 -1
  187. package/.next/server/app/api/providers/client/route.js.nft.json +1 -1
  188. package/.next/server/app/api/providers/kilo/free-models/route.js +1 -1
  189. package/.next/server/app/api/providers/route.js +1 -1
  190. package/.next/server/app/api/providers/route.js.nft.json +1 -1
  191. package/.next/server/app/api/providers/suggested-models/route.js +1 -1
  192. package/.next/server/app/api/providers/test-batch/route.js +1 -1
  193. package/.next/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  194. package/.next/server/app/api/providers/validate/route.js +1 -1
  195. package/.next/server/app/api/providers/validate/route.js.nft.json +1 -1
  196. package/.next/server/app/api/proxy-pools/[id]/route.js +1 -1
  197. package/.next/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  198. package/.next/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  199. package/.next/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  200. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  201. package/.next/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  202. package/.next/server/app/api/proxy-pools/deno-deploy/route.js +1 -1
  203. package/.next/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  204. package/.next/server/app/api/proxy-pools/route.js +1 -1
  205. package/.next/server/app/api/proxy-pools/route.js.nft.json +1 -1
  206. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  207. package/.next/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  208. package/.next/server/app/api/pxpipe/health/route.js +2 -2
  209. package/.next/server/app/api/pxpipe/install/route.js +1 -1
  210. package/.next/server/app/api/pxpipe/logs/route.js +1 -1
  211. package/.next/server/app/api/pxpipe/restart/route.js +1 -1
  212. package/.next/server/app/api/pxpipe/start/route.js +1 -1
  213. package/.next/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  214. package/.next/server/app/api/pxpipe/stats/route.js +2 -2
  215. package/.next/server/app/api/pxpipe/status/route.js +1 -1
  216. package/.next/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  217. package/.next/server/app/api/pxpipe/stop/route.js +2 -2
  218. package/.next/server/app/api/settings/database/route.js +1 -1
  219. package/.next/server/app/api/settings/database/route.js.nft.json +1 -1
  220. package/.next/server/app/api/settings/proxy-test/route.js +1 -1
  221. package/.next/server/app/api/settings/require-login/route.js +1 -1
  222. package/.next/server/app/api/settings/require-login/route.js.nft.json +1 -1
  223. package/.next/server/app/api/settings/route.js +1 -1
  224. package/.next/server/app/api/settings/route.js.nft.json +1 -1
  225. package/.next/server/app/api/shutdown/route.js +1 -1
  226. package/.next/server/app/api/tags/route.js +1 -1
  227. package/.next/server/app/api/translator/console-logs/route.js +1 -1
  228. package/.next/server/app/api/translator/console-logs/stream/route.js +1 -1
  229. package/.next/server/app/api/translator/load/route.js +1 -1
  230. package/.next/server/app/api/translator/save/route.js +1 -1
  231. package/.next/server/app/api/translator/send/route.js +1 -1
  232. package/.next/server/app/api/translator/send/route.js.nft.json +1 -1
  233. package/.next/server/app/api/translator/translate/route.js +1 -1
  234. package/.next/server/app/api/translator/translate/route.js.nft.json +1 -1
  235. package/.next/server/app/api/tunnel/disable/route.js +1 -1
  236. package/.next/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  237. package/.next/server/app/api/tunnel/enable/route.js +1 -1
  238. package/.next/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  239. package/.next/server/app/api/tunnel/status/route.js +1 -1
  240. package/.next/server/app/api/tunnel/status/route.js.nft.json +1 -1
  241. package/.next/server/app/api/tunnel/tailscale-check/route.js +1 -1
  242. package/.next/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  243. package/.next/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  244. package/.next/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  245. package/.next/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  246. package/.next/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  247. package/.next/server/app/api/tunnel/tailscale-install/route.js +2 -2
  248. package/.next/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  249. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  250. package/.next/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  251. package/.next/server/app/api/usage/[connectionId]/route.js +1 -1
  252. package/.next/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  253. package/.next/server/app/api/usage/chart/route.js +1 -1
  254. package/.next/server/app/api/usage/chart/route.js.nft.json +1 -1
  255. package/.next/server/app/api/usage/health/route.js +1 -0
  256. package/.next/server/app/api/usage/health/route.js.nft.json +1 -0
  257. package/.next/server/app/api/usage/health/route_client-reference-manifest.js +1 -0
  258. package/.next/server/app/api/usage/history/route.js +1 -1
  259. package/.next/server/app/api/usage/history/route.js.nft.json +1 -1
  260. package/.next/server/app/api/usage/logs/route.js +1 -1
  261. package/.next/server/app/api/usage/logs/route.js.nft.json +1 -1
  262. package/.next/server/app/api/usage/providers/route.js +1 -1
  263. package/.next/server/app/api/usage/providers/route.js.nft.json +1 -1
  264. package/.next/server/app/api/usage/request-details/route.js +1 -1
  265. package/.next/server/app/api/usage/request-details/route.js.nft.json +1 -1
  266. package/.next/server/app/api/usage/request-logs/route.js +1 -1
  267. package/.next/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  268. package/.next/server/app/api/usage/stats/route.js +1 -1
  269. package/.next/server/app/api/usage/stats/route.js.nft.json +1 -1
  270. package/.next/server/app/api/usage/stream/route.js +2 -2
  271. package/.next/server/app/api/usage/stream/route.js.nft.json +1 -1
  272. package/.next/server/app/api/v1/api/chat/route.js +1 -1
  273. package/.next/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  274. package/.next/server/app/api/v1/audio/speech/route.js +1 -1
  275. package/.next/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  276. package/.next/server/app/api/v1/audio/transcriptions/route.js +1 -1
  277. package/.next/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  278. package/.next/server/app/api/v1/audio/voices/route.js +1 -1
  279. package/.next/server/app/api/v1/chat/completions/route.js +1 -1
  280. package/.next/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  281. package/.next/server/app/api/v1/embeddings/route.js +1 -1
  282. package/.next/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  283. package/.next/server/app/api/v1/images/generations/route.js +2 -2
  284. package/.next/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  285. package/.next/server/app/api/v1/messages/count_tokens/route.js +1 -1
  286. package/.next/server/app/api/v1/messages/route.js +1 -1
  287. package/.next/server/app/api/v1/messages/route.js.nft.json +1 -1
  288. package/.next/server/app/api/v1/models/[...model]/route.js +1 -1
  289. package/.next/server/app/api/v1/models/[...model]/route.js.nft.json +1 -1
  290. package/.next/server/app/api/v1/models/info/route.js +1 -1
  291. package/.next/server/app/api/v1/models/route.js +1 -1
  292. package/.next/server/app/api/v1/models/route.js.nft.json +1 -1
  293. package/.next/server/app/api/v1/responses/compact/route.js +1 -1
  294. package/.next/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  295. package/.next/server/app/api/v1/responses/route.js +1 -1
  296. package/.next/server/app/api/v1/responses/route.js.nft.json +1 -1
  297. package/.next/server/app/api/v1/route.js +1 -1
  298. package/.next/server/app/api/v1/route.js.nft.json +1 -1
  299. package/.next/server/app/api/v1/search/route.js +1 -1
  300. package/.next/server/app/api/v1/search/route.js.nft.json +1 -1
  301. package/.next/server/app/api/v1/systemone/route.js +1 -1
  302. package/.next/server/app/api/v1/systemone/route.js.nft.json +1 -1
  303. package/.next/server/app/api/v1/videos/[id]/route.js +1 -1
  304. package/.next/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  305. package/.next/server/app/api/v1/videos/edits/route.js +1 -1
  306. package/.next/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  307. package/.next/server/app/api/v1/videos/extensions/route.js +1 -1
  308. package/.next/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  309. package/.next/server/app/api/v1/videos/generations/route.js +1 -1
  310. package/.next/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  311. package/.next/server/app/api/v1/web/fetch/route.js +1 -1
  312. package/.next/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  313. package/.next/server/app/api/v1beta/models/[...path]/route.js +1 -1
  314. package/.next/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  315. package/.next/server/app/api/v1beta/models/route.js +1 -1
  316. package/.next/server/app/api/version/route.js +1 -1
  317. package/.next/server/app/api/version/shutdown/route.js +1 -1
  318. package/.next/server/app/api/version/shutdown/route.js.nft.json +1 -1
  319. package/.next/server/app/api/version/update/route.js +1 -1
  320. package/.next/server/app/callback/page.js +1 -1
  321. package/.next/server/app/callback/page.js.nft.json +1 -1
  322. package/.next/server/app/callback/page_client-reference-manifest.js +1 -1
  323. package/.next/server/app/callback.html +1 -1
  324. package/.next/server/app/callback.rsc +7 -7
  325. package/.next/server/app/callback.segments/_full.segment.rsc +7 -7
  326. package/.next/server/app/callback.segments/_tree.segment.rsc +2 -2
  327. package/.next/server/app/callback.segments/callback/__PAGE__.segment.rsc +7 -7
  328. package/.next/server/app/dashboard/basic-chat.html +1 -1
  329. package/.next/server/app/dashboard/basic-chat.rsc +8 -8
  330. package/.next/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +8 -8
  331. package/.next/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
  332. package/.next/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  333. package/.next/server/app/dashboard/cli-tools.html +1 -1
  334. package/.next/server/app/dashboard/cli-tools.rsc +8 -8
  335. package/.next/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  336. package/.next/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
  337. package/.next/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  338. package/.next/server/app/dashboard/combos.html +1 -1
  339. package/.next/server/app/dashboard/combos.rsc +8 -8
  340. package/.next/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  341. package/.next/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  342. package/.next/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  343. package/.next/server/app/dashboard/endpoint.html +1 -1
  344. package/.next/server/app/dashboard/endpoint.rsc +8 -8
  345. package/.next/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  346. package/.next/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  347. package/.next/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  348. package/.next/server/app/dashboard/media-providers/systemone.html +1 -1
  349. package/.next/server/app/dashboard/media-providers/systemone.rsc +8 -8
  350. package/.next/server/app/dashboard/media-providers/systemone.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/systemone/__PAGE__.segment.rsc +8 -8
  351. package/.next/server/app/dashboard/media-providers/systemone.segments/_full.segment.rsc +8 -8
  352. package/.next/server/app/dashboard/media-providers/systemone.segments/_tree.segment.rsc +2 -2
  353. package/.next/server/app/dashboard/profile.html +1 -1
  354. package/.next/server/app/dashboard/profile.rsc +8 -8
  355. package/.next/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  356. package/.next/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  357. package/.next/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  358. package/.next/server/app/dashboard/providers/new.html +1 -1
  359. package/.next/server/app/dashboard/providers/new.rsc +8 -8
  360. package/.next/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  361. package/.next/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  362. package/.next/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  363. package/.next/server/app/dashboard/providers.html +1 -1
  364. package/.next/server/app/dashboard/providers.rsc +8 -8
  365. package/.next/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  366. package/.next/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  367. package/.next/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  368. package/.next/server/app/dashboard/proxy-pools.html +1 -1
  369. package/.next/server/app/dashboard/proxy-pools.rsc +8 -8
  370. package/.next/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  371. package/.next/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  372. package/.next/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  373. package/.next/server/app/dashboard/pxpipe.html +1 -1
  374. package/.next/server/app/dashboard/pxpipe.rsc +7 -7
  375. package/.next/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +7 -7
  376. package/.next/server/app/dashboard/pxpipe.segments/_full.segment.rsc +7 -7
  377. package/.next/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  378. package/.next/server/app/dashboard/quota.html +2 -2
  379. package/.next/server/app/dashboard/quota.rsc +9 -9
  380. package/.next/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  381. package/.next/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  382. package/.next/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  383. package/.next/server/app/dashboard/settings/pricing/page.js +1 -1
  384. package/.next/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  385. package/.next/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  386. package/.next/server/app/dashboard/settings/pricing.html +1 -1
  387. package/.next/server/app/dashboard/settings/pricing.rsc +6 -6
  388. package/.next/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  389. package/.next/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  390. package/.next/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
  391. package/.next/server/app/dashboard/token-saver.html +1 -1
  392. package/.next/server/app/dashboard/token-saver.rsc +7 -7
  393. package/.next/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +7 -7
  394. package/.next/server/app/dashboard/token-saver.segments/_full.segment.rsc +7 -7
  395. package/.next/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  396. package/.next/server/app/dashboard/usage.html +2 -2
  397. package/.next/server/app/dashboard/usage.rsc +8 -8
  398. package/.next/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  399. package/.next/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  400. package/.next/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  401. package/.next/server/app/dashboard.html +1 -1
  402. package/.next/server/app/dashboard.rsc +8 -8
  403. package/.next/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  404. package/.next/server/app/dashboard.segments/_full.segment.rsc +8 -8
  405. package/.next/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  406. package/.next/server/app/index.html +1 -1
  407. package/.next/server/app/index.rsc +6 -6
  408. package/.next/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  409. package/.next/server/app/index.segments/_full.segment.rsc +6 -6
  410. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  411. package/.next/server/app/landing/page.js +1 -1
  412. package/.next/server/app/landing/page.js.nft.json +1 -1
  413. package/.next/server/app/landing/page_client-reference-manifest.js +1 -1
  414. package/.next/server/app/landing.html +1 -1
  415. package/.next/server/app/landing.rsc +7 -7
  416. package/.next/server/app/landing.segments/_full.segment.rsc +7 -7
  417. package/.next/server/app/landing.segments/_tree.segment.rsc +2 -2
  418. package/.next/server/app/landing.segments/landing/__PAGE__.segment.rsc +7 -7
  419. package/.next/server/app/login/page.js +1 -1
  420. package/.next/server/app/login/page.js.nft.json +1 -1
  421. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  422. package/.next/server/app/login.html +1 -1
  423. package/.next/server/app/login.rsc +6 -6
  424. package/.next/server/app/login.segments/_full.segment.rsc +6 -6
  425. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  426. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +6 -6
  427. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  428. package/.next/server/app/page.js +1 -1
  429. package/.next/server/app/page.js.nft.json +1 -1
  430. package/.next/server/app/page_client-reference-manifest.js +1 -1
  431. package/.next/server/app-paths-manifest.json +12 -11
  432. package/.next/server/chunks/1011.js +1 -1
  433. package/.next/server/chunks/1194.js +1 -1
  434. package/.next/server/chunks/1289.js +1 -1
  435. package/.next/server/chunks/1633.js +1 -1
  436. package/.next/server/chunks/1985.js +1 -1
  437. package/.next/server/chunks/2339.js +1 -1
  438. package/.next/server/chunks/2801.js +1 -1
  439. package/.next/server/chunks/3250.js +2 -2
  440. package/.next/server/chunks/3425.js +1 -1
  441. package/.next/server/chunks/5412.js +1 -1
  442. package/.next/server/chunks/6056.js +1 -1
  443. package/.next/server/chunks/7348.js +1 -1
  444. package/.next/server/chunks/9429.js +1 -1
  445. package/.next/server/middleware-build-manifest.js +1 -1
  446. package/.next/server/middleware.js +1 -1
  447. package/.next/server/middleware.js.nft.json +1 -1
  448. package/.next/server/pages/404.html +1 -1
  449. package/.next/server/pages/500.html +1 -1
  450. package/.next/server/server-reference-manifest.js +1 -1
  451. package/.next/server/server-reference-manifest.json +1 -1
  452. package/.next/static/chunks/{1278-db66df071a072f90.js → 1278-605cc36f762c2ea7.js} +1 -1
  453. package/.next/static/chunks/{1471-10f225f62f7469cc.js → 1471-69a7c30abf98c656.js} +1 -1
  454. package/.next/static/chunks/{1699-13ee6864a8a31a96.js → 1699-49be310981e2759e.js} +2 -2
  455. package/.next/static/chunks/2836-8e7f4c382297ac97.js +1 -0
  456. package/.next/static/chunks/{3577-cd98d40e3099e1b0.js → 3577-1f02993330d7fba7.js} +1 -1
  457. package/.next/static/chunks/3973-424848b943e2ecab.js +1 -0
  458. package/.next/static/chunks/{5862-f98c2f3d480b80d2.js → 5862-6f3a3a6d4c00100d.js} +1 -1
  459. package/.next/static/chunks/9369-7ef21480b9132957.js +1 -0
  460. package/.next/static/chunks/{9ce8c186-3c7d7dbc5d428052.js → 9ce8c186-6cd204e9c27ecee1.js} +1 -1
  461. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/[toolId]/{page-93cc9fc8f8ab938b.js → page-9efe55fed2f7c81f.js} +2 -2
  462. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-9dcb29085167b384.js +1 -0
  463. package/.next/static/chunks/app/(dashboard)/dashboard/combos/page-f5db9f681c6bface.js +1 -0
  464. package/.next/static/chunks/app/(dashboard)/dashboard/console-log/{page-168534817f7aecd8.js → page-d134cc313c9fa0b8.js} +1 -1
  465. package/.next/static/chunks/app/(dashboard)/dashboard/endpoint/{page-13abc5b934c960d3.js → page-f2d1a733e7f841cb.js} +1 -1
  466. package/.next/static/chunks/app/(dashboard)/dashboard/media-providers/systemone/[id]/{page-fb90d8451f40b8b3.js → page-0d6e623de6134598.js} +1 -1
  467. package/.next/static/chunks/app/(dashboard)/dashboard/{page-85118ef708c624e6.js → page-e8f1d8be5e294fb0.js} +1 -1
  468. package/.next/static/chunks/app/(dashboard)/dashboard/providers/[id]/{page-36659d3f8756c897.js → page-c96cbcc4f5736e36.js} +1 -1
  469. package/.next/static/chunks/app/(dashboard)/dashboard/providers/new/{page-81f2d7e490f1c69c.js → page-cc51346e464158b1.js} +1 -1
  470. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-1ee147fbe0693dc1.js +1 -0
  471. package/.next/static/chunks/app/(dashboard)/dashboard/proxy-pools/{page-247f59d088891437.js → page-2287b1915fa887fc.js} +2 -2
  472. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-54a329d725734a1f.js +1 -0
  473. package/.next/static/chunks/app/(dashboard)/dashboard/usage/page-a81f78bb43042c30.js +1 -0
  474. package/.next/static/chunks/app/(dashboard)/{layout-667f17706a5e1896.js → layout-c199eb2ad56ae96a.js} +1 -1
  475. package/.next/static/chunks/app/_global-error/{page-fe947d4ab19df968.js → page-9a2a13ac6b89ba91.js} +1 -1
  476. package/.next/static/chunks/app/api/auth/login/{route-fe947d4ab19df968.js → route-9a2a13ac6b89ba91.js} +1 -1
  477. package/.next/static/chunks/app/api/auth/logout/{route-fe947d4ab19df968.js → route-9a2a13ac6b89ba91.js} +1 -1
  478. package/.next/static/chunks/app/api/auth/oidc/callback/{route-fe947d4ab19df968.js → route-9a2a13ac6b89ba91.js} +1 -1
  479. package/.next/static/chunks/app/api/auth/oidc/start/route-9a2a13ac6b89ba91.js +1 -0
  480. package/.next/static/chunks/app/api/auth/oidc/test/route-9a2a13ac6b89ba91.js +1 -0
  481. package/.next/static/chunks/app/api/auth/reset-password/route-9a2a13ac6b89ba91.js +1 -0
  482. package/.next/static/chunks/app/api/auth/saml/acs/route-9a2a13ac6b89ba91.js +1 -0
  483. package/.next/static/chunks/app/api/auth/saml/metadata/route-9a2a13ac6b89ba91.js +1 -0
  484. package/.next/static/chunks/app/api/auth/saml/start/route-9a2a13ac6b89ba91.js +1 -0
  485. package/.next/static/chunks/app/api/auth/saml/test/route-9a2a13ac6b89ba91.js +1 -0
  486. package/.next/static/chunks/app/api/auth/status/route-9a2a13ac6b89ba91.js +1 -0
  487. package/.next/static/chunks/app/api/changelog/route-9a2a13ac6b89ba91.js +1 -0
  488. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-9a2a13ac6b89ba91.js +1 -0
  489. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-9a2a13ac6b89ba91.js +1 -0
  490. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-9a2a13ac6b89ba91.js +1 -0
  491. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-9a2a13ac6b89ba91.js +1 -0
  492. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-9a2a13ac6b89ba91.js +1 -0
  493. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-9a2a13ac6b89ba91.js +1 -0
  494. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-9a2a13ac6b89ba91.js +1 -0
  495. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-9a2a13ac6b89ba91.js +1 -0
  496. package/.next/static/chunks/app/api/combos/[id]/route-9a2a13ac6b89ba91.js +1 -0
  497. package/.next/static/chunks/app/api/combos/route-9a2a13ac6b89ba91.js +1 -0
  498. package/.next/static/chunks/app/api/headroom/extras/route-9a2a13ac6b89ba91.js +1 -0
  499. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-9a2a13ac6b89ba91.js +1 -0
  500. package/.next/static/chunks/app/api/headroom/restart/route-9a2a13ac6b89ba91.js +1 -0
  501. package/.next/static/chunks/app/api/headroom/start/route-9a2a13ac6b89ba91.js +1 -0
  502. package/.next/static/chunks/app/api/headroom/status/route-9a2a13ac6b89ba91.js +1 -0
  503. package/.next/static/chunks/app/api/headroom/stop/route-9a2a13ac6b89ba91.js +1 -0
  504. package/.next/static/chunks/app/api/health/route-9a2a13ac6b89ba91.js +1 -0
  505. package/.next/static/chunks/app/api/init/route-9a2a13ac6b89ba91.js +1 -0
  506. package/.next/static/chunks/app/api/keys/[id]/route-9a2a13ac6b89ba91.js +1 -0
  507. package/.next/static/chunks/app/api/keys/route-9a2a13ac6b89ba91.js +1 -0
  508. package/.next/static/chunks/app/api/locale/route-9a2a13ac6b89ba91.js +1 -0
  509. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-9a2a13ac6b89ba91.js +1 -0
  510. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-9a2a13ac6b89ba91.js +1 -0
  511. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-9a2a13ac6b89ba91.js +1 -0
  512. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-9a2a13ac6b89ba91.js +1 -0
  513. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-9a2a13ac6b89ba91.js +1 -0
  514. package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-9a2a13ac6b89ba91.js +1 -0
  515. package/.next/static/chunks/app/api/media-providers/tts/voices/route-9a2a13ac6b89ba91.js +1 -0
  516. package/.next/static/chunks/app/api/models/alias/route-9a2a13ac6b89ba91.js +1 -0
  517. package/.next/static/chunks/app/api/models/availability/route-9a2a13ac6b89ba91.js +1 -0
  518. package/.next/static/chunks/app/api/models/catalog-sync/route-9a2a13ac6b89ba91.js +1 -0
  519. package/.next/static/chunks/app/api/models/custom/route-9a2a13ac6b89ba91.js +1 -0
  520. package/.next/static/chunks/app/api/models/disabled/route-9a2a13ac6b89ba91.js +1 -0
  521. package/.next/static/chunks/app/api/models/route-9a2a13ac6b89ba91.js +1 -0
  522. package/.next/static/chunks/app/api/models/test/route-9a2a13ac6b89ba91.js +1 -0
  523. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-9a2a13ac6b89ba91.js +1 -0
  524. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-9a2a13ac6b89ba91.js +1 -0
  525. package/.next/static/chunks/app/api/oauth/codex/import-token/route-9a2a13ac6b89ba91.js +1 -0
  526. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-9a2a13ac6b89ba91.js +1 -0
  527. package/.next/static/chunks/app/api/oauth/cursor/import/route-9a2a13ac6b89ba91.js +1 -0
  528. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-9a2a13ac6b89ba91.js +1 -0
  529. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-9a2a13ac6b89ba91.js +1 -0
  530. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-9a2a13ac6b89ba91.js +1 -0
  531. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-9a2a13ac6b89ba91.js +1 -0
  532. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-9a2a13ac6b89ba91.js +1 -0
  533. package/.next/static/chunks/app/api/pricing/route-9a2a13ac6b89ba91.js +1 -0
  534. package/.next/static/chunks/app/api/provider-nodes/[id]/route-9a2a13ac6b89ba91.js +1 -0
  535. package/.next/static/chunks/app/api/provider-nodes/route-9a2a13ac6b89ba91.js +1 -0
  536. package/.next/static/chunks/app/api/provider-nodes/validate/route-9a2a13ac6b89ba91.js +1 -0
  537. package/.next/static/chunks/app/api/providers/[id]/models/route-9a2a13ac6b89ba91.js +1 -0
  538. package/.next/static/chunks/app/api/providers/[id]/route-9a2a13ac6b89ba91.js +1 -0
  539. package/.next/static/chunks/app/api/providers/[id]/test/route-9a2a13ac6b89ba91.js +1 -0
  540. package/.next/static/chunks/app/api/providers/[id]/test-models/route-9a2a13ac6b89ba91.js +1 -0
  541. package/.next/static/chunks/app/api/providers/client/route-9a2a13ac6b89ba91.js +1 -0
  542. package/.next/static/chunks/app/api/providers/kilo/free-models/route-9a2a13ac6b89ba91.js +1 -0
  543. package/.next/static/chunks/app/api/providers/route-9a2a13ac6b89ba91.js +1 -0
  544. package/.next/static/chunks/app/api/providers/suggested-models/route-9a2a13ac6b89ba91.js +1 -0
  545. package/.next/static/chunks/app/api/providers/test-batch/route-9a2a13ac6b89ba91.js +1 -0
  546. package/.next/static/chunks/app/api/providers/validate/route-9a2a13ac6b89ba91.js +1 -0
  547. package/.next/static/chunks/app/api/proxy-pools/[id]/route-9a2a13ac6b89ba91.js +1 -0
  548. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-9a2a13ac6b89ba91.js +1 -0
  549. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-9a2a13ac6b89ba91.js +1 -0
  550. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-9a2a13ac6b89ba91.js +1 -0
  551. package/.next/static/chunks/app/api/proxy-pools/route-9a2a13ac6b89ba91.js +1 -0
  552. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-9a2a13ac6b89ba91.js +1 -0
  553. package/.next/static/chunks/app/api/pxpipe/health/route-9a2a13ac6b89ba91.js +1 -0
  554. package/.next/static/chunks/app/api/pxpipe/install/route-9a2a13ac6b89ba91.js +1 -0
  555. package/.next/static/chunks/app/api/pxpipe/logs/route-9a2a13ac6b89ba91.js +1 -0
  556. package/.next/static/chunks/app/api/pxpipe/restart/route-9a2a13ac6b89ba91.js +1 -0
  557. package/.next/static/chunks/app/api/pxpipe/start/route-9a2a13ac6b89ba91.js +1 -0
  558. package/.next/static/chunks/app/api/pxpipe/stats/route-9a2a13ac6b89ba91.js +1 -0
  559. package/.next/static/chunks/app/api/pxpipe/status/route-9a2a13ac6b89ba91.js +1 -0
  560. package/.next/static/chunks/app/api/pxpipe/stop/route-9a2a13ac6b89ba91.js +1 -0
  561. package/.next/static/chunks/app/api/settings/database/route-9a2a13ac6b89ba91.js +1 -0
  562. package/.next/static/chunks/app/api/settings/proxy-test/route-9a2a13ac6b89ba91.js +1 -0
  563. package/.next/static/chunks/app/api/settings/require-login/route-9a2a13ac6b89ba91.js +1 -0
  564. package/.next/static/chunks/app/api/settings/route-9a2a13ac6b89ba91.js +1 -0
  565. package/.next/static/chunks/app/api/shutdown/route-9a2a13ac6b89ba91.js +1 -0
  566. package/.next/static/chunks/app/api/tags/route-9a2a13ac6b89ba91.js +1 -0
  567. package/.next/static/chunks/app/api/translator/console-logs/route-9a2a13ac6b89ba91.js +1 -0
  568. package/.next/static/chunks/app/api/translator/console-logs/stream/route-9a2a13ac6b89ba91.js +1 -0
  569. package/.next/static/chunks/app/api/translator/load/route-9a2a13ac6b89ba91.js +1 -0
  570. package/.next/static/chunks/app/api/translator/save/route-9a2a13ac6b89ba91.js +1 -0
  571. package/.next/static/chunks/app/api/translator/send/route-9a2a13ac6b89ba91.js +1 -0
  572. package/.next/static/chunks/app/api/translator/translate/route-9a2a13ac6b89ba91.js +1 -0
  573. package/.next/static/chunks/app/api/tunnel/disable/route-9a2a13ac6b89ba91.js +1 -0
  574. package/.next/static/chunks/app/api/tunnel/enable/route-9a2a13ac6b89ba91.js +1 -0
  575. package/.next/static/chunks/app/api/tunnel/status/route-9a2a13ac6b89ba91.js +1 -0
  576. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-9a2a13ac6b89ba91.js +1 -0
  577. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-9a2a13ac6b89ba91.js +1 -0
  578. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-9a2a13ac6b89ba91.js +1 -0
  579. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-9a2a13ac6b89ba91.js +1 -0
  580. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-9a2a13ac6b89ba91.js +1 -0
  581. package/.next/static/chunks/app/api/usage/[connectionId]/route-9a2a13ac6b89ba91.js +1 -0
  582. package/.next/static/chunks/app/api/usage/chart/route-9a2a13ac6b89ba91.js +1 -0
  583. package/.next/static/chunks/app/api/usage/health/route-9a2a13ac6b89ba91.js +1 -0
  584. package/.next/static/chunks/app/api/usage/history/route-9a2a13ac6b89ba91.js +1 -0
  585. package/.next/static/chunks/app/api/usage/logs/route-9a2a13ac6b89ba91.js +1 -0
  586. package/.next/static/chunks/app/api/usage/providers/route-9a2a13ac6b89ba91.js +1 -0
  587. package/.next/static/chunks/app/api/usage/request-details/route-9a2a13ac6b89ba91.js +1 -0
  588. package/.next/static/chunks/app/api/usage/request-logs/route-9a2a13ac6b89ba91.js +1 -0
  589. package/.next/static/chunks/app/api/usage/stats/route-9a2a13ac6b89ba91.js +1 -0
  590. package/.next/static/chunks/app/api/usage/stream/route-9a2a13ac6b89ba91.js +1 -0
  591. package/.next/static/chunks/app/api/v1/api/chat/route-9a2a13ac6b89ba91.js +1 -0
  592. package/.next/static/chunks/app/api/v1/audio/speech/route-9a2a13ac6b89ba91.js +1 -0
  593. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-9a2a13ac6b89ba91.js +1 -0
  594. package/.next/static/chunks/app/api/v1/audio/voices/route-9a2a13ac6b89ba91.js +1 -0
  595. package/.next/static/chunks/app/api/v1/chat/completions/route-9a2a13ac6b89ba91.js +1 -0
  596. package/.next/static/chunks/app/api/v1/embeddings/route-9a2a13ac6b89ba91.js +1 -0
  597. package/.next/static/chunks/app/api/v1/images/generations/route-9a2a13ac6b89ba91.js +1 -0
  598. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-9a2a13ac6b89ba91.js +1 -0
  599. package/.next/static/chunks/app/api/v1/messages/route-9a2a13ac6b89ba91.js +1 -0
  600. package/.next/static/chunks/app/api/v1/models/[...model]/route-9a2a13ac6b89ba91.js +1 -0
  601. package/.next/static/chunks/app/api/v1/models/info/route-9a2a13ac6b89ba91.js +1 -0
  602. package/.next/static/chunks/app/api/v1/models/route-9a2a13ac6b89ba91.js +1 -0
  603. package/.next/static/chunks/app/api/v1/responses/compact/route-9a2a13ac6b89ba91.js +1 -0
  604. package/.next/static/chunks/app/api/v1/responses/route-9a2a13ac6b89ba91.js +1 -0
  605. package/.next/static/chunks/app/api/v1/route-9a2a13ac6b89ba91.js +1 -0
  606. package/.next/static/chunks/app/api/v1/search/route-9a2a13ac6b89ba91.js +1 -0
  607. package/.next/static/chunks/app/api/v1/systemone/route-9a2a13ac6b89ba91.js +1 -0
  608. package/.next/static/chunks/app/api/v1/videos/[id]/route-9a2a13ac6b89ba91.js +1 -0
  609. package/.next/static/chunks/app/api/v1/videos/edits/route-9a2a13ac6b89ba91.js +1 -0
  610. package/.next/static/chunks/app/api/v1/videos/extensions/route-9a2a13ac6b89ba91.js +1 -0
  611. package/.next/static/chunks/app/api/v1/videos/generations/route-9a2a13ac6b89ba91.js +1 -0
  612. package/.next/static/chunks/app/api/v1/web/fetch/route-9a2a13ac6b89ba91.js +1 -0
  613. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-9a2a13ac6b89ba91.js +1 -0
  614. package/.next/static/chunks/app/api/v1beta/models/route-9a2a13ac6b89ba91.js +1 -0
  615. package/.next/static/chunks/app/api/version/route-9a2a13ac6b89ba91.js +1 -0
  616. package/.next/static/chunks/app/api/version/shutdown/route-9a2a13ac6b89ba91.js +1 -0
  617. package/.next/static/chunks/app/api/version/update/route-9a2a13ac6b89ba91.js +1 -0
  618. package/.next/static/chunks/app/{layout-d5f5e92e2a8102f1.js → layout-9bd5877ae6198856.js} +1 -1
  619. package/.next/static/chunks/app/manifest.webmanifest/route-9a2a13ac6b89ba91.js +1 -0
  620. package/.next/static/chunks/app/page-9a2a13ac6b89ba91.js +1 -0
  621. package/.next/static/chunks/next/dist/client/components/builtin/app-error-9a2a13ac6b89ba91.js +1 -0
  622. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-9a2a13ac6b89ba91.js +1 -0
  623. package/.next/static/chunks/next/dist/client/components/builtin/not-found-9a2a13ac6b89ba91.js +1 -0
  624. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-9a2a13ac6b89ba91.js +1 -0
  625. package/.next/static/css/c66cbd684164cacf.css +1 -0
  626. package/.next/static/iz7psrsEuHZGPvj7rbSWc/_buildManifest.js +1 -0
  627. package/CHANGELOG.md +6 -0
  628. package/bin/update-check.mjs +5 -1
  629. package/package.json +1 -5
  630. package/src/app/(dashboard)/dashboard/usage/components/ProviderHealth.tsx +221 -0
  631. package/src/app/api/usage/health/route.ts +121 -0
  632. package/src/lib/db/adapters/betterSqliteAdapter.js +12 -1
  633. package/src/lib/db/driver.js +4 -1
  634. package/src/lib/usageHealth.ts +219 -0
  635. package/src/shared/components/UsageStats.tsx +4 -0
  636. package/.next/static/P0IikrdjxpmTneD33YPWQ/_buildManifest.js +0 -1
  637. package/.next/static/chunks/208-521a3242b62d6c07.js +0 -1
  638. package/.next/static/chunks/2836-38406d658ad8caa9.js +0 -1
  639. package/.next/static/chunks/9369-b8c9520bc2536ff2.js +0 -1
  640. package/.next/static/chunks/app/(dashboard)/dashboard/cli-tools/page-1c54f83c69f02add.js +0 -1
  641. package/.next/static/chunks/app/(dashboard)/dashboard/combos/page-853f4e08f4982dbe.js +0 -1
  642. package/.next/static/chunks/app/(dashboard)/dashboard/providers/page-b9dafab69096fa76.js +0 -1
  643. package/.next/static/chunks/app/(dashboard)/dashboard/quota/page-5d2e8d9a126c2769.js +0 -1
  644. package/.next/static/chunks/app/(dashboard)/dashboard/usage/page-cf503287fe99e910.js +0 -1
  645. package/.next/static/chunks/app/api/auth/oidc/start/route-fe947d4ab19df968.js +0 -1
  646. package/.next/static/chunks/app/api/auth/oidc/test/route-fe947d4ab19df968.js +0 -1
  647. package/.next/static/chunks/app/api/auth/reset-password/route-fe947d4ab19df968.js +0 -1
  648. package/.next/static/chunks/app/api/auth/saml/acs/route-fe947d4ab19df968.js +0 -1
  649. package/.next/static/chunks/app/api/auth/saml/metadata/route-fe947d4ab19df968.js +0 -1
  650. package/.next/static/chunks/app/api/auth/saml/start/route-fe947d4ab19df968.js +0 -1
  651. package/.next/static/chunks/app/api/auth/saml/test/route-fe947d4ab19df968.js +0 -1
  652. package/.next/static/chunks/app/api/auth/status/route-fe947d4ab19df968.js +0 -1
  653. package/.next/static/chunks/app/api/changelog/route-fe947d4ab19df968.js +0 -1
  654. package/.next/static/chunks/app/api/cli-tools/all-statuses/route-fe947d4ab19df968.js +0 -1
  655. package/.next/static/chunks/app/api/cli-tools/claude-settings/route-fe947d4ab19df968.js +0 -1
  656. package/.next/static/chunks/app/api/cli-tools/codex-settings/route-fe947d4ab19df968.js +0 -1
  657. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-registry/route-fe947d4ab19df968.js +0 -1
  658. package/.next/static/chunks/app/api/cli-tools/cowork-mcp-tools/route-fe947d4ab19df968.js +0 -1
  659. package/.next/static/chunks/app/api/cli-tools/cowork-settings/route-fe947d4ab19df968.js +0 -1
  660. package/.next/static/chunks/app/api/cli-tools/dsh-settings/route-fe947d4ab19df968.js +0 -1
  661. package/.next/static/chunks/app/api/cli-tools/opencode-settings/route-fe947d4ab19df968.js +0 -1
  662. package/.next/static/chunks/app/api/combos/[id]/route-fe947d4ab19df968.js +0 -1
  663. package/.next/static/chunks/app/api/combos/route-fe947d4ab19df968.js +0 -1
  664. package/.next/static/chunks/app/api/headroom/extras/route-fe947d4ab19df968.js +0 -1
  665. package/.next/static/chunks/app/api/headroom/proxy/[...path]/route-fe947d4ab19df968.js +0 -1
  666. package/.next/static/chunks/app/api/headroom/restart/route-fe947d4ab19df968.js +0 -1
  667. package/.next/static/chunks/app/api/headroom/start/route-fe947d4ab19df968.js +0 -1
  668. package/.next/static/chunks/app/api/headroom/status/route-fe947d4ab19df968.js +0 -1
  669. package/.next/static/chunks/app/api/headroom/stop/route-fe947d4ab19df968.js +0 -1
  670. package/.next/static/chunks/app/api/health/route-fe947d4ab19df968.js +0 -1
  671. package/.next/static/chunks/app/api/init/route-fe947d4ab19df968.js +0 -1
  672. package/.next/static/chunks/app/api/keys/[id]/route-fe947d4ab19df968.js +0 -1
  673. package/.next/static/chunks/app/api/keys/route-fe947d4ab19df968.js +0 -1
  674. package/.next/static/chunks/app/api/locale/route-fe947d4ab19df968.js +0 -1
  675. package/.next/static/chunks/app/api/mcp/[plugin]/message/route-fe947d4ab19df968.js +0 -1
  676. package/.next/static/chunks/app/api/mcp/[plugin]/sse/route-fe947d4ab19df968.js +0 -1
  677. package/.next/static/chunks/app/api/media-providers/tts/deepgram/voices/route-fe947d4ab19df968.js +0 -1
  678. package/.next/static/chunks/app/api/media-providers/tts/elevenlabs/voices/route-fe947d4ab19df968.js +0 -1
  679. package/.next/static/chunks/app/api/media-providers/tts/inworld/voices/route-fe947d4ab19df968.js +0 -1
  680. package/.next/static/chunks/app/api/media-providers/tts/minimax/voices/route-fe947d4ab19df968.js +0 -1
  681. package/.next/static/chunks/app/api/media-providers/tts/voices/route-fe947d4ab19df968.js +0 -1
  682. package/.next/static/chunks/app/api/models/alias/route-fe947d4ab19df968.js +0 -1
  683. package/.next/static/chunks/app/api/models/availability/route-fe947d4ab19df968.js +0 -1
  684. package/.next/static/chunks/app/api/models/catalog-sync/route-fe947d4ab19df968.js +0 -1
  685. package/.next/static/chunks/app/api/models/custom/route-fe947d4ab19df968.js +0 -1
  686. package/.next/static/chunks/app/api/models/disabled/route-fe947d4ab19df968.js +0 -1
  687. package/.next/static/chunks/app/api/models/route-fe947d4ab19df968.js +0 -1
  688. package/.next/static/chunks/app/api/models/test/route-fe947d4ab19df968.js +0 -1
  689. package/.next/static/chunks/app/api/oauth/[provider]/[action]/route-fe947d4ab19df968.js +0 -1
  690. package/.next/static/chunks/app/api/oauth/codex/bulk-import/route-fe947d4ab19df968.js +0 -1
  691. package/.next/static/chunks/app/api/oauth/codex/import-token/route-fe947d4ab19df968.js +0 -1
  692. package/.next/static/chunks/app/api/oauth/cursor/auto-import/route-fe947d4ab19df968.js +0 -1
  693. package/.next/static/chunks/app/api/oauth/cursor/import/route-fe947d4ab19df968.js +0 -1
  694. package/.next/static/chunks/app/api/oauth/gitlab/pat/route-fe947d4ab19df968.js +0 -1
  695. package/.next/static/chunks/app/api/oauth/grok-cli/bulk-import/route-fe947d4ab19df968.js +0 -1
  696. package/.next/static/chunks/app/api/oauth/iflow/cookie/route-fe947d4ab19df968.js +0 -1
  697. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/api-key/route-fe947d4ab19df968.js +0 -1
  698. package/.next/static/chunks/app/api/oauth/xiaomi-mimo/auto-import/route-fe947d4ab19df968.js +0 -1
  699. package/.next/static/chunks/app/api/pricing/route-fe947d4ab19df968.js +0 -1
  700. package/.next/static/chunks/app/api/provider-nodes/[id]/route-fe947d4ab19df968.js +0 -1
  701. package/.next/static/chunks/app/api/provider-nodes/route-fe947d4ab19df968.js +0 -1
  702. package/.next/static/chunks/app/api/provider-nodes/validate/route-fe947d4ab19df968.js +0 -1
  703. package/.next/static/chunks/app/api/providers/[id]/models/route-fe947d4ab19df968.js +0 -1
  704. package/.next/static/chunks/app/api/providers/[id]/route-fe947d4ab19df968.js +0 -1
  705. package/.next/static/chunks/app/api/providers/[id]/test/route-fe947d4ab19df968.js +0 -1
  706. package/.next/static/chunks/app/api/providers/[id]/test-models/route-fe947d4ab19df968.js +0 -1
  707. package/.next/static/chunks/app/api/providers/client/route-fe947d4ab19df968.js +0 -1
  708. package/.next/static/chunks/app/api/providers/kilo/free-models/route-fe947d4ab19df968.js +0 -1
  709. package/.next/static/chunks/app/api/providers/route-fe947d4ab19df968.js +0 -1
  710. package/.next/static/chunks/app/api/providers/suggested-models/route-fe947d4ab19df968.js +0 -1
  711. package/.next/static/chunks/app/api/providers/test-batch/route-fe947d4ab19df968.js +0 -1
  712. package/.next/static/chunks/app/api/providers/validate/route-fe947d4ab19df968.js +0 -1
  713. package/.next/static/chunks/app/api/proxy-pools/[id]/route-fe947d4ab19df968.js +0 -1
  714. package/.next/static/chunks/app/api/proxy-pools/[id]/test/route-fe947d4ab19df968.js +0 -1
  715. package/.next/static/chunks/app/api/proxy-pools/cloudflare-deploy/route-fe947d4ab19df968.js +0 -1
  716. package/.next/static/chunks/app/api/proxy-pools/deno-deploy/route-fe947d4ab19df968.js +0 -1
  717. package/.next/static/chunks/app/api/proxy-pools/route-fe947d4ab19df968.js +0 -1
  718. package/.next/static/chunks/app/api/proxy-pools/vercel-deploy/route-fe947d4ab19df968.js +0 -1
  719. package/.next/static/chunks/app/api/pxpipe/health/route-fe947d4ab19df968.js +0 -1
  720. package/.next/static/chunks/app/api/pxpipe/install/route-fe947d4ab19df968.js +0 -1
  721. package/.next/static/chunks/app/api/pxpipe/logs/route-fe947d4ab19df968.js +0 -1
  722. package/.next/static/chunks/app/api/pxpipe/restart/route-fe947d4ab19df968.js +0 -1
  723. package/.next/static/chunks/app/api/pxpipe/start/route-fe947d4ab19df968.js +0 -1
  724. package/.next/static/chunks/app/api/pxpipe/stats/route-fe947d4ab19df968.js +0 -1
  725. package/.next/static/chunks/app/api/pxpipe/status/route-fe947d4ab19df968.js +0 -1
  726. package/.next/static/chunks/app/api/pxpipe/stop/route-fe947d4ab19df968.js +0 -1
  727. package/.next/static/chunks/app/api/settings/database/route-fe947d4ab19df968.js +0 -1
  728. package/.next/static/chunks/app/api/settings/proxy-test/route-fe947d4ab19df968.js +0 -1
  729. package/.next/static/chunks/app/api/settings/require-login/route-fe947d4ab19df968.js +0 -1
  730. package/.next/static/chunks/app/api/settings/route-fe947d4ab19df968.js +0 -1
  731. package/.next/static/chunks/app/api/shutdown/route-fe947d4ab19df968.js +0 -1
  732. package/.next/static/chunks/app/api/tags/route-fe947d4ab19df968.js +0 -1
  733. package/.next/static/chunks/app/api/translator/console-logs/route-fe947d4ab19df968.js +0 -1
  734. package/.next/static/chunks/app/api/translator/console-logs/stream/route-fe947d4ab19df968.js +0 -1
  735. package/.next/static/chunks/app/api/translator/load/route-fe947d4ab19df968.js +0 -1
  736. package/.next/static/chunks/app/api/translator/save/route-fe947d4ab19df968.js +0 -1
  737. package/.next/static/chunks/app/api/translator/send/route-fe947d4ab19df968.js +0 -1
  738. package/.next/static/chunks/app/api/translator/translate/route-fe947d4ab19df968.js +0 -1
  739. package/.next/static/chunks/app/api/tunnel/disable/route-fe947d4ab19df968.js +0 -1
  740. package/.next/static/chunks/app/api/tunnel/enable/route-fe947d4ab19df968.js +0 -1
  741. package/.next/static/chunks/app/api/tunnel/status/route-fe947d4ab19df968.js +0 -1
  742. package/.next/static/chunks/app/api/tunnel/tailscale-check/route-fe947d4ab19df968.js +0 -1
  743. package/.next/static/chunks/app/api/tunnel/tailscale-disable/route-fe947d4ab19df968.js +0 -1
  744. package/.next/static/chunks/app/api/tunnel/tailscale-enable/route-fe947d4ab19df968.js +0 -1
  745. package/.next/static/chunks/app/api/tunnel/tailscale-install/route-fe947d4ab19df968.js +0 -1
  746. package/.next/static/chunks/app/api/usage/[connectionId]/codex-reset-credits/route-fe947d4ab19df968.js +0 -1
  747. package/.next/static/chunks/app/api/usage/[connectionId]/route-fe947d4ab19df968.js +0 -1
  748. package/.next/static/chunks/app/api/usage/chart/route-fe947d4ab19df968.js +0 -1
  749. package/.next/static/chunks/app/api/usage/history/route-fe947d4ab19df968.js +0 -1
  750. package/.next/static/chunks/app/api/usage/logs/route-fe947d4ab19df968.js +0 -1
  751. package/.next/static/chunks/app/api/usage/providers/route-fe947d4ab19df968.js +0 -1
  752. package/.next/static/chunks/app/api/usage/request-details/route-fe947d4ab19df968.js +0 -1
  753. package/.next/static/chunks/app/api/usage/request-logs/route-fe947d4ab19df968.js +0 -1
  754. package/.next/static/chunks/app/api/usage/stats/route-fe947d4ab19df968.js +0 -1
  755. package/.next/static/chunks/app/api/usage/stream/route-fe947d4ab19df968.js +0 -1
  756. package/.next/static/chunks/app/api/v1/api/chat/route-fe947d4ab19df968.js +0 -1
  757. package/.next/static/chunks/app/api/v1/audio/speech/route-fe947d4ab19df968.js +0 -1
  758. package/.next/static/chunks/app/api/v1/audio/transcriptions/route-fe947d4ab19df968.js +0 -1
  759. package/.next/static/chunks/app/api/v1/audio/voices/route-fe947d4ab19df968.js +0 -1
  760. package/.next/static/chunks/app/api/v1/chat/completions/route-fe947d4ab19df968.js +0 -1
  761. package/.next/static/chunks/app/api/v1/embeddings/route-fe947d4ab19df968.js +0 -1
  762. package/.next/static/chunks/app/api/v1/images/generations/route-fe947d4ab19df968.js +0 -1
  763. package/.next/static/chunks/app/api/v1/messages/count_tokens/route-fe947d4ab19df968.js +0 -1
  764. package/.next/static/chunks/app/api/v1/messages/route-fe947d4ab19df968.js +0 -1
  765. package/.next/static/chunks/app/api/v1/models/[...model]/route-fe947d4ab19df968.js +0 -1
  766. package/.next/static/chunks/app/api/v1/models/info/route-fe947d4ab19df968.js +0 -1
  767. package/.next/static/chunks/app/api/v1/models/route-fe947d4ab19df968.js +0 -1
  768. package/.next/static/chunks/app/api/v1/responses/compact/route-fe947d4ab19df968.js +0 -1
  769. package/.next/static/chunks/app/api/v1/responses/route-fe947d4ab19df968.js +0 -1
  770. package/.next/static/chunks/app/api/v1/route-fe947d4ab19df968.js +0 -1
  771. package/.next/static/chunks/app/api/v1/search/route-fe947d4ab19df968.js +0 -1
  772. package/.next/static/chunks/app/api/v1/systemone/route-fe947d4ab19df968.js +0 -1
  773. package/.next/static/chunks/app/api/v1/videos/[id]/route-fe947d4ab19df968.js +0 -1
  774. package/.next/static/chunks/app/api/v1/videos/edits/route-fe947d4ab19df968.js +0 -1
  775. package/.next/static/chunks/app/api/v1/videos/extensions/route-fe947d4ab19df968.js +0 -1
  776. package/.next/static/chunks/app/api/v1/videos/generations/route-fe947d4ab19df968.js +0 -1
  777. package/.next/static/chunks/app/api/v1/web/fetch/route-fe947d4ab19df968.js +0 -1
  778. package/.next/static/chunks/app/api/v1beta/models/[...path]/route-fe947d4ab19df968.js +0 -1
  779. package/.next/static/chunks/app/api/v1beta/models/route-fe947d4ab19df968.js +0 -1
  780. package/.next/static/chunks/app/api/version/route-fe947d4ab19df968.js +0 -1
  781. package/.next/static/chunks/app/api/version/shutdown/route-fe947d4ab19df968.js +0 -1
  782. package/.next/static/chunks/app/api/version/update/route-fe947d4ab19df968.js +0 -1
  783. package/.next/static/chunks/app/manifest.webmanifest/route-fe947d4ab19df968.js +0 -1
  784. package/.next/static/chunks/app/page-fe947d4ab19df968.js +0 -1
  785. package/.next/static/chunks/next/dist/client/components/builtin/app-error-fe947d4ab19df968.js +0 -1
  786. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-fe947d4ab19df968.js +0 -1
  787. package/.next/static/chunks/next/dist/client/components/builtin/not-found-fe947d4ab19df968.js +0 -1
  788. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-fe947d4ab19df968.js +0 -1
  789. package/.next/static/css/7698ede81d1862e2.css +0 -1
  790. /package/.next/static/{P0IikrdjxpmTneD33YPWQ → iz7psrsEuHZGPvj7rbSWc}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[208],{949:(e,t,a)=>{a.d(t,{default:()=>u});var r=a(29798),s=a(58913),n=a(15814),i=a(66454),o=a(51780),l=a(49787),d=a(1352);let c=e=>({en:{name:"English",flag:"\uD83C\uDDFA\uD83C\uDDF8"},fa:{name:"فارسی",flag:"\uD83C\uDDEE\uD83C\uDDF7"}})[e]||{name:e,flag:"\uD83C\uDF10"};function u({className:e="",isOpen:t,onClose:a,hideTrigger:m=!1}){let[x,p]=(0,n.useState)("en"),[h,g]=(0,n.useState)(!1),[f,v]=(0,n.useState)(!1),b="boolean"==typeof t,j=b?t:f,y=(e,t=x)=>{b?!e&&a&&a(t):v(e)};(0,n.useEffect)(()=>{p(function(){if("u"<typeof document)return"en";let e=document.cookie.split(";").find(e=>e.trim().startsWith(`${i.CL}=`)),t=e?decodeURIComponent(e.split("=")[1]):"en";return(0,i.QC)(t)}())},[]);let k=async e=>{if(e!==x&&!h){g(!0);try{await fetch("/api/locale",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({locale:e})}),await (0,o.wn)(),p(e),y(!1,e)}catch(e){console.error("Failed to set locale:",e)}finally{g(!1)}}};return(0,r.jsxs)("div",{className:e,children:[!m&&(0,r.jsxs)(d.m_,{children:[(0,r.jsx)(d.k$,{asChild:!0,children:(0,r.jsxs)("button",{onClick:()=>y(!j),disabled:h,className:"flex items-center gap-2 px-3 py-2 rounded-lg text-muted-foreground hover:text-foreground hover:bg-card/60 transition-colors","data-i18n-skip":"true",children:[(0,r.jsx)(s.default,{name:"language",className:"text-[20px]"}),(0,r.jsx)("span",{className:"text-sm font-medium",children:c(x).name}),(0,r.jsx)("span",{className:"text-lg",children:c(x).flag})]})}),(0,r.jsx)(d.ZI,{children:"Language"})]}),(0,r.jsx)(l.lG,{open:j,onOpenChange:e=>!e&&y(!1),children:(0,r.jsxs)(l.Cf,{className:"sm:max-w-2xl","data-i18n-skip":"true",children:[(0,r.jsx)(l.c7,{children:(0,r.jsx)(l.L3,{children:"Select Language"})}),(0,r.jsx)("div",{className:"p-6 overflow-y-auto",children:(0,r.jsx)("div",{className:"grid grid-cols-[repeat(auto-fill,minmax(100px,1fr))] gap-2",children:i.YZ.map(e=>{let t=x===e,a=c(e);return(0,r.jsxs)("button",{onClick:()=>k(e),disabled:h,className:`flex flex-col items-center justify-start gap-1 px-2 py-3 rounded-lg text-xs font-medium transition-colors w-full ${t?"bg-primary/15 text-primary ring-2 ring-primary":"text-foreground hover:bg-black/5 dark:hover:bg-white/5"} ${h?"opacity-70 cursor-wait":""}`,title:a.name,children:[(0,r.jsx)("span",{className:"text-2xl",children:a.flag}),(0,r.jsx)("span",{className:"text-center leading-tight line-clamp-2 h-8 flex items-center",children:a.name}),t&&(0,r.jsx)(s.default,{name:"check",className:"text-sm"})]},e)})})})]})})]})}},1279:(e,t,a)=>{a.d(t,{default:()=>c});var r=a(29798),s=a(50141),n=a.n(s),i=a(51660);let o=[{label:"Features",href:"#features"},{label:"Pricing",href:"#pricing"},{label:"Changelog",href:"#"}],l=[{label:"Documentation",href:"#"},{label:"API Reference",href:"#"},{label:"Help Center",href:"#"}],d=[{label:"About",href:"#"},{label:"Blog",href:"#"},{label:"Contact",href:"#"}];function c(e){return(0,r.jsx)("footer",{className:"bg-background border-t border-border pt-16 pb-12",children:(0,r.jsxs)("div",{className:"container mx-auto px-4 sm:px-6 lg:px-8",children:[(0,r.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 lg:grid-cols-5 gap-10 mb-12",children:[(0,r.jsxs)("div",{className:"col-span-2 lg:col-span-2",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,r.jsx)("div",{className:"size-6 text-primary",children:(0,r.jsx)("svg",{className:"w-full h-full",fill:"currentColor",viewBox:"0 0 48 48",children:(0,r.jsx)("path",{clipRule:"evenodd",d:"M12.0799 24L4 19.2479L9.95537 8.75216L18.04 13.4961L18.0446 4H29.9554L29.96 13.4961L38.0446 8.75216L44 19.2479L35.92 24L44 28.7521L38.0446 39.2479L29.96 34.5039L29.9554 44H18.0446L18.04 34.5039L9.95537 39.2479L4 28.7521L12.0799 24Z",fillRule:"evenodd"})})}),(0,r.jsx)("span",{className:"text-xl font-bold text-foreground",children:i.vQ.name})]}),(0,r.jsx)("p",{className:"text-muted-foreground mb-6 max-w-sm font-light",children:"The unified interface for modern AI infrastructure. Secure, observable, and scalable."}),(0,r.jsxs)("div",{className:"flex gap-4",children:[(0,r.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"Twitter",children:(0,r.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{d:"M22.46 6c-.77.35-1.6.58-2.46.69.88-.53 1.56-1.37 1.88-2.38-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29 0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15 0 1.49.75 2.81 1.91 3.56-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07 4.28 4.28 0 0 0 4 2.98 8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21 16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56.84-.6 1.56-1.36 2.14-2.23z"})})}),(0,r.jsx)("a",{href:"#",className:"text-gray-400 hover:text-primary transition-colors","aria-label":"GitHub",children:(0,r.jsx)("svg",{className:"w-5 h-5",fill:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{d:"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0 1 12 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0 0 22 12.017C22 6.484 17.522 2 12 2z"})})})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-foreground mb-4",children:"Product"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-muted-foreground font-light",children:o.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(n(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-foreground mb-4",children:"Resources"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-muted-foreground font-light",children:l.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(n(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("h4",{className:"font-semibold text-foreground mb-4",children:"Company"}),(0,r.jsx)("ul",{className:"flex flex-col gap-3 text-sm text-muted-foreground font-light",children:d.map(e=>(0,r.jsx)("li",{children:(0,r.jsx)(n(),{href:e.href,className:"hover:text-primary transition-colors",children:e.label})},e.label))})]})]}),(0,r.jsxs)("div",{className:"border-t border-border pt-8 flex flex-col md:flex-row justify-between items-center gap-4",children:[(0,r.jsxs)("p",{className:"text-sm text-muted-foreground",children:["\xa9 ",new Date().getFullYear()," ",i.vQ.name," Inc. All rights reserved."]}),(0,r.jsxs)("div",{className:"flex gap-6 text-sm text-muted-foreground",children:[(0,r.jsx)(n(),{href:"#",className:"hover:text-primary transition-colors",children:"Privacy Policy"}),(0,r.jsx)(n(),{href:"#",className:"hover:text-primary transition-colors",children:"Terms of Service"})]})]})]})})}},4165:(e,t,a)=>{a.d(t,{default:()=>J});var r=a(29798),s=a(58913),n=a(15814),i=a(70782),o=a(13794),l=a(53784),d=a(75669),c=a(45111),u=a(70296),m=a(29575),x=a(43276);let p=e=>new Intl.NumberFormat().format(e||0);function h({stats:e}){let t;return(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 gap-3 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-5 sm:gap-4",children:[(0,r.jsx)(d.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,r.jsxs)(d.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,r.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Total Requests"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold",children:p(e.totalRequests)})]})}),(0,r.jsx)(d.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,r.jsxs)(d.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,r.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Total Input Tokens"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold",children:p(e.totalPromptTokens)})]})}),(0,r.jsx)(d.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,r.jsxs)(d.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,r.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Cached Tokens"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold",children:p(e.totalCachedTokens)})]})}),(0,r.jsx)(d.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,r.jsxs)(d.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,r.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Output Tokens"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold",children:p(e.totalCompletionTokens)})]})}),(0,r.jsx)(d.Zp,{className:"flex min-w-0 flex-col gap-1 px-4 py-3",children:(0,r.jsxs)(d.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,r.jsx)("span",{className:"text-muted-foreground text-sm uppercase font-semibold",children:"Estimated Cost"}),(0,r.jsx)("span",{className:"truncate text-2xl font-bold",children:(t=e.totalCost,`$${(t||0).toFixed(2)}`)})]})})]})}let g=e=>new Intl.NumberFormat().format(e||0),f=e=>`$${(e||0).toFixed(2)}`;function v(e){if(!e)return"Never";let t=Math.floor((Date.now()-new Date(e))/6e4);return t<1?"Just now":t<60?`${t}m ago`:t<1440?`${Math.floor(t/60)}h ago`:new Date(e).toLocaleDateString()}function b({field:e,currentSort:t,currentOrder:a}){return t!==e?(0,r.jsx)("span",{className:"ml-1 opacity-20",children:"↕"}):(0,r.jsx)("span",{className:"ml-1",children:"asc"===a?"↑":"↓"})}function j({item:e,viewMode:t,isSummary:a=!1}){return"tokens"===t?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,r.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-primary/10 px-1.5 py-1 text-center text-[11px] font-medium text-primary",children:a&&void 0===e.promptTokens?"—":g(e.promptTokens)})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,r.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-muted px-1.5 py-1 text-center text-[11px] font-medium text-muted-foreground",children:e.cachedTokens?g(e.cachedTokens):"—"})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,r.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-emerald-500/10 px-1.5 py-1 text-center text-[11px] font-medium text-emerald-600",children:a&&void 0===e.completionTokens?"—":g(e.completionTokens)})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right font-medium tabular-nums text-xs",children:g(e.totalTokens)})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,r.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-primary/10 px-1.5 py-1 text-center text-[11px] font-medium text-primary",children:a&&void 0===e.inputCost?"—":f(e.inputCost)})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,r.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-muted px-1.5 py-1 text-center text-[11px] font-medium text-muted-foreground",children:e.cachedCost?f(e.cachedCost):"—"})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right tabular-nums",children:(0,r.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-emerald-500/10 px-1.5 py-1 text-center text-[11px] font-medium text-emerald-600",children:a&&void 0===e.outputCost?"—":f(e.outputCost)})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right",children:(0,r.jsx)("span",{className:"inline-flex min-w-16 items-center justify-center rounded-md bg-amber-500/10 px-1.5 py-1 text-center text-[11px] font-medium text-amber-600",children:f(e.totalCost||e.cost)})})]})}function y({title:e,columns:t,groupedData:a,tableType:i,sortBy:o,sortOrder:l,onToggleSort:c,viewMode:u,storageKey:m,renderDetailCells:x,renderSummaryCells:p,emptyMessage:h}){let[g,f]=(0,n.useState)(new Set);(0,n.useEffect)(()=>{try{let e=localStorage.getItem(m);e&&f(new Set(JSON.parse(e)))}catch(e){console.error(`Failed to load ${m}:`,e)}},[m]),(0,n.useEffect)(()=>{try{localStorage.setItem(m,JSON.stringify([...g]))}catch(e){console.error(`Failed to save ${m}:`,e)}},[g,m]);let v=(0,n.useCallback)(e=>{f(t=>{let a=new Set(t);return a.has(e)?a.delete(e):a.add(e),a})},[]),k=(0,n.useMemo)(()=>"tokens"===u?[{field:"promptTokens",label:"Input Tokens"},{field:"cachedTokens",label:"Cached"},{field:"completionTokens",label:"Output Tokens"},{field:"totalTokens",label:"Total Tokens"}]:[{field:"promptTokens",label:"Input Cost"},{field:"cachedCost",label:"Cached Cost"},{field:"completionTokens",label:"Output Cost"},{field:"cost",label:"Total Cost"}],[u]),w=t.length+k.length;return(0,r.jsxs)(d.Zp,{className:"flex min-w-0 flex-col overflow-hidden",style:{paddingBlock:0,gap:0},children:[(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-2 border-b border-border bg-card/80 px-4 py-3 backdrop-blur",children:[(0,r.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:e}),(0,r.jsxs)("span",{className:"ml-auto text-xs text-muted-foreground",children:[a.length," groups"]})]}),(0,r.jsx)(d.Wu,{className:"flex min-h-0 flex-1 flex-col p-0",children:(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)("table",{className:"w-full text-sm text-left",children:[(0,r.jsx)("thead",{className:"border-b border-border/60 text-muted-foreground",children:(0,r.jsxs)("tr",{children:[t.map(e=>(0,r.jsxs)("th",{className:`px-4 py-2 text-[11px] font-semibold uppercase tracking-wide cursor-pointer hover:bg-accent/60 ${"right"===e.align?"text-right":""}`,onClick:()=>c(i,e.field),children:[e.label," ",(0,r.jsx)(b,{field:e.field,currentSort:o,currentOrder:l})]},e.field)),k.map(e=>(0,r.jsxs)("th",{className:"px-4 py-2 text-right text-[11px] font-semibold uppercase tracking-wide cursor-pointer hover:bg-accent/60",onClick:()=>c(i,e.field),children:[e.label," ",(0,r.jsx)(b,{field:e.field,currentSort:o,currentOrder:l})]},e.field))]})}),(0,r.jsxs)("tbody",{className:"divide-y divide-border/40",children:[a.map(e=>(0,r.jsxs)(n.Fragment,{children:[(0,r.jsxs)("tr",{className:"group-summary cursor-pointer transition-colors last:border-b-0 hover:bg-accent/60",onClick:()=>v(e.groupKey),children:[(0,r.jsx)("td",{className:"px-4 py-2.5",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(s.default,{name:"chevron_right",className:`text-[18px] text-muted-foreground transition-transform ${g.has(e.groupKey)?"rotate-90":""}`}),(0,r.jsx)("span",{className:`truncate font-mono text-xs font-medium transition-colors ${e.summary.pending>0?"text-primary":""}`,children:e.groupKey})]})}),p(e),(0,r.jsx)(j,{item:e.summary,viewMode:u,isSummary:!0})]}),g.has(e.groupKey)&&e.items.map(e=>(0,r.jsxs)("tr",{className:"group-detail bg-muted/20 transition-colors last:border-b-0 hover:bg-accent/60",children:[x(e),(0,r.jsx)(j,{item:e,viewMode:u})]},`detail-${e.key}`))]},e.groupKey)),0===a.length&&(0,r.jsx)("tr",{children:(0,r.jsx)("td",{colSpan:w,className:"px-4 py-2.5",children:(0,r.jsxs)("div",{className:"flex flex-col items-center justify-center gap-2 py-8 text-muted-foreground",children:[(0,r.jsx)(s.default,{name:"history",className:"text-2xl opacity-50"}),(0,r.jsx)("p",{className:"text-xs",children:h})]})})})]})]})})})]})}var k=a(51519),w=a(92348),N=a(20884),C=a(31009),S=a(2401),O=a(726),F=a(94829),W=a(43665),E=a(99118);let $=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:String(e||0),I=e=>`$${(e||0).toFixed(4)}`;function z({period:e="7d"}){let[t,a]=(0,n.useState)([]),[s,i]=(0,n.useState)(!0),[o,l]=(0,n.useState)("tokens"),c=(0,n.useCallback)(async()=>{i(!0);try{let t=await fetch(`/api/usage/chart?period=${e}`);if(t.ok){let e=await t.json();a(e)}}catch(e){console.error("Failed to fetch chart data:",e)}finally{i(!1)}},[e]);(0,n.useEffect)(()=>{c()},[c]);let u=t.some(e=>e.tokens>0||e.cost>0);return(0,r.jsx)(d.Zp,{className:"flex min-w-0 flex-col gap-3 p-3 sm:p-4",children:(0,r.jsxs)(d.Wu,{className:"flex min-w-0 flex-col gap-3 px-0 py-0",children:[(0,r.jsxs)("div",{className:"grid w-full grid-cols-2 items-center gap-1 rounded-lg border border-border bg-muted p-1 sm:w-auto sm:self-start",children:[(0,r.jsx)("button",{onClick:()=>l("tokens"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"tokens"===o?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:"Tokens"}),(0,r.jsx)("button",{onClick:()=>l("cost"),className:`px-3 py-1 rounded-md text-sm font-medium transition-colors ${"cost"===o?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:text-foreground hover:bg-muted"}`,children:"Cost"})]}),s?(0,r.jsxs)("div",{className:"flex flex-col gap-2","aria-hidden":!0,children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(E.E,{className:"h-3 w-24"}),(0,r.jsx)(E.E,{className:"h-3 w-16"})]}),(0,r.jsx)(E.E,{className:"h-[220px] w-full rounded-lg"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(E.E,{className:"h-3 w-12"}),(0,r.jsx)(E.E,{className:"h-3 w-12"}),(0,r.jsx)(E.E,{className:"h-3 w-12"})]})]}):u?(0,r.jsx)(w.u,{width:"100%",height:220,children:(0,r.jsxs)(N.Q,{data:t,margin:{top:4,right:8,left:0,bottom:0},children:[(0,r.jsxs)("defs",{children:[(0,r.jsxs)("linearGradient",{id:"gradTokens",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,r.jsx)("stop",{offset:"5%",stopColor:"#6366f1",stopOpacity:.25}),(0,r.jsx)("stop",{offset:"95%",stopColor:"#6366f1",stopOpacity:0})]}),(0,r.jsxs)("linearGradient",{id:"gradCost",x1:"0",y1:"0",x2:"0",y2:"1",children:[(0,r.jsx)("stop",{offset:"5%",stopColor:"#f59e0b",stopOpacity:.25}),(0,r.jsx)("stop",{offset:"95%",stopColor:"#f59e0b",stopOpacity:0})]})]}),(0,r.jsx)(C.d,{strokeDasharray:"3 3",strokeOpacity:.1}),(0,r.jsx)(S.W,{dataKey:"label",tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,interval:"preserveStartEnd"}),(0,r.jsx)(O.h,{tick:{fontSize:10,fill:"currentColor",fillOpacity:.5},tickLine:!1,axisLine:!1,tickFormatter:"tokens"===o?$:I,width:50}),(0,r.jsx)(F.m,{contentStyle:{backgroundColor:"var(--background)",border:"1px solid var(--border)",borderRadius:"8px",fontSize:"12px"},formatter:(e,t)=>"tokens"===t?[$(e),"Tokens"]:[I(e),"Cost"]}),"tokens"===o?(0,r.jsx)(W.Gk,{type:"monotone",dataKey:"tokens",stroke:"#6366f1",strokeWidth:2,fill:"url(#gradTokens)",dot:!1,activeDot:{r:4}}):(0,r.jsx)(W.Gk,{type:"monotone",dataKey:"cost",stroke:"#f59e0b",strokeWidth:2,fill:"url(#gradCost)",dot:!1,activeDot:{r:4}})]})}):(0,r.jsx)("div",{className:"h-48 flex items-center justify-center text-muted-foreground text-sm",children:"No data for this period"})]})})}function P(e){let t=o.Q2[e];return!t?.serviceKinds||t.serviceKinds.includes("llm")}let A=(0,k.default)(()=>Promise.all([a.e(670),a.e(6381),a.e(7822),a.e(4899)]).then(a.bind(a,47280)),{loadableGenerated:{webpack:()=>[47280]},ssr:!1});function _({timestamp:e}){let t,[,a]=(0,n.useState)(0);return(0,n.useEffect)(()=>{let e=setInterval(()=>a(e=>e+1),1e3);return()=>clearInterval(e)},[]),(0,r.jsx)(r.Fragment,{children:(t=Math.floor((Date.now()-new Date(e).getTime())/1e3))<60?`${t}s ago`:t<3600?`${Math.floor(t/60)}m ago`:t<86400?`${Math.floor(t/3600)}h ago`:`${Math.floor(t/86400)}d ago`})}function T({requests:e=[],providerNames:t={}}){return(0,r.jsxs)(d.Zp,{className:"flex min-w-0 flex-col overflow-hidden",style:{height:480,paddingBlock:0,gap:0},children:[(0,r.jsxs)("div",{className:"sticky top-0 z-10 flex shrink-0 items-center gap-2 border-b border-border bg-card/80 px-4 py-3 backdrop-blur",children:[(0,r.jsxs)("span",{className:"relative flex h-2 w-2",children:[(0,r.jsx)("span",{className:"absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-500 opacity-60"}),(0,r.jsx)("span",{className:"relative inline-flex h-2 w-2 rounded-full bg-emerald-500"})]}),(0,r.jsx)("span",{className:"text-xs font-semibold uppercase tracking-wide text-muted-foreground",children:"Recent Requests"}),(0,r.jsxs)(l.E,{variant:"secondary",className:"ml-auto text-xs",children:["last ",e.length," requests"]})]}),(0,r.jsxs)("div",{className:"grid shrink-0 grid-cols-[8px_minmax(0,1fr)_minmax(0,88px)_64px_64px_52px] items-center gap-2 border-b border-border/60 px-4 py-2",children:[(0,r.jsx)("span",{}),(0,r.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Model"}),(0,r.jsx)("span",{className:"text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Provider"}),(0,r.jsx)("span",{className:"text-center text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Input ↑"}),(0,r.jsx)("span",{className:"text-center text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"Output ↓"}),(0,r.jsx)("span",{className:"text-right text-[11px] font-semibold uppercase tracking-wide text-muted-foreground",children:"When"})]}),(0,r.jsx)(d.Wu,{className:"flex min-h-0 flex-1 flex-col p-0",children:e.length?(0,r.jsx)("div",{className:"flex min-h-0 flex-1 flex-col overflow-y-auto",children:e.map((e,a)=>{let s=!e.status||"ok"===e.status||"success"===e.status;return(0,r.jsxs)("div",{className:"grid grid-cols-[8px_minmax(0,1fr)_minmax(0,88px)_64px_64px_52px] items-center gap-2 border-b border-border/40 px-4 py-2.5 transition-colors last:border-b-0 hover:bg-accent/60",children:[(0,r.jsx)("span",{className:`h-2 w-2 shrink-0 rounded-full ${s?"bg-emerald-500 shadow-[0_0_6px_rgba(16,185,129,0.8)]":"bg-destructive shadow-[0_0_6px_rgba(239,68,68,0.8)]"}`}),(0,r.jsx)("span",{className:"truncate font-mono text-xs font-medium",children:e.model}),(0,r.jsx)(l.E,{variant:"ghost",className:"justify-start truncate px-1.5",children:t[e.provider]||e.provider||"—"}),(0,r.jsx)("span",{className:"flex w-full items-center justify-center rounded-md bg-primary/10 px-1.5 py-1 text-center text-[11px] font-medium text-primary tabular-nums",children:g(e.promptTokens)}),(0,r.jsx)("span",{className:"flex w-full items-center justify-center rounded-md bg-emerald-500/10 px-1.5 py-1 text-center text-[11px] font-medium text-emerald-600 tabular-nums",children:g(e.completionTokens)}),(0,r.jsx)("span",{className:"text-right text-[11px] whitespace-nowrap text-muted-foreground",children:(0,r.jsx)(_,{timestamp:e.timestamp})})]},a)})}):(0,r.jsxs)("div",{className:"flex flex-1 flex-col items-center justify-center gap-2 text-muted-foreground",children:[(0,r.jsx)(s.default,{name:"history",className:"text-2xl opacity-50"}),(0,r.jsx)("p",{className:"text-xs",children:"No requests yet."})]})})]})}function D(e,t={},a,r){return Object.entries(e||{}).map(([e,a])=>{let r=(a.promptTokens||0)+(a.completionTokens||0),s=a.cost||0,n=a.cachedTokens||0,i=Math.max(0,(a.promptTokens||0)-n),o=r>0?(a.completionTokens||0)*(s/r):0;return{...a,key:e,totalTokens:r,totalCost:s,inputCost:r>0?s/r*i:0,cachedCost:r>0?s/r*n:0,outputCost:o,pending:t[e]||0}}).sort((e,t)=>{let s=e[a],n=t[a];return("string"==typeof s&&(s=s.toLowerCase()),"string"==typeof n&&(n=n.toLowerCase()),s<n)?"asc"===r?-1:1:s>n?"asc"===r?1:-1:0})}function L(e,t){if(!Array.isArray(e))return[];let a={};return e.forEach(e=>{let r=function(e,t){switch(t){case"rawModel":return e.rawModel||"Unknown Model";case"accountName":return e.accountName||`Account ${e.connectionId?.slice(0,8)}...`||"Unknown Account";case"keyName":return e.keyName||"Unknown Key";case"endpoint":return e.endpoint||"Unknown Endpoint";default:return e[t]||"Unknown"}}(e,t);a[r]||(a[r]={groupKey:r,summary:{requests:0,promptTokens:0,completionTokens:0,cachedTokens:0,totalTokens:0,cost:0,inputCost:0,cachedCost:0,outputCost:0,lastUsed:null,pending:0},items:[]});let s=a[r].summary;s.requests+=e.requests||0,s.promptTokens+=e.promptTokens||0,s.completionTokens+=e.completionTokens||0,s.cachedTokens+=e.cachedTokens||0,s.totalTokens+=e.totalTokens||0,s.cost+=e.cost||0,s.inputCost+=e.inputCost||0,s.cachedCost+=e.cachedCost||0,s.outputCost+=e.outputCost||0,s.pending+=e.pending||0,e.lastUsed&&(!s.lastUsed||new Date(e.lastUsed)>new Date(s.lastUsed))&&(s.lastUsed=e.lastUsed),a[r].items.push(e)}),Object.values(a)}let U=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],M=[{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"accountName",label:"Account"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],q=[{field:"keyName",label:"API Key Name"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],R=[{field:"endpoint",label:"Endpoint"},{field:"rawModel",label:"Model"},{field:"provider",label:"Provider"},{field:"requests",label:"Requests",align:"right"},{field:"lastUsed",label:"Last Used",align:"right"}],K=[{value:"model",label:"Usage by Model"},{value:"account",label:"Usage by Account"},{value:"apiKey",label:"Usage by API Key"},{value:"endpoint",label:"Usage by Endpoint"}],V=[{value:"today",label:"Today"},{value:"24h",label:"24h"},{value:"7d",label:"7D"},{value:"30d",label:"30D"},{value:"60d",label:"60D"}];function J({period:e,setPeriod:t,hidePeriodSelector:a=!1}={}){let d=(0,i.useRouter)(),p=(0,i.useSearchParams)(),f=p.get("sortBy")||"rawModel",b=p.get("sortOrder")||"asc",[j,k]=(0,n.useState)(null),[w,N]=(0,n.useState)(!0),[C,S]=(0,n.useState)(!1),[O,F]=(0,n.useState)("model"),[W,E]=(0,n.useState)("costs"),[$,I]=(0,n.useState)([]),[_,Z]=(0,n.useState)({}),[B,G]=(0,n.useState)("today"),Q=(0,n.useRef)(!0),H=(0,n.useRef)(!1),X=e??B,Y=t??G;(0,n.useEffect)(()=>{Promise.all([fetch("/api/providers").then(e=>e.ok?e.json():null),fetch("/api/provider-nodes").then(e=>e.ok?e.json():null)]).then(([e,t])=>{let a={};for(let e of t?.nodes||[])a[e.id]=e.name;let r=new Set;I([...(e?.connections||[]).filter(e=>!(!1===e.isActive||!P(e.provider)||r.has(e.provider))&&(r.add(e.provider),!0)).map(e=>({...e,nodeName:a[e.provider]||null})),...Object.values(o.IS).filter(e=>e.noAuth&&!r.has(e.id)&&P(e.id)).map(e=>({provider:e.id,name:e.name}))]),Z(a)}).catch(()=>{})},[]),(0,n.useEffect)(()=>{Q.current?(Q.current=!1,N(!0)):S(!0),fetch(`/api/usage/stats?period=${X}`).then(e=>e.ok?e.json():null).then(e=>{e&&(H.current=!0,k(t=>({...t,...e})))}).catch(()=>{}).finally(()=>{N(!1),S(!1)})},[X]),(0,n.useEffect)(()=>{let e=new EventSource("/api/usage/stream");return e.onmessage=e=>{try{let t=JSON.parse(e.data);k(e=>e?{...e,activeRequests:t.activeRequests,recentRequests:t.recentRequests,errorProvider:t.errorProvider,pending:t.pending}:e),H.current&&N(!1)}catch(e){console.error("[SSE CLIENT] parse error:",e)}},e.onerror=()=>N(!1),()=>e.close()},[]);let ee=(0,n.useCallback)((e,t)=>{let a=new URLSearchParams(p.toString());a.get("sortBy")===t?a.set("sortOrder","asc"===a.get("sortOrder")?"desc":"asc"):(a.set("sortBy",t),a.set("sortOrder","asc")),d.replace(`?${a.toString()}`,{scroll:!1})},[p,d]),et=(0,n.useMemo)(()=>{if(!j)return null;switch(O){case"model":{let e=j.pending?.byModel||{};return{columns:U,groupedData:L(D(j.byModel,e,f,b),"rawModel"),storageKey:"usage-stats:expanded-models",emptyMessage:"No usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:g(e.summary.requests)}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:v(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-4 py-2.5 truncate font-mono text-xs font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-4 py-2.5",children:(0,r.jsx)(l.E,{variant:e.pending>0?"default":"ghost",className:"justify-start truncate px-1.5",children:e.provider})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:g(e.requests)}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:v(e.lastUsed)})]})}}case"account":{let e={};return j?.pending?.byAccount&&Object.entries(j.byAccount||{}).forEach(([t,a])=>{let r=j.pending.byAccount[a.connectionId];if(r){let s=a.provider?`${a.rawModel} (${a.provider})`:a.rawModel;e[t]=r[s]||0}}),{columns:M,groupedData:L(D(j.byAccount,e,f,b),"accountName"),storageKey:"usage-stats:expanded-accounts",emptyMessage:"No account-specific usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:g(e.summary.requests)}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:v(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:`px-4 py-2.5 truncate text-xs font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.accountName||`Account ${e.connectionId?.slice(0,8)}...`}),(0,r.jsx)("td",{className:`px-4 py-2.5 truncate font-mono text-xs font-medium transition-colors ${e.pending>0?"text-primary":""}`,children:e.rawModel}),(0,r.jsx)("td",{className:"px-4 py-2.5",children:(0,r.jsx)(l.E,{variant:e.pending>0?"default":"ghost",className:"justify-start truncate px-1.5",children:e.provider})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:g(e.requests)}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:v(e.lastUsed)})]})}}case"apiKey":return{columns:q,groupedData:L(D(j.byApiKey,{},f,b),"keyName"),storageKey:"usage-stats:expanded-apikeys",emptyMessage:"No API key usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:g(e.summary.requests)}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:v(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-4 py-2.5 truncate text-xs font-medium",children:e.keyName}),(0,r.jsx)("td",{className:"px-4 py-2.5 truncate font-mono text-xs",children:e.rawModel}),(0,r.jsx)("td",{className:"px-4 py-2.5",children:(0,r.jsx)(l.E,{variant:"ghost",className:"justify-start truncate px-1.5",children:e.provider})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:g(e.requests)}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:v(e.lastUsed)})]})};default:return{columns:R,groupedData:L(D(j.byEndpoint,{},f,b),"endpoint"),storageKey:"usage-stats:expanded-endpoints",emptyMessage:"No endpoint usage recorded yet.",renderSummaryCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-muted-foreground text-xs",children:"—"}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:g(e.summary.requests)}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:v(e.summary.lastUsed)})]}),renderDetailCells:e=>(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("td",{className:"px-4 py-2.5 truncate font-mono text-xs font-medium",children:e.endpoint}),(0,r.jsx)("td",{className:"px-4 py-2.5 truncate font-mono text-xs",children:e.rawModel}),(0,r.jsx)("td",{className:"px-4 py-2.5",children:(0,r.jsx)(l.E,{variant:"ghost",className:"justify-start truncate px-1.5",children:e.provider})}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-xs tabular-nums",children:g(e.requests)}),(0,r.jsx)("td",{className:"px-4 py-2.5 text-right text-muted-foreground whitespace-nowrap text-[11px]",children:v(e.lastUsed)})]})}}},[j,O,f,b]);if(!j&&!w)return(0,r.jsx)("div",{className:"text-muted-foreground",children:"Failed to load usage statistics."});let ea=(0,r.jsxs)(m.CardGrid,{variant:"stat",children:[(0,r.jsx)(x.StatCardSkeleton,{}),(0,r.jsx)(x.StatCardSkeleton,{}),(0,r.jsx)(x.StatCardSkeleton,{}),(0,r.jsx)(x.StatCardSkeleton,{}),(0,r.jsx)(x.StatCardSkeleton,{})]}),er=(0,r.jsx)("div",{className:"flex items-center justify-center py-12 text-muted-foreground",children:(0,r.jsx)(s.default,{name:"progress_activity",className:"text-[32px] animate-spin"})});return(0,r.jsxs)("div",{className:"flex min-w-0 flex-col gap-6",children:[!a&&(0,r.jsxs)("div",{className:"flex w-full items-center gap-2 sm:w-auto sm:self-end",children:[(0,r.jsx)("div",{className:"grid flex-1 grid-cols-5 items-center gap-1 rounded-lg border border-border bg-muted p-1 sm:flex sm:flex-none",children:V.map(e=>(0,r.jsx)("button",{onClick:()=>Y(e.value),disabled:C,className:`rounded-md px-3 py-1 text-sm font-medium transition-colors ${X===e.value?"bg-primary text-primary-foreground shadow-sm":"text-muted-foreground hover:bg-muted hover:text-foreground"}`,children:e.label},e.value))}),C&&(0,r.jsx)(s.default,{name:"progress_activity",className:"text-[16px] text-muted-foreground animate-spin"})]}),w?ea:(0,r.jsx)(h,{stats:j}),w?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(x.PanelSkeleton,{}),(0,r.jsx)(x.PanelSkeleton,{})]}):(0,r.jsxs)("div",{className:"grid min-w-0 grid-cols-1 items-stretch gap-3 lg:grid-cols-[minmax(0,1fr)_minmax(0,1fr)]",children:[(0,r.jsx)(A,{providers:$,activeRequests:j.activeRequests||[],lastProvider:j.recentRequests?.[0]?.provider||"",errorProvider:j.errorProvider||""}),(0,r.jsx)(T,{requests:j.recentRequests||[],providerNames:_})]}),w?(0,r.jsx)(x.PanelSkeleton,{}):(0,r.jsx)(z,{period:X}),(0,r.jsxs)("div",{className:"flex min-w-0 flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsx)(u.default,{options:[{value:"costs",label:"Costs"},{value:"tokens",label:"Tokens"}],value:W,onChange:E,size:"sm",className:"w-full sm:w-auto"}),(0,r.jsxs)(c.l6,{value:O,onValueChange:F,children:[(0,r.jsx)(c.bq,{className:"w-full sm:w-50",children:(0,r.jsx)(c.yv,{})}),(0,r.jsx)(c.gC,{children:K.map(e=>(0,r.jsx)(c.eb,{value:e.value,children:e.label},e.value))})]})]}),w?er:et&&(0,r.jsx)(y,{title:K.find(e=>e.value===O)?.label||"Usage",columns:et.columns,groupedData:et.groupedData,tableType:O,sortBy:f,sortOrder:b,onToggleSort:ee,viewMode:W,storageKey:et.storageKey,renderSummaryCells:et.renderSummaryCells,renderDetailCells:et.renderDetailCells,emptyMessage:et.emptyMessage})]})]})}},5258:(e,t,a)=>{a.d(t,{default:()=>l});var r=a(29798),s=a(58913),n=a(15814),i=a(3537),o=a(7896);function l({isOpen:e,onClose:t,onAdd:a,addedNames:d=[]}){let[c,u]=(0,n.useState)([]),[m,x]=(0,n.useState)(!1),[p,h]=(0,n.useState)(""),[g,f]=(0,n.useState)("all"),[v,b]=(0,n.useState)(null),[j,y]=(0,n.useState)(null),[k,w]=(0,n.useState)({}),[N,C]=(0,n.useState)({}),[S,O]=(0,n.useState)({});(0,n.useEffect)(()=>{!e||c.length>0||(x(!0),fetch("/api/cli-tools/cowork-mcp-registry").then(e=>e.json()).then(e=>{e.error?b(e.error):u(e.servers||[])}).catch(e=>b(e.message)).finally(()=>x(!1)))},[e]);let F=(0,n.useMemo)(()=>new Set(d),[d]),W=(0,n.useMemo)(()=>{let e=p.trim().toLowerCase();return c.filter(t=>("authless"!==g||!t.oauth)&&("oauth"!==g||!!t.oauth)&&(!e||(t.title||"").toLowerCase().includes(e)||(t.description||"").toLowerCase().includes(e)||(t.name||"").toLowerCase().includes(e)))},[c,p,g]),E=async e=>{if(!k[e.url]){C(t=>({...t,[e.url]:!0}));try{let t=await fetch("/api/cli-tools/cowork-mcp-tools",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({url:e.url})}),a=await t.json(),r=a.tools||[],s=Array.isArray(e.toolNames)?e.toolNames:[],n=r.length>0?r.map(e=>e.name):s;w(t=>({...t,[e.url]:{tools:r,requiresAuth:!!a.requiresAuth,error:a.error}})),O(t=>({...t,[e.url]:Object.fromEntries(n.map(e=>[e,!0]))}))}catch(t){w(a=>({...a,[e.url]:{tools:[],error:t.message}}))}finally{C(t=>({...t,[e.url]:!1}))}}},$=(e,t)=>{let a=S[e]||{};O(r=>({...r,[e]:Object.fromEntries(Object.keys(a).map(e=>[e,t]))}))};return(0,r.jsx)(i.default,{isOpen:e,onClose:t,title:"Browse MCP Marketplace",size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("input",{type:"text",value:p,onChange:e=>h(e.target.value),placeholder:"Search by name or description...",className:"flex-1 px-2 py-1.5 bg-card rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50"}),(0,r.jsxs)("select",{value:g,onChange:e=>f(e.target.value),className:"px-2 py-1.5 bg-card rounded text-xs border border-border focus:outline-none focus:ring-1 focus:ring-primary/50",children:[(0,r.jsx)("option",{value:"all",children:"All"}),(0,r.jsx)("option",{value:"authless",children:"Authless"}),(0,r.jsx)("option",{value:"oauth",children:"OAuth"})]})]}),v&&(0,r.jsx)("div",{className:"px-2 py-1.5 rounded text-xs bg-red-500/10 text-red-600",children:v}),m&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground text-xs py-4 justify-center",children:[(0,r.jsx)(s.default,{name:"progress_activity",className:"animate-spin text-[18px]"}),(0,r.jsx)("span",{children:"Loading registry..."})]}),!m&&(0,r.jsxs)("div",{className:"flex flex-col gap-1 max-h-[60vh] overflow-y-auto",children:[0===W.length&&(0,r.jsx)("div",{className:"text-center text-xs text-muted-foreground py-6",children:"No servers match filter"}),W.map(e=>{let t=F.has(e.slug||e.name),n=j===e.url,i=k[e.url],l=N[e.url],d=S[e.url]||{},c=Object.keys(d),u=Object.values(d).filter(Boolean).length;return(0,r.jsxs)("div",{className:"rounded border border-transparent hover:border-border",children:[(0,r.jsxs)("div",{className:"flex items-start gap-2 px-2 py-2 hover:bg-black/5 dark:hover:bg-white/5",children:[e.iconUrl?(0,r.jsx)("img",{src:e.iconUrl,alt:"",className:"size-7 rounded shrink-0 object-contain",onError:e=>{e.target.style.display="none"},loading:"lazy",decoding:"async"}):(0,r.jsx)("div",{className:"size-7 rounded bg-card shrink-0"}),(0,r.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,r.jsxs)("div",{className:"flex items-center gap-1.5 flex-wrap",children:[(0,r.jsx)("span",{className:"font-medium text-xs",children:e.title}),e.oauth?(0,r.jsx)("span",{className:"px-1 py-0.5 text-[9px] rounded bg-amber-500/10 text-amber-600",children:"OAuth"}):(0,r.jsx)("span",{className:"px-1 py-0.5 text-[9px] rounded bg-green-500/10 text-green-600",children:"Authless"}),e.toolCount>0&&(0,r.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[e.toolCount," tools"]})]}),e.description&&(0,r.jsx)("p",{className:"text-[10px] text-muted-foreground line-clamp-2 mt-0.5",children:e.description})]}),(0,r.jsx)("button",{onClick:()=>t?null:void(j===e.url?y(null):(y(e.url),E(e))),disabled:t,className:`shrink-0 px-2 py-1 rounded text-[10px] font-medium transition-colors ${t?"bg-green-500/10 text-green-600 cursor-default":n?"bg-card border border-border text-muted-foreground hover:bg-black/5":"bg-primary/10 border border-primary/40 text-primary hover:bg-primary/20"}`,children:t?"Added":n?"Cancel":"+ Add"})]}),n&&(0,r.jsxs)("div",{className:"px-3 py-2 bg-card/40 border-t border-border flex flex-col gap-2",children:[l&&(0,r.jsxs)("div",{className:"flex items-center gap-2 text-muted-foreground text-[10px] py-1",children:[(0,r.jsx)(s.default,{name:"progress_activity",className:"animate-spin text-[14px]"}),(0,r.jsx)("span",{children:"Probing server for tools..."})]}),!l&&i?.requiresAuth&&(0,r.jsx)("p",{className:"text-[10px] text-amber-600 bg-amber-500/10 px-2 py-1 rounded",children:"\uD83D\uDD10 OAuth required. Add now and authenticate after Apply; tool list will be discovered after first connect."}),!l&&i?.error&&!i?.requiresAuth&&(0,r.jsxs)("p",{className:"text-[10px] text-red-600 bg-red-500/10 px-2 py-1 rounded",children:["Probe failed: ",i.error]}),!l&&0===c.length&&!i?.requiresAuth&&!i?.error&&(0,r.jsx)("p",{className:"text-[10px] text-muted-foreground",children:"No tools advertised by server."}),!l&&c.length>0&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:[u,"/",c.length," tools enabled"]}),(0,r.jsxs)("div",{className:"flex gap-1",children:[(0,r.jsx)("button",{onClick:()=>$(e.url,!0),className:"text-[10px] text-primary hover:underline",children:"All"}),(0,r.jsx)("span",{className:"text-[10px] text-muted-foreground",children:"\xb7"}),(0,r.jsx)("button",{onClick:()=>$(e.url,!1),className:"text-[10px] text-primary hover:underline",children:"None"})]})]}),(0,r.jsx)("div",{className:"grid grid-cols-2 gap-1 max-h-40 overflow-y-auto",children:c.map(t=>(0,r.jsxs)("label",{className:"flex items-center gap-1.5 text-[10px] cursor-pointer hover:bg-black/5 dark:hover:bg-white/5 px-1 rounded",children:[(0,r.jsx)(o.S,{checked:!!d[t],onCheckedChange:()=>{var a;return a=e.url,void O(e=>({...e,[a]:{...e[a],[t]:!e[a]?.[t]}}))},className:"size-3 [&_svg]:size-2"}),(0,r.jsx)("span",{className:"truncate",children:t})]},t))})]}),(0,r.jsx)("button",{onClick:()=>{let t,r;return r=Object.keys(t=S[e.url]||{}).filter(e=>t[e]),void(a?.({name:e.slug||e.name,title:e.title,description:e.description,url:e.url,transport:e.transport,oauth:e.oauth,toolNames:r}),y(null))},className:"self-end px-2 py-1 rounded text-[10px] font-medium bg-primary text-primary-foreground hover:bg-primary/90",children:"✓ Confirm Add"})]})]},e.url)})]}),(0,r.jsxs)("div",{className:"text-[10px] text-muted-foreground text-right",children:[W.length," of ",c.length," servers"]})]})})}},7896:(e,t,a)=>{a.d(t,{S:()=>o});var r=a(29798);a(15814);var s=a(5471),n=a(68612),i=a(63587);function o({className:e,...t}){return(0,r.jsx)(n.bL,{"data-slot":"checkbox",className:(0,s.cn)("peer relative flex size-4 shrink-0 items-center justify-center rounded-[4px] border border-input shadow-xs transition-shadow outline-none group-has-disabled/field:opacity-50 group-has-[:focus-visible]/field-label:ring-0 group-has-[:focus-visible]/field-label:not-data-checked:border-input after:absolute after:-inset-x-3 after:-inset-y-2 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 aria-invalid:aria-checked:border-primary dark:bg-input/30 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground group-has-[:focus-visible]/field-label:data-checked:border-primary dark:data-checked:bg-primary",e),...t,children:(0,r.jsx)(n.C1,{"data-slot":"checkbox-indicator",className:"grid place-content-center text-current transition-none [&>svg]:size-3.5",children:(0,r.jsx)(i.A,{})})})}},14580:(e,t,a)=>{a.d(t,{default:()=>c});var r=a(29798),s=a(15814),n=a(3537),i=a(77345),o=a(18055),l=a(53784);let d="https://api.openai.com/v1";function c({isOpen:e,onClose:t,onCreated:a,onSaved:u,node:m}){let x=!!m,[p,h]=(0,s.useState)({name:"",prefix:"",baseUrl:d}),[g,f]=(0,s.useState)(!1),[v,b]=(0,s.useState)(""),[j,y]=(0,s.useState)(""),[k,w]=(0,s.useState)(!1),[N,C]=(0,s.useState)(null);(0,s.useEffect)(()=>{e&&(C(null),b(""),y(""),x?h({name:m.name||"",prefix:m.prefix||"",baseUrl:m.baseUrl||d}):h({name:"",prefix:"",baseUrl:d}))},[e,x,m]);let S=async()=>{if(p.name.trim()&&p.prefix.trim()&&p.baseUrl.trim()){f(!0);try{let e=x?`/api/provider-nodes/${m.id}`:"/api/provider-nodes",t=x?"PUT":"POST",r={name:p.name,prefix:p.prefix,baseUrl:p.baseUrl};x||(r.type="custom-embedding");let s=await fetch(e,{method:t,headers:{"Content-Type":"application/json"},body:JSON.stringify(r)}),n=await s.json();s.ok&&(x?u?.(n.node):a?.(n.node))}catch(e){console.log("Error saving custom embedding node:",e)}finally{f(!1)}}},O=async()=>{w(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:p.baseUrl,apiKey:v,type:"custom-embedding",modelId:j.trim()||void 0})}),t=await e.json();C(t)}catch{C({valid:!1,error:"Network error"})}finally{w(!1)}};return(0,r.jsx)(n.default,{isOpen:e,title:x?"Edit Custom Embedding":"Add Custom Embedding",onClose:t,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Name"}),(0,r.jsx)(i.p,{value:p.name,onChange:e=>h({...p,name:e.target.value}),placeholder:"Voyage AI"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Required. A friendly label for this embedding provider."})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Prefix"}),(0,r.jsx)(i.p,{value:p.prefix,onChange:e=>h({...p,prefix:e.target.value}),placeholder:"voyage"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Required. Used as the provider prefix for model IDs (e.g. voyage/voyage-3)."})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Base URL"}),(0,r.jsx)(i.p,{value:p.baseUrl,onChange:e=>h({...p,baseUrl:e.target.value}),placeholder:"https://api.voyageai.com/v1"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Most embedding APIs are OpenAI-compatible: Voyage, Cohere, Jina, Mistral, Together..."})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"API Key (for Check)"}),(0,r.jsx)(i.p,{type:"password",value:v,onChange:e=>b(e.target.value)})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Model ID (for Check)"}),(0,r.jsx)(i.p,{value:j,onChange:e=>y(e.target.value),placeholder:"e.g. voyage-3, embed-english-v3.0, text-embedding-3-small"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Required for validation. Will send a test embeddings request."})]}),(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)(o.$,{onClick:O,disabled:!v||!j.trim()||k||!p.baseUrl.trim(),variant:"secondary",children:k?"Checking...":"Check"}),(()=>{if(!N)return null;let{valid:e,error:t,dimensions:a}=N;return e?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(l.E,{variant:"default",children:"Valid"}),a&&(0,r.jsxs)("span",{className:"text-sm text-muted-foreground",children:[a," dims"]})]}):(0,r.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,r.jsx)(l.E,{variant:"destructive",children:"Invalid"}),t&&(0,r.jsx)("span",{className:"text-sm text-red-500",children:t})]})})()]}),(0,r.jsx)(o.$,{onClick:S,className:"w-full",disabled:!p.name.trim()||!p.prefix.trim()||!p.baseUrl.trim()||g,children:g?x?"Saving...":"Creating...":x?"Save":"Create"})]})})}},14670:(e,t,a)=>{a.d(t,{default:()=>u});var r=a(29798),s=a(58913),n=a(15814),i=a(75669),o=a(45111),l=a(53784);let d="__none__",c=[{value:"none",label:"None (single pool)"},{value:"round-robin",label:"Round-robin"},{value:"random",label:"Random"}];function u({providerId:e}){let[t,a]=(0,n.useState)([]),[m,x]=(0,n.useState)(d),[p,h]=(0,n.useState)("none"),[g,f]=(0,n.useState)(!1),[v,b]=(0,n.useState)(!1);(0,n.useEffect)(()=>{let t=!1;return Promise.all([fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}).then(e=>e.ok?e.json():{proxyPools:[]}),fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():{})]).then(([r,s])=>{if(t)return;a(r.proxyPools||[]);let n=(s.providerStrategies||{})[e]||{};x(n.proxyPoolId||d),h(n.rotateStrategy||"none")}).catch(()=>{}),()=>{t=!0}},[e]);let j=(0,n.useCallback)(async(t,a)=>{f(!0);try{let r=await fetch("/api/settings",{cache:"no-store"}),s=(r.ok?await r.json():{}).providerStrategies||{},n={...s[e]||{}};t===d?delete n.proxyPoolId:n.proxyPoolId=t,"none"===a?delete n.rotateStrategy:n.rotateStrategy=a;let i={...s};0===Object.keys(n).length?delete i[e]:i[e]=n,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:i})}),b(!0),setTimeout(()=>b(!1),1500)}catch(e){console.log("Save proxy config error:",e)}finally{f(!1)}},[e]),y=t.length>=2,k="none"!==p;return(0,r.jsx)(i.Zp,{className:"p-6",children:(0,r.jsxs)(i.Wu,{children:[(0,r.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,r.jsx)("div",{className:"inline-flex items-center justify-center w-10 h-10 rounded-full bg-green-500/10 text-green-500",children:(0,r.jsx)(s.default,{name:"lock_open",className:"text-[20px]"})}),(0,r.jsxs)("div",{className:"flex-1",children:[(0,r.jsx)("p",{className:"text-sm font-medium",children:"No authentication required"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"This provider is ready to use. Optionally route requests through a proxy pool to bypass IP-based limits."})]}),v&&(0,r.jsx)(l.E,{variant:"default",children:"Saved"})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Proxy Pool"}),(0,r.jsxs)(o.l6,{value:m,onValueChange:e=>{x(e),j(e,p)},disabled:g||k,children:[(0,r.jsx)(o.bq,{disabled:g||k,children:(0,r.jsx)(o.yv,{placeholder:"Select an option"})}),(0,r.jsxs)(o.gC,{children:[(0,r.jsx)(o.eb,{value:d,children:"None (direct)"}),t.map(e=>(0,r.jsx)(o.eb,{value:e.id,children:e.name},e.id))]})]}),k&&(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Pool selector is ignored when rotation is active — all active pools are used."})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-2 mt-4",children:[(0,r.jsx)("label",{className:"text-sm font-medium text-foreground",children:"Rotation Strategy"}),(0,r.jsxs)(o.l6,{value:p,onValueChange:e=>{h(e),j(m,e)},disabled:g,children:[(0,r.jsx)(o.bq,{disabled:g,children:(0,r.jsx)(o.yv,{placeholder:"Select an option"})}),(0,r.jsx)(o.gC,{children:c.map(e=>(0,r.jsx)(o.eb,{value:e.value,disabled:"none"!==e.value&&!y,children:e.label},e.value))})]}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:y?k?"round-robin"===p?`Rotating through all ${t.length} active pools in order. State is in-memory (resets on restart).`:`Picking a random pool from ${t.length} active pools each request.`:"Uses the selected pool above. Set to Round-robin or Random to rotate across all active pools.":"Need at least 2 active proxy pools for rotation."})]})]})})}},22205:(e,t,a)=>{a.d(t,{default:()=>u});var r=a(29798),s=a(50141),n=a.n(s),i=a(5471),o=a(75669),l=a(14231),d=a(1352),c=a(58913);function u({href:e,icon:t,iconBg:a,title:s,children:m,meta:x,dimmed:p,toggle:h,className:g}){let f=h?h.checked?h.disabledLabel??"Disable":h.enabledLabel??"Enable":void 0;return(0,r.jsx)(n(),{href:e,className:"group block h-full min-w-0",children:(0,r.jsx)(o.Zp,{size:"sm",className:(0,i.cn)("h-full transition-all hover:border-primary/40 hover:shadow-sm",p&&"opacity-50",g),children:(0,r.jsx)(o.Wu,{children:(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,r.jsx)("div",{className:"flex size-10 shrink-0 items-center justify-center rounded-xl ring-1 ring-inset ring-foreground/5",style:a?{backgroundColor:a}:void 0,children:t}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("h3",{className:"truncate text-sm font-semibold",children:s}),(0,r.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1.5 text-xs",children:[m,x]})]}),(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-1",children:[h&&(0,r.jsx)("div",{className:"opacity-100 transition-opacity sm:opacity-0 sm:group-hover:opacity-100 sm:group-focus-within:opacity-100",onClick:e=>{h&&(e.preventDefault(),e.stopPropagation(),h.onToggle(!h.checked))},children:(0,r.jsxs)(d.m_,{children:[(0,r.jsx)(d.k$,{asChild:!0,children:(0,r.jsx)(l.d,{size:"sm",checked:h.checked,onCheckedChange:()=>{},"aria-label":f})}),(0,r.jsx)(d.ZI,{side:"top",children:f})]})}),(0,r.jsx)(c.default,{name:"chevron_right",className:"shrink-0 text-[18px] text-muted-foreground transition-transform group-hover:translate-x-0.5"})]})]})})})})}},23444:(e,t,a)=>{a.d(t,{default:()=>l});var r=a(29798),s=a(58913),n=a(15814),i=a(3537),o=a(18055);function l({isOpen:e,onSuccess:t,onClose:a}){let[d,c]=(0,n.useState)("detecting"),[u,m]=(0,n.useState)(null),[x,p]=(0,n.useState)(null),[h,g]=(0,n.useState)(null),[f,v]=(0,n.useState)(null);(0,n.useEffect)(()=>{if(!e)return;let t=!1;return(async()=>{c("detecting"),p(null),m(null),g(null);try{let e=await fetch("/api/oauth/xiaomi-mimo/auto-import"),a=await e.json();if(t)return;a.found&&a.apiKey?(m(a),c("found")):(c("not-found"),p(a.error||"Xiaomi MiMo Desktop credentials not found on this machine."))}catch{t||(c("not-found"),p("Failed to read local Xiaomi MiMo Desktop credentials."))}})(),()=>{t=!0}},[e]);let b=async()=>{if(u?.apiKey){c("importing"),p(null);try{let e=await fetch("/api/oauth/xiaomi-mimo/api-key",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({apiKey:u.apiKey,uid:u.uid,baseUrl:u.baseUrl,mimoPassToken:u.mimoPassToken||null,mimoUserId:u.mimoUserId||null,mimoCUserId:u.mimoCUserId||null})}),r=await e.json();if(!e.ok||!r.success)throw Error(r.error||"Import failed");t?.(r.connection),a()}catch(e){c("found"),p(e.message)}}},j=async()=>{p(null);try{let e=crypto.randomUUID(),t=await fetch(`/api/oauth/xiaomi-mimo/authorize?state=${e}`),a=await t.json();if(a.authorizeUrl)g(a.authorizeUrl),v(a.state),window.open(a.authorizeUrl,"_blank","width=600,height=700");else throw Error(a.error||"Failed to start OAuth")}catch(e){p(e.message)}},y=async()=>{if(f){p(null);try{let e=await fetch(`/api/oauth/xiaomi-mimo/poll-status?state=${f}`),r=await e.json();if("done"===r.status&&r.result){let e=await fetch("/api/oauth/xiaomi-mimo/exchange",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({state:f})}),r=await e.json();if(r.success)t?.(r.connection),a();else throw Error(r.error||"Exchange failed")}else if("error"===r.status)throw Error(r.error||"OAuth failed");else p("Authorization not completed yet. Finish in the browser, then click Check Again.")}catch(e){p(e.message)}}};return(0,r.jsx)(i.default,{isOpen:e,title:"Connect Xiaomi MiMo",onClose:a,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:["detecting"===d&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)(s.default,{name:"progress_activity",className:"text-3xl text-primary animate-spin"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Reading local credentials..."}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Checking ~/.local/share/mimocode/auth.json"})]}),"found"===d&&u&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"bg-green-50 dark:bg-green-900/20 p-3 rounded-lg border border-green-200 dark:border-green-800",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(s.default,{name:"check_circle",className:"text-green-600 dark:text-green-400"}),(0,r.jsxs)("div",{className:"text-sm text-green-800 dark:text-green-200",children:[(0,r.jsx)("p",{className:"font-medium",children:"Xiaomi MiMo Desktop credentials found!"}),(0,r.jsxs)("p",{className:"mt-1 opacity-80",children:["UID: ",u.uid||"—"," \xb7 Source:"," ",u.source?.split(/[\\/]/).pop()]})]})]})}),x&&(0,r.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 p-3 rounded-lg border border-red-200 dark:border-red-800",children:(0,r.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:x})}),(0,r.jsx)(o.$,{onClick:b,className:"w-full",children:"Connect with Local Credentials"})]}),"importing"===d&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)(s.default,{name:"progress_activity",className:"text-3xl text-primary animate-spin"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connecting..."})]}),"not-found"===d&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("div",{className:"bg-amber-50 dark:bg-amber-900/20 p-3 rounded-lg border border-amber-200 dark:border-amber-800",children:(0,r.jsxs)("div",{className:"flex gap-2 items-start",children:[(0,r.jsx)(s.default,{name:"info",className:"text-amber-600 dark:text-amber-400"}),(0,r.jsxs)("div",{className:"text-sm text-amber-800 dark:text-amber-200",children:[(0,r.jsx)("p",{className:"font-medium",children:"Local credentials not found"}),(0,r.jsx)("p",{className:"mt-1 opacity-80",children:x}),(0,r.jsx)("p",{className:"mt-2 opacity-80",children:"Make sure Xiaomi MiMo Desktop is installed and you are signed in, then retry. Or sign in via browser below."})]})]})}),h?(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg border border-blue-200 dark:border-blue-800",children:(0,r.jsxs)("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:["Browser opened. Complete the Xiaomi sign-in, then click"," ",(0,r.jsx)("strong",{children:"Check Again"}),"."]})}),(0,r.jsx)(o.$,{onClick:y,className:"w-full",children:"Check Again"})]}):(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(o.$,{onClick:()=>{c("detecting"),fetch("/api/oauth/xiaomi-mimo/auto-import").then(e=>e.json()).then(e=>{e.found&&e.apiKey?(m(e),c("found")):(c("not-found"),p(e.error||"Still not found."))}).catch(()=>c("not-found"))},variant:"outline",className:"w-full",children:"Retry Local Detect"}),(0,r.jsx)(o.$,{onClick:j,className:"w-full",children:"Sign in via Browser"})]})]})]})})}},24873:(e,t,a)=>{a.d(t,{default:()=>f});var r=a(29798),s=a(1280),n=a(26339),i=a(6403),o=a(10205),l=a(36395),d=a(15814),c=a(3537),u=a(77345),m=a(18055),x=a(1352),p=a(25908);let h=/^[a-zA-Z0-9_.\-]+$/;function g({index:e,model:t,isFirst:a,isLast:o,onEdit:l,onMoveUp:c,onMoveDown:u,onRemove:m}){let[p,h]=(0,d.useState)(!1),[f,v]=(0,d.useState)(t),b=()=>{let e=f.trim();e&&e!==t?l(e):v(t),h(!1)};return(0,r.jsxs)("div",{className:"group flex min-w-0 items-center gap-1.5 rounded-md bg-black/[0.02] px-2 py-1 transition-colors hover:bg-black/[0.04] dark:bg-white/[0.02] dark:hover:bg-white/[0.04]",children:[(0,r.jsx)("span",{className:"text-[10px] font-medium text-muted-foreground w-3 text-center shrink-0",children:e+1}),p?(0,r.jsx)("input",{autoFocus:!0,value:f,onChange:e=>v(e.target.value),onBlur:b,onKeyDown:e=>{"Enter"===e.key&&b(),"Escape"===e.key&&(v(t),h(!1))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-white px-1.5 py-0.5 font-mono text-xs text-foreground outline-none dark:bg-black/20"}):(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("div",{className:"min-w-0 flex-1 cursor-text truncate rounded px-1.5 py-0.5 font-mono text-xs text-foreground hover:bg-black/5 dark:hover:bg-white/5",onClick:()=>h(!0),children:t})}),(0,r.jsx)(x.ZI,{children:"Click to edit"})]}),(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5",children:[(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:c,disabled:a,className:`p-0.5 rounded ${a?"text-muted-foreground/20 cursor-not-allowed":"text-muted-foreground hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,children:(0,r.jsx)(s.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Move up"})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:u,disabled:o,className:`p-0.5 rounded ${o?"text-muted-foreground/20 cursor-not-allowed":"text-muted-foreground hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,children:(0,r.jsx)(n.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Move down"})]})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:m,className:"p-0.5 hover:bg-red-500/10 rounded text-muted-foreground hover:text-red-500 transition-all",children:(0,r.jsx)(i.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Remove"})]})]})}function f({isOpen:e,combo:t,onClose:a,onSave:s,activeProviders:n,kindFilter:i=null,forcePrefix:x="",title:v}){let b=t?.name?x&&t.name.startsWith(x)?t.name.slice(x.length):t.name:"",[j,y]=(0,d.useState)(b),[k,w]=(0,d.useState)(t?.models||[]),[N,C]=(0,d.useState)(!1),[S,O]=(0,d.useState)(!1),[F,W]=(0,d.useState)(""),[E,$]=(0,d.useState)({});(0,d.useEffect)(()=>{e&&fetch("/api/models/alias").then(e=>e.ok?e.json():null).then(e=>e&&$(e.aliases||{})).catch(()=>{})},[e]);let I=e=>{if(!e.trim())return W("Name is required"),!1;let t=x+e;return h.test(t)?(W(""),!0):(W("Only letters, numbers, -, _ and . allowed"),!1)},z=e=>{let t=e.target.value;x&&t.startsWith(x)&&(t=t.slice(x.length)),y(t),t?I(t):W("")},P=async()=>{I(j)&&(O(!0),await s({name:x+j.trim(),models:k}),O(!1))},A=!!t;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(c.default,{isOpen:e,onClose:a,title:v||(A?"Edit Combo":"Create Combo"),children:(0,r.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("div",{children:[x?(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("label",{className:"text-sm font-medium mb-1 block",children:"Combo Name"}),(0,r.jsxs)("div",{className:"flex items-stretch",children:[(0,r.jsx)("span",{className:"inline-flex items-center px-2 rounded-l border border-r-0 border-black/10 dark:border-white/10 bg-black/[0.04] dark:bg-white/[0.04] text-muted-foreground font-mono text-sm",children:x}),(0,r.jsx)("input",{value:j,onChange:z,placeholder:"my-combo",className:"flex-1 min-w-0 rounded-r border border-black/10 dark:border-white/10 bg-white dark:bg-black/20 px-2 py-1.5 font-mono text-sm outline-none focus:border-primary"})]}),F&&(0,r.jsx)("p",{className:"text-[11px] text-red-500 mt-0.5",children:F})]}):(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Combo Name"}),(0,r.jsx)(u.p,{value:j,onChange:z,placeholder:"my-combo",className:F?"ring-1 ring-red-500 border-red-500/40":void 0}),F&&(0,r.jsx)("p",{className:"text-xs text-red-500",children:F})]}),(0,r.jsxs)("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:[x?`Auto-prefixed with "${x}". `:"","Only letters, numbers, -, _ and . allowed"]})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Models"}),0===k.length?(0,r.jsxs)("div",{className:"text-center py-4 border border-dashed border-black/10 dark:border-white/10 rounded-lg bg-black/[0.01] dark:bg-white/[0.01]",children:[(0,r.jsx)(o.A,{className:"mx-auto mb-1 size-6 text-muted-foreground"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"No models added yet"})]}):(0,r.jsx)("div",{className:"flex max-h-[55vh] min-w-0 flex-col gap-1 overflow-y-auto sm:max-h-[350px]",children:k.map((e,t)=>(0,r.jsx)(g,{index:t,model:e,isFirst:0===t,isLast:t===k.length-1,onEdit:e=>{let a=[...k];a[t]=e,w(a)},onMoveUp:()=>(e=>{if(0===e)return;let t=[...k];[t[e-1],t[e]]=[t[e],t[e-1]],w(t)})(t),onMoveDown:()=>(e=>{if(e===k.length-1)return;let t=[...k];[t[e],t[e+1]]=[t[e+1],t[e]],w(t)})(t),onRemove:()=>w(k.filter((e,a)=>a!==t))},t))}),(0,r.jsxs)("button",{onClick:()=>C(!0),className:"w-full mt-2 py-2 border border-dashed border-black/10 dark:border-white/10 rounded-lg text-xs text-primary font-medium hover:text-primary hover:border-primary/50 transition-colors flex items-center justify-center gap-1",children:[(0,r.jsx)(l.A,{className:"size-4"}),"Add Model"]})]}),(0,r.jsx)(m.$,{onClick:P,className:"w-full",size:"sm",disabled:!j.trim()||!!F||S,children:S?"Saving...":A?"Save":"Create"})]})}),N&&(0,r.jsx)(p.default,{isOpen:N,onClose:()=>C(!1),onSelect:e=>{k.includes(e.value)||w([...k,e.value])},onDeselect:e=>{w(k.filter(t=>t!==e.value))},selectedModel:void 0,activeProviders:n,modelAliases:E,title:"Add Model to Combo",kindFilter:i,addedModelValues:k,closeOnSelect:!1})]})}},25908:(e,t,a)=>{a.d(t,{default:()=>C});var r=a(29798),s=a(15814),n=a(19295),i=a(74719),o=a(10205),l=a(63587),d=a(50563),c=a(95600),u=a(49787),m=a(77345),x=a(18055),p=a(53784),h=a(54563),g=a(738),f=a(75862),v=a(90619),b=a(80159),j=a(13794);let y=[...Object.keys(j.zN),...Object.keys(j.IS),...Object.keys(j.nJ),...Object.keys(j.fg)],k=Object.keys(j.IS).filter(e=>j.IS[e].noAuth),w=["cursor","zed"];function N(e,t,a){let[r,n]=(0,s.useState)([]),i=(t??[]).join("|");return(0,s.useEffect)(()=>{let t=i?i.split("|"):[];if(!e||0===t.length)return void n([]);let r=!1;return Promise.all(t.map(async e=>{let t=await fetch(`/api/providers/${e}/models`,{cache:"no-store"});if(!t.ok)return[];let a=await t.json();return Array.isArray(a.models)?a.models:[]})).then(e=>{if(r)return;let t=new Set;n(e.flat().filter(e=>!(!e?.id||t.has(e.id))&&(t.add(e.id),!0)))}).catch(e=>{console.warn(`Unable to load ${a} models for selector:`,e),r||n([])}),()=>{r=!0}},[e,i,a]),r}function C({isOpen:e,onClose:t,onSelect:a,onDeselect:S,selectedModel:O,activeProviders:F=[],title:W="Select Model",modelAliases:E={},kindFilter:$=null,capFilter:I=null,addedModelValues:z=[],closeOnSelect:P=!0}){let A=(0,s.useMemo)(()=>$?F.filter(e=>{let t=j.Q2[e.provider];return(t?.serviceKinds||["llm"]).includes($)}):F,[F,$]),{getCaps:_}=(0,v.y)(),[T,D]=(0,s.useState)(""),[L,U]=(0,s.useState)([]),[M,q]=(0,s.useState)([]),[R,K]=(0,s.useState)([]),[V,J]=(0,s.useState)({}),Z=(0,s.useMemo)(()=>{let e=Object.fromEntries(w.map(e=>[e,[]]));for(let t of F)t?.id&&Object.prototype.hasOwnProperty.call(e,t.provider)&&e[t.provider].push(t.id);return e},[F]),B=N(e,Z.cursor,"Cursor"),G=N(e,Z.zed,"Zed"),Q=async()=>{try{let e=await fetch("/api/combos");if(!e.ok)throw Error(`Failed to fetch combos: ${e.status}`);let t=await e.json();U(t.combos||[])}catch(e){console.error("Error fetching combos:",e),U([])}};(0,s.useEffect)(()=>{e&&Q()},[e]);let H=async()=>{try{let e=await fetch("/api/provider-nodes");if(!e.ok)throw Error(`Failed to fetch provider nodes: ${e.status}`);let t=await e.json();q(t.nodes||[])}catch(e){console.error("Error fetching provider nodes:",e),q([])}};(0,s.useEffect)(()=>{e&&H()},[e]);let X=async()=>{try{let e=await fetch("/api/models/custom");if(!e.ok)throw Error(`Failed to fetch custom models: ${e.status}`);let t=await e.json();K(t.models||[])}catch(e){console.error("Error fetching custom models:",e),K([])}};(0,s.useEffect)(()=>{e&&X()},[e]);let Y=async()=>{try{let e=await fetch("/api/models/disabled");if(!e.ok)throw Error(`Failed to fetch disabled models: ${e.status}`);let t=await e.json();J(t.disabled||{})}catch(e){console.error("Error fetching disabled models:",e),J({})}};(0,s.useEffect)(()=>{e&&Y()},[e]);let ee=(0,s.useMemo)(()=>({...j.zN,...j.IS,...j.nJ,...j.fg}),[]),et=(0,s.useMemo)(()=>{let e={},t=new Set(["webSearch","webFetch"]),a=new Set(["image","tts","stt","embedding","imageToText"]),r=new Set(["tts","image","webFetch"]);return[...new Set([...A.map(e=>e.provider),...$?k.filter(e=>(j.Q2[e]?.serviceKinds||["llm"]).includes($)):k])].sort((e,t)=>{let a=y.indexOf(e),r=y.indexOf(t);return(-1===a?999:a)-(-1===r?999:r)}).forEach(s=>{let n=(0,j.wG)(s),i=ee[s]||{name:s,color:"#666"},o=(0,j.mq)(s)||(0,j.gb)(s);if($&&t.has($)){e[s]={name:i.name,alias:n,color:i.color,models:[{id:s,name:i.name,value:s}]};return}if(i.passthroughModels){let t=Object.entries(E).filter(([,e])=>e.startsWith(`${n}/`)).map(([e,t])=>({id:t.replace(`${n}/`,""),name:e,value:t})),o=R.filter(e=>e.providerAlias===n).map(e=>({id:e.id,name:e.name||e.id,value:`${n}/${e.id}`,kind:(0,b.CP)(e),isCustom:!0})),l=t;if($&&a.has($)){let e=o.filter(e=>(0,b.CP)(e)===$);0===(l=[...e,...(0,b.KC)(s).filter(e=>(0,b.CP)(e)===$).map(e=>({id:e.id,name:e.name,value:`${n}/${e.id}`,kind:(0,b.CP)(e)})).filter(t=>!e.some(e=>e.value===t.value))]).length&&r.has($)&&(i.serviceKinds||["llm"]).includes($)&&(l=[{id:s,name:i.name,value:n}])}else{let e=o.filter(e=>!(0,b.CP)(e)||"llm"===(0,b.CP)(e)),a=new Set([...t,...e].map(e=>e.value)),r="zed"===s?G.map(e=>({id:e.id,name:e.name||e.id,value:`${n}/${e.id}`,kind:(0,b.CP)(e)})):[],i=(0,b.KC)(s).filter(e=>!(0,b.CP)(e)||"llm"===(0,b.CP)(e)).map(e=>({id:e.id,name:e.name,value:`${n}/${e.id}`,kind:(0,b.CP)(e)})).filter(e=>!a.has(e.value));l=[...e,...t.filter(t=>!e.some(e=>e.value===t.value)),...r.filter(e=>!a.has(e.value)),...i]}if(l.length>0){let t=M.find(e=>e.id===s),a=t?.name||i.name;e[s]={name:a,alias:n,color:i.color,models:l}}}else if(o){if($&&a.has($))return;let t=F.find(e=>e.provider===s),r=M.find(e=>e.id===s),n=r?.name||t?.name||i.name,o=t?.providerSpecificData?.prefix||r?.prefix||s,l=Object.entries(E).filter(([,e])=>e.startsWith(`${s}/`)).map(([e,t])=>({id:t.replace(`${s}/`,""),name:e,value:`${o}/${t.replace(`${s}/`,"")}`})),d=R.filter(e=>e.providerAlias===s).map(e=>({id:e.id,name:e.name||e.id,value:`${o}/${e.id}`,isCustom:!0})),c=new Set(l.map(e=>e.value)),u=[...l,...d.filter(e=>!c.has(e.value))],m=u.length>0?u:[{id:`__placeholder__${s}`,name:`${o}/model-id`,value:`${o}/model-id`,isPlaceholder:!0}];e[s]={name:n,alias:o,color:i.color,models:m,isCustom:!0,hasModels:u.length>0}}else{var l;let t="cursor"===s?B:"zed"===s?G:[],o=t.length>0?t:(0,b.KC)(s),d=new Set(o.map(e=>e.id)),c=o.length>0,u=Object.entries(E).filter(([e,t])=>t.startsWith(`${n}/`)&&(!c||e===t.replace(`${n}/`,""))&&!d.has(t.replace(`${n}/`,""))).map(([e,t])=>({id:t.replace(`${n}/`,""),name:e,value:t,isCustom:!0})),m=new Set(u.map(e=>e.id)),x=R.filter(e=>e.providerAlias===n&&!d.has(e.id)&&!m.has(e.id)).map(e=>({id:e.id,name:e.name||e.id,value:`${n}/${e.id}`,isCustom:!0})),p=[...o.map(e=>({id:e.id,name:e.name,value:`${n}/${e.id}`,kind:(0,b.CP)(e)})),...u,...x],h=new Set,g=(l=p.filter(e=>!h.has(e.value)&&(h.add(e.value),!0)),$?a.has($)?l.filter(e=>e.isPlaceholder||(0,b.CP)(e)===$):l:l.filter(e=>e.isPlaceholder||e.isCustom||!(0,b.CP)(e)||"llm"===(0,b.CP)(e)));0===g.length&&$&&r.has($)&&(i.serviceKinds||["llm"]).includes($)&&(g=[{id:s,name:i.name,value:n}]),g.length>0&&(e[s]={name:i.name,alias:n,color:i.color,models:g})}}),Object.entries(e).forEach(([t,a])=>{let r=new Set([...V[(0,j.wG)(t)]||[],...V[t]||[]]);0!==r.size&&(a.models=a.models.filter(e=>!r.has(e.id)),0===a.models.length&&delete e[t])}),e},[A,E,ee,M,R,V,$,F,B,G]),ea=(0,s.useMemo)(()=>{if($||I)return[];if(!T.trim())return L;let e=T.toLowerCase();return L.filter(t=>t.name.toLowerCase().includes(e))},[L,T,$]),er=(0,s.useMemo)(()=>{let e=T.trim().toLowerCase(),t={};return Object.entries(et).forEach(([a,r])=>{var s;let n=r.models;if(!I||0!==(n=n.filter(e=>_(e.value)?.[I]===!0)).length){if(e){let t=r.name.toLowerCase().includes(e);if(0===(n=n.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e))).length&&!t)return}t[a]={...r,models:[...(s=n).filter(e=>z.includes(e.value)).sort((e,t)=>e.name.localeCompare(t.name)),...s.filter(e=>!z.includes(e.value)).sort((e,t)=>e.name.localeCompare(t.name))]}}}),t},[et,T,z]),es=e=>{let r=e?.value||e?.name||e;z.includes(r)&&S?S(e):a(e),P&&(t(),D(""))};return(0,r.jsx)(u.lG,{open:!!e,onOpenChange:e=>{e||(t(),D(""))},children:(0,r.jsxs)(u.Cf,{className:"max-w-md gap-0 p-0",children:[(0,r.jsxs)(u.c7,{children:[(0,r.jsx)(u.L3,{children:W}),(0,r.jsx)(u.rr,{className:"sr-only",children:"Pick a model"})]}),(0,r.jsxs)("div",{className:"space-y-3 p-4",children:[(0,r.jsxs)(h.Fc,{children:[(0,r.jsx)(n.A,{className:"size-4"}),(0,r.jsx)(h.TN,{children:"Click to add, click again to remove. Changes are saved automatically."})]}),(0,r.jsxs)("div",{className:"relative",children:[(0,r.jsx)(i.A,{className:"absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"}),(0,r.jsx)(m.p,{type:"text",placeholder:"Search...",value:T,onChange:e=>D(e.target.value),className:"pl-8"})]}),(0,r.jsxs)("div",{className:"max-h-100 space-y-3 overflow-y-auto",children:[ea.length>0&&(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"sticky top-0 mb-1.5 flex items-center gap-1.5 bg-popover py-0.5",children:[(0,r.jsx)(o.A,{className:"size-3.5 text-primary"}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:"Combos"}),(0,r.jsx)(p.E,{variant:"secondary",children:ea.length})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:ea.map(e=>{let t=O===e.name,a=z.includes(e.name);return(0,r.jsxs)(x.$,{size:"sm",variant:t||a?"default":"outline",onClick:()=>es({id:e.name,name:e.name,value:e.name}),className:"h-auto rounded-xl px-2 py-1 text-xs font-medium",children:[a&&(0,r.jsx)(l.A,{className:"size-2.5"}),e.name]},e.id)})})]}),Object.entries(er).map(([e,t])=>(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"sticky top-0 mb-1.5 flex items-center gap-1.5 bg-popover py-0.5",children:[(0,r.jsx)(g.A,{src:`/providers/${e}.png`,alt:t.name,size:14,fallbackText:(t.name||e).slice(0,2).toUpperCase(),fallbackColor:t.color}),(0,r.jsx)("span",{className:"text-xs font-medium text-primary",children:t.name}),(0,r.jsx)(p.E,{variant:"secondary",children:t.models.length})]}),(0,r.jsx)("div",{className:"flex flex-wrap gap-1.5",children:t.models.map(e=>{let t=O===e.value,a=z.includes(e.value),s=e.isPlaceholder;return(0,r.jsxs)(x.$,{size:"sm",variant:t||a?"default":"outline",onClick:()=>es(e),title:s?"Select to pre-fill, then edit model ID in the input":void 0,className:"h-auto rounded-xl px-2 py-1 text-xs font-medium data-[placeholder=true]:border-dashed data-[placeholder=true]:font-normal data-[placeholder=true]:italic","data-placeholder":s||void 0,children:[a&&!s&&(0,r.jsx)(l.A,{className:"size-2.5"}),s&&(0,r.jsx)(d.A,{className:"size-3"}),e.name,e.isCustom&&!s&&(0,r.jsx)(p.E,{variant:"secondary",className:"text-[9px] font-normal",children:"custom"}),!s&&(0,r.jsx)(f.default,{caps:_(e.value)})]},e.value)})})]},e)),0===Object.keys(er).length&&0===ea.length&&(0,r.jsxs)("div",{className:"py-4 text-center text-muted-foreground",children:[(0,r.jsx)(c.A,{className:"mx-auto mb-1 size-6"}),(0,r.jsx)("p",{className:"text-xs",children:"No models found"})]})]})]})]})})}},30872:(e,t,a)=>{a.d(t,{default:()=>m});var r=a(29798),s=a(15814),n=a(88739);function i(e){let t=window.matchMedia("(prefers-color-scheme: dark)");return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}function o(){return window.matchMedia("(prefers-color-scheme: dark)").matches}function l(){return!1}var d=a(13008),c=a(58913),u=a(1352);function m({className:e,variant:t="default"}){let{isDark:a,toggleTheme:x}=function(){let{theme:e,setTheme:t,toggleTheme:a,initTheme:r}=(0,n.A)(),d=(0,s.useSyncExternalStore)(i,o,l);(0,s.useEffect)(()=>{r()},[r]),(0,s.useEffect)(()=>{if("system"!==e)return;let t=window.matchMedia("(prefers-color-scheme: dark)"),a=()=>r();return t.addEventListener("change",a),()=>t.removeEventListener("change",a)},[e,r]);let c="dark"===e||"system"===e&&d;return{theme:e,setTheme:t,toggleTheme:a,isDark:c}}(),p={default:(0,d.cn)("flex items-center justify-center size-10 rounded-full","text-muted-foreground hover:text-foreground","hover:bg-muted transition-colors"),card:(0,d.cn)("flex items-center justify-center size-11 rounded-full","bg-card/60 hover:bg-card","border border-border","backdrop-blur-md shadow-sm hover:shadow-md","text-muted-foreground hover:text-foreground","transition-all group")};return(0,r.jsxs)(u.m_,{children:[(0,r.jsx)(u.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:x,className:(0,d.cn)(p[t],e),"aria-label":`Switch to ${a?"light":"dark"} mode`,children:(0,r.jsx)(c.default,{name:a?"light_mode":"dark_mode",className:(0,d.cn)("text-[22px]","card"===t&&"transition-transform duration-300 group-hover:rotate-12")})})}),(0,r.jsx)(u.ZI,{children:`Switch to ${a?"light":"dark"} mode`})]})}},33526:(e,t,a)=>{a.d(t,{ThemeProvider:()=>o});var r=a(29798),s=a(15814),n=a(88739),i=a(1352);function o({children:e}){let{initTheme:t}=(0,n.A)();return(0,s.useEffect)(()=>{t()},[t]),(0,r.jsx)(i.Bc,{children:e})}},37753:(e,t,a)=>{a.d(t,{default:()=>d});var r=a(29798),s=a(58913),n=a(15814),i=a(3537),o=a(77345),l=a(18055);function d({isOpen:e,onSuccess:t,onClose:a}){let[c,u]=(0,n.useState)(""),[m,x]=(0,n.useState)(""),[p,h]=(0,n.useState)(null),[g,f]=(0,n.useState)(!1),[v,b]=(0,n.useState)(!1),[j,y]=(0,n.useState)(!1),[k,w]=(0,n.useState)(!1),N=async()=>{b(!0),h(null),y(!1),w(!1);try{let e=await fetch("/api/oauth/cursor/auto-import"),t=await e.json();t.found?(u(t.accessToken),x(t.machineId),y(!0)):t.windowsManual?w(!0):h(t.error||"Could not auto-detect tokens")}catch(e){h("Failed to auto-detect tokens")}finally{b(!1)}};(0,n.useEffect)(()=>{e&&N()},[e]);let C=async()=>{if(!c.trim())return void h("Please enter an access token");if(!m.trim())return void h("Please enter a machine ID");f(!0),h(null);try{let e=await fetch("/api/oauth/cursor/import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accessToken:c.trim(),machineId:m.trim()})}),r=await e.json();if(!e.ok)throw Error(r.error||"Import failed");t?.(),a()}catch(e){h(e.message)}finally{f(!1)}};return(0,r.jsx)(i.default,{isOpen:e,title:"Connect Cursor IDE",onClose:a,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[v&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-primary/10 flex items-center justify-center",children:(0,r.jsx)(s.default,{name:"progress_activity",className:"text-3xl text-primary animate-spin"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Auto-detecting tokens..."}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Reading from Cursor IDE database"})]}),!v&&(0,r.jsxs)(r.Fragment,{children:[j&&(0,r.jsx)("div",{className:"bg-green-50 dark:bg-green-900/20 p-3 rounded-lg border border-green-200 dark:border-green-800",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(s.default,{name:"check_circle",className:"text-green-600 dark:text-green-400"}),(0,r.jsx)("p",{className:"text-sm text-green-800 dark:text-green-200",children:"Tokens auto-detected from Cursor IDE successfully!"})]})}),k&&(0,r.jsxs)("div",{className:"bg-amber-50 dark:bg-amber-900/20 p-3 rounded-lg border border-amber-200 dark:border-amber-800 flex flex-col gap-2",children:[(0,r.jsxs)("div",{className:"flex gap-2 items-center",children:[(0,r.jsx)(s.default,{name:"info",className:"text-amber-600 dark:text-amber-400"}),(0,r.jsx)("p",{className:"text-sm font-medium text-amber-800 dark:text-amber-200",children:"Could not read Cursor database automatically."})]}),(0,r.jsxs)("p",{className:"text-xs text-amber-700 dark:text-amber-300",children:["Make sure Cursor IDE has been opened at least once, then click"," ",(0,r.jsx)("strong",{children:"Retry"}),". If the problem persists, paste your tokens manually below."]}),(0,r.jsx)(l.$,{onClick:N,variant:"outline",className:"w-full",children:"Retry"})]}),!j&&!k&&!p&&(0,r.jsx)("div",{className:"bg-blue-50 dark:bg-blue-900/20 p-3 rounded-lg border border-blue-200 dark:border-blue-800",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(s.default,{name:"info",className:"text-blue-600 dark:text-blue-400"}),(0,r.jsx)("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:"Cursor IDE not detected. Please paste your tokens manually."})]})}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Access Token ",(0,r.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,r.jsx)("textarea",{value:c,onChange:e=>u(e.target.value),placeholder:"Access token will be auto-filled...",rows:3,className:"w-full px-3 py-2 text-sm font-mono border border-border rounded-lg bg-background focus:outline-none focus:border-primary resize-none"})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("label",{className:"block text-sm font-medium mb-2",children:["Machine ID ",(0,r.jsx)("span",{className:"text-red-500",children:"*"})]}),(0,r.jsx)(o.p,{value:m,onChange:e=>x(e.target.value),placeholder:"Machine ID will be auto-filled...",className:"font-mono text-sm"})]}),p&&(0,r.jsx)("div",{className:"bg-red-50 dark:bg-red-900/20 p-3 rounded-lg border border-red-200 dark:border-red-800",children:(0,r.jsx)("p",{className:"text-sm text-red-600 dark:text-red-400",children:p})}),(0,r.jsx)(l.$,{onClick:C,className:"w-full",disabled:g||!c.trim()||!m.trim(),children:g?"Importing...":"Import Token"})]})]})})}},43276:(e,t,a)=>{a.d(t,{EntityCardSkeleton:()=>o,PanelSkeleton:()=>d,StatCardSkeleton:()=>l});var r=a(29798),s=a(13008),n=a(75669),i=a(99118);function o({className:e}){return(0,r.jsx)(n.Zp,{size:"sm","aria-hidden":!0,className:(0,s.cn)("h-full overflow-hidden",e),children:(0,r.jsx)(n.Wu,{children:(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,r.jsx)(i.E,{className:"size-10 shrink-0 rounded-xl"}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)(i.E,{className:"h-4 w-2/3"}),(0,r.jsxs)("div",{className:"mt-2 flex items-center gap-1.5",children:[(0,r.jsx)(i.E,{className:"h-5 w-20 rounded-full"}),(0,r.jsx)(i.E,{className:"h-5 w-14 rounded-full"})]})]}),(0,r.jsx)(i.E,{className:"size-4 shrink-0 rounded-full"})]})})})}function l({className:e}){return(0,r.jsx)(n.Zp,{"aria-hidden":!0,className:(0,s.cn)("min-w-0 overflow-hidden px-4 py-3",e),children:(0,r.jsxs)(n.Wu,{className:"flex min-w-0 flex-col gap-1 px-0 py-0",children:[(0,r.jsx)(i.E,{className:"h-4 w-24"}),(0,r.jsx)(i.E,{className:"h-8 w-20"})]})})}function d({className:e}){return(0,r.jsx)(n.Zp,{"aria-hidden":!0,className:(0,s.cn)("overflow-hidden",e),children:(0,r.jsxs)(n.Wu,{children:[(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)(i.E,{className:"size-10 shrink-0 rounded-[10px]"}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)(i.E,{className:"h-4 w-40"}),(0,r.jsx)(i.E,{className:"mt-2 h-3 w-56"})]}),(0,r.jsx)(i.E,{className:"h-9 w-24 shrink-0 rounded-lg"})]}),(0,r.jsxs)("div",{className:"mt-4 flex flex-col gap-2 border-t border-border pt-4",children:[(0,r.jsx)(i.E,{className:"h-4 w-full"}),(0,r.jsx)(i.E,{className:"h-4 w-5/6"}),(0,r.jsx)(i.E,{className:"h-4 w-2/3"})]})]})})}},45111:(e,t,a)=>{a.d(t,{bq:()=>u,eb:()=>x,gC:()=>m,l6:()=>d,yv:()=>c});var r=a(29798);a(15814);var s=a(5471),n=a(95862),i=a(58765),o=a(63587),l=a(28830);function d({...e}){return(0,r.jsx)(n.bL,{"data-slot":"select",...e})}function c({...e}){return(0,r.jsx)(n.WT,{"data-slot":"select-value",...e})}function u({className:e,size:t="default",children:a,...o}){return(0,r.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),...o,children:[a,(0,r.jsx)(n.In,{asChild:!0,children:(0,r.jsx)(i.A,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function m({className:e,children:t,position:a="popper",align:i="center",...o}){return(0,r.jsx)(n.ZL,{children:(0,r.jsxs)(n.UC,{"data-slot":"select-content","data-align-trigger":"item-aligned"===a,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"===a&&"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:a,align:i,...o,children:[(0,r.jsx)(p,{}),(0,r.jsx)(n.LM,{"data-position":a,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"===a&&""),children:t}),(0,r.jsx)(h,{})]})})}function x({className:e,children:t,...a}){return(0,r.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),...a,children:[(0,r.jsx)("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center",children:(0,r.jsx)(n.VF,{children:(0,r.jsx)(o.A,{className:"pointer-events-none"})})}),(0,r.jsx)(n.p4,{children:t})]})}function p({className:e,...t}){return(0,r.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,r.jsx)(l.A,{})})}function h({className:e,...t}){return(0,r.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,r.jsx)(i.A,{})})}},54563:(e,t,a)=>{a.d(t,{Fc:()=>o,TN:()=>l});var r=a(29798);a(15814);var s=a(54366),n=a(5471);let i=(0,s.F)("group/alert relative grid w-full gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"}},defaultVariants:{variant:"default"}});function o({className:e,variant:t,...a}){return(0,r.jsx)("div",{"data-slot":"alert",role:"alert",className:(0,n.cn)(i({variant:t}),e),...a})}function l({className:e,...t}){return(0,r.jsx)("div",{"data-slot":"alert-description",className:(0,n.cn)("text-sm text-balance text-muted-foreground md:text-pretty [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:text-foreground [&_p:not(:last-child)]:mb-4",e),...t})}},57779:(e,t,a)=>{a.d(t,{default:()=>o});var r=a(29798),s=a(58913),n=a(75669);let i={mode:{label:"Mode",format:e=>e},defaultModel:{label:"Model",format:e=>e,mono:!0},baseUrl:{label:"Endpoint",format:e=>e,isLink:!0,mono:!0},costPerQuery:{label:"Cost / call",format:e=>0===e?"Free":`$${e.toFixed(4)}`},pricingUrl:{label:"Pricing",format:()=>"View pricing",isLink:!0},freeTier:{label:"Free tier",format:e=>e},freeMonthlyQuota:{label:"Free quota",format:e=>0===e?"—":e>=999999?"Unlimited":`${e.toLocaleString()} / mo`},searchTypes:{label:"Types",format:e=>e.join(", ")},formats:{label:"Formats",format:e=>e.join(", ")},maxMaxResults:{label:"Max results",format:e=>e},maxCharacters:{label:"Max chars",format:e=>e.toLocaleString()}};function o({config:e,provider:t,title:a="Provider Info"}){if(!e)return null;let l=Object.entries(i).filter(([t])=>void 0!==e[t]&&null!==e[t]&&""!==e[t]).map(([t,a])=>({key:t,label:a.label,value:a.format(e[t]),isLink:a.isLink,mono:a.mono,raw:e[t]})),d=t?.notice?.apiKeyUrl||t?.website,c=t?.notice?.text;return(0,r.jsx)(n.Zp,{className:"p-6",children:(0,r.jsxs)(n.Wu,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-3",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:a}),d&&(0,r.jsxs)("a",{href:d,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[(0,r.jsx)(s.default,{name:"open_in_new",className:"text-sm"}),"Get API Key"]})]}),(0,r.jsxs)("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-x-6 gap-y-2",children:[l.map(e=>(0,r.jsxs)("div",{className:"flex items-center gap-3 min-w-0",children:[(0,r.jsx)("span",{className:"text-xs text-muted-foreground w-28 shrink-0",children:e.label}),e.isLink?(0,r.jsx)("a",{href:e.raw,target:"_blank",rel:"noopener noreferrer",className:`text-sm text-primary hover:underline truncate ${e.mono?"font-mono":""}`,children:e.value}):(0,r.jsx)("span",{className:`text-sm text-foreground truncate ${e.mono?"font-mono":""}`,children:e.value})]},e.key)),c&&(0,r.jsxs)("div",{className:"flex items-start gap-3 min-w-0 sm:col-span-2",children:[(0,r.jsx)("span",{className:"text-xs text-muted-foreground w-28 shrink-0 mt-0.5",children:"Notice"}),(0,r.jsx)("span",{className:"text-sm text-foreground leading-relaxed",children:c})]})]})]})})}},58350:(e,t,a)=>{a.d(t,{CardSkeleton:()=>u,PageLoading:()=>d,Skeleton:()=>c,Spinner:()=>l,default:()=>m});var r=a(29798),s=a(13008),n=a(58913),i=a(99118),o=a(75669);function l({size:e="md",className:t}){return(0,r.jsx)(n.default,{name:"progress_activity",className:(0,s.cn)("animate-spin text-primary",{sm:"size-4",md:"size-6",lg:"size-8",xl:"size-12"}[e],t)})}function d({message:e="Loading..."}){return(0,r.jsxs)("div",{className:"fixed inset-0 z-50 flex flex-col items-center justify-center bg-background",children:[(0,r.jsx)(l,{size:"xl"}),(0,r.jsx)("p",{className:"mt-4 text-muted-foreground",children:e})]})}function c({className:e,...t}){return(0,r.jsx)(i.E,{className:e,...t})}function u({className:e}){return(0,r.jsx)(o.Zp,{"aria-hidden":!0,className:(0,s.cn)("h-full overflow-hidden",e),children:(0,r.jsx)(o.Wu,{children:(0,r.jsxs)("div",{className:"flex min-w-0 items-center gap-3",children:[(0,r.jsx)(c,{className:"size-10 shrink-0 rounded-xl"}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)(c,{className:"h-4 w-2/3"}),(0,r.jsxs)("div",{className:"mt-2 flex items-center gap-1.5",children:[(0,r.jsx)(c,{className:"h-5 w-20 rounded-full"}),(0,r.jsx)(c,{className:"h-5 w-14 rounded-full"})]})]}),(0,r.jsx)(c,{className:"size-4 shrink-0 rounded-full"})]})})})}function m({type:e="spinner",...t}){switch(e){case"page":return(0,r.jsx)(d,{...t});case"skeleton":return(0,r.jsx)(c,{...t});case"card":return(0,r.jsx)(u,{});default:return(0,r.jsx)(l,{...t})}}},58729:(e,t,a)=>{a.d(t,{default:()=>d});var r=a(29798),s=a(58913),n=a(15814),i=a(3537),o=a(18055),l=a(63523);function d({isOpen:e,onClose:t,title:a="Manual Configuration",configs:c=[]}){let{copy:u}=(0,l.C)(),[m,x]=(0,n.useState)(null);return(0,r.jsx)(i.default,{isOpen:e,onClose:t,title:a,size:"xl",children:(0,r.jsx)("div",{className:"flex flex-col gap-4",children:c.map((e,t)=>(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("span",{className:"text-sm font-medium text-foreground",children:e.filename}),(0,r.jsxs)(o.$,{variant:"ghost",size:"sm",onClick:()=>{var a;return a=e.content,void(u(a,`manualconfig-${t}`),x(t),setTimeout(()=>x(null),2e3))},children:[(0,r.jsx)(s.default,{name:m===t?"check":"content_copy",className:"text-[14px] mr-1"}),m===t?"Copied!":"Copy"]})]}),(0,r.jsx)("pre",{className:"px-3 py-2 bg-black/5 dark:bg-white/5 rounded font-mono text-xs overflow-x-auto whitespace-pre-wrap break-all max-h-60 overflow-y-auto border border-border",children:e.content})]},t))})})}},65461:(e,t,a)=>{a.d(t,{default:()=>u});var r=a(29798),s=a(15814),n=a(3537),i=a(77345),o=a(18055),l=a(53784),d=a(45111),c=a(13794);function u({isOpen:e,connection:t,proxyPools:a,onSave:m,onClose:x}){let[p,h]=(0,s.useState)({name:"",priority:1,apiKey:""}),[g,f]=(0,s.useState)({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[v,b]=(0,s.useState)(""),[j,y]=(0,s.useState)(!1),[k,w]=(0,s.useState)(null),[N,C]=(0,s.useState)(!1),[S,O]=(0,s.useState)(null),[F,W]=(0,s.useState)(!1);(0,s.useEffect)(()=>{if(t){h({name:t.name||"",priority:t.priority||1,apiKey:""}),"azure"===t.provider&&t.providerSpecificData&&f({azureEndpoint:t.providerSpecificData.azureEndpoint||"",apiVersion:t.providerSpecificData.apiVersion||"2024-10-01-preview",deployment:t.providerSpecificData.deployment||"",organization:t.providerSpecificData.organization||""});let e=c.Q2?.[t.provider];e?.regions&&b(t.providerSpecificData?.region||e.defaultRegion||e.regions[0]?.id||""),w(null),O(null)}},[t]);let E=t?.authType==="oauth",$=t?.provider==="azure",I=!!t&&((0,c.mq)(t.provider)||(0,c.gb)(t.provider)),z=t&&c.Q2?.[t.provider]?.regions||null,P=()=>{if(z&&v)return{...t?.providerSpecificData||{},region:v}},A=async()=>{if(t?.provider){y(!0),w(null);try{let e=await fetch(`/api/providers/${t.id}/test`,{method:"POST"}),a=await e.json();w(a.valid?"success":"failed")}catch{w("failed")}finally{y(!1)}}},_=async()=>{if(t?.provider&&p.apiKey){C(!0),O(null);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:p.apiKey,...$?{providerSpecificData:g}:{},...z?{providerSpecificData:P()}:{}})}),a=await e.json();O(a.valid?"success":"failed")}catch{O("failed")}finally{C(!1)}}},T=async()=>{if(t){W(!0);try{let e={name:p.name,priority:p.priority};if(!E&&p.apiKey){e.apiKey=p.apiKey;let a="success"===S;if(!a)try{C(!0),O(null);let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t.provider,apiKey:p.apiKey,...$?{providerSpecificData:g}:{},...z?{providerSpecificData:P()}:{}})});a=!!(await e.json()).valid,O(a?"success":"failed")}catch{O("failed")}finally{C(!1)}a&&(e.testStatus="active",e.lastError=null,e.lastErrorAt=null)}$&&(e.providerSpecificData={azureEndpoint:g.azureEndpoint,apiVersion:g.apiVersion,deployment:g.deployment,organization:g.organization}),z&&v&&(e.providerSpecificData=P()),await m(e)}finally{W(!1)}}};return t?(0,r.jsx)(n.default,{isOpen:e,title:"Edit Connection",onClose:x,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Name"}),(0,r.jsx)(i.p,{value:p.name,onChange:e=>h({...p,name:e.target.value}),placeholder:E?"Account name":"Production Key"})]}),E&&t.email&&(0,r.jsxs)("div",{className:"bg-sidebar/50 p-3 rounded-lg",children:[(0,r.jsx)("p",{className:"text-sm text-muted-foreground mb-1",children:"Email"}),(0,r.jsx)("p",{className:"font-medium",children:t.email})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Priority"}),(0,r.jsx)(i.p,{type:"number",value:p.priority,onChange:e=>h({...p,priority:Number.parseInt(e.target.value,10)||1})})]}),!E&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-1.5 flex-1",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"API Key"}),(0,r.jsx)(i.p,{type:"password",value:p.apiKey,onChange:e=>h({...p,apiKey:e.target.value}),placeholder:"Enter new API key"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Leave blank to keep the current API key."})]}),(0,r.jsx)("div",{className:"pt-6",children:(0,r.jsx)(o.$,{onClick:_,disabled:!p.apiKey||N||F,variant:"secondary",children:N?"Checking...":"Check"})})]}),S&&(0,r.jsx)(l.E,{variant:"success"===S?"default":"destructive",children:"success"===S?"Valid":"Invalid"})]}),$&&(0,r.jsxs)("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[(0,r.jsx)("h3",{className:"font-semibold mb-3 text-sm",children:"Azure OpenAI Configuration"}),(0,r.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Azure Endpoint"}),(0,r.jsx)(i.p,{value:g.azureEndpoint,onChange:e=>f({...g,azureEndpoint:e.target.value}),placeholder:"https://your-resource.openai.azure.com"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Your Azure OpenAI resource endpoint URL"})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Deployment Name"}),(0,r.jsx)(i.p,{value:g.deployment,onChange:e=>f({...g,deployment:e.target.value}),placeholder:"gpt-4"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"The deployment name in your Azure resource"})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"API Version"}),(0,r.jsx)(i.p,{value:g.apiVersion,onChange:e=>f({...g,apiVersion:e.target.value}),placeholder:"2024-10-01-preview"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Azure OpenAI API version to use"})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Organization"}),(0,r.jsx)(i.p,{value:g.organization,onChange:e=>f({...g,organization:e.target.value}),placeholder:"Organization ID"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Required for billing"})]})]})]}),z&&(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Region"}),(0,r.jsxs)(d.l6,{value:v,onValueChange:e=>b(e),children:[(0,r.jsx)(d.bq,{children:(0,r.jsx)(d.yv,{placeholder:"Select an option"})}),(0,r.jsx)(d.gC,{children:z.map(e=>(0,r.jsx)(d.eb,{value:e.id,children:e.label},e.id))})]})]}),!I&&!$&&(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[(0,r.jsx)(o.$,{onClick:A,variant:"secondary",disabled:j,children:j?"Testing...":"Test Connection"}),k&&(0,r.jsx)(l.E,{variant:"success"===k?"default":"destructive",children:"success"===k?"Valid":"Failed"})]}),(0,r.jsx)(o.$,{onClick:T,className:"w-full",disabled:F,children:F?"Saving...":"Save"})]})}):null}},69561:(e,t,a)=>{a.d(t,{default:()=>o});var r=a(29798),s=a(15814),n=a(75669),i=a(1352);function o(){let[e,t]=(0,s.useState)([]),[a,o]=(0,s.useState)(!0),[l,d]=(0,s.useState)(!0);(0,s.useEffect)(()=>{c()},[]),(0,s.useEffect)(()=>{let e;return l&&(e=setInterval(()=>{c(!1)},3e3)),()=>clearInterval(e)},[l]);let c=async(e=!0)=>{e&&o(!0);try{let e=await fetch("/api/usage/request-logs");if(e.ok){let a=await e.json();t(a)}}catch(e){console.error("Failed to fetch logs:",e)}finally{e&&o(!1)}};return(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsx)("h2",{className:"text-xl font-semibold",children:"Request Logs"}),(0,r.jsx)("div",{className:"flex items-center gap-2",children:(0,r.jsxs)("label",{className:"text-sm font-medium text-muted-foreground flex items-center gap-2 cursor-pointer",children:[(0,r.jsx)("span",{children:"Auto Refresh (3s)"}),(0,r.jsx)("div",{onClick:()=>d(!l),className:`relative inline-flex h-5 w-9 items-center rounded-full transition-colors focus:outline-none ${l?"bg-primary":"bg-muted border border-border"}`,children:(0,r.jsx)("span",{className:`inline-block h-3 w-3 transform rounded-full bg-white transition-transform ${l?"translate-x-5":"translate-x-1"}`})})]})})]}),(0,r.jsx)(n.Zp,{className:"overflow-hidden bg-black/5 dark:bg-black/20 p-6",children:(0,r.jsx)(n.Wu,{children:(0,r.jsx)("div",{className:"p-0 overflow-x-auto max-h-[600px] overflow-y-auto font-mono text-xs",children:a&&0===e.length?(0,r.jsx)("div",{className:"p-8 text-center text-muted-foreground",children:"Loading logs..."}):0===e.length?(0,r.jsx)("div",{className:"p-8 text-center text-muted-foreground",children:"No logs recorded yet."}):(0,r.jsxs)("table",{className:"w-full text-left border-collapse whitespace-nowrap",children:[(0,r.jsx)("thead",{className:"sticky top-0 bg-muted border-b border-border z-10",children:(0,r.jsxs)("tr",{children:[(0,r.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"DateTime"}),(0,r.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Model"}),(0,r.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Provider"}),(0,r.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Account"}),(0,r.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"In"}),(0,r.jsx)("th",{className:"px-3 py-2 border-r border-border",children:"Out"}),(0,r.jsx)("th",{className:"px-3 py-2",children:"Status"})]})}),(0,r.jsx)("tbody",{className:"divide-y divide-border/50",children:e.map((e,t)=>{let a=e.split(" | ");if(a.length<7)return null;let s=a[6],n=s.includes("PENDING"),o=s.includes("FAILED"),l=s.includes("OK");return(0,r.jsxs)("tr",{className:`hover:bg-primary/5 transition-colors ${n?"bg-primary/5":""}`,children:[(0,r.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-muted-foreground",children:a[0]}),(0,r.jsx)("td",{className:"px-3 py-1.5 border-r border-border font-medium",children:a[1]}),(0,r.jsx)("td",{className:"px-3 py-1.5 border-r border-border",children:(0,r.jsx)("span",{className:"px-1.5 py-0.5 rounded bg-muted border border-border text-[10px] uppercase font-bold",children:a[2]})}),(0,r.jsxs)(i.m_,{children:[(0,r.jsx)(i.k$,{asChild:!0,children:(0,r.jsx)("td",{className:"px-3 py-1.5 border-r border-border truncate max-w-[150px]",children:a[3]})}),(0,r.jsx)(i.ZI,{children:a[3]})]}),(0,r.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-right text-primary",children:a[4]}),(0,r.jsx)("td",{className:"px-3 py-1.5 border-r border-border text-right text-emerald-600",children:a[5]}),(0,r.jsx)("td",{className:`px-3 py-1.5 font-bold ${l?"text-emerald-600":o?"text-destructive":"text-primary animate-pulse"}`,children:s})]},t)})})]})})})}),(0,r.jsx)("div",{className:"text-[10px] text-muted-foreground italic",children:"Logs are loaded from the request history database."})]})}},70296:(e,t,a)=>{a.d(t,{default:()=>x});var r=a(29798),s=a(58913);a(15814);var n=a(54366),i=a(5471),o=a(56173);function l({className:e,orientation:t="horizontal",...a}){return(0,r.jsx)(o.bL,{"data-slot":"tabs","data-orientation":t,className:(0,i.cn)("group/tabs flex gap-2 data-horizontal:flex-col",e),...a})}let d=(0,n.F)("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-9 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none",{variants:{variant:{default:"bg-muted",line:"gap-1 bg-transparent"}},defaultVariants:{variant:"default"}});function c({className:e,...t}){return(0,r.jsx)(o.l9,{"data-slot":"tabs-trigger",className:(0,i.cn)("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4","group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent","data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground","after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",e),...t})}var u=a(13008);let m=function({className:e,variant:t="default",...a}){return(0,r.jsx)(o.B8,{"data-slot":"tabs-list","data-variant":t,className:(0,i.cn)(d({variant:t}),e),...a})};function x({options:e=[],value:t,onChange:a,size:n="md",className:i}){let o={sm:"h-7 text-xs",md:"h-9 text-sm",lg:"h-11 text-base"};return(0,r.jsx)(l,{value:t,onValueChange:a,className:(0,u.cn)("overflow-x-auto",i),children:(0,r.jsx)(m,{children:e.map(e=>(0,r.jsxs)(c,{value:e.value,className:o[n],children:[e.icon&&(0,r.jsx)(s.default,{name:e.icon,className:"text-[16px] mr-1.5"}),e.label]},e.value))})})}},75862:(e,t,a)=>{a.d(t,{default:()=>o});var r=a(29798),s=a(58913),n=a(80159),i=a(1352);function o({caps:e,className:t="",colorOverride:a,size:l=16}){if(!e)return null;let d=Object.keys(n.bs).filter(t=>e[t]);return 0===d.length?null:(0,r.jsx)("span",{className:`inline-flex items-center gap-0.5 ${t}`,children:d.map(e=>(0,r.jsxs)(i.m_,{children:[(0,r.jsx)(i.k$,{asChild:!0,children:(0,r.jsx)("span",{className:"relative inline-flex",children:(0,r.jsx)(s.default,{name:n.bs[e].icon,className:`leading-none cursor-help ${a||n.bs[e].color}`,style:{fontSize:`${l}px`}})})}),(0,r.jsxs)(i.ZI,{children:[n.bs[e].label," — ",n.bs[e].desc]})]},e))})}},86920:(e,t,a)=>{a.d(t,{default:()=>m});var r=a(29798),s=a(58913),n=a(15814),i=a(69221),o=a(3537),l=a(92802),d=a(77345),c=a(18055);let u="https://gitlab.com";function m({isOpen:e,providerInfo:t,onSuccess:a,onClose:x}){let p,[h,g]=(0,n.useState)(null),[f,v]=(0,n.useState)(u),[b,j]=(0,n.useState)(""),[y,k]=(0,n.useState)(""),[w,N]=(0,n.useState)(""),[C,S]=(0,n.useState)(!1),[O,F]=(0,n.useState)(null),[W,E]=(0,n.useState)(!1),[$,I]=(0,n.useState)(null),z=()=>{g(null),v(u),j(""),k(""),N(""),F(null),S(!1),E(!1),I(null),x()},P=async()=>{if(!w.trim())return void F("Personal Access Token is required");S(!0),F(null);try{let e=await fetch("/api/oauth/gitlab/pat",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:w.trim(),baseUrl:f.trim()||u})}),t=await e.json();if(!e.ok)throw Error(t.error||"Authentication failed");a?.(),z()}catch(e){F(e.message)}finally{S(!1)}};return e?W&&$?(0,r.jsx)(l.default,{isOpen:!0,provider:"gitlab",providerInfo:t,oauthMeta:$,idcConfig:void 0,onSuccess:()=>{a?.(),z()},onClose:()=>{E(!1),I(null)}}):(0,r.jsx)(o.default,{isOpen:e,title:"Connect GitLab Duo",onClose:z,size:"lg",footer:void 0,className:void 0,children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[!h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Choose how to authenticate with GitLab Duo:"}),(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-3",children:[(0,r.jsxs)("button",{onClick:()=>g("oauth"),className:"flex flex-col items-center gap-2 p-4 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-colors text-left",children:[(0,r.jsx)(s.default,{name:"lock_open",className:"text-2xl text-primary"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium",children:"OAuth App"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Use a GitLab OAuth application"})]})]}),(0,r.jsxs)("button",{onClick:()=>g("pat"),className:"flex flex-col items-center gap-2 p-4 rounded-lg border border-border hover:border-primary hover:bg-primary/5 transition-colors text-left",children:[(0,r.jsx)(s.default,{name:"key",className:"text-2xl text-primary"}),(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{className:"text-sm font-medium",children:"Personal Access Token"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"Use a GitLab PAT with api scope"})]})]})]})]}),"oauth"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Create an OAuth app at"," ",(0,r.jsx)("a",{href:`${f.trim()||u}/-/profile/applications`,target:"_blank",rel:"noreferrer",className:"text-primary underline",children:"GitLab Applications"})," ","with redirect URI"," ",(0,r.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:(p=window.location.port||("https:"===window.location.protocol?"443":"80"),`http://localhost:${p}/callback`)})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"GitLab Base URL"}),(0,r.jsx)(d.p,{value:f,onChange:e=>v(e.target.value),placeholder:u})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Client ID"}),(0,r.jsx)(d.p,{value:b,onChange:e=>j(e.target.value),placeholder:"Your OAuth application client ID"})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Client Secret (optional for PKCE)"}),(0,r.jsx)(d.p,{value:y,onChange:e=>k(e.target.value),placeholder:"Leave empty for public PKCE app"})]}),O&&(0,r.jsx)("p",{className:"text-sm text-red-500",children:O}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(c.$,{onClick:()=>{b.trim()?(F(null),I({baseUrl:f.trim()||u,clientId:b.trim(),clientSecret:y.trim()}),E(!0)):F("Client ID is required")},className:"w-full",disabled:!b.trim(),children:"Authorize"}),(0,r.jsx)(c.$,{onClick:()=>{g(null),F(null)},variant:"ghost",className:"w-full",children:"Back"})]})]}),"pat"===h&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("p",{className:"text-xs text-muted-foreground",children:["Create a PAT at"," ",(0,r.jsx)("a",{href:`${f.trim()||u}/-/user_settings/personal_access_tokens`,target:"_blank",rel:"noreferrer",className:"text-primary underline",children:"GitLab Access Tokens"})," ","with scopes: ",(0,r.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"api"}),","," ",(0,r.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"read_user"}),", and"," ",(0,r.jsx)("code",{className:"bg-sidebar px-1 rounded text-xs",children:"ai_features"}),"."]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"GitLab Base URL"}),(0,r.jsx)(d.p,{value:f,onChange:e=>v(e.target.value),placeholder:u})]}),(0,r.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,r.jsx)("label",{className:"text-sm font-medium",children:"Personal Access Token"}),(0,r.jsx)(d.p,{value:w,onChange:e=>N(e.target.value),placeholder:"glpat-xxxxxxxxxxxxxxxxxxxx",type:"password"})]}),O&&(0,r.jsx)("p",{className:"text-sm text-red-500",children:O}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsxs)(c.$,{onClick:P,className:"w-full",disabled:!w.trim()||C,children:[C&&(0,r.jsx)(i.A,{className:"animate-spin"}),"Connect"]}),(0,r.jsx)(c.$,{onClick:()=>{g(null),F(null)},variant:"ghost",className:"w-full",children:"Back"})]})]})]})}):null}},88739:(e,t,a)=>{a.d(t,{A:()=>o});var r=a(58013),s=a(47353),n=a(51660);function i(){document.documentElement.classList.remove("dark")}let o=(0,r.v)()((0,s.Zr)(e=>({theme:"light",setTheme:()=>{e({theme:"light"}),i()},toggleTheme:()=>{e({theme:"light"}),i()},initTheme:()=>{e({theme:"light"}),i()}}),{name:n.B2.storageKey}))},90619:(e,t,a)=>{a.d(t,{y:()=>y});var r=a(15814),s=a(31830);let n="[-_/:.]",i=RegExp(`(^|${n})(image|img)(${n}|$)|stable-image|gen[0-9]_image|nanobanana|imagine|t2v|i2v|flux|dall|sdxl|diffusion|embed|rerank|guard|moderation|tts|stt|whisper|voice|speech|audio`,"i"),o=RegExp(`(^|${n})(vision|vl|vlm|multimodal|omni|visual)(${n}|$)|[0-9]\\.[0-9]+v(${n}|$)|(^|${n})glm-[0-9]+v(${n}|$)|(^|[-_/:.])(llava|pixtral|internvl|cogvlm|minicpm-v|moondream|idefics|fuyu)`,"i"),l={vision:!1,pdf:!1,audioInput:!1,videoInput:!1,imageOutput:!1,audioOutput:!1,search:!1,tools:!0,reasoning:!1,thinkingFormat:null,thinkingCanDisable:!0,thinkingRange:null,thinkingEffortSupported:!1,contextWindow:2e5,maxOutput:64e3},d={"claude-fable-5-1":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},"claude-opus-5":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-5-thinking":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-5-agentic":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-5-thinking-agentic":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.7":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-7":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.8":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-8":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4.8-thinking":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-opus-4-8-thinking":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4.6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4-6":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-5":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-5-thinking":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-5-agentic":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-5-thinking-agentic":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3},"gpt-image-1":{imageOutput:!0,tools:!1},"glm-5.3-flash":{vision:!0,videoInput:!0,pdf:!0,reasoning:!0,thinkingFormat:"zai",thinkingEffortSupported:!0,contextWindow:1e6,maxOutput:131072},"glm-4.6v":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"zai",contextWindow:128e3,maxOutput:32768},"glm-4.5v":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"zai",contextWindow:64e3,maxOutput:16384},"deepseek-v4-flash-vision-exp":{vision:!0,reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3},"deepseek-v4.1-flash":{vision:!0,reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3},"deepseek-flash":{vision:!0,reasoning:!0,thinkingFormat:"deepseek",contextWindow:128e3,maxOutput:64e3},"vision-model":{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6},"coder-model":{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6},"kimi-k3":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:131072},k3:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:131072},"kimi-for-coding":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536},"kimi-for-coding-highspeed":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536},"kimi-k2.7-code":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536},"kimi-k2.7-code-highspeed":{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536},"muse-spark-1.2-contributor-free":{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:1048576,maxOutput:131072},"muse-spark-1.3-contributor-free":{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:1048576,maxOutput:131072},"union-alpha":{vision:!0,contextWindow:262144,maxOutput:131072}},c={vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:372e3,maxOutput:128e3},u={vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:272e3,maxOutput:128e3},m={nvidia:{"minimaxai/minimax-m2.7":{reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:131072},"minimaxai/minimax-m3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:512e3,maxOutput:131072},"z-ai/glm-5.2":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:128e3},"deepseek-ai/deepseek-v4-pro":{reasoning:!0,thinkingFormat:"openai",contextWindow:1e6,maxOutput:65536},"deepseek-ai/deepseek-v4-flash":{reasoning:!0,thinkingFormat:"openai",contextWindow:1e6,maxOutput:65536}},codex:{"gpt-6-astra":{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:272e3,maxOutput:128e3},"gpt-5.6-sol":c,"gpt-5.6-sol-review":c,"gpt-5.6-terra":u,"gpt-5.6-terra-review":u,"gpt-5.6-luna":u,"gpt-5.6-luna-review":u},"codebuddy-cn":{"glm-5.2":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:48e3},"glm-5.1":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:48e3},"glm-5.0":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"glm-5v-turbo":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:64e3},"glm-4.7":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:48e3},"minimax-m3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:512e3,maxOutput:128e3},"kimi-k2.7":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},"kimi-k2.6":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:32e3},hy3:{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:192e3,maxOutput:64e3},"hy4-preview":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:64e3},"glm-5.3":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:48e3},"glm-5.3-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:32e3},"kimi-k3-1":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:32e3},"deepseek-v4-pro":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:5e4},"deepseek-v4.1-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:128e3}},"codebuddy-intl":{"deepseek-v4.1-flash":{vision:!0,reasoning:!0,thinkingFormat:"openai",thinkingCanDisable:!0,contextWindow:1e6,maxOutput:128e3}},qoder:{ultimate:{vision:!0,reasoning:!0,thinkingFormat:"claude-adaptive",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},performance:{vision:!0,reasoning:!0,thinkingFormat:"claude-adaptive",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},dmodel:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},dfmodel:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},gmodel:{reasoning:!0,thinkingFormat:"zai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},gfmodel:{vision:!0,reasoning:!0,thinkingFormat:"zai",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:128e3},kmodel_latest:{vision:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},kmodel:{vision:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:256e3,maxOutput:65536},mmodel:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:512e3},qmodel_latest:{vision:!0,reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},qmodel:{vision:!0,reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},qfmodel:{vision:!0,reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536},qmodel_38max:{vision:!0,reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:1e6,maxOutput:65536}},poolside:{"laguna-s-2.1":{reasoning:!0,thinkingFormat:"openai",contextWindow:1e6,maxOutput:32e3},"laguna-xs-2.1":{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:32e3}},ollama:{"deepseek-v4.1-flash:cloud":{vision:!0,reasoning:!0,thinkingFormat:"deepseek",contextWindow:1e6,maxOutput:384e3}}},x=[{pattern:"*claude*opus-5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude*opus-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*opus-4.8*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*sonnet-4.7*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-adaptive"}},{pattern:"*claude*haiku*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*opus*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*sonnet*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*claude*fable*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude*mythos*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget",contextWindow:1e6,maxOutput:128e3}},{pattern:"*claude-3*",caps:{vision:!0}},{pattern:"*claude*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"claude-budget"}},{pattern:"*gemini*image*",caps:{vision:!0,imageOutput:!0,contextWindow:1048576}},{pattern:"*gemini-3.8*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-3.7*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-3*pro*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65535}},{pattern:"*gemini-3*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-level",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2.5*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,search:!0,thinkingFormat:"gemini-budget",thinkingRange:{min:0,max:24576},contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini-2*",caps:{vision:!0,audioInput:!0,videoInput:!0,search:!0,contextWindow:1048576,maxOutput:65536}},{pattern:"*gemini*",caps:{vision:!0,search:!0,contextWindow:1048576}},{pattern:"*gemma*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*nanobanana*",caps:{vision:!0,imageOutput:!0}},{pattern:"*gpt-6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:272e3,maxOutput:128e3}},{pattern:"*gpt-5*image*",caps:{imageOutput:!0}},{pattern:"*gpt-5*codex*",caps:{reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:4e5,maxOutput:128e3}},{pattern:"*gpt-4o*",caps:{vision:!0,search:!0,contextWindow:128e3,maxOutput:16384}},{pattern:"*gpt-4.1*",caps:{vision:!0,contextWindow:1e6,maxOutput:32768}},{pattern:"*gpt-4-turbo*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*gpt-4*",caps:{contextWindow:128e3}},{pattern:"*gpt-3.5*",caps:{contextWindow:16385,maxOutput:4096}},{pattern:"*gpt-oss*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1-mini*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:128e3}},{pattern:"*o1*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*o4*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:1e5}},{pattern:"*grok*image*",caps:{imageOutput:!0}},{pattern:"*grok-code*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-4.6*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:5e5,maxOutput:5e5}},{pattern:"*grok-4.5*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:5e5,maxOutput:64e3}},{pattern:"*grok-4*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*grok-3*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:131072}},{pattern:"*grok*",caps:{vision:!0,reasoning:!0,search:!0,thinkingFormat:"openai",contextWindow:256e3}},{pattern:"*qwen*vl*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwen*omni*",caps:{vision:!0,audioInput:!0,videoInput:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:262144,maxOutput:65536}},{pattern:"*qwen*coder*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6}},{pattern:"*qwen*max*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen3.5*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen3.6*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen3.7*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*plus*",caps:{vision:!0,reasoning:!0,thinkingFormat:"qwen",contextWindow:1e6,maxOutput:65536}},{pattern:"*qwen*235b*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*qwq*",caps:{reasoning:!0,thinkingFormat:"qwen",thinkingCanDisable:!1,contextWindow:131072}},{pattern:"*qwen*",caps:{reasoning:!0,thinkingFormat:"qwen",contextWindow:262144}},{pattern:"*kimi*k3*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:1048576,maxOutput:131072}},{pattern:"*kimi*for-coding*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536}},{pattern:"*kimi*k2.7*code*",caps:{vision:!0,videoInput:!0,reasoning:!0,thinkingFormat:"kimi",thinkingCanDisable:!1,contextWindow:262144,maxOutput:65536}},{pattern:"*kimi*k2*",caps:{vision:!0,reasoning:!0,thinkingFormat:"kimi",contextWindow:262144,maxOutput:262144}},{pattern:"*kimi*",caps:{reasoning:!0,thinkingFormat:"kimi",contextWindow:262144}},{pattern:"*glm-5.3*",caps:{reasoning:!0,thinkingFormat:"zai",thinkingEffortSupported:!0,contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-5.2*",caps:{reasoning:!0,thinkingFormat:"zai",thinkingEffortSupported:!0,contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-5*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4.7*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5,maxOutput:128e3}},{pattern:"*glm-4*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*glm*",caps:{reasoning:!0,thinkingFormat:"zai",contextWindow:2e5}},{pattern:"*deepseek-v4.*",caps:{vision:!0,reasoning:!0,thinkingFormat:"deepseek",thinkingEffortSupported:!0,contextWindow:1e6,maxOutput:128e3}},{pattern:"*deepseek-v4*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingEffortSupported:!0,contextWindow:1e6,maxOutput:384e3}},{pattern:"*reasoner*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-r*",caps:{reasoning:!0,thinkingFormat:"deepseek",thinkingCanDisable:!1,contextWindow:128e3}},{pattern:"*deepseek-chat*",caps:{contextWindow:128e3}},{pattern:"*deepseek*",caps:{reasoning:!0,thinkingFormat:"deepseek",contextWindow:128e3}},{pattern:"*minimax*image*",caps:{imageOutput:!0}},{pattern:"*minimax-m3*",caps:{vision:!0,reasoning:!0,thinkingFormat:"minimax",contextWindow:1048576,maxOutput:512e3}},{pattern:"*minimax-m2.7*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:204800,maxOutput:131072}},{pattern:"*minimax*",caps:{reasoning:!0,thinkingFormat:"minimax",thinkingCanDisable:!1,contextWindow:2e5,maxOutput:131072}},{pattern:"*mimo*v2.5*",caps:{vision:!0,audioInput:!0,videoInput:!0,contextWindow:1048576,maxOutput:131072}},{pattern:"*mimo*omni*",caps:{vision:!0,audioInput:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*mimo*",caps:{vision:!0,contextWindow:262144,maxOutput:131072}},{pattern:"*llama-4*",caps:{vision:!0,contextWindow:1e6}},{pattern:"*llama*",caps:{contextWindow:128e3}},{pattern:"*codestral*",caps:{contextWindow:256e3}},{pattern:"*mistral-large*",caps:{vision:!0,contextWindow:256e3}},{pattern:"*mistral*",caps:{contextWindow:128e3}},{pattern:"*command-a-vision*",caps:{vision:!0,contextWindow:128e3}},{pattern:"*command*",caps:{contextWindow:128e3}},{pattern:"*sonar*",caps:{search:!0,contextWindow:128e3}},{pattern:"*pplx*",caps:{search:!0,contextWindow:128e3}},{pattern:"*perplexity*",caps:{search:!0,contextWindow:128e3}},{pattern:"*laguna-s-2.1*free*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:32e3}},{pattern:"*laguna-s-2.1*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:1e6,maxOutput:32e3}},{pattern:"*laguna*",caps:{reasoning:!0,thinkingFormat:"openai",contextWindow:2e5,maxOutput:32e3}},{pattern:"*muse*spark*",caps:{vision:!0,reasoning:!0,thinkingFormat:"openai",contextWindow:1048576,maxOutput:131072}},{pattern:"*hunyuan*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"hy3*",caps:{reasoning:!0,thinkingFormat:"hunyuan",contextWindow:262144,maxOutput:262144}},{pattern:"*step-*",caps:{reasoning:!0,thinkingFormat:"step",contextWindow:128e3}},{pattern:"*nemotron*",caps:{reasoning:!0,contextWindow:128e3}},{pattern:"*ling-*",caps:{reasoning:!0,contextWindow:128e3}}],p=["vision","pdf","audioInput","videoInput"],h=null;function g(e,t,a){let r={...l,...e},s=h||("u"<typeof globalThis?null:h=globalThis.__9rCatalogSource||null);if(s){let e=s.getModalities(t,a);if(e)for(let t of p)!0===e[t]&&(r[t]=!0);let n=s.getLimits(t,a);n&&(n.contextWindow>0&&(r.contextWindow=n.contextWindow),n.maxOutput>0&&(r.maxOutput=n.maxOutput))}return!r.vision&&function(e){if(!e)return!1;let t=String(e).toLowerCase();return!i.test(t)&&o.test(t)}(a)&&(r.vision=!0),r}let f=new Set(["deepseek/deepseek-v4-pro","deepseek/deepseek-v4-flash","deepseek/deepseek-v4-flash-fast","zai-org/glm-5.3","zai-org/glm-5.2","zai-org/glm-5.2-fast","zai-org/glm-5.1","zai-org/glm-5","minimaxai/minimax-m2.7","minimax/minimax-m2.7-free","minimaxai/minimax-m2.5","xiaomi/mimo-v2.5-pro","qwen/qwen3.6-max-preview","qwen/qwen3.7-max","meituan/longcat-2.0:free","stepfun/step-3.5-flash","tencent/hy4-preview","tencent/hy3","tencent/hy3-paid","nvidia/nemotron-3-ultra-550b-a55b","poolside/laguna-s-2.1-free","inclusionai/ling-3.0-flash-free","inclusionai/ling-3.0-flash-sante:free"]),v=null,b=null;function j(){return v?Promise.resolve(v):b||(b=fetch("/api/models").then(async e=>{if(!e.ok)throw Error(`models ${e.status}`);return v=function(e){let t={},a={};for(let r of e||[])r.caps&&(r.fullModel&&(t[r.fullModel]=r.caps),r.routedModel&&(t[r.routedModel]=r.caps),r.model&&(a[r.model]=r.caps));return{byFull:t,byId:a}}((await e.json()).models)}).catch(()=>({byFull:{},byId:{}})).finally(()=>{b=null}))}function y(){let[e,t]=(0,r.useState)(()=>v?.byFull||{}),[a,n]=(0,r.useState)(()=>v?.byId||{});return(0,r.useEffect)(()=>{let e=!0,a=a=>{e&&(t(a.byFull),n(a.byId))};v?a(v):j().then(a);let r=()=>{v=null,j().then(a)};return window.addEventListener("customModelChanged",r),()=>{e=!1,window.removeEventListener("customModelChanged",r)}},[]),{getCaps:(0,r.useCallback)(t=>(function(e,t,a){if(!a)return null;if(e[a])return e[a];let r=a.includes("/")?a.slice(a.indexOf("/")+1):a;if(t[r])return t[r];let n=function(e,t){if(!t)return{...l};let a=t.includes("/")?t.split("/").pop():t;if("commandcode"===e||"cmc"===e){let e=m.commandcode;return e?.[t]?{...l,...e[t]}:e?.[a]?{...l,...e[a]}:{...l,reasoning:!0,thinkingFormat:"commandcode",thinkingEffortSupported:!0,vision:!function(e){let t=String(e||"").toLowerCase();if(f.has(t))return!0;for(let e of f){let a=e.includes("/")?e.slice(e.lastIndexOf("/")+1):e;if(t===a||t.endsWith("/"+a))return!0}return!1}(t),contextWindow:1e6,maxOutput:384e3}}if(e){let r=m[e];if(r?.[t])return{...l,...r[t]};if(r?.[a])return{...l,...r[a]}}if(d[a])return{...l,...d[a]};if(d[t])return{...l,...d[t]};for(let{pattern:r,caps:n}of x)if((0,s.gH)(r,a)||(0,s.gH)(r,t))return g(n,e,t);return g(null,e,t)}(a.includes("/")?a.slice(0,a.indexOf("/")):null,r);return{vision:n.vision,search:n.search,reasoning:n.reasoning,contextWindow:n.contextWindow,maxOutput:n.maxOutput}})(e,a,t),[e,a])}}},92802:(e,t,a)=>{a.d(t,{default:()=>m});var r=a(29798),s=a(58913),n=a(15814),i=a(3537),o=a(77345),l=a(18055),d=a(63523);let c=new Set(["trae","windsurf","zed"]),u={trae:{label:"Cloud-IDE-JWT",instructions:"Sign in at trae.ai (or solo.trae.ai), open DevTools → Network, copy the Cloud-IDE-JWT token from any request's Authorization header (~14-day lifetime).",placeholder:"Paste Cloud-IDE-JWT here...",ideName:"Trae",ideOptional:!0},windsurf:{label:"Windsurf API key",instructions:'In the Windsurf/VS Code IDE, run the "Windsurf: Provide Auth Token" command, then copy the displayed sk-ws-... key.',placeholder:"Paste sk-ws-... key here...",ideName:"Windsurf",ideOptional:!1}};function m({isOpen:e,provider:t,providerInfo:a,onSuccess:x,onClose:p,oauthMeta:h}){let[g,f]=(0,n.useState)("waiting"),[v,b]=(0,n.useState)(null),[j,y]=(0,n.useState)(""),[k,w]=(0,n.useState)(null),[N,C]=(0,n.useState)(!1),[S,O]=(0,n.useState)(null),[F,W]=(0,n.useState)(!1),[E,$]=(0,n.useState)("browser"),[I,z]=(0,n.useState)(""),[P,A]=(0,n.useState)(null),_=(0,n.useRef)(null),T=(0,n.useRef)(!1),D=(0,n.useRef)(!1),L=(0,n.useRef)({proxyStarted:!1,proxyProvider:null,stopSent:!1}),U=(0,n.useRef)(x),M=(0,n.useRef)(p),q=(0,n.useRef)(e),R=(0,n.useRef)(null),{copied:K,copy:V}=(0,d.C)(),[J,Z]=(0,n.useState)(!1),[B,G]=(0,n.useState)("/callback?code=..."),Q=(0,n.useRef)(!1);(0,n.useEffect)(()=>{Z("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname),G(`${window.location.origin}/callback?code=...`)},[]);let H=(0,n.useCallback)(async(e,a)=>{if(v)try{let r=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,redirectUri:v.redirectUri,codeVerifier:v.codeVerifier,state:a,...v.systemId?{systemId:v.systemId}:{},...h?{meta:h}:{}})}),s=await r.json();if(!r.ok)throw Error(s.error);f("success"),U.current?.()}catch(e){w(e.message),f("error")}},[v,t,h]),X=(0,n.useCallback)(async e=>{if(v?.state)try{let t=await fetch("/api/oauth/xai/manual-code",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,state:v.state})}),a=await t.json();if(!t.ok)throw Error(a.error);f("success"),U.current?.()}catch(e){w(e.message),f("error")}},[v]),Y=(0,n.useCallback)(async(e,a,r,s,n)=>{T.current=!1,W(!0);let i=Date.now()+(Number.isFinite(n)&&n>0?n:12e4);for(;Date.now()<i;){if(T.current){console.log("[OAuthModal] Polling aborted"),W(!1);return}if(await new Promise(e=>setTimeout(e,1e3*r)),T.current){console.log("[OAuthModal] Polling aborted after sleep"),W(!1);return}try{let n=await fetch(`/api/oauth/${t}/poll`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({deviceCode:e,codeVerifier:a,extraData:s})}),i=await n.json();if(i.success){T.current=!0,f("success"),W(!1),U.current?.();return}if("expired_token"===i.error||"access_denied"===i.error)throw Error(i.errorDescription||i.error);"slow_down"===i.error&&(r=Math.min(r+5,30))}catch(e){w(e.message),f("error"),W(!1);return}}w("Authorization timeout"),f("error"),W(!1)},[t]),ee=(0,n.useCallback)(()=>{let e=L.current;e.proxyStarted&&!e.stopSent&&e.proxyProvider&&(e.stopSent=!0,fetch(`/api/oauth/${e.proxyProvider}/stop-proxy`).catch(()=>{}))},[]),et=(0,n.useCallback)(async e=>{let t=await fetch(`/api/oauth/${e}/start-proxy`),a=await t.json();if(!t.ok||!a.success||!a.callbackUrl)throw Error(a.reason||a.error||`Failed to start ${e} callback server`);if(L.current.proxyStarted=!0,L.current.proxyProvider=e,L.current.stopSent=!1,!q.current)return void ee();let r=new URL(`/api/oauth/${e}/authorize`,window.location.origin);r.searchParams.set("redirect_uri",a.callbackUrl);let s=await fetch(r),n=await s.json();if(!s.ok)throw ee(),Error(n.error);if(!q.current)return void ee();let i={state:n.state};n.codeVerifier&&(i.codeVerifier=n.codeVerifier),n.systemId&&(i.systemId=n.systemId);let o=await fetch(`/api/oauth/${e}/register-session`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),l=null;try{l=await o.json()}catch{l=null}if(!o.ok||l?.success===!1)throw ee(),Error(l?.error||"Failed to register login session; please retry");q.current&&(b({...n,proxyProvider:e}),f("waiting"),_.current=window.open(n.authUrl,"oauth_popup","width=600,height=700"),_.current||f("input"))},[ee]),ea=async()=>{if(t)try{let e;if(w(null),c.has(t)&&"browser"===E)return void await et(t);if(["github","kilocode","codebuddy-cn","codebuddy-intl","qoder","grok-cli"].includes(t)){C(!0),f("waiting");let e=new URL(`/api/oauth/${t}/device-code`,window.location.origin),a=await fetch(e.toString()),r=await a.json();if(!a.ok)throw Error(r.error);O(r);let s=r.verification_uri_complete||r.verification_uri;s&&window.open(s,"_blank","noopener,noreferrer");let n="qoder"===t?{_qoderNonce:r._qoderNonce,_qoderMachineId:r._qoderMachineId,_qoderVerifier:r.codeVerifier}:null;Y(r.device_code,r.codeVerifier,r.interval||5,n,Number.isFinite(r.expires_in)&&r.expires_in>0?1e3*r.expires_in:void 0);return}let a=window.location.port||("https:"===window.location.protocol?"443":"80");e="codex"===t?"http://localhost:1455/auth/callback":"xai"===t?"http://127.0.0.1:56121/callback":`http://localhost:${a}/callback`;let r=new URL(`/api/oauth/${t}/authorize`,window.location.origin);r.searchParams.set("redirect_uri",e),h&&Object.entries(h).forEach(([e,t])=>{t&&r.searchParams.set(e,t)});let s=await fetch(r.toString()),n=await s.json();if(!s.ok)throw Error(n.error);let i=!1,o=!1;if("codex"===t)try{let t=new URL("/api/oauth/codex/start-proxy",window.location.origin);t.searchParams.set("app_port",a),t.searchParams.set("state",n.state),t.searchParams.set("code_verifier",n.codeVerifier),t.searchParams.set("redirect_uri",e);let r=await fetch(t.toString()),s=await r.json();i=s.success,o=!!s.serverSide}catch{i=!1}let l=!1,d=!1;if("xai"===t)try{let t=new URL("/api/oauth/xai/start-proxy",window.location.origin);t.searchParams.set("app_port",a),t.searchParams.set("state",n.state),t.searchParams.set("code_verifier",n.codeVerifier),t.searchParams.set("redirect_uri",e);let r=await fetch(t.toString()),s=await r.json();if(l=s.success,d=!!s.serverSide,!l&&"port_busy"===s.reason)throw Error("Port 56121 in use; close the conflicting process and retry")}catch(e){if(e?.message)throw e;l=!1}if(b({...n,redirectUri:e,codexServerSide:o,xaiServerSide:d}),("codex"===t&&i||"xai"===t&&l)&&(L.current.proxyStarted=!0,L.current.proxyProvider=t,L.current.stopSent=!1),!n.authUrl){if("device_code"===n.flowType)throw Error(`Provider ${t} uses device-code login but is not wired in the OAuth modal device-code list`);throw Error("No authorization URL returned from OAuth provider")}"codex"===t&&i||"xai"===t&&l||J&&"codex"!==t&&"xai"!==t?(f("waiting"),_.current=window.open(n.authUrl,"oauth_popup","width=600,height=700"),_.current||f("input")):(f("input"),window.open(n.authUrl,"_blank"))}catch(e){w(e.message),f("error")}};(0,n.useEffect)(()=>{U.current=x,M.current=p,q.current=e,R.current=ea}),(0,n.useEffect)(()=>{e&&t&&(D.current||(D.current=!0,b(null),y(""),w(null),C(!1),O(null),W(!1),$("browser"),z(""),A(null),T.current=!1,L.current={proxyStarted:!1,proxyProvider:null,stopSent:!1},u[t]&&fetch(`/api/oauth/${t}/ide-status`).then(e=>e.json()).then(e=>A(e)).catch(()=>A({installed:!1,path:null})),R.current()))},[e,t]),(0,n.useEffect)(()=>{e||(T.current=!0,D.current=!1,ee(),L.current={proxyStarted:!1,proxyProvider:null,stopSent:!1})},[e,t,ee]),(0,n.useEffect)(()=>{let e=v?.codexServerSide?"codex":v?.xaiServerSide?"xai":v?.proxyProvider?v.proxyProvider:null;if(!e||!v?.state||Q.current)return;let t=!1,a=0,r=async()=>{if(!t&&!Q.current){a+=1;try{let a=await fetch(`/api/oauth/${e}/poll-status?state=${encodeURIComponent(v.state)}`),r=await a.json();if(t||Q.current)return;if("done"===r.status){Q.current=!0,f("success"),U.current?.();return}if("error"===r.status){Q.current=!0,w(r.error||"Authentication failed"),f("error");return}}catch{}if(a>=200){Q.current=!0,w("Authentication timeout"),f("error");return}setTimeout(r,1500)}};return setTimeout(r,1500),()=>{t=!0}},[v]),(0,n.useEffect)(()=>{let e;if(!v)return;Q.current=!1;let t=async e=>{if(Q.current)return;let{code:t,token:a,state:r,error:s,errorDescription:n}=e;if(s){Q.current=!0,w(n||s),f("error");return}(a||t)&&(Q.current=!0,await H(a||t,r))},a=e=>{let a=e.origin.includes("localhost")||e.origin.includes("127.0.0.1"),r=e.origin===window.location.origin;(a||r)&&e.data?.type==="oauth_callback"&&t(e.data.data)};window.addEventListener("message",a);try{(e=new BroadcastChannel("oauth_callback")).onmessage=e=>t(e.data)}catch(e){console.log("BroadcastChannel not supported")}let r=e=>{if("oauth_callback"===e.key&&e.newValue)try{let a=JSON.parse(e.newValue);t(a),localStorage.removeItem("oauth_callback")}catch(e){console.log("Failed to parse localStorage data")}};window.addEventListener("storage",r);try{let e=localStorage.getItem("oauth_callback");if(e){let a=JSON.parse(e);a.timestamp&&Date.now()-a.timestamp<3e4&&t(a),localStorage.removeItem("oauth_callback")}}catch{}return()=>{window.removeEventListener("message",a),window.removeEventListener("storage",r),e&&e.close()}},[v,H]);let er=async()=>{try{if(w(null),"paste-token"===E&&u[t]){let e=I.trim();if(!e)throw Error("Missing token");let a=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e})}),r=await a.json();if(!a.ok)throw Error(r.error);f("success"),U.current?.();return}let e=j.trim();if(c.has(t)&&e){let a=await fetch(`/api/oauth/${t}/exchange`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:e,state:v?.state,...v?.redirectUri?{redirectUri:v.redirectUri}:{},...v?.codeVerifier?{codeVerifier:v.codeVerifier}:{},...v?.systemId?{systemId:v.systemId}:{}})}),r=await a.json();if(!a.ok)throw Error(r.error);f("success"),U.current?.();return}if(e.startsWith("eyJ")&&e.includes("."))return void await H(e,null);if("xai"===t&&e&&!e.includes("://")&&!e.includes("?")&&!e.includes("code="))return void await X(e);if("kimchi"===t&&e&&!e.includes("://")&&!e.includes("?"))return void await H(e,null);let a=new URL(e),r=a.searchParams.get("code"),s=a.searchParams.get("token"),n=a.searchParams.get("state"),i=a.searchParams.get("error");if(i)throw Error(a.searchParams.get("error_description")||i);if(!r&&!s)throw Error("xai"===t?"Paste the callback URL or copied xAI code":"kimchi"===t?"No Kimchi token found in URL":"No authorization code found in URL");await H(s||r,n)}catch(e){w(e.message),f("error")}},es=(0,n.useCallback)(()=>{ee(),M.current()},[ee]);if(!t||!a)return null;let en="xai"===t,ei="kimchi"===t,eo=S?.verification_uri_complete||S?.verification_uri||"",el=en?"Connect Grok Build OAuth":`Connect ${a.name}`,ed=en?"http://127.0.0.1:56121/callback?code=... or copied code":ei?`${B.replace("code=...","token=...")} or copied token`:B;return(0,r.jsx)(i.default,{isOpen:e,title:el,onClose:es,size:"lg",children:(0,r.jsxs)("div",{className:"flex flex-col gap-4",children:[c.has(t)&&("waiting"===g||"input"===g||"error"===g)&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)("button",{type:"button",onClick:()=>{$("browser"),w(null),f("waiting"),ea()},className:`flex-1 rounded-lg border px-3 py-2 text-sm transition-colors ${"browser"===E?"border-primary bg-primary/10 text-primary":"border-border text-muted-foreground hover:text-primary"}`,children:"\uD83C\uDF10 Sign in with browser"}),(0,r.jsx)("button",{type:"button",onClick:()=>{$("paste-token"),w(null),f("input")},className:`flex-1 rounded-lg border px-3 py-2 text-sm transition-colors ${"paste-token"===E?"border-primary bg-primary/10 text-primary":"border-border text-muted-foreground hover:text-primary"}`,children:"\uD83D\uDD11 Paste token"})]}),"browser"===E&&(0,r.jsxs)(r.Fragment,{children:["waiting"===g&&(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border border-border rounded-lg bg-sidebar/50",children:[(0,r.jsx)(s.default,{name:"progress_activity",className:"text-base text-primary animate-spin"}),(0,r.jsx)("span",{className:"text-sm",children:"Waiting for browser authorization…"})]}),"input"===g&&(0,r.jsxs)("div",{className:"space-y-3",children:[(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:"Popup was blocked. After authorizing in the browser, paste the full callback URL here:"}),(0,r.jsx)(o.p,{value:j,onChange:e=>y(e.target.value),placeholder:"http://127.0.0.1:.../callback?...",className:"font-mono text-xs"}),(0,r.jsx)(l.$,{onClick:er,className:"w-full",disabled:!j,children:"Connect"})]})]}),"paste-token"===E&&(0,r.jsxs)("div",{className:"space-y-3",children:[P&&!P.installed&&(0,r.jsxs)("div",{className:`px-3 py-2 rounded-lg text-sm ${u[t].ideOptional?"bg-blue-500/10 text-blue-700 dark:text-blue-300":"bg-yellow-500/10 text-yellow-700 dark:text-yellow-300"}`,children:[u[t].ideName," IDE not detected.",u[t].ideOptional?" You can still grab the token from DevTools.":` Install ${u[t].ideName} IDE to get the token, or use "Sign in with browser".`]}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground",children:u[t].instructions}),(0,r.jsx)(o.p,{value:I,onChange:e=>z(e.target.value),placeholder:u[t].placeholder,className:"font-mono text-xs"}),(0,r.jsx)(l.$,{onClick:er,className:"w-full",disabled:!I,children:"Connect"})]})]}),("waiting"===g||"input"===g)&&!N&&!c.has(t)&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 border border-border rounded-lg bg-sidebar/50",children:[(0,r.jsx)(s.default,{name:"progress_activity",className:"text-base text-primary animate-spin"}),(0,r.jsx)("span",{className:"text-sm",children:en?"Waiting for Grok Build OAuth…":"Waiting for popup authorization…"})]}),(0,r.jsxs)("div",{className:"flex items-center gap-3 my-1",children:[(0,r.jsx)("div",{className:"flex-1 h-px bg-border"}),(0,r.jsx)("span",{className:"text-xs text-muted-foreground uppercase tracking-wider",children:"Or paste callback URL manually"}),(0,r.jsx)("div",{className:"flex-1 h-px bg-border"})]}),(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{className:"text-sm font-medium mb-2",children:["Step 1: Open this ",en?"Grok Build OAuth URL":"URL"," in your browser"]}),(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(o.p,{value:v?.authUrl||"",readOnly:!0,className:"flex-1 font-mono text-xs"}),(0,r.jsxs)(l.$,{variant:"secondary",onClick:()=>V(v?.authUrl,"auth_url"),disabled:!v?.authUrl,children:[(0,r.jsx)(s.default,{name:"auth_url"===K?"check":"content_copy"}),"Copy"]})]})]}),(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{className:"text-sm font-medium mb-2",children:["Step 2: Paste the"," ","xai"===t?"callback URL or copied code":ei?"callback URL or copied token":"callback URL"," ","here"]}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground mb-2",children:"xai"===t?"If xAI shows a code instead of redirecting, paste that code here.":ei?"After authorization, copy the full callback URL or token from your browser.":"After authorization, copy the full URL from your browser."}),(0,r.jsx)(o.p,{value:j,onChange:e=>y(e.target.value),placeholder:ed,className:"font-mono text-xs"})]})]}),(0,r.jsx)(l.$,{onClick:er,className:"w-full",disabled:!j,children:"Connect"})]}),"waiting"===g&&N&&S&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"text-center py-4",children:[(0,r.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Visit the login URL below and authorize:"}),(0,r.jsxs)("div",{className:"bg-sidebar p-4 rounded-lg mb-4",children:[(0,r.jsx)("p",{className:"text-xs text-muted-foreground mb-1",children:"Login URL"}),(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("code",{className:"flex-1 text-sm break-all",children:eo}),(0,r.jsx)(l.$,{size:"sm",variant:"ghost",onClick:()=>V(eo,"login_url"),disabled:!eo,children:(0,r.jsx)(s.default,{name:"login_url"===K?"check":"content_copy"})}),(0,r.jsxs)(l.$,{size:"sm",variant:"ghost",onClick:()=>window.open(eo,"_blank","noopener,noreferrer"),disabled:!eo,children:[(0,r.jsx)(s.default,{name:"open_in_new"}),"Open"]})]})]}),(0,r.jsxs)("div",{className:"bg-primary/10 p-4 rounded-lg",children:[(0,r.jsx)("p",{className:"text-xs text-muted-foreground mb-1",children:"Your Code"}),(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,r.jsx)("p",{className:"text-2xl font-mono font-bold text-primary",children:S.user_code}),(0,r.jsx)(l.$,{size:"sm",variant:"ghost",onClick:()=>V(S.user_code,"user_code"),children:(0,r.jsx)(s.default,{name:"user_code"===K?"check":"content_copy"})})]})]})]}),F&&(0,r.jsxs)("div",{className:"flex items-center justify-center gap-2 text-sm text-muted-foreground",children:[(0,r.jsx)(s.default,{name:"progress_activity",className:"animate-spin"}),"Waiting for authorization..."]})]}),"success"===g&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-green-100 dark:bg-green-900/30 flex items-center justify-center",children:(0,r.jsx)(s.default,{name:"check_circle",className:"text-3xl text-green-600"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connected Successfully!"}),(0,r.jsxs)("p",{className:"text-sm text-muted-foreground mb-4",children:["Your ",a.name," account has been connected."]}),(0,r.jsx)(l.$,{onClick:es,className:"w-full",children:"Done"})]}),"error"===g&&(0,r.jsxs)("div",{className:"text-center py-6",children:[(0,r.jsx)("div",{className:"size-16 mx-auto mb-4 rounded-full bg-red-100 dark:bg-red-900/30 flex items-center justify-center",children:(0,r.jsx)(s.default,{name:"error",className:"text-3xl text-red-600"})}),(0,r.jsx)("h3",{className:"text-lg font-semibold mb-2",children:"Connection Failed"}),(0,r.jsx)("p",{className:"text-sm text-red-600 mb-4",children:k}),(0,r.jsx)(l.$,{onClick:ea,variant:"secondary",className:"w-full",children:"Try Again"})]})]})})}},93624:(e,t,a)=>{a.d(t,{default:()=>l});var r=a(29798),s=a(15814),n=a(69221),i=a(3537),o=a(18055);function l({isOpen:e,onSuccess:t,onClose:a}){let[d,c]=(0,s.useState)(""),[u,m]=(0,s.useState)(!1),[x,p]=(0,s.useState)(null),[h,g]=(0,s.useState)(!1),f=async()=>{if(!d.trim())return void p("Please paste your cookie");m(!0),p(null);try{let e=await fetch("/api/oauth/iflow/cookie",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cookie:d.trim()})}),a=await e.json();if(!e.ok)throw Error(a.error||"Authentication failed");g(!0),setTimeout(()=>{t?.(),v()},1500)}catch(e){p(e.message)}finally{m(!1)}},v=()=>{c(""),p(null),g(!1),a?.()};return(0,r.jsx)(i.default,{isOpen:e,onClose:v,title:"iFlow Cookie Authentication",footer:void 0,className:void 0,children:(0,r.jsx)("div",{className:"space-y-4",children:h?(0,r.jsxs)("div",{className:"text-center py-8",children:[(0,r.jsx)("div",{className:"text-6xl mb-4",children:"✅"}),(0,r.jsx)("p",{className:"text-lg font-medium text-foreground",children:"Authentication Successful!"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground mt-2",children:"Fresh API key obtained"})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsxs)("p",{className:"text-sm text-muted-foreground",children:["To get a fresh API key, paste your browser cookie from"," ",(0,r.jsx)("a",{href:"https://platform.iflow.cn",target:"_blank",rel:"noopener noreferrer",className:"text-primary hover:underline",children:"platform.iflow.cn"})]}),(0,r.jsxs)("div",{className:"bg-secondary p-3 rounded-lg text-xs space-y-2",children:[(0,r.jsx)("p",{className:"font-medium text-foreground",children:"How to get cookie:"}),(0,r.jsxs)("ol",{className:"list-decimal list-inside space-y-1 text-muted-foreground",children:[(0,r.jsx)("li",{children:"Open platform.iflow.cn in your browser"}),(0,r.jsx)("li",{children:"Login to your account"}),(0,r.jsx)("li",{children:"Open DevTools (F12) → Application/Storage → Cookies"}),(0,r.jsx)("li",{children:"Copy the entire cookie string (must include BXAuth)"}),(0,r.jsx)("li",{children:"Paste it below"})]})]})]}),(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)("label",{className:"block text-sm font-medium text-foreground",children:"Cookie String"}),(0,r.jsx)("textarea",{value:d,onChange:e=>c(e.target.value),placeholder:"BXAuth=xxx; ...",className:"w-full px-3 py-2 bg-secondary border border-border rounded-lg text-sm text-foreground placeholder-muted-foreground focus:outline-none focus:ring-2 focus:ring-primary resize-none",rows:4,disabled:u})]}),x&&(0,r.jsx)("div",{className:"p-3 bg-destructive/10 border border-destructive/20 rounded-lg",children:(0,r.jsx)("p",{className:"text-sm text-destructive",children:x})}),(0,r.jsxs)(o.$,{onClick:f,disabled:u,className:"w-full",children:[u&&(0,r.jsx)(n.A,{className:"animate-spin"}),"Authenticate"]})]})})})}}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2836],{15764:(e,s,t)=>{"use strict";t.d(s,{CK:()=>d.default,G9:()=>x.default,Iz:()=>j.default,KX:()=>y.PanelSkeleton,LF:()=>n.default,LH:()=>m.default,Mu:()=>y.StatCardSkeleton,Nf:()=>c.default,Qv:()=>l.CardSkeleton,YW:()=>v.YW,gw:()=>p.default,jK:()=>o.default,nh:()=>g.default,pV:()=>v.pV,rq:()=>i.default,uR:()=>r.default,uo:()=>a.ConfirmModal,vE:()=>h.default,vj:()=>u.default,wI:()=>f.default,wn:()=>v.wn,zY:()=>v.zY}),t(58913);var a=t(3537),l=t(58350);t(30872),t(33526),t(42535),t(1279);var n=t(92802),i=t(25908),r=t(58729),d=t(24873),c=t(5258),o=t(4165);t(949),t(56776),t(53599),t(88336),t(69561);var x=t(37753),m=t(23444),h=t(93624),u=t(86920),f=t(65461);t(14580);var p=t(14670),j=t(70296);t(57779),t(22205);var y=t(43276),g=t(75862),v=t(92412)},41684:(e,s,t)=>{"use strict";t.d(s,{default:()=>j});var a=t(29798),l=t(15814),n=t(75669),i=t(18055),r=t(77345),d=t(49787),c=t(1352),o=t(58913),x=t(15764),m=t(63523);function h({label:e,url:s,copyId:t,copied:l,onCopy:n,badge:d,actions:x}){return(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)("span",{className:`shrink-0 rounded px-1.5 py-0.5 text-center font-mono text-xs min-w-[88px] ${"CF"===d||"TS"===d?"bg-primary/10 text-primary":"bg-muted text-muted-foreground"}`,children:e}),(0,a.jsx)(r.p,{value:s,readOnly:!0,className:"flex-1 font-mono text-sm"}),(0,a.jsxs)(c.m_,{children:[(0,a.jsx)(c.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"relative inline-flex",children:(0,a.jsx)(i.$,{variant:"ghost",size:"icon-sm",onClick:()=>n(s,t),children:(0,a.jsx)(o.default,{name:l===t?"check":"content_copy",className:"text-[18px]"})})})}),(0,a.jsx)(c.ZI,{side:"top",children:l===t?"Copied!":"Copy"})]}),x]})}var u=t(54563),f=t(14231);function p({message:e,action:s}){return(0,a.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-amber-500/10 border border-amber-500/20 text-amber-700 dark:text-amber-400",children:[(0,a.jsx)(o.default,{name:"warning",className:"text-[16px] shrink-0 mt-0.5"}),(0,a.jsx)("p",{className:"text-xs flex-1",children:e}),s&&(0,a.jsx)("a",{href:s.href,className:"text-xs font-medium underline shrink-0 hover:opacity-80",onClick:s.href.startsWith("#")?e=>{e.preventDefault(),document.getElementById(s.href.slice(1))?.scrollIntoView({behavior:"smooth"})}:void 0,children:s.label})]})}function j({machineId:e}){let[s,t]=(0,l.useState)([]),[y,g]=(0,l.useState)(!0),[v,k]=(0,l.useState)(!1),[N,w]=(0,l.useState)(""),[C,b]=(0,l.useState)(null),[S,E]=(0,l.useState)(null),[P,I]=(0,l.useState)(!1),[K,A]=(0,l.useState)(new Set),[_,$]=(0,l.useState)(!1);(0,l.useEffect)(()=>{$(!["localhost","127.0.0.1","::1"].includes(window.location.hostname))},[]);let{copied:T,copy:O}=(0,m.C)();(0,l.useEffect)(()=>{z(),L()},[]);let L=async()=>{try{let e=await fetch("/api/settings");if(e.ok){let s=await e.json();I(s.requireApiKey||!1)}}catch(e){console.log("Error loading settings:",e)}},q=async e=>{try{(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({requireApiKey:e})})).ok&&I(e)}catch(e){console.log("Error updating requireApiKey:",e)}},z=async()=>{try{let e=async()=>{let e=await fetch("/api/keys");return e.ok&&(await e.json()).keys||[]},s=await e();if(0===s.length)try{(await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:"Default Key"})})).ok&&(s=await e())}catch{}t(s)}catch(e){console.log("Error fetching data:",e)}finally{g(!1)}},D=async()=>{if(N.trim())try{let e=await fetch("/api/keys",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:N})}),s=await e.json();e.ok&&(b(s.key),await z(),w(""),k(!1))}catch(e){console.log("Error creating key:",e)}},W=async e=>{E({title:"Delete API Key",message:"Delete this API key?",onConfirm:async()=>{E(null);try{(await fetch(`/api/keys/${e}`,{method:"DELETE"})).ok&&(t(s.filter(s=>s.id!==e)),A(s=>{let t=new Set(s);return t.delete(e),t}))}catch(e){console.log("Error deleting key:",e)}}})},[Y,Z]=(0,l.useState)("/v1");return((0,l.useEffect)(()=>{Z(`${window.location.origin}/v1`)},[]),y)?(0,a.jsxs)(x.YW,{children:[(0,a.jsx)(x.KX,{}),(0,a.jsx)(x.KX,{})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(x.YW,{children:[(0,a.jsxs)(n.Zp,{children:[(0,a.jsx)(n.aR,{children:(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"p-2 rounded-[10px] bg-background text-muted-foreground",children:(0,a.jsx)(o.default,{name:"api",className:"text-[20px]"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)(n.ZB,{children:"API Endpoint"}),(0,a.jsx)(n.BT,{children:"Local and remote access URLs"})]})]})}),(0,a.jsx)(n.Wu,{children:(0,a.jsx)("div",{className:"flex flex-col gap-2",children:(0,a.jsx)(h,{label:"Local",url:Y,copyId:"local_url",copied:T,onCopy:O})})})]}),(0,a.jsxs)(n.Zp,{id:"require-api-key",children:[(0,a.jsxs)(n.aR,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3",children:[(0,a.jsx)("div",{className:"p-2 rounded-[10px] bg-background text-muted-foreground",children:(0,a.jsx)(o.default,{name:"vpn_key",className:"text-[20px]"})}),(0,a.jsxs)("div",{children:[(0,a.jsx)(n.ZB,{children:"API Keys"}),(0,a.jsx)(n.BT,{children:"Keys for authenticating gateway requests"})]})]}),(0,a.jsx)(n.X9,{children:(0,a.jsxs)(i.$,{onClick:()=>k(!0),children:[(0,a.jsx)(o.default,{name:"add"}),"Create Key"]})})]}),(0,a.jsxs)(n.Wu,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between pb-4 mb-4 border-b border-border",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("p",{className:"font-medium",children:"Require API key"}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"Requests without a valid key will be rejected"})]}),(0,a.jsx)(f.d,{checked:P,onCheckedChange:()=>q(!P)})]}),_&&!P&&(0,a.jsx)("div",{className:"mb-4 -mt-2",children:(0,a.jsx)(p,{message:"Endpoint is exposed without an API key."})}),0===s.length?(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,a.jsx)(o.default,{name:"vpn_key",className:"text-[32px]"})}),(0,a.jsx)("p",{className:"text-foreground font-medium mb-1",children:"No API keys yet"}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Create your first API key to get started"}),(0,a.jsxs)(i.$,{onClick:()=>k(!0),children:[(0,a.jsx)(o.default,{name:"add"}),"Create Key"]})]}):(0,a.jsx)("div",{className:"flex flex-col",children:s.map(e=>{var s;return(0,a.jsxs)("div",{className:`group flex items-center justify-between py-3 border-b border-black/[0.03] dark:border-white/[0.03] last:border-b-0 ${!1===e.isActive?"opacity-60":""}`,children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium",children:e.name}),(0,a.jsxs)("div",{className:"flex items-center gap-2 mt-1",children:[(0,a.jsx)("code",{className:"text-xs text-muted-foreground font-mono",children:K.has(e.id)?e.key:(s=e.key)&&!(s.length<=10)?s.slice(0,6)+"•".repeat(s.length-10)+s.slice(-4):s||""}),(0,a.jsxs)(c.m_,{children:[(0,a.jsx)(c.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"relative inline-flex",children:(0,a.jsx)(i.$,{variant:"ghost",size:"icon-xs",onClick:()=>{var s;return s=e.id,void A(e=>{let t=new Set(e);return t.has(s)?t.delete(s):t.add(s),t})},children:(0,a.jsx)(o.default,{name:K.has(e.id)?"visibility_off":"visibility",className:"text-[14px]"})})})}),(0,a.jsx)(c.ZI,{side:"top",children:K.has(e.id)?"Hide key":"Show key"})]}),(0,a.jsxs)(c.m_,{children:[(0,a.jsx)(c.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"relative inline-flex",children:(0,a.jsx)(i.$,{variant:"ghost",size:"icon-xs",onClick:()=>O(e.key,e.id),children:(0,a.jsx)(o.default,{name:T===e.id?"check":"content_copy",className:"text-[14px]"})})})}),(0,a.jsx)(c.ZI,{side:"top",children:T===e.id?"Copied!":"Copy"})]})]}),(0,a.jsxs)("p",{className:"text-xs text-muted-foreground mt-1",children:["Created ",new Date(e.createdAt).toLocaleDateString()]}),!1===e.isActive&&(0,a.jsx)("p",{className:"text-xs text-orange-500 mt-1",children:"Paused"})]}),(0,a.jsx)("div",{className:"flex items-center gap-2",children:(0,a.jsx)(i.$,{variant:"ghost",size:"icon-sm",onClick:()=>W(e.id),className:"text-red-500 opacity-100 hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",children:(0,a.jsx)(o.default,{name:"delete",className:"text-[18px]"})})})]},e.id)})})]})]})]}),(0,a.jsx)(d.lG,{open:v,onOpenChange:e=>{e||(k(!1),w(""))},children:(0,a.jsxs)(d.Cf,{className:"max-w-md",children:[(0,a.jsx)(d.c7,{children:(0,a.jsx)(d.L3,{children:"Create API Key"})}),(0,a.jsx)("div",{className:"max-h-[calc(85vh-100px)] overflow-y-auto p-4",children:(0,a.jsx)("div",{className:"flex flex-col gap-4",children:(0,a.jsxs)("div",{className:"flex flex-col gap-1.5",children:[(0,a.jsx)("label",{className:"text-sm font-medium text-foreground",children:"Key Name"}),(0,a.jsx)(r.p,{value:N,onChange:e=>w(e.target.value),placeholder:"Production Key"})]})})}),(0,a.jsx)(d.Es,{children:(0,a.jsx)("div",{className:"flex w-full gap-2 sm:w-auto",children:(0,a.jsx)(i.$,{onClick:D,className:"w-full sm:w-auto",disabled:!N.trim(),children:"Create"})})})]})}),(0,a.jsx)(d.lG,{open:!!C,onOpenChange:e=>!e&&b(null),children:(0,a.jsxs)(d.Cf,{className:"max-w-md",children:[(0,a.jsx)(d.c7,{children:(0,a.jsx)(d.L3,{children:"API Key Created"})}),(0,a.jsx)("div",{className:"max-h-[calc(85vh-100px)] overflow-y-auto p-4",children:(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsx)(u.Fc,{children:(0,a.jsxs)(u.TN,{children:[(0,a.jsx)("span",{className:"font-medium",children:"Save this key now! "}),"This is the only time you will see this key. Store it securely."]})}),(0,a.jsxs)("div",{className:"flex gap-2",children:[(0,a.jsx)(r.p,{value:C||"",readOnly:!0,className:"flex-1 font-mono text-sm"}),(0,a.jsxs)(i.$,{variant:"secondary",onClick:()=>O(C,"created_key"),children:[(0,a.jsx)(o.default,{name:"created_key"===T?"check":"content_copy"}),"created_key"===T?"Copied!":"Copy"]})]})]})}),(0,a.jsx)(d.Es,{children:(0,a.jsx)(i.$,{onClick:()=>b(null),className:"w-full sm:w-auto",children:"Done"})})]})}),(0,a.jsx)(x.uo,{isOpen:!!S,onClose:()=>E(null),onConfirm:S?.onConfirm,title:S?.title||"Confirm",message:S?.message,variant:"danger"})]})}},92412:(e,s,t)=>{"use strict";t.d(s,{YW:()=>a.Page,pV:()=>a.CardGrid,wn:()=>a.Section,zY:()=>a.PageHeader}),t(16675),t(72778);var a=t(29575)},92836:(e,s,t)=>{Promise.resolve().then(t.bind(t,41684))}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9369],{15764:(e,t,r)=>{r.d(t,{CK:()=>o.default,G9:()=>u.default,Iz:()=>g.default,KX:()=>v.PanelSkeleton,LF:()=>l.default,LH:()=>x.default,Mu:()=>v.StatCardSkeleton,Nf:()=>d.default,Qv:()=>s.CardSkeleton,YW:()=>b.YW,gw:()=>p.default,jK:()=>c.default,nh:()=>j.default,pV:()=>b.pV,rq:()=>n.default,uR:()=>i.default,uo:()=>a.ConfirmModal,vE:()=>m.default,vj:()=>f.default,wI:()=>h.default,wn:()=>b.wn,zY:()=>b.zY}),r(58913);var a=r(3537),s=r(58350);r(30872),r(33526),r(42535),r(1279);var l=r(92802),n=r(25908),i=r(58729),o=r(24873),d=r(5258),c=r(4165);r(949),r(56776),r(53599),r(88336),r(69561);var u=r(37753),x=r(23444),m=r(93624),f=r(86920),h=r(65461);r(14580);var p=r(14670),g=r(70296);r(57779),r(22205);var v=r(43276),j=r(75862),b=r(92412)},21796:(e,t,r)=>{r.d(t,{A:()=>x});var a=r(29798),s=r(58913),l=r(15814),n=r(53784);function i({until:e}){let[t,r]=(0,l.useState)("");return((0,l.useEffect)(()=>{let t=()=>{let t=new Date(e).getTime()-Date.now();if(t<=0)return void r("");let a=Math.floor(t/1e3);if(a<60)r(`${a}s`);else if(a<3600)r(`${Math.floor(a/60)}m ${a%60}s`);else{let e=Math.floor(a/3600),t=Math.floor(a%3600/60);r(`${e}h ${t}m`)}};t();let a=setInterval(t,1e3);return()=>clearInterval(a)},[e]),t)?(0,a.jsxs)("span",{className:"text-xs text-orange-500 font-mono",children:["⏱ ",t]}):null}var o=r(14231),d=r(1352);function c(e){return"success"===e||"primary"===e?"default":"error"===e?"destructive":"warning"===e||"info"===e?"secondary":"destructive"===e||"secondary"===e||"outline"===e||"ghost"===e||"link"===e?e:"default"}function u({variant:e}){return(0,a.jsx)("span",{className:`size-1.5 rounded-full ${"success"===e||"primary"===e?"bg-green-500":"error"===e?"bg-red-500":"bg-gray-500"}`})}function x({connection:e,proxyPools:t,isOAuth:r,isFirst:m,isLast:f,onMoveUp:h,onMoveDown:p,onToggleActive:g,onUpdateProxy:v,onEdit:j,onDelete:b,oneByOneStatus:y=null,autoPing:w=null}){let[k,N]=(0,l.useState)(!1),[C,$]=(0,l.useState)(!1),_=(0,l.useRef)(null),A=new Map((t||[]).map(e=>[e.id,e])),E=e.providerSpecificData?.proxyPoolId||null,P=E?A.get(E):null,S=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,D=!!E||S,I=P?`Pool: ${P.name}`:E?`Pool: ${E} (inactive/missing)`:S?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",L=w?.provider==="codex"?"Auto-starts the next 5h Codex window after reset by sending a tiny gpt-5.5 request. Consumes a small amount of quota.":"When your 5h quota runs out, auto-sends a request the moment it resets so a new window starts right away.",U="";if(P?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=P?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);U=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{U=t}}let q=P?.noProxy||e.providerSpecificData?.connectionNoProxy||"",z="default";P?.isActive===!0?z="success":(E||S)&&(z="error"),(0,l.useEffect)(()=>{if(!k)return;let e=e=>{_.current&&!_.current.contains(e.target)&&N(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[k]);let M=async e=>{$(!0);try{await v("__none__"===e?null:e)}finally{$(!1),N(!1)}},W=e.authType||(r?"oauth":"apikey"),Y="oauth"===W,K="cookie"===W,Z=e.name?.trim()||e.email?.trim()||e.displayName?.trim()||(Y?"OAuth Account":K?"Cookie Account":"API Key"),O=e.name?.trim()&&e.email?.trim()&&e.name.trim()!==e.email.trim()?e.email.trim():e.name?.trim()&&e.displayName?.trim()&&e.name.trim()!==e.displayName.trim()?e.displayName.trim():null,[T,R]=(0,l.useState)(!1),V=Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>!!e).sort()[0]||null;(0,l.useEffect)(()=>{let t=()=>{R(!!Object.entries(e).filter(([e])=>e.startsWith("modelLock_")).map(([,e])=>e).filter(e=>e&&new Date(e).getTime()>Date.now()).sort()[0])};t();let r=V?setInterval(t,1e3):null;return()=>{r&&clearInterval(r)}},[V]);let G="unavailable"!==e.testStatus||T?e.testStatus:"active",H=()=>{var t;return t=e.isActive,!1===t?"default":"active"===G||"success"===G?"success":"error"===G||"expired"===G||"unavailable"===G?"error":"default"},F=()=>y?"queued"===y.state?"queued":"testing"===y.state?"testing":"success"===y.state?"success":"failed"===y.state?y.error?`failed: ${y.error}`:"failed":null:null;return(0,a.jsxs)("div",{className:`group flex min-w-0 flex-col gap-3 rounded-lg p-2 transition-colors hover:bg-black/[0.02] dark:hover:bg-white/[0.02] sm:flex-row sm:items-center sm:justify-between ${!1===e.isActive?"opacity-60":""}`,children:[(0,a.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-2 sm:items-center sm:gap-3",children:[(0,a.jsxs)("div",{className:"flex shrink-0 flex-col",children:[(0,a.jsx)("button",{onClick:h,disabled:m,className:`p-0.5 rounded ${m?"text-muted-foreground/30 cursor-not-allowed":"hover:bg-sidebar text-muted-foreground hover:text-primary"}`,children:(0,a.jsx)(s.default,{name:"keyboard_arrow_up",className:"text-sm"})}),(0,a.jsx)("button",{onClick:p,disabled:f,className:`p-0.5 rounded ${f?"text-muted-foreground/30 cursor-not-allowed":"hover:bg-sidebar text-muted-foreground hover:text-primary"}`,children:(0,a.jsx)(s.default,{name:"keyboard_arrow_down",className:"text-sm"})})]}),(0,a.jsx)(s.default,{name:K?"cookie":Y?"lock":"key",className:"shrink-0 text-base text-muted-foreground"}),(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"text-sm font-medium truncate",children:Z}),O&&(0,a.jsx)("p",{className:"text-xs text-muted-foreground truncate",children:O}),(0,a.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1.5 sm:gap-2",children:[(0,a.jsxs)(n.E,{variant:c(H()),children:[(0,a.jsx)(u,{variant:H()}),!1===e.isActive?"disabled":G||"Unknown"]}),(0,a.jsx)(n.E,{variant:"default",children:Y?"OAuth":K?"Cookie":"API Key"}),D&&(0,a.jsx)(n.E,{variant:c(z),children:"Proxy"}),T&&!1!==e.isActive&&(0,a.jsx)(i,{until:V}),e.lastError&&!1!==e.isActive&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"max-w-full truncate text-xs text-red-500 sm:max-w-[300px]",children:e.lastError})}),(0,a.jsx)(d.ZI,{children:e.lastError})]}),(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["#",e.priority]}),e.globalPriority&&(0,a.jsxs)("span",{className:"text-xs text-muted-foreground",children:["Auto: ",e.globalPriority]}),F()&&(0,a.jsx)(n.E,{variant:c(y?"success"===y.state?"success":"failed"===y.state?"error":"testing"===y.state?"primary":"default":"default"),children:F()})]}),D&&(0,a.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"max-w-full truncate text-[11px] text-muted-foreground sm:max-w-[420px]",children:I})}),(0,a.jsx)(d.ZI,{children:I})]}),U&&(0,a.jsx)("code",{className:"max-w-full truncate rounded bg-black/5 px-1 py-0.5 font-mono text-[10px] text-muted-foreground dark:bg-white/5 sm:max-w-[260px]",children:U}),q&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsxs)("span",{className:"max-w-full truncate text-[11px] text-muted-foreground sm:max-w-[320px]",children:["no_proxy: ",q]})}),(0,a.jsx)(d.ZI,{children:q})]})]})]})]}),(0,a.jsxs)("div",{className:"flex w-full items-center justify-between gap-2 sm:w-auto sm:justify-end",children:[(0,a.jsxs)("div",{className:"grid flex-1 grid-cols-3 gap-1 sm:flex sm:flex-none",children:[(t||[]).length>0&&(0,a.jsxs)("div",{className:"relative",ref:_,children:[(0,a.jsxs)("button",{onClick:()=>N(e=>!e),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${D?"text-primary":"text-muted-foreground hover:text-primary"}`,disabled:C,children:[(0,a.jsx)(s.default,{name:C?"progress_activity":"lan",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),k&&(0,a.jsxs)("div",{className:"absolute right-0 top-full z-50 mt-1 max-w-[78vw] min-w-[160px] rounded-lg border border-border bg-background py-1 shadow-lg",children:[(0,a.jsx)("button",{onClick:()=>M("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!E?"text-primary font-medium":"text-foreground"}`,children:"None"}),(t||[]).map(e=>(0,a.jsx)("button",{onClick:()=>M(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${E===e.id?"text-primary font-medium":"text-foreground"}`,children:e.name},e.id))]})]}),w&&(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)("span",{className:"relative inline-flex",children:(0,a.jsxs)("button",{onClick:()=>w.onToggle(!w.on),className:`flex w-full flex-col items-center rounded px-2 py-1 transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${w.on?"text-primary":"text-muted-foreground hover:text-primary"}`,children:[(0,a.jsx)(s.default,{name:"bolt",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Auto-ping"})]})})}),(0,a.jsx)(d.ZI,{children:L})]}),(0,a.jsxs)("button",{onClick:j,className:"flex flex-col items-center rounded px-2 py-1 text-muted-foreground hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",children:[(0,a.jsx)(s.default,{name:"edit",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,a.jsxs)("button",{onClick:b,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 hover:bg-red-500/10",children:[(0,a.jsx)(s.default,{name:"delete",className:"text-[18px]"}),(0,a.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),(0,a.jsxs)(d.m_,{children:[(0,a.jsx)(d.k$,{asChild:!0,children:(0,a.jsx)(o.d,{size:"sm",checked:e.isActive??!0,onCheckedChange:g,"aria-label":e.isActive??!0?"Disable connection":"Enable connection"})}),(0,a.jsx)(d.ZI,{side:"top",children:e.isActive??!0?"Disable connection":"Enable connection"})]})]})]})}},92412:(e,t,r)=>{r.d(t,{YW:()=>a.Page,pV:()=>a.CardGrid,wn:()=>a.Section,zY:()=>a.PageHeader}),r(16675),r(72778);var a=r(29575)}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2326],{2809:(e,t,a)=>{Promise.resolve().then(a.bind(a,24324))},15764:(e,t,a)=>{"use strict";a.d(t,{CK:()=>d.default,G9:()=>c.default,Iz:()=>j.default,KX:()=>x.PanelSkeleton,LF:()=>n.default,LH:()=>f.default,Mu:()=>x.StatCardSkeleton,Nf:()=>i.default,Qv:()=>o.CardSkeleton,YW:()=>k.YW,gw:()=>h.default,jK:()=>u.default,nh:()=>g.default,pV:()=>k.pV,rq:()=>s.default,uR:()=>r.default,uo:()=>l.ConfirmModal,vE:()=>b.default,vj:()=>p.default,wI:()=>v.default,wn:()=>k.wn,zY:()=>k.zY}),a(58913);var l=a(3537),o=a(58350);a(30872),a(33526),a(42535),a(1279);var n=a(92802),s=a(25908),r=a(58729),d=a(24873),i=a(5258),u=a(4165);a(949),a(56776),a(53599),a(88336),a(69561);var c=a(37753),f=a(23444),b=a(93624),p=a(86920),v=a(65461);a(14580);var h=a(14670),j=a(70296);a(57779),a(22205);var x=a(43276),g=a(75862),k=a(92412)},24324:(e,t,a)=>{"use strict";a.d(t,{default:()=>d});var l=a(29798),o=a(15814),n=a(15764),s=a(90046),r=a(56590);function d({machineId:e}){let[t,a]=(0,o.useState)(!0),[i,u]=(0,o.useState)({});if((0,o.useEffect)(()=>{let e=!0;return(async()=>{try{let t=await fetch("/api/cli-tools/all-statuses");t.ok&&e&&u(await t.json())}catch(e){console.log("Error fetching tool statuses:",e)}finally{e&&a(!1)}})(),()=>{e=!1}},[]),t)return(0,l.jsxs)(n.YW,{children:[(0,l.jsx)(n.zY,{title:"CLI Tools",description:"Connect coding assistants to 10Router — point each tool at your local endpoint.",backHref:"/dashboard/providers",backLabel:"Providers"}),(0,l.jsxs)(n.pV,{children:[(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{}),(0,l.jsx)(n.Qv,{})]})]});let c=Object.entries(s.d);return(0,l.jsxs)(n.YW,{children:[(0,l.jsx)(n.zY,{title:"CLI Tools",description:"Connect coding assistants to 10Router — point each tool at your local endpoint.",backHref:"/dashboard/providers",backLabel:"Providers"}),(0,l.jsx)(n.pV,{children:c.map(([e,t])=>(0,l.jsx)(r.A,{toolId:e,tool:t,status:i[e]},e))})]})}},56590:(e,t,a)=>{"use strict";a.d(t,{A:()=>d});var l=a(29798),o=a(53784),n=a(22205),s=a(738);let r={ok:"bg-green-500",warn:"bg-amber-500",info:"bg-blue-500",muted:"bg-muted-foreground/50"};function d({toolId:e,tool:t,status:a}){let i=t?.configType==="guide"?{label:"Guide",tone:"info"}:a?a.container&&null==a.installed?{label:"Manual setup",tone:"info"}:a.installed?a.has10Router?{label:"Connected",tone:"ok"}:{label:"Not configured",tone:"warn"}:{label:"Not installed",tone:"muted"}:{label:"Unknown",tone:"muted"};return(0,l.jsx)(n.default,{href:`/dashboard/cli-tools/${e}`,title:t.name,iconBg:t.color?`${t.color}15`:void 0,icon:(0,l.jsx)(s.A,{src:t.image,alt:t.name,size:30,className:"max-h-[30px] max-w-[30px] rounded-lg object-contain",fallbackText:t.name.slice(0,2).toUpperCase(),fallbackColor:t.color}),children:(0,l.jsxs)(o.E,{variant:"default",children:[(0,l.jsx)("span",{className:`size-1.5 rounded-full ${r[i.tone]}`}),i.label]})})}},92412:(e,t,a)=>{"use strict";a.d(t,{YW:()=>l.Page,pV:()=>l.CardGrid,wn:()=>l.Section,zY:()=>l.PageHeader}),a(16675),a(72778);var l=a(29575)}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,4484,3577,5862,5113,1699,7276,1722,159,4489,1278,1830,208,427,9966,7358],()=>e(e.s=2809)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3649],{15764:(e,s,t)=>{"use strict";t.d(s,{CK:()=>i.default,G9:()=>m.default,Iz:()=>p.default,KX:()=>g.PanelSkeleton,LF:()=>a.default,LH:()=>x.default,Mu:()=>g.StatCardSkeleton,Nf:()=>d.default,Qv:()=>l.CardSkeleton,YW:()=>v.YW,gw:()=>f.default,jK:()=>c.default,nh:()=>b.default,pV:()=>v.pV,rq:()=>o.default,uR:()=>n.default,uo:()=>r.ConfirmModal,vE:()=>u.default,vj:()=>h.default,wI:()=>j.default,wn:()=>v.wn,zY:()=>v.zY}),t(58913);var r=t(3537),l=t(58350);t(30872),t(33526),t(42535),t(1279);var a=t(92802),o=t(25908),n=t(58729),i=t(24873),d=t(5258),c=t(4165);t(949),t(56776),t(53599),t(88336),t(69561);var m=t(37753),x=t(23444),u=t(93624),h=t(86920),j=t(65461);t(14580);var f=t(14670),p=t(70296);t(57779),t(22205);var g=t(43276),b=t(75862),v=t(92412)},29982:(e,s,t)=>{"use strict";t.r(s),t.d(s,{default:()=>A});var r=t(29798),l=t(15814),a=t(31872),o=t(59732),n=t(7155),i=t(70684),d=t(75669),c=t(18055),m=t(77345),x=t(1352),u=t(49787),h=t(45111),j=t(36395),f=t(10205),p=t(15054),g=t(6403),b=t(63587),v=t(76260),y=t(3308),k=t(75877),N=t(50860),w=t(1280),C=t(26339),S=t(15764),$=t(63523),z=t(90619);let E=/^[a-zA-Z0-9_.\-]+$/;function A(){let[e,s]=(0,l.useState)([]),[t,a]=(0,l.useState)(!0),[o,n]=(0,l.useState)(!1),[i,m]=(0,l.useState)(null),[x,h]=(0,l.useState)([]),[p,g]=(0,l.useState)({}),{getCaps:b}=(0,z.y)(),[v,y]=(0,l.useState)(null),{copied:k,copy:N}=(0,$.C)(),w=async()=>{try{let[e,t,r]=await Promise.all([fetch("/api/combos"),fetch("/api/providers"),fetch("/api/settings")]),l=await e.json(),a=await t.json(),o=r.ok?await r.json():{};e.ok&&s((l.combos||[]).filter(e=>!e.kind||"llm"===e.kind)),t.ok&&h(a.connections||[]),g(o.comboStrategies||{})}catch(e){console.log("Error fetching data:",e)}finally{a(!1)}};(0,l.useEffect)(()=>{w()},[]);let C=async e=>{try{let s=await fetch("/api/combos",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(s.ok)await w(),n(!1);else{let e=await s.json();alert(e.error||"Failed to create combo")}}catch(e){console.log("Error creating combo:",e)}},E=async(e,s)=>{try{let t=await fetch(`/api/combos/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)});if(t.ok)await w(),m(null);else{let e=await t.json();alert(e.error||"Failed to update combo")}}catch(e){console.log("Error updating combo:",e)}},A=async(e,s)=>{try{let t={...p},r={...t[e]||{},...s};r.fallbackStrategy&&"fallback"!==r.fallbackStrategy?t[e]=r:delete t[e],await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({comboStrategies:t})}),g(t)}catch(e){console.log("Error updating combo strategy:",e)}};return t?(0,r.jsxs)(S.YW,{children:[(0,r.jsx)(S.KX,{}),(0,r.jsx)(S.KX,{})]}):(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(S.YW,{children:[(0,r.jsx)(S.zY,{title:"Combos",description:"Group models under one name, then pick a strategy per combo:",actions:(0,r.jsxs)(c.$,{onClick:()=>n(!0),className:"w-full whitespace-nowrap sm:w-auto",children:[(0,r.jsx)(j.A,{}),"Create Combo"]})}),(0,r.jsx)(S.wn,{children:(0,r.jsx)("div",{className:"min-w-0",children:(0,r.jsxs)("ul",{className:"text-sm text-muted-foreground flex flex-col gap-1",children:[(0,r.jsxs)("li",{children:[(0,r.jsx)("span",{className:"font-medium text-foreground",children:"Fallback"})," — tries models in order (next on failure)"]}),(0,r.jsxs)("li",{children:[(0,r.jsx)("span",{className:"font-medium text-foreground",children:"Round Robin"})," — rotates models across requests to spread load"]}),(0,r.jsxs)("li",{children:[(0,r.jsx)("span",{className:"font-medium text-foreground",children:"Fusion"})," — queries all models in parallel, then a judge synthesizes one answer. Best quality, but costs the most: every request bills all panel models + the judge (N+1 calls)"]})]})})}),(0,r.jsx)(S.wn,{children:0===e.length?(0,r.jsx)(d.Zp,{children:(0,r.jsxs)("div",{className:"py-12 text-center",children:[(0,r.jsx)("div",{className:"inline-flex items-center justify-center w-16 h-16 rounded-full bg-primary/10 text-primary mb-4",children:(0,r.jsx)(f.A,{className:"size-8"})}),(0,r.jsx)("p",{className:"text-foreground font-medium mb-1",children:"No combos yet"}),(0,r.jsx)("p",{className:"text-sm text-muted-foreground mb-4",children:"Create model combos with fallback support"}),(0,r.jsxs)(c.$,{onClick:()=>n(!0),className:"w-full sm:w-auto",children:[(0,r.jsx)(j.A,{}),"Create Combo"]})]})}):(0,r.jsx)("div",{className:"flex flex-col gap-4",children:e.map(t=>(0,r.jsx)(_,{combo:t,getCaps:b,activeProviders:x,copied:k,onCopy:N,onEdit:()=>m(t),onDelete:()=>{var r;return r=t.id,void y({title:"Delete Combo",message:"Delete this combo?",onConfirm:async()=>{y(null);try{(await fetch(`/api/combos/${r}`,{method:"DELETE"})).ok&&s(e.filter(e=>e.id!==r))}catch(e){console.log("Error deleting combo:",e)}}})},strategy:p[t.name]||{},onSetStrategy:e=>A(t.name,e)},t.id))})})]}),o&&(0,r.jsx)(F,{isOpen:o,onClose:()=>n(!1),onSave:C,activeProviders:x},"create"),i&&(0,r.jsx)(F,{isOpen:!!i,combo:i,onClose:()=>m(null),onSave:e=>E(i.id,e),activeProviders:x},i.id),v&&(0,r.jsx)(u.lG,{open:!0,onOpenChange:e=>{e||y(null)},children:(0,r.jsxs)(u.Cf,{className:"max-w-sm",children:[(0,r.jsx)(u.c7,{children:(0,r.jsx)(u.L3,{children:v.title})}),(0,r.jsx)("p",{className:"p-4 text-sm text-muted-foreground",children:v.message}),(0,r.jsxs)(u.Es,{children:[(0,r.jsx)(c.$,{variant:"ghost",onClick:()=>y(null),children:"Cancel"}),(0,r.jsx)(c.$,{variant:"destructive",onClick:v.onConfirm,children:v.confirmText||"Confirm"})]})]})})]})}let M=[{value:"fallback",label:"Fallback — try in order"},{value:"round-robin",label:"Round Robin — rotate"},{value:"fusion",label:"Fusion — panel + judge"}];function _({combo:e,getCaps:s,activeProviders:t=[],copied:a,onCopy:o,onEdit:n,onDelete:i,strategy:m={},onSetStrategy:u}){let[j,N]=(0,l.useState)(!1),w=m.fallbackStrategy||"fallback",C=m.judgeModel||"";return(0,r.jsxs)(d.Zp,{size:"sm",className:"group",children:[(0,r.jsx)(d.Wu,{className:"min-w-0",children:(0,r.jsxs)("div",{className:"flex min-w-0 flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,r.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-3 sm:items-center",children:[(0,r.jsx)("div",{className:"size-8 rounded-lg bg-primary/10 flex items-center justify-center shrink-0",children:(0,r.jsx)(f.A,{className:"size-4 text-primary"})}),(0,r.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,r.jsx)("code",{className:"block truncate font-mono text-sm font-medium",children:e.name}),(0,r.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1",children:[0===e.models.length?(0,r.jsx)("span",{className:"text-xs text-muted-foreground italic",children:"No models"}):e.models.slice(0,3).map((e,t)=>(0,r.jsxs)("code",{className:"inline-flex items-center gap-1 rounded bg-black/5 px-1.5 py-0.5 font-mono text-xs text-muted-foreground dark:bg-white/5",children:[(0,r.jsx)("span",{children:e}),(0,r.jsx)(S.nh,{caps:s?.(e)})]},t)),e.models.length>3&&(0,r.jsxs)("span",{className:"text-[10px] text-muted-foreground",children:["+",e.models.length-3," more"]})]}),"fusion"===w&&(0,r.jsxs)("div",{className:"mt-2 flex min-w-0 flex-wrap items-center gap-1.5",children:[(0,r.jsx)("span",{className:"text-[11px] font-medium text-muted-foreground",children:"Judge"}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsxs)("button",{onClick:()=>N(!0),className:"inline-flex max-w-full items-center gap-1 rounded border border-dashed border-primary/40 px-1.5 py-0.5 font-mono text-[11px] text-primary hover:border-primary hover:bg-primary/5 transition-colors",children:[(0,r.jsx)(p.A,{className:"size-3.5"}),(0,r.jsx)("span",{className:"truncate",children:C||`Auto — ${e.models[0]||"first model"}`})]})}),(0,r.jsx)(x.ZI,{children:"Pick the model that fuses panel answers"})]}),C&&(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:()=>u({judgeModel:""}),className:"p-0.5 rounded text-muted-foreground hover:text-red-500 hover:bg-red-500/10 transition-colors",children:(0,r.jsx)(g.A,{className:"size-3.5"})})}),(0,r.jsx)(x.ZI,{children:"Reset judge to Auto"})]})]})]})]}),(0,r.jsxs)("div",{className:"flex w-full flex-col gap-2 sm:w-auto sm:flex-row sm:items-center sm:gap-3 sm:shrink-0",children:[(0,r.jsx)("div",{className:"w-full sm:w-[200px]",children:(0,r.jsxs)(h.l6,{value:w,onValueChange:e=>u({fallbackStrategy:e}),children:[(0,r.jsx)(h.bq,{className:"py-1.5 text-xs",children:(0,r.jsx)(h.yv,{})}),(0,r.jsx)(h.gC,{children:M.map(e=>(0,r.jsx)(h.eb,{value:e.value,children:e.label},e.value))})]})}),(0,r.jsxs)("div",{className:"grid grid-cols-3 gap-1 sm:flex",children:[(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)(c.$,{variant:"ghost",size:"icon-sm",onClick:s=>{s.stopPropagation(),o(e.name,`combo-${e.id}`)},"aria-label":"Copy combo name",children:a===`combo-${e.id}`?(0,r.jsx)(b.A,{}):(0,r.jsx)(v.A,{})})}),(0,r.jsx)(x.ZI,{children:"Copy combo name"})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)(c.$,{variant:"ghost",size:"icon-sm",onClick:n,"aria-label":"Edit",children:(0,r.jsx)(y.A,{})})}),(0,r.jsx)(x.ZI,{children:"Edit"})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)(c.$,{variant:"ghost",size:"icon-sm",onClick:i,"aria-label":"Delete",className:"text-red-500 hover:bg-red-500/10 hover:text-red-500",children:(0,r.jsx)(k.A,{})})}),(0,r.jsx)(x.ZI,{children:"Delete"})]})]})]})]})}),j&&(0,r.jsx)(S.rq,{isOpen:j,onClose:()=>N(!1),onSelect:e=>{u({judgeModel:e?.value||""}),N(!1)},activeProviders:t,title:"Select Judge Model",addedModelValues:C?[C]:[],closeOnSelect:!0})]})}function P({id:e,index:s,model:t,isFirst:a,isLast:i,onEdit:d,onMoveUp:c,onMoveDown:m,onRemove:u}){let{attributes:h,listeners:j,setNodeRef:f,transform:p,isDragging:b}=(0,o.gl)({id:e}),v={transform:n.Ks.Transform.toString(p),opacity:b?.4:1,zIndex:b?999:void 0},[y,k]=(0,l.useState)(!1),[S,$]=(0,l.useState)(t),z=()=>{let e=S.trim();e&&e!==t?d(e):$(t),k(!1)};return(0,r.jsxs)("div",{ref:f,style:v,className:`group flex min-w-0 items-center gap-1.5 rounded-md px-2 py-1 bg-black/[0.02] hover:bg-black/[0.04] dark:bg-white/[0.02] dark:hover:bg-white/[0.04] transition-colors ${b?"shadow-md ring-1 ring-primary/30":""}`,children:[(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{...h,...j,type:"button",className:"cursor-grab touch-none p-0.5 rounded text-muted-foreground hover:text-primary active:cursor-grabbing shrink-0",children:(0,r.jsx)(N.A,{className:"size-4"})})}),(0,r.jsx)(x.ZI,{children:"Drag to reorder"})]}),(0,r.jsx)("span",{className:"text-[10px] font-medium text-muted-foreground w-3 text-center shrink-0",children:s+1}),y?(0,r.jsx)("input",{autoFocus:!0,value:S,onChange:e=>$(e.target.value),onBlur:z,onKeyDown:e=>{"Enter"===e.key&&z(),"Escape"===e.key&&($(t),k(!1))},className:"min-w-0 flex-1 rounded border border-primary/40 bg-white px-1.5 py-0.5 font-mono text-xs text-foreground outline-none dark:bg-black/20"}):(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("div",{className:"min-w-0 flex-1 cursor-text truncate rounded px-1.5 py-0.5 font-mono text-xs text-foreground hover:bg-black/5 dark:hover:bg-white/5",onClick:()=>k(!0),children:t})}),(0,r.jsx)(x.ZI,{children:"Click to edit"})]}),(0,r.jsxs)("div",{className:"flex shrink-0 items-center gap-0.5",children:[(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:c,disabled:a,className:`p-0.5 rounded ${a?"text-muted-foreground/20 cursor-not-allowed":"text-muted-foreground hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,children:(0,r.jsx)(w.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Move up"})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:m,disabled:i,className:`p-0.5 rounded ${i?"text-muted-foreground/20 cursor-not-allowed":"text-muted-foreground hover:text-primary hover:bg-black/5 dark:hover:bg-white/5"}`,children:(0,r.jsx)(C.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Move down"})]})]}),(0,r.jsxs)(x.m_,{children:[(0,r.jsx)(x.k$,{asChild:!0,children:(0,r.jsx)("button",{onClick:u,className:"p-0.5 hover:bg-red-500/10 rounded text-muted-foreground hover:text-red-500 transition-all",children:(0,r.jsx)(g.A,{className:"size-3"})})}),(0,r.jsx)(x.ZI,{children:"Remove"})]})]})}function F({isOpen:e,combo:s,onClose:t,onSave:n,activeProviders:d,kindFilter:x=null}){let[h,p]=(0,l.useState)(s?.name||""),[g,b]=(0,l.useState)(s?.models||[]),[v,y]=(0,l.useState)(!1),[k,N]=(0,l.useState)(!1),[w,C]=(0,l.useState)(""),[$,z]=(0,l.useState)({}),A=(0,a.FR)((0,a.MS)(a.AN,{activationConstraint:{distance:5}}),(0,a.MS)(a.uN,{coordinateGetter:o.JR})),M=g.map((e,s)=>({uid:`item-${s}`,model:e})),_=async()=>{try{let e=await fetch("/api/models/alias");if(!e.ok)return;let s=await e.json();z(s.aliases||{})}catch(e){console.error("Error fetching modal data:",e)}};(0,l.useEffect)(()=>{e&&_()},[e]);let O=e=>e.trim()?E.test(e)?(C(""),!0):(C("Only letters, numbers, -, _ and . allowed"),!1):(C("Name is required"),!1),I=async()=>{O(h)&&(N(!0),await n({name:h.trim(),models:g}),N(!1))},Z=!!s;return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(u.lG,{open:e,onOpenChange:e=>{e||t()},children:(0,r.jsxs)(u.Cf,{className:"max-w-md",children:[(0,r.jsx)(u.c7,{children:(0,r.jsx)(u.L3,{children:Z?"Edit Combo":"Create Combo"})}),(0,r.jsxs)("div",{className:"flex flex-col gap-3 p-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"text-sm font-medium text-foreground mb-1.5 block",children:"Combo Name"}),(0,r.jsx)(m.p,{value:h,onChange:e=>{let s=e.target.value;p(s),s?O(s):C("")},placeholder:"my-combo","aria-invalid":!!w,className:w?"ring-1 ring-red-500 border-red-500/40":""}),w&&(0,r.jsx)("p",{className:"mt-1 text-xs text-red-500",children:w}),(0,r.jsx)("p",{className:"text-[10px] text-muted-foreground mt-0.5",children:"Only letters, numbers, -, _ and . allowed"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Models"}),0===g.length?(0,r.jsxs)("div",{className:"text-center py-4 border border-dashed border-black/10 dark:border-white/10 rounded-lg bg-black/[0.01] dark:bg-white/[0.01]",children:[(0,r.jsx)(f.A,{className:"mb-1 mx-auto size-6 text-muted-foreground"}),(0,r.jsx)("p",{className:"text-xs text-muted-foreground",children:"No models added yet"})]}):(0,r.jsx)(a.Mp,{sensors:A,collisionDetection:a.fp,onDragEnd:e=>{let{active:s,over:t}=e;if(t&&s.id!==t.id){let e=M.findIndex(e=>e.uid===s.id),r=M.findIndex(e=>e.uid===t.id);-1!==e&&-1!==r&&b(s=>(0,o.be)(s,e,r))}},modifiers:[i.FN,i.gj],children:(0,r.jsx)(o.gB,{items:M.map(e=>e.uid),strategy:o._G,children:(0,r.jsx)("div",{className:"flex max-h-[55vh] min-w-0 flex-col gap-1 overflow-y-auto sm:max-h-[350px]",children:M.map(({uid:e,model:s},t)=>(0,r.jsx)(P,{id:e,index:t,model:s,isFirst:0===t,isLast:t===M.length-1,onEdit:e=>{let s=[...g];s[t]=e,b(s)},onMoveUp:()=>(e=>{if(0===e)return;let s=[...g];[s[e-1],s[e]]=[s[e],s[e-1]],b(s)})(t),onMoveDown:()=>(e=>{if(e===g.length-1)return;let s=[...g];[s[e],s[e+1]]=[s[e+1],s[e]],b(s)})(t),onRemove:()=>{b(g.filter((e,s)=>s!==t))}},e))})})}),(0,r.jsxs)("button",{onClick:()=>y(!0),className:"w-full mt-2 py-2 border border-dashed border-black/10 dark:border-white/10 rounded-lg text-xs text-primary font-medium hover:text-primary hover:border-primary/50 transition-colors flex items-center justify-center gap-1",children:[(0,r.jsx)(j.A,{className:"size-4"}),"Add Model"]})]})]}),(0,r.jsx)(u.Es,{children:(0,r.jsx)("div",{className:"flex w-full flex-col gap-2 pt-1 sm:flex-row",children:(0,r.jsx)(c.$,{onClick:I,size:"sm",className:"flex-1",disabled:!h.trim()||!!w||k,children:k?"Saving...":Z?"Save":"Create"})})})]})}),v&&(0,r.jsx)(S.rq,{isOpen:v,onClose:()=>y(!1),onSelect:e=>{g.includes(e.value)||b([...g,e.value])},onDeselect:e=>{b(g.filter(s=>s!==e.value))},activeProviders:d,modelAliases:$,title:"Add Model to Combo",kindFilter:x,addedModelValues:g,closeOnSelect:!1})]})}},67053:(e,s,t)=>{Promise.resolve().then(t.bind(t,29982))},92412:(e,s,t)=>{"use strict";t.d(s,{YW:()=>r.Page,pV:()=>r.CardGrid,wn:()=>r.Section,zY:()=>r.PageHeader}),t(16675),t(72778);var r=t(29575)},99656:(e,s,t)=>{"use strict";t.d(s,{PM:()=>r.PM,Sj:()=>r.Sj,Vy:()=>r.Vy,fF:()=>r.fF,sl:()=>r.sl,vL:()=>r.vL,y$:()=>r.y$,zM:()=>r.zM});var r=t(31872)}},e=>{e.O(0,[6766,5166,7552,9980,1471,5778,4484,3577,5862,5113,1699,7276,1722,1078,159,4489,1278,1830,208,427,9966,7358],()=>e(e.s=67053)),_N_E=e.O()}]);