@techysy/10router 1.3.6 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (656) hide show
  1. package/app/.next-cli-build/BUILD_ID +1 -1
  2. package/app/.next-cli-build/app-path-routes-manifest.json +5 -5
  3. package/app/.next-cli-build/build-manifest.json +2 -2
  4. package/app/.next-cli-build/prerender-manifest.json +1 -1
  5. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js +1 -1
  6. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page.js.nft.json +1 -1
  7. package/app/.next-cli-build/server/app/(dashboard)/dashboard/basic-chat/page_client-reference-manifest.js +1 -1
  8. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js +1 -1
  9. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page.js.nft.json +1 -1
  10. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/[toolId]/page_client-reference-manifest.js +1 -1
  11. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js +1 -1
  12. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page.js.nft.json +1 -1
  13. package/app/.next-cli-build/server/app/(dashboard)/dashboard/cli-tools/page_client-reference-manifest.js +1 -1
  14. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js +1 -1
  15. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page.js.nft.json +1 -1
  16. package/app/.next-cli-build/server/app/(dashboard)/dashboard/combos/page_client-reference-manifest.js +1 -1
  17. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js +1 -1
  18. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page.js.nft.json +1 -1
  19. package/app/.next-cli-build/server/app/(dashboard)/dashboard/console-log/page_client-reference-manifest.js +1 -1
  20. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js +1 -1
  21. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page.js.nft.json +1 -1
  22. package/app/.next-cli-build/server/app/(dashboard)/dashboard/endpoint/page_client-reference-manifest.js +1 -1
  23. package/app/.next-cli-build/server/app/(dashboard)/dashboard/experimental/page.js +1 -1
  24. package/app/.next-cli-build/server/app/(dashboard)/dashboard/experimental/page.js.nft.json +1 -1
  25. package/app/.next-cli-build/server/app/(dashboard)/dashboard/experimental/page_client-reference-manifest.js +1 -1
  26. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js +4 -4
  27. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page.js.nft.json +1 -1
  28. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/[id]/page_client-reference-manifest.js +1 -1
  29. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js +1 -1
  30. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page.js.nft.json +1 -1
  31. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/[kind]/page_client-reference-manifest.js +1 -1
  32. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js +1 -1
  33. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page.js.nft.json +1 -1
  34. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/combo/[id]/page_client-reference-manifest.js +1 -1
  35. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js +1 -1
  36. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page.js.nft.json +1 -1
  37. package/app/.next-cli-build/server/app/(dashboard)/dashboard/media-providers/web/page_client-reference-manifest.js +1 -1
  38. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js +1 -1
  39. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page.js.nft.json +1 -1
  40. package/app/.next-cli-build/server/app/(dashboard)/dashboard/mitm/page_client-reference-manifest.js +1 -1
  41. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js +1 -1
  42. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page.js.nft.json +1 -1
  43. package/app/.next-cli-build/server/app/(dashboard)/dashboard/page_client-reference-manifest.js +1 -1
  44. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js +1 -1
  45. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page.js.nft.json +1 -1
  46. package/app/.next-cli-build/server/app/(dashboard)/dashboard/profile/page_client-reference-manifest.js +1 -1
  47. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js +2 -2
  48. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page.js.nft.json +1 -1
  49. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/[id]/page_client-reference-manifest.js +1 -1
  50. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js +1 -1
  51. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page.js.nft.json +1 -1
  52. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/new/page_client-reference-manifest.js +1 -1
  53. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js +1 -1
  54. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page.js.nft.json +1 -1
  55. package/app/.next-cli-build/server/app/(dashboard)/dashboard/providers/page_client-reference-manifest.js +1 -1
  56. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js +1 -1
  57. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page.js.nft.json +1 -1
  58. package/app/.next-cli-build/server/app/(dashboard)/dashboard/proxy-pools/page_client-reference-manifest.js +1 -1
  59. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js +1 -1
  60. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page.js.nft.json +1 -1
  61. package/app/.next-cli-build/server/app/(dashboard)/dashboard/pxpipe/page_client-reference-manifest.js +1 -1
  62. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js +1 -1
  63. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page.js.nft.json +1 -1
  64. package/app/.next-cli-build/server/app/(dashboard)/dashboard/quota/page_client-reference-manifest.js +1 -1
  65. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js +1 -1
  66. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page.js.nft.json +1 -1
  67. package/app/.next-cli-build/server/app/(dashboard)/dashboard/skills/page_client-reference-manifest.js +1 -1
  68. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js +1 -1
  69. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page.js.nft.json +1 -1
  70. package/app/.next-cli-build/server/app/(dashboard)/dashboard/token-saver/page_client-reference-manifest.js +1 -1
  71. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js +1 -1
  72. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page.js.nft.json +1 -1
  73. package/app/.next-cli-build/server/app/(dashboard)/dashboard/translator/page_client-reference-manifest.js +1 -1
  74. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js +1 -1
  75. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page.js.nft.json +1 -1
  76. package/app/.next-cli-build/server/app/(dashboard)/dashboard/usage/page_client-reference-manifest.js +1 -1
  77. package/app/.next-cli-build/server/app/_global-error/page.js.nft.json +1 -1
  78. package/app/.next-cli-build/server/app/_global-error/page_client-reference-manifest.js +1 -1
  79. package/app/.next-cli-build/server/app/_global-error.html +1 -1
  80. package/app/.next-cli-build/server/app/_global-error.rsc +1 -1
  81. package/app/.next-cli-build/server/app/_global-error.segments/_full.segment.rsc +1 -1
  82. package/app/.next-cli-build/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  83. package/app/.next-cli-build/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  84. package/app/.next-cli-build/server/app/_not-found/page.js +1 -1
  85. package/app/.next-cli-build/server/app/_not-found/page.js.nft.json +1 -1
  86. package/app/.next-cli-build/server/app/_not-found/page_client-reference-manifest.js +1 -1
  87. package/app/.next-cli-build/server/app/_not-found.html +2 -2
  88. package/app/.next-cli-build/server/app/_not-found.rsc +6 -6
  89. package/app/.next-cli-build/server/app/_not-found.segments/_full.segment.rsc +6 -6
  90. package/app/.next-cli-build/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +6 -6
  91. package/app/.next-cli-build/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  92. package/app/.next-cli-build/server/app/api/auth/login/route.js +1 -1
  93. package/app/.next-cli-build/server/app/api/auth/login/route.js.nft.json +1 -1
  94. package/app/.next-cli-build/server/app/api/auth/logout/route.js.nft.json +1 -1
  95. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js +1 -1
  96. package/app/.next-cli-build/server/app/api/auth/oidc/callback/route.js.nft.json +1 -1
  97. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js +1 -1
  98. package/app/.next-cli-build/server/app/api/auth/oidc/start/route.js.nft.json +1 -1
  99. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js +1 -1
  100. package/app/.next-cli-build/server/app/api/auth/oidc/test/route.js.nft.json +1 -1
  101. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js +1 -1
  102. package/app/.next-cli-build/server/app/api/auth/reset-password/route.js.nft.json +1 -1
  103. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js +1 -1
  104. package/app/.next-cli-build/server/app/api/auth/saml/acs/route.js.nft.json +1 -1
  105. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js +2 -2
  106. package/app/.next-cli-build/server/app/api/auth/saml/metadata/route.js.nft.json +1 -1
  107. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js +2 -2
  108. package/app/.next-cli-build/server/app/api/auth/saml/start/route.js.nft.json +1 -1
  109. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js +2 -2
  110. package/app/.next-cli-build/server/app/api/auth/saml/test/route.js.nft.json +1 -1
  111. package/app/.next-cli-build/server/app/api/auth/status/route.js +1 -1
  112. package/app/.next-cli-build/server/app/api/auth/status/route.js.nft.json +1 -1
  113. package/app/.next-cli-build/server/app/api/auth/verify-password/route.js +1 -1
  114. package/app/.next-cli-build/server/app/api/auth/verify-password/route.js.nft.json +1 -1
  115. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js +1 -1
  116. package/app/.next-cli-build/server/app/api/cli-tools/all-statuses/route.js.nft.json +1 -1
  117. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js +1 -1
  118. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/alias/route.js.nft.json +1 -1
  119. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js +1 -1
  120. package/app/.next-cli-build/server/app/api/cli-tools/antigravity-mitm/route.js.nft.json +1 -1
  121. package/app/.next-cli-build/server/app/api/cli-tools/claude-profiles/route.js +2 -2
  122. package/app/.next-cli-build/server/app/api/cli-tools/claude-profiles/route.js.nft.json +1 -1
  123. package/app/.next-cli-build/server/app/api/cli-tools/claude-settings/route.js.nft.json +1 -1
  124. package/app/.next-cli-build/server/app/api/cli-tools/cline-settings/route.js.nft.json +1 -1
  125. package/app/.next-cli-build/server/app/api/cli-tools/codex-profiles/route.js.nft.json +1 -1
  126. package/app/.next-cli-build/server/app/api/cli-tools/codex-settings/route.js.nft.json +1 -1
  127. package/app/.next-cli-build/server/app/api/cli-tools/copilot-settings/route.js.nft.json +1 -1
  128. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-registry/route.js.nft.json +1 -1
  129. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js +2 -2
  130. package/app/.next-cli-build/server/app/api/cli-tools/cowork-mcp-tools/route.js.nft.json +1 -1
  131. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js +1 -1
  132. package/app/.next-cli-build/server/app/api/cli-tools/cowork-settings/route.js.nft.json +1 -1
  133. package/app/.next-cli-build/server/app/api/cli-tools/deepseek-tui-settings/route.js.nft.json +1 -1
  134. package/app/.next-cli-build/server/app/api/cli-tools/devin-settings/route.js.nft.json +1 -1
  135. package/app/.next-cli-build/server/app/api/cli-tools/droid-settings/route.js.nft.json +1 -1
  136. package/app/.next-cli-build/server/app/api/cli-tools/grok-build-settings/route.js.nft.json +1 -1
  137. package/app/.next-cli-build/server/app/api/cli-tools/hermes-settings/route.js.nft.json +1 -1
  138. package/app/.next-cli-build/server/app/api/cli-tools/jcode-settings/route.js.nft.json +1 -1
  139. package/app/.next-cli-build/server/app/api/cli-tools/kilo-settings/route.js.nft.json +1 -1
  140. package/app/.next-cli-build/server/app/api/cli-tools/openclaw-settings/route.js.nft.json +1 -1
  141. package/app/.next-cli-build/server/app/api/cli-tools/opencode-settings/route.js.nft.json +1 -1
  142. package/app/.next-cli-build/server/app/api/combos/[id]/route.js +1 -1
  143. package/app/.next-cli-build/server/app/api/combos/[id]/route.js.nft.json +1 -1
  144. package/app/.next-cli-build/server/app/api/combos/route.js +1 -1
  145. package/app/.next-cli-build/server/app/api/combos/route.js.nft.json +1 -1
  146. package/app/.next-cli-build/server/app/api/gateway-probe/route.js.nft.json +1 -1
  147. package/app/.next-cli-build/server/app/api/headroom/extras/route.js.nft.json +1 -1
  148. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js +1 -1
  149. package/app/.next-cli-build/server/app/api/headroom/proxy/[...path]/route.js.nft.json +1 -1
  150. package/app/.next-cli-build/server/app/api/headroom/restart/route.js +1 -1
  151. package/app/.next-cli-build/server/app/api/headroom/restart/route.js.nft.json +1 -1
  152. package/app/.next-cli-build/server/app/api/headroom/start/route.js +1 -1
  153. package/app/.next-cli-build/server/app/api/headroom/start/route.js.nft.json +1 -1
  154. package/app/.next-cli-build/server/app/api/headroom/status/route.js +1 -1
  155. package/app/.next-cli-build/server/app/api/headroom/status/route.js.nft.json +1 -1
  156. package/app/.next-cli-build/server/app/api/headroom/stop/route.js.nft.json +1 -1
  157. package/app/.next-cli-build/server/app/api/health/route.js.nft.json +1 -1
  158. package/app/.next-cli-build/server/app/api/init/route.js.nft.json +1 -1
  159. package/app/.next-cli-build/server/app/api/keys/[id]/route.js +1 -1
  160. package/app/.next-cli-build/server/app/api/keys/[id]/route.js.nft.json +1 -1
  161. package/app/.next-cli-build/server/app/api/keys/rotate/route.js +1 -1
  162. package/app/.next-cli-build/server/app/api/keys/rotate/route.js.nft.json +1 -1
  163. package/app/.next-cli-build/server/app/api/keys/route.js +1 -1
  164. package/app/.next-cli-build/server/app/api/keys/route.js.nft.json +1 -1
  165. package/app/.next-cli-build/server/app/api/locale/route.js.nft.json +1 -1
  166. package/app/.next-cli-build/server/app/api/mcp/[plugin]/message/route.js.nft.json +1 -1
  167. package/app/.next-cli-build/server/app/api/mcp/[plugin]/sse/route.js.nft.json +1 -1
  168. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js +1 -1
  169. package/app/.next-cli-build/server/app/api/media-providers/tts/deepgram/voices/route.js.nft.json +1 -1
  170. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js +1 -1
  171. package/app/.next-cli-build/server/app/api/media-providers/tts/elevenlabs/voices/route.js.nft.json +1 -1
  172. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js +1 -1
  173. package/app/.next-cli-build/server/app/api/media-providers/tts/inworld/voices/route.js.nft.json +1 -1
  174. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js +1 -1
  175. package/app/.next-cli-build/server/app/api/media-providers/tts/minimax/voices/route.js.nft.json +1 -1
  176. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js +1 -1
  177. package/app/.next-cli-build/server/app/api/media-providers/tts/voices/route.js.nft.json +1 -1
  178. package/app/.next-cli-build/server/app/api/models/alias/route.js +1 -1
  179. package/app/.next-cli-build/server/app/api/models/alias/route.js.nft.json +1 -1
  180. package/app/.next-cli-build/server/app/api/models/availability/route.js +1 -1
  181. package/app/.next-cli-build/server/app/api/models/availability/route.js.nft.json +1 -1
  182. package/app/.next-cli-build/server/app/api/models/caps/route.js +1 -1
  183. package/app/.next-cli-build/server/app/api/models/caps/route.js.nft.json +1 -1
  184. package/app/.next-cli-build/server/app/api/models/custom/bulk/route.js.nft.json +1 -1
  185. package/app/.next-cli-build/server/app/api/models/custom/route.js +1 -1
  186. package/app/.next-cli-build/server/app/api/models/custom/route.js.nft.json +1 -1
  187. package/app/.next-cli-build/server/app/api/models/disabled/route.js +1 -1
  188. package/app/.next-cli-build/server/app/api/models/disabled/route.js.nft.json +1 -1
  189. package/app/.next-cli-build/server/app/api/models/route.js +1 -1
  190. package/app/.next-cli-build/server/app/api/models/route.js.nft.json +1 -1
  191. package/app/.next-cli-build/server/app/api/models/test/route.js +1 -1
  192. package/app/.next-cli-build/server/app/api/models/test/route.js.nft.json +1 -1
  193. package/app/.next-cli-build/server/app/api/network/egress-region/route.js.nft.json +1 -1
  194. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js +1 -1
  195. package/app/.next-cli-build/server/app/api/oauth/[provider]/[action]/route.js.nft.json +1 -1
  196. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js +1 -1
  197. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/bulk-import/route.js.nft.json +1 -1
  198. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/checkin/route.js +1 -1
  199. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/checkin/route.js.nft.json +1 -1
  200. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/export/route.js +1 -1
  201. package/app/.next-cli-build/server/app/api/oauth/codebuddy-cn/export/route.js.nft.json +1 -1
  202. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js +1 -1
  203. package/app/.next-cli-build/server/app/api/oauth/codex/bulk-import/route.js.nft.json +1 -1
  204. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js +1 -1
  205. package/app/.next-cli-build/server/app/api/oauth/codex/import-token/route.js.nft.json +1 -1
  206. package/app/.next-cli-build/server/app/api/oauth/cursor/auto-import/route.js.nft.json +1 -1
  207. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js +1 -1
  208. package/app/.next-cli-build/server/app/api/oauth/cursor/import/route.js.nft.json +1 -1
  209. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js +1 -1
  210. package/app/.next-cli-build/server/app/api/oauth/gitlab/pat/route.js.nft.json +1 -1
  211. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js +1 -1
  212. package/app/.next-cli-build/server/app/api/oauth/iflow/cookie/route.js.nft.json +1 -1
  213. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js +1 -1
  214. package/app/.next-cli-build/server/app/api/oauth/kiro/api-key/route.js.nft.json +1 -1
  215. package/app/.next-cli-build/server/app/api/oauth/kiro/auto-import/route.js.nft.json +1 -1
  216. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js +1 -1
  217. package/app/.next-cli-build/server/app/api/oauth/kiro/import/route.js.nft.json +1 -1
  218. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js +1 -1
  219. package/app/.next-cli-build/server/app/api/oauth/kiro/import-cli-proxy/route.js.nft.json +1 -1
  220. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js +1 -1
  221. package/app/.next-cli-build/server/app/api/oauth/kiro/social-authorize/route.js.nft.json +1 -1
  222. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js +1 -1
  223. package/app/.next-cli-build/server/app/api/oauth/kiro/social-exchange/route.js.nft.json +1 -1
  224. package/app/.next-cli-build/server/app/api/oauth/qoder/checkin/route.js.nft.json +1 -1
  225. package/app/.next-cli-build/server/app/api/oauth/qoder-cn/checkin/route.js.nft.json +1 -1
  226. package/app/.next-cli-build/server/app/api/oauth/transfer/export/route.js +1 -1
  227. package/app/.next-cli-build/server/app/api/oauth/transfer/export/route.js.nft.json +1 -1
  228. package/app/.next-cli-build/server/app/api/oauth/transfer/import/route.js +1 -1
  229. package/app/.next-cli-build/server/app/api/oauth/transfer/import/route.js.nft.json +1 -1
  230. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js +1 -1
  231. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/api-key/route.js.nft.json +1 -1
  232. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js +1 -1
  233. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/auto-import/route.js.nft.json +1 -1
  234. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/desktop-kill/route.js.nft.json +1 -1
  235. package/app/.next-cli-build/server/app/api/oauth/xiaomi-mimo/desktop-status/route.js.nft.json +1 -1
  236. package/app/.next-cli-build/server/app/api/oauth/zed/auto-import/route.js.nft.json +1 -1
  237. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js +1 -1
  238. package/app/.next-cli-build/server/app/api/oauth/zed/import/route.js.nft.json +1 -1
  239. package/app/.next-cli-build/server/app/api/pricing/route.js +1 -1
  240. package/app/.next-cli-build/server/app/api/pricing/route.js.nft.json +1 -1
  241. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js +1 -1
  242. package/app/.next-cli-build/server/app/api/provider-nodes/[id]/route.js.nft.json +1 -1
  243. package/app/.next-cli-build/server/app/api/provider-nodes/route.js +1 -1
  244. package/app/.next-cli-build/server/app/api/provider-nodes/route.js.nft.json +1 -1
  245. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js +1 -1
  246. package/app/.next-cli-build/server/app/api/provider-nodes/validate/route.js.nft.json +1 -1
  247. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js +1 -1
  248. package/app/.next-cli-build/server/app/api/providers/[id]/models/route.js.nft.json +1 -1
  249. package/app/.next-cli-build/server/app/api/providers/[id]/route.js +1 -1
  250. package/app/.next-cli-build/server/app/api/providers/[id]/route.js.nft.json +1 -1
  251. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js +1 -1
  252. package/app/.next-cli-build/server/app/api/providers/[id]/test/route.js.nft.json +1 -1
  253. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js +1 -1
  254. package/app/.next-cli-build/server/app/api/providers/[id]/test-models/route.js.nft.json +1 -1
  255. package/app/.next-cli-build/server/app/api/providers/client/route.js +1 -1
  256. package/app/.next-cli-build/server/app/api/providers/client/route.js.nft.json +1 -1
  257. package/app/.next-cli-build/server/app/api/providers/kilo/free-models/route.js.nft.json +1 -1
  258. package/app/.next-cli-build/server/app/api/providers/route.js +1 -1
  259. package/app/.next-cli-build/server/app/api/providers/route.js.nft.json +1 -1
  260. package/app/.next-cli-build/server/app/api/providers/suggested-models/route.js.nft.json +1 -1
  261. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js +1 -1
  262. package/app/.next-cli-build/server/app/api/providers/test-batch/route.js.nft.json +1 -1
  263. package/app/.next-cli-build/server/app/api/providers/validate/route.js +1 -1
  264. package/app/.next-cli-build/server/app/api/providers/validate/route.js.nft.json +1 -1
  265. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js +1 -1
  266. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/route.js.nft.json +1 -1
  267. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js +1 -1
  268. package/app/.next-cli-build/server/app/api/proxy-pools/[id]/test/route.js.nft.json +1 -1
  269. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js +1 -1
  270. package/app/.next-cli-build/server/app/api/proxy-pools/cloudflare-deploy/route.js.nft.json +1 -1
  271. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js +2 -2
  272. package/app/.next-cli-build/server/app/api/proxy-pools/deno-deploy/route.js.nft.json +1 -1
  273. package/app/.next-cli-build/server/app/api/proxy-pools/route.js +1 -1
  274. package/app/.next-cli-build/server/app/api/proxy-pools/route.js.nft.json +1 -1
  275. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js +2 -2
  276. package/app/.next-cli-build/server/app/api/proxy-pools/vercel-deploy/route.js.nft.json +1 -1
  277. package/app/.next-cli-build/server/app/api/pxpipe/health/route.js.nft.json +1 -1
  278. package/app/.next-cli-build/server/app/api/pxpipe/install/route.js.nft.json +1 -1
  279. package/app/.next-cli-build/server/app/api/pxpipe/logs/route.js.nft.json +1 -1
  280. package/app/.next-cli-build/server/app/api/pxpipe/restart/route.js.nft.json +1 -1
  281. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js +2 -2
  282. package/app/.next-cli-build/server/app/api/pxpipe/start/route.js.nft.json +1 -1
  283. package/app/.next-cli-build/server/app/api/pxpipe/stats/route.js.nft.json +1 -1
  284. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js +2 -2
  285. package/app/.next-cli-build/server/app/api/pxpipe/status/route.js.nft.json +1 -1
  286. package/app/.next-cli-build/server/app/api/pxpipe/stop/route.js.nft.json +1 -1
  287. package/app/.next-cli-build/server/app/api/security/status/route.js +1 -1
  288. package/app/.next-cli-build/server/app/api/security/status/route.js.nft.json +1 -1
  289. package/app/.next-cli-build/server/app/api/settings/database/import-usage/route.js +1 -1
  290. package/app/.next-cli-build/server/app/api/settings/database/import-usage/route.js.nft.json +1 -1
  291. package/app/.next-cli-build/server/app/api/settings/database/route.js +1 -1
  292. package/app/.next-cli-build/server/app/api/settings/database/route.js.nft.json +1 -1
  293. package/app/.next-cli-build/server/app/api/settings/proxy-test/route.js.nft.json +1 -1
  294. package/app/.next-cli-build/server/app/api/settings/require-login/route.js +1 -1
  295. package/app/.next-cli-build/server/app/api/settings/require-login/route.js.nft.json +1 -1
  296. package/app/.next-cli-build/server/app/api/settings/route.js +2 -2
  297. package/app/.next-cli-build/server/app/api/settings/route.js.nft.json +1 -1
  298. package/app/.next-cli-build/server/app/api/shutdown/route.js.nft.json +1 -1
  299. package/app/.next-cli-build/server/app/api/tags/route.js.nft.json +1 -1
  300. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js +1 -1
  301. package/app/.next-cli-build/server/app/api/translator/console-logs/route.js.nft.json +1 -1
  302. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js +1 -1
  303. package/app/.next-cli-build/server/app/api/translator/console-logs/stream/route.js.nft.json +1 -1
  304. package/app/.next-cli-build/server/app/api/translator/load/route.js.nft.json +1 -1
  305. package/app/.next-cli-build/server/app/api/translator/save/route.js.nft.json +1 -1
  306. package/app/.next-cli-build/server/app/api/translator/send/route.js +1 -1
  307. package/app/.next-cli-build/server/app/api/translator/send/route.js.nft.json +1 -1
  308. package/app/.next-cli-build/server/app/api/translator/translate/route.js +1 -1
  309. package/app/.next-cli-build/server/app/api/translator/translate/route.js.nft.json +1 -1
  310. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js +1 -1
  311. package/app/.next-cli-build/server/app/api/tunnel/disable/route.js.nft.json +1 -1
  312. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js +1 -1
  313. package/app/.next-cli-build/server/app/api/tunnel/enable/route.js.nft.json +1 -1
  314. package/app/.next-cli-build/server/app/api/tunnel/status/route.js +1 -1
  315. package/app/.next-cli-build/server/app/api/tunnel/status/route.js.nft.json +1 -1
  316. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js +1 -1
  317. package/app/.next-cli-build/server/app/api/tunnel/tailscale-check/route.js.nft.json +1 -1
  318. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js +1 -1
  319. package/app/.next-cli-build/server/app/api/tunnel/tailscale-disable/route.js.nft.json +1 -1
  320. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js +1 -1
  321. package/app/.next-cli-build/server/app/api/tunnel/tailscale-enable/route.js.nft.json +1 -1
  322. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js +1 -1
  323. package/app/.next-cli-build/server/app/api/tunnel/tailscale-install/route.js.nft.json +1 -1
  324. package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js +1 -1
  325. package/app/.next-cli-build/server/app/api/usage/[connectionId]/claude-reset/route.js.nft.json +1 -1
  326. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js +1 -1
  327. package/app/.next-cli-build/server/app/api/usage/[connectionId]/codex-reset-credits/route.js.nft.json +1 -1
  328. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js +1 -1
  329. package/app/.next-cli-build/server/app/api/usage/[connectionId]/route.js.nft.json +1 -1
  330. package/app/.next-cli-build/server/app/api/usage/chart/route.js +1 -1
  331. package/app/.next-cli-build/server/app/api/usage/chart/route.js.nft.json +1 -1
  332. package/app/.next-cli-build/server/app/api/usage/dashboard/route.js +1 -1
  333. package/app/.next-cli-build/server/app/api/usage/dashboard/route.js.nft.json +1 -1
  334. package/app/.next-cli-build/server/app/api/usage/history/route.js +1 -1
  335. package/app/.next-cli-build/server/app/api/usage/history/route.js.nft.json +1 -1
  336. package/app/.next-cli-build/server/app/api/usage/logs/route.js +1 -1
  337. package/app/.next-cli-build/server/app/api/usage/logs/route.js.nft.json +1 -1
  338. package/app/.next-cli-build/server/app/api/usage/providers/route.js +1 -1
  339. package/app/.next-cli-build/server/app/api/usage/providers/route.js.nft.json +1 -1
  340. package/app/.next-cli-build/server/app/api/usage/quotas/route.js +1 -1
  341. package/app/.next-cli-build/server/app/api/usage/quotas/route.js.nft.json +1 -1
  342. package/app/.next-cli-build/server/app/api/usage/request-details/route.js +1 -1
  343. package/app/.next-cli-build/server/app/api/usage/request-details/route.js.nft.json +1 -1
  344. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js +1 -1
  345. package/app/.next-cli-build/server/app/api/usage/request-logs/route.js.nft.json +1 -1
  346. package/app/.next-cli-build/server/app/api/usage/stats/route.js +1 -1
  347. package/app/.next-cli-build/server/app/api/usage/stats/route.js.nft.json +1 -1
  348. package/app/.next-cli-build/server/app/api/usage/stream/route.js +2 -2
  349. package/app/.next-cli-build/server/app/api/usage/stream/route.js.nft.json +1 -1
  350. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js +1 -1
  351. package/app/.next-cli-build/server/app/api/v1/api/chat/route.js.nft.json +1 -1
  352. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js +1 -1
  353. package/app/.next-cli-build/server/app/api/v1/audio/speech/route.js.nft.json +1 -1
  354. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js +1 -1
  355. package/app/.next-cli-build/server/app/api/v1/audio/transcriptions/route.js.nft.json +1 -1
  356. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js +1 -1
  357. package/app/.next-cli-build/server/app/api/v1/audio/voices/route.js.nft.json +1 -1
  358. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js +1 -1
  359. package/app/.next-cli-build/server/app/api/v1/chat/completions/route.js.nft.json +1 -1
  360. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js +1 -1
  361. package/app/.next-cli-build/server/app/api/v1/embeddings/route.js.nft.json +1 -1
  362. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js +2 -2
  363. package/app/.next-cli-build/server/app/api/v1/images/generations/route.js.nft.json +1 -1
  364. package/app/.next-cli-build/server/app/api/v1/messages/count_tokens/route.js.nft.json +1 -1
  365. package/app/.next-cli-build/server/app/api/v1/messages/route.js +1 -1
  366. package/app/.next-cli-build/server/app/api/v1/messages/route.js.nft.json +1 -1
  367. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js +1 -1
  368. package/app/.next-cli-build/server/app/api/v1/models/[kind]/route.js.nft.json +1 -1
  369. package/app/.next-cli-build/server/app/api/v1/models/info/route.js +1 -1
  370. package/app/.next-cli-build/server/app/api/v1/models/info/route.js.nft.json +1 -1
  371. package/app/.next-cli-build/server/app/api/v1/models/route.js +1 -1
  372. package/app/.next-cli-build/server/app/api/v1/models/route.js.nft.json +1 -1
  373. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js +1 -1
  374. package/app/.next-cli-build/server/app/api/v1/responses/compact/route.js.nft.json +1 -1
  375. package/app/.next-cli-build/server/app/api/v1/responses/route.js +1 -1
  376. package/app/.next-cli-build/server/app/api/v1/responses/route.js.nft.json +1 -1
  377. package/app/.next-cli-build/server/app/api/v1/route.js +1 -1
  378. package/app/.next-cli-build/server/app/api/v1/route.js.nft.json +1 -1
  379. package/app/.next-cli-build/server/app/api/v1/search/route.js +1 -1
  380. package/app/.next-cli-build/server/app/api/v1/search/route.js.nft.json +1 -1
  381. package/app/.next-cli-build/server/app/api/v1/systemone/route.js +1 -1
  382. package/app/.next-cli-build/server/app/api/v1/systemone/route.js.nft.json +1 -1
  383. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js +1 -1
  384. package/app/.next-cli-build/server/app/api/v1/videos/[id]/route.js.nft.json +1 -1
  385. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js +1 -1
  386. package/app/.next-cli-build/server/app/api/v1/videos/edits/route.js.nft.json +1 -1
  387. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js +1 -1
  388. package/app/.next-cli-build/server/app/api/v1/videos/extensions/route.js.nft.json +1 -1
  389. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js +1 -1
  390. package/app/.next-cli-build/server/app/api/v1/videos/generations/route.js.nft.json +1 -1
  391. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js +1 -1
  392. package/app/.next-cli-build/server/app/api/v1/web/fetch/route.js.nft.json +1 -1
  393. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js +1 -1
  394. package/app/.next-cli-build/server/app/api/v1beta/models/[...path]/route.js.nft.json +1 -1
  395. package/app/.next-cli-build/server/app/api/v1beta/models/route.js +1 -1
  396. package/app/.next-cli-build/server/app/api/v1beta/models/route.js.nft.json +1 -1
  397. package/app/.next-cli-build/server/app/api/version/route.js +2 -2
  398. package/app/.next-cli-build/server/app/api/version/route.js.nft.json +1 -1
  399. package/app/.next-cli-build/server/app/api/version/shell-update/route.js.nft.json +1 -1
  400. package/app/.next-cli-build/server/app/api/version/shutdown/route.js +1 -1
  401. package/app/.next-cli-build/server/app/api/version/shutdown/route.js.nft.json +1 -1
  402. package/app/.next-cli-build/server/app/api/version/update/route.js +1 -1
  403. package/app/.next-cli-build/server/app/api/version/update/route.js.nft.json +1 -1
  404. package/app/.next-cli-build/server/app/callback/page.js +1 -1
  405. package/app/.next-cli-build/server/app/callback/page.js.nft.json +1 -1
  406. package/app/.next-cli-build/server/app/callback/page_client-reference-manifest.js +1 -1
  407. package/app/.next-cli-build/server/app/callback.html +2 -2
  408. package/app/.next-cli-build/server/app/callback.rsc +6 -6
  409. package/app/.next-cli-build/server/app/callback.segments/_full.segment.rsc +6 -6
  410. package/app/.next-cli-build/server/app/callback.segments/_tree.segment.rsc +2 -2
  411. package/app/.next-cli-build/server/app/callback.segments/callback/__PAGE__.segment.rsc +6 -6
  412. package/app/.next-cli-build/server/app/dashboard/basic-chat.html +2 -2
  413. package/app/.next-cli-build/server/app/dashboard/basic-chat.rsc +8 -8
  414. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/!KGRhc2hib2FyZCk/dashboard/basic-chat/__PAGE__.segment.rsc +8 -8
  415. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_full.segment.rsc +8 -8
  416. package/app/.next-cli-build/server/app/dashboard/basic-chat.segments/_tree.segment.rsc +2 -2
  417. package/app/.next-cli-build/server/app/dashboard/cli-tools.html +2 -2
  418. package/app/.next-cli-build/server/app/dashboard/cli-tools.rsc +8 -8
  419. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/!KGRhc2hib2FyZCk/dashboard/cli-tools/__PAGE__.segment.rsc +8 -8
  420. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_full.segment.rsc +8 -8
  421. package/app/.next-cli-build/server/app/dashboard/cli-tools.segments/_tree.segment.rsc +2 -2
  422. package/app/.next-cli-build/server/app/dashboard/combos.html +2 -2
  423. package/app/.next-cli-build/server/app/dashboard/combos.rsc +8 -8
  424. package/app/.next-cli-build/server/app/dashboard/combos.segments/!KGRhc2hib2FyZCk/dashboard/combos/__PAGE__.segment.rsc +8 -8
  425. package/app/.next-cli-build/server/app/dashboard/combos.segments/_full.segment.rsc +8 -8
  426. package/app/.next-cli-build/server/app/dashboard/combos.segments/_tree.segment.rsc +2 -2
  427. package/app/.next-cli-build/server/app/dashboard/endpoint.html +2 -2
  428. package/app/.next-cli-build/server/app/dashboard/endpoint.rsc +8 -8
  429. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/!KGRhc2hib2FyZCk/dashboard/endpoint/__PAGE__.segment.rsc +8 -8
  430. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_full.segment.rsc +8 -8
  431. package/app/.next-cli-build/server/app/dashboard/endpoint.segments/_tree.segment.rsc +2 -2
  432. package/app/.next-cli-build/server/app/dashboard/experimental.html +2 -2
  433. package/app/.next-cli-build/server/app/dashboard/experimental.rsc +8 -8
  434. package/app/.next-cli-build/server/app/dashboard/experimental.segments/!KGRhc2hib2FyZCk/dashboard/experimental/__PAGE__.segment.rsc +8 -8
  435. package/app/.next-cli-build/server/app/dashboard/experimental.segments/_full.segment.rsc +8 -8
  436. package/app/.next-cli-build/server/app/dashboard/experimental.segments/_tree.segment.rsc +2 -2
  437. package/app/.next-cli-build/server/app/dashboard/media-providers/web.html +2 -2
  438. package/app/.next-cli-build/server/app/dashboard/media-providers/web.rsc +8 -8
  439. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/!KGRhc2hib2FyZCk/dashboard/media-providers/web/__PAGE__.segment.rsc +8 -8
  440. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_full.segment.rsc +8 -8
  441. package/app/.next-cli-build/server/app/dashboard/media-providers/web.segments/_tree.segment.rsc +2 -2
  442. package/app/.next-cli-build/server/app/dashboard/mitm.html +2 -2
  443. package/app/.next-cli-build/server/app/dashboard/mitm.rsc +8 -8
  444. package/app/.next-cli-build/server/app/dashboard/mitm.segments/!KGRhc2hib2FyZCk/dashboard/mitm/__PAGE__.segment.rsc +8 -8
  445. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_full.segment.rsc +8 -8
  446. package/app/.next-cli-build/server/app/dashboard/mitm.segments/_tree.segment.rsc +2 -2
  447. package/app/.next-cli-build/server/app/dashboard/profile.html +2 -2
  448. package/app/.next-cli-build/server/app/dashboard/profile.rsc +8 -8
  449. package/app/.next-cli-build/server/app/dashboard/profile.segments/!KGRhc2hib2FyZCk/dashboard/profile/__PAGE__.segment.rsc +8 -8
  450. package/app/.next-cli-build/server/app/dashboard/profile.segments/_full.segment.rsc +8 -8
  451. package/app/.next-cli-build/server/app/dashboard/profile.segments/_tree.segment.rsc +2 -2
  452. package/app/.next-cli-build/server/app/dashboard/providers/new.html +2 -2
  453. package/app/.next-cli-build/server/app/dashboard/providers/new.rsc +8 -8
  454. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/!KGRhc2hib2FyZCk/dashboard/providers/new/__PAGE__.segment.rsc +8 -8
  455. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_full.segment.rsc +8 -8
  456. package/app/.next-cli-build/server/app/dashboard/providers/new.segments/_tree.segment.rsc +2 -2
  457. package/app/.next-cli-build/server/app/dashboard/providers.html +2 -2
  458. package/app/.next-cli-build/server/app/dashboard/providers.rsc +8 -8
  459. package/app/.next-cli-build/server/app/dashboard/providers.segments/!KGRhc2hib2FyZCk/dashboard/providers/__PAGE__.segment.rsc +8 -8
  460. package/app/.next-cli-build/server/app/dashboard/providers.segments/_full.segment.rsc +8 -8
  461. package/app/.next-cli-build/server/app/dashboard/providers.segments/_tree.segment.rsc +2 -2
  462. package/app/.next-cli-build/server/app/dashboard/proxy-pools.html +2 -2
  463. package/app/.next-cli-build/server/app/dashboard/proxy-pools.rsc +8 -8
  464. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/!KGRhc2hib2FyZCk/dashboard/proxy-pools/__PAGE__.segment.rsc +8 -8
  465. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_full.segment.rsc +8 -8
  466. package/app/.next-cli-build/server/app/dashboard/proxy-pools.segments/_tree.segment.rsc +2 -2
  467. package/app/.next-cli-build/server/app/dashboard/pxpipe.html +2 -2
  468. package/app/.next-cli-build/server/app/dashboard/pxpipe.rsc +8 -8
  469. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/!KGRhc2hib2FyZCk/dashboard/pxpipe/__PAGE__.segment.rsc +8 -8
  470. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_full.segment.rsc +8 -8
  471. package/app/.next-cli-build/server/app/dashboard/pxpipe.segments/_tree.segment.rsc +2 -2
  472. package/app/.next-cli-build/server/app/dashboard/quota.html +2 -2
  473. package/app/.next-cli-build/server/app/dashboard/quota.rsc +9 -9
  474. package/app/.next-cli-build/server/app/dashboard/quota.segments/!KGRhc2hib2FyZCk/dashboard/quota/__PAGE__.segment.rsc +9 -9
  475. package/app/.next-cli-build/server/app/dashboard/quota.segments/_full.segment.rsc +9 -9
  476. package/app/.next-cli-build/server/app/dashboard/quota.segments/_tree.segment.rsc +2 -2
  477. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js +1 -1
  478. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page.js.nft.json +1 -1
  479. package/app/.next-cli-build/server/app/dashboard/settings/pricing/page_client-reference-manifest.js +1 -1
  480. package/app/.next-cli-build/server/app/dashboard/settings/pricing.html +2 -2
  481. package/app/.next-cli-build/server/app/dashboard/settings/pricing.rsc +6 -6
  482. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_full.segment.rsc +6 -6
  483. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/_tree.segment.rsc +2 -2
  484. package/app/.next-cli-build/server/app/dashboard/settings/pricing.segments/dashboard/settings/pricing/__PAGE__.segment.rsc +6 -6
  485. package/app/.next-cli-build/server/app/dashboard/skills.html +2 -2
  486. package/app/.next-cli-build/server/app/dashboard/skills.rsc +8 -8
  487. package/app/.next-cli-build/server/app/dashboard/skills.segments/!KGRhc2hib2FyZCk/dashboard/skills/__PAGE__.segment.rsc +8 -8
  488. package/app/.next-cli-build/server/app/dashboard/skills.segments/_full.segment.rsc +8 -8
  489. package/app/.next-cli-build/server/app/dashboard/skills.segments/_tree.segment.rsc +2 -2
  490. package/app/.next-cli-build/server/app/dashboard/token-saver.html +2 -2
  491. package/app/.next-cli-build/server/app/dashboard/token-saver.rsc +8 -8
  492. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/!KGRhc2hib2FyZCk/dashboard/token-saver/__PAGE__.segment.rsc +8 -8
  493. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_full.segment.rsc +8 -8
  494. package/app/.next-cli-build/server/app/dashboard/token-saver.segments/_tree.segment.rsc +2 -2
  495. package/app/.next-cli-build/server/app/dashboard/translator.html +2 -2
  496. package/app/.next-cli-build/server/app/dashboard/translator.rsc +8 -8
  497. package/app/.next-cli-build/server/app/dashboard/translator.segments/!KGRhc2hib2FyZCk/dashboard/translator/__PAGE__.segment.rsc +8 -8
  498. package/app/.next-cli-build/server/app/dashboard/translator.segments/_full.segment.rsc +8 -8
  499. package/app/.next-cli-build/server/app/dashboard/translator.segments/_tree.segment.rsc +2 -2
  500. package/app/.next-cli-build/server/app/dashboard/usage.html +2 -2
  501. package/app/.next-cli-build/server/app/dashboard/usage.rsc +8 -8
  502. package/app/.next-cli-build/server/app/dashboard/usage.segments/!KGRhc2hib2FyZCk/dashboard/usage/__PAGE__.segment.rsc +8 -8
  503. package/app/.next-cli-build/server/app/dashboard/usage.segments/_full.segment.rsc +8 -8
  504. package/app/.next-cli-build/server/app/dashboard/usage.segments/_tree.segment.rsc +2 -2
  505. package/app/.next-cli-build/server/app/dashboard.html +2 -2
  506. package/app/.next-cli-build/server/app/dashboard.rsc +8 -8
  507. package/app/.next-cli-build/server/app/dashboard.segments/!KGRhc2hib2FyZCk/dashboard/__PAGE__.segment.rsc +8 -8
  508. package/app/.next-cli-build/server/app/dashboard.segments/_full.segment.rsc +8 -8
  509. package/app/.next-cli-build/server/app/dashboard.segments/_tree.segment.rsc +2 -2
  510. package/app/.next-cli-build/server/app/favicon.ico/route.js.nft.json +1 -1
  511. package/app/.next-cli-build/server/app/index.html +1 -1
  512. package/app/.next-cli-build/server/app/index.rsc +6 -6
  513. package/app/.next-cli-build/server/app/index.segments/__PAGE__.segment.rsc +6 -6
  514. package/app/.next-cli-build/server/app/index.segments/_full.segment.rsc +6 -6
  515. package/app/.next-cli-build/server/app/index.segments/_tree.segment.rsc +2 -2
  516. package/app/.next-cli-build/server/app/landing/page.js +1 -1
  517. package/app/.next-cli-build/server/app/landing/page.js.nft.json +1 -1
  518. package/app/.next-cli-build/server/app/landing/page_client-reference-manifest.js +1 -1
  519. package/app/.next-cli-build/server/app/landing.html +2 -2
  520. package/app/.next-cli-build/server/app/landing.rsc +6 -6
  521. package/app/.next-cli-build/server/app/landing.segments/_full.segment.rsc +6 -6
  522. package/app/.next-cli-build/server/app/landing.segments/_tree.segment.rsc +2 -2
  523. package/app/.next-cli-build/server/app/landing.segments/landing/__PAGE__.segment.rsc +6 -6
  524. package/app/.next-cli-build/server/app/login/page.js +1 -1
  525. package/app/.next-cli-build/server/app/login/page.js.nft.json +1 -1
  526. package/app/.next-cli-build/server/app/login/page_client-reference-manifest.js +1 -1
  527. package/app/.next-cli-build/server/app/login.html +2 -2
  528. package/app/.next-cli-build/server/app/login.rsc +7 -7
  529. package/app/.next-cli-build/server/app/login.segments/_full.segment.rsc +7 -7
  530. package/app/.next-cli-build/server/app/login.segments/_tree.segment.rsc +2 -2
  531. package/app/.next-cli-build/server/app/login.segments/login/__PAGE__.segment.rsc +7 -7
  532. package/app/.next-cli-build/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  533. package/app/.next-cli-build/server/app/page.js +1 -1
  534. package/app/.next-cli-build/server/app/page.js.nft.json +1 -1
  535. package/app/.next-cli-build/server/app/page_client-reference-manifest.js +1 -1
  536. package/app/.next-cli-build/server/app-paths-manifest.json +5 -5
  537. package/app/.next-cli-build/server/chunks/1329.js +1 -1
  538. package/app/.next-cli-build/server/chunks/1345.js +1 -0
  539. package/app/.next-cli-build/server/chunks/1386.js +2 -2
  540. package/app/.next-cli-build/server/chunks/1806.js +1 -0
  541. package/app/.next-cli-build/server/chunks/2112.js +1 -1
  542. package/app/.next-cli-build/server/chunks/2557.js +9 -0
  543. package/app/.next-cli-build/server/chunks/2752.js +1 -0
  544. package/app/.next-cli-build/server/chunks/2926.js +1 -1
  545. package/app/.next-cli-build/server/chunks/2978.js +1 -0
  546. package/app/.next-cli-build/server/chunks/3256.js +1 -1
  547. package/app/.next-cli-build/server/chunks/3593.js +2 -2
  548. package/app/.next-cli-build/server/chunks/3659.js +1 -0
  549. package/app/.next-cli-build/server/chunks/3662.js +1 -0
  550. package/app/.next-cli-build/server/chunks/3792.js +1 -1
  551. package/app/.next-cli-build/server/chunks/3943.js +1 -1
  552. package/app/.next-cli-build/server/chunks/3962.js +1 -0
  553. package/app/.next-cli-build/server/chunks/4008.js +1 -1
  554. package/app/.next-cli-build/server/chunks/4123.js +1 -1
  555. package/app/.next-cli-build/server/chunks/4293.js +1 -1
  556. package/app/.next-cli-build/server/chunks/4692.js +6 -0
  557. package/app/.next-cli-build/server/chunks/4739.js +2 -2
  558. package/app/.next-cli-build/server/chunks/4780.js +2 -2
  559. package/app/.next-cli-build/server/chunks/4803.js +2 -2
  560. package/app/.next-cli-build/server/chunks/4927.js +3 -3
  561. package/app/.next-cli-build/server/chunks/507.js +2 -2
  562. package/app/.next-cli-build/server/chunks/5182.js +1 -1
  563. package/app/.next-cli-build/server/chunks/5210.js +3 -3
  564. package/app/.next-cli-build/server/chunks/5258.js +2 -2
  565. package/app/.next-cli-build/server/chunks/5433.js +1 -1
  566. package/app/.next-cli-build/server/chunks/5527.js +1 -0
  567. package/app/.next-cli-build/server/chunks/5615.js +1 -1
  568. package/app/.next-cli-build/server/chunks/5781.js +1 -1
  569. package/app/.next-cli-build/server/chunks/595.js +1 -1
  570. package/app/.next-cli-build/server/chunks/6252.js +2 -2
  571. package/app/.next-cli-build/server/chunks/6306.js +1 -1
  572. package/app/.next-cli-build/server/chunks/6326.js +1 -1
  573. package/app/.next-cli-build/server/chunks/6457.js +1 -1
  574. package/app/.next-cli-build/server/chunks/6756.js +1 -1
  575. package/app/.next-cli-build/server/chunks/682.js +1 -1
  576. package/app/.next-cli-build/server/chunks/6947.js +1 -1
  577. package/app/.next-cli-build/server/chunks/6960.js +1 -1
  578. package/app/.next-cli-build/server/chunks/698.js +2 -2
  579. package/app/.next-cli-build/server/chunks/7067.js +1 -1
  580. package/app/.next-cli-build/server/chunks/7122.js +1 -1
  581. package/app/.next-cli-build/server/chunks/7247.js +1 -1
  582. package/app/.next-cli-build/server/chunks/7274.js +6 -3
  583. package/app/.next-cli-build/server/chunks/7322.js +2 -2
  584. package/app/.next-cli-build/server/chunks/75.js +1 -0
  585. package/app/.next-cli-build/server/chunks/7568.js +1 -1
  586. package/app/.next-cli-build/server/chunks/7828.js +1 -1
  587. package/app/.next-cli-build/server/chunks/7965.js +2 -2
  588. package/app/.next-cli-build/server/chunks/8062.js +2 -2
  589. package/app/.next-cli-build/server/chunks/8145.js +1 -0
  590. package/app/.next-cli-build/server/chunks/8172.js +2 -2
  591. package/app/.next-cli-build/server/chunks/{7239.js → 8318.js} +2 -2
  592. package/app/.next-cli-build/server/chunks/8439.js +1 -0
  593. package/app/.next-cli-build/server/chunks/8469.js +2 -2
  594. package/app/.next-cli-build/server/chunks/8520.js +2 -2
  595. package/app/.next-cli-build/server/chunks/8595.js +1 -1
  596. package/app/.next-cli-build/server/chunks/8672.js +1 -1
  597. package/app/.next-cli-build/server/chunks/8675.js +1 -0
  598. package/app/.next-cli-build/server/chunks/8689.js +1 -1
  599. package/app/.next-cli-build/server/chunks/8838.js +1 -1
  600. package/app/.next-cli-build/server/chunks/8895.js +9 -9
  601. package/app/.next-cli-build/server/chunks/9055.js +1 -1
  602. package/app/.next-cli-build/server/chunks/939.js +1 -1
  603. package/app/.next-cli-build/server/chunks/9417.js +6 -0
  604. package/app/.next-cli-build/server/chunks/9451.js +2 -2
  605. package/app/.next-cli-build/server/chunks/9489.js +1 -1
  606. package/app/.next-cli-build/server/chunks/9609.js +1 -1
  607. package/app/.next-cli-build/server/chunks/9628.js +1 -1
  608. package/app/.next-cli-build/server/chunks/9713.js +1 -0
  609. package/app/.next-cli-build/server/chunks/976.js +2 -2
  610. package/app/.next-cli-build/server/instrumentation.js.nft.json +1 -1
  611. package/app/.next-cli-build/server/middleware-build-manifest.js +1 -1
  612. package/app/.next-cli-build/server/middleware.js +4 -4
  613. package/app/.next-cli-build/server/middleware.js.nft.json +1 -1
  614. package/app/.next-cli-build/server/pages/404.html +2 -2
  615. package/app/.next-cli-build/server/pages/500.html +1 -1
  616. package/app/.next-cli-build/static/chunks/1243-64d16638d3aac467.js +3 -0
  617. package/app/.next-cli-build/static/chunks/1321-1ad989ddb9bd4822.js +1 -0
  618. package/app/.next-cli-build/static/chunks/5497-a519f837339f7d19.js +7 -0
  619. package/app/.next-cli-build/static/chunks/6109-7d8788b228fed22f.js +1 -0
  620. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/experimental/page-2df49dc3be3c6b7d.js +1 -0
  621. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/media-providers/[kind]/[id]/{page-2a679f53191d77f7.js → page-de760afb83419302.js} +9 -9
  622. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-7a5d36237ec6b40e.js +14 -0
  623. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-e0183e527ccc2c9b.js +1 -0
  624. package/app/.next-cli-build/static/css/66cb1d1c16ed3a27.css +1 -0
  625. package/app/package.json +71 -71
  626. package/app/public/i18n/changelog/en.md +21 -3
  627. package/app/public/i18n/changelog/zh-CN.md +21 -3
  628. package/app/public/i18n/changelog/zh-TW.md +21 -3
  629. package/app/public/i18n/literals/zh-CN.json +22 -0
  630. package/app/public/i18n/literals/zh-TW.json +21 -0
  631. package/app/src/lib/db/adapters/sqljsAdapter.js +42 -9
  632. package/app/src/sse/services/backgroundTokenRefresh.js +7 -0
  633. package/app/src/sse/services/codebuddyCheckin.js +6 -0
  634. package/package.json +61 -61
  635. package/app/.next-cli-build/server/chunks/1159.js +0 -7
  636. package/app/.next-cli-build/server/chunks/1710.js +0 -6
  637. package/app/.next-cli-build/server/chunks/3245.js +0 -1
  638. package/app/.next-cli-build/server/chunks/3885.js +0 -1
  639. package/app/.next-cli-build/server/chunks/4177.js +0 -1
  640. package/app/.next-cli-build/server/chunks/4282.js +0 -1
  641. package/app/.next-cli-build/server/chunks/436.js +0 -1
  642. package/app/.next-cli-build/server/chunks/4746.js +0 -1
  643. package/app/.next-cli-build/server/chunks/480.js +0 -6
  644. package/app/.next-cli-build/server/chunks/5485.js +0 -1
  645. package/app/.next-cli-build/server/chunks/653.js +0 -1
  646. package/app/.next-cli-build/server/chunks/6982.js +0 -1
  647. package/app/.next-cli-build/static/chunks/1243-25be5a7b0193949d.js +0 -3
  648. package/app/.next-cli-build/static/chunks/1321-7d951e8069135f2f.js +0 -1
  649. package/app/.next-cli-build/static/chunks/5497-dce0ac54d3e8f165.js +0 -7
  650. package/app/.next-cli-build/static/chunks/6109-c3fa41c974584a96.js +0 -1
  651. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/experimental/page-5ec2e868aa2ff281.js +0 -1
  652. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/providers/[id]/page-21ddfd8a9e7d781f.js +0 -14
  653. package/app/.next-cli-build/static/chunks/app/(dashboard)/dashboard/quota/page-ec96de061407f126.js +0 -1
  654. package/app/.next-cli-build/static/css/b80ae6e58b63fd53.css +0 -1
  655. /package/app/.next-cli-build/static/{eqWYkzNeaSBj4mkYsjYbh → MH4bXJmhiPfMG7orS09FV}/_buildManifest.js +0 -0
  656. /package/app/.next-cli-build/static/{eqWYkzNeaSBj4mkYsjYbh → MH4bXJmhiPfMG7orS09FV}/_ssgManifest.js +0 -0
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6109],{36109:(e,t,l)=>{l.d(t,{_:()=>i,W:()=>s}),l(22862);let n="modelLock_",a=`${n}__all`;function i(e,t=Date.now()){let l=e||{},s=[],o=!1,c=null;for(let[e,i]of Object.entries(l)){if(!e.startsWith(n)||!i)continue;let l=new Date(i).getTime();Number.isNaN(l)||l<=t||((null===c||l<c)&&(c=l),e===a?o=!0:s.push(e.slice(n.length)))}let u=l.testStatus;return{state:o?"unavailable":"error"===u||"expired"===u?u:s.length>0?"partial":"unavailable"===u?"active":u??"active",lockedModels:s,accountLocked:o,earliestUntil:null===c?null:new Date(c).toISOString()}}function s(e,t){return e===t||!!e&&!!t&&e.state===t.state&&e.accountLocked===t.accountLocked&&e.earliestUntil===t.earliestUntil&&e.lockedModels.length===t.lockedModels.length&&e.lockedModels.every((e,l)=>e===t.lockedModels[l])}}}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3696],{1325:(e,t,s)=>{"use strict";s.d(t,{default:()=>o});var a=s(95155),l=s(12115),n=s(35497),r=s(73006);function d({label:e,value:t,tone:s="default"}){return(0,a.jsxs)("div",{className:"flex items-start justify-between gap-4 py-2 border-b border-border/50 last:border-0",children:[(0,a.jsx)("span",{className:"text-xs sm:text-sm text-text-muted shrink-0",children:e}),(0,a.jsx)("span",{className:`text-xs sm:text-sm font-medium text-right break-all ${"danger"===s?"text-red-600 dark:text-red-400":"warn"===s?"text-amber-600 dark:text-amber-400":"ok"===s?"text-green-600 dark:text-green-400":"text-text-main"}`,children:t})]})}function i({settings:e,patch:t}){let[s,o]=(0,l.useState)(null);(0,l.useEffect)(()=>{let e=!1;return fetch("/api/security/status").then(e=>e.ok?e.json():null).then(t=>{e||o(t)}).catch(()=>{e||o(null)}),()=>{e=!0}},[]);let c=!0===e.dashboardLocalOnly,x=s?.listenHost||null,m=["127.0.0.1","localhost","::1"].includes(String(x||"").toLowerCase()),h=(s?.lanAddresses||[]).map(e=>`http://${e.address}${s?.port?`:${s.port}`:""}`),u=!!s&&!s.hasPassword&&!s.bootstrapPassword&&!s.ssoConfigured,p=!!s&&!1===s.requireLogin,f=c||u&&!p;return(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-emerald-500/10 text-emerald-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"shield"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,r.Tl)("Security")})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("Dashboard: local access only")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Refuse every non-local request to the dashboard and its management APIs. The LLM API (/v1) is unaffected — it uses its own API keys. Takes effect immediately; you will lose remote access to this dashboard until you turn it off from the machine itself.")})]}),(0,a.jsx)(n.lM,{checked:c,onChange:()=>t({dashboardLocalOnly:!c},"Error toggling dashboard local-only mode:")})]}),s&&(0,a.jsxs)("div",{className:"pt-2 border-t border-border/50",children:[(0,a.jsx)("p",{className:"text-xs font-semibold text-text-muted uppercase tracking-wide pt-2 pb-1",children:(0,r.Tl)("Exposure")}),(0,a.jsx)(d,{label:(0,r.Tl)("Listener"),value:x||(0,r.Tl)("Unknown"),tone:m?"ok":"default"}),!m&&h.length>0&&(0,a.jsx)(d,{label:(0,r.Tl)("Reachable on the LAN at"),value:h.join(" ")}),(0,a.jsx)(d,{label:(0,r.Tl)("Dashboard password"),value:s.hasPassword?(0,r.Tl)("Password is set"):s.bootstrapPassword?(0,r.Tl)("Set by INITIAL_PASSWORD"):s.ssoConfigured?(0,r.Tl)("Sign-in is delegated to SSO"):(0,r.Tl)("No password set"),tone:s.hasPassword||s.bootstrapPassword||s.ssoConfigured?"ok":"danger"}),(0,a.jsx)(d,{label:(0,r.Tl)("Log-in check"),value:s.requireLogin?(0,r.Tl)("Sign-in is required"):(0,r.Tl)("Sign-in is off"),tone:s.requireLogin?"ok":"danger"}),(0,a.jsx)(d,{label:(0,r.Tl)("Dashboard access"),value:f?(0,r.Tl)("This machine only"):p?(0,r.Tl)("Anyone who can reach the port"):(0,r.Tl)("Anyone who can reach the port and knows the password"),tone:f?"ok":"warn"}),(0,a.jsx)(d,{label:(0,r.Tl)("Credential storage"),value:!0===s.credentialsEncrypted?(0,r.Tl)("Encrypted in the local database (AES-256-GCM)"):!1===s.credentialsEncrypted?(0,r.Tl)("Plain text in the local database — encryption failed, check the data directory"):(0,r.Tl)("Unknown"),tone:!0===s.credentialsEncrypted?"ok":"warn"}),!0===s.credentialsEncrypted&&(0,a.jsx)("p",{className:"text-xs text-text-muted pt-2",children:(0,r.Tl)("The key lives outside the database, so a copied data.sqlite alone cannot be read. Back up the key file with the database, or set CREDENTIAL_SECRET.")}),u&&!p&&(0,a.jsx)("p",{className:"text-xs text-red-600 dark:text-red-400 pt-2",children:(0,r.Tl)("No password is set yet, so the dashboard opens on this machine only. Set a password on the Settings page to reach it from other devices. The gateway API (/v1) is unaffected.")}),p&&(0,a.jsx)("p",{className:"text-xs text-red-600 dark:text-red-400 pt-2",children:(0,r.Tl)("Log-in check is off: anyone who can reach this port can manage every provider and credential. Turn it on again on the Settings page.")})," "]})]})]})}function o(){let[e,t]=(0,l.useState)({}),[s,d]=(0,l.useState)(()=>"1"===window.localStorage.getItem("quotaHideNoQuota")),[o,c]=(0,l.useState)(()=>"1"===window.localStorage.getItem("quotaNestedCycle"));(0,l.useEffect)(()=>{window.localStorage.setItem("quotaHideNoQuota",s?"1":"0")},[s]),(0,l.useEffect)(()=>{window.localStorage.setItem("quotaNestedCycle",o?"1":"0")},[o]),(0,l.useEffect)(()=>{fetch("/api/settings").then(e=>e.json()).then(e=>t(e||{})).catch(e=>console.error("Failed to fetch settings:",e))},[]);let x=async(e,s)=>{try{let s=await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),a=await s.json();s.ok&&t(e=>({...e,...a}))}catch(e){console.log(s,e)}};return(0,a.jsx)("div",{className:"max-w-2xl mx-auto px-4 sm:px-0",children:(0,a.jsxs)("div",{className:"flex flex-col gap-6",children:[(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-cyan-500/10 text-cyan-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"device_hub"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,r.Tl)("Providers")})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pb-4 border-b border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("Hide no-quota provider cards")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Quota page view: hide cards that have no quota to display")})]}),(0,a.jsx)(n.lM,{checked:s,onChange:()=>d(e=>!e)})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pb-4 border-b border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("Nested cycle quota bars")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Draw contained windows (rolling ⊂ weekly ⊂ monthly) as one nested track instead of flat rows")})]}),(0,a.jsx)(n.lM,{checked:o,onChange:()=>c(e=>!e)})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("OAuth import / export")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Show Import / Export buttons on OAuth provider pages (encrypted transfer, experimental)")})]}),(0,a.jsx)(n.lM,{checked:!0===e.codeBuddyOAuthImport,onChange:()=>x({codeBuddyOAuthImport:!0!==e.codeBuddyOAuthImport},"Error toggling codebuddy OAuth import:")})]}),(0,a.jsx)("p",{className:"text-xs text-text-muted italic pt-2 border-t border-border/50",children:(0,r.Tl)("Import / Export moved behind the check-in button — turn off auto check-in to show them again")})]})]}),(0,a.jsxs)(n.Zp,{children:[(0,a.jsxs)("div",{className:"flex items-center gap-3 mb-4",children:[(0,a.jsx)("div",{className:"size-10 rounded-lg flex items-center justify-center bg-amber-500/10 text-amber-500 shrink-0",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px]",children:"science"})}),(0,a.jsx)("h3",{className:"text-base sm:text-lg font-semibold",children:(0,r.Tl)("Experimental")})]}),(0,a.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("Qoder auto daily credit claim")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Automatically claim daily campaign credits for Qoder and Qoder CN accounts")})]}),(0,a.jsx)(n.lM,{checked:!0===e.qoderCheckin,onChange:()=>x({qoderCheckin:!0!==e.qoderCheckin},"Error toggling Qoder auto check-in:")})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pt-4 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("CodeBuddy daily active session")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Send one free-tier chat request per account daily so the activity credits are granted")})]}),(0,a.jsx)(n.lM,{checked:!0===e.codeBuddyIntlSession,onChange:()=>x({codeBuddyIntlSession:!0!==e.codeBuddyIntlSession},"Error toggling codebuddy intl daily session:")})]}),(0,a.jsxs)("div",{className:"flex items-start sm:items-center justify-between gap-4 pt-4 border-t border-border/50",children:[(0,a.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,a.jsx)("p",{className:"font-medium text-sm sm:text-base",children:(0,r.Tl)("CodeBuddy CN auto daily check-in")}),(0,a.jsx)("p",{className:"text-xs sm:text-sm text-text-muted",children:(0,r.Tl)("Automatically check in accounts daily (retries all day until confirmed)")})]}),(0,a.jsx)(n.lM,{checked:!0===e.codeBuddyCheckin,onChange:()=>x({codeBuddyCheckin:!0!==e.codeBuddyCheckin},"Error toggling codebuddy auto check-in:")})]})]})]}),(0,a.jsx)(i,{settings:e,patch:x})]})})}},51580:(e,t,s)=>{Promise.resolve().then(s.bind(s,1325))}},e=>{e.O(0,[3170,305,1321,5497,8441,3794,7358],()=>e(e.s=51580)),_N_E=e.O()}]);
@@ -1,14 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2134],{70217:(e,t,i)=>{"use strict";function s(e,t){return!1===e?"default":"active"===t||"success"===t?"success":"partial"===t?"warning":"error"===t||"expired"===t||"unavailable"===t?"error":"default"}i.d(t,{g:()=>s})},90337:(e,t,i)=>{"use strict";i.d(t,{DY:()=>n});var s=i(73006);let l=/subscription_quota_exhausted|本周用量已满|本周额度已用完/i;function a(e,t){return(0,s.Tl)(e).replace("{n}",String(t))}function n(e){if(!e||"string"!=typeof e)return e??"";let t=(0,s.Tl)(e);if(t&&t!==e)return t;if(l.test(e))return(0,s.Tl)("Subscription quota used up. Please wait for the quota reset.");if(/Individual quota reached|QUOTA_EXHAUSTED|RESOURCE_EXHAUSTED/i.test(e)){let t,i,l,n,r,o,d,c,{delay:u,timestamp:m,model:p}=(t=String(e||""),i=null,l=null,n=/"quotaResetDelay"\s*:\s*"([^"]+)"/.exec(t),r=/\bResets in\s+([0-9hms.]+)/i.exec(t),i=n&&n[1]||r&&r[1]||null,o=/"quotaResetTimeStamp"\s*:\s*"([^"]+)"/.exec(t),d=/"quotaResetTimeStamp"\s*:\s*(".*?"|\S+)/.exec(t),(l=o&&o[1]||d&&d[1]||null)&&(l=l.replace(/^"|"$/g,"")),{delay:i,timestamp:l,model:/"model"\s*:\s*"([^"]+)"/.exec(t)?.[1]||null}),x=function(e){if(!e)return"";let{h:t,m:i,s}=e;if(s>=60&&(i+=Math.floor(s/60),s%=60),i>=60&&(t+=Math.floor(i/60),i%=60),t>=24){let e=Math.floor(t/24),i=t%24;return i>0?`${a("{n}d",e)} ${a("{n}h",i)}`:a("{n}d",e)}let l=[];return t>0&&l.push(a("{n}h",t)),i>0&&l.push(a("{n}m",i)),(s>0||0===l.length)&&l.push(a("{n}s",s)),l.join(" ")}((c=/^(?:(\d+(?:\.\d+)?)h)?(?:(\d+(?:\.\d+)?)m)?(?:(\d+(?:\.\d+)?)s)?$/i.exec(String(u||"").trim()))&&(c[1]||c[2]||c[3])?{h:Math.floor(parseFloat(c[1]||0)),m:Math.floor(parseFloat(c[2]||0)),s:Math.round(parseFloat(c[3]||0))}:null),h=m?function(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return e||"";try{return t.toLocaleString(void 0,{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return t.toISOString()}}(m):"",f=(0,s.Tl)(p?"Individual quota reached for model {model}. Resets at {time} (in {duration}).":"Individual quota reached. Resets at {time} (in {duration}).");return(f=(f=f.replace("{model}",p||"")).replace("{time}",h||(0,s.Tl)("shortly"))).replace("{duration}",x||(0,s.Tl)("a short while"))}return t}},93578:(e,t,i)=>{Promise.resolve().then(i.bind(i,96734))},96734:(e,t,i)=>{"use strict";i.r(t),i.d(t,{default:()=>ea});var s=i(95155),l=i(12115),a=i(73321),n=i(98500),r=i.n(n),o=i(5772),d=i(8247),c=i(35497),u=i(88105),m=i(28777),p=i(73006);function x(e){if("string"!=typeof e)return null;let t=/^(\d{1,2}):(\d{2})$/.exec(e.trim());if(!t)return null;let i=Number(t[1]),s=Number(t[2]);return i>23||s>59?null:60*i+s}function h(e,t=Date.now()){let i;if(!e||"object"!=typeof e)return null;let s=x(e.window_start),l=x(e.window_end);if(null===s||null===l||s===l)return null;let a=e.timezone||"Asia/Singapore",n=function(e,t=Date.now()){try{let i=new Intl.DateTimeFormat("en-GB",{timeZone:e,hourCycle:"h23",hour:"2-digit",minute:"2-digit",second:"2-digit"}).formatToParts(new Date(t)),s=e=>Number(i.find(t=>t.type===e)?.value),l=s("hour"),a=s("minute"),n=s("second");if([l,a,n].some(e=>!Number.isFinite(e)))return null;return{hour:l,minute:a,second:n,secondsOfDay:3600*l+60*a+n}}catch{return null}}(a,t);if(!n)return null;let r=n.minute+60*n.hour,o=s<=l?r>=s&&r<l:r>=s||r<l;return i=o?(60*l-n.secondsOfDay+86400)%86400:(60*s-n.secondsOfDay+86400)%86400,{active:o,secondsToBoundary:i,windowLabel:`${e.window_start}–${e.window_end}`,timezone:a}}function f(e,t){return e&&"object"==typeof e&&(t&&String(t).startsWith("zh")?e.zh||e.en:e.en||e.zh)||""}function g({promotion:e}){var t;let[i,a]=(0,l.useState)(()=>Date.now());(0,l.useEffect)(()=>{let e=setInterval(()=>a(Date.now()),1e3);return()=>clearInterval(e)},[]);let n=h(e,i);if(!n)return null;let r=f(e?.badge,(0,p.kk)()),o=f(e?.description,(0,p.kk)()),d=!Number.isFinite(t=n.secondsToBoundary)||t<0?"--:--:--":[Math.floor(t/3600),Math.floor(t%3600/60),Math.floor(t%60)].map(e=>String(e).padStart(2,"0")).join(":"),c=n.active?`${(0,p.Tl)("Off-peak discount active")} \xb7 ${d} ${(0,p.Tl)("until standard rate")}`:`${d} ${(0,p.Tl)("until off-peak discount")}`;return(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-x-2 gap-y-1 rounded-[10px] bg-green-500/10 px-3 py-2 text-xs text-green-600 dark:text-green-400",title:o||void 0,children:[(0,s.jsx)("span",{className:"material-symbols-outlined",style:{fontSize:16},children:"eco"}),(0,s.jsx)("span",{className:"font-medium",children:c}),r&&(0,s.jsxs)("span",{className:"opacity-80",children:["\xb7 ",r]}),(0,s.jsxs)("span",{className:"ml-auto font-mono opacity-60",children:[n.windowLabel," ",n.timezone]})]})}var y=i(990),b=i(62630);i(67468);let v=["none","low","medium","high"],j=["none","thinking"],w=["none","low","medium","high","xhigh","max"],k={openai:["none","minimal","low","medium","high","xhigh"],"claude-adaptive":w,"claude-budget":w,"gemini-level":["minimal","low","medium","high"],"gemini-budget":v,zai:j,qwen:v,kimi:["none","low","medium","high","max"],deepseek:["none","high","max"],minimax:j,hunyuan:v,step:v},N=["none","minimal","low","medium","high","xhigh","max"],T=["none","low","medium","high","max"],C=[{pattern:"*claude*4.6*",levels:T},{pattern:"*claude*4-6*",levels:T},{provider:"codex",pattern:"*gpt-6*",levels:N},{provider:"codex",pattern:"*gpt-5.6-sol*",levels:[...N,"ultra"]},{provider:"codex",pattern:"*gpt-5.6-terra*",levels:[...N,"ultra"]},{provider:"codex",pattern:"*gpt-5.6-luna*",levels:N},{pattern:"*codex*",levels:["low","medium","high","xhigh"]},{pattern:"*mimo*preview*",levels:["none","low","medium","high","xhigh"]},{pattern:"*mimo*v2.5-pro*",levels:["none","low","medium","high","xhigh"]},{provider:"amd",pattern:"DeepSeek-V4-Flash*",levels:["none","minimal","low","medium","high","xhigh","max"]},{provider:"amd",pattern:"Qwen3.8-Flash-Next",levels:["none","low","medium","xhigh"]},{provider:"codebuddy-cn",pattern:"glm-5.3*",levels:["low","high","max"]},{provider:"codebuddy-cn",pattern:"glm-5.2",levels:["high","xhigh"]},{provider:"codebuddy-cn",pattern:"deepseek-v4*",levels:["low","high","xhigh"]},{provider:"codebuddy-cn",pattern:"hy3*",levels:["low","high"]},{provider:"codebuddy-cn",pattern:"hy4*",levels:["high"]}];function S(e,t){if("kiro"===e&&null===function(e){if("string"!=typeof e)return null;let t=e.toLowerCase().replace(/-/g,".");if(/(?:^|[/.])gpt[/.]5[/.]6(?:[/.]|$)/.test(t))return"reasoning";if(!t.includes("claude"))return null;let i=function(e){if("string"!=typeof e)return null;let t=e.toLowerCase().replace(/-/g,".").match(/(?:^|[/.])claude(?:[/.][a-z]+)*[/.](\d+)(?:[/.](\d+))?(?:[/.]|$)/);return t?{major:Number(t[1]),minor:void 0===t[2]?null:Number(t[2])}:null}(e);if(!i)return null;let{major:s,minor:l}=i;return s<4||4===s&&(null===l||l<=5||null!==l&&l>=1e3)?null:"output_config"}(t))return null;let i=(0,y.nl)(e,t);if(!i.reasoning)return null;let s=C.find(i=>(!i.provider||i.provider===e)&&(0,b.gH)(i.pattern,t)),l=s?.levels||k[i.thinkingFormat]||v;return!1===i.thinkingCanDisable&&(l=l.filter(e=>"none"!==e)),l}var $=i(11059),A=i(929),O=i(65921);let E=new Map;async function P(e){if(!e?.url||!e?.type)return[];let t=E.get(e.url);if(t&&Date.now()<t.expiresAt)return t.data;try{let t=new URLSearchParams({url:e.url,type:e.type}),i=await fetch(`/api/providers/suggested-models?${t}`);if(!i.ok)return[];let s=(await i.json()).data??[];return E.set(e.url,{data:s,expiresAt:Date.now()+6e5}),s}catch{return[]}}function D({customModels:e=[],modelAliases:t={},providerAlias:i,builtInModels:s=[],type:l="llm",includeLegacyAliases:a=!0}){let n=new Set(s.map(e=>e.id)),r=new Set,o=[];for(let t of e){if(!t?.id||t.providerAlias!==i)continue;let e=t?.kind||t?.type||"llm";if(l&&e!==l||n.has(t.id))continue;let s=`${i}/${t.id}`;r.has(s)||(r.add(s),o.push({id:t.id,name:t.name||t.id,fullModel:s,source:"custom",type:e,enabled:!1!==t.enabled,...void 0===t.vision?{}:{vision:t.vision},...void 0===t.reasoning?{}:{reasoning:t.reasoning},...void 0===t.contextWindow?{}:{contextWindow:t.contextWindow},...void 0===t.maxOutput?{}:{maxOutput:t.maxOutput}}))}if(!a)return o;let d=`${i}/`;for(let[e,i]of Object.entries(t||{})){if("string"!=typeof i||!i.startsWith(d))continue;let t=i.slice(d.length);!t||n.has(t)||r.has(i)||(r.add(i),o.push({id:t,alias:e,fullModel:i,source:"legacyAlias",type:l||"llm"}))}return o}let I=/https:\/\/accounts\.google\.com\/signin\/continue[^\s"'<>)\]]+/;function R(e){if("string"!=typeof e)return null;let t=I.exec(e);return t?t[0]:null}var M=i(90337),q=i(14051),_=i.n(q),U=i(47650);let z=e=>{let t=Number(String(e).trim());return Number.isFinite(t)&&t>0?Math.floor(t):null};function F({label:e,builtIn:t,value:i,onChange:l,invalid:a,autoFocus:n}){return(0,s.jsxs)("label",{className:"flex flex-col gap-1",children:[(0,s.jsxs)("span",{className:"flex items-baseline justify-between gap-2 text-text-muted",children:[(0,s.jsx)("span",{children:e}),t?(0,s.jsxs)("span",{className:"font-mono text-[10px] text-text-subtle",children:[(0,p.Tl)("Built-in")," ",t]}):null]}),(0,s.jsx)("input",{type:"number",min:"1",step:"1",value:i,autoFocus:n,onChange:e=>l(e.target.value),placeholder:t?String(t):(0,p.Tl)("Not set"),className:`rounded-md border bg-bg px-2 py-1.5 font-mono text-text focus:outline-none ${a?"border-red-500":"border-border focus:border-primary"}`})]})}function L({caps:e,baseCaps:t,pinned:i,label:a,onSave:n}){let[r,o]=(0,l.useState)(!1),[d,c]=(0,l.useState)(!1),[u,m]=(0,l.useState)(null),[x,h]=(0,l.useState)(""),[f,g]=(0,l.useState)(""),y=(0,l.useRef)(null),b=(0,l.useRef)(null),v=t?.contextWindow??null,j=t?.maxOutput??null,w=z(x),k=z(f),N=""!==x.trim()&&null===w,T=""!==f.trim()&&null===k,C=!d&&!N&&!T,S=(0,l.useCallback)(()=>{let e=y.current;if(!e)return;let t=e.getBoundingClientRect(),i=b.current?.offsetWidth||300,s=b.current?.offsetHeight||300,l=window.innerHeight-t.bottom-8,a=l<s&&t.top-8>l;m({left:Math.min(Math.max(8,t.right-i),Math.max(8,window.innerWidth-i-8)),top:a?void 0:t.bottom+6,bottom:a?window.innerHeight-t.top+6:void 0})},[]);(0,l.useEffect)(()=>{if(!r)return;let e=e=>{b.current?.contains(e.target)||y.current?.contains(e.target)||o(!1)},t=e=>{"Escape"===e.key&&o(!1)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),window.addEventListener("resize",S),window.addEventListener("scroll",S,!0),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t),window.removeEventListener("resize",S),window.removeEventListener("scroll",S,!0)}},[r,S]),(0,l.useLayoutEffect)(()=>{r&&S()},[r,S]);let $=async e=>{c(!0);try{await n(e?{contextWindow:null,maxOutput:null}:{contextWindow:w,maxOutput:k}),o(!1)}finally{c(!1)}};return(0,s.jsxs)("div",{className:"relative shrink-0",children:[(0,s.jsx)("button",{ref:y,onClick:()=>{r?o(!1):(h(e?.contextWindow?String(e.contextWindow):""),g(e?.maxOutput?String(e.maxOutput):""),o(!0))},"aria-haspopup":"dialog","aria-expanded":r,className:`rounded p-0.5 transition-colors hover:bg-sidebar ${i?"text-primary":"text-text-muted hover:text-primary"}`,title:(0,p.Tl)("Model limits"),children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"tune"})}),r&&"u">typeof document&&(0,U.createPortal)((0,s.jsxs)("div",{ref:b,role:"dialog","aria-label":(0,p.Tl)("Model limits"),onKeyDown:e=>{"Enter"===e.key&&C&&(e.preventDefault(),$(!1))},style:{position:"fixed",width:300,left:u?.left??0,top:u?.top,bottom:u?.bottom,visibility:u?"visible":"hidden"},className:"z-50 flex flex-col gap-2.5 rounded-xl border border-border bg-surface p-3 text-xs shadow-[var(--shadow-elev)]",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between gap-2 border-b border-border-subtle pb-2",children:[(0,s.jsx)("span",{className:"min-w-0 truncate font-medium text-text",children:a||(0,p.Tl)("Model limits")}),i?(0,s.jsx)("span",{className:"shrink-0 rounded-full bg-primary/10 px-2 py-0.5 text-[10px] text-primary",children:(0,p.Tl)("Overridden")}):null]}),(0,s.jsx)(F,{label:(0,p.Tl)("Context window"),builtIn:v,value:x,onChange:h,invalid:N,autoFocus:!0}),(0,s.jsx)(F,{label:(0,p.Tl)("Max output"),builtIn:j,value:f,onChange:g,invalid:T}),(N||T)&&(0,s.jsx)("p",{className:"text-[10px] leading-snug text-red-500",children:(0,p.Tl)("Enter a whole number greater than 0")}),null!==w&&null!==k&&k>w&&(0,s.jsx)("p",{className:"text-[10px] leading-snug text-amber-600 dark:text-amber-400",children:(0,p.Tl)("Max output is larger than the context window")}),(0,s.jsx)("p",{className:"text-[10px] leading-snug text-text-muted/70",children:(0,p.Tl)("Overrides the built-in catalog values")}),(0,s.jsxs)("div",{className:"flex items-center justify-end gap-2 border-t border-border-subtle pt-2",children:[(0,s.jsx)("button",{className:"rounded px-2 py-1 text-text-muted hover:text-red-500 disabled:opacity-40",onClick:()=>$(!0),disabled:d||!i,children:(0,p.Tl)("Restore built-in")}),(0,s.jsx)("button",{className:"rounded bg-primary px-2.5 py-1 text-white disabled:opacity-50",onClick:()=>$(!1),disabled:!C,children:(0,p.Tl)("Save")})]})]}),document.body)]})}function K({model:e,fullModel:t,alias:i,copied:a,onCopy:n,testStatus:r,isCustom:o,isFree:d,onDeleteAlias:u,onTest:m,isTesting:x,onDisable:g,onEnable:y,caps:b,baseCaps:v,thinkingSuffix:j,onSaveCaps:w,capsPinned:k}){let N=function(){let[e,t]=(0,l.useState)(()=>new Date().getHours());return(0,l.useEffect)(()=>{let e=setInterval(()=>t(new Date().getHours()),6e4);return()=>clearInterval(e)},[]),e}(),T=j?`${t}(${j})`:t,C="number"==typeof e.rateMultiplier?e.rateMultiplier:null,S=function(e,t){if(!t||"number"!=typeof e||Number.isNaN(e))return!1;let{from:i,to:s}=t;return i<=s?e>=i&&e<s:e>=i||e<s}(N,e.nightFree),$=null!==C&&C>0&&function(e,t=Date.now()){let i=function(e){let t=e?.promoFreeUntil;if("string"!=typeof t||""===t.trim())return null;let i=Date.parse(t);return Number.isFinite(i)?i:null}(e);return null!==i&&t<i}(e),A=$?0:C,O=S||0===A,E=function(e){let[t,i]=(0,l.useState)(()=>Date.now()),s=e?`${e.window_start}|${e.window_end}|${e.timezone}`:null;return(0,l.useEffect)(()=>{if(!s)return;let e=setInterval(()=>i(Date.now()),3e4);return()=>clearInterval(e)},[s]),h(e,t)}(e.promotion),P="ok"===r?"#22c55e":"error"===r?"#ef4444":void 0;return(0,s.jsx)("div",{className:`group min-w-0 max-w-full rounded-lg border px-3 py-2 ${"ok"===r?"border-green-500/40":"error"===r?"border-red-500/40":"border-border"} hover:bg-sidebar/50`,children:(0,s.jsxs)("div",{className:"flex min-w-0 items-start gap-2 sm:items-center",children:[(0,s.jsx)("span",{className:"material-symbols-outlined shrink-0 text-base",style:P?{color:P}:void 0,children:"ok"===r?"check_circle":"error"===r?"cancel":"smart_toy"}),(0,s.jsxs)("div",{className:"flex min-w-0 flex-1 flex-col gap-1",children:[(0,s.jsx)("code",{className:"max-w-[72vw] truncate rounded bg-sidebar px-1.5 py-0.5 font-mono text-xs text-text-muted sm:max-w-[360px]",children:T}),(0,s.jsxs)("span",{className:"flex min-w-0 items-center text-[9px] gap-1 pl-1",children:[e.name&&(0,s.jsx)("span",{className:"truncate text-[9px] italic text-text-muted/70",children:e.name}),(0,s.jsx)(c.nh,{caps:b,colorOverride:"text-text-muted/70",size:12}),(null!==A||S)&&(0,s.jsx)(c.m_,{text:S?`${(0,p.Tl)("Night-free window")} (23:00–08:00) — ${(0,p.Tl)("rides the free quota")}`:$?(0,p.Tl)("Credit multiplier")+`: ${C}x — `+(0,p.Tl)("promo free until")+` ${e.promoFreeUntil}`:0===A?(0,p.Tl)("Credit multiplier")+": 0x — "+(0,p.Tl)("rides the free quota"):(0,p.Tl)("Credit multiplier")+`: ${A}x`,children:(0,s.jsx)(c.Ex,{size:"sm",variant:O?"success":"default",className:`shrink-0 cursor-help leading-none${O?"":" font-mono"}`,children:O?"free":`${A.toFixed(2)}x`})}),E&&(0,s.jsx)(c.m_,{text:[f(e.promotion?.badge,(0,p.kk)())||(0,p.Tl)("Off-peak discount"),f(e.promotion?.description,(0,p.kk)()),`${E.windowLabel} ${E.timezone}${E.active?` — ${(0,p.Tl)("active now")}`:""}`].filter(Boolean).join(" \xb7 "),children:(0,s.jsx)(c.Ex,{size:"sm",variant:E.active?"success":"default",className:"shrink-0 cursor-help leading-none",children:(0,s.jsx)("span",{className:"material-symbols-outlined align-[-1px]",style:{fontSize:10},children:"eco"})})})]})]}),w&&(0,s.jsx)(L,{caps:b,baseCaps:v,pinned:k,label:e.name||t,onSave:w}),m&&(0,s.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,s.jsx)("button",{onClick:m,disabled:x,className:`rounded p-0.5 text-text-muted transition-opacity hover:bg-sidebar hover:text-primary ${x?"opacity-100":"opacity-100 sm:opacity-0 sm:group-hover:opacity-100"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:x?{animation:"spin 1s linear infinite"}:void 0,children:x?"progress_activity":"science"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:x?"Testing...":"Test"})]}),(0,s.jsxs)("div",{className:"relative shrink-0 group/btn",children:[(0,s.jsx)("button",{onClick:()=>n(T,`model-${e.id}`),className:"rounded p-0.5 text-text-muted hover:bg-sidebar hover:text-primary",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:a===`model-${e.id}`?"check":"content_copy"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute mt-1 top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:a===`model-${e.id}`?"Copied!":"Copy"})]}),o?(0,s.jsx)("button",{onClick:u,className:"ml-auto rounded p-0.5 text-text-muted opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",title:"Remove custom model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"close"})}):y?(0,s.jsx)("button",{onClick:y,className:"ml-auto rounded p-0.5 text-text-muted opacity-100 transition-opacity hover:bg-green-500/10 hover:text-green-500",title:(0,p.Tl)("Enable this model"),children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"add"})}):g?(0,s.jsx)("button",{onClick:g,className:"ml-auto rounded p-0.5 text-text-muted opacity-100 transition-opacity hover:bg-red-500/10 hover:text-red-500 sm:opacity-0 sm:group-hover:opacity-100",title:"Disable this model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"close"})}):null]})})}function J({modelId:e,fullModel:t,copied:i,onCopy:l,onDeleteAlias:a,onToggle:n,enabled:r=!0,onTest:o,testStatus:d,isTesting:c}){let u="ok"===d?"#22c55e":"error"===d?"#ef4444":void 0;return(0,s.jsxs)("div",{className:`flex items-center gap-3 p-3 rounded-lg border ${"ok"===d?"border-green-500/40":"error"===d?"border-red-500/40":"border-border"} hover:bg-sidebar/50 ${r?"":"opacity-60"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base text-text-muted",style:u?{color:u}:void 0,children:"ok"===d?"check_circle":"error"===d?"cancel":"smart_toy"}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("p",{className:"text-sm font-medium truncate",children:e}),(0,s.jsxs)("div",{className:"flex items-center gap-1 mt-1",children:[(0,s.jsx)("code",{className:"text-xs text-text-muted font-mono bg-sidebar px-1.5 py-0.5 rounded",children:t}),(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:()=>l(t,`model-${e}`),className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:i===`model-${e}`?"check":"content_copy"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:i===`model-${e}`?"Copied!":"Copy"})]}),o&&(0,s.jsxs)("div",{className:"relative group/btn",children:[(0,s.jsx)("button",{onClick:o,disabled:c,className:"p-0.5 hover:bg-sidebar rounded text-text-muted hover:text-primary transition-colors",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:c?{animation:"spin 1s linear infinite"}:void 0,children:c?"progress_activity":"science"})}),(0,s.jsx)("span",{className:"pointer-events-none absolute top-5 left-1/2 -translate-x-1/2 text-[10px] text-text-muted whitespace-nowrap opacity-0 group-hover/btn:opacity-100 transition-opacity",children:c?"Testing...":"Test"})]})]})]}),n&&(0,s.jsx)("button",{onClick:n,className:`p-1 rounded ${r?"text-amber-500 hover:bg-amber-50 dark:hover:bg-amber-500/10":"text-green-600 hover:bg-green-50 dark:hover:bg-green-500/10"}`,title:r?"Disable model":"Activate model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:r?"block":"restart_alt"})}),(0,s.jsx)("button",{onClick:a,className:"p-1 hover:bg-red-50 rounded text-red-500",title:"Remove model",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"delete"})})]})}function W({providerStorageAlias:e,providerDisplayAlias:t,modelAliases:i,customModels:a,copied:n,onCopy:r,onDeleteAlias:o,onAddCustomModel:d,onToggleCustomModel:u,onDeleteCustomModel:m,onBulkCustomModels:x,connections:h,isAnthropic:f}){let g=(0,O.i)(),[y,b]=(0,l.useState)(""),[v,j]=(0,l.useState)(!1),[w,k]=(0,l.useState)(!1),[N,T]=(0,l.useState)(null),[C,S]=(0,l.useState)({}),$=async t=>{if(!N){T(t);try{let i=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${e}/${t}`})}),s=await i.json();S(e=>({...e,[t]:s.ok?"ok":"error"}))}catch{S(e=>({...e,[t]:"error"}))}finally{T(null)}}},A=D({customModels:a,modelAliases:i,providerAlias:e,type:"llm"}),E=A.filter(e=>!1!==e.enabled),P=A.filter(e=>!1===e.enabled),I=async()=>{if(!y.trim()||v)return;let e=y.trim();if(A.some(t=>t.id===e))return void g.warning("Model already exists for this provider.");j(!0);try{await d(e),b("")}catch(e){console.log("Error adding model:",e)}finally{j(!1)}},R=async()=>{if(w)return;let e=h.find(e=>!1!==e.isActive);if(e){k(!0);try{let t=await fetch(`/api/providers/${e.id}/models`),i=await t.json();if(!t.ok)return void g.error(i.error||"Failed to import models");let s=i.models||[];if(0===s.length)return void g.warning("No models returned from /models.");let l=0;for(let e of s){let t=e.id||e.name||e.model;t&&(A.some(e=>e.id===t)||(await d(t,!1),l+=1))}0===l&&g.warning("No new models were added.")}catch(e){console.log("Error importing models:",e)}finally{k(!1)}}},M=h.some(e=>!1!==e.isActive);return(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("p",{className:"text-sm text-text-muted",children:["Add ",f?"Anthropic":"OpenAI","-compatible models manually or import them from the /models endpoint."]}),(0,s.jsxs)("div",{className:"flex items-end gap-2 flex-wrap",children:[(0,s.jsxs)("div",{className:"flex-1 min-w-[240px]",children:[(0,s.jsx)("label",{htmlFor:"new-compatible-model-input",className:"text-xs text-text-muted mb-1 block",children:"Model ID"}),(0,s.jsx)("input",{id:"new-compatible-model-input",type:"text",value:y,onChange:e=>b(e.target.value),onKeyDown:e=>"Enter"===e.key&&I(),placeholder:f?"claude-3-opus-20240229":"gpt-4o",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-surface focus:outline-none focus:border-primary"})]}),(0,s.jsx)(c.$n,{size:"sm",icon:"add",onClick:I,disabled:!y.trim()||v,children:v?"Adding...":"Add"}),(0,s.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"download",onClick:R,disabled:!M||w,children:w?"Importing...":"Import from /models"})]}),!M&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Add a connection to enable importing models."}),A.length>0&&x&&(0,s.jsxs)("div",{className:"flex items-center gap-2 text-xs text-text-muted",children:[(0,s.jsxs)("span",{children:[A.length," custom model",A.length>1?"s":""]}),(0,s.jsx)("span",{children:"\xb7"}),(0,s.jsx)("button",{onClick:()=>x(!0),className:"text-primary hover:underline",children:(0,p.Tl)("Enable all")}),(0,s.jsx)("span",{children:"\xb7"}),(0,s.jsx)("button",{onClick:()=>x(!1),className:"text-text-muted hover:text-red-500 hover:underline",children:(0,p.Tl)("Disable all")}),(0,s.jsxs)("span",{children:["— ",(0,p.Tl)("bulk actions affect what clients see in /v1/models")]})]}),E.length>0&&(0,s.jsx)("div",{className:"flex flex-col gap-3",children:E.map(({id:i,alias:l,source:a})=>(0,s.jsx)(J,{modelId:i,fullModel:`${t}/${i}`,copied:n,onCopy:r,onDeleteAlias:()=>"custom"===a?m(i):o(l),onToggle:"custom"===a&&u?()=>u(i,!1):void 0,onTest:h.length>0?()=>$(i):void 0,testStatus:C[i],isTesting:N===i},`${a}-${e}/${i}`))}),P.length>0&&(0,s.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Disabled (activate to expose again):"}),P.map(({id:i,alias:l,source:a})=>(0,s.jsx)(J,{modelId:i,fullModel:`${t}/${i}`,copied:n,onCopy:r,enabled:!1,onDeleteAlias:()=>"custom"===a?m(i):o(l),onToggle:"custom"===a&&u?()=>u(i,!0):void 0,onTest:h.length>0?()=>$(i):void 0,testStatus:C[i],isTesting:N===i},`disabled-${a}-${e}/${i}`))]})]})}K.propTypes={model:_().shape({id:_().string.isRequired,rateMultiplier:_().number,promotion:_().object,nightFree:_().shape({from:_().number,to:_().number})}).isRequired,fullModel:_().string.isRequired,alias:_().string,copied:_().string,onCopy:_().func.isRequired,testStatus:_().oneOf(["ok","error"]),isCustom:_().bool,isFree:_().bool,onDeleteAlias:_().func,onTest:_().func,isTesting:_().bool,onDisable:_().func,onEnable:_().func,caps:_().object,baseCaps:_().object,thinkingSuffix:_().string,onSaveCaps:_().func,capsPinned:_().bool},_().string.isRequired,_().string.isRequired,_().string,_().func.isRequired,_().func.isRequired,_().func,_().oneOf(["ok","error"]),_().bool,_().string.isRequired,_().object.isRequired,_().arrayOf(_().object),_().string,_().func.isRequired,_().func.isRequired,_().func.isRequired,_().func.isRequired,W.propTypes={providerStorageAlias:_().string.isRequired,providerDisplayAlias:_().string.isRequired,modelAliases:_().object.isRequired,customModels:_().arrayOf(_().object),copied:_().string,onCopy:_().func.isRequired,onDeleteAlias:_().func.isRequired,onAddCustomModel:_().func.isRequired,onBulkCustomModels:_().func,onToggleCustomModel:_().func,onDeleteCustomModel:_().func.isRequired,connections:_().arrayOf(_().shape({id:_().string,isActive:_().bool})).isRequired,isAnthropic:_().bool};var B=i(70217),H=i(36109);function V({until:e,inline:t=!1}){let[i,a]=(0,l.useState)("");return((0,l.useEffect)(()=>{let t=()=>{let t=new Date(e).getTime()-Date.now();if(t<=0)return void a("");let i=Math.floor(t/1e3);if(i<60)a(`${i}s`);else if(i<3600)a(`${Math.floor(i/60)}m ${i%60}s`);else{let e=Math.floor(i/3600),t=Math.floor(i%3600/60);a(`${e}h ${t}m`)}};t();let i=setInterval(t,1e3);return()=>clearInterval(i)},[e]),i)?t?(0,s.jsxs)("span",{className:"shrink-0 text-xs text-orange-500 font-mono",children:[(0,s.jsx)("span",{className:"text-[0.85em] leading-none",children:"⏱"})," ",i]}):(0,s.jsxs)("span",{className:"text-xs text-orange-500 font-mono",children:[(0,s.jsx)("span",{className:"text-[0.85em] leading-none",children:"⏱"})," ",i]}):null}function G({connection:e,proxyPools:t,isOAuth:i,isFirst:a,isLast:n,onMoveUp:r,onMoveDown:o,onToggleActive:d,onUpdateProxy:u,onEdit:m,onDelete:x,oneByOneStatus:h=null,autoPing:f=null}){let[g,y]=(0,l.useState)(!1),[b,v]=(0,l.useState)(!1),j=(0,l.useRef)(null),w=new Map((t||[]).map(e=>[e.id,e])),k=e.providerSpecificData?.proxyPoolId||null,N=k?w.get(k):null,T=e.providerSpecificData?.connectionProxyEnabled===!0&&!!e.providerSpecificData?.connectionProxyUrl,C=!!k||T,S=N?`Pool: ${N.name}`:k?`Pool: ${k} (inactive/missing)`:T?`Legacy: ${e.providerSpecificData?.connectionProxyUrl}`:"",A=f?.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.",O="";if(N?.proxyUrl||e.providerSpecificData?.connectionProxyUrl){let t=N?.proxyUrl||e.providerSpecificData?.connectionProxyUrl;try{let e=new URL(t);O=`${e.protocol}//${e.hostname}${e.port?`:${e.port}`:""}`}catch{O=t}}let E=N?.noProxy||e.providerSpecificData?.connectionNoProxy||"",P="default";N?.isActive===!0?P="success":(k||T)&&(P="error"),(0,l.useEffect)(()=>{if(!g)return;let e=e=>{j.current&&!j.current.contains(e.target)&&y(!1)};return document.addEventListener("mousedown",e),()=>document.removeEventListener("mousedown",e)},[g]);let D=async e=>{v(!0);try{await u("__none__"===e?null:e)}finally{v(!1),y(!1)}},I=e.authType||(i?"oauth":"apikey"),q="oauth"===I,_="cookie"===I,U=e.providerSpecificData?.authMethod,z="string"==typeof e.accessToken?e.accessToken:"",F=e.hasDesktopSession??!!e.providerSpecificData?.mimoPassToken,L=e.hasAccessToken??(z.length>0&&!z.startsWith("mimo-desktop-session")),K="desktop-session"===U||F&&!L,J=F&&L,W=!J&&!K&&"oauth"===U,Q=K||J?(0,p.Tl)("Desktop Session"):W?(0,p.Tl)("Browser sign-in"):q?"OAuth":_?"Cookie":"API Key",Y=J?(0,p.Tl)("Browser sign-in"):null,Z=e.providerSpecificData?.mimoUserId||e.providerSpecificData?.uid||null,X=("xiaomi-mimo"===e.provider||"xiaomi-tokenplan"===e.provider)&&Z?`MiMo ${Z}`:null,ee=e.name?.trim()||X||e.email?.trim()||e.displayName?.trim()||(q?"OAuth Account":_?"Cookie Account":"API Key"),et=e.name?.trim()&&e.email?.trim()&&e.name.trim()!==e.email.trim()||X&&e.email?.trim()&&e.email.trim()!==X?e.email.trim():e.name?.trim()&&e.displayName?.trim()&&e.name.trim()!==e.displayName.trim()?e.displayName.trim():null,[ei,es]=(0,l.useState)(()=>(0,H._)(e));(0,l.useEffect)(()=>{let t=()=>{es(t=>{let i=(0,H._)(e);return(0,H.W)(t,i)?t:i})};t();let i=Object.keys(e).some(t=>t.startsWith("modelLock_")&&e[t])?setInterval(t,1e3):null;return()=>{i&&clearInterval(i)}},[e]);let{state:el,earliestUntil:ea}=ei,en="partial"===el||"unavailable"===el,er="partial"===el?(0,p.Tl)("Partial"):el,eo=!1!==e.isActive?R(e.lastError):null,{copied:ed,copy:ec}=(0,$.C)(),eu=()=>h?"queued"===h.state?(0,p.Tl)("queued"):"testing"===h.state?(0,p.Tl)("testing"):"success"===h.state?(0,p.Tl)("success"):"failed"===h.state?h.error?`${(0,p.Tl)("failed")}: ${h.error}`:(0,p.Tl)("failed"):null:null;return(0,s.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,s.jsxs)("div",{className:"flex min-w-0 flex-1 items-start gap-2 sm:items-center sm:gap-3",children:[(0,s.jsxs)("div",{className:"flex shrink-0 flex-col",children:[(0,s.jsx)("button",{onClick:r,disabled:a,className:`p-0.5 rounded ${a?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_up"})}),(0,s.jsx)("button",{onClick:o,disabled:n,className:`p-0.5 rounded ${n?"text-text-muted/30 cursor-not-allowed":"hover:bg-sidebar text-text-muted hover:text-primary"}`,children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"keyboard_arrow_down"})})]}),(0,s.jsx)("span",{className:"material-symbols-outlined shrink-0 text-base text-text-muted",children:F?"computer":W?"login":_?"cookie":q?"lock":"key"}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsx)("p",{className:"text-sm font-medium truncate",children:ee}),et&&(0,s.jsx)("p",{className:"text-xs text-text-muted truncate",children:et}),(0,s.jsxs)("div",{className:"mt-1 flex min-w-0 flex-wrap items-center gap-1.5 sm:gap-2",children:[(0,s.jsx)(c.Ex,{variant:(0,B.g)(e.isActive,el),size:"sm",dot:!0,children:!1===e.isActive?(0,p.Tl)("disabled"):er||(0,p.Tl)("Unknown")}),(0,s.jsx)(c.Ex,{variant:"default",size:"sm",children:Q}),Y&&(0,s.jsx)(c.Ex,{variant:"default",size:"sm",children:Y}),C&&(0,s.jsx)(c.Ex,{variant:P,size:"sm",children:"Proxy"}),e.earliestPackageExpiry&&(0,s.jsxs)(c.Ex,{variant:"outline",size:"sm",title:`${(0,p.Tl)("Earliest package")}: ${e.earliestPackageName||(0,p.Tl)("Quota package")} (${new Date(e.earliestPackageExpiry).toLocaleString()})`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[12px] mr-1",children:"schedule"}),function(e){if(!e)return"";let t=new Date(e).getTime()-Date.now();if(t<=0)return(0,p.Tl)("expired");let i=Math.floor(t/36e5);if(i<24)return`${i}h`;let s=Math.floor(i/24);return s<30?i%24?`${s}d ${i%24}h`:`${s}d`:new Date(e).toLocaleDateString()}(e.earliestPackageExpiry)]}),en&&!1!==e.isActive&&!e.lastError&&(0,s.jsx)(V,{until:ea}),e.lastError&&!1!==e.isActive&&(0,s.jsxs)("span",{className:"inline-flex items-center gap-1 max-w-full truncate text-xs text-red-500 sm:max-w-[380px]",title:(0,M.DY)(e.lastError),children:[en&&(0,s.jsx)(V,{until:ea,inline:!0}),(0,M.DY)(e.lastError)]}),eo&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("a",{href:eo,target:"_blank",rel:"noopener noreferrer",title:(0,p.Tl)("Recommended: open in an incognito window and sign in with the affected account"),className:"shrink-0 text-xs text-blue-500 underline hover:text-blue-400",children:(0,p.Tl)("Verify your account")}),(0,s.jsx)("button",{type:"button",onClick:()=>ec(eo,"verification"),title:(0,p.Tl)("Copy link"),className:"shrink-0 text-xs text-text-muted hover:text-primary",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-sm align-middle",children:"verification"===ed?"check":"content_copy"})})]}),(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["#",e.priority]}),e.globalPriority&&(0,s.jsxs)("span",{className:"text-xs text-text-muted",children:["Auto: ",e.globalPriority]}),eu()&&(0,s.jsx)(c.Ex,{variant:h?"success"===h.state?"success":"failed"===h.state?"error":"testing"===h.state?"primary":"default":"default",size:"sm",children:eu()})]}),C&&(0,s.jsxs)("div",{className:"mt-1 flex items-center gap-2 flex-wrap",children:[(0,s.jsx)("span",{className:"max-w-full truncate text-[11px] text-text-muted sm:max-w-[420px]",title:S,children:S}),O&&(0,s.jsx)("code",{className:"max-w-full truncate rounded bg-black/5 px-1 py-0.5 font-mono text-[10px] text-text-muted dark:bg-white/5 sm:max-w-[260px]",children:O}),E&&(0,s.jsxs)("span",{className:"max-w-full truncate text-[11px] text-text-muted sm:max-w-[320px]",title:E,children:["no_proxy: ",E]})]})]})]}),(0,s.jsxs)("div",{className:"flex w-full items-center justify-between gap-2 sm:w-auto sm:justify-end",children:[(0,s.jsxs)("div",{className:"grid flex-1 grid-cols-3 gap-1 sm:flex sm:flex-none",children:[(t||[]).length>0&&(0,s.jsxs)("div",{className:"relative",ref:j,children:[(0,s.jsxs)("button",{onClick:()=>y(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 ${C?"text-primary":"text-text-muted hover:text-primary"}`,disabled:b,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:b?"progress_activity":"lan"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Proxy"})]}),g&&(0,s.jsxs)("div",{className:"absolute right-0 top-full z-50 mt-1 max-w-[78vw] min-w-[160px] rounded-lg border border-border bg-bg py-1 shadow-lg",children:[(0,s.jsx)("button",{onClick:()=>D("__none__"),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${!k?"text-primary font-medium":"text-text-main"}`,children:"None"}),(t||[]).map(e=>(0,s.jsx)("button",{onClick:()=>D(e.id),className:`w-full text-left px-3 py-1.5 text-sm hover:bg-black/5 dark:hover:bg-white/5 ${k===e.id?"text-primary font-medium":"text-text-main"}`,children:e.name},e.id))]})]}),f&&(0,s.jsx)(c.m_,{text:A,children:(0,s.jsxs)("button",{onClick:()=>f.onToggle(!f.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 ${f.on?"text-primary":"text-text-muted hover:text-primary"}`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"bolt"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Auto-ping"})]})}),(0,s.jsxs)("button",{onClick:m,className:"flex flex-col items-center rounded px-2 py-1 text-text-muted hover:bg-black/5 hover:text-primary dark:hover:bg-white/5",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Edit"})]}),(0,s.jsxs)("button",{onClick:x,className:"flex flex-col items-center rounded px-2 py-1 text-red-500 hover:bg-red-500/10",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"delete"}),(0,s.jsx)("span",{className:"text-[10px] leading-tight",children:"Delete"})]})]}),(0,s.jsx)(c.lM,{size:"sm",checked:e.isActive??!0,onChange:d,title:e.isActive??!0?"Disable connection":"Enable connection"})]})]})}V.propTypes={until:_().string.isRequired,inline:_().bool},G.propTypes={connection:_().shape({id:_().string,name:_().string,email:_().string,displayName:_().string,modelLockUntil:_().string,testStatus:_().string,isActive:_().bool,lastError:_().string,priority:_().number,globalPriority:_().number}).isRequired,proxyPools:_().arrayOf(_().shape({id:_().string,name:_().string,proxyUrl:_().string,noProxy:_().string,isActive:_().bool})),isOAuth:_().bool.isRequired,isFirst:_().bool.isRequired,isLast:_().bool.isRequired,onMoveUp:_().func.isRequired,onMoveDown:_().func.isRequired,onToggleActive:_().func.isRequired,onUpdateProxy:_().func,onEdit:_().func.isRequired,onDelete:_().func.isRequired,oneByOneStatus:_().shape({state:_().string,error:_().string}),autoPing:_().shape({on:_().bool,onToggle:_().func,provider:_().string})};let Q=`name1|sk-key1
2
- name2|sk-key2
3
- sk-key-only-auto-named`;function Y({isOpen:e,provider:t,providerName:i,isCompatible:a,isAnthropic:n,authType:r,authHint:o,website:d,proxyPools:m,error:x,existingNames:h,onSave:f,onBulkDone:g,onClose:y}){let b="__none__",v="ollama-local"===t,j="cookie"===r,w="xai"===t&&!j,k=j?"Cookie Value":"qoder"===t?"Personal Access Token (PAT)":"API Key",N="azure"===t,T="cloudflare-ai"===t,C=u.Q2?.[t]?.regions||null,S=u.Q2?.[t]?.defaultRegion||C?.[0]?.id||"",[$,A]=(0,l.useState)({name:"",apiKey:"",defaultModel:"",priority:1,proxyPoolId:b,ollamaHostUrl:""}),[O,E]=(0,l.useState)({azureEndpoint:"",apiVersion:"2024-10-01-preview",deployment:"",organization:""}),[P,D]=(0,l.useState)({accountId:""}),[I,R]=(0,l.useState)(S),[M,q]=(0,l.useState)(!1),[_,U]=(0,l.useState)(null),[z,F]=(0,l.useState)(!1);(0,l.useEffect)(()=>{if(e&&C&&!M){let e=!0;return fetch("/api/network/egress-region").then(e=>e.json()).then(i=>{if(!e)return;let s=i?.recommendedRegions?.[t];s&&C.some(e=>e.id===s)&&(R(s),U({country:i.country||i.countryCode,regionId:s}))}).catch(()=>{}),()=>{e=!1}}},[e,t,C,M]);let[L,K]=(0,l.useState)(null),[J,W]=(0,l.useState)(null),[B,H]=(0,l.useState)(!1),[V,G]=(0,l.useState)(!1),Z=T?`name1|sk-key1|acc123456
4
- name2|sk-key2|def789012
5
- sk-key-only-auto-named`:"qoder"===t?`name1|pt-xxxxx
6
- name2|pt-yyyyy
7
- pt-only-auto-named`:Q,[X,ee]=(0,l.useState)("single"),[et,ei]=(0,l.useState)(""),[es,el]=(0,l.useState)(null),ea=()=>v&&$.ollamaHostUrl.trim()?{baseUrl:$.ollamaHostUrl.trim()}:N?{azureEndpoint:O.azureEndpoint,apiVersion:O.apiVersion,deployment:O.deployment,organization:O.organization}:T?{accountId:P.accountId}:C&&I?{region:I}:void 0,en=async()=>{F(!0);try{let e=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:$.apiKey,providerSpecificData:ea()})}),i=await e.json();K(i.valid?"success":"failed"),W(i.valid?null:i.error||null),H(!!i.maintenance)}catch{K("failed"),W(null),H(!1)}finally{F(!1)}},er=async()=>{if(t&&(v||$.apiKey)&&(v||$.name)&&(!a||$.defaultModel.trim())){G(!0);try{let e=!1;try{F(!0),K(null);let i=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:$.apiKey,providerSpecificData:ea()})});e=!!(await i.json()).valid,K(e?"success":"failed")}catch{K("failed")}finally{F(!1)}await f({name:$.name||(v?"Ollama Local":""),apiKey:$.apiKey,defaultModel:a?$.defaultModel.trim():void 0,priority:$.priority,proxyPoolId:$.proxyPoolId===b?null:$.proxyPoolId,testStatus:e?"active":"unknown",providerSpecificData:ea()})}finally{G(!1)}}},eo=async()=>{let e=et.split("\n");if(!e.length)return;let i=function(e,t,i={}){let{isCloudflareAi:s=!1}=i,l=new Set((Array.isArray(t)?t:[]).map(e=>"string"==typeof e?e.toLowerCase():"")),a=[];for(let t of e){let e,i="string"==typeof t?t.trim():"";if(!i)continue;let n=function(e,t={}){let{isCloudflareAi:i=!1}=t,s=e.split("|");if(i&&s.length>=3){let e=s[0].trim();return{baseName:e||"Key",apiKey:s.slice(1,-1).join("|").trim(),providerSpecificData:{accountId:s[s.length-1].trim()}}}return s.length>=2?{baseName:s[0].trim()||"Key",apiKey:s.slice(1).join("|").trim()}:{baseName:"Key",apiKey:s[0].trim()}}(i,{isCloudflareAi:s});if(!n||!n.apiKey)continue;let r=n.baseName,o=1;for(;e=`${r} ${o}`,l.has(e.toLowerCase());)o+=1;l.add(e.toLowerCase());let d={name:e,apiKey:n.apiKey,skipped:!1};n.providerSpecificData&&(d.providerSpecificData=n.providerSpecificData),a.push(d)}return a}(e,h,{isCloudflareAi:T});if(!i.length)return;G(!0),el(null);let s=0,l=0;for(let e of i)try{let i=!1;try{let s=await fetch("/api/providers/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:e.apiKey})});i=!!(await s.json().catch(()=>({}))).valid}catch{i=!1}(await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:t,apiKey:e.apiKey,name:e.name,priority:1,testStatus:i?"active":"unknown",...e.providerSpecificData?{providerSpecificData:e.providerSpecificData}:{}})})).ok?s++:l++}catch{l++}G(!1),el({success:s,failed:l}),s>0&&g&&g()};return t?(0,s.jsx)(c.aF,{isOpen:e,title:`Add ${i||t} ${k}`,onClose:y,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.$n,{size:"sm",variant:"single"===X?"primary":"ghost",onClick:()=>{ee("single"),el(null)},children:"Single"}),(0,s.jsx)(c.$n,{size:"sm",variant:"bulk"===X?"primary":"ghost",onClick:()=>{ee("bulk"),el(null)},children:"Bulk Add"})]}),"bulk"===X&&(0,s.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,s.jsx)("p",{className:"text-xs text-text-muted",children:T?(0,s.jsxs)(s.Fragment,{children:["One key per line. Format: ",(0,s.jsx)("code",{children:"name|apiKey|accountId"})," or just ",(0,s.jsx)("code",{children:"apiKey"})," (auto-named by index)."]}):"qoder"===t?(0,s.jsxs)(s.Fragment,{children:["One PAT per line. Format: ",(0,s.jsx)("code",{children:"name|pt-..."})," or just ",(0,s.jsx)("code",{children:"pt-..."})," (auto-named by index)."]}):(0,s.jsxs)(s.Fragment,{children:["One key per line. Format: ",(0,s.jsx)("code",{children:"name|apiKey"})," or just ",(0,s.jsx)("code",{children:"apiKey"})," (auto-named by index)."]})}),(0,s.jsx)("textarea",{className:"w-full rounded border border-accent/30 bg-sidebar p-2 text-sm font-mono resize-y min-h-[140px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:Z,value:et,onChange:e=>ei(e.target.value)}),es&&(0,s.jsxs)("div",{className:`text-sm font-medium ${es.failed>0?"text-yellow-400":"text-green-400"}`,children:["✓ ",es.success," added",es.failed>0?`, ✗ ${es.failed} failed`:""]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.$n,{onClick:eo,fullWidth:!0,disabled:V||!et.trim(),children:V?"Adding...":"Add All Keys"}),(0,s.jsx)(c.$n,{onClick:y,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]}),"single"===X&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.pd,{label:"Name",value:$.name,onChange:e=>A({...$,name:e.target.value}),placeholder:v?"Ollama Local":"Production Key"}),v&&(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.pd,{label:"Ollama Host URL",value:$.ollamaHostUrl,onChange:e=>A({...$,ollamaHostUrl:e.target.value}),placeholder:"http://localhost:11434",className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(c.$n,{onClick:en,disabled:z||V,variant:"secondary",children:z?"Checking...":"Check"})})]}),!v&&(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.pd,{label:k,type:j?"text":"password",value:$.apiKey,onChange:e=>A({...$,apiKey:e.target.value}),placeholder:j?"grok-web"===t?"sso=xxxxx... or just the raw value":"eyJhbGciOi...":w?"xai-...":"qoder"===t?"pt-...":"",className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(c.$n,{onClick:en,disabled:!$.apiKey||z||V,variant:"secondary",children:z?"Checking...":"Check"})})]}),w&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Use a direct xAI API key from console.x.ai. This is separate from Grok Build OAuth."}),j&&o&&(0,s.jsxs)("p",{className:"text-xs text-text-muted",children:[o,d&&(0,s.jsxs)(s.Fragment,{children:[" ",(0,s.jsxs)("a",{href:d,target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:["Open ",d.replace(/^https?:\/\//,"")]})]})]}),C&&(0,s.jsxs)("div",{children:[(0,s.jsx)(c.l6,{label:"Region",value:I,onChange:e=>{R(e.target.value),q(!0)},options:C.map(e=>({value:e.id,label:e.label}))}),_&&!M&&(0,s.jsxs)("p",{className:"text-xs text-primary mt-1 flex items-center gap-1",children:[(0,s.jsx)("span",{children:"\uD83C\uDF10"}),(0,s.jsx)("span",{children:(0,p.Tl)("Auto-matched region based on network location ({country})").replace("{country}",_.country)})]})]}),a&&(0,s.jsx)(c.pd,{label:"Default Model",value:$.defaultModel,onChange:e=>A({...$,defaultModel:e.target.value}),placeholder:n?"claude-3-5-sonnet-latest":"gpt-4o-mini"}),v&&(0,s.jsxs)("p",{className:"text-xs text-text-muted",children:["Leave blank to use ",(0,s.jsx)("code",{children:"http://localhost:11434"}),". For remote Ollama, enter the full host URL (e.g. ",(0,s.jsx)("code",{children:"http://192.168.1.10:11434"}),")."]}),L&&(0,s.jsx)(c.Ex,{variant:"success"===L?"success":B?"warning":"error",children:"success"===L?"Valid":B?"Check endpoint":"Invalid"}),B&&J&&(0,s.jsx)("p",{className:"text-xs text-amber-500 break-words",children:J}),x&&(0,s.jsx)("p",{className:"text-xs text-red-500 break-words",children:x}),a&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Enter the model ID exactly as your compatible endpoint expects it. This model will be saved as the connection default."}),T&&(0,s.jsxs)("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[(0,s.jsx)("h3",{className:"font-semibold mb-3 text-sm",children:"Cloudflare Workers AI"}),(0,s.jsx)(c.pd,{label:"Account ID",value:P.accountId,onChange:e=>D({...P,accountId:e.target.value}),placeholder:"abc123def456..."}),(0,s.jsxs)("p",{className:"text-xs text-text-muted mt-2",children:["Find your Account ID in the right sidebar of ",(0,s.jsx)("a",{href:"https://dash.cloudflare.com",target:"_blank",rel:"noopener noreferrer",className:"text-primary underline",children:"dash.cloudflare.com"})]})]}),N&&(0,s.jsxs)("div",{className:"bg-sidebar/50 p-4 rounded-lg border border-accent/20",children:[(0,s.jsx)("h3",{className:"font-semibold mb-3 text-sm",children:"Azure OpenAI Configuration"}),(0,s.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,s.jsx)(c.pd,{label:"Azure Endpoint",value:O.azureEndpoint,onChange:e=>E({...O,azureEndpoint:e.target.value}),placeholder:"https://your-resource.openai.azure.com"}),(0,s.jsx)(c.pd,{label:"Deployment Name",value:O.deployment,onChange:e=>E({...O,deployment:e.target.value}),placeholder:"gpt-4"}),(0,s.jsx)(c.pd,{label:"API Version",value:O.apiVersion,onChange:e=>E({...O,apiVersion:e.target.value}),placeholder:"2024-10-01-preview"}),(0,s.jsx)(c.pd,{label:"Organization",value:O.organization,onChange:e=>E({...O,organization:e.target.value}),placeholder:"Organization ID"})]})]}),(0,s.jsx)(c.pd,{label:"Priority",type:"number",value:$.priority,onChange:e=>A({...$,priority:Number.parseInt(e.target.value)||1})}),(0,s.jsx)(c.l6,{label:"Proxy Pool",value:$.proxyPoolId,onChange:e=>A({...$,proxyPoolId:e.target.value}),options:[{value:b,label:"None"},...(m||[]).map(e=>({value:e.id,label:e.name}))],placeholder:"None"}),0===(m||[]).length&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"No active proxy pools available. Create one in Proxy Pools page first."}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Legacy manual proxy fields are still accepted by API for backward compatibility."}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.$n,{onClick:er,fullWidth:!0,disabled:V||!v&&(!$.name||!$.apiKey)||a&&!$.defaultModel.trim()||N&&(!O.azureEndpoint||!O.deployment||!O.organization)||T&&!P.accountId,children:V?"Saving...":"Save"}),(0,s.jsx)(c.$n,{onClick:y,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})]})}):null}function Z({isOpen:e,node:t,onSave:i,onClose:a,isAnthropic:n}){let[r,o]=(0,l.useState)({name:"",prefix:"",apiType:"chat",baseUrl:"https://api.openai.com/v1"}),[d,u]=(0,l.useState)(!1),[m,p]=(0,l.useState)(""),[x,h]=(0,l.useState)(""),[f,g]=(0,l.useState)(!1),[y,b]=(0,l.useState)(null);(0,l.useEffect)(()=>{t&&o({name:t.name||"",prefix:t.prefix||"",apiType:t.apiType||"chat",baseUrl:t.baseUrl||(n?"https://api.anthropic.com/v1":"https://api.openai.com/v1")})},[t,n]);let v=async()=>{if(r.name.trim()&&r.prefix.trim()&&r.baseUrl.trim()){u(!0);try{let e={name:r.name,prefix:r.prefix,baseUrl:r.baseUrl};n||(e.apiType=r.apiType),await i(e)}finally{u(!1)}}},j=async()=>{g(!0);try{let e=await fetch("/api/provider-nodes/validate",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({baseUrl:r.baseUrl,apiKey:m,type:n?"anthropic-compatible":"openai-compatible",modelId:x.trim()||void 0})}),t=await e.json();b(t.valid?"success":"failed")}catch{b("failed")}finally{g(!1)}};return t?(0,s.jsx)(c.aF,{isOpen:e,title:`Edit ${n?"Anthropic":"OpenAI"} Compatible`,onClose:a,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)(c.pd,{label:"Name",value:r.name,onChange:e=>o({...r,name:e.target.value}),placeholder:`${n?"Anthropic":"OpenAI"} Compatible (Prod)`,hint:"Required. A friendly label for this node."}),(0,s.jsx)(c.pd,{label:"Prefix",value:r.prefix,onChange:e=>o({...r,prefix:e.target.value}),placeholder:n?"ac-prod":"oc-prod",hint:"Required. Used as the provider prefix for model IDs."}),!n&&(0,s.jsx)(c.l6,{label:"API Type",options:[{value:"chat",label:"Chat Completions"},{value:"responses",label:"Responses API"}],value:r.apiType,onChange:e=>o({...r,apiType:e.target.value})}),(0,s.jsx)(c.pd,{label:"Base URL",value:r.baseUrl,onChange:e=>o({...r,baseUrl:e.target.value}),placeholder:n?"https://api.anthropic.com/v1":"https://api.openai.com/v1",hint:`Use the base URL (ending in /v1) for your ${n?"Anthropic":"OpenAI"}-compatible API.`}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.pd,{label:"API Key (for Check)",type:"password",value:m,onChange:e=>p(e.target.value),className:"flex-1"}),(0,s.jsx)("div",{className:"pt-6",children:(0,s.jsx)(c.$n,{onClick:j,disabled:!m||f||!r.baseUrl.trim(),variant:"secondary",children:f?"Checking...":"Check"})})]}),(0,s.jsx)(c.pd,{label:"Model ID (optional)",value:x,onChange:e=>h(e.target.value),placeholder:"e.g. my-model-id",hint:"If provider lacks /models endpoint, enter a model ID to validate via chat/completions instead."}),y&&(0,s.jsx)(c.Ex,{variant:"success"===y?"success":"error",children:"success"===y?"Valid":"Invalid"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.$n,{onClick:v,fullWidth:!0,disabled:!r.name.trim()||!r.prefix.trim()||!r.baseUrl.trim()||d,children:d?"Saving...":"Save"}),(0,s.jsx)(c.$n,{onClick:a,variant:"ghost",fullWidth:!0,children:"Cancel"})]})]})}):null}function X({isOpen:e,providerAlias:t,providerDisplayAlias:i,onSave:a,onClose:n}){let[r,o]=(0,l.useState)(""),[d,u]=(0,l.useState)(null),[p,x]=(0,l.useState)(""),[h,f]=(0,l.useState)(!1),[g,y]=(0,l.useState)(""),[b,v]=(0,l.useState)(""),[j,w]=(0,l.useState)("llm"),[k,N]=(0,l.useState)("");(0,l.useEffect)(()=>{e&&(o(""),u(null),x(""),y(""),v(""),w("llm"),N(""))},[e]);let T=e=>{let i=`${t}/`;return e.startsWith(i)?e.slice(i.length):e},C=async()=>{let e=T(r.trim());if(e){u("testing"),x("");try{let i=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${t}/${e}`})}),s=await i.json();u(s.ok?"ok":"error"),x(s.error||"")}catch(e){u("error"),x(e.message)}}},S=async()=>{let e=T(r.trim());if(!e||h)return;f(!0);let t=e=>{let t=Number(String(e).trim());return Number.isFinite(t)&&t>0?Math.floor(t):void 0},i={contextWindow:t(g),maxOutput:t(b)};try{await a(e,i,j,"stt"===j?k:null)}finally{f(!1)}};return(0,s.jsx)(c.aF,{isOpen:e,onClose:n,title:"Add Custom Model",children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Model ID"}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("input",{type:"text",value:r,onChange:e=>{o(e.target.value),u(null),x("")},onKeyDown:e=>{"Enter"===e.key&&C()},placeholder:"e.g. claude-opus-4-5",className:"flex-1 px-3 py-2 text-sm border border-border rounded-lg bg-surface focus:outline-none focus:border-primary",autoFocus:!0}),(0,s.jsx)(c.$n,{variant:"secondary",icon:"science",loading:"testing"===d,onClick:C,disabled:!r.trim()||"testing"===d,children:"testing"===d?"Testing...":"Test"})]}),(0,s.jsxs)("p",{className:"text-xs text-text-muted mt-1",children:["Sent to provider as: ",(0,s.jsx)("code",{className:"font-mono bg-sidebar px-1 rounded",children:T(r.trim())||"model-id"})]})]}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Model type"}),(0,s.jsxs)("select",{value:j,onChange:e=>{w(e.target.value),"stt"!==e.target.value&&N("")},className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-surface focus:outline-none focus:border-primary",children:[(0,s.jsx)("option",{value:"llm",children:"LLM (chat)"}),(0,s.jsx)("option",{value:"stt",children:"STT (speech to text)"})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{className:"text-sm font-medium mb-1.5 block",children:["Transport ","stt"===j?"":"(STT only)"]}),(0,s.jsxs)("select",{value:k,onChange:e=>N(e.target.value),disabled:"stt"!==j,className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-surface focus:outline-none focus:border-primary disabled:opacity-50",children:[(0,s.jsx)("option",{value:"",children:"Provider default (REST)"}),m.vp.map(e=>(0,s.jsx)("option",{value:e,children:m.qw[e].label},e))]})]})]}),"ok"===d&&(0,s.jsxs)("div",{className:"flex items-center gap-2 text-sm text-green-600",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base",children:"check_circle"}),"Model is reachable"]}),"error"===d&&(0,s.jsxs)("div",{className:"flex items-start gap-2 text-sm text-red-500",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-base shrink-0",children:"cancel"}),(0,s.jsx)("span",{children:p||"Model not reachable"})]}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-2",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Context window"}),(0,s.jsx)("input",{type:"number",min:"1",step:"1",value:g,onChange:e=>y(e.target.value),placeholder:"e.g. 200000",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-surface focus:outline-none focus:border-primary"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-sm font-medium mb-1.5 block",children:"Max output"}),(0,s.jsx)("input",{type:"number",min:"1",step:"1",value:b,onChange:e=>v(e.target.value),placeholder:"e.g. 8192",className:"w-full px-3 py-2 text-sm border border-border rounded-lg bg-surface focus:outline-none focus:border-primary"})]})]}),(0,s.jsxs)("div",{className:"flex gap-2 pt-1",children:[(0,s.jsx)(c.$n,{onClick:n,variant:"ghost",fullWidth:!0,size:"sm",children:"Cancel"}),(0,s.jsx)(c.$n,{onClick:S,fullWidth:!0,size:"sm",disabled:!r.trim()||h,children:h?"Adding...":"Add Model"})]})]})})}Y.propTypes={isOpen:_().bool.isRequired,provider:_().string,providerName:_().string,isCompatible:_().bool,isAnthropic:_().bool,authType:_().string,authHint:_().string,website:_().string,proxyPools:_().arrayOf(_().shape({id:_().string,name:_().string})),error:_().string,existingNames:_().arrayOf(_().string),onSave:_().func.isRequired,onBulkDone:_().func,onClose:_().func.isRequired},Z.propTypes={isOpen:_().bool.isRequired,node:_().shape({id:_().string,name:_().string,prefix:_().string,apiType:_().string,baseUrl:_().string}),onSave:_().func.isRequired,onClose:_().func.isRequired,isAnthropic:_().bool},X.propTypes={isOpen:_().bool.isRequired,providerAlias:_().string.isRequired,providerDisplayAlias:_().string.isRequired,onSave:_().func.isRequired,onClose:_().func.isRequired};let ee=`[
8
- {
9
- "accessToken": "eyJhbGc...",
10
- "refreshToken": "rt_...",
11
- "idToken": "eyJhbGc...",
12
- "email": "user@example.com"
13
- }
14
- ]`;function et({isOpen:e,onClose:t,onSuccess:i}){let[a,n]=(0,l.useState)(""),[r,o]=(0,l.useState)(!1),[d,u]=(0,l.useState)(""),[m,x]=(0,l.useState)(null),h=()=>{r||(n(""),u(""),x(null),t())},f=async()=>{var e;let t;u(""),x(null);let s=a.trim();if(!s)return;try{t=JSON.parse(s)}catch(e){u(`${(0,p.Tl)("Invalid JSON")}: ${e.message}`);return}let l=Array.isArray(e=t)?e:e&&"object"==typeof e?Array.isArray(e.accounts)?e.accounts:[e]:null;if(!l||0===l.length)return void u((0,p.Tl)("No accounts found in input"));o(!0);try{let e=await fetch("/api/oauth/codex/bulk-import",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({accounts:l})}),t=await e.json();if(!e.ok)return void u(t?.error||`Request failed: ${e.status}`);x(t),t.success>0&&"function"==typeof i&&i()}catch(e){u(e.message||(0,p.Tl)("Request failed"))}finally{o(!1)}},g=m?.results?.filter(e=>!e.ok)||[];return(0,s.jsx)(c.aF,{isOpen:e,title:(0,p.Tl)("Bulk Add Codex Accounts"),onClose:h,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsx)("p",{className:"text-xs text-text-muted",children:(0,p.Tl)("Paste an array of codex account JSON objects. Each must include accessToken (and ideally refreshToken, idToken).")}),(0,s.jsx)("textarea",{className:"w-full rounded border border-accent/30 bg-sidebar p-2 text-sm font-mono resize-y min-h-[240px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:ee,value:a,onChange:e=>n(e.target.value),disabled:r}),d&&(0,s.jsx)("p",{className:"text-xs text-red-500 break-words",children:d}),m&&(0,s.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,s.jsxs)("div",{className:`text-sm font-medium ${m.failed>0?"text-yellow-400":"text-green-400"}`,children:["✓ ",m.success," ",(0,p.Tl)("added"),m.failed>0?`, ✗ ${m.failed} ${(0,p.Tl)("failed")}`:""]}),g.length>0&&(0,s.jsx)("ul",{className:"rounded border border-accent/20 bg-sidebar/50 p-2 text-xs font-mono max-h-40 overflow-y-auto",children:g.map(e=>(0,s.jsxs)("li",{className:"text-red-400",children:["[",e.index,"] ",e.error]},e.index))})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.$n,{onClick:f,fullWidth:!0,disabled:r||!a.trim(),children:r?(0,p.Tl)("Importing..."):(0,p.Tl)("Import All")}),(0,s.jsx)(c.$n,{onClick:h,variant:"ghost",fullWidth:!0,disabled:r,children:(0,p.Tl)("Close")})]})]})})}function ei({isOpen:e,onClose:t,onSuccess:i,password:a=""}){let[n,r]=(0,l.useState)(""),[o,d]=(0,l.useState)(""),[u,m]=(0,l.useState)(!1),[x,h]=(0,l.useState)(""),[f,g]=(0,l.useState)(null),y=(0,l.useRef)(null),b=()=>{u||(r(""),d(""),h(""),g(null),y.current&&(y.current.value=""),t())},v=async()=>{let e;h(""),g(null);let t=n.trim();if(!t)return;try{e=JSON.parse(t)}catch(e){h(`${(0,p.Tl)("Invalid JSON")}: ${e.message}`);return}let s=Array.isArray(e)?e:e&&"object"==typeof e?Array.isArray(e.accounts)?e.accounts:[e]:null;if(!s||0===s.length)return void h((0,p.Tl)("No accounts found in input"));m(!0);try{let e=await fetch("/api/oauth/codebuddy-cn/bulk-import",{method:"POST",headers:{"Content-Type":"application/json",...a?{"x-10r-password":a}:{}},body:JSON.stringify({accounts:s})}),t=await e.json();if(!e.ok)return void h(401===e.status?(0,p.Tl)("Invalid password"):t?.error||`Request failed: ${e.status}`);g(t),(t.imported>0||t.updated>0)&&"function"==typeof i&&i()}catch(e){h(e.message||(0,p.Tl)("Request failed"))}finally{m(!1)}},j=f?.results?.filter(e=>!e.ok)||[],w=f?.skipped??0;return(0,s.jsx)(c.aF,{isOpen:e,title:(0,p.Tl)("Import CodeBuddy CN Accounts"),onClose:b,children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,s.jsx)(c.$n,{variant:"secondary",fullWidth:!0,icon:"upload_file",onClick:()=>y.current?.click(),disabled:u,children:o||(0,p.Tl)("Choose JSON file...")}),(0,s.jsx)("input",{ref:y,type:"file",accept:".json,application/json",className:"hidden",onChange:e=>{let t=e.target.files?.[0];if(!t)return;d(t.name),h(""),g(null);let i=new FileReader;i.onload=()=>r(String(i.result||"")),i.onerror=()=>h((0,p.Tl)("Failed to read file")),i.readAsText(t)}})]}),(0,s.jsxs)("div",{className:"relative",children:[(0,s.jsx)("div",{className:"absolute -top-2 left-2 bg-sidebar px-1 text-[10px] text-text-muted",children:(0,p.Tl)("Or paste JSON")}),(0,s.jsx)("textarea",{className:"w-full rounded border border-accent/30 bg-sidebar p-2 pt-4 text-sm font-mono resize-y min-h-[160px] focus:outline-none focus:ring-1 focus:ring-primary",placeholder:'[{ "access_token": "eyJ...", "refresh_token": "eyJ...", "nickname": "<nickname>" }]',value:n,onChange:e=>r(e.target.value),disabled:u})]}),x&&(0,s.jsx)("p",{className:"text-xs text-red-500 break-words",children:x}),f&&(0,s.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,s.jsxs)("div",{className:`text-sm font-medium ${f.failed>0?"text-yellow-400":"text-green-400"}`,children:["✓ ",f.imported," ",(0,p.Tl)("added"),", ",f.updated," ",(0,p.Tl)("updated"),w>0?`, ${w} ${(0,p.Tl)("skipped")}`:"",f.failed>0?`, ✗ ${f.failed} ${(0,p.Tl)("failed")}`:""]}),j.length>0&&(0,s.jsx)("ul",{className:"rounded border border-accent/20 bg-sidebar/50 p-2 text-xs font-mono max-h-40 overflow-y-auto",children:j.map(e=>(0,s.jsxs)("li",{className:"text-red-400",children:["[",e.index,"] ",e.error]},e.index))})]}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.$n,{onClick:v,fullWidth:!0,disabled:u||!n.trim(),children:u?(0,p.Tl)("Importing..."):(0,p.Tl)("Import All")}),(0,s.jsx)(c.$n,{onClick:b,variant:"ghost",fullWidth:!0,disabled:u,children:(0,p.Tl)("Close")})]})]})})}function es({isOpen:e,mode:t,provider:i,providerName:a,dashboardPassword:n,onClose:r,onSuccess:o}){let[d,u]=(0,l.useState)(""),[m,x]=(0,l.useState)(""),[h,f]=(0,l.useState)(!1),[g,y]=(0,l.useState)(""),[b,v]=(0,l.useState)(null),[j,w]=(0,l.useState)(""),[k,N]=(0,l.useState)(null),T=(0,l.useRef)(null),C=(0,l.useRef)(null),S=e=>{clearTimeout(C.current),C.current=setTimeout(()=>{C.current=null,$(),r()},e)};(0,l.useEffect)(()=>()=>clearTimeout(C.current),[]);let $=()=>{u(""),x(""),f(!1),y(""),v(null),w(""),N(null),T.current&&(T.current.value="")},A={"Content-Type":"application/json","x-10r-password":n||""},O=async()=>{if(y(""),v(null),clearTimeout(C.current),d.length<4)return void y((0,p.Tl)("Passphrase must be at least 4 characters"));if(d!==m)return void y((0,p.Tl)("Passphrases do not match"));f(!0);try{let e=await fetch("/api/oauth/transfer/export",{method:"POST",headers:A,body:JSON.stringify({provider:i,passphrase:d})}),t=await e.json();if(!e.ok)throw Error((0,p.Tl)(t?.error)||`Request failed: ${e.status}`);let s=JSON.stringify(t.blob,null,2),l=URL.createObjectURL(new Blob([s],{type:"application/json"})),a=document.createElement("a");a.href=l,a.download=`oauth-${i}-transfer-${new Date().toISOString().slice(0,10)}.json`,document.body.appendChild(a),a.click(),a.remove(),setTimeout(()=>URL.revokeObjectURL(l),1e3),v({exported:t.count}),S(1200)}catch(e){y(e.message||(0,p.Tl)("Export failed"))}finally{f(!1)}},E=async()=>{if(y(""),v(null),clearTimeout(C.current),!k)return void y((0,p.Tl)("Pick a transfer file first"));if(!d)return void y((0,p.Tl)("Transfer passphrase required"));f(!0);try{let e=await fetch("/api/oauth/transfer/import",{method:"POST",headers:A,body:JSON.stringify({provider:i,passphrase:d,blob:k})}),t=await e.json();if(!e.ok){if(401===e.status&&/passphrase/i.test(t?.error||""))throw Error((0,p.Tl)("Wrong passphrase"));throw Error((0,p.Tl)(t?.error)||`Request failed: ${e.status}`)}v(t),"function"==typeof o&&o(),!((t?.webSessions?.failed||0)>0)&&(t?.imported||0)+(t?.updated||0)>0&&S(1800)}catch(e){y(e.message||(0,p.Tl)("Import failed"))}finally{f(!1)}};return(0,s.jsx)(c.aF,{isOpen:e,title:"export"===t?(0,p.Tl)("Export OAuth accounts"):(0,p.Tl)("Import OAuth accounts"),onClose:()=>{h||(clearTimeout(C.current),C.current=null,$(),r())},children:(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("p",{className:"text-xs text-text-muted",children:[(0,p.Tl)("Provider"),": ",(0,s.jsx)("span",{className:"font-medium text-text-main",children:a||i})]}),"export"===t?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)(c.pd,{type:"password",reveal:!0,label:(0,p.Tl)("Transfer passphrase"),value:d,onChange:e=>u(e.target.value),placeholder:"••••••••"}),(0,s.jsx)(c.pd,{type:"password",reveal:!0,label:(0,p.Tl)("Confirm passphrase"),value:m,onChange:e=>x(e.target.value),placeholder:"••••••••"})]}),(0,s.jsx)("p",{className:"text-xs text-text-muted",children:(0,p.Tl)("The file is encrypted with this passphrase — it is required again at import, and cannot be recovered.")}),g&&(0,s.jsx)("p",{className:"text-xs text-red-500",children:g}),b&&(0,s.jsxs)("p",{className:"text-xs text-green-600",children:[(0,p.Tl)("Export complete")," — ",b.exported," ",(0,p.Tl)("accounts exported")]}),(0,s.jsx)(c.$n,{onClick:O,disabled:h,fullWidth:!0,children:(0,p.Tl)("Export encrypted file")})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.pd,{label:(0,p.Tl)("Transfer file"),value:j,readOnly:!0,placeholder:(0,p.Tl)("Pick a transfer file first"),className:"cursor-pointer",onClick:()=>T.current?.click()}),(0,s.jsx)("input",{ref:T,type:"file",accept:".json,application/json",className:"hidden",onChange:e=>{let t=e.target.files?.[0];if(!t)return;w(t.name),y(""),v(null);let i=new FileReader;i.onload=()=>{try{let e=JSON.parse(String(i.result||""));if(e?.format!=="10router-oauth-secure-v1"){y((0,p.Tl)("Unrecognized transfer file (expected an encrypted OAuth transfer)")),N(null);return}N(e)}catch(e){y(`${(0,p.Tl)("Invalid JSON")}: ${e.message}`),N(null)}},i.onerror=()=>y((0,p.Tl)("Failed to read file")),i.readAsText(t)}}),(0,s.jsx)(c.pd,{type:"password",reveal:!0,label:(0,p.Tl)("Transfer passphrase"),value:d,onChange:e=>u(e.target.value),placeholder:"••••••••"}),g&&(0,s.jsx)("p",{className:"text-xs text-red-500",children:g}),b&&(0,s.jsxs)("div",{className:"text-xs text-text-muted",children:[(0,s.jsxs)("p",{children:[(0,p.Tl)("Import complete"),": ",b.imported||0," ",(0,p.Tl)("imported"),", ",b.updated||0," ",(0,p.Tl)("updated"),(b.failed||0)>0?`, ${b.failed} ${(0,p.Tl)("failed")}`:""]}),b.webSessions?.failed>0&&(0,s.jsxs)("p",{className:"mt-1 text-amber-600 dark:text-amber-400",children:[(0,p.Tl)("Web session check failed for"),": ",b.webSessions.failures.map(e=>e.name).join(", ")]}),b.webSessions?.checked>0&&0===b.webSessions.failed&&(0,s.jsxs)("p",{className:"mt-1 text-green-600",children:[(0,p.Tl)("Web sessions verified"),": ",b.webSessions.ok,"/",b.webSessions.checked]})]}),(0,s.jsx)(c.$n,{onClick:E,disabled:h,fullWidth:!0,children:(0,p.Tl)("Import connections")})]})]})})}et.propTypes={isOpen:_().bool.isRequired,onClose:_().func.isRequired,onSuccess:_().func},ei.propTypes={isOpen:_().bool.isRequired,onClose:_().func.isRequired,onSuccess:_().func,password:_().string},es.propTypes={isOpen:_().bool.isRequired,mode:_().oneOf(["export","import"]).isRequired,provider:_().string.isRequired,providerName:_().string,dashboardPassword:_().string,onClose:_().func.isRequired,onSuccess:_().func};let el={claude:"claudeAutoPing",codex:"codexAutoPing"};function ea(){let e,t,i,n,x,h,f,y,b=(0,a.useParams)(),v=(0,a.useRouter)(),j=b.id,{getCaps:w,getBaseCaps:k,overrides:N,refresh:T}=(0,A.yU)(),C=(0,O.i)(),[E,I]=(0,l.useState)([]),[q,_]=(0,l.useState)(!0),[U,z]=(0,l.useState)(null),[F,L]=(0,l.useState)([]),[J,B]=(0,l.useState)(!1),[H,V]=(0,l.useState)(!1),[Q,ee]=(0,l.useState)(!1),[ea,en]=(0,l.useState)(!1),[er,eo]=(0,l.useState)(""),[ed,ec]=(0,l.useState)(!1),[eu,em]=(0,l.useState)(!1),[ep,ex]=(0,l.useState)(!1),[eh,ef]=(0,l.useState)(!1),[eg,ey]=(0,l.useState)(!1),[eb,ev]=(0,l.useState)(null),[ej,ew]=(0,l.useState)({}),[ek,eN]=(0,l.useState)([]),[eT,eC]=(0,l.useState)(!1),[eS,e$]=(0,l.useState)(!1),[eA,eO]=(0,l.useState)(!1),[eE,eP]=(0,l.useState)(!1),[eD,eI]=(0,l.useState)({open:!1,action:null,value:""}),[eR,eM]=(0,l.useState)(!1),[eq,e_]=(0,l.useState)(""),[eU,ez]=(0,l.useState)(""),[eF,eL]=(0,l.useState)(!1),[eK,eJ]=(0,l.useState)({}),[eW,eB]=(0,l.useState)(""),[eH,eV]=(0,l.useState)(()=>new Set),[eG,eQ]=(0,l.useState)(!1),[eY,eZ]=(0,l.useState)([]),[eX,e0]=(0,l.useState)("__none__"),[e1,e2]=(0,l.useState)(!1),[e5,e3]=(0,l.useState)(null),[e4,e6]=(0,l.useState)(""),[e8,e7]=(0,l.useState)(!1),[e9,te]=(0,l.useState)("auto"),[tt,ti]=(0,l.useState)({enabled:!1,connections:{}}),[ts,tl]=(0,l.useState)([]),[ta,tn]=(0,l.useState)(!1),[tr,to]=(0,l.useState)([]),[td,tc]=(0,l.useState)([]),[tu,tm]=(0,l.useState)([]),[tp,tx]=(0,l.useState)(null),[th,tf]=(0,l.useState)(!1),[tg,ty]=(0,l.useState)(!1),[tb,tv]=(0,l.useState)(!1),tj="__provider_default__",[tw,tk]=(0,l.useState)(tj),[tN,tT]=(0,l.useState)(null),[tC,tS]=(0,l.useState)({}),[t$,tA]=(0,l.useState)(null),tO=(0,l.useRef)(!1),[tE,tP]=(0,l.useState)(!1),{copied:tD,copy:tI}=(0,$.C)(),tR="ag_risk_confirmed",tM=()=>{"xiaomi-mimo"===j||"mimo-desktop"===j?V(!0):B(!0)},tq=()=>{"antigravity"===j&&"true"!==window.localStorage.getItem(tR)?tf(!0):tX?tM():(eo(""),en(!0))},t_=()=>{eo(""),en(!0)},tU=()=>{tX?tq():t_()},tz=async()=>{if(!eR){eM(!0),e_("");try{let e=await fetch("/api/auth/verify-password",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({password:eD.value})});if(!e.ok){let t=await e.json().catch(()=>({}));e_(t?.error||(0,p.Tl)("Invalid password"));return}let{action:t,value:i}=eD;eI({open:!1,action:null,value:""}),"export"===t&&(tB(i),tJ(t),tL(!0))}catch(e){e_(e.message||(0,p.Tl)("Invalid password"))}finally{eM(!1)}}},[tF,tL]=(0,l.useState)(!1),[tK,tJ]=(0,l.useState)("export"),[tW,tB]=(0,l.useState)(""),tH=async()=>{eO(!0);try{let e=await fetch("/api/oauth/codebuddy-cn/checkin",{method:"POST",cache:"no-store"}),t=await e.json();if(!e.ok)throw Error(t?.error||`Request failed: ${e.status}`);let i=Array.isArray(t?.results)?t.results:[];if(0===i.length)return void C.warning((0,p.Tl)("No CodeBuddy CN connections to check in"));let s=i.filter(e=>"checked-in"===e.status).length,l=i.filter(e=>"already"===e.status).length,a=i.filter(e=>"failed"===e.status).length;0===a?C.success(`${(0,p.Tl)("Check-in complete")}: ${s} ${(0,p.Tl)("checked-in")}, ${l} ${(0,p.Tl)("already checked in")}`):C.error(`${(0,p.Tl)("Check-in complete with errors")}: ${a} ${(0,p.Tl)("failed")}`)}catch(e){C.error((0,p.Tl)("Check-in failed")+": "+e.message)}finally{eO(!1)}},tV=()=>(0,s.jsx)("div",{className:"flex flex-wrap items-center gap-2",children:(0,s.jsx)(c.$n,{size:"sm",icon:"calendar_today",onClick:tH,disabled:eA,className:"w-full sm:w-auto",title:(0,p.Tl)("CodeBuddy CN auto-checks in daily (retries all day until confirmed)"),children:eA?(0,p.Tl)("Checking in..."):(0,p.Tl)("Check in now")})}),tG=async()=>{eP(!0);try{let e="qoder-cn"===j?"/api/oauth/qoder-cn/checkin":"/api/oauth/qoder/checkin",t=await fetch(e,{method:"POST",cache:"no-store"}),i=await t.json();if(!t.ok)throw Error(i?.error||`Request failed: ${t.status}`);let s=Array.isArray(i?.results)?i.results:[];if(0===s.length)return void C.warning((0,p.Tl)("No active Qoder connections found"));let l=s.filter(e=>"checked-in"===e.status),a=s.filter(e=>"already"===e.status),n=s.filter(e=>"no-activity"===e.status),r=s.filter(e=>"failed"===e.status),o=l.reduce((e,t)=>e+(t.claimedAmount||0),0);if(l.length>0)C.success(`${(0,p.Tl)("Claim successful")}: +${o} Credits (${l.length} ${(0,p.Tl)("accounts")})`);else if(r.length>0)C.error(`${(0,p.Tl)("Claim failed")}: ${r.map(e=>e.error).join(", ")}`);else if(n.length>0){let e=a.length>0?` / ${(0,p.Tl)("Daily credits already claimed for today")} (${a.length} ${(0,p.Tl)("accounts")})`:` (${n.length} ${(0,p.Tl)("accounts")})`;C.info((0,p.Tl)("No claimable activity available for this account")+e)}else C.info((0,p.Tl)("Daily credits already claimed for today"))}catch(e){C.error((0,p.Tl)("Claim failed")+": "+e.message)}finally{eP(!1)}},tQ=()=>(0,s.jsx)(c.$n,{size:"sm",icon:"redeem",variant:"secondary",onClick:tG,disabled:eE,className:"w-full sm:w-auto",title:(0,p.Tl)("Claim daily activity Credits"),children:eE?(0,p.Tl)("Claiming..."):(0,p.Tl)("Claim Credits")}),tY=U?{id:U.id,name:U.name||("anthropic-compatible"===U.type?"Anthropic Compatible":"OpenAI Compatible"),color:"anthropic-compatible"===U.type?"#D97757":"#10A37F",textIcon:"anthropic-compatible"===U.type?"AC":"OC",apiType:U.apiType,baseUrl:U.baseUrl,type:U.type}:u.zN[j]||u.fg[j]||u.IS[j]||u.nJ[j]||u.br[j],tZ=tY?.authModes||[],tX=!!u.zN[j]||!!u.IS[j]||tZ.includes("oauth"),t0=!!u.fg[j]||tZ.includes("apikey"),t1=!!u.IS[j]?.noAuth,t2="codebuddy-cn"===j,t5=tX&&tY?.authModes?.includes("oauth")&&eT,t3=t2&&eS,t4=e=>t5&&!t3?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{size:"sm",icon:"file_download",variant:"secondary",onClick:()=>{ez(""),eI({open:!0,action:"export",value:""})},className:e,children:(0,p.Tl)("Export")}),(0,s.jsx)(c.$n,{size:"sm",icon:"upload_file",variant:"secondary",onClick:()=>{tJ("import"),tL(!0)},className:e,children:(0,p.Tl)("Import")})]}):null,t6=(0,m.KC)(j),t8="qoder"===j||"qoder-cn"===j,t7="qoder"===j||"qoder-cn"===j||"xiaomi-mimo"===j,t9="cursor"===j&&tr.length>0?tr:t8?function(e,t){if(!Array.isArray(e)||!Array.isArray(t)||0===t.length)return e;let i=new Map(t.map(e=>[String(e.id).split("/").pop(),e]));return e.map(e=>{let t=i.get(e.id);return t?{...e,rateMultiplier:"number"==typeof t.rateMultiplier?t.rateMultiplier:e.rateMultiplier,promotion:t.promotion??e.promotion??null}:e})}(t6,tr):t6,ie=t8&&t9.find(e=>e.promotion)?.promotion||null,it=(0,u.wG)(j),ii=(0,u.mq)(j),is=(0,u.gb)(j),il=ii||is,ia=!il&&tX&&t0,ir="xai"===j?"Grok Build OAuth":"grok-cli"===j?"Grok CLI Device Login":"kimi"===j?"Kimi Coding OAuth":"OAuth",io="xai"===j?"xAI API Key":"kimi"===j?"Kimi API Key":"qoder"===j?"PAT":"API Key",id=e=>{if(!e9||"auto"===e9)return null;let t=S(j,e);return t&&t.includes(e9)?e9:null},ic=il?j:it,iu=(()=>{let e=new Set,t=new Set,i=i=>{if(!i||t.has(i))return;t.add(i);let s=S(j,i);s&&s.forEach(t=>{"none"!==t&&e.add(t)})};for(let e of t9)i(e.id);for(let e of td)i(e.id);for(let e of ek)e.providerAlias===ic&&"llm"===(e.kind||e.type||"llm")&&i(e.id);return e.size?["auto",...e]:null})(),im=il?U?.prefix||j:it,ip=(0,l.useCallback)(async()=>{try{let e=await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(ic)}`,{cache:"no-store"}),t=await e.json();e.ok&&tm(t.ids||[])}catch(e){console.log("Error fetching disabled models:",e)}},[ic]),ix=async e=>{try{(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:ic,ids:[e]})})).ok&&await ip()}catch(e){console.log("Error disabling model:",e)}},ih=async e=>{try{(await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(ic)}&id=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await ip()}catch(e){console.log("Error enabling model:",e)}},ig=async(e,t)=>{await fetch("/api/models/custom",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:ic,id:e,type:"llm",enabled:t})})},iy=async(e,t=[])=>{let i=e.length+t.length;i&&tx({title:"Disable All Models",message:`Disable all ${i} model(s)?`,onConfirm:async()=>{tx(null);try{for(let i of(e.length&&(await fetch("/api/models/disabled",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:ic,ids:e})})).ok&&await ip(),t))await ig(i,!1);t.length&&await ij()}catch(e){console.log("Error disabling all models:",e)}}})},ib=async(e=[])=>{try{for(let t of((await fetch(`/api/models/disabled?providerAlias=${encodeURIComponent(ic)}`,{method:"DELETE"})).ok&&await ip(),e))await ig(t,!0);e.length&&await ij()}catch(e){console.log("Error enabling all models:",e)}},iv=(0,l.useCallback)(async()=>{try{let e=await fetch("/api/models/alias"),t=await e.json();e.ok&&ew(t.aliases||{})}catch(e){console.log("Error fetching aliases:",e)}},[]),ij=(0,l.useCallback)(async()=>{try{let e=await fetch("/api/models/custom",{cache:"no-store"}),t=await e.json();e.ok&&eN(t.models||[])}catch(e){console.log("Error fetching custom models:",e)}},[]);(0,l.useEffect)(()=>{"kilocode"===j&&fetch("/api/providers/kilo/free-models").then(e=>e.json()).then(e=>{e.models?.length&&tc(e.models)}).catch(()=>{})},[j]);let iw=(0,l.useCallback)(async()=>{try{let[e,t,i,s]=await Promise.all([fetch("/api/providers",{cache:"no-store"}),fetch("/api/provider-nodes",{cache:"no-store"}),fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}),fetch("/api/settings",{cache:"no-store"})]),l=await e.json(),a=await t.json(),n=await i.json(),r=s.ok?await s.json():{};if(e.ok){let e=(l.connections||[]).filter(e=>e.provider===j);I(e)}i.ok&&L(n.proxyPools||[]);let o=(r.providerStrategies||{})[j]||{};e3(o.fallbackStrategy||null),e6(null!=o.stickyRoundRobinLimit?String(o.stickyRoundRobinLimit):"1"),e7(!0===o.earliestExpiryFirst),eC(!0===r.codeBuddyOAuthImport);let d=(r.providerThinking||{})[j]||{};te(d.mode||"auto");let c=el[j],u=c&&r[c]||{};if(ti({enabled:!0===u.enabled,connections:u.connections||{}}),t.ok){let e=(a.nodes||[]).find(e=>e.id===j)||null;if(!e&&il)for(let t=0;t<3;t+=1){await new Promise(e=>setTimeout(e,150));let t=await fetch("/api/provider-nodes",{cache:"no-store"});if(t.ok&&(e=((await t.json()).nodes||[]).find(e=>e.id===j)||null))break}z(e)}}catch(e){console.log("Error fetching connections:",e)}finally{_(!1)}},[j,il]),ik=(0,l.useCallback)(async()=>{await iw(),await ip()},[iw,ip]),iN=async e=>{try{let t=await fetch(`/api/provider-nodes/${j}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),i=await t.json();t.ok&&(z(i.node),await iw(),ef(!1))}catch(e){console.log("Error updating provider node:",e)}},iT=async(e,t,i=e8)=>{try{let s=await fetch("/api/settings",{cache:"no-store"}),l=(s.ok?await s.json():{}).providerStrategies||{},a={...l[j]||{}};e?a.fallbackStrategy=e:delete a.fallbackStrategy,"round-robin"===e&&""!==t?a.stickyRoundRobinLimit=Number(t)||3:delete a.stickyRoundRobinLimit,i?a.earliestExpiryFirst=!0:delete a.earliestExpiryFirst;let n={...l};0===Object.keys(a).length?delete n[j]:n[j]=a,await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerStrategies:n})})}catch(e){console.log("Error saving provider strategy:",e)}},iC=async e=>{try{let t=await fetch("/api/settings",{cache:"no-store"}),i={...(t.ok?await t.json():{}).providerThinking||{}};e&&"auto"!==e?i[j]={mode:e}:delete i[j],await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerThinking:i})})}catch(e){console.log("Error saving thinking config:",e)}},iS=async e=>{let t=el[j];if(t){ti(e);try{await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[t]:e})})}catch(e){console.log("Error saving auto-ping config:",e)}}};(0,l.useEffect)(()=>{iw(),iv(),ij(),ip()},[iw,iv,ij,ip]),(0,l.useEffect)(()=>{fetch("/api/settings",{cache:"no-store"}).then(e=>e.json()).then(e=>{eC(!0===e.codeBuddyOAuthImport),"boolean"==typeof e.codeBuddyCheckin&&e$(e.codeBuddyCheckin)}).catch(e=>console.log("Error reading settings:",e))},[]),(0,l.useEffect)(()=>{if("cursor"!==j&&!t8)return void to([]);let e=E.find(e=>!1!==e.isActive);if(!e?.id)return void to([]);let t=!1;return fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}).then(async e=>({ok:e.ok,data:await e.json()})).then(({ok:e,data:i})=>{!t&&e&&Array.isArray(i.models)&&i.models.length>0&&to(i.models)}).catch(()=>{}),()=>{t=!0}},[j,E]),(0,l.useEffect)(()=>{let e=(u.zN[j]||u.fg[j]||u.IS[j]||u.nJ[j])?.modelsFetcher;e&&P(e).then(tl)},[j]);let i$=async(e,t,i=it)=>{let s=`${i}/${e}`;try{let e=await fetch("/api/models/alias",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:s,alias:t})});if(e.ok)await iv();else{let t=await e.json();C.error(t.error||"Failed to set alias")}}catch(e){console.log("Error setting alias:",e)}},iA=async e=>{try{(await fetch(`/api/models/alias?alias=${encodeURIComponent(e)}`,{method:"DELETE"})).ok&&await iv()}catch(e){console.log("Error deleting alias:",e)}},iO=async(e,t="llm",i=ic,s={},l,a)=>{try{let n={providerAlias:i,id:e,type:t};if(void 0!==l&&(n.enabled=l),a&&(n.transport=a),s&&"object"==typeof s)for(let e of["vision","reasoning","contextWindow","maxOutput","thinkingFormat"])void 0!==s[e]&&(n[e]=s[e]);let r=await fetch("/api/models/custom",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(r.ok)await ij(),window.dispatchEvent(new CustomEvent("customModelChanged"));else{let e=await r.json();C.error(e.error||"Failed to add custom model")}}catch(e){console.log("Error adding custom model:",e)}},iE=e=>!!(N?.[ic]?.[e]||N?.[j]?.[e]),iP=async(e,t)=>{try{let i=await fetch("/api/models/caps",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:ic||j,modelId:e,...t||{}})});if(!i.ok){let e=await i.json().catch(()=>({}));C.error(e?.error||"Failed to save model settings");return}T()}catch(e){console.log("Error saving model caps:",e),C.error("Failed to save model settings")}},iD=async(e,t="llm",i=ic)=>{try{let s=new URLSearchParams({providerAlias:i,id:e,type:t});(await fetch(`/api/models/custom?${s}`,{method:"DELETE"})).ok&&(await ij(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("Error deleting custom model:",e)}},iI=async(e,t,i="llm")=>{try{(await fetch("/api/models/custom",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:ic,id:e,type:i,enabled:t})})).ok&&(await ij(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("Error toggling custom model:",e)}},iR=(e,t="llm")=>{tx({title:e?(0,p.Tl)("Enable all custom models?"):(0,p.Tl)("Disable all custom models?"),message:e?(0,p.Tl)("All custom models of this provider will be listed in /v1/models and exposed to clients."):(0,p.Tl)("All custom models of this provider will disappear from /v1/models until re-enabled. Clients will no longer see them."),onConfirm:async()=>{tx(null);try{(await fetch("/api/models/custom/bulk",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({providerAlias:ic,type:t,enabled:e})})).ok&&(await ij(),window.dispatchEvent(new CustomEvent("customModelChanged")))}catch(e){console.log("Error bulk-updating custom models:",e)}}})},iM=async()=>{if(tE)return;let e=E.find(e=>!1!==e.isActive);if(!e)return void C.warning("xiaomi-mimo"===j?(0,p.Tl)("Please add an active MiMo connection first"):(0,p.Tl)("Please add an active Qoder connection first"));tP(!0);try{let t=await fetch(`/api/providers/${e.id}/models`),i=await t.json();if(!t.ok)return void C.error(i.error||(0,p.Tl)("Failed to fetch models"));let s=i.models||[];if(0===s.length)return void C.warning((0,p.Tl)("No models returned"));let l=0,a=0;for(let e of s){let t=e.id||e.name;if(!t)continue;if("llm"!==(e.kind||"llm")){a+=1;continue}let i=t.replace(/^qoder(-cn)?\//,"");!s.some(e=>e.id===i)&&(ek.some(e=>e.providerAlias===ic&&e.id===i&&"llm"===(e.kind||e.type||"llm"))||Object.values(ej).includes(`${ic}/${i}`)||(await iO(i,"llm",ic,{},!1),l+=1))}0===l?C.warning((0,p.Tl)("All models already exist, no new models added")):C.success((0,p.Tl)("Successfully added")+` ${l} `+(0,p.Tl)("models")),a>0&&C.info((0,p.Tl)("Media models skipped (use Media Providers)")+` (${a})`)}catch(e){console.log("Error importing Qoder models:",e),C.error((0,p.Tl)("Error fetching models")+": "+e.message)}finally{tP(!1)}},iq="opencode-go"===j||"bai"===j||"cline"===j,i_=async()=>{if(ta)return;let e=E.find(e=>!1!==e.isActive);if(!e?.id)return void C.warning((0,p.Tl)("Add a connection to enable importing models."));tn(!0);try{let t=await fetch(`/api/providers/${e.id}/models`,{cache:"no-store"}),i=await t.json();if(!t.ok)throw Error(i?.error||`Request failed: ${t.status}`);let s=(Array.isArray(i.models)?i.models:[]).map(e=>{let t=e?.id||e?.name||e?.model;return t?{...e,id:String(t),name:e.name||String(t)}:null}).filter(Boolean);tl(s),C.success(`${(0,p.Tl)("Models refreshed")} (${s.length})`)}catch(e){C.error((0,p.Tl)("Failed to fetch models")+": "+e.message)}finally{tn(!1)}},iU=async()=>{if(tg||0===E.length)return;let e=Object.fromEntries(E.map(e=>[e.id,{state:"queued",error:null}]));tO.current=!1,ty(!0),tv(!1),tT(null),tS(e),tA({total:E.length,completed:0,passed:0,failed:0,stopped:!1});let t=0,i=0;try{for(let e=0;e<E.length;e+=1){if(tO.current){tA({total:E.length,completed:e,passed:t,failed:i,stopped:!0});break}let s=E[e];tT(s.id),tS(e=>({...e,[s.id]:{state:"testing",error:null}}));try{let e=t9.some(e=>e.id===tw)?tw:null,l=await fetch(`/api/providers/${s.id}/test`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e&&e!==tj?{model:e}:{})}),a=await l.json(),n=!!a.valid;n?t+=1:i+=1,tS(e=>({...e,[s.id]:{state:n?"success":"failed",error:n?null:a.error||null}}))}catch(e){i+=1,tS(t=>({...t,[s.id]:{state:"failed",error:e.message||"Test failed"}}))}tA({total:E.length,completed:e+1,passed:t,failed:i,stopped:!1}),e<E.length-1&&await new Promise(e=>setTimeout(e,1e3))}}finally{tT(null),ty(!1),tv(!1),tO.current=!1,iw()}},iz=async e=>{tx({title:"Delete Connection",message:"Delete this connection?",onConfirm:async()=>{tx(null);try{(await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok&&I(t=>t.filter(t=>t.id!==e))}catch(e){console.log("Error deleting connection:",e)}}})},iF=()=>{eB(""),eJ({}),tS({}),tA(null),iw(),B(!1)},iL=async e=>{eo("");try{let t=await fetch("/api/providers",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({provider:j,...e})}),i=null;try{i=await t.json()}catch{i=null}if(t.ok){eB(""),eJ({}),await ik(),en(!1);return}eo(i?.error||"Failed to save connection")}catch(e){console.log("Error saving connection:",e),eo("Failed to save connection")}},iK=async e=>{try{(await fetch(`/api/providers/${eb.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(eB(""),eJ({}),tS({}),tA(null),await iw(),ex(!1))}catch(e){console.log("Error updating connection:",e)}},iJ=async(e,t)=>{try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&I(i=>i.map(i=>i.id===e?{...i,isActive:t}:i))}catch(e){console.log("Error updating connection status:",e)}},iW=async(e,t)=>{let i=[...E];[i[e],i[t]]=[i[t],i[e]],I(i);try{await Promise.all([fetch(`/api/providers/${i[e].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:e})}),fetch(`/api/providers/${i[t].id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({priority:t})})])}catch(e){console.log("Error swapping priority:",e),await iw()}},iB=E.filter(e=>eY.includes(e.id)),iH=E.length>0&&eY.length===E.length;(0,l.useEffect)(()=>{eZ(e=>e.filter(e=>E.some(t=>t.id===e)))},[E]),(()=>{if(0===iB.length)return;let e=new Set(iB.map(e=>e.providerSpecificData?.proxyPoolId||"__none__"));if(1===e.size){let t=[...e][0];if("__none__"===t)return;let i=F.find(e=>e.id===t);return i?.name}})();let iV=()=>{e1||ey(!1)},iG=async e=>{e2(!0);try{let t=0;for(let{connectionId:i,proxyPoolId:s}of e)try{(await fetch(`/api/providers/${i}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:s})})).ok||(t+=1)}catch(e){console.log("Error applying proxy for",i,e),t+=1}t>0&&alert(`Updated with ${t} failed request(s).`),await iw(),ey(!1)}finally{e2(!1)}},iQ=e=>iG(E.map(t=>({connectionId:t.id,proxyPoolId:e}))),iY=(0,s.jsx)("div",{className:"flex min-w-0 flex-col divide-y divide-black/[0.03] dark:divide-white/[0.03]",children:E.map((e,t)=>{let i;return(0,s.jsxs)("div",{className:"flex min-w-0 items-stretch",children:[(0,s.jsx)("div",{className:"flex shrink-0 items-center pl-1 sm:pl-2",children:(0,s.jsx)("input",{type:"checkbox",checked:(i=e.id,eY.includes(i)),onChange:()=>{var t;return t=e.id,void eZ(e=>e.includes(t)?e.filter(e=>e!==t):[...e,t])},className:"h-4 w-4 rounded border-gray-300 text-primary focus:ring-primary"})}),(0,s.jsx)("div",{className:"flex-1 min-w-0",children:(0,s.jsx)(G,{connection:e,proxyPools:F,isOAuth:tX,isFirst:0===t,isLast:t===E.length-1,onMoveUp:()=>iW(t,t-1),onMoveDown:()=>iW(t,t+1),onToggleActive:t=>iJ(e.id,t),autoPing:el[j]&&"oauth"===e.authType?{on:!0===tt.connections[e.id],onToggle:t=>{var i;return i=e.id,void iS({...tt,connections:{...tt.connections,[i]:t}})},provider:j}:null,onUpdateProxy:async t=>{try{(await fetch(`/api/providers/${e.id}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({proxyPoolId:t||null})})).ok&&I(i=>i.map(i=>i.id===e.id?{...i,providerSpecificData:{...i.providerSpecificData,proxyPoolId:t||null}}:i))}catch(e){console.log("Error updating proxy:",e)}},onEdit:()=>{ev(e),ex(!0)},onDelete:()=>iz(e.id),oneByOneStatus:tC[e.id]||null})})]},e.id)})}),iZ=F.filter(e=>!0===e.isActive),iX=(0,s.jsx)(c.aF,{isOpen:eg,onClose:iV,title:`Apply Proxy (${E.length} connections)`,children:(0,s.jsxs)("div",{className:"flex flex-col gap-3",children:[(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsxs)("button",{onClick:()=>{let e=F.filter(e=>!0===e.isActive);return 0===e.length?void C.warning("No active proxy pools available."):iG(E.map((t,i)=>({connectionId:t.id,proxyPoolId:e[i%e.length].id})))},disabled:e1||0===iZ.length,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"sync_alt"}),(0,s.jsx)("span",{className:"text-sm text-text-main",children:"One-to-one (rotate)"})]}),(0,s.jsxs)("button",{onClick:()=>iQ(null),disabled:e1,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"link_off"}),(0,s.jsx)("span",{className:"text-sm text-text-main",children:"None (unbind all)"})]}),F.map(e=>(0,s.jsxs)("button",{onClick:()=>iQ(e.id),disabled:e1||!0!==e.isActive,className:"flex items-center gap-2 rounded-lg px-3 py-2 text-left transition-colors hover:bg-black/[0.04] dark:hover:bg-white/[0.04] disabled:cursor-not-allowed disabled:opacity-50",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-text-muted text-[18px]",children:"lan"}),(0,s.jsx)("span",{className:"truncate text-sm text-text-main",children:e.name}),!0!==e.isActive&&(0,s.jsx)("span",{className:"text-[10px] text-text-muted",children:"(inactive)"})]},e.id))]}),e1&&(0,s.jsx)("p",{className:"text-xs text-text-muted",children:"Applying..."}),(0,s.jsx)(c.$n,{onClick:iV,variant:"ghost",fullWidth:!0,disabled:e1,children:"Cancel"})]})}),i0=async e=>{if(!eH.has(e)){eV(t=>new Set(t).add(e));try{let t=await fetch("/api/models/test",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:`${ic}/${e}`})}),i=await t.json();eJ(t=>({...t,[e]:i.ok?"ok":"error"})),eB(i.ok?"":i.error||"Model not reachable")}catch{eJ(t=>({...t,[e]:"error"})),eB("Network error")}finally{setTimeout(()=>{iw()},600),eV(t=>{let i=new Set(t);return i.delete(e),i})}}};if(q)return(0,s.jsxs)("div",{className:"flex flex-col gap-8",children:[(0,s.jsx)(c.Qv,{}),(0,s.jsx)(c.Qv,{})]});if(!tY)return(0,s.jsxs)("div",{className:"text-center py-20",children:[(0,s.jsx)("p",{className:"text-text-muted",children:"Provider not found"}),(0,s.jsx)(r(),{href:"/dashboard/providers",className:"text-primary mt-4 inline-block",children:"Back to Providers"})]});let i1=()=>ii&&tY.apiType?"responses"===tY.apiType?"/providers/oai-r.png":"/providers/oai-cc.png":is?"/providers/anthropic-m.png":(0,d.HY)(tY.id);return(0,s.jsxs)("div",{className:"flex min-w-0 flex-col gap-6 px-1 sm:gap-8 sm:px-0",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)(r(),{href:"/dashboard/providers",className:"inline-flex items-center gap-1 text-sm text-text-muted hover:text-primary transition-colors mb-4",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-lg",children:"arrow_back"}),"Back to Providers"]}),(0,s.jsxs)("div",{className:"flex min-w-0 items-center gap-3 sm:gap-4",children:[(0,s.jsx)("div",{className:"flex size-12 shrink-0 items-center justify-center rounded-lg",style:{backgroundColor:`${tY.color}15`},children:eF||!i1()?(0,s.jsx)("span",{className:"text-sm font-bold",style:{color:tY.color},children:tY.textIcon||tY.id.slice(0,2).toUpperCase()}):(0,s.jsx)(o.default,{src:i1(),alt:tY.name,width:48,height:48,className:"max-h-12 max-w-12 rounded-lg object-contain",sizes:"48px",onError:()=>{(0,d.Kw)(tY.id),eL(!0)},loading:"lazy",decoding:"async"})}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3 flex-wrap",children:[(0,s.jsx)("h1",{className:"truncate text-2xl font-semibold tracking-tight sm:text-3xl",children:tY.name}),(tY.notice?.webUrl||tY.notice?.apiKeyUrl||tY.notice?.signupUrl||tY.website)&&(0,s.jsxs)("a",{href:tY.notice?.webUrl||tY.notice?.apiKeyUrl||tY.notice?.signupUrl||tY.website,target:"_blank",rel:"noopener noreferrer",className:"text-xs text-primary hover:underline inline-flex items-center gap-1",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"open_in_new"}),tY.notice?.webUrl?"Web console":tY.notice?.apiKeyUrl?"Get API Key":"Sign up / Learn more"]}),(0,s.jsx)(c.N5,{code:tY.notice?.inviteCode})]}),!t1&&(0,s.jsx)("p",{className:"text-text-muted",children:1===E.length?(0,p.Tl)("1 connection"):(0,p.Tl)("{n} connections").replace("{n}",String(E.length))})]})]})]}),tY.deprecated&&(0,s.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-yellow-500/10 border border-yellow-500/30",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px] text-yellow-500 mt-0.5 shrink-0",children:"warning"}),(0,s.jsx)("p",{className:"text-xs text-red-600 dark:text-yellow-400 leading-relaxed",children:tY.deprecationNotice})]}),tY.notice?.text&&!tY.deprecated&&(0,s.jsxs)("div",{className:"flex flex-col gap-2 rounded-lg border border-blue-500/30 bg-blue-500/10 px-3 py-2 sm:flex-row sm:items-center",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[16px] text-blue-500 shrink-0",children:"info"}),(0,s.jsx)("p",{className:"min-w-0 flex-1 text-xs leading-relaxed text-blue-600 dark:text-blue-400",children:(0,p.Tl)(tY.notice.text)}),tY.notice.apiKeyUrl&&(0,s.jsx)("a",{href:tY.notice.apiKeyUrl,target:"_blank",rel:"noopener noreferrer",className:"inline-flex justify-center rounded bg-blue-500 px-2 py-1 text-xs font-medium text-white transition-colors hover:bg-blue-600 sm:py-0.5",children:(0,p.Tl)("Get API Key →")})]}),il&&U&&(0,s.jsx)(c.Zp,{children:(0,s.jsxs)("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",children:[(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:is?"Anthropic Compatible Details":"OpenAI Compatible Details"}),(0,s.jsxs)("p",{className:"break-all text-sm text-text-muted",children:[is?"Messages API":"responses"===U.apiType?"Responses API":"Chat Completions"," \xb7 ",(U.baseUrl||"").replace(/\/$/,""),"/",is?"messages":"responses"===U.apiType?"responses":"chat/completions"]})]}),(0,s.jsxs)("div",{className:"grid grid-cols-1 gap-2 sm:flex sm:items-center",children:[(0,s.jsx)(c.$n,{size:"sm",icon:"add",onClick:()=>{eo(""),en(!0)},className:"w-full sm:w-auto",children:"Add API Key"}),(0,s.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"edit",onClick:()=>ef(!0),className:"w-full sm:w-auto",children:"Edit"}),(0,s.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"delete",onClick:async()=>{tx({title:"Delete Compatible Node",message:`Delete this ${is?"Anthropic":"OpenAI"} Compatible node?`,onConfirm:async()=>{tx(null);try{(await fetch(`/api/provider-nodes/${j}`,{method:"DELETE"})).ok&&v.push("/dashboard/providers")}catch(e){console.log("Error deleting provider node:",e)}}})},className:"w-full sm:w-auto",children:"Delete"})]})]})}),t1?(0,s.jsx)(c.gw,{providerId:j}):(0,s.jsxs)(c.Zp,{children:[(0,s.jsxs)("div",{className:"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"Connections"}),(0,s.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4",children:[E.length>0&&F.length>0&&(0,s.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"lan",onClick:()=>ey(!0),children:"Apply Proxy"}),E.length>0&&(0,s.jsxs)(s.Fragment,{children:[eY.length>0&&(0,s.jsxs)(c.$n,{size:"sm",variant:"danger",icon:"delete",onClick:()=>{let e=eY.length;0!==e&&tx({title:`Delete ${e} Connection${e>1?"s":""}`,message:`Delete ${e} connection${e>1?"s":""}? This cannot be undone.`,onConfirm:async()=>{tx(null);let e=0,t=[...eY];for(let i of t)try{(await fetch(`/api/providers/${i}`,{method:"DELETE"})).ok||(e+=1)}catch(t){console.log("Error deleting connection:",t),e+=1}I(e=>e.filter(e=>!t.includes(e.id))),eZ([]),e>0&&alert(`Deleted ${t.length-e} connection(s), ${e} failed.`)}})},children:["Delete Selected (",eY.length,")"]}),E.length>0&&t9.length>1&&(0,s.jsx)(c.l6,{value:tw,onChange:e=>tk(e.target.value),disabled:tg,options:[{value:tj,label:(0,p.Tl)("Provider default")},...t9.filter(e=>{let t=(0,m.CP)(e);return!t||"llm"===t}).map(e=>({value:e.id,label:e.name||e.id}))],selectClassName:"!py-2 !text-xs w-44"}),(0,s.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"sync",onClick:iU,disabled:tg,children:tg?(0,p.Tl)("Testing Connection One-by-One..."):(0,p.Tl)("Test Connection One-by-One")}),tg&&(0,s.jsx)(c.$n,{size:"sm",variant:"ghost",icon:"stop",onClick:()=>{tg&&(tO.current=!0,tv(!0))},disabled:tb,children:tb?(0,p.Tl)("Stopping..."):(0,p.Tl)("Stop")})]}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsx)("span",{className:"text-xs text-text-muted font-medium",title:(0,p.Tl)("Prioritize accounts with quota packages that expire soonest"),children:(0,p.Tl)("Earliest Expiry First")}),(0,s.jsx)(c.lM,{checked:e8,onChange:e=>{e7(e),iT(e5,e4,e)}})]}),(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,s.jsx)("span",{className:"text-xs text-text-muted font-medium",children:(0,p.Tl)("Round Robin")}),(0,s.jsx)(c.lM,{checked:"round-robin"===e5,onChange:e=>{let t=e?"round-robin":null,i=e?e4||"1":e4;e&&!e4&&e6("1"),e3(t),iT(t,i,e8)}}),"round-robin"===e5&&(0,s.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,s.jsx)("span",{className:"text-xs text-text-muted",children:(0,p.Tl)("Sticky:")}),(0,s.jsx)("input",{type:"number",min:1,value:e4,onChange:e=>{var t;e6(t=e.target.value),iT("round-robin",t,e8)},placeholder:"1",className:"w-14 px-2 py-1 text-xs border border-border rounded-md bg-surface focus:outline-none focus:border-primary"})]})]})]})]}),0===E.length?(0,s.jsxs)("div",{className:"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("div",{className:"inline-flex items-center justify-center w-9 h-9 rounded-full bg-primary/10 text-primary shrink-0",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:tX?"lock":"key"})}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("p",{className:"text-sm text-text-muted",children:"No connections yet"}),ia&&(0,s.jsxs)("p",{className:"text-xs text-text-muted",children:["Choose ",ir," or ",io,"."]})]})]}),(0,s.jsx)("div",{className:"flex gap-2",children:ia?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{size:"sm",icon:"lock",variant:"secondary",onClick:tq,children:ir}),(0,s.jsx)(c.$n,{size:"sm",icon:"key",onClick:t_,children:io}),t4(),t3&&tV()]}):(0,s.jsxs)(s.Fragment,{children:[!il&&"iflow"===j&&(0,s.jsx)(c.$n,{size:"sm",icon:"cookie",variant:"secondary",onClick:()=>ee(!0),children:"Cookie"}),("qoder"===j||"qoder-cn"===j)&&tQ(),"codex"===j&&(0,s.jsx)(c.$n,{size:"sm",icon:"playlist_add",variant:"secondary",onClick:()=>ec(!0),children:(0,p.Tl)("Bulk Add")}),(0,s.jsx)(c.$n,{size:"sm",icon:"add",onClick:tU,children:il?"Add API Key":"iflow"===j?"OAuth":"mimo-desktop"===j?(0,s.jsxs)("span",{className:"inline-flex items-center gap-1",children:[(0,p.Tl)("Connect with Desktop Session"),(0,s.jsx)(c.m_,{text:(0,p.Tl)("Requires sign-in to Xiaomi MiMo Desktop app first"),position:"top",children:(0,s.jsx)("span",{className:"material-symbols-outlined text-[14px] opacity-60",children:"info"})})]}):"Add Connection"}),t4()]})})]}):(0,s.jsxs)(s.Fragment,{children:[t$&&(0,s.jsx)("div",{className:"mb-4 rounded-lg border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:(0,s.jsxs)("div",{className:"flex flex-wrap items-center gap-3",children:[(0,s.jsxs)("span",{children:[(0,p.Tl)("Total:")," ",t$.total]}),(0,s.jsxs)("span",{children:[(0,p.Tl)("Completed:")," ",t$.completed]}),(0,s.jsxs)("span",{children:[(0,p.Tl)("Passed:")," ",t$.passed]}),(0,s.jsxs)("span",{children:[(0,p.Tl)("Failed:")," ",t$.failed]}),t$.stopped&&(0,s.jsx)("span",{className:"text-amber-600 dark:text-amber-400",children:(0,p.Tl)("Stopped")}),tg&&tN&&(0,s.jsxs)("span",{children:[(0,p.Tl)("Running:")," ",E.find(e=>e.id===tN)?.name||tN]})]})}),E.length>0&&(0,s.jsx)("div",{className:"mb-3 flex items-center gap-2 border-b border-black/[0.03] pb-2 dark:border-white/[0.03]",children:(0,s.jsxs)("label",{className:"flex cursor-pointer items-center gap-1.5 text-xs text-text-muted hover:text-primary",children:[(0,s.jsx)("input",{type:"checkbox",checked:iH,onChange:()=>{iH?eZ([]):eZ(E.map(e=>e.id))},className:"h-3.5 w-3.5 rounded border-gray-300 text-primary focus:ring-primary"}),"Select All"]})}),iY,!il&&(0,s.jsxs)("div",{className:"mt-4 grid grid-cols-1 gap-2 sm:flex",children:["iflow"===j&&(0,s.jsx)(c.$n,{size:"sm",icon:"cookie",variant:"secondary",onClick:()=>ee(!0),title:"Add connection using browser cookie",className:"w-full sm:w-auto",children:"Cookie"}),"codex"===j&&(0,s.jsx)(c.$n,{size:"sm",icon:"playlist_add",variant:"secondary",onClick:()=>ec(!0),title:(0,p.Tl)("Bulk import codex accounts from JSON"),className:"w-full sm:w-auto",children:(0,p.Tl)("Bulk Add")}),ia?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{size:"sm",icon:"lock",variant:"secondary",onClick:tq,className:"w-full sm:w-auto",children:ir}),(0,s.jsx)(c.$n,{size:"sm",icon:"key",onClick:t_,className:"w-full sm:w-auto",children:io}),t4("w-full sm:w-auto"),t3&&tV(),("qoder"===j||"qoder-cn"===j)&&tQ()]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{size:"sm",icon:"add",onClick:tU,className:"w-full sm:w-auto",children:"Add"}),t4("w-full sm:w-auto")]})]})]})]}),(0,s.jsxs)(c.Zp,{children:[(0,s.jsxs)("div",{className:"mb-4 flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3",children:[(0,s.jsx)("h2",{className:"text-lg font-semibold",children:"Available Models"}),iu&&(0,s.jsx)("select",{value:e9,onChange:e=>{var t;te(t=e.target.value),iC(t)},title:"Appends (level) suffix to copied model names",className:"rounded-md border border-border bg-surface px-2 py-1 text-xs focus:border-primary focus:outline-none",children:iu.map(e=>(0,s.jsx)("option",{value:e,children:`Thinking: ${e.charAt(0).toUpperCase()+e.slice(1)}`},e))})]}),!il&&(e=[...t9,...td.filter(e=>!t9.some(t=>t.id===e.id))].filter(e=>{let t=(0,m.CP)(e);return!t||"llm"===t}).map(e=>e.id).filter(e=>!tu.includes(e)),i=(t=ek.filter(e=>e?.providerAlias===ic&&"llm"===(e.kind||e.type||"llm"))).filter(e=>!1!==e.enabled).map(e=>e.id),n=t.filter(e=>!1===e.enabled).map(e=>e.id),x=tu.length>0||n.length>0,h=e.length>0||i.length>0,(0,s.jsxs)("div",{className:"flex gap-2",children:[x&&(0,s.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"restart_alt",onClick:()=>ib(n),children:"Active All"}),h&&(0,s.jsx)(c.$n,{size:"sm",variant:"secondary",icon:"block",onClick:()=>iy(e,i),children:"Disable All"})]}))]}),!!eW&&(f=R(eW),y=function(e){if(!e)return"";let t=(0,M.DY)(e);if(t&&t!==e)return t;let i=(0,p.Tl)(e);if(i&&i!==e)return i;let s=String(e).match(/^HTTP\s+\d+:\s*(?:\[(?:\d+|[A-Z0-9_]+)\]:\s*)?(.*)$/i);if(s&&s[1]){let e=s[1].trim(),t=(0,p.Tl)(e);if(t&&t!==e)return t}return(0,p.Tl)(e)}(eW),(0,s.jsxs)("p",{className:"text-xs text-red-500 mb-3 break-words",children:[y," ",f&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("a",{href:f,target:"_blank",rel:"noopener noreferrer",title:(0,p.Tl)("Recommended: open in an incognito window and sign in with the affected account"),className:"text-blue-500 underline hover:text-blue-400",children:(0,p.Tl)("Verify your account")})," ",(0,s.jsx)("button",{type:"button",onClick:()=>tI(f,"verification"),className:"text-text-muted underline hover:text-primary",children:"verification"===tD?(0,p.Tl)("Copied"):(0,p.Tl)("Copy link")}),(0,s.jsxs)("span",{className:"text-text-muted",children:[" ","(",(0,p.Tl)("Recommended: open in an incognito window and sign in with the affected account"),")"]})]})]})),(()=>{let e,t,i;if(il)return(0,s.jsx)(W,{providerStorageAlias:ic,providerDisplayAlias:im,modelAliases:ej,customModels:ek,copied:tD,onCopy:tI,onSetAlias:i$,onDeleteAlias:iA,onAddCustomModel:(e,t)=>iO(e,"llm",ic,{},t),onToggleCustomModel:iI,onDeleteCustomModel:e=>iD(e,"llm",ic),onBulkCustomModels:iR,connections:E,isAnthropic:is});let l=[...t9,...td.filter(e=>!t9.some(t=>t.id===e.id))].filter(e=>{let t=(0,m.CP)(e);return!t||"llm"===t}),a=new Set(tu),n=l.filter(e=>!a.has(e.id)),r=l.filter(e=>a.has(e.id)),o=D({customModels:ek,modelAliases:ej,providerAlias:ic,builtInModels:t9,type:"llm"}),d=o.filter(e=>!1!==e.enabled),c=o.filter(e=>!1===e.enabled);return(0,s.jsxs)("div",{className:"flex flex-wrap gap-3",children:[ie&&(0,s.jsx)("div",{className:"w-full",children:(0,s.jsx)(g,{promotion:ie})}),d.length+c.length>0&&(0,s.jsxs)("div",{className:"w-full flex items-center gap-2 text-xs text-text-muted -mb-1",children:[(0,s.jsxs)("span",{children:[(0,p.Tl)("Custom models")," (",d.length+c.length,")"]}),(0,s.jsx)("span",{children:"\xb7"}),(0,s.jsx)("button",{onClick:()=>iR(!0),className:"text-primary hover:underline",children:(0,p.Tl)("Enable all")}),(0,s.jsx)("span",{children:"\xb7"}),(0,s.jsx)("button",{onClick:()=>iR(!1),className:"text-text-muted hover:text-red-500 hover:underline",children:(0,p.Tl)("Disable all")})]}),d.map(e=>(0,s.jsx)(K,{model:{id:e.id,name:e.name},fullModel:`${im}/${e.id}`,alias:e.alias,copied:tD,onCopy:tI,onSetAlias:()=>{},onDeleteAlias:()=>{"custom"===e.source?iD(e.id,"llm",ic):iA(e.alias)},testStatus:eK[e.id],onTest:E.length>0||t1?()=>i0(e.id):void 0,isTesting:eH.has(e.id),isCustom:!0,isFree:!1,caps:w(`${j}/${e.id}`),baseCaps:k(`${j}/${e.id}`),onSaveCaps:t=>iP(e.id,t),capsPinned:iE(e.id),thinkingSuffix:id(e.id)},`${e.source}-${e.fullModel}`)),n.map(e=>{let t=`${ic}/${e.id}`,i=`${j}/${e.id}`,l=Object.entries(ej).find(([,e])=>e===t||e===i)?.[0];return(0,s.jsx)(K,{model:e,fullModel:`${im}/${e.id}`,alias:l,copied:tD,onCopy:tI,onSetAlias:t=>i$(e.id,t,ic),onDeleteAlias:()=>iA(l),testStatus:eK[e.id],onTest:E.length>0||t1?()=>i0(e.id):void 0,isTesting:eH.has(e.id),isFree:e.isFree,onDisable:()=>ix(e.id),caps:w(`${j}/${e.id}`),baseCaps:k(`${j}/${e.id}`),onSaveCaps:t=>iP(e.id,t),capsPinned:iE(e.id),thinkingSuffix:id(e.id)},e.id)}),(0,s.jsxs)("button",{onClick:()=>eQ(!0),className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-primary/40 px-3 py-2 text-xs text-primary transition-colors hover:border-primary hover:bg-primary/5 sm:w-auto",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",children:"add"}),"Add Model"]}),"cline"===j&&E.some(e=>!1!==e.isActive)&&(0,s.jsxs)("button",{onClick:i_,disabled:ta,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-blue-500/40 px-3 py-2 text-xs text-blue-600 dark:text-blue-400 transition-colors hover:border-blue-500 hover:bg-blue-500/5 sm:w-auto disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:ta?{animation:"spin 1s linear infinite"}:void 0,children:ta?"progress_activity":"download"}),ta?(0,p.Tl)("Importing..."):(0,p.Tl)("Import from /models")]}),t7&&E.some(e=>!1!==e.isActive)&&(0,s.jsxs)("button",{onClick:iM,disabled:tE,className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-blue-500/40 px-3 py-2 text-xs text-blue-600 dark:text-blue-400 transition-colors hover:border-blue-500 hover:bg-blue-500/5 sm:w-auto disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:tE?{animation:"spin 1s linear infinite"}:void 0,children:tE?"progress_activity":"download"}),tE?(0,p.Tl)("Fetching..."):(0,p.Tl)("xiaomi-mimo"===j?"Fetch MiMo Models":"Fetch Qoder Models")]}),iq&&"cline"!==j&&(0,s.jsxs)("button",{onClick:i_,disabled:ta||!E.some(e=>!1!==e.isActive),className:"flex w-full items-center justify-center gap-1.5 rounded-lg border border-dashed border-blue-500/40 px-3 py-2 text-xs text-blue-600 dark:text-blue-400 transition-colors hover:border-blue-500 hover:bg-blue-500/5 sm:w-auto disabled:opacity-50 disabled:cursor-not-allowed",children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-sm",style:ta?{animation:"spin 1s linear infinite"}:void 0,children:ta?"progress_activity":"refresh"}),ta?(0,p.Tl)("Refreshing..."):(0,p.Tl)("Refresh Official Models")]}),ts.length>0&&(e=new Set([...Object.values(ej),...o.map(e=>e.fullModel)]),t=new Set(t9.map(e=>e.id)),0===(i=ts.filter(i=>!e.has(`${ic}/${i.id}`)&&!t.has(i.id))).length?null:(0,s.jsxs)("div",{className:"w-full mt-2",children:[(0,s.jsx)("p",{className:"text-xs text-text-muted mb-2",children:"Suggested free models (≥200k context):"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:i.map(e=>(0,s.jsxs)("button",{onClick:async()=>{await iO(e.id,"llm",ic)},className:"flex items-center gap-1 px-2.5 py-1.5 rounded-lg border border-black/10 dark:border-white/10 text-xs text-text-muted hover:text-primary hover:border-primary/40 hover:bg-primary/5 transition-colors",title:`${e.name} \xb7 ${(e.contextLength/1e3).toFixed(0)}k ctx`,children:[(0,s.jsx)("span",{className:"material-symbols-outlined text-[13px]",children:"add"}),e.id.split("/").pop()]},e.id))})]})),(r.length>0||c.length>0)&&(0,s.jsxs)("div",{className:"w-full mt-2",children:[(0,s.jsxs)("p",{className:"text-xs text-text-muted mb-2",children:["Disabled models (",r.length+c.length,"):"]}),(0,s.jsxs)("div",{className:"flex flex-wrap gap-3",children:[c.map(e=>(0,s.jsx)(K,{model:{id:e.id,name:e.name},fullModel:`${im}/${e.id}`,copied:tD,onCopy:tI,testStatus:eK[e.id],onTest:E.length>0||t1?()=>i0(e.id):void 0,isTesting:eH.has(e.id),onEnable:()=>iI(e.id,!0),isCustom:!1,isFree:!1,caps:w(`${j}/${e.id}`),baseCaps:k(`${j}/${e.id}`),onSaveCaps:t=>iP(e.id,t),capsPinned:iE(e.id)},`custom-${e.fullModel}`)),r.map(e=>(0,s.jsx)(K,{model:e,fullModel:`${im}/${e.id}`,copied:tD,onCopy:tI,testStatus:eK[e.id],onTest:E.length>0||t1?()=>i0(e.id):void 0,isTesting:eH.has(e.id),onEnable:()=>ih(e.id),isFree:e.isFree,caps:w(`${j}/${e.id}`),baseCaps:k(`${j}/${e.id}`),onSaveCaps:t=>iP(e.id,t),capsPinned:iE(e.id),thinkingSuffix:id(e.id)},e.id))]})]})]})})()]}),iX,"kiro"===j?(0,s.jsx)(c.Mh,{isOpen:J,providerInfo:tY,onSuccess:iF,onClose:()=>B(!1)}):"cursor"===j?(0,s.jsx)(c.G9,{isOpen:J,onSuccess:iF,onClose:()=>B(!1)}):"zed"===j?(0,s.jsx)(c.TE,{isOpen:J,providerInfo:tY,onSuccess:iF,onClose:()=>B(!1)}):"gitlab"===j?(0,s.jsx)(c.vj,{isOpen:J,providerInfo:tY,onSuccess:iF,onClose:()=>B(!1)}):(0,s.jsx)(c.LF,{isOpen:J,provider:j,providerInfo:tY,onSuccess:iF,onClose:()=>B(!1)}),("xiaomi-mimo"===j||"mimo-desktop"===j)&&(0,s.jsx)(c.LH,{provider:j,isOpen:H,onSuccess:iF,onClose:()=>V(!1)}),"iflow"===j&&(0,s.jsx)(c.vE,{isOpen:Q,onSuccess:()=>{iw(),ee(!1)},onClose:()=>ee(!1)}),(0,s.jsx)(Y,{isOpen:ea,provider:j,providerName:tY.name,isCompatible:il,isAnthropic:is,authType:tY?.authType,authHint:tY?.authHint,website:tY?.website,proxyPools:F,error:er,existingNames:E.map(e=>e.name).filter(Boolean),onSave:iL,onBulkDone:ik,onClose:()=>{eo(""),en(!1)}}),(0,s.jsx)(c.wI,{isOpen:ep,connection:eb,proxyPools:F,onSave:iK,onClose:()=>ex(!1)}),il&&(0,s.jsx)(Z,{isOpen:eh,node:U,onSave:iN,onClose:()=>ef(!1),isAnthropic:is}),!il&&(0,s.jsx)(X,{isOpen:eG,providerAlias:ic,providerDisplayAlias:im,onSave:async(e,t,i,s)=>{await iO(e,i||"llm",ic,t||{},void 0,s),eQ(!1)},onClose:()=>eQ(!1)}),"codex"===j&&(0,s.jsx)(et,{isOpen:ed,onClose:()=>ec(!1),onSuccess:iw}),"codebuddy-cn"===j&&(0,s.jsx)(ei,{isOpen:eu,password:eU,onClose:()=>em(!1),onSuccess:iw}),(0,s.jsx)(es,{isOpen:tF,mode:tK,provider:j,providerName:tY?.name,dashboardPassword:tW,onClose:()=>{tL(!1),tB("")},onSuccess:iw}),(0,s.jsxs)(c.aF,{isOpen:eD.open,onClose:()=>eI({open:!1,action:null,value:""}),title:(0,p.Tl)("Confirm Password"),size:"sm",footer:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.$n,{variant:"ghost",onClick:()=>eI({open:!1,action:null,value:""}),children:(0,p.Tl)("Cancel")}),(0,s.jsx)(c.$n,{variant:"primary",onClick:tz,disabled:!eD.value||eR,children:eR?(0,p.Tl)("Verifying..."):(0,p.Tl)("Confirm")})]}),children:[(0,s.jsx)("p",{className:"text-text-muted mb-3 text-sm",children:(0,p.Tl)("Enter your dashboard password to export OAuth accounts (the file will be encrypted with the transfer passphrase you pick next).")}),(0,s.jsx)(c.pd,{type:"password",reveal:!0,autoFocus:!0,value:eD.value,onChange:e=>eI(t=>({...t,value:e.target.value})),onKeyDown:e=>{"Enter"===e.key&&eD.value&&tz()},placeholder:(0,p.Tl)("Password")}),eq&&(0,s.jsx)("p",{className:"text-xs text-red-500 mt-2",children:eq})]}),(0,s.jsx)(c.uo,{isOpen:th,onClose:()=>tf(!1),onConfirm:()=>{(window.localStorage.setItem(tR,"true"),tf(!1),tX)?tM():t_()},title:"Risk Notice",message:tY?.deprecationNotice,confirmText:"I Understand, Continue",cancelText:"Cancel",variant:"danger"}),(0,s.jsx)(c.uo,{isOpen:!!tp,onClose:()=>tx(null),onConfirm:tp?.onConfirm,title:tp?.title||"Confirm",message:tp?.message,variant:"danger"})]})}}},e=>{e.O(0,[3170,305,5772,1321,5497,6109,8441,3794,7358],()=>e(e.s=93578)),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3826],{26048:(e,t,r)=>{Promise.resolve().then(r.bind(r,33769)),Promise.resolve().then(r.bind(r,25086))},33769:(e,t,r)=>{"use strict";r.d(t,{default:()=>eS});var a=r(95155),n=r(12115),s=r(73321),i=r(67852),l=r(66996),o=r(14051),c=r.n(o),d=r(73006),u=r(31474),m=r(45564),x=r(67352);let p="quotaCacheData",h="quotaAutoRefresh",b=[10,20,50,100],g=[{value:"all",label:"All accounts"},{value:"active",label:"Active"},{value:"inactive",label:"Turned off"}],f=[{value:"default",label:"Default quota order"},{value:"remaining-asc",label:"% quota: low to high"},{value:"remaining-desc",label:"% quota: high to low"}];function y(e){return"qoder"===e.provider||"qoder-cn"===e.provider?e.displayName?.trim()||e.name?.trim()||e.email?.trim()||null:e.name?.trim()||e.email?.trim()||e.displayName?.trim()||null}function w(e,t){let r=t[e.id]?.quotas?.[0];return r&&"number"==typeof r.remaining?r.remaining:1/0}function v(e,t){let r=new Set(t.map(e=>e.id));return Object.fromEntries(Object.entries(e).filter(([e])=>r.has(e)))}function k({start:e,end:t,total:r}){return r>0?`Showing ${e}-${t} of ${r}`:"Showing 0 of 0"}async function j(e,t){return await e(t)}function N(e,t){return t&&0!==t?!e||e<0?100:e>=t?0:Math.round((t-e)/t*100):0}function C(e){return e&&"object"==typeof e?String(e.modelKey||e.name||"").trim():""}function S(e,t,r,a=[]){let n=null,s=t?.[e]?.hidden;if(Array.isArray(s))n=s.map(String);else if(r&&r!==e){let e=t?.[r]?.hidden;Array.isArray(e)&&(n=e.map(String))}return n?new Set(Array.isArray(a)&&a.length>0?function(e=[],t=[]){if(!Array.isArray(e)||0===e.length)return[];let r=new Set(t.map(C).filter(Boolean));return[...new Set(e.map(e=>String(e).trim()).filter(e=>r.has(e)))]}(n,a):n):new Set}let A="flex h-8 shrink-0 items-center gap-1.5 rounded-lg border border-black/10 bg-surface px-2.5 text-xs text-text transition-colors hover:bg-black/[0.04] disabled:opacity-50 dark:border-white/10 dark:hover:bg-white/[0.06]",T="border-primary/30 bg-primary/10 text-primary hover:bg-primary/15",q="material-symbols-outlined text-[16px] leading-none",$={all:"apps",active:"check_circle",inactive:"block"};function P({open:e,onClose:t,align:r="left",className:n,children:s}){return e?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("button",{type:"button",className:"fixed inset-0 z-30 cursor-default bg-transparent","aria-label":"Close",onClick:t}),(0,a.jsx)("div",{className:(0,u.cn)("absolute z-40 mt-1.5 overflow-hidden rounded-xl border border-black/10 bg-surface/95 p-1 shadow-xl shadow-black/10 backdrop-blur dark:border-white/10","right"===r?"right-0":"left-0",n),children:s})]}):null}function D({selected:e=!1,onClick:t,icon:r,children:n,hint:s,disabled:i=!1}){return(0,a.jsxs)("button",{type:"button",onClick:t,disabled:i,className:(0,u.cn)("flex w-full items-start gap-2.5 rounded-lg px-2.5 py-2 text-left text-xs transition-colors disabled:opacity-50",e?"bg-primary/10 text-primary":"text-text hover:bg-black/[0.04] dark:hover:bg-white/[0.06]"),children:[r,(0,a.jsxs)("span",{className:"min-w-0 flex-1",children:[(0,a.jsx)("span",{className:"block font-medium",children:n}),s?(0,a.jsx)("span",{className:"mt-0.5 block text-[11px] text-text-muted",children:s}):null]}),e?(0,a.jsx)("span",{className:(0,u.cn)(q,"text-[14px]"),children:"check"}):null]})}function M({provider:e,size:t=16}){return"all"===e?(0,a.jsx)("span",{className:(0,u.cn)(q,"text-text-muted"),children:"apps"}):(0,a.jsx)(i.A,{src:`/providers/${e}.png`,alt:e,size:t,className:"rounded object-contain",fallbackText:e.slice(0,2).toUpperCase()})}function E({view:e="cards",onViewChange:t,providerFilter:r,providerOptions:s,providerLabel:i,onProviderChange:l,accountFilter:o,onAccountChange:c,showCodexSort:m,quotaSortMode:x,onQuotaSortChange:p,expiringFirst:h,onToggleExpiringFirst:b,onDisableDepleted:y,onEnableAvailable:w,bulkToggling:v,autoRefresh:k,onToggleAutoRefresh:j,countdown:N,refreshingAll:C,onRefreshAll:S,accountCount:R}){let[O,F]=(0,n.useState)(!1),[_,I]=(0,n.useState)(!1),z="cards"===e;return(0,a.jsxs)("div",{className:"@container flex flex-wrap items-center gap-2",children:[t&&(0,a.jsx)("div",{role:"tablist","aria-label":(0,d.Tl)("View"),className:"flex h-8 items-center rounded-lg border border-black/10 bg-surface p-0.5 dark:border-white/10",children:[{value:"cards",icon:"grid_view",label:(0,d.Tl)("Cards")},{value:"windows",icon:"date_range",label:(0,d.Tl)("Quota windows")}].map(r=>(0,a.jsxs)("button",{type:"button",role:"tab","aria-selected":e===r.value,"aria-label":r.label,onClick:()=>t(r.value),className:(0,u.cn)("flex h-full items-center gap-1 rounded-md px-2.5 text-xs transition-colors",e===r.value?"bg-primary/10 font-medium text-primary":"text-text-muted hover:text-text"),children:[(0,a.jsx)("span",{className:(0,u.cn)(q,"text-[15px]"),children:r.icon}),(0,a.jsx)("span",{className:"hidden @min-[900px]:inline",children:r.label})]},r.value))}),(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-2 @max-[640px]:order-last @max-[640px]:w-full",children:[(0,a.jsxs)("div",{className:"relative min-w-0",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>F(e=>!e),className:(0,u.cn)(A,"all"!==r&&T),"aria-haspopup":"menu","aria-expanded":O,title:(0,d.Tl)("Filter quota providers"),children:[(0,a.jsx)(M,{provider:r}),(0,a.jsx)("span",{className:"max-w-[9rem] truncate capitalize @max-[640px]:max-w-[5rem]",children:i}),(0,a.jsx)("span",{className:(0,u.cn)(q,"text-[14px] text-text-muted"),children:"expand_more"})]}),(0,a.jsxs)(P,{open:O,onClose:()=>F(!1),className:"w-64",children:[(0,a.jsx)(D,{selected:"all"===r,icon:(0,a.jsx)(M,{provider:"all",size:18}),onClick:()=>{l("all"),F(!1)},children:(0,d.Tl)("All providers")}),(0,a.jsx)("div",{className:"my-1 h-px bg-black/5 dark:bg-white/10"}),(0,a.jsx)("div",{className:"max-h-72 overflow-y-auto",children:s.map(e=>(0,a.jsx)(D,{selected:r===e,icon:(0,a.jsx)(M,{provider:e,size:18}),onClick:()=>{l(e),F(!1)},children:(0,a.jsx)("span",{className:"capitalize",children:e})},e))})]})]}),(0,a.jsx)("div",{role:"radiogroup","aria-label":(0,d.Tl)("Filter accounts by status"),className:"flex h-8 shrink-0 items-center rounded-lg border border-black/10 bg-surface p-0.5 dark:border-white/10",children:g.map(e=>{let t=o===e.value;return(0,a.jsxs)("button",{type:"button",role:"radio","aria-checked":t,"aria-label":(0,d.Tl)(e.label),onClick:()=>c(e.value),className:(0,u.cn)("flex h-full items-center gap-1 rounded-md px-2.5 text-xs transition-colors @max-[640px]:px-2",t?"bg-primary/10 font-medium text-primary":"text-text-muted hover:text-text"),children:[(0,a.jsx)("span",{className:(0,u.cn)(q,"hidden text-[14px] @max-[640px]:inline"),children:$[e.value]}),(0,a.jsx)("span",{className:"@max-[640px]:hidden",children:(0,d.Tl)(e.label)})]},e.value)})}),z&&(0,a.jsx)("button",{type:"button",onClick:b,"aria-pressed":h,className:(0,u.cn)(A,"w-8 justify-center px-0",h&&T),title:(0,d.Tl)("Sort accounts by earliest reset or expiry time"),"aria-label":(0,d.Tl)("Resets first"),children:(0,a.jsx)("span",{className:q,children:"hourglass_top"})}),z&&m&&(0,a.jsx)("select",{value:x,onChange:e=>p(e.target.value),className:(0,u.cn)(A,"pr-1 outline-none"),"aria-label":(0,d.Tl)("Sort Codex quotas by remaining"),children:f.map(e=>(0,a.jsx)("option",{value:e.value,children:(0,d.Tl)(e.label)},e.value))})]}),(0,a.jsxs)("div",{className:"ml-auto flex items-center gap-2 @max-[640px]:order-2",children:[z&&Number.isFinite(R)&&(0,a.jsx)("span",{className:"hidden text-xs tabular-nums text-text-muted @min-[1130px]:inline",children:(0,d.Tl)("{count} accounts").replace("{count}",String(R))}),z&&(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsxs)("button",{type:"button",onClick:()=>I(e=>!e),disabled:v,className:A,"aria-haspopup":"menu","aria-expanded":_,title:(0,d.Tl)("Bulk actions"),"aria-label":(0,d.Tl)("Bulk actions"),children:[(0,a.jsx)("span",{className:q,children:v?"progress_activity":"checklist"}),(0,a.jsx)("span",{className:"hidden @min-[1060px]:inline",children:(0,d.Tl)("Bulk actions")}),(0,a.jsx)("span",{className:(0,u.cn)(q,"text-[14px] text-text-muted"),children:"expand_more"})]}),(0,a.jsxs)(P,{open:_,onClose:()=>I(!1),align:"right",className:"w-72",children:[(0,a.jsx)(D,{disabled:v,icon:(0,a.jsx)("span",{className:(0,u.cn)(q,"mt-px text-red-500"),children:"block"}),hint:(0,d.Tl)("Disable connections with depleted quota on the current page"),onClick:()=>{I(!1),y()},children:(0,d.Tl)("Turn off Empty")}),(0,a.jsx)(D,{disabled:v,icon:(0,a.jsx)("span",{className:(0,u.cn)(q,"mt-px text-emerald-500"),children:"check_circle"}),hint:(0,d.Tl)("Enable connections that still have quota on the current page"),onClick:()=>{I(!1),w()},children:(0,d.Tl)("Turn on Available")})]})]}),z&&(0,a.jsxs)("button",{type:"button",role:"switch","aria-checked":k,onClick:j,className:A,title:(0,d.Tl)(k?"Disable auto-refresh":"Enable auto-refresh"),children:[(0,a.jsx)("span",{"aria-hidden":"true",className:(0,u.cn)("relative h-4 w-7 rounded-full transition-colors",k?"bg-primary":"bg-black/15 dark:bg-white/20"),children:(0,a.jsx)("span",{className:(0,u.cn)("absolute top-0.5 size-3 rounded-full bg-white shadow transition-[left]",k?"left-[14px]":"left-0.5")})}),(0,a.jsx)("span",{className:"hidden @min-[980px]:inline",children:(0,d.Tl)("Auto-refresh")}),k&&(0,a.jsxs)("span",{className:"w-6 text-right text-[11px] tabular-nums text-text-muted",children:[N,"s"]})]}),(0,a.jsx)("button",{type:"button",onClick:S,disabled:C,className:(0,u.cn)(A,"w-8 justify-center px-0"),title:(0,d.Tl)("Refresh all"),"aria-label":(0,d.Tl)("Refresh all"),children:(0,a.jsx)("span",{className:(0,u.cn)(q,C&&"animate-spin"),children:"refresh"})})]})]})}P.propTypes={open:c().bool,onClose:c().func.isRequired,align:c().oneOf(["left","right"]),className:c().string,children:c().node},D.propTypes={selected:c().bool,onClick:c().func,icon:c().node,children:c().node,hint:c().node,disabled:c().bool},M.propTypes={provider:c().string.isRequired,size:c().number},E.propTypes={view:c().oneOf(["cards","windows"]),onViewChange:c().func,providerFilter:c().string.isRequired,providerOptions:c().arrayOf(c().string).isRequired,providerLabel:c().node,onProviderChange:c().func.isRequired,accountFilter:c().string.isRequired,onAccountChange:c().func.isRequired,showCodexSort:c().bool,quotaSortMode:c().string,onQuotaSortChange:c().func,expiringFirst:c().bool,onToggleExpiringFirst:c().func.isRequired,onDisableDepleted:c().func.isRequired,onEnableAvailable:c().func.isRequired,bulkToggling:c().bool,autoRefresh:c().bool,onToggleAutoRefresh:c().func.isRequired,countdown:c().number,refreshingAll:c().bool,onRefreshAll:c().func.isRequired,accountCount:c().number};var R=r(98500),O=r.n(R),F=r(84588),_=r(35655),I=r(75958);let z=[{re:/5h|five[\s_-]?hour|session|rolling|滚动|5\s*小时/i,ms:18e6,key:"5h"},{re:/daily|\bday\b|24h|每日|每天/i,ms:864e5,key:"day"},{re:/week|7d|周/i,ms:6048e5,key:"week"},{re:/month|月/i,ms:null,key:"month"}];function L(e,t){let r=new Date(e),a=r.getDate();r.setDate(1),r.setMonth(r.getMonth()+t);let n=new Date(r.getFullYear(),r.getMonth()+1,0).getDate();return r.setDate(Math.min(a,n)),r.getTime()}let H={week:{kinds:["day","week","month"],spanMs:12096e5,stepMs:6048e5,tickMs:864e5},hours:{kinds:["5h"],spanMs:864e5,stepMs:864e5,tickMs:36e5}},U="quotaWindowsCache",B="w-[220px] shrink-0",J=e=>String(e).padStart(2,"0"),W=e=>{let t=new Date(e);return`${J(t.getMonth()+1)}/${J(t.getDate())}`},K=e=>{let t=new Date(e);return`${J(t.getHours())}:${J(t.getMinutes())}`};function V(e){let t=(0,x.TM)(e);return t?(0,d.Tl)(t.family):(0,I.M)(e)}function Q({value:e,options:t,onChange:r}){return(0,a.jsx)("div",{className:"flex h-8 items-center rounded-lg border border-black/10 bg-surface p-0.5 dark:border-white/10",children:t.map(t=>(0,a.jsx)("button",{type:"button",onClick:()=>r(t.value),"aria-pressed":e===t.value,className:(0,u.cn)("h-full rounded-md px-2.5 text-xs transition-colors",e===t.value?"bg-primary/10 font-medium text-primary":"text-text-muted hover:text-text"),children:t.label},t.value))})}function G({win:e,lane:t,range:r,showLabel:n,view:s}){let i=e=>"hours"===s?K(e):`${W(e)} ${K(e)}`,l=r.end-r.start,o=100*Math.max(0,(e.start-r.start)/l),c=Math.max(.5,100*Math.min(1,(e.end-r.start)/l)-o),m=e.start<r.start,x=e.end>r.end,p=(0,u.cn)(!m&&"rounded-l-[4px]",!x&&"rounded-r-[4px]"),h={left:`${o}%`,width:`${c}%`};if(!e.current)return(0,a.jsx)("div",{className:(0,u.cn)("absolute inset-y-0 overflow-hidden border border-dashed border-black/15 dark:border-white/15",p),style:h,title:`${V(t.name)} \xb7 ${W(e.start)} ${K(e.start)} – ${W(e.end)} ${K(e.end)}`,children:(0,a.jsx)("span",{className:"absolute inset-y-0 left-1.5 right-1.5 flex items-center truncate text-[10px] tabular-nums text-text-muted/70",children:i(e.start)})});let b=Math.round(t.pct),g=(0,d.Tl)("resets {date}").replace("{date}",i(e.end)),f=`${n?`${V(t.name)} \xb7 `:""}${b}% \xb7 ${g}`;return(0,a.jsxs)("div",{className:(0,u.cn)("absolute inset-y-0 overflow-hidden bg-black/[0.06] dark:bg-white/[0.08]",p),style:h,title:f,children:[(0,a.jsx)("div",{className:"absolute inset-y-0 left-0",style:{width:`${b}%`,opacity:.85,...(0,_.jE)(b)}}),(0,a.jsx)("span",{className:"absolute inset-y-0 left-1.5 right-1.5 flex items-center truncate text-[10px] font-medium tabular-nums text-text",children:f})]})}function Y({providerFilter:e="all",accountFilter:t="all",refreshKey:r=0,showTrackerLink:s=!0}){let[l,o]=(0,n.useState)(null),[c,m]=(0,n.useState)(null),[p,h]=(0,n.useState)(!1),[b,g]=(0,n.useState)("week"),[f,y]=(0,n.useState)(0),[w,v]=(0,n.useState)(null);(0,n.useEffect)(()=>{let e=!1,t=0===r?function(){try{let e=window.localStorage.getItem(U);return e?JSON.parse(e):null}catch{return null}}():null;(async()=>{t?.connections&&o(t.connections),v(Date.now()),h(!0);try{let t=await fetch(`/api/usage/quotas${r>0?"?force=1":""}`,{cache:"no-store"}),n=await t.json();if(!t.ok)throw Error(n?.error||`HTTP ${t.status}`);if(e)return;o(n.connections||[]),m(null);var a=n.connections||[];try{window.localStorage.setItem(U,JSON.stringify({connections:a,at:Date.now()}))}catch{}}catch(t){e||m(t.message||"Failed to load quotas")}finally{e||h(!1)}})();let a=setInterval(()=>v(Date.now()),6e4);return()=>{e=!0,clearInterval(a)}},[r]);let k=(0,n.useMemo)(()=>(l||[]).filter(r=>("all"===e||r.provider===e)&&("active"!==t||!1!==r.isActive)&&("inactive"!==t||!1===r.isActive)),[l,e,t]),j=(0,n.useMemo)(()=>w?function(e,t,r=0){let a,n,s,i=H[e]||H.week,l=("hours"===e?((a=new Date(t-432e5)).setMinutes(0,0,0),a.getTime()):((n=new Date(t)).setHours(0,0,0,0),s=(n.getDay()+6)%7,n.setDate(n.getDate()-s),n.getTime()))+r*i.stepMs;return{start:l,end:l+i.spanMs}}(b,w,f):null,[b,w,f]),N=(0,n.useMemo)(()=>j&&l?function(e=[],{view:t="week",rangeStart:r,rangeEnd:a}={}){let n=(H[t]||H.week).kinds,s=[];for(let t of e||[]){let e=(Array.isArray(t?.quotas)?t.quotas:[]).map(e=>({q:e,kind:function(e){if(e?.giftPack===!0||e?.detailOnly===!0||!(0,x.OG)(e)||!e?.resetAt)return null;let t=String(e?.name||""),r=(0,x.TM)(t)?.window||t;for(let e of z)if(e.re.test(r))return e.key;return null}(e)})).filter(e=>e.kind);if(0===e.length)continue;let i=e.map(({q:e,kind:t})=>({name:e.name,kind:t,pct:Math.round((0,x.pR)(e))})),l=e.filter(({kind:e})=>n.includes(e)).map(({q:e,kind:t})=>({name:e.name,kind:t,pct:(0,x.pR)(e),resetAt:e.resetAt,windows:function(e,t,r,a,n=60){let s=[],i=new Date(e?.resetAt).getTime(),l=function(e,t){let r=new Date(t).getTime();if("month"===e)return L(r,-1);let a=z.find(t=>t.key===e);return a?.ms?r-a.ms:NaN}(t,i);if(!Number.isFinite(i)||!Number.isFinite(l))return s;for(let e=0;e<=n&&l<a;e+=1){i>r&&s.push({start:l,end:i,current:0===e});let a=function(e,t){let r=new Date(t).getTime();if("month"===e)return L(r,1);let a=z.find(t=>t.key===e);return a?.ms?r+a.ms:NaN}(t,i);if(!Number.isFinite(a))break;l=i,i=a}return s}(e,t,r,a)})).filter(e=>e.windows.length>0);s.push({id:t.id,provider:t.provider,label:t.name||t.email||t.providerName||t.provider,providerName:t.providerName||t.provider,isActive:!1!==t.isActive,chips:i,lanes:l})}return s}(k,{view:b,rangeStart:j.start,rangeEnd:j.end}):[],[l,k,b,j]),C=(0,n.useMemo)(()=>{if(!j)return[];let e=H[b].tickMs,t=[];for(let r=j.start;r<j.end;r+=e)t.push(r);return t},[j,b]),S=j&&w>=j.start&&w<j.end?(w-j.start)/(j.end-j.start)*100:null,A=w?new Date(new Date(w).setHours(0,0,0,0)).getTime():null,T=j?"hours"===b?`${W(j.start)} ${K(j.start)} – ${W(j.end)} ${K(j.end)}`:`${W(j.start)} – ${W(j.end-864e5)} \xb7 ${(0,d.Tl)("two weeks")}`:"";return(0,a.jsxs)(F.default,{children:[(0,a.jsxs)("div",{className:"mb-4 flex flex-wrap items-center gap-3",children:[(0,a.jsxs)("div",{className:"min-w-0 flex-1",children:[(0,a.jsxs)("h2",{className:"flex items-center gap-2 text-lg font-semibold",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[20px] text-primary",children:"date_range"}),(0,d.Tl)("Quota windows"),p&&(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[14px] text-text-muted","aria-label":(0,d.Tl)("Refreshing"),children:"progress_activity"})]}),(0,a.jsxs)("p",{className:"mt-0.5 text-xs text-text-muted tabular-nums",children:[T,0===f&&T?` \xb7 ${(0,d.Tl)("current")}`:""]})]}),(0,a.jsxs)("div",{className:"flex h-8 items-center rounded-lg border border-black/10 bg-surface dark:border-white/10",children:[(0,a.jsx)("button",{type:"button",onClick:()=>y(e=>e-1),className:"flex h-full w-8 items-center justify-center text-text-muted hover:text-text","aria-label":(0,d.Tl)("Previous"),children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_left"})}),(0,a.jsx)("button",{type:"button",onClick:()=>y(0),disabled:0===f,className:"h-full border-x border-black/10 px-2.5 text-xs text-text disabled:text-text-muted dark:border-white/10",children:(0,d.Tl)("hours"===b?"current":"Today")}),(0,a.jsx)("button",{type:"button",onClick:()=>y(e=>e+1),className:"flex h-full w-8 items-center justify-center text-text-muted hover:text-text","aria-label":(0,d.Tl)("Next"),children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_right"})})]}),(0,a.jsx)(Q,{value:b,onChange:e=>{g(e),y(0)},options:[{value:"week",label:(0,d.Tl)("By week")},{value:"hours",label:(0,d.Tl)("5 hours")}]}),s&&(0,a.jsxs)(O(),{href:"/dashboard/quota",className:"flex h-8 items-center gap-1 rounded-lg px-2 text-xs text-text-muted hover:bg-black/[0.04] hover:text-text dark:hover:bg-white/[0.06]",children:[(0,d.Tl)("Quota Tracker"),(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"arrow_forward"})]})]}),null===l?(0,a.jsx)("div",{className:"py-10 text-center text-xs text-text-muted",children:(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[22px]",children:"progress_activity"})}):0===N.length?(0,a.jsx)("div",{className:"py-8 text-center text-xs text-text-muted",children:c?`${(0,d.Tl)("Failed to load quotas")} \xb7 ${c}`:(0,d.Tl)("No accounts with recurring quota windows")}):(0,a.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,a.jsxs)("div",{className:"min-w-[760px]",children:[(0,a.jsxs)("div",{className:"flex border-b border-black/10 bg-black/[0.015] dark:border-white/10 dark:bg-white/[0.02]",children:[(0,a.jsx)("div",{className:(0,u.cn)(B,"flex items-end px-3 pb-1.5 text-[11px] text-text-muted"),children:(0,d.Tl)("Account")}),(0,a.jsx)("div",{className:"relative flex flex-1",children:C.map((e,t)=>{let r="week"===b&&e===A,n="hours"!==b||new Date(e).getHours()%2==0;return(0,a.jsx)("div",{className:(0,u.cn)("flex-1 border-l border-black/5 px-0.5 py-1.5 text-center dark:border-white/5",0===t&&"border-l-0",r&&"bg-primary/[0.06]"),children:"hours"===b?(0,a.jsx)("div",{className:"text-[10px] tabular-nums text-text-muted",children:n?`${J(new Date(e).getHours())}`:""}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:(0,u.cn)("text-[10px]",r?"text-primary":"text-text-muted"),children:function(e){try{return new Date(e).toLocaleDateString((0,d.kk)()||void 0,{weekday:"short"})}catch{return""}}(e)}),(0,a.jsx)("div",{className:(0,u.cn)("text-[11px] font-medium tabular-nums",r?"text-primary":"text-text"),children:W(e)})]})},e)})})]}),N.map(e=>(0,a.jsxs)("div",{className:(0,u.cn)("flex border-b border-black/5 last:border-b-0 dark:border-white/5",!e.isActive&&"opacity-55"),children:[(0,a.jsxs)("div",{className:(0,u.cn)(B,"space-y-1 px-3 py-2.5"),children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center gap-1.5",children:[(0,a.jsx)(i.A,{src:`/providers/${e.provider}.png`,alt:e.provider,size:16,className:"shrink-0 rounded object-contain",fallbackText:String(e.provider||"?").slice(0,2).toUpperCase()}),(0,a.jsx)("span",{className:"truncate text-xs font-medium text-text",title:`${e.providerName} \xb7 ${e.label}`,children:e.label})]}),(0,a.jsx)("div",{className:"flex flex-wrap gap-1",children:e.chips.map(e=>(0,a.jsxs)("span",{className:"inline-flex max-w-full items-center gap-1 rounded-[3px] bg-black/[0.04] px-1.5 py-px text-[10px] text-text-muted dark:bg-white/[0.06]",title:(0,I.M)(e.name),children:[(0,a.jsx)("span",{className:"size-1.5 shrink-0 rounded-full",style:{background:(0,_.dI)(e.pct)}}),(0,a.jsx)("span",{className:"truncate",children:(0,I.M)(e.name)}),(0,a.jsxs)("b",{className:"font-semibold tabular-nums text-text",children:[e.pct,"%"]})]},e.name))})]}),(0,a.jsxs)("div",{className:"relative flex-1 py-2.5",children:[(0,a.jsx)("div",{className:"pointer-events-none absolute inset-0 flex",children:C.map((e,t)=>(0,a.jsx)("div",{className:(0,u.cn)("flex-1 border-l border-black/[0.04] dark:border-white/[0.05]",0===t&&"border-l-0","week"===b&&e===A&&"bg-primary/[0.04]")},e))}),null!==S&&(0,a.jsx)("div",{className:"pointer-events-none absolute inset-y-0 w-px bg-primary/60",style:{left:`${S}%`}}),(0,a.jsx)("div",{className:"relative space-y-1",children:0===e.lanes.length?(0,a.jsx)("div",{className:"flex h-[18px] items-center px-2 text-[10px] text-text-muted/70",children:(0,d.Tl)("hours"===b?"No 5-hour window":"No daily / weekly / monthly window")}):e.lanes.map(t=>(0,a.jsx)("div",{className:"relative h-[18px]",children:t.windows.map(r=>(0,a.jsx)(G,{win:r,lane:t,range:j,view:b,showLabel:e.lanes.length>1},`${t.name}-${r.start}`))},t.name))})]})]},e.id))]})})]})}Q.propTypes={value:c().string.isRequired,options:c().arrayOf(c().shape({value:c().string,label:c().node})).isRequired,onChange:c().func.isRequired},G.propTypes={win:c().object.isRequired,lane:c().object.isRequired,range:c().object.isRequired,showLabel:c().bool,view:c().string},Y.propTypes={providerFilter:c().string,accountFilter:c().string,refreshKey:c().number,showTrackerLink:c().bool};var Z=r(36109);let X="quotaConnectionsCache";function ee(e){try{let t=window.localStorage.getItem(e);return t?JSON.parse(t):null}catch{return null}}function et(e,t){try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}function er({page:e,pageSize:t,accountFilter:r,providerFilter:a}){return[e,t,r,a].join("|")}function ea(e){if(!e?.providerSpecificData?.connectionProxyUrl)return e;let t={...e.providerSpecificData};return delete t.connectionProxyUrl,{...e,providerSpecificData:t}}function en(e){let t=e?.cachedAt?new Date(e.cachedAt).getTime():NaN;return Number.isFinite(t)?t:0}function es(e){let t=ee(p)||{},r={};for(let a of e||[])t[a.id]&&(r[a.id]=t[a.id]);return r}function ei(e,t,r=Date.now()){let a=ee(p)||{};for(let[n,s]of(a[e]={...function(e){if(!e||"object"!=typeof e)return e;let{raw:t,...r}=e;return t?.resetCredits?{...r,raw:{resetCredits:t.resetCredits}}:r}(t),cachedAt:new Date(r).toISOString()},Object.entries(a)))r-en(s)>6048e5&&delete a[n];et(p,a)}function el(e){return Number(Number(e||0).toFixed(2)).toLocaleString("en-US")}function eo({quota:e,now:t,onHide:r}){let n=(0,x.Cd)(e,e.pct),s=(0,x.OG)(e),i=(0,x.D2)(e,t),l=!!e.resetAt&&2099>=new Date(e.resetAt).getFullYear(),o=l?function(e){if(!e)return"-";try{let t="string"==typeof e?new Date(e):e;if(Number.isNaN(t?.getTime?.())||t.getFullYear()>2099||t-new Date<=0)return"-";return(0,x.TV)(t)||"-"}catch(e){return"-"}}(e.resetAt):"-",c=l?[function(e){let t=new Date(e);if(Number.isNaN(t.getTime())||t.getFullYear()>2099)return"";let r=e=>String(e).padStart(2,"0");return`${t.getFullYear()}-${r(t.getMonth()+1)}-${r(t.getDate())} ${r(t.getHours())}:${r(t.getMinutes())}`}(e.resetAt),"-"!==o?o:null].filter(Boolean).join(" \xb7 "):void 0,u=e.percentScale?`${e.pct}%`:e.unlimited?"∞":`${el(Math.max(0,e.total-e.used))} / ${el(e.total)}`;return(0,a.jsxs)("div",{className:"group min-w-0 space-y-1 py-1",children:[(0,a.jsxs)("div",{className:"flex min-w-0 items-center justify-between gap-2 text-[11px] tabular-nums",children:[(0,a.jsxs)("span",{className:"flex min-w-0 items-center gap-1.5",children:[(0,a.jsx)("span",{className:"size-[8px] shrink-0 rounded-[2px]",style:{background:(0,_.dI)(e.pct)},"aria-hidden":"true"}),(0,a.jsx)("span",{className:"truncate text-text",children:(0,I.M)(e.name)})]}),(0,a.jsxs)("span",{className:"flex shrink-0 items-center gap-2",children:[(0,a.jsx)("span",{className:_.pM[n],title:e.percentScale||e.unlimited?void 0:`${(0,d.Tl)("Used")} ${el(e.used)}`,children:u}),l?(0,a.jsx)("span",{className:"text-text-muted",title:c,children:(0,_.h7)(s,e.resetAt,{expired:i})}):null,r?(0,a.jsx)("button",{type:"button",onClick:()=>r(e),className:"-my-1 inline-flex size-5 items-center justify-center rounded text-text-muted opacity-30 transition hover:bg-black/5 hover:text-text group-hover:opacity-100 focus-visible:opacity-100 dark:hover:bg-white/5",title:(0,d.Tl)("Hide this quota row"),"aria-label":`${(0,d.Tl)("Hide this quota row")}: ${(0,I.M)(e.name)}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:"visibility_off"})}):null]})]}),(0,a.jsx)(_.Ay,{pct:e.pct})]})}function ec({rows:e,now:t,onHide:r,limit:n,onMore:s}){let i=e.length-n;return(0,a.jsxs)(a.Fragment,{children:[e.slice(0,n).map(e=>(0,a.jsx)(eo,{quota:e,now:t,onHide:r},`${e.name}-${e.index}`)),i>0&&(0,a.jsx)("button",{type:"button",onClick:s,className:"w-full rounded-md py-1 text-[11px] text-text-muted transition-colors hover:bg-black/5 hover:text-text dark:hover:bg-white/5",children:(0,d.Tl)("Show {count} more").replace("{count}",String(Math.min(10,i)))})]})}function ed({quotas:e=[],sortMode:t="default",showSortLabel:r=!1,onHideQuota:s=null}){let[i,l]=(0,n.useState)(10),[o,c]=(0,n.useState)(10),[m,p]=(0,n.useState)(!1),[h,b]=(0,n.useState)(()=>Date.now());(0,n.useEffect)(()=>{b(Date.now())},[e]);let{live:g,history:f}=(0,n.useMemo)(()=>{var r;let a=(r=e.map((e,t)=>({...e,index:t,used:Number(e.used||0),total:Number(e.total||0),pct:e?.remainingPercentage!==void 0?Math.round(e.remainingPercentage):e?.remaining!==void 0&&(e?.total===100||e?.total===void 0)?Math.max(0,Math.round(e.remaining)):N(e?.used,e?.total)})),"remaining-asc"===t?[...r].sort((e,t)=>e.pct-t.pct||e.name.localeCompare(t.name)):"remaining-desc"===t?[...r].sort((e,t)=>t.pct-e.pct||e.name.localeCompare(t.name)):r);return{live:a.filter(e=>!(0,x.UY)(e,h)),history:a.filter(e=>(0,x.UY)(e,h))}},[e,t,h]);if(!e||0===e.length)return null;let y="function"==typeof s?s:null;return(0,a.jsxs)("div",{className:"space-y-0.5",children:[r&&(0,a.jsx)("div",{className:"pb-1 text-[10px] text-text-muted",children:(0,d.Tl)("Sorted by account remaining")}),(0,a.jsx)(ec,{rows:g,now:h,onHide:y,limit:i,onMore:()=>l(e=>e+10)}),f.length>0&&(0,a.jsxs)("div",{className:(0,u.cn)(g.length>0&&"mt-1 border-t border-black/5 pt-1 dark:border-white/5"),children:[(0,a.jsxs)("button",{type:"button",onClick:()=>p(e=>!e),className:"flex w-full items-center gap-1 rounded-md py-1 text-[11px] text-text-muted transition-colors hover:bg-black/5 hover:text-text dark:hover:bg-white/5","aria-expanded":m,children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:m?"expand_less":"expand_more"}),(0,d.Tl)("Used up / expired"),(0,a.jsxs)("span",{className:"tabular-nums opacity-60",children:["(",f.length,")"]})]}),m&&(0,a.jsx)("div",{className:"opacity-60",children:(0,a.jsx)(ec,{rows:f,now:h,onHide:y,limit:o,onMore:()=>c(e=>e+10)})})]})]})}eo.propTypes={quota:c().object.isRequired,now:c().number.isRequired,onHide:c().func},ec.propTypes={rows:c().array.isRequired,now:c().number.isRequired,onHide:c().func,limit:c().number.isRequired,onMore:c().func.isRequired},ed.propTypes={quotas:c().array,sortMode:c().string,showSortLabel:c().bool,onHideQuota:c().func};var eu=r(98542),em=r(97677),ex=r(35497),ep=r(88105),eh=r(11059);let eb={"builder-id":"AWS Builder ID",idc:"IAM Identity Center",google:"Google",github:"GitHub",imported:"Imported Token",api_key:"API Key"},eg={claude:"claudeAutoPing",codex:"codexAutoPing"},ef={claude:"When your 5h quota runs out, auto-sends a request the moment it resets so a new window starts right away.",codex:"Auto-starts the next 5h Codex window after reset by sending a tiny gpt-5.5 request. Consumes a small amount of quota."};function ey(e){let t=y(e);if(e.name?.trim()&&e.email?.trim()&&e.name.trim()!==e.email.trim()){let r=e.email.trim();if(r!==t)return r}if(e.name?.trim()&&e.displayName?.trim()&&e.name.trim()!==e.displayName.trim()){let r=e.displayName.trim();if(r!==t)return r}return null}function ew(e){let t=e.providerSpecificData?.region;if(t)return t;let r=e.providerSpecificData?.profileArn;return("string"==typeof r?r.split(":")[3]:"")||""}let ev={five_hour:"session",seven_day:"weekly",seven_day_overage_included:"weekly",seven_day_opus:"Opus weekly",seven_day_sonnet:"Sonnet weekly"};function ek(e){let t=[...new Set((e||[]).map(e=>ev[e]).filter(Boolean))];return t.length?`${t.join(" + ")} limits`:"limits"}function ej(e){if(!e)return"N/A";let t=new Date(e);return Number.isFinite(t.getTime())?t.toLocaleString(void 0,{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit"}):"N/A"}function eN(e){if(!e)return"N/A";let t=new Date(e).getTime()-Date.now();if(!Number.isFinite(t))return"N/A";if(t<=0)return"Expired";let r=Math.ceil(t/36e5),a=Math.floor(r/24),n=r%24;return a>0?`${a}d ${n}h`:`${n}h`}let eC={"qoder-cn":"Qoder CN",qoder:"Qoder","codebuddy-cn":"CodeBuddy CN","codebuddy-intl":"CodeBuddy Intl","minimax-cn":"MiniMax CN","glm-cn":"GLM CN","kimi-cn":"Kimi CN"};function eS(){let{copied:e,copy:t}=(0,eh.C)(),[r,o]=(0,n.useState)([]),[c,u]=(0,n.useState)({}),[g,f]=(0,n.useState)({}),[A,T]=(0,n.useState)({}),[q,$]=(0,n.useState)(!0),[P,D]=(0,n.useState)({claude:{},codex:{}}),[M,R]=(0,n.useState)(null),[O,_]=(0,n.useState)(!1),[z,L]=(0,n.useState)(!1),[H,U]=(0,n.useState)(60),[B,J]=(0,n.useState)(!0),[W,K]=(0,n.useState)(null),[V,Q]=(0,n.useState)(null),[G,el]=(0,n.useState)(null),[eo,ec]=(0,n.useState)(null),[ev,eS]=(0,n.useState)(null),[eA,eT]=(0,n.useState)(!1),[eq,e$]=(0,n.useState)(null),[eP,eD]=(0,n.useState)([]),eM=(0,s.useSearchParams)(),eE=(0,s.useRouter)(),eR=(0,s.usePathname)(),[eO,eF]=(0,n.useState)(()=>{var e;let t=window.localStorage.getItem("quotaProviderFilter");return e=eM?.get("provider"),e||t||"all"}),e_=(0,n.useCallback)(e=>{var t;let r,a;eF(e),eE.replace((t=eM?.toString()||"",r=new URLSearchParams(t||""),e&&"all"!==e?r.set("provider",e):r.delete("provider"),(a=r.toString())?`${eR}?${a}`:eR),{scroll:!1})},[eE,eR,eM]),[eI,ez]=(0,n.useState)([]),[eL,eH]=(0,n.useState)(()=>window.localStorage.getItem("quotaAccountFilter")||"all");(0,n.useEffect)(()=>{window.localStorage.setItem("quotaProviderFilter",eO)},[eO]),(0,n.useEffect)(()=>{window.localStorage.setItem("quotaAccountFilter",eL)},[eL]);let[eU,eB]=(0,n.useState)("default"),[eJ,eW]=(0,n.useState)("cards"),[eK,eV]=(0,n.useState)(0),[eQ,eG]=(0,n.useState)({}),[eY,eZ]=(0,n.useState)(!1),[eX]=(0,n.useState)(()=>"1"===window.localStorage.getItem("quotaHideNoQuota")),[e0]=(0,n.useState)(()=>"1"===window.localStorage.getItem("quotaNestedCycle")),[e1,e5]=(0,n.useState)(!1),[e2,e3]=(0,n.useState)(()=>new Set),e4=(0,n.useCallback)(e=>{e3(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r})},[]),[e6,e8]=(0,n.useState)(1),[e9,e7]=(0,n.useState)(20),[te,tt]=(0,n.useState)(String(20)),[tr,ta]=(0,n.useState)({page:1,pageSize:20,total:0,totalPages:1}),[tn,ts]=(0,n.useState)({eligibleConnections:0,providerFilteredConnections:0}),ti=(0,n.useRef)(null),tl=(0,n.useRef)(null),to=(0,n.useRef)(0),tc=(0,n.useCallback)(async(e=e6)=>{try{var t,r;let a=new URLSearchParams({page:String(e),pageSize:String(e9),accountStatus:eL,sort:"priority"});"all"!==eO&&a.set("provider",eO);let n=await fetch(`/api/providers/client?${a.toString()}`);if(!n.ok)throw Error("Failed to fetch connections");let s=await n.json(),i=s.connections||[],l=(t=s.pagination,t||{page:1,pageSize:e9,total:0,totalPages:1}),c=function(e,t=0){return e||{eligibleConnections:t,providerFilteredConnections:t}}(s.totals,i.length);return o(i),ez(s.providerOptions||[]),ta(l),ts(c),e8((r=s.pagination,r?.page||e)),!function(e,{connections:t,pagination:r,totals:a,providerOptions:n}){et(X,{key:e,connections:(t||[]).map(ea),pagination:r,totals:a,providerOptions:n,cachedAt:Date.now()})}(er({page:e,pageSize:e9,accountFilter:eL,providerFilter:eO}),{connections:i,pagination:l,totals:c,providerOptions:s.providerOptions}),i}catch(e){return console.error("Error fetching connections:",e),null}},[eL,eY,e6,e9,eO]),td=(0,n.useCallback)(async(e,t,{force:r=!1}={})=>{f(t=>({...t,[e]:!0})),T(t=>({...t,[e]:null}));try{console.log(`[ProviderLimits] Fetching quota for ${t} (${e})`);let a=`/api/usage/${e}${r?"?force=1":""}`,n=await fetch(a);if(!n.ok){let r=(await n.json().catch(()=>({}))).error||n.statusText;if(404===n.status)return void console.warn(`[ProviderLimits] Connection not found for ${t}, skipping`);if(401===n.status){console.warn(`[ProviderLimits] Auth error for ${t}:`,r);let a={quotas:[],message:r,cachedAt:new Date().toISOString()};u(t=>({...t,[e]:a})),ei(e,a);return}throw Error(`HTTP ${n.status}: ${r}`)}let s=await n.json();console.log(`[ProviderLimits] Got quota for ${t}:`,s);let i={quotas:function(e,t){if(!t||"object"!=typeof t)return[];let r=[];try{switch(e.toLowerCase()){case"github":default:t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"antigravity":if(t.quotas){let e=Object.entries(t.quotas),a=e.filter(([e])=>e.startsWith("gemini-")&&!e.includes("image")),n=e.filter(([e])=>e.startsWith("claude-")||e.startsWith("gpt-")),s=e.filter(([e])=>e.includes("image")),i=e.filter(([e])=>!e.startsWith("gemini-")&&!e.startsWith("claude-")&&!e.startsWith("gpt-")&&!e.includes("image"));if(a.length>0){let e=a.reduce((e,t)=>(t[1].remainingPercentage??100)<(e[1].remainingPercentage??100)?t:e)[1];r.push({name:"Gemini (Flash / Pro)",modelKey:"gemini",used:e.used||0,total:e.total||0,resetAt:e.resetAt||null,remainingPercentage:e.remainingPercentage,percentScale:!0})}if(n.length>0){let e=n.reduce((e,t)=>(t[1].remainingPercentage??100)<(e[1].remainingPercentage??100)?t:e)[1];r.push({name:"Claude (Sonnet / Opus / GPT)",modelKey:"claude",used:e.used||0,total:e.total||0,resetAt:e.resetAt||null,remainingPercentage:e.remainingPercentage,percentScale:!0})}s.forEach(([e,t])=>{r.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage,percentScale:!0})}),i.forEach(([e,t])=>{r.push({name:t.displayName||e,modelKey:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage,percentScale:!0})})}break;case"codex":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,remaining:t.remaining,resetAt:t.resetAt||null})});break;case"kiro":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null})});break;case"qoder":case"qoder-cn":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{let a=Number(t?.total)||0;if("user"===e||("organization"===e||"addOn"===e)&&0===a)return;let n=t.resetAt&&2099>=new Date(t.resetAt).getFullYear()?t.resetAt:null;r.push({name:"addOn"===e?"Resource Package":"organization"===e?"Organization":e,used:t.used||0,total:a,unit:t.unit,resetAt:"addOn"===e?null:n,unlimited:!0===t.unlimited,aggregate:!0,..."addOn"===e&&Array.isArray(t.packs)&&t.packs.length>0?{summarizesDetail:!0}:{}}),"addOn"===e&&Array.isArray(t.packs)&&t.packs.forEach((e,a)=>{r.push({name:e.name||(e.unitemized?"Bonus Pack (unitemized)":`Bonus Pack ${a+1}`),used:e.used||0,total:e.total||0,unit:t.unit,resetAt:e.expiresAt&&2099>=new Date(e.expiresAt).getFullYear()?e.expiresAt:null,unlimited:!1,recurring:!1,detailOnly:!0})})});break;case"claude":t.message?r.push({name:"error",used:0,total:0,resetAt:null,message:t.message}):t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,remaining:void 0!==t.remaining?t.remaining:Math.max(0,(t.total||100)-(t.used||0)),remainingPercentage:void 0!==t.remainingPercentage?t.remainingPercentage:N(t.used,t.total),resetAt:t.resetAt||null})});break;case"vercel-ai-gateway":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"codebuddy-cn":case"codebuddy-intl":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,recurring:!1!==t.recurring,displayRemaining:!0,..."Monthly"===e?{giftPack:!0}:{}})});break;case"grok-cli":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"kimi":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"deepseek":case"stepfun":case"stepfun-cn":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage,displayRemaining:t.displayRemaining})});break;case"ollama":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,resetAt:t.resetAt||null,remainingPercentage:t.remainingPercentage})});break;case"commandcode":t.quotas&&Object.entries(t.quotas).forEach(([e,t])=>{r.push({name:e,used:t.used||0,total:t.total||0,remaining:void 0!==t.remaining?t.remaining:Math.max(0,(t.total||0)-(t.used||0)),remainingPercentage:void 0!==t.remainingPercentage?t.remainingPercentage:N(t.used,t.total),resetAt:t.resetAt||null,recurring:!0===t.recurring,displayRemaining:!0})})}}catch(t){return console.error(`Error parsing quota data for ${e}:`,t),[]}if(e?.toLowerCase()==="claude"){let e={"session (5h)":0,"weekly (7d)":1,"weekly fable (7d)":2,"weekly opus (7d)":3,"weekly sonnet (7d)":4};return r.sort((t,r)=>(e[t.name]??99)-(e[r.name]??99)),r}if(e?.toLowerCase()==="commandcode"){let e={"session (5h)":0,"weekly (7d)":1,"Monthly Credits":2,"Purchased Credits":3};return r.sort((t,r)=>(e[t.name]??99)-(e[r.name]??99)),r}let a=(0,m.KC)(e);if(a.length>0){let e=new Map(a.map((e,t)=>[e.id,t]));r.sort((t,r)=>{let a=t.modelKey||t.name,n=r.modelKey||r.name;return(e.get(a)??999)-(e.get(n)??999)})}return r}(t,s),plan:s.plan||null,message:s.message||null,raw:s,cachedAt:new Date().toISOString()};u(t=>({...t,[e]:i})),ei(e,i)}catch(r){console.error(`[ProviderLimits] Error fetching quota for ${t} (${e}):`,r),T(t=>({...t,[e]:r.message||"Failed to fetch quota"}))}finally{f(t=>({...t,[e]:!1}))}},[]),[tu]=(0,n.useState)(()=>(function(e=4){let t=0,r=[],a=()=>{if(t>=e||0===r.length)return;t+=1;let{fn:n,resolve:s,reject:i}=r.shift();Promise.resolve().then(n).then(s,i).finally(()=>{t-=1,a()})};return e=>new Promise((t,n)=>{r.push({fn:e,resolve:t,reject:n}),a()})})()),tm=(0,n.useRef)(new Set),tx=(0,n.useRef)(new Map),tp=(0,n.useRef)(null),th=(0,n.useRef)(td);(0,n.useEffect)(()=>{th.current=td},[td]);let tb=(0,n.useCallback)(()=>(tp.current||"u"<typeof IntersectionObserver||(tp.current=new IntersectionObserver(e=>{for(let t of e){let e=t.target.dataset.connId;if(e){if(!t.isIntersecting){tm.current.delete(e);continue}if(tm.current.add(e),tx.current.has(e)){let t=tx.current.get(e);tx.current.delete(e),tu(()=>th.current(e,t))}}}},{rootMargin:"200px 0px"})),tp.current),[tu]);(0,n.useEffect)(()=>()=>tp.current?.disconnect(),[]);let tg=(0,n.useCallback)(e=>{let t=tb();if(e&&t)return t.observe(e),()=>{t.unobserve(e),tm.current.delete(e.dataset.connId)}},[tb]),tf=(0,n.useCallback)((e,{lazy:t=!0,skipFreshFrom:r=null}={})=>{let a="u">typeof IntersectionObserver,n=[];for(let s of e)if(!(r&&function(e,t=Date.now(),r=6e4){let a=en(e);return a>0&&t-a<r}(r[s.id]))){if(t&&a&&!tm.current.has(s.id)){tx.current.set(s.id,s.provider);continue}tx.current.delete(s.id),n.push(tu(()=>th.current(s.id,s.provider)))}return Promise.all(n)},[tu]),ty=(0,n.useCallback)(async(e,t)=>{await td(e,t,{force:!0}),R(new Date)},[td]),tw=(0,n.useCallback)(async(e,t)=>{if(("codex"===t||"claude"===t)&&!G){el(e),T(t=>({...t,[e]:null}));try{let r="claude"===t?await fetch(`/api/usage/${e}/claude-reset`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grantId:c[e]?.raw?.resetCredits?.nextGrantId})}):await fetch(`/api/usage/${e}/codex-reset-credits`,{method:"POST"}),a=await r.json().catch(()=>({}));if(!r.ok)throw Error(a.message||a.error||a.code||"Failed to reset limit");await td(e,t,{force:!0}),R(new Date)}catch(t){T(r=>({...r,[e]:t.message||"Failed to reset limit"}))}finally{el(null)}}},[td,G,c]),tv=(0,n.useCallback)((e,t)=>{eS({connection:e,loading:!1,error:null,data:{kind:"claude",...t}})},[]),tk=(0,n.useCallback)(async e=>{eS({connection:e,loading:!0,error:null,data:null});try{let t=await fetch(`/api/usage/${e.id}/codex-reset-credits`,{cache:"no-store"}),r=await t.json().catch(()=>({}));if(!t.ok)throw Error(r.error||r.message||"Failed to load Codex reset credits");let a=Array.isArray(r.credits)?[...r.credits]:[];a.sort((e,t)=>{let r=e.expiresAt?new Date(e.expiresAt).getTime():1/0,a=t.expiresAt?new Date(t.expiresAt).getTime():1/0;return r-a}),eS({connection:e,loading:!1,error:null,data:{...r,credits:a}})}catch(t){eS({connection:e,loading:!1,error:t.message||"Failed to load Codex reset credits",data:null})}},[]),tj=(0,n.useCallback)(async e=>{if(confirm("Delete this connection?")){K(e);try{if((await fetch(`/api/providers/${e}`,{method:"DELETE"})).ok){u(t=>{let r={...t};return delete r[e],r}),f(t=>{let r={...t};return delete r[e],r}),T(t=>{let r={...t};return delete r[e],r});try{let t=function(){try{let e=window.localStorage.getItem(p);return e?JSON.parse(e):{}}catch(e){return console.error("Error reading quota cache:",e),{}}}();t[e]&&(delete t[e],window.localStorage.setItem(p,JSON.stringify(t)))}catch(e){console.error("Error deleting cache entry:",e)}await j(tc,e6)}}catch(e){console.error("Error deleting connection:",e)}finally{K(null)}}},[tc,e6]),tN=(0,n.useCallback)(async(e,t)=>{Q(e);try{(await fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})})).ok&&(u(e=>({...e})),await j(tc,e6))}catch(e){console.error("Error updating connection status:",e)}finally{Q(null)}},[tc,e6]),tC=(0,n.useCallback)(async e=>{if(!eq?.id)return;let t=eq.id,r=eq.provider;try{(await fetch(`/api/providers/${t}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).ok&&(await tc(),eT(!1),e$(null),ep.wb.includes(r)&&await td(t,r))}catch(e){console.error("Error saving connection:",e)}},[eq,tc,td]);(0,n.useEffect)(()=>{let e=!1;return fetch("/api/proxy-pools?isActive=true",{cache:"no-store"}).then(e=>e.json()).then(t=>{!e&&t?.proxyPools&&eD(t.proxyPools)}).catch(()=>{}),()=>{e=!0}},[]);let tS=(0,n.useCallback)(async(e=!1)=>{if(z)return;L(!0),U(60);let t=to.current+=1,r=Math.round(10);try{let a=await tc(e6);if(!a)return;T(e=>v(e,a)),u(e=>v(e,a)),await tf(a.filter(a=>e||"claude"!==a.provider||t%r==0),{lazy:!e}),R(new Date)}catch(e){console.error("Error refreshing all providers:",e)}finally{L(!1)}},[z,tc,tf,e6]);(0,n.useEffect)(()=>{var e;let t,r=!1,a=(e=er({page:e6,pageSize:e9,accountFilter:eL,providerFilter:eO}),(t=ee(X))&&t.key===e&&Array.isArray(t.connections)?t:null);return a?(o(a.connections),ez(a.providerOptions||[]),a.pagination&&ta(a.pagination),a.totals&&ts(a.totals),u(e=>({...es(a.connections),...e})),J(!1)):J(!0),(async()=>{let e=await tc(e6);if(r||(J(!1),!e))return;let t=es(e);T(t=>v(t,e)),u(r=>({...t,...v(r,e)})),await tf(e,{skipFreshFrom:t}),r||R(new Date)})(),()=>{r=!0}},[tc,tf,e6,e9,eL,eO]),(0,n.useEffect)(()=>{let e=window.localStorage.getItem(h);$(null===e||"true"===e),_(!0)},[]),(0,n.useEffect)(()=>{O&&window.localStorage.setItem(h,String(q))},[q,O]),(0,n.useEffect)(()=>{fetch("/api/settings",{cache:"no-store"}).then(e=>e.ok?e.json():{}).then(e=>{D({claude:e?.claudeAutoPing?.connections||{},codex:e?.codexAutoPing?.connections||{}}),eG(e?.quotaVisibility||{})}).catch(()=>{})},[]);let tA=(0,n.useCallback)(async(e,t,r)=>{let a=eg[t];if(!a)return;let n={...P[t]||{},[e]:r};D({...P,[t]:n});try{let e=await fetch("/api/settings",{cache:"no-store"}),t={...(e.ok?await e.json():{})[a]||{},connections:n};await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({[a]:t})})}catch{D(P)}},[P]);(0,n.useCallback)(async(e,t)=>{eG(e);try{if(!(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({quotaVisibility:e})})).ok)throw Error("Failed to update quota visibility")}catch(e){console.error("Error updating quota visibility:",e),eG(t)}},[]);let tT=(0,n.useCallback)((e,t)=>{e&&eG(r=>{let a=r[e]||{},n=t(new Set(a.hidden||[])),s={...r,[e]:{...a,hidden:[...n]}};return(async()=>{try{if(!(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({quotaVisibility:s})})).ok)throw Error("Failed to update quota visibility")}catch(e){console.error("Error updating quota visibility:",e),eG(r)}})(),s})},[]),tq=(e,t)=>{if("gemini"===t)for(let t of e)t.startsWith("gemini-")&&!t.includes("image")&&e.delete(t);else if("claude"===t)for(let t of e)(t.startsWith("claude-")||t.startsWith("gpt-"))&&e.delete(t)},t$=(0,n.useCallback)((e,t,r)=>{let a=C(t);e&&a&&tT(e,e=>(e.add(a),"antigravity"===r&&tq(e,a),e))},[tT]),tP=(0,n.useCallback)(e=>{e&&tT(e,()=>new Set)},[tT]),tD=(0,n.useCallback)((e,t,r)=>{let a=C(t);e&&a&&tT(e,e=>(e.delete(a),"antigravity"===r&&tq(e,a),e))},[tT]);(0,n.useCallback)((e,t)=>{e.length&&eG(r=>{let a={...r},n=!1;for(let r of e){let e=a[r]||{},s=t(r,e);if(null===s)continue;let i=e.hidden||[];(s.length!==i.length||s.some((e,t)=>e!==i[t]))&&(a[r]={...e,hidden:s},n=!0)}return n?((async()=>{try{if(!(await fetch("/api/settings",{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({quotaVisibility:a})})).ok)throw Error("Failed to update quota visibility")}catch(e){console.error("Error updating quota visibility:",e),eG(r)}})(),a):r})},[]),(0,n.useEffect)(()=>{if(!O||!q){ti.current&&(clearInterval(ti.current),ti.current=null),tl.current&&(clearInterval(tl.current),tl.current=null);return}return ti.current=setInterval(()=>{tS()},6e4),tl.current=setInterval(()=>{U(e=>e<=1?60:e-1)},1e3),()=>{ti.current&&clearInterval(ti.current),tl.current&&clearInterval(tl.current)}},[q,tS,O]),(0,n.useEffect)(()=>{let e=()=>{document.hidden?(ti.current&&(clearInterval(ti.current),ti.current=null),tl.current&&(clearInterval(tl.current),tl.current=null)):q&&O&&(ti.current=setInterval(()=>tS(),6e4),tl.current=setInterval(()=>{U(e=>e<=1?60:e-1)},1e3))};return document.addEventListener("visibilitychange",e),()=>{document.removeEventListener("visibilitychange",e)}},[q,tS,O]);let tM=(0,n.useMemo)(()=>(function(e,t,r,a,n){if("codex"===a&&"default"!==n)return[...e].sort((e,r)=>{let a=w(e,t),s=w(r,t),i="remaining-asc"===n?a-s:s-a;return 0!==i?i:(y(e)||"").localeCompare(y(r)||"")});if(!r){let t=new Map;for(let r of e){let e=r.provider||"";t.has(e)||t.set(e,[]),t.get(e).push(r)}return Array.from(t.values()).flat()}let s=e=>{let r=(t[e.id]?.quotas||[]).map(e=>e.resetAt?new Date(e.resetAt).getTime():1/0).filter(e=>Number.isFinite(e));return r.length>0?Math.min(...r):1/0};return[...e].sort((e,t)=>{let r=s(e)-s(t);return 0!==r?r:(e.provider||"").localeCompare(t.provider||"")||(y(e)||"").localeCompare(y(t)||"")})})(r,c,eY,eO,eU),[r,c,eY,eO,eU]),tE=(0,n.useMemo)(()=>eX?tM.filter(e=>{if(g[e.id]||A[e.id])return!0;let t=c[e.id];return!t||(t.quotas?.length??0)>0}):tM,[tM,eX,g,A,c]),tR=e=>{let t=c[e.id]?.quotas;if(!t?.length)return!1;let r=t.filter(e=>!0!==e.unlimited);return 0!==r.length&&r.every(e=>{let t=e.total||0;return t<=0||(e.used||0)>=t})},tO=(0,n.useCallback)(async(e,t)=>{if(e.length&&!e1){e5(!0);try{await Promise.all(e.map(e=>fetch(`/api/providers/${e}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({isActive:t})}))),await j(tc,e6)}catch(e){console.error("Error bulk toggling connections:",e)}finally{e5(!1)}}},[e1,tc,e6]),tF="all"===eO?"All providers":eO,t_=tn.eligibleConnections>0,tI=tE.length>0,tz=tn.eligibleConnections?tn.providerFilteredConnections?{icon:"filter_alt_off",title:"No Accounts On This Page",description:"Try moving to another page or refreshing the current filters."}:{icon:"filter_alt_off",title:"No Accounts Match Current Filters",description:"all"===eO?"Try changing the account status filter to see more quota trackers.":`No ${"inactive"===eL?"turned off":"active"===eL?"active":"matching"} accounts found for ${eO}.`}:{icon:"cloud_off",title:"No Providers Connected",description:"Connect to providers with OAuth to track your API quota limits and usage."},tL=({start:e,end:t,total:r})=>(0,d.Tl)("Showing {start}-{end} of {total}").replace("{start}",String(e)).replace("{end}",String(t)).replace("{total}",String(r)),tH=function(e,t=k){var r;let{start:a,end:n}=(r=e).total?{start:(r.page-1)*r.pageSize+1,end:Math.min(r.page*r.pageSize,r.total)}:{start:0,end:0};return t({start:a,end:n,total:e.total})}(tr,tL),tU=tE.length!==tM.length,tB=function(e,t,r=k){let a=Math.max(0,Number(e)||0);if(0===a)return r({start:0,end:0,total:0});let n=Math.max(1,Number(t)||a);return r({start:1,end:Math.min(a,n),total:a})}(tE.length,e9,tL),tJ=!b.includes(e9),tW=B||t_?B||tI?null:(0,a.jsx)(F.default,{padding:"lg",children:(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:tz.icon}),(0,a.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text",children:tz.title}),(0,a.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:tz.description})]})}):(0,a.jsx)(F.default,{padding:"lg",children:(0,a.jsxs)("div",{className:"text-center py-12",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[64px] text-text-muted opacity-20",children:"cloud_off"}),(0,a.jsx)("h3",{className:"mt-4 text-lg font-semibold text-text",children:"No Providers Connected"}),(0,a.jsx)("p",{className:"mt-2 text-sm text-text-muted max-w-md mx-auto",children:"Connect to providers with OAuth to track your API quota limits and usage."})]})});return(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(E,{view:eJ,onViewChange:eW,providerFilter:eO,providerOptions:eI,providerLabel:"all"===eO?(0,d.Tl)("All providers"):tF,onProviderChange:e=>{eO!==e&&e8(1),e_(e)},accountFilter:eL,onAccountChange:e=>{eL!==e&&e8(1),eH(e)},showCodexSort:"codex"===eO,quotaSortMode:eU,onQuotaSortChange:eB,expiringFirst:eY,onToggleExpiringFirst:()=>eZ(e=>!e),onDisableDepleted:()=>{tO(tM.filter(e=>(e.isActive??!0)&&tR(e)).map(e=>e.id),!1)},onEnableAvailable:()=>{tO(tM.filter(e=>!(e.isActive??!0)&&!tR(e)).map(e=>e.id),!0)},bulkToggling:e1,autoRefresh:q,onToggleAutoRefresh:()=>$(e=>!e),countdown:H,refreshingAll:z,onRefreshAll:()=>"windows"===eJ?eV(e=>e+1):tS(!0),accountCount:tr.total}),"windows"===eJ?(0,a.jsx)(Y,{providerFilter:eO,accountFilter:eL,refreshKey:eK,showTrackerLink:!1}):(0,a.jsxs)(a.Fragment,{children:[tW&&(0,a.jsx)("div",{className:"pt-2",children:tW}),!tW&&(0,a.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:tE.map(r=>{let n,s,o,u=c[r.id],m=!!g[r.id],p=A[r.id],h=!u&&!p,b=!1===r.isActive,f=(0,Z._)(r).state,w="codex"===r.provider,v="claude"===r.provider?u?.raw?.resetCredits:null,k=w?"Codex reset credit":"Claude limit reset",j=Number.isFinite(s="number"==typeof(n=u?.raw?.resetCredits?.availableCount)?n:Number(n))?Math.max(0,s):0,N=G===r.id,T=W===r.id||V===r.id||N,q=u?.quotas||[],$=function(e,t=[],r={},a){if(!Array.isArray(t)||0===t.length)return[];let n=S(e,r,a,t);return 0===n.size?t:t.filter(e=>!n.has(C(e)))}(r.id,q,eQ,r.provider),D=function(e,t=[],r={},a){if(!Array.isArray(t)||0===t.length)return[];let n=S(e,r,a,t);return 0===n.size?[]:t.filter(e=>n.has(C(e)))}(r.id,q,eQ,r.provider),M=(0,x.PZ)($),E=(0,x.qz)($);return(0,a.jsxs)(F.default,{ref:tg,"data-conn-id":r.id,padding:"none",className:`min-w-0 ${b?"opacity-60":""}`,children:[(0,a.jsx)("div",{className:"px-3 py-2 border-b border-black/10 dark:border-white/10",children:(0,a.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,a.jsxs)("div",{className:"flex items-center gap-2 min-w-0",children:[(0,a.jsx)("div",{className:"w-8 h-8 shrink-0 rounded-md flex items-center justify-center overflow-hidden",children:(0,a.jsx)(i.A,{src:`/providers/${r.provider}.png`,alt:r.provider,size:32,className:"object-contain",fallbackText:r.provider?.slice(0,2).toUpperCase()||"PR"})}),(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h3",{className:"text-sm font-semibold text-text truncate",children:eC[r.provider]||(0,a.jsx)("span",{className:"capitalize",children:r.provider})}),y(r)?(0,a.jsx)("p",{className:"text-xs text-text-muted truncate",children:y(r)}):null,ey(r)?(0,a.jsx)("p",{className:"text-[11px] text-text-muted/80 truncate",children:ey(r)}):null,"kiro"===r.provider&&(0,a.jsxs)("div",{className:"mt-1 flex flex-wrap items-center gap-1",children:[(0,a.jsx)("span",{className:"rounded-full bg-brand-500/10 px-2 py-0.5 text-[10px] font-semibold text-brand-600 dark:text-brand-300",children:(o=r.providerSpecificData?.authMethod)&&eb[o]?eb[o]:"api_key"===r.authType?"API Key":"OAuth"}),ew(r)&&(0,a.jsx)("span",{className:"rounded-full bg-blue-500/10 px-2 py-0.5 text-[10px] font-semibold text-blue-600 dark:text-blue-400",children:ew(r)}),(0,a.jsx)("span",{className:`rounded-full px-2 py-0.5 text-[10px] font-semibold ${b?"bg-surface-2 text-text-muted":"active"===f||"success"===f?"bg-green-500/10 text-green-600 dark:text-green-400":"partial"===f?"bg-yellow-500/10 text-yellow-600 dark:text-yellow-400":"error"===f||"expired"===f||"unavailable"===f?"bg-red-500/10 text-red-600 dark:text-red-400":"bg-surface-2 text-text-muted"}`,children:b?"disabled":"partial"===f?"partial":f||"unknown"}),r.providerSpecificData?.profileArn&&(0,a.jsxs)("button",{type:"button",onClick:()=>t(r.providerSpecificData.profileArn,r.id),title:r.providerSpecificData.profileArn,className:"inline-flex max-w-full items-center gap-1 rounded-full border border-border-subtle px-2 py-0.5 text-[10px] text-text-muted transition-colors hover:text-primary",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[12px]",children:e===r.id?"check":"content_copy"}),(0,a.jsx)("code",{className:"truncate font-mono",children:r.providerSpecificData.profileArn})]})]})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1 shrink-0",children:[(w||v)&&(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(em.default,{text:j>0?v?`Use your reset now (${j} left, use by ${ej(v.expiresAt)}) \xb7 refills ${ek(v.clears)}`:`Use one ${k}. Available: ${j}`:`No ${k}s available`,children:(0,a.jsxs)("button",{type:"button",onClick:()=>ec({connection:r,resetCreditCount:j}),disabled:j<=0||h||m||T,"aria-label":j>0?`Use one ${k}. ${j} available.`:`No ${k}s available`,className:`flex h-8 min-w-10 items-center justify-center gap-1 rounded-lg border px-2 text-[11px] font-medium tabular-nums transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary/60 disabled:cursor-not-allowed disabled:opacity-60 ${j>0?"border-primary/30 bg-primary/5 text-primary hover:bg-primary/10":"border-black/10 bg-black/[0.02] text-text-muted dark:border-white/10 dark:bg-white/[0.03]"}`,children:[(0,a.jsx)("span",{className:`material-symbols-outlined text-[15px] ${N?"animate-spin":""}`,children:N?"progress_activity":"restart_alt"}),(0,a.jsx)("span",{children:j})]})}),(0,a.jsx)(em.default,{text:w?"View Codex reset credit expiry":"View Claude Code reset expiry",children:(0,a.jsx)("button",{type:"button",onClick:()=>w?tk(r):tv(r,v),disabled:h||T,"aria-label":w?"View Codex reset credit expiry":"View Claude Code reset expiry",className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text-muted transition-colors hover:bg-black/5 hover:text-primary disabled:cursor-not-allowed disabled:opacity-50 dark:border-white/10 dark:hover:bg-white/5",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[17px]",children:"schedule"})})})]}),eg[r.provider]&&"oauth"===r.authType&&(0,a.jsx)(em.default,{text:ef[r.provider],children:(0,a.jsx)("button",{type:"button",onClick:()=>tA(r.id,r.provider,P[r.provider]?.[r.id]!==!0),"aria-label":"Toggle auto-ping",className:`flex h-8 w-8 items-center justify-center rounded-lg transition-colors hover:bg-black/5 dark:hover:bg-white/5 ${P[r.provider]?.[r.id]===!0?"text-primary":"text-text-muted"}`,children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"bolt"})})}),(0,a.jsx)(em.default,{text:"Refresh quota",children:(0,a.jsx)("button",{type:"button",onClick:()=>ty(r.id,r.provider),disabled:m||T,"aria-label":"Refresh quota",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-black/5 dark:hover:bg-white/5 transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[18px] text-text-muted ${m||h?"animate-spin":""}`,children:"refresh"})})}),(0,a.jsx)(em.default,{text:"Edit connection",children:(0,a.jsx)("button",{type:"button",onClick:()=>{e$(r),eT(!0)},disabled:T,"aria-label":"Edit connection",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-black/5 dark:hover:bg-white/5 text-text-muted hover:text-primary transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"edit"})})}),(0,a.jsx)(em.default,{text:"Delete connection",children:(0,a.jsx)("button",{type:"button",onClick:()=>tj(r.id),disabled:T,"aria-label":"Delete connection",className:"flex h-8 w-8 items-center justify-center rounded-lg hover:bg-red-500/10 text-red-500 transition-colors disabled:opacity-50",children:(0,a.jsx)("span",{className:`material-symbols-outlined text-[18px] ${W===r.id?"animate-pulse":""}`,children:"delete"})})}),(0,a.jsx)("div",{className:"inline-flex items-center pl-0.5",title:r.isActive??!0?"Disable connection":"Enable connection",children:(0,a.jsx)(eu.default,{size:"sm",checked:r.isActive??!0,disabled:T,onChange:e=>tN(r.id,e)})})]})]})}),u&&$.length>0&&(0,a.jsx)("div",{className:"px-3 pt-2.5",children:(0,a.jsx)(l.default,{packs:$,nestedCycle:e0})}),(0,a.jsxs)("div",{className:"px-2 py-1.5",children:[u?.raw?.webSessionExpired===!0&&(0,a.jsxs)("p",{className:"px-1 pb-1 text-[11px] text-amber-600 dark:text-amber-400",children:[(0,a.jsx)("span",{className:"material-symbols-outlined align-[-2px] text-[13px]",children:"warning"})," ",(0,d.Tl)("Synced CreditDaddy web session expired — plan credits may read low or missing. Re-export the account from CreditDaddy after logging in to Qoder web again.")]}),p&&u&&(0,a.jsxs)("p",{className:"px-1 pb-1 text-[11px] text-red-500/80",children:[(0,d.Tl)("Update failed, showing last known")," \xb7 ",p]}),h?(0,a.jsx)("div",{className:"text-center py-5 text-text-muted",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[28px] animate-spin",children:"progress_activity"})}):p&&!u?(0,a.jsxs)("div",{className:"text-center py-5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[28px] text-red-500",children:"error"}),(0,a.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:p})]}):u?.message?(0,a.jsx)("div",{className:"text-center py-5",children:(0,a.jsx)("p",{className:"text-xs text-text-muted",children:u.message})}):(0,a.jsxs)(a.Fragment,{children:[0===$.length&&q.length>0&&(0,a.jsxs)("div",{className:"text-center py-5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[28px] text-text-muted opacity-40",children:"visibility_off"}),(0,a.jsx)("p",{className:"mt-1.5 text-xs text-text-muted",children:(0,d.Tl)("All quota rows are hidden — use the chips below to show them")})]}),E&&(0,a.jsxs)("button",{type:"button",onClick:()=>e4(r.id),className:"flex w-full items-center gap-1 rounded-lg py-1.5 text-[11px] text-text-muted transition-colors hover:bg-black/5 hover:text-text dark:hover:bg-white/5","aria-expanded":e2.has(r.id),children:[(0,a.jsx)("span",{className:"material-symbols-outlined text-[14px]",children:e2.has(r.id)?"expand_less":"expand_more"}),(0,d.Tl)("Per-pack details"),(0,a.jsxs)("span",{className:"tabular-nums opacity-60",children:["(",M.length,")"]})]}),E&&e2.has(r.id)&&(0,a.jsx)(ed,{quotas:M,sortMode:"default",showSortLabel:"codex"===r.provider&&"default"!==eU,onHideQuota:e=>t$(r.id,e,r.provider)})]}),D.length>0&&(0,a.jsxs)("div",{className:"mt-1 flex min-w-0 items-center gap-1.5 border-t border-black/5 pt-1.5 text-[11px] text-text-muted dark:border-white/5",children:[(0,a.jsx)("span",{className:"material-symbols-outlined shrink-0 text-[14px]",children:"visibility_off"}),(0,a.jsxs)("span",{className:"shrink-0",children:[(0,d.Tl)("Hidden"),(0,a.jsxs)("span",{className:"tabular-nums opacity-60",children:[" (",D.length,")"]})]}),(0,a.jsx)("div",{className:"flex min-w-0 flex-1 items-center gap-1 overflow-x-auto whitespace-nowrap",children:D.map(e=>(0,a.jsx)("button",{type:"button",onClick:()=>tD(r.id,e,r.provider),className:"shrink-0 rounded-[3px] bg-black/5 px-1.5 py-px transition-colors hover:bg-black/10 hover:text-text dark:bg-white/5 dark:hover:bg-white/10",title:(0,d.Tl)("Show this quota row"),children:(0,I.M)(e.name)},C(e)))}),D.length>1&&(0,a.jsx)("button",{type:"button",onClick:()=>tP(r.id),className:"shrink-0 rounded-md px-1.5 py-px transition-colors hover:bg-black/5 hover:text-text dark:hover:bg-white/5",children:(0,d.Tl)("Show all")})]})]})]},r.id)})}),(0,a.jsx)("div",{className:"rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 dark:border-white/10 dark:bg-white/[0.03]",children:(0,a.jsxs)("div",{className:"flex flex-wrap items-center justify-between gap-2",children:[(0,a.jsx)("span",{className:"text-xs text-text-muted",children:tU?tB:tH}),(0,a.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,a.jsxs)("select",{value:tJ?"custom":String(e9),onChange:e=>{let t=e.target.value;if("custom"===t)return;let r=Number.parseInt(t,10);Number.isFinite(r)&&(e8(1),e7(r),tt(String(r)))},className:"h-8 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Accounts per page",children:[b.map(e=>(0,a.jsx)("option",{value:String(e),children:(0,d.Tl)("{count} / page").replace("{count}",String(e))},e)),(0,a.jsx)("option",{value:"custom",children:"Custom"})]}),(0,a.jsx)("input",{type:"number",min:"1",max:String(500),inputMode:"numeric",value:te,onChange:e=>tt(e.target.value),onBlur:()=>{let e=Number.parseInt(te,10);if(!Number.isFinite(e))return void tt(String(e9));let t=Math.min(500,Math.max(1,e));e8(1),e7(t),tt(String(t))},onKeyDown:e=>{if("Enter"!==e.key)return;let t=Number.parseInt(te,10);if(!Number.isFinite(t))return void tt(String(e9));let r=Math.min(500,Math.max(1,t));e8(1),e7(r),tt(String(r))},className:"h-8 w-20 rounded-lg border border-black/10 bg-black/[0.02] px-2 text-xs text-text outline-none transition-colors hover:bg-black/5 dark:border-white/10 dark:bg-white/[0.03] dark:hover:bg-white/10","aria-label":"Custom accounts per page",placeholder:"Custom"}),(0,a.jsx)("span",{className:"text-xs text-text-muted",children:(0,d.Tl)("Page {page} / {total}").replace("{page}",String(tr.page)).replace("{total}",String(tr.totalPages))})]}),(0,a.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,a.jsx)("button",{type:"button",onClick:()=>e8(1),disabled:tr.page<=1||B||z,className:"flex h-8 items-center rounded-lg border border-black/10 px-3 text-xs text-text transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"First Page"}),(0,a.jsx)("button",{type:"button",onClick:()=>e8(e=>Math.max(1,e-1)),disabled:tr.page<=1||B||z,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5","aria-label":"Previous accounts page",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_left"})}),(0,a.jsx)("button",{type:"button",onClick:()=>e8(e=>Math.min(tr.totalPages,e+1)),disabled:tr.page>=tr.totalPages||B||z,className:"flex h-8 w-8 items-center justify-center rounded-lg border border-black/10 text-text transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5","aria-label":"Next accounts page",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[16px]",children:"chevron_right"})}),(0,a.jsx)("button",{type:"button",onClick:()=>e8(tr.totalPages),disabled:tr.page>=tr.totalPages||B||z,className:"flex h-8 items-center rounded-lg border border-black/10 px-3 text-xs text-text transition-colors hover:bg-black/5 disabled:cursor-not-allowed disabled:opacity-40 dark:border-white/10 dark:hover:bg-white/5",children:"Last Page"})]})]})})]}),(0,a.jsx)(ex.uo,{isOpen:!!eo,onClose:()=>{G||ec(null)},onConfirm:async()=>{let e=eo?.connection;e&&(await tw(e.id,e.provider),ec(null))},title:eo?.connection?.provider==="claude"?"Reset Claude limits?":"Reset Codex limit?",message:eo?.connection?.provider==="claude"?`Refills your ${ek(c[eo.connection.id]?.raw?.resetCredits?.clears)} now for ${y(eo.connection)||"this account"} \xb7 your weekly reset day stays ${ej(c[eo.connection.id]?.raw?.resetCredits?.weeklyResetsAt)}. This cannot be undone. Resets left: ${eo.resetCreditCount??0}.`:`Use 1 Codex reset credit for ${y(eo?.connection||{})||"this account"}. This cannot be undone. Remaining credits: ${eo?.resetCreditCount??0}.`,confirmText:"Reset limit",cancelText:"Cancel",variant:"danger",loading:!!G}),ev&&(0,a.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60 px-4 backdrop-blur-sm",children:(0,a.jsxs)("div",{className:"w-full max-w-2xl overflow-hidden rounded-2xl border border-black/15 bg-white shadow-2xl ring-1 ring-black/10 dark:border-white/15 dark:bg-neutral-950 dark:ring-white/10",children:[(0,a.jsxs)("div",{className:"flex items-start justify-between gap-3 border-b border-black/10 bg-black/[0.03] px-4 py-3 dark:border-white/10 dark:bg-white/[0.04]",children:[(0,a.jsxs)("div",{className:"min-w-0",children:[(0,a.jsx)("h3",{className:"text-base font-semibold text-text",children:ev.data?.kind==="claude"?"Claude Code Limit Resets":"Codex Reset Credit Expiry"}),(0,a.jsx)("p",{className:"mt-0.5 truncate text-xs text-text-muted",children:y(ev.connection)||(ev.data?.kind==="claude"?"Claude account":"Codex account")})]}),(0,a.jsx)("button",{type:"button",onClick:()=>eS(null),className:"flex h-8 w-8 items-center justify-center rounded-lg text-text-muted transition-colors hover:bg-black/5 hover:text-text dark:hover:bg-white/5","aria-label":"Close reset credit expiry modal",children:(0,a.jsx)("span",{className:"material-symbols-outlined text-[18px]",children:"close"})})]}),(0,a.jsx)("div",{className:"max-h-[70vh] overflow-auto bg-white p-4 dark:bg-neutral-950",children:ev.loading?(0,a.jsxs)("div",{className:"flex items-center justify-center gap-2 py-10 text-sm text-text-muted",children:[(0,a.jsx)("span",{className:"material-symbols-outlined animate-spin text-[20px]",children:"progress_activity"}),"Loading reset credits..."]}):ev.error?(0,a.jsx)("div",{className:"rounded-xl border border-red-500/20 bg-red-500/10 px-3 py-2 text-sm text-red-600 dark:text-red-300",children:ev.error}):ev.data?.kind==="claude"&&ev.data.grants?.length?(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:[(0,a.jsxs)("span",{children:[ev.data.availableCount??0," reset",1===ev.data.availableCount?"":"s"," left"]}),(0,a.jsxs)("span",{children:["Weekly reset day: ",ej(ev.data.weeklyResetsAt)]})]}),(0,a.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,a.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,a.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Reset"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Left"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Refills"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Use By"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,a.jsx)("tbody",{children:(ev.data.grants||[]).map(e=>(0,a.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,a.jsxs)("td",{className:"px-3 py-2",children:[(0,a.jsx)("div",{className:"text-text",children:e.label||e.id}),(0,a.jsx)("span",{className:"mt-1 inline-block rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:e.resetsLeft<=0?"used":e.paused?"paused":e.endsAt&&new Date(e.endsAt).getTime()<=Date.now()?"expired":e.usableNow?"usable now":e.startsAt&&new Date(e.startsAt).getTime()>Date.now()?"not started":e.useRequiresLimit?"at limit only":"unavailable"})]}),(0,a.jsxs)("td",{className:"whitespace-nowrap px-3 py-2 font-medium tabular-nums text-text",children:[e.resetsLeft," / ",e.resetsTotal]}),(0,a.jsx)("td",{className:"px-3 py-2 text-text-muted",children:ek(e.clears)}),(0,a.jsx)("td",{className:"px-3 py-2 text-text",children:ej(e.endsAt)}),(0,a.jsx)("td",{className:"whitespace-nowrap px-3 py-2 font-medium text-text",children:eN(e.endsAt)})]},e.id))})]})})]}):ev.data?.credits?.length?(0,a.jsxs)("div",{className:"space-y-3",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between rounded-xl border border-black/10 bg-black/[0.02] px-3 py-2 text-xs text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:[(0,a.jsxs)("span",{children:[ev.data.credits.length," reset credit",1===ev.data.credits.length?"":"s"]}),(0,a.jsxs)("span",{children:[ev.data.availableCount??0," available"]})]}),(0,a.jsx)("div",{className:"overflow-x-auto rounded-xl border border-black/10 dark:border-white/10",children:(0,a.jsxs)("table",{className:"w-full min-w-[560px] text-left text-sm",children:[(0,a.jsx)("thead",{className:"bg-black/[0.03] text-xs uppercase tracking-wide text-text-muted dark:bg-white/[0.04]",children:(0,a.jsxs)("tr",{children:[(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Status"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Granted At"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Expires At"}),(0,a.jsx)("th",{className:"px-3 py-2 font-medium",children:"Remaining"})]})}),(0,a.jsx)("tbody",{children:ev.data.credits.map((e,t)=>(0,a.jsxs)("tr",{className:"border-t border-black/5 dark:border-white/5",children:[(0,a.jsx)("td",{className:"px-3 py-2",children:(0,a.jsx)("span",{className:"rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",children:e.status||"unknown"})}),(0,a.jsx)("td",{className:"px-3 py-2 text-text-muted",children:ej(e.grantedAt)}),(0,a.jsx)("td",{className:"px-3 py-2 text-text",children:ej(e.expiresAt)}),(0,a.jsx)("td",{className:"px-3 py-2 font-medium text-text",children:eN(e.expiresAt)})]},`${e.status}-${e.expiresAt||t}`))})]})})]}):(0,a.jsx)("div",{className:"rounded-xl border border-black/10 bg-black/[0.02] px-3 py-8 text-center text-sm text-text-muted dark:border-white/10 dark:bg-white/[0.03]",children:ev.data?.kind==="claude"?"No limit resets available for this account.":"No reset credit details returned for this account."})})]})}),(0,a.jsx)(ex.wI,{isOpen:eA,connection:eq,proxyPools:eP,onSave:tC,onClose:()=>{eT(!1),e$(null)}})]})}}},e=>{e.O(0,[3170,305,1321,5497,6109,8441,3794,7358],()=>e(e.s=26048)),_N_E=e.O()}]);